http://packetstormsecurity.org/UNIX/admin/xscreensaver-4.00.tar.gz
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:42:50 +0000 (00:42 -0500)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Fri, 8 Feb 2013 17:53:46 +0000 (12:53 -0500)
-rw-r--r-- 1 zblaxell zblaxell 1855130 Jan 17  2002 xscreensaver-4.00.tar.gz
f930b6c8b36a26ebc92457ed2772e1a78a2e309b  xscreensaver-4.00.tar.gz

279 files changed:
Makefile.in
README
README.debugging
config.h-vms
config.h.in
configure
configure.in
driver/Makefile.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/demo-Gtk-conf.c [new file with mode: 0644]
driver/demo-Gtk-conf.h [new file with mode: 0644]
driver/demo-Gtk-stubs.h
driver/demo-Gtk-support.c [new file with mode: 0644]
driver/demo-Gtk-support.h [new file with mode: 0644]
driver/demo-Gtk-widgets.c
driver/demo-Gtk-widgets.h
driver/demo-Gtk.c
driver/demo-Xm-widgets.c
driver/lock.c
driver/prefs.c
driver/prefs.h
driver/splash.c
driver/subprocs.c
driver/test-fade.c
driver/test-passwd.c
driver/timers.c
driver/windows.c
driver/xscreensaver-command.c
driver/xscreensaver-command.man
driver/xscreensaver-demo.glade
driver/xscreensaver-demo.man
driver/xscreensaver-getimage-file
driver/xscreensaver-getimage-file.man
driver/xscreensaver-getimage-video
driver/xscreensaver-getimage-video.man
driver/xscreensaver-getimage.c
driver/xscreensaver-getimage.man
driver/xscreensaver.c
driver/xscreensaver.h
driver/xscreensaver.man
hacks/Makefile.in
hacks/blaster.c
hacks/bsod.c
hacks/compile_axp.com
hacks/compile_decc.com
hacks/config/README [new file with mode: 0644]
hacks/config/ant.xml [new file with mode: 0644]
hacks/config/atlantis.xml [new file with mode: 0644]
hacks/config/attraction.xml [new file with mode: 0644]
hacks/config/blaster.xml [new file with mode: 0644]
hacks/config/blitspin.xml [new file with mode: 0644]
hacks/config/bouboule.xml [new file with mode: 0644]
hacks/config/braid.xml [new file with mode: 0644]
hacks/config/bsod.xml [new file with mode: 0644]
hacks/config/bubble3d.xml [new file with mode: 0644]
hacks/config/bubbles.xml [new file with mode: 0644]
hacks/config/bumps.xml [new file with mode: 0644]
hacks/config/cage.xml [new file with mode: 0644]
hacks/config/ccurve.xml [new file with mode: 0644]
hacks/config/circuit.xml [new file with mode: 0644]
hacks/config/compass.xml [new file with mode: 0644]
hacks/config/coral.xml [new file with mode: 0644]
hacks/config/cosmos.xml [new file with mode: 0644]
hacks/config/critical.xml [new file with mode: 0644]
hacks/config/crystal.xml [new file with mode: 0644]
hacks/config/cynosure.xml [new file with mode: 0644]
hacks/config/dangerball.xml [new file with mode: 0644]
hacks/config/decayscreen.xml [new file with mode: 0644]
hacks/config/deco.xml [new file with mode: 0644]
hacks/config/deluxe.xml [new file with mode: 0644]
hacks/config/demon.xml [new file with mode: 0644]
hacks/config/discrete.xml [new file with mode: 0644]
hacks/config/distort.xml [new file with mode: 0644]
hacks/config/drift.xml [new file with mode: 0644]
hacks/config/electricsheep.xml [new file with mode: 0644]
hacks/config/engine.xml [new file with mode: 0644]
hacks/config/epicycle.xml [new file with mode: 0644]
hacks/config/extrusion.xml [new file with mode: 0644]
hacks/config/fadeplot.xml [new file with mode: 0644]
hacks/config/flag.xml [new file with mode: 0644]
hacks/config/flame.xml [new file with mode: 0644]
hacks/config/flipscreen3d.xml [new file with mode: 0644]
hacks/config/flow.xml [new file with mode: 0644]
hacks/config/forest.xml [new file with mode: 0644]
hacks/config/galaxy.xml [new file with mode: 0644]
hacks/config/gears.xml [new file with mode: 0644]
hacks/config/gflux.xml [new file with mode: 0644]
hacks/config/glplanet.xml [new file with mode: 0644]
hacks/config/gltext.xml [new file with mode: 0644]
hacks/config/goban.xml [new file with mode: 0644]
hacks/config/goop.xml [new file with mode: 0644]
hacks/config/grav.xml [new file with mode: 0644]
hacks/config/greynetic.xml [new file with mode: 0644]
hacks/config/halo.xml [new file with mode: 0644]
hacks/config/helix.xml [new file with mode: 0644]
hacks/config/hopalong.xml [new file with mode: 0644]
hacks/config/hyperball.xml [new file with mode: 0644]
hacks/config/hypercube.xml [new file with mode: 0644]
hacks/config/ifs.xml [new file with mode: 0644]
hacks/config/imsmap.xml [new file with mode: 0644]
hacks/config/interference.xml [new file with mode: 0644]
hacks/config/jigsaw.xml [new file with mode: 0644]
hacks/config/julia.xml [new file with mode: 0644]
hacks/config/kaleidescope.xml [new file with mode: 0644]
hacks/config/kumppa.xml [new file with mode: 0644]
hacks/config/lament.xml [new file with mode: 0644]
hacks/config/laser.xml [new file with mode: 0644]
hacks/config/lightning.xml [new file with mode: 0644]
hacks/config/lisa.xml [new file with mode: 0644]
hacks/config/lissie.xml [new file with mode: 0644]
hacks/config/lmorph.xml [new file with mode: 0644]
hacks/config/loop.xml [new file with mode: 0644]
hacks/config/maze.xml [new file with mode: 0644]
hacks/config/menger.xml [new file with mode: 0644]
hacks/config/moebius.xml [new file with mode: 0644]
hacks/config/moire.xml [new file with mode: 0644]
hacks/config/moire2.xml [new file with mode: 0644]
hacks/config/molecule.xml [new file with mode: 0644]
hacks/config/morph3d.xml [new file with mode: 0644]
hacks/config/mountain.xml [new file with mode: 0644]
hacks/config/munch.xml [new file with mode: 0644]
hacks/config/nerverot.xml [new file with mode: 0644]
hacks/config/noseguy.xml [new file with mode: 0644]
hacks/config/pedal.xml [new file with mode: 0644]
hacks/config/penetrate.xml [new file with mode: 0644]
hacks/config/penrose.xml [new file with mode: 0644]
hacks/config/petri.xml [new file with mode: 0644]
hacks/config/phosphor.xml [new file with mode: 0644]
hacks/config/pipes.xml [new file with mode: 0644]
hacks/config/pulsar.xml [new file with mode: 0644]
hacks/config/pyro.xml [new file with mode: 0644]
hacks/config/qix.xml [new file with mode: 0644]
hacks/config/rd-bomb.xml [new file with mode: 0644]
hacks/config/ripples.xml [new file with mode: 0644]
hacks/config/rocks.xml [new file with mode: 0644]
hacks/config/rorschach.xml [new file with mode: 0644]
hacks/config/rotor.xml [new file with mode: 0644]
hacks/config/rotzoomer.xml [new file with mode: 0644]
hacks/config/rubik.xml [new file with mode: 0644]
hacks/config/shadebobs.xml [new file with mode: 0644]
hacks/config/sierpinski.xml [new file with mode: 0644]
hacks/config/sierpinski3d.xml [new file with mode: 0644]
hacks/config/slidescreen.xml [new file with mode: 0644]
hacks/config/slip.xml [new file with mode: 0644]
hacks/config/sonar.xml [new file with mode: 0644]
hacks/config/speedmine.xml [new file with mode: 0644]
hacks/config/sphere.xml [new file with mode: 0644]
hacks/config/sphereEversion.xml [new file with mode: 0644]
hacks/config/spiral.xml [new file with mode: 0644]
hacks/config/spotlight.xml [new file with mode: 0644]
hacks/config/sproingies.xml [new file with mode: 0644]
hacks/config/squiral.xml [new file with mode: 0644]
hacks/config/ssystem.xml [new file with mode: 0644]
hacks/config/stairs.xml [new file with mode: 0644]
hacks/config/starfish.xml [new file with mode: 0644]
hacks/config/starwars.xml [new file with mode: 0644]
hacks/config/stonerview.xml [new file with mode: 0644]
hacks/config/strange.xml [new file with mode: 0644]
hacks/config/superquadrics.xml [new file with mode: 0644]
hacks/config/swirl.xml [new file with mode: 0644]
hacks/config/t3d.xml [new file with mode: 0644]
hacks/config/triangle.xml [new file with mode: 0644]
hacks/config/truchet.xml [new file with mode: 0644]
hacks/config/vermiculate.xml [new file with mode: 0644]
hacks/config/vidwhacker.xml [new file with mode: 0644]
hacks/config/vines.xml [new file with mode: 0644]
hacks/config/wander.xml [new file with mode: 0644]
hacks/config/webcollage.xml [new file with mode: 0644]
hacks/config/whirlwindwarp.xml [new file with mode: 0644]
hacks/config/whirlygig.xml [new file with mode: 0644]
hacks/config/worm.xml [new file with mode: 0644]
hacks/config/xaos.xml [new file with mode: 0644]
hacks/config/xdaliclock.xml [new file with mode: 0644]
hacks/config/xearth.xml [new file with mode: 0644]
hacks/config/xfishtank.xml [new file with mode: 0644]
hacks/config/xflame.xml [new file with mode: 0644]
hacks/config/xjack.xml [new file with mode: 0644]
hacks/config/xlyap.xml [new file with mode: 0644]
hacks/config/xmatrix.xml [new file with mode: 0644]
hacks/config/xmountains.xml [new file with mode: 0644]
hacks/config/xrayswarm.xml [new file with mode: 0644]
hacks/config/xsnow.xml [new file with mode: 0644]
hacks/config/xspirograph.xml [new file with mode: 0644]
hacks/config/xteevee.xml [new file with mode: 0644]
hacks/config/zoom.xml [new file with mode: 0644]
hacks/crystal.c
hacks/deluxe.c
hacks/distort.c
hacks/glx/Makefile.in
hacks/glx/cage.c
hacks/glx/circuit.c
hacks/glx/engine.c [new file with mode: 0644]
hacks/glx/flipscreen3d.c [new file with mode: 0644]
hacks/glx/font-ximage.c [new file with mode: 0644]
hacks/glx/font-ximage.h [new file with mode: 0644]
hacks/glx/fps.c
hacks/glx/gflux.c
hacks/glx/gflux.man
hacks/glx/glplanet.c
hacks/glx/gltext.c
hacks/glx/grab-ximage.c [new file with mode: 0644]
hacks/glx/grab-ximage.h [new file with mode: 0644]
hacks/glx/menger.c [new file with mode: 0644]
hacks/glx/moebius.c
hacks/glx/molecule.c
hacks/glx/sierpinski3d.c
hacks/glx/stairs.c
hacks/glx/starwars.c
hacks/glx/stonerview-view.c
hacks/glx/xpm-ximage.c
hacks/images/matrix.xbm [deleted file]
hacks/images/matrix.xpm [deleted file]
hacks/images/matrix0.xbm [new file with mode: 0644]
hacks/images/matrix0.xpm [new file with mode: 0644]
hacks/images/matrix0b.xbm [new file with mode: 0644]
hacks/images/matrix0b.xpm [new file with mode: 0644]
hacks/images/matrix1.xbm [new file with mode: 0644]
hacks/images/matrix1.xpm [new file with mode: 0644]
hacks/images/matrix1b.xbm [new file with mode: 0644]
hacks/images/matrix1b.xpm [new file with mode: 0644]
hacks/images/matrix2.xbm
hacks/images/matrix2.xpm
hacks/images/matrix2b.xbm [new file with mode: 0644]
hacks/images/matrix2b.xpm [new file with mode: 0644]
hacks/jigsaw.c
hacks/kumppa.c
hacks/moire.c
hacks/mountain.c
hacks/nerverot.c
hacks/noseguy.c
hacks/phosphor.c
hacks/pyro.c
hacks/ripples.c
hacks/rorschach.c
hacks/rotzoomer.c
hacks/screenhack.c
hacks/slidescreen.c
hacks/sonar.c
hacks/spotlight.c
hacks/t3d.c
hacks/vermiculate.c
hacks/wander.c
hacks/webcollage
hacks/whirlwindwarp.c
hacks/xlockmore.h
hacks/xmatrix.c
hacks/zoom.c
setup.com
utils/Makefile.in
utils/compile_axp.com
utils/compile_decc.com
utils/fade.c
utils/grabclient.c
utils/grabscreen.c
utils/grabscreen.h
utils/images/logo-180.gif [new file with mode: 0644]
utils/images/logo-180.xpm [new file with mode: 0644]
utils/images/logo-50.gif [new file with mode: 0644]
utils/images/logo-50.xpm [new file with mode: 0644]
utils/images/logo-big.gif [new file with mode: 0644]
utils/images/logo.eps [new file with mode: 0644]
utils/images/screensaver-cmndln.xpm [new file with mode: 0644]
utils/images/screensaver-colorselector.xpm [new file with mode: 0644]
utils/images/screensaver-diagnostic.xpm [new file with mode: 0644]
utils/images/screensaver-locking.xpm [new file with mode: 0644]
utils/images/screensaver-power.xpm [new file with mode: 0644]
utils/images/screensaver-snap.xpm [new file with mode: 0644]
utils/logo-180.gif [deleted file]
utils/logo-180.xpm [deleted file]
utils/logo-50.gif [deleted file]
utils/logo-50.xpm [deleted file]
utils/logo-big.gif [deleted file]
utils/logo.c
utils/logo.eps [deleted file]
utils/resources.c
utils/version.h
xscreensaver.lsm
xscreensaver.spec

index c310f27ad91f913082c1432e5fd29d22a01c19ba..c68875c530d0f883dad1c091c954e9426f2a0ebf 100644 (file)
@@ -174,6 +174,7 @@ rpm::
   DIR=`pwd`/rpm_build ;                                                           \
   ARCH=`rpm --showrc | sed -n 's/^build arch *: //p'` ;                           \
   ADIR=archive/ ;                                                         \
+  rm -rf /var/tmp/xscreensaver-$$VERS-root ;                              \
   rm -rf $$DIR ;                                                          \
   mkdir $$DIR ;                                                                   \
   ( cd $$DIR; mkdir BUILD RPMS RPMS/$$ARCH SOURCES SPECS SRPMS ) ;        \
diff --git a/README b/README
index 6d3229c7337c811cd3f172b913699ca17b158c63..d9d3abf467de7c591f312bbedcc4a0731814b284 100644 (file)
--- a/README
+++ b/README
@@ -24,9 +24,6 @@ The most important hint is probably this:
 
 To build on VMS, see README.VMS.
 
-If you are upgrading from version 2.* to version 3.*, be sure to delete
-your ~/.xscreensaver file first, if you have one.
-
 If you think you've found a bug, please let me know!  No bug report is too
 small.  But first, please read the enclosed `README.debugging' file to find
 out what kind of information would be most helpful to include in your bug
@@ -39,9 +36,9 @@ You can try out xscreensaver like so:
        xscreensaver &
        xscreensaver-demo
 
-Note: unlike `xlock', xscreensaver has a client-server model: the
-`xscreensaver' process is a daemon that runs in the background; it is
-controlled by the foreground `xscreensaver-demo' program.
+The XScreenSaver suite of applications uses a client-server model:
+The `xscreensaver' program is a daemon that runs in the background;
+it is controlled by the foreground `xscreensaver-demo' program.
 
 xscreensaver has an extensive manual -- please read it!
 
@@ -71,6 +68,33 @@ http://www.jwz.org/xscreensaver/.
 
                               ============
 
+Changes since 3.34:   * Redesigned `xscreensaver-demo' GUI.
+                      * Added three new modes of operation: `One Screen Saver',
+                        `Blank Screen', and `Don't Blank' (in addition to the
+                        historical `Random Screen Saver').
+                      * Configure now defaults to installing the hacks in
+                        <prefix>/lib/xscreensaver/ instead of <prefix>/bin/.
+                        (Most distros already did it this way.)
+                      * New GL hacks, `menger', `engine', `flipscreen3d'.
+                      * Made `sierpinski3d' be more colorful.
+                      * New versions of `xmatrix' and `nerverot'.
+                      * Fixed a bug in `starwars' that made the font be drawn
+                        with thin lines in -root mode.
+                      * Fixed a bad colormap bug in `crystal' that could make
+                        *subsequent* hacks malfunction!
+                      * Made `gflux' able to grab screen images (`-mode grab').
+                      * Updated `webcollage' for recent search engine changes.
+                      * Removed most command-line options to `xscreensaver':
+                        just edit the ~/.xscreensaver file instead.
+                      * Improved behavior on multi-screen and Xinerama systems:
+                        the mouse now stays on the screen where the user left
+                        it, and the password and splash dialogs always appear
+                        on the screen that has the mouse.
+                      * Made the splash dialog use more Gtk-like colors;
+                        made it have only two buttons, "Settings" and "Help".
+                      * Made `sonar' understand `.ssh/known_hosts2' format
+                        files, and be better about stripping out illegal 
+                        addresses.
 Changes since 3.33:   * Turned `memoryLimit' off by default, sigh.  Apparently
                         some versions of the GL libraries (appear to) allocate
                         hundreds of megs for every GL program, so `memoryLimit'
@@ -80,7 +104,7 @@ Changes since 3.33:   * Turned `memoryLimit' off by default, sigh.  Apparently
                       * New GL hack, `circuit'.
                       * Added `fuzz' mode to `decayscreen'.
                       * New version of `whirlygig'.
-                      * Added links to `glplanet' and `sphereEversion'.
+                      * Added links to `xplanet' and `sphereEversion'.
                       * Fixed rare race condition that could make `sonar' hang.
                       * Fixed potential crash in `speedmine'.
                       * Made `xscreensaver-demo' not crash when imageDirectory
@@ -890,3 +914,12 @@ Changes since 1.13:   * Added `orbit' option to `attraction' hack.
 Changes since 1.8:    * Added demo mode, and locking.
                      * Added `maze' hack.
                      * Added `norotate' option to `rocks' hack.
+Changes since 1.4:    * Works when run from XDM before anyone logs in.
+                      * Sped up `imsmap'.
+                      * Can use `xv' as a slideshow without using up colormap
+                        entries while the screen is not blanked.
+                      * Fixed a BadDrawable error in non-XIdle mode.
+                      * Added `blitspin' and `imsmap'.
+Changes since 1.0:    * Current list of included hacks is now: qix, helix,
+                        rorschach, attraction, greynetic, rocks, pyro,
+                        hopalong, and noseguy.
index 49755066102258ab23555e7b5fa8d9c36c68db87..9c847673278619a8a875084134a74f01d6ab1fec 100644 (file)
@@ -54,11 +54,11 @@ COMPILATION PROBLEMS:
 
     Before doing this, you'll need to nuke `config.cache'.
 
-    If you get errors about not being able to find Motif or Gtk (the
-    Xm/ or gtk/ header files), and you can't find them on your system,
+    If you get errors about not being able to find Gtk or Motif (the
+     gtk/ or Xm/ header files), and you can't find them on your system,
     then your system is horked and your vendor is lame.  Perhaps the
     problem is that you don't have some kind of ``development option''
-    installed.  Xt/is free and available on all systems; Xm/ (Motif)
+    installed.  Xt/ is free and available on all systems; Xm/ (Motif)
     is available on all commercial systems except SunOS 4.x and some
     early releases of Solaris.  Linux and other free Unixes systems
     usually come with Gtk, but a Motif clone is also available from
@@ -152,17 +152,11 @@ RUN-TIME PROBLEMS:
            diagnostics; the `-no-capture' option prevents the data from being
            displayed on the screensaver window as well.)
 
-           You also might want to use the `-timestamp' option, which will
-           cause the xscreensaver messages to include the time at which
-           they were printed.
-
         *  If the problem is intermittent, you might want to capture the
            log information to a file and examine it later.  For example,
            you could start it from your login script like this (csh syntax):
 
-              ( cd ~/src/xscreensaver/ ; \
-                xscreensaver -sync -verbose -timestamp -no-capture \
-                >>&LOG & )
+               xscreensaver -sync -verbose -no-capture >>& saverlog &
 
         *  Hackers only: If you're feeling adventurous enough to run gdb
            on the xscreensaver driver process itself, make sure you've
index fa45b3567e3c24578ee9573018c70dc66197cf7f..3087f25eeee62d2c705de20e753885b4395db9b9 100644 (file)
     likely prospects.)  Note that this is just the default; X resources can
     be used to override it.
  */
-#define ZIPPY_PROGRAM "fortune"
+#define FORTUNE_PROGRAM "fortune"
 
 
 
index 09207ad04518c2ddaf875ef3802345a4b6f1ca9a..9692f5da64a36f6df9e38249935370cd2c5e00b7 100644 (file)
  */
 #undef HAVE_XF86VMODE_GAMMA_RAMP
 
+/*  Define this if you have the Xinerama extension.  This is standard on
+ *  sufficiently-recent XFree86 systems, and possibly elsewhere.  (It's
+ *  available if the file /usr/include/X11/extensions/Xinerama.h exists.)
+ */
+#undef HAVE_XINERAMA
+
 /*  Define this if you have a Linux-like /proc/interrupts file which can be
  *  examined to determine when keyboard activity has occurred.
  */
  */
 #undef HAVE_CRAPPLET
 
+/*  Define this if you have the XML library.
+ */
+#undef HAVE_XML
+
 /*  Define this if you have the XPM library installed.  Some of the demos can
  *  make use of this if it is available.
  */
 #undef HAVE_DOUBLE_BUFFER_EXTENSION
 
 /*  Some screenhacks like to run an external program to generate random pieces
-    of text; set this to the one you like ("yow" and "fortune" are the most
-    likely prospects.)  Note that this is just the default; X resources can
-    be used to override it.
+    of text; set this to the one you like.  Note that this is just the
+    default; X resources can be used to override it.
  */
-#define ZIPPY_PROGRAM "fortune"
+#define FORTUNE_PROGRAM "fortune"
 
 
 
index 7893b4f67a363aecf24176c675fe7e105115fbb6..297ce8af2676373dfae7684fe196248aa232a0c3 100755 (executable)
--- a/configure
+++ b/configure
@@ -15,15 +15,17 @@ ac_help="$ac_help"
 ac_help="$ac_help
 Installation options:
 
-  --enable-subdir=DIR     Put the demo programs in a subdirectory of \`bindir',
-                          instead of putting them in bindir itself.  You can
-                          specify the name of the subdirectory.  For example,
-                          \`--exec-prefix=/usr/local --enable-subdir=demos'
-                          would put xscreensaver in /usr/local/bin/, and would
-                          put the demos in /usr/local/bin/demos/.  (If DIR
-                          begins with /, then bindir will not be prepended.)
-
-  --disable-subdir        Just put the demos in \`bindir' (this is the default.)
+  --with-hackdir=DIR      Where to install the hundreds of demo executables.
+                          Default: \`PREFIX/lib/xscreensaver/'
+"
+ac_help="$ac_help
+"
+ac_help="$ac_help
+  --with-configdir=DIR    Where to install the data files that describe each
+                          of the display modes to the GUI.
+                          Default: \`GNOMEPREFIX/control-center/screensavers/'
+                          or \`PREFIX/lib/xscreensaver/config/', depending on
+                          whether GNOME is available.
 "
 ac_help="$ac_help
 Except where noted, all of the --with options below can also take a
@@ -48,6 +50,8 @@ ac_help="$ac_help
   --with-sgivc-ext        Include support for the SGI-VIDEO-CONTROL extension."
 ac_help="$ac_help
   --with-dpms-ext         Include support for the DPMS extension."
+ac_help="$ac_help
+  --with-xinerama-ext     Include support for the XINERAMA extension."
 ac_help="$ac_help
   --with-xf86vmode-ext    Include support for XFree86 virtual screens."
 ac_help="$ac_help
@@ -78,6 +82,9 @@ ac_help="$ac_help
 ac_help="$ac_help
   --with-gnome            Include support for the Gnome Control Center."
 ac_help="$ac_help
+  --with-xml              The XML toolkit is needed for some parts of
+                          the Gtk interface."
+ac_help="$ac_help
 
 Graphics options:
 
@@ -95,12 +102,10 @@ ac_help="$ac_help
   --with-readdisplay      Include support for the XReadDisplay extension."
 ac_help="$ac_help
 
-  --with-zippy=PROGRAM    Some demos are able to run an external program and
+  --with-fortune=PROGRAM  Some demos are able to run an external program and
                           display its text; this names the program to use by
                           default (though it can be overridden with X
-                          resources.)  If you don't specify this, the default
-                          is to use \"yow\" from the Emacs distribution (if you
-                          have it) or else to use \"fortune\"."
+                          resources.)  Default is \"/usr/games/fortune\"."
 ac_help="$ac_help
   --with-setuid-hacks     Allow some demos to be installed \`setuid root'
                           (which is needed in order to ping other hosts.)
@@ -816,7 +821,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:831: checking host system type" >&5
+echo "configure:836: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -839,7 +844,7 @@ echo "$ac_t""$host" 1>&6
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:854: checking for $ac_word" >&5
+echo "configure:859: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -869,7 +874,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:884: checking for $ac_word" >&5
+echo "configure:889: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -920,7 +925,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:935: checking for $ac_word" >&5
+echo "configure:940: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -952,7 +957,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:967: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:972: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -963,12 +968,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 978 "configure"
+#line 983 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -994,12 +999,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1009: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1014: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1014: checking whether we are using GNU C" >&5
+echo "configure:1019: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1008,7 +1013,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1027,7 +1032,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1042: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1047: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1061,7 +1066,7 @@ fi
 
   if test -z "$GCC"; then
     echo $ac_n "checking how to request ANSI compilation""... $ac_c" 1>&6
-echo "configure:1076: checking how to request ANSI compilation" >&5
+echo "configure:1081: checking how to request ANSI compilation" >&5
     case "$host" in
       *-hpux* )
         echo "$ac_t""HPUX: adding -Ae" 1>&6
@@ -1084,16 +1089,16 @@ echo "configure:1076: checking how to request ANSI compilation" >&5
   fi
 
   echo $ac_n "checking whether the compiler works on ANSI C""... $ac_c" 1>&6
-echo "configure:1099: checking whether the compiler works on ANSI C" >&5
+echo "configure:1104: checking whether the compiler works on ANSI C" >&5
   if test "$cross_compiling" = yes; then
   { echo "configure: error: Couldn't build even a trivial ANSI C program: check CC." 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 1104 "configure"
+#line 1109 "configure"
 #include "confdefs.h"
  main(int ac, char **av) { return 0; } 
 EOF
-if { (eval echo configure:1108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   echo "$ac_t""yes" 1>&6
 else
@@ -1128,7 +1133,7 @@ fi
 if test -n "$GCC"; then
    if test -n "$GCC"; then
    echo $ac_n "checking whether gcc accepts -std""... $ac_c" 1>&6
-echo "configure:1143: checking whether gcc accepts -std" >&5
+echo "configure:1148: checking whether gcc accepts -std" >&5
 if eval "test \"`echo '$''{'ac_cv_gcc_accepts_std'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1172,7 +1177,7 @@ echo "$ac_t""$ac_cv_gcc_accepts_std" 1>&6
   fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1187: checking how to run the C preprocessor" >&5
+echo "configure:1192: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1187,13 +1192,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1202 "configure"
+#line 1207 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1208: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1204,13 +1209,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1219 "configure"
+#line 1224 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1221,13 +1226,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 1236 "configure"
+#line 1241 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1247: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1252,12 +1257,12 @@ fi
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1267: checking for working const" >&5
+echo "configure:1272: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1272 "configure"
+#line 1277 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1306,7 +1311,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:1321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1326: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -1327,21 +1332,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1342: checking for inline" >&5
+echo "configure:1347: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 1349 "configure"
+#line 1354 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:1356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -1368,7 +1373,7 @@ esac
 
 ac_bc_result=`echo 6+9 | bc 2>/dev/null`
   echo $ac_n "checking for bc""... $ac_c" 1>&6
-echo "configure:1383: checking for bc" >&5
+echo "configure:1388: checking for bc" >&5
   if test "$ac_bc_result" = "15" ; then
     echo "$ac_t""yes" 1>&6
   else
@@ -1393,7 +1398,7 @@ echo "configure:1383: checking for bc" >&5
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1408: checking for a BSD compatible install" >&5
+echo "configure:1413: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1446,7 +1451,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether \"\${INSTALL} -d\" creates intermediate directories""... $ac_c" 1>&6
-echo "configure:1461: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5
+echo "configure:1466: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5
 if eval "test \"`echo '$''{'ac_cv_install_d_creates_dirs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1468,7 +1473,7 @@ echo "$ac_t""$ac_cv_install_d_creates_dirs" 1>&6
 
   if test "$ac_cv_install_d_creates_dirs" = no ; then
     echo $ac_n "checking whether \"mkdir -p\" creates intermediate directories""... $ac_c" 1>&6
-echo "configure:1483: checking whether \"mkdir -p\" creates intermediate directories" >&5
+echo "configure:1488: checking whether \"mkdir -p\" creates intermediate directories" >&5
 if eval "test \"`echo '$''{'ac_cv_mkdir_p_creates_dirs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1499,7 +1504,7 @@ echo "$ac_t""$ac_cv_mkdir_p_creates_dirs" 1>&6
   fi
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1514: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1519: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1535,12 +1540,12 @@ INSTALL_SCRIPT='${INSTALL}'
 
 # random libc stuff
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1550: checking for ANSI C header files" >&5
+echo "configure:1555: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1555 "configure"
+#line 1560 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1548,7 +1553,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1565,7 +1570,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1580 "configure"
+#line 1585 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1583,7 +1588,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1598 "configure"
+#line 1603 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1604,7 +1609,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1619 "configure"
+#line 1624 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1615,7 +1620,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:1630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -1642,17 +1647,17 @@ for ac_hdr in unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1657: checking for $ac_hdr" >&5
+echo "configure:1662: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1662 "configure"
+#line 1667 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1672: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1679,12 +1684,12 @@ fi
 done
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:1694: checking for mode_t" >&5
+echo "configure:1699: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1699 "configure"
+#line 1704 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1712,12 +1717,12 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:1727: checking for pid_t" >&5
+echo "configure:1732: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1732 "configure"
+#line 1737 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1745,12 +1750,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1760: checking for size_t" >&5
+echo "configure:1765: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1765 "configure"
+#line 1770 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -1778,12 +1783,12 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1793: checking return type of signal handlers" >&5
+echo "configure:1798: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1798 "configure"
+#line 1803 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -1800,7 +1805,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:1815: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1820: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -1819,12 +1824,12 @@ EOF
 
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:1834: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:1839: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1839 "configure"
+#line 1844 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -1833,7 +1838,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:1848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -1854,12 +1859,12 @@ EOF
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:1869: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:1874: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1874 "configure"
+#line 1879 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -1875,7 +1880,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:1890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1895: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -1900,12 +1905,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:1915: checking for $ac_hdr that defines DIR" >&5
+echo "configure:1920: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1920 "configure"
+#line 1925 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -1913,7 +1918,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:1928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -1938,7 +1943,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:1953: checking for opendir in -ldir" >&5
+echo "configure:1958: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1946,7 +1951,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1961 "configure"
+#line 1966 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1957,7 +1962,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1979,7 +1984,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1994: checking for opendir in -lx" >&5
+echo "configure:1999: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1987,7 +1992,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2002 "configure"
+#line 2007 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1998,7 +2003,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:2013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2021,12 +2026,12 @@ fi
 fi
 
 echo $ac_n "checking how to call gettimeofday""... $ac_c" 1>&6
-echo "configure:2036: checking how to call gettimeofday" >&5
+echo "configure:2041: checking how to call gettimeofday" >&5
   if eval "test \"`echo '$''{'ac_cv_gettimeofday_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2041 "configure"
+#line 2046 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                     #include <sys/time.h>
@@ -2035,7 +2040,7 @@ struct timeval tv; struct timezone tzp;
                     gettimeofday(&tv, &tzp);
 ; return 0; }
 EOF
-if { (eval echo configure:2050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_gettimeofday_args=2
 else
@@ -2043,7 +2048,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 2058 "configure"
+#line 2063 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <sys/time.h>
@@ -2051,7 +2056,7 @@ int main() {
 struct timeval tv; gettimeofday(&tv);
 ; return 0; }
 EOF
-if { (eval echo configure:2066: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_gettimeofday_args=1
 else
@@ -2090,12 +2095,12 @@ EOF
 for ac_func in select fcntl uname nice setpriority getcwd getwd putenv
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2105: checking for $ac_func" >&5
+echo "configure:2110: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2110 "configure"
+#line 2115 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2118,7 +2123,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2146,12 +2151,12 @@ done
 for ac_func in sigaction syslog realpath setrlimit
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2161: checking for $ac_func" >&5
+echo "configure:2166: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2166 "configure"
+#line 2171 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2174,7 +2179,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -2199,12 +2204,12 @@ fi
 done
 
 echo $ac_n "checking for struct icmp""... $ac_c" 1>&6
-echo "configure:2214: checking for struct icmp" >&5
+echo "configure:2219: checking for struct icmp" >&5
 if eval "test \"`echo '$''{'ac_cv_have_icmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2219 "configure"
+#line 2224 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                    #include <stdio.h>
@@ -2244,7 +2249,7 @@ struct icmp i;
                    
 ; return 0; }
 EOF
-if { (eval echo configure:2259: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_icmp=yes
 else
@@ -2264,12 +2269,12 @@ EOF
 
  fi
 echo $ac_n "checking for struct icmphdr""... $ac_c" 1>&6
-echo "configure:2279: checking for struct icmphdr" >&5
+echo "configure:2284: checking for struct icmphdr" >&5
 if eval "test \"`echo '$''{'ac_cv_have_icmphdr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2284 "configure"
+#line 2289 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                    #include <stdio.h>
@@ -2304,7 +2309,7 @@ struct icmphdr i;
                    ip.ip_hl = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:2319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2324: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_icmphdr=yes
 else
@@ -2327,17 +2332,17 @@ for ac_hdr in crypt.h sys/select.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2342: checking for $ac_hdr" >&5
+echo "configure:2347: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2347 "configure"
+#line 2352 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2368,7 +2373,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2383: checking for $ac_word" >&5
+echo "configure:2388: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2407,7 +2412,7 @@ done
     PERL_VERSION=0
   else
     echo $ac_n "checking perl version""... $ac_c" 1>&6
-echo "configure:2422: checking perl version" >&5
+echo "configure:2427: checking perl version" >&5
 if eval "test \"`echo '$''{'ac_cv_perl_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2429,7 +2434,7 @@ fi
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:2444: checking for X" >&5
+echo "configure:2449: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -2491,12 +2496,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 2506 "configure"
+#line 2511 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2565,14 +2570,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2580 "configure"
+#line 2585 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:2587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -2678,17 +2683,17 @@ else
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:2693: checking whether -R must be followed by a space" >&5
+echo "configure:2698: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 2696 "configure"
+#line 2701 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -2704,14 +2709,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 2719 "configure"
+#line 2724 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -2743,7 +2748,7 @@ rm -f conftest*
     # libraries were built with DECnet support.  And karl@cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:2758: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:2763: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2751,7 +2756,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2766 "configure"
+#line 2771 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2762,7 +2767,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:2777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2784,7 +2789,7 @@ fi
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:2799: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:2804: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2792,7 +2797,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2807 "configure"
+#line 2812 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2803,7 +2808,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:2818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2832,12 +2837,12 @@ fi
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:2847: checking for gethostbyname" >&5
+echo "configure:2852: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2852 "configure"
+#line 2857 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -2860,7 +2865,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -2881,7 +2886,7 @@ fi
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:2896: checking for gethostbyname in -lnsl" >&5
+echo "configure:2901: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2889,7 +2894,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2904 "configure"
+#line 2909 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2900,7 +2905,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:2915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2930,12 +2935,12 @@ fi
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:2945: checking for connect" >&5
+echo "configure:2950: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2950 "configure"
+#line 2955 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -2958,7 +2963,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -2979,7 +2984,7 @@ fi
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:2994: checking for connect in -lsocket" >&5
+echo "configure:2999: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2987,7 +2992,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3002 "configure"
+#line 3007 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2998,7 +3003,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:3013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3022,12 +3027,12 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:3037: checking for remove" >&5
+echo "configure:3042: checking for remove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3042 "configure"
+#line 3047 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -3050,7 +3055,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -3071,7 +3076,7 @@ fi
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:3086: checking for remove in -lposix" >&5
+echo "configure:3091: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3079,7 +3084,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3094 "configure"
+#line 3099 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3090,7 +3095,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:3105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3114,12 +3119,12 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:3129: checking for shmat" >&5
+echo "configure:3134: checking for shmat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3134 "configure"
+#line 3139 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -3142,7 +3147,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -3163,7 +3168,7 @@ fi
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:3178: checking for shmat in -lipc" >&5
+echo "configure:3183: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3171,7 +3176,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3186 "configure"
+#line 3191 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3182,7 +3187,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:3197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3215,7 +3220,7 @@ fi
   # libraries we check for below, so use a different variable.
   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:3230: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:3235: checking for IceConnectionNumber in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3223,7 +3228,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3238 "configure"
+#line 3243 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3234,7 +3239,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:3249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3265,7 +3270,7 @@ fi
 
 
     echo $ac_n "checking for X app-defaults directory""... $ac_c" 1>&6
-echo "configure:3280: checking for X app-defaults directory" >&5
+echo "configure:3285: checking for X app-defaults directory" >&5
 if eval "test \"`echo '$''{'ac_cv_x_app_defaults'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3472,7 +3477,7 @@ case "$host" in
 
         # Some versions of Slowlaris Motif require -lgen.  But not all.  Why?
         echo $ac_n "checking for regcmp in -lgen""... $ac_c" 1>&6
-echo "configure:3487: checking for regcmp in -lgen" >&5
+echo "configure:3492: checking for regcmp in -lgen" >&5
 ac_lib_var=`echo gen'_'regcmp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3480,7 +3485,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3495 "configure"
+#line 3500 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3491,7 +3496,7 @@ int main() {
 regcmp()
 ; return 0; }
 EOF
-if { (eval echo configure:3506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3515,7 +3520,7 @@ fi
     ;;
   esac
 echo $ac_n "checking for XPointer""... $ac_c" 1>&6
-echo "configure:3530: checking for XPointer" >&5
+echo "configure:3535: checking for XPointer" >&5
 if eval "test \"`echo '$''{'ac_cv_xpointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3526,14 +3531,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 3541 "configure"
+#line 3546 "configure"
 #include "confdefs.h"
 #include <X11/Xlib.h>
 int main() {
 XPointer foo = (XPointer) 0;
 ; return 0; }
 EOF
-if { (eval echo configure:3548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3553: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_xpointer=yes
 else
@@ -3571,17 +3576,17 @@ have_xmu=no
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/Xmu/Error.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xmu/Error.h""... $ac_c" 1>&6
-echo "configure:3586: checking for X11/Xmu/Error.h" >&5
+echo "configure:3591: checking for X11/Xmu/Error.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3591 "configure"
+#line 3596 "configure"
 #include "confdefs.h"
 #include <X11/Xmu/Error.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3630,7 +3635,7 @@ if test "$have_xmu" = yes ; then
   case "$host" in
     *-sunos4*)
     echo $ac_n "checking for the SunOS 4.1.x _get_wmShellWidgetClass bug""... $ac_c" 1>&6
-echo "configure:3645: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5
+echo "configure:3650: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5
 if eval "test \"`echo '$''{'ac_cv_sunos_xmu_bug'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3643,14 +3648,14 @@ else
                     # with X libraries because we know it's SunOS.
                     LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm"
                     cat > conftest.$ac_ext <<EOF
-#line 3658 "configure"
+#line 3663 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_sunos_xmu_bug=no
 else
@@ -3666,21 +3671,21 @@ fi
 echo "$ac_t""$ac_cv_sunos_xmu_bug" 1>&6
     if test "$ac_cv_sunos_xmu_bug" = yes ; then
       echo $ac_n "checking whether the compiler understands -static""... $ac_c" 1>&6
-echo "configure:3681: checking whether the compiler understands -static" >&5
+echo "configure:3686: checking whether the compiler understands -static" >&5
 if eval "test \"`echo '$''{'ac_cv_ld_static'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LDFLAGS="$LDFLAGS"
                       LDFLAGS="$LDFLAGS -static"
                       cat > conftest.$ac_ext <<EOF
-#line 3688 "configure"
+#line 3693 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_ld_static=yes
 else
@@ -3707,36 +3712,95 @@ fi
 
 ###############################################################################
 #
-#       Handle the --enable-subdir option
+#       Handle the --with-hackdir option
 #
 ###############################################################################
 
+have_hackdir=yes
+with_hackdir_req=unspecified
+# Check whether --with-hackdir or --without-hackdir was given.
+if test "${with_hackdir+set}" = set; then
+  withval="$with_hackdir"
+  with_hackdir="$withval"; with_hackdir_req="$withval"
+else
+  with_hackdir=yes
+fi
+
+
+if test x"$with_hackdir" = xyes; then
+  HACKDIR='${exec_prefix}/lib/xscreensaver'
+elif test x"$with_hackdir" = xno; then
+  HACKDIR='${bindir}'
+else
+  # there must be a better way than this...
+  if test -z "`echo $with_hackdir | sed 's@^/.*@@'`" ; then
+    # absolute path
+    HACKDIR=$with_hackdir
+  else
+    # relative path
+    HACKDIR="\${exec_prefix}$with_hackdir"
+  fi
+fi
+
+# canonicalize slashes.
+HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+
+# This option used to be called --enable-subdir; make sure that is no longer
+# used, since configure brain-damagedly ignores unknown --enable options.
+
+obsolete_enable=
 # Check whether --enable-subdir or --disable-subdir was given.
 if test "${enable_subdir+set}" = set; then
   enableval="$enable_subdir"
-  enable_subdir="$enableval"
+  obsolete_enable=yes
+fi
+
+if test -n "$obsolete_enable"; then
+  echo "error: the --enable-subdir option has been replaced with"
+  echo "       the new --with-hackdir option; see \`configure --help'"
+  echo "       for more information."
+  exit 1
+fi
+
+
+###############################################################################
+#
+#       Handle the --with-configdir option
+#
+###############################################################################
+
+have_configdir=yes
+with_configdir_req=unspecified
+# Check whether --with-configdir or --without-configdir was given.
+if test "${with_configdir+set}" = set; then
+  withval="$with_configdir"
+  with_configdir="$withval"; with_configdir_req="$withval"
 else
-  enable_subdir=no
+  with_configdir=yes
 fi
 
-if test x"$enable_subdir" = xno; then
-  HACKDIR='${bindir}'
-elif test x"$enable_subdir" = xyes -o x"$enable_subdir" = x ; then
-  echo "error: must be a subdirectory name: --enable-subdir=$enable_subdir"
+
+if test x"$with_configdir" = xyes; then
+  # filled in later...
+  HACK_CONF_DIR=''
+elif test x"$with_configdir" = xno; then
+  echo "error: must be yes, or a pathname: --with-configdir=$with_configdir"
   exit 1
 else
   # there must be a better way than this...
-  if test -z "`echo $enable_subdir | sed 's@^/.*@@'`" ; then
+  if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then
     # absolute path
-    HACKDIR=$enable_subdir
+    CONFIGDIR=$with_configdir
   else
     # relative path
-    HACKDIR='${bindir}/'$enable_subdir
+    CONFIGDIR="\${exec_prefix}$with_configdir"
   fi
 fi
 
 # canonicalize slashes.
-HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+CONFIGDIR=`echo "${CONFIGDIR}" | sed 's@/$@@;s@//*@/@g'`
+
+
 
 
 ###############################################################################
@@ -3763,7 +3827,7 @@ fi
 
     /*)
      echo $ac_n "checking for SGI SCREEN_SAVER headers""... $ac_c" 1>&6
-echo "configure:3778: checking for SGI SCREEN_SAVER headers" >&5
+echo "configure:3842: checking for SGI SCREEN_SAVER headers" >&5
      d=$with_sgi/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -3773,7 +3837,7 @@ echo "configure:3778: checking for SGI SCREEN_SAVER headers" >&5
      fi
 
      echo $ac_n "checking for SGI SCREEN_SAVER libs""... $ac_c" 1>&6
-echo "configure:3788: checking for SGI SCREEN_SAVER libs" >&5
+echo "configure:3852: checking for SGI SCREEN_SAVER libs" >&5
      d=$with_sgi/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -3806,17 +3870,17 @@ if test "$with_sgi" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/XScreenSaver.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XScreenSaver.h""... $ac_c" 1>&6
-echo "configure:3821: checking for X11/extensions/XScreenSaver.h" >&5
+echo "configure:3885: checking for X11/extensions/XScreenSaver.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3826 "configure"
+#line 3890 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XScreenSaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3873,7 +3937,7 @@ fi
 
     /*)
      echo $ac_n "checking for MIT-SCREEN-SAVER headers""... $ac_c" 1>&6
-echo "configure:3888: checking for MIT-SCREEN-SAVER headers" >&5
+echo "configure:3952: checking for MIT-SCREEN-SAVER headers" >&5
      d=$with_mit/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -3883,7 +3947,7 @@ echo "configure:3888: checking for MIT-SCREEN-SAVER headers" >&5
      fi
 
      echo $ac_n "checking for MIT-SCREEN-SAVER libs""... $ac_c" 1>&6
-echo "configure:3898: checking for MIT-SCREEN-SAVER libs" >&5
+echo "configure:3962: checking for MIT-SCREEN-SAVER libs" >&5
      d=$with_mit/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -3916,17 +3980,17 @@ if test "$with_mit" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/scrnsaver.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/scrnsaver.h""... $ac_c" 1>&6
-echo "configure:3931: checking for X11/extensions/scrnsaver.h" >&5
+echo "configure:3995: checking for X11/extensions/scrnsaver.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3936 "configure"
+#line 4000 "configure"
 #include "confdefs.h"
 #include <X11/extensions/scrnsaver.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3971,7 +4035,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XScreenSaverRegister in -lXext""... $ac_c" 1>&6
-echo "configure:3986: checking for XScreenSaverRegister in -lXext" >&5
+echo "configure:4050: checking for XScreenSaverRegister in -lXext" >&5
 ac_lib_var=`echo Xext'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3979,7 +4043,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3994 "configure"
+#line 4058 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3990,7 +4054,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:4005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4037,7 +4101,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XScreenSaverRegister in -lXExExt""... $ac_c" 1>&6
-echo "configure:4052: checking for XScreenSaverRegister in -lXExExt" >&5
+echo "configure:4116: checking for XScreenSaverRegister in -lXExExt" >&5
 ac_lib_var=`echo XExExt'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4045,7 +4109,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXExExt -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4060 "configure"
+#line 4124 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4056,7 +4120,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:4071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4106,7 +4170,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XScreenSaverRegister in -lXss""... $ac_c" 1>&6
-echo "configure:4121: checking for XScreenSaverRegister in -lXss" >&5
+echo "configure:4185: checking for XScreenSaverRegister in -lXss" >&5
 ac_lib_var=`echo Xss'_'XScreenSaverRegister | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4114,7 +4178,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXss -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4129 "configure"
+#line 4193 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4125,7 +4189,7 @@ int main() {
 XScreenSaverRegister()
 ; return 0; }
 EOF
-if { (eval echo configure:4140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4191,7 +4255,7 @@ fi
 
     /*)
      echo $ac_n "checking for XIDLE headers""... $ac_c" 1>&6
-echo "configure:4206: checking for XIDLE headers" >&5
+echo "configure:4270: checking for XIDLE headers" >&5
      d=$with_xidle/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4201,7 +4265,7 @@ echo "configure:4206: checking for XIDLE headers" >&5
      fi
 
      echo $ac_n "checking for XIDLE libs""... $ac_c" 1>&6
-echo "configure:4216: checking for XIDLE libs" >&5
+echo "configure:4280: checking for XIDLE libs" >&5
      d=$with_xidle/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4234,17 +4298,17 @@ if test "$with_xidle" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/xidle.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/xidle.h""... $ac_c" 1>&6
-echo "configure:4249: checking for X11/extensions/xidle.h" >&5
+echo "configure:4313: checking for X11/extensions/xidle.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4254 "configure"
+#line 4318 "configure"
 #include "confdefs.h"
 #include <X11/extensions/xidle.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4300,7 +4364,7 @@ fi
 
     /*)
      echo $ac_n "checking for SGI-VIDEO-CONTROL headers""... $ac_c" 1>&6
-echo "configure:4315: checking for SGI-VIDEO-CONTROL headers" >&5
+echo "configure:4379: checking for SGI-VIDEO-CONTROL headers" >&5
      d=$with_sgivc/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4310,7 +4374,7 @@ echo "configure:4315: checking for SGI-VIDEO-CONTROL headers" >&5
      fi
 
      echo $ac_n "checking for SGI-VIDEO-CONTROL libs""... $ac_c" 1>&6
-echo "configure:4325: checking for SGI-VIDEO-CONTROL libs" >&5
+echo "configure:4389: checking for SGI-VIDEO-CONTROL libs" >&5
      d=$with_sgivc/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4345,17 +4409,17 @@ if test "$with_sgivc" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/XSGIvc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XSGIvc.h""... $ac_c" 1>&6
-echo "configure:4360: checking for X11/extensions/XSGIvc.h" >&5
+echo "configure:4424: checking for X11/extensions/XSGIvc.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4365 "configure"
+#line 4429 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XSGIvc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4370: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4399,7 +4463,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XSGIvcQueryGammaMap in -lXsgivc""... $ac_c" 1>&6
-echo "configure:4414: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5
+echo "configure:4478: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5
 ac_lib_var=`echo Xsgivc'_'XSGIvcQueryGammaMap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4407,7 +4471,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXsgivc -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4422 "configure"
+#line 4486 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4418,7 +4482,7 @@ int main() {
 XSGIvcQueryGammaMap()
 ; return 0; }
 EOF
-if { (eval echo configure:4433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4483,7 +4547,7 @@ fi
 
     /*)
      echo $ac_n "checking for DPMS headers""... $ac_c" 1>&6
-echo "configure:4498: checking for DPMS headers" >&5
+echo "configure:4562: checking for DPMS headers" >&5
      d=$with_dpms/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4493,7 +4557,7 @@ echo "configure:4498: checking for DPMS headers" >&5
      fi
 
      echo $ac_n "checking for DPMS libs""... $ac_c" 1>&6
-echo "configure:4508: checking for DPMS libs" >&5
+echo "configure:4572: checking for DPMS libs" >&5
      d=$with_dpms/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4528,17 +4592,17 @@ if test "$with_dpms" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/dpms.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/dpms.h""... $ac_c" 1>&6
-echo "configure:4543: checking for X11/extensions/dpms.h" >&5
+echo "configure:4607: checking for X11/extensions/dpms.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4548 "configure"
+#line 4612 "configure"
 #include "confdefs.h"
 #include <X11/extensions/dpms.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4553: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4617: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4584,7 +4648,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for DPMSInfo in -lXext""... $ac_c" 1>&6
-echo "configure:4599: checking for DPMSInfo in -lXext" >&5
+echo "configure:4663: checking for DPMSInfo in -lXext" >&5
 ac_lib_var=`echo Xext'_'DPMSInfo | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4592,7 +4656,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXext -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4607 "configure"
+#line 4671 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4603,7 +4667,7 @@ int main() {
 DPMSInfo()
 ; return 0; }
 EOF
-if { (eval echo configure:4618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4649,7 +4713,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for DPMSInfo in -lXdpms""... $ac_c" 1>&6
-echo "configure:4664: checking for DPMSInfo in -lXdpms" >&5
+echo "configure:4728: checking for DPMSInfo in -lXdpms" >&5
 ac_lib_var=`echo Xdpms'_'DPMSInfo | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4657,7 +4721,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXdpms -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4672 "configure"
+#line 4736 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4668,7 +4732,7 @@ int main() {
 DPMSInfo()
 ; return 0; }
 EOF
-if { (eval echo configure:4683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4711,6 +4775,257 @@ elif test "$with_dpms" != no; then
 fi
 
 
+###############################################################################
+#
+#       Check for the XINERAMA server extension.
+#
+###############################################################################
+
+have_xinerama=no
+with_xinerama_req=unspecified
+# Check whether --with-xinerama-ext or --without-xinerama-ext was given.
+if test "${with_xinerama_ext+set}" = set; then
+  withval="$with_xinerama_ext"
+  with_xinerama="$withval"; with_xinerama_req="$withval"
+else
+  with_xinerama=yes
+fi
+
+
+
+   case "$with_xinerama" in
+    yes) ;;
+    no)  ;;
+
+    /*)
+     echo $ac_n "checking for XINERAMA headers""... $ac_c" 1>&6
+echo "configure:4814: checking for XINERAMA headers" >&5
+     d=$with_xinerama/include
+     if test -d $d; then
+       X_CFLAGS="-I$d $X_CFLAGS"
+       echo "$ac_t""$d" 1>&6
+     else
+       echo "$ac_t""not found ($d: no such directory)" 1>&6
+     fi
+
+     echo $ac_n "checking for XINERAMA libs""... $ac_c" 1>&6
+echo "configure:4824: checking for XINERAMA libs" >&5
+     d=$with_xinerama/lib
+     if test -d $d; then
+       X_LIBS="-L$d $X_LIBS"
+       echo "$ac_t""$d" 1>&6
+     else
+       echo "$ac_t""not found ($d: no such directory)" 1>&6
+     fi
+
+     # replace the directory string with "yes".
+     with_xinerama_req="yes"
+     with_xinerama=$with_xinerama_req
+     ;;
+
+    *)
+     echo ""
+     echo "error: argument to --with-xinerama-ext must be \"yes\", \"no\", or a directory."
+     echo "       If it is a directory, then \`DIR/include' will be added to"
+     echo "       the -I list, and \`DIR/lib' will be added to the -L list."
+     exit 1
+     ;;
+   esac
+  
+
+if test "$with_xinerama" = yes; then
+
+  # first check for Xinerama.h
+  
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  ac_safe=`echo "X11/extensions/Xinerama.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for X11/extensions/Xinerama.h""... $ac_c" 1>&6
+echo "configure:4859: checking for X11/extensions/Xinerama.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4864 "configure"
+#include "confdefs.h"
+#include <X11/extensions/Xinerama.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:4869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_xinerama=yes
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+
+  # if that succeeded, then check for the XINERAMA code in the libraries
+  if test "$have_xinerama" = yes; then
+
+    # first look in -lXext
+    have_xinerama=no
+    
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  ac_save_LDFLAGS="$LDFLAGS"
+#  ac_save_LIBS="$LIBS"
+
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  # note: $X_CFLAGS includes $x_includes
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+  if test \! -z "$libdir" ; then
+    LDFLAGS="$LDFLAGS -L$libdir"
+  fi
+  # note: $X_LIBS includes $x_libraries
+  LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+  echo $ac_n "checking for XineramaQueryExtension in -lXext""... $ac_c" 1>&6
+echo "configure:4915: checking for XineramaQueryExtension in -lXext" >&5
+ac_lib_var=`echo Xext'_'XineramaQueryExtension | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lXext -lXext -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4923 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char XineramaQueryExtension();
+
+int main() {
+XineramaQueryExtension()
+; return 0; }
+EOF
+if { (eval echo configure:4934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_xinerama=yes
+else
+  echo "$ac_t""no" 1>&6
+true
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  LDFLAGS="$ac_save_LDFLAGS"
+#  LIBS="$ac_save_LIBS"
+  
+
+    # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.)
+    if test "$have_xinerama" = no; then
+      
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  ac_save_LDFLAGS="$LDFLAGS"
+#  ac_save_LIBS="$LIBS"
+
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  # note: $X_CFLAGS includes $x_includes
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+  if test \! -z "$libdir" ; then
+    LDFLAGS="$LDFLAGS -L$libdir"
+  fi
+  # note: $X_LIBS includes $x_libraries
+  LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+  echo $ac_n "checking for XineramaQueryExtension in -lXinerama""... $ac_c" 1>&6
+echo "configure:4980: checking for XineramaQueryExtension in -lXinerama" >&5
+ac_lib_var=`echo Xinerama'_'XineramaQueryExtension | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lXinerama -lXext -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4988 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char XineramaQueryExtension();
+
+int main() {
+XineramaQueryExtension()
+; return 0; }
+EOF
+if { (eval echo configure:4999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_xinerama=yes; SAVER_LIBS="$SAVER_LIBS -lXinerama"
+else
+  echo "$ac_t""no" 1>&6
+true
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  LDFLAGS="$ac_save_LDFLAGS"
+#  LIBS="$ac_save_LIBS"
+  
+    fi
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test "$have_xinerama" = yes; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_XINERAMA 1
+EOF
+
+  fi
+
+elif test "$with_xinerama" != no; then
+  echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama"
+  exit 1
+fi
+
+
 ###############################################################################
 #
 #       Check for the XF86VMODE server extension (for virtual screens.)
@@ -4735,7 +5050,7 @@ fi
 
     /*)
      echo $ac_n "checking for xf86vmode headers""... $ac_c" 1>&6
-echo "configure:4750: checking for xf86vmode headers" >&5
+echo "configure:5065: checking for xf86vmode headers" >&5
      d=$with_xf86vmode/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4745,7 +5060,7 @@ echo "configure:4750: checking for xf86vmode headers" >&5
      fi
 
      echo $ac_n "checking for xf86vmode libs""... $ac_c" 1>&6
-echo "configure:4760: checking for xf86vmode libs" >&5
+echo "configure:5075: checking for xf86vmode libs" >&5
      d=$with_xf86vmode/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4780,17 +5095,17 @@ if test "$with_xf86vmode" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/xf86vmode.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/xf86vmode.h""... $ac_c" 1>&6
-echo "configure:4795: checking for X11/extensions/xf86vmode.h" >&5
+echo "configure:5110: checking for X11/extensions/xf86vmode.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4800 "configure"
+#line 5115 "configure"
 #include "confdefs.h"
 #include <X11/extensions/xf86vmode.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4805: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5120: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4834,7 +5149,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XF86VidModeGetViewPort in -lXxf86vm""... $ac_c" 1>&6
-echo "configure:4849: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5
+echo "configure:5164: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5
 ac_lib_var=`echo Xxf86vm'_'XF86VidModeGetViewPort | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4842,7 +5157,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXxf86vm -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4857 "configure"
+#line 5172 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4853,7 +5168,7 @@ int main() {
 XF86VidModeGetViewPort()
 ; return 0; }
 EOF
-if { (eval echo configure:4868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4919,7 +5234,7 @@ fi
 
     /*)
      echo $ac_n "checking for xf86gamma headers""... $ac_c" 1>&6
-echo "configure:4934: checking for xf86gamma headers" >&5
+echo "configure:5249: checking for xf86gamma headers" >&5
      d=$with_xf86gamma/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -4929,7 +5244,7 @@ echo "configure:4934: checking for xf86gamma headers" >&5
      fi
 
      echo $ac_n "checking for xf86gamma libs""... $ac_c" 1>&6
-echo "configure:4944: checking for xf86gamma libs" >&5
+echo "configure:5259: checking for xf86gamma libs" >&5
      d=$with_xf86gamma/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -4967,17 +5282,17 @@ if test "$with_xf86gamma" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/xf86vmode.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/xf86vmode.h""... $ac_c" 1>&6
-echo "configure:4982: checking for X11/extensions/xf86vmode.h" >&5
+echo "configure:5297: checking for X11/extensions/xf86vmode.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4987 "configure"
+#line 5302 "configure"
 #include "confdefs.h"
 #include <X11/extensions/xf86vmode.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5307: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5022,7 +5337,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XF86VidModeSetGamma in -lXxf86vm""... $ac_c" 1>&6
-echo "configure:5037: checking for XF86VidModeSetGamma in -lXxf86vm" >&5
+echo "configure:5352: checking for XF86VidModeSetGamma in -lXxf86vm" >&5
 ac_lib_var=`echo Xxf86vm'_'XF86VidModeSetGamma | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5030,7 +5345,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXxf86vm -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5045 "configure"
+#line 5360 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5041,7 +5356,7 @@ int main() {
 XF86VidModeSetGamma()
 ; return 0; }
 EOF
-if { (eval echo configure:5056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5089,7 +5404,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XF86VidModeSetGammaRamp in -lXxf86vm""... $ac_c" 1>&6
-echo "configure:5104: checking for XF86VidModeSetGammaRamp in -lXxf86vm" >&5
+echo "configure:5419: checking for XF86VidModeSetGammaRamp in -lXxf86vm" >&5
 ac_lib_var=`echo Xxf86vm'_'XF86VidModeSetGammaRamp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5097,7 +5412,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXxf86vm -lXext -lX11 $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5112 "configure"
+#line 5427 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5108,7 +5423,7 @@ int main() {
 XF86VidModeSetGammaRamp()
 ; return 0; }
 EOF
-if { (eval echo configure:5123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5174,7 +5489,7 @@ fi
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5189 "configure"
+#line 5504 "configure"
 #include "confdefs.h"
 #include <X11/XHPlib.h>
 EOF
@@ -5212,7 +5527,7 @@ fi
 if test "$with_proc_interrupts" = yes; then
 
    echo $ac_n "checking whether /proc/interrupts contains keyboard data""... $ac_c" 1>&6
-echo "configure:5227: checking whether /proc/interrupts contains keyboard data" >&5
+echo "configure:5542: checking whether /proc/interrupts contains keyboard data" >&5
 if eval "test \"`echo '$''{'ac_cv_have_proc_interrupts'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5345,7 +5660,7 @@ fi
 
     /*)
      echo $ac_n "checking for PAM headers""... $ac_c" 1>&6
-echo "configure:5360: checking for PAM headers" >&5
+echo "configure:5675: checking for PAM headers" >&5
      d=$with_pam/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -5355,7 +5670,7 @@ echo "configure:5360: checking for PAM headers" >&5
      fi
 
      echo $ac_n "checking for PAM libs""... $ac_c" 1>&6
-echo "configure:5370: checking for PAM libs" >&5
+echo "configure:5685: checking for PAM libs" >&5
      d=$with_pam/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -5381,7 +5696,7 @@ echo "configure:5370: checking for PAM libs" >&5
 
 if test "$enable_locking" = yes -a "$with_pam" = yes; then
   echo $ac_n "checking for PAM""... $ac_c" 1>&6
-echo "configure:5396: checking for PAM" >&5
+echo "configure:5711: checking for PAM" >&5
 if eval "test \"`echo '$''{'ac_cv_pam'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5392,14 +5707,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5407 "configure"
+#line 5722 "configure"
 #include "confdefs.h"
 #include <security/pam_appl.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5414: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5729: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_pam=yes
 else
@@ -5424,7 +5739,7 @@ EOF
     # libpam typically requires dlopen and dlsym.  On FreeBSD,
     # those are in libc.  On Linux and Solaris, they're in libdl.
     echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:5439: checking for dlopen in -ldl" >&5
+echo "configure:5754: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5432,7 +5747,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5447 "configure"
+#line 5762 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5443,7 +5758,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:5458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5465,12 +5780,12 @@ fi
 
 
     echo $ac_n "checking how to call pam_strerror""... $ac_c" 1>&6
-echo "configure:5480: checking how to call pam_strerror" >&5
+echo "configure:5795: checking how to call pam_strerror" >&5
     if eval "test \"`echo '$''{'ac_cv_pam_strerror_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5485 "configure"
+#line 5800 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                       #include <stdlib.h>
@@ -5480,7 +5795,7 @@ pam_handle_t *pamh = 0;
                       char *s = pam_strerror(pamh, PAM_SUCCESS);
 ; return 0; }
 EOF
-if { (eval echo configure:5495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_pam_strerror_args=2
 else
@@ -5488,7 +5803,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 5503 "configure"
+#line 5818 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                                       #include <stdlib.h>
@@ -5498,7 +5813,7 @@ char *s =
                                        pam_strerror(PAM_SUCCESS);
 ; return 0; }
 EOF
-if { (eval echo configure:5513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5828: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_pam_strerror_args=1
 else
@@ -5555,7 +5870,7 @@ fi
 
     /*)
      echo $ac_n "checking for Kerberos headers""... $ac_c" 1>&6
-echo "configure:5570: checking for Kerberos headers" >&5
+echo "configure:5885: checking for Kerberos headers" >&5
      d=$with_kerberos/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -5565,7 +5880,7 @@ echo "configure:5570: checking for Kerberos headers" >&5
      fi
 
      echo $ac_n "checking for Kerberos libs""... $ac_c" 1>&6
-echo "configure:5580: checking for Kerberos libs" >&5
+echo "configure:5895: checking for Kerberos libs" >&5
      d=$with_kerberos/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -5591,7 +5906,7 @@ echo "configure:5580: checking for Kerberos libs" >&5
 
 if test "$enable_locking" = yes -a "$with_kerberos" = yes; then
   echo $ac_n "checking for Kerberos 4""... $ac_c" 1>&6
-echo "configure:5606: checking for Kerberos 4" >&5
+echo "configure:5921: checking for Kerberos 4" >&5
 if eval "test \"`echo '$''{'ac_cv_kerberos'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5602,14 +5917,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5617 "configure"
+#line 5932 "configure"
 #include "confdefs.h"
 #include <krb.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5939: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_kerberos=yes
 else
@@ -5624,7 +5939,7 @@ fi
 
 echo "$ac_t""$ac_cv_kerberos" 1>&6
   echo $ac_n "checking for Kerberos 5""... $ac_c" 1>&6
-echo "configure:5639: checking for Kerberos 5" >&5
+echo "configure:5954: checking for Kerberos 5" >&5
 if eval "test \"`echo '$''{'ac_cv_kerberos5'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5635,14 +5950,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5650 "configure"
+#line 5965 "configure"
 #include "confdefs.h"
 #include <kerberosIV/krb.h>
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5657: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_kerberos5=yes
 else
@@ -5689,12 +6004,12 @@ EOF
 
   if test "$have_kerberos" = yes ; then
     echo $ac_n "checking for res_search""... $ac_c" 1>&6
-echo "configure:5704: checking for res_search" >&5
+echo "configure:6019: checking for res_search" >&5
 if eval "test \"`echo '$''{'ac_cv_func_res_search'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5709 "configure"
+#line 6024 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char res_search(); below.  */
@@ -5717,7 +6032,7 @@ res_search();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_res_search=yes"
 else
@@ -5735,7 +6050,7 @@ if eval "test \"`echo '$ac_cv_func_'res_search`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for res_search in -lresolv""... $ac_c" 1>&6
-echo "configure:5750: checking for res_search in -lresolv" >&5
+echo "configure:6065: checking for res_search in -lresolv" >&5
 ac_lib_var=`echo resolv'_'res_search | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5743,7 +6058,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5758 "configure"
+#line 6073 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5754,7 +6069,7 @@ int main() {
 res_search()
 ; return 0; }
 EOF
-if { (eval echo configure:5769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5809,7 +6124,7 @@ fi
 
     /*)
      echo $ac_n "checking for shadow password headers""... $ac_c" 1>&6
-echo "configure:5824: checking for shadow password headers" >&5
+echo "configure:6139: checking for shadow password headers" >&5
      d=$with_shadow/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -5819,7 +6134,7 @@ echo "configure:5824: checking for shadow password headers" >&5
      fi
 
      echo $ac_n "checking for shadow password libs""... $ac_c" 1>&6
-echo "configure:5834: checking for shadow password libs" >&5
+echo "configure:6149: checking for shadow password libs" >&5
      d=$with_shadow/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -5857,7 +6172,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for Sun-style shadow passwords""... $ac_c" 1>&6
-echo "configure:5872: checking for Sun-style shadow passwords" >&5
+echo "configure:6187: checking for Sun-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_sun_adjunct'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5868,7 +6183,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5883 "configure"
+#line 6198 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -5881,7 +6196,7 @@ struct passwd_adjunct *p = getpwanam("nobody");
                        const char *pw = p->pwa_passwd;
 ; return 0; }
 EOF
-if { (eval echo configure:5896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sun_adjunct=yes
 else
@@ -5911,7 +6226,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for DEC-style shadow passwords""... $ac_c" 1>&6
-echo "configure:5926: checking for DEC-style shadow passwords" >&5
+echo "configure:6241: checking for DEC-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_enhanced_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5922,7 +6237,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 5937 "configure"
+#line 6252 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -5939,7 +6254,7 @@ struct pr_passwd *p;
                        pw = p->ufld.fd_encrypt;
 ; return 0; }
 EOF
-if { (eval echo configure:5954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_enhanced_passwd=yes
 else
@@ -5963,7 +6278,7 @@ echo "$ac_t""$ac_cv_enhanced_passwd" 1>&6
     # But on DEC, it's in -lsecurity.
     #
     echo $ac_n "checking for getprpwnam in -lprot""... $ac_c" 1>&6
-echo "configure:5978: checking for getprpwnam in -lprot" >&5
+echo "configure:6293: checking for getprpwnam in -lprot" >&5
 ac_lib_var=`echo prot'_'getprpwnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5971,7 +6286,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lprot -lx $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5986 "configure"
+#line 6301 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5982,7 +6297,7 @@ int main() {
 getprpwnam()
 ; return 0; }
 EOF
-if { (eval echo configure:5997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6001,7 +6316,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6
-echo "configure:6016: checking for getprpwnam in -lsecurity" >&5
+echo "configure:6331: checking for getprpwnam in -lsecurity" >&5
 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6009,7 +6324,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsecurity  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6024 "configure"
+#line 6339 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6020,7 +6335,7 @@ int main() {
 getprpwnam()
 ; return 0; }
 EOF
-if { (eval echo configure:6035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6053,7 +6368,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for HP-style shadow passwords""... $ac_c" 1>&6
-echo "configure:6068: checking for HP-style shadow passwords" >&5
+echo "configure:6383: checking for HP-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_hpux_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6064,7 +6379,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 6079 "configure"
+#line 6394 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -6077,7 +6392,7 @@ struct s_passwd *p = getspwnam("nobody");
                        const char *pw = p->pw_passwd;
 ; return 0; }
 EOF
-if { (eval echo configure:6092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6407: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_hpux_passwd=yes
 else
@@ -6098,7 +6413,7 @@ echo "$ac_t""$ac_cv_hpux_passwd" 1>&6
 
     # on HPUX, bigcrypt is in -lsec
     echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6
-echo "configure:6113: checking for bigcrypt in -lsec" >&5
+echo "configure:6428: checking for bigcrypt in -lsec" >&5
 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6106,7 +6421,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsec  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6121 "configure"
+#line 6436 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6117,7 +6432,7 @@ int main() {
 bigcrypt()
 ; return 0; }
 EOF
-if { (eval echo configure:6132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6155,7 +6470,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for FreeBSD-style shadow passwords""... $ac_c" 1>&6
-echo "configure:6170: checking for FreeBSD-style shadow passwords" >&5
+echo "configure:6485: checking for FreeBSD-style shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_master_passwd'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6181,7 +6496,7 @@ fi
 
 if test "$with_shadow" = yes ; then
   echo $ac_n "checking for generic shadow passwords""... $ac_c" 1>&6
-echo "configure:6196: checking for generic shadow passwords" >&5
+echo "configure:6511: checking for generic shadow passwords" >&5
 if eval "test \"`echo '$''{'ac_cv_shadow'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6192,7 +6507,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 6207 "configure"
+#line 6522 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
                                     #include <unistd.h>
@@ -6204,7 +6519,7 @@ struct spwd *p = getspnam("nobody");
                        const char *pw = p->sp_pwdp;
 ; return 0; }
 EOF
-if { (eval echo configure:6219: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_shadow=yes
 else
@@ -6225,7 +6540,7 @@ echo "$ac_t""$ac_cv_shadow" 1>&6
     # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc.
     have_getspnam=no
     echo $ac_n "checking for getspnam in -lc""... $ac_c" 1>&6
-echo "configure:6240: checking for getspnam in -lc" >&5
+echo "configure:6555: checking for getspnam in -lc" >&5
 ac_lib_var=`echo c'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6233,7 +6548,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6248 "configure"
+#line 6563 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6244,7 +6559,7 @@ int main() {
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:6259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6266,7 +6581,7 @@ fi
 
     if test "$have_getspnam" = no ; then
       echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6
-echo "configure:6281: checking for getspnam in -lgen" >&5
+echo "configure:6596: checking for getspnam in -lgen" >&5
 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6274,7 +6589,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6289 "configure"
+#line 6604 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6285,7 +6600,7 @@ int main() {
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:6300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6321,7 +6636,7 @@ if test "$enable_locking" = yes ; then
   # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc.
   have_crypt=no
   echo $ac_n "checking for crypt in -lc""... $ac_c" 1>&6
-echo "configure:6336: checking for crypt in -lc" >&5
+echo "configure:6651: checking for crypt in -lc" >&5
 ac_lib_var=`echo c'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6329,7 +6644,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6344 "configure"
+#line 6659 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6340,7 +6655,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:6355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6362,7 +6677,7 @@ fi
 
   if test "$have_crypt" = no ; then
     echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:6377: checking for crypt in -lcrypt" >&5
+echo "configure:6692: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6370,7 +6685,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6385 "configure"
+#line 6700 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6381,7 +6696,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:6396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6465,7 +6780,7 @@ fi
 
     /*)
      echo $ac_n "checking for Motif headers""... $ac_c" 1>&6
-echo "configure:6480: checking for Motif headers" >&5
+echo "configure:6795: checking for Motif headers" >&5
      d=$with_motif/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -6475,7 +6790,7 @@ echo "configure:6480: checking for Motif headers" >&5
      fi
 
      echo $ac_n "checking for Motif libs""... $ac_c" 1>&6
-echo "configure:6490: checking for Motif libs" >&5
+echo "configure:6805: checking for Motif libs" >&5
      d=$with_motif/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -6514,17 +6829,17 @@ if test "$with_motif" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:6529: checking for Xm/Xm.h" >&5
+echo "configure:6844: checking for Xm/Xm.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6534 "configure"
+#line 6849 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6563,17 +6878,17 @@ if test "$have_motif" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "Xm/ComboBox.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/ComboBox.h""... $ac_c" 1>&6
-echo "configure:6578: checking for Xm/ComboBox.h" >&5
+echo "configure:6893: checking for Xm/ComboBox.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6583 "configure"
+#line 6898 "configure"
 #include "confdefs.h"
 #include <Xm/ComboBox.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6903: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6636,7 +6951,7 @@ esac
 
     /*)
      echo $ac_n "checking for Gtk headers""... $ac_c" 1>&6
-echo "configure:6651: checking for Gtk headers" >&5
+echo "configure:6966: checking for Gtk headers" >&5
      d=$with_gtk/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -6646,7 +6961,7 @@ echo "configure:6651: checking for Gtk headers" >&5
      fi
 
      echo $ac_n "checking for Gtk libs""... $ac_c" 1>&6
-echo "configure:6661: checking for Gtk libs" >&5
+echo "configure:6976: checking for Gtk libs" >&5
      d=$with_gtk/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -6704,7 +7019,7 @@ esac
 
     /*)
      echo $ac_n "checking for Gnome headers""... $ac_c" 1>&6
-echo "configure:6719: checking for Gnome headers" >&5
+echo "configure:7034: checking for Gnome headers" >&5
      d=$with_gnome/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -6714,7 +7029,7 @@ echo "configure:6719: checking for Gnome headers" >&5
      fi
 
      echo $ac_n "checking for Gnome libs""... $ac_c" 1>&6
-echo "configure:6729: checking for Gnome libs" >&5
+echo "configure:7044: checking for Gnome libs" >&5
      d=$with_gnome/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -6770,7 +7085,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6785: checking for $ac_word" >&5
+echo "configure:7100: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_glib_config'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6810,7 +7125,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6825: checking for $ac_word" >&5
+echo "configure:7140: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_gtk_config'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6852,7 +7167,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6867: checking for $ac_word" >&5
+echo "configure:7182: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_gnome_config'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6898,7 +7213,7 @@ done
 
   if test "$have_gtk" = yes; then
     echo $ac_n "checking Gtk version number""... $ac_c" 1>&6
-echo "configure:6913: checking Gtk version number" >&5
+echo "configure:7228: checking Gtk version number" >&5
 if eval "test \"`echo '$''{'ac_cv_gtk_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6927,7 +7242,7 @@ echo "$ac_t""$ac_cv_gtk_version_string" 1>&6
 
   if test "$have_gtk" = yes; then
     echo $ac_n "checking for Gtk includes""... $ac_c" 1>&6
-echo "configure:6942: checking for Gtk includes" >&5
+echo "configure:7257: checking for Gtk includes" >&5
 if eval "test \"`echo '$''{'ac_cv_gtk_config_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6936,7 +7251,7 @@ fi
 
 echo "$ac_t""$ac_cv_gtk_config_cflags" 1>&6
     echo $ac_n "checking for Gtk libs""... $ac_c" 1>&6
-echo "configure:6951: checking for Gtk libs" >&5
+echo "configure:7266: checking for Gtk libs" >&5
 if eval "test \"`echo '$''{'ac_cv_gtk_config_libs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6951,9 +7266,9 @@ echo "$ac_t""$ac_cv_gtk_config_libs" 1>&6
   # Check for Gnome Capplet support.
   #
   if test "$have_gnome" = yes -a "$have_gtk" = yes; then
-    gnome_config_libs="gtk capplet gnomeui"
+    gnome_config_libs="gtk capplet gnomeui xml"
     echo $ac_n "checking for Gnome capplet includes""... $ac_c" 1>&6
-echo "configure:6968: checking for Gnome capplet includes" >&5
+echo "configure:7283: checking for Gnome capplet includes" >&5
     if eval "test \"`echo '$''{'ac_cv_gnome_config_cflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6976,7 +7291,7 @@ fi
 
   if test "$have_gnome" = yes -a "$have_gtk" = yes; then
     echo $ac_n "checking for Gnome capplet libs""... $ac_c" 1>&6
-echo "configure:6991: checking for Gnome capplet libs" >&5
+echo "configure:7306: checking for Gnome capplet libs" >&5
     if eval "test \"`echo '$''{'ac_cv_gnome_config_libs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7034,7 +7349,7 @@ if test "$have_gnome" = yes; then
   # Extract the first word of "gnome-help-browser", so it can be a program name with args.
 set dummy gnome-help-browser; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7049: checking for $ac_word" >&5
+echo "configure:7364: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_have_gnome_help'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7066,6 +7381,201 @@ else
 fi
 
 
+###############################################################################
+#
+#       Check for -lxml (if we have Gtk)
+#
+###############################################################################
+
+have_xml=no
+with_xml_req=unspecified
+# Check whether --with-xml or --without-xml was given.
+if test "${with_xml+set}" = set; then
+  withval="$with_xml"
+  with_xml="$withval"; with_xml_req="$withval"
+else
+  with_xml=yes
+fi
+
+
+
+   case "$with_xml" in
+    yes) ;;
+    no)  ;;
+
+    /*)
+     echo $ac_n "checking for XML headers""... $ac_c" 1>&6
+echo "configure:7420: checking for XML headers" >&5
+     d=$with_xml/include
+     if test -d $d; then
+       X_CFLAGS="-I$d $X_CFLAGS"
+       echo "$ac_t""$d" 1>&6
+     else
+       echo "$ac_t""not found ($d: no such directory)" 1>&6
+     fi
+
+     echo $ac_n "checking for XML libs""... $ac_c" 1>&6
+echo "configure:7430: checking for XML libs" >&5
+     d=$with_xml/lib
+     if test -d $d; then
+       X_LIBS="-L$d $X_LIBS"
+       echo "$ac_t""$d" 1>&6
+     else
+       echo "$ac_t""not found ($d: no such directory)" 1>&6
+     fi
+
+     # replace the directory string with "yes".
+     with_xml_req="yes"
+     with_xml=$with_xml_req
+     ;;
+
+    *)
+     echo ""
+     echo "error: argument to --with-xml must be \"yes\", \"no\", or a directory."
+     echo "       If it is a directory, then \`DIR/include' will be added to"
+     echo "       the -I list, and \`DIR/lib' will be added to the -L list."
+     exit 1
+     ;;
+   esac
+  
+
+if test "$with_xml" != yes -a "$with_xml" != no ; then
+  echo "error: must be yes or no: --with-xml=$with_xml"
+  exit 1
+fi
+
+if test "$have_gtk" != yes; then
+  # don't bother if no GTK
+  with_xml=no
+fi
+
+if test "$with_xml" = yes; then
+  have_xml=no
+
+  # the XML stuff is likely to be in GTK paths.
+  ac_save_X_CFLAGS="$X_CFLAGS"
+  ac_save_X_LIBS="$X_LIBS"
+  X_CFLAGS="$X_CFLAGS $ac_gtk_config_cflags"
+  X_LIBS="$X_LIBS $ac_gtk_config_libs"
+
+  
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  ac_safe=`echo "xmlIO.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for xmlIO.h""... $ac_c" 1>&6
+echo "configure:7481: checking for xmlIO.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 7486 "configure"
+#include "confdefs.h"
+#include <xmlIO.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:7491: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_xml=yes
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+
+  if test "$have_xml" = yes; then
+    # we have the header, now check for the library
+    have_xml=no
+    
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  ac_save_LDFLAGS="$LDFLAGS"
+#  ac_save_LIBS="$LIBS"
+
+  if test \! -z "$includedir" ; then 
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  # note: $X_CFLAGS includes $x_includes
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+  if test \! -z "$libdir" ; then
+    LDFLAGS="$LDFLAGS -L$libdir"
+  fi
+  # note: $X_LIBS includes $x_libraries
+  LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+  echo $ac_n "checking for xmlParseChunk in -lxml""... $ac_c" 1>&6
+echo "configure:7535: checking for xmlParseChunk in -lxml" >&5
+ac_lib_var=`echo xml'_'xmlParseChunk | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lxml  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 7543 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char xmlParseChunk();
+
+int main() {
+xmlParseChunk()
+; return 0; }
+EOF
+if { (eval echo configure:7554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_xml=yes
+                    XML_LIBS="-lxml"
+                    cat >> confdefs.h <<\EOF
+#define HAVE_XML 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  LDFLAGS="$ac_save_LDFLAGS"
+#  LIBS="$ac_save_LIBS"
+  
+  fi
+
+  X_CFLAGS="$ac_save_X_CFLAGS"
+  X_LIBS="$ac_save_X_LIBS"
+
+fi
+
+
 ###############################################################################
 #
 #       Checking whether Motif is really Lesstif.
@@ -7075,7 +7585,7 @@ fi
 have_lesstif=no
 if test "$have_motif" = yes ; then
   echo $ac_n "checking whether Motif is really LessTif""... $ac_c" 1>&6
-echo "configure:7090: checking whether Motif is really LessTif" >&5
+echo "configure:7600: checking whether Motif is really LessTif" >&5
 if eval "test \"`echo '$''{'ac_cv_have_lesstif'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7086,14 +7596,14 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 7101 "configure"
+#line 7611 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 int main() {
 long vers = LesstifVersion;
 ; return 0; }
 EOF
-if { (eval echo configure:7108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7618: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_lesstif=yes
 else
@@ -7118,7 +7628,7 @@ if test "$have_lesstif" = yes ; then
   ltv=unknown
   echo unknown > conftest-lt
   echo $ac_n "checking LessTif version number""... $ac_c" 1>&6
-echo "configure:7133: checking LessTif version number" >&5
+echo "configure:7643: checking LessTif version number" >&5
 if eval "test \"`echo '$''{'ac_cv_lesstif_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7133,7 +7643,7 @@ else
                      ac_cv_lesstif_version_string=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 7148 "configure"
+#line 7658 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                      #include <Xm/Xm.h>
@@ -7146,7 +7656,7 @@ else
                        exit(0);
                      }
 EOF
-if { (eval echo configure:7161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ltv=`cat conftest-lt`
                      ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'`
@@ -7176,7 +7686,7 @@ if test "$have_motif" = yes ; then
   mtv=unknown
   echo unknown > conftest-mt
   echo $ac_n "checking Motif version number""... $ac_c" 1>&6
-echo "configure:7191: checking Motif version number" >&5
+echo "configure:7701: checking Motif version number" >&5
 if eval "test \"`echo '$''{'ac_cv_motif_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7191,7 +7701,7 @@ else
                      ac_cv_motif_version_string=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 7206 "configure"
+#line 7716 "configure"
 #include "confdefs.h"
 #include <stdio.h>
                      #include <Xm/Xm.h>
@@ -7204,7 +7714,7 @@ else
                        exit(0);
                      }
 EOF
-if { (eval echo configure:7219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   mtv=`cat conftest-mt`
                      ac_cv_motif_version=`echo $mtv | sed 's/ .*//'`
@@ -7248,7 +7758,7 @@ fi
 motif_requires_xpm=no
 if test "$have_motif" = yes ; then
    echo $ac_n "checking whether Motif requires XPM""... $ac_c" 1>&6
-echo "configure:7263: checking whether Motif requires XPM" >&5
+echo "configure:7773: checking whether Motif requires XPM" >&5
    if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000
    then
      motif_requires_xpm=yes
@@ -7290,7 +7800,7 @@ if test "$have_motif" = yes ; then
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XpQueryExtension in -lXp""... $ac_c" 1>&6
-echo "configure:7305: checking for XpQueryExtension in -lXp" >&5
+echo "configure:7815: checking for XpQueryExtension in -lXp" >&5
 ac_lib_var=`echo Xp'_'XpQueryExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7298,7 +7808,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXp -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7313 "configure"
+#line 7823 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7309,7 +7819,7 @@ int main() {
 XpQueryExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:7324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7363,7 +7873,7 @@ if test "$have_motif" = yes ; then
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for _Xsetlocale in -lXintl""... $ac_c" 1>&6
-echo "configure:7378: checking for _Xsetlocale in -lXintl" >&5
+echo "configure:7888: checking for _Xsetlocale in -lXintl" >&5
 ac_lib_var=`echo Xintl'_'_Xsetlocale | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7371,7 +7881,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXintl -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7386 "configure"
+#line 7896 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7382,7 +7892,7 @@ int main() {
 _Xsetlocale()
 ; return 0; }
 EOF
-if { (eval echo configure:7397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7439,7 +7949,7 @@ fi
 
     /*)
      echo $ac_n "checking for GL headers""... $ac_c" 1>&6
-echo "configure:7454: checking for GL headers" >&5
+echo "configure:7964: checking for GL headers" >&5
      d=$with_gl/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -7449,7 +7959,7 @@ echo "configure:7454: checking for GL headers" >&5
      fi
 
      echo $ac_n "checking for GL libs""... $ac_c" 1>&6
-echo "configure:7464: checking for GL libs" >&5
+echo "configure:7974: checking for GL libs" >&5
      d=$with_gl/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -7485,17 +7995,17 @@ if test "$with_gl" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/gl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/gl.h""... $ac_c" 1>&6
-echo "configure:7500: checking for GL/gl.h" >&5
+echo "configure:8010: checking for GL/gl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7505 "configure"
+#line 8015 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7510: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8020: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7526,17 +8036,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/glx.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/glx.h""... $ac_c" 1>&6
-echo "configure:7541: checking for GL/glx.h" >&5
+echo "configure:8051: checking for GL/glx.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7546 "configure"
+#line 8056 "configure"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7551: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8061: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7568,7 +8078,7 @@ fi
     # to link against.
     #
     echo $ac_n "checking whether GL is really MesaGL""... $ac_c" 1>&6
-echo "configure:7583: checking whether GL is really MesaGL" >&5
+echo "configure:8093: checking whether GL is really MesaGL" >&5
 if eval "test \"`echo '$''{'ac_cv_have_mesa_gl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7580,7 +8090,7 @@ else
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 7595 "configure"
+#line 8105 "configure"
 #include "confdefs.h"
 #include <GL/glx.h>
 EOF
@@ -7609,7 +8119,7 @@ echo "$ac_t""$ac_cv_have_mesa_gl" 1>&6
     #
     if test "$ac_have_mesa_gl" = yes; then
       echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:7624: checking for pthread_create in -lpthread" >&5
+echo "configure:8134: checking for pthread_create in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7617,7 +8127,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7632 "configure"
+#line 8142 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7628,7 +8138,7 @@ int main() {
 pthread_create()
 ; return 0; }
 EOF
-if { (eval echo configure:7643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7675,7 +8185,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for glXCreateContext in -lMesaGL""... $ac_c" 1>&6
-echo "configure:7690: checking for glXCreateContext in -lMesaGL" >&5
+echo "configure:8200: checking for glXCreateContext in -lMesaGL" >&5
 ac_lib_var=`echo MesaGL'_'glXCreateContext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7683,7 +8193,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lMesaGL -lMesaGLU $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7698 "configure"
+#line 8208 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7694,7 +8204,7 @@ int main() {
 glXCreateContext()
 ; return 0; }
 EOF
-if { (eval echo configure:7709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7740,7 +8250,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for glXCreateContext in -lGL""... $ac_c" 1>&6
-echo "configure:7755: checking for glXCreateContext in -lGL" >&5
+echo "configure:8265: checking for glXCreateContext in -lGL" >&5
 ac_lib_var=`echo GL'_'glXCreateContext | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7748,7 +8258,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lGL -lGLU $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7763 "configure"
+#line 8273 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7759,7 +8269,7 @@ int main() {
 glXCreateContext()
 ; return 0; }
 EOF
-if { (eval echo configure:7774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7817,12 +8327,12 @@ EOF
     if test "$ac_have_mesa_gl" = yes; then
 
       echo $ac_n "checking MesaGL version number""... $ac_c" 1>&6
-echo "configure:7832: checking MesaGL version number" >&5
+echo "configure:8342: checking MesaGL version number" >&5
 if eval "test \"`echo '$''{'ac_cv_mesagl_version_string'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7837 "configure"
+#line 8347 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
@@ -7893,7 +8403,7 @@ echo "$ac_t""$ac_cv_mesagl_version_string" 1>&6
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for glBindTexture in -l$gl_lib_1""... $ac_c" 1>&6
-echo "configure:7908: checking for glBindTexture in -l$gl_lib_1" >&5
+echo "configure:8418: checking for glBindTexture in -l$gl_lib_1" >&5
 ac_lib_var=`echo $gl_lib_1'_'glBindTexture | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7901,7 +8411,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7916 "configure"
+#line 8426 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7912,7 +8422,7 @@ int main() {
 glBindTexture()
 ; return 0; }
 EOF
-if { (eval echo configure:7927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7973,7 +8483,7 @@ fi
 
     /*)
      echo $ac_n "checking for GLE headers""... $ac_c" 1>&6
-echo "configure:7988: checking for GLE headers" >&5
+echo "configure:8498: checking for GLE headers" >&5
      d=$with_gle/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -7983,7 +8493,7 @@ echo "configure:7988: checking for GLE headers" >&5
      fi
 
      echo $ac_n "checking for GLE libs""... $ac_c" 1>&6
-echo "configure:7998: checking for GLE libs" >&5
+echo "configure:8508: checking for GLE libs" >&5
      d=$with_gle/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8019,17 +8529,17 @@ if test "$with_gle" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/gle.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/gle.h""... $ac_c" 1>&6
-echo "configure:8034: checking for GL/gle.h" >&5
+echo "configure:8544: checking for GL/gle.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8039 "configure"
+#line 8549 "configure"
 #include "confdefs.h"
 #include <GL/gle.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8044: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8554: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8062,17 +8572,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/gutil.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/gutil.h""... $ac_c" 1>&6
-echo "configure:8077: checking for GL/gutil.h" >&5
+echo "configure:8587: checking for GL/gutil.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8082 "configure"
+#line 8592 "configure"
 #include "confdefs.h"
 #include <GL/gutil.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8087: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8597: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8103,17 +8613,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "GL/tube.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for GL/tube.h""... $ac_c" 1>&6
-echo "configure:8118: checking for GL/tube.h" >&5
+echo "configure:8628: checking for GL/tube.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8123 "configure"
+#line 8633 "configure"
 #include "confdefs.h"
 #include <GL/tube.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8159,7 +8669,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for gleCreateGC in -lgle""... $ac_c" 1>&6
-echo "configure:8174: checking for gleCreateGC in -lgle" >&5
+echo "configure:8684: checking for gleCreateGC in -lgle" >&5
 ac_lib_var=`echo gle'_'gleCreateGC | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8167,7 +8677,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8182 "configure"
+#line 8692 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8178,7 +8688,7 @@ int main() {
 gleCreateGC()
 ; return 0; }
 EOF
-if { (eval echo configure:8193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8238,7 +8748,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for uview_direction in -lgle""... $ac_c" 1>&6
-echo "configure:8253: checking for uview_direction in -lgle" >&5
+echo "configure:8763: checking for uview_direction in -lgle" >&5
 ac_lib_var=`echo gle'_'uview_direction | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8246,7 +8756,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8261 "configure"
+#line 8771 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8257,7 +8767,7 @@ int main() {
 uview_direction()
 ; return 0; }
 EOF
-if { (eval echo configure:8272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8302,7 +8812,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for uview_direction_d in -lmatrix""... $ac_c" 1>&6
-echo "configure:8317: checking for uview_direction_d in -lmatrix" >&5
+echo "configure:8827: checking for uview_direction_d in -lmatrix" >&5
 ac_lib_var=`echo matrix'_'uview_direction_d | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8310,7 +8820,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmatrix $GL_LIBS -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8325 "configure"
+#line 8835 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8321,7 +8831,7 @@ int main() {
 uview_direction_d()
 ; return 0; }
 EOF
-if { (eval echo configure:8336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8394,7 +8904,7 @@ fi
 
     /*)
      echo $ac_n "checking for XPM headers""... $ac_c" 1>&6
-echo "configure:8409: checking for XPM headers" >&5
+echo "configure:8919: checking for XPM headers" >&5
      d=$with_xpm/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -8404,7 +8914,7 @@ echo "configure:8409: checking for XPM headers" >&5
      fi
 
      echo $ac_n "checking for XPM libs""... $ac_c" 1>&6
-echo "configure:8419: checking for XPM libs" >&5
+echo "configure:8929: checking for XPM libs" >&5
      d=$with_xpm/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8437,17 +8947,17 @@ if test "$with_xpm" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/xpm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/xpm.h""... $ac_c" 1>&6
-echo "configure:8452: checking for X11/xpm.h" >&5
+echo "configure:8962: checking for X11/xpm.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8457 "configure"
+#line 8967 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8513,7 +9023,7 @@ fi
 
     /*)
      echo $ac_n "checking for XSHM headers""... $ac_c" 1>&6
-echo "configure:8528: checking for XSHM headers" >&5
+echo "configure:9038: checking for XSHM headers" >&5
      d=$with_xshm/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -8523,7 +9033,7 @@ echo "configure:8528: checking for XSHM headers" >&5
      fi
 
      echo $ac_n "checking for XSHM libs""... $ac_c" 1>&6
-echo "configure:8538: checking for XSHM libs" >&5
+echo "configure:9048: checking for XSHM libs" >&5
      d=$with_xshm/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8558,17 +9068,17 @@ if test "$with_xshm" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/XShm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/XShm.h""... $ac_c" 1>&6
-echo "configure:8573: checking for X11/extensions/XShm.h" >&5
+echo "configure:9083: checking for X11/extensions/XShm.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8578 "configure"
+#line 9088 "configure"
 #include "confdefs.h"
 #include <X11/extensions/XShm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8583: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8602,17 +9112,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6
-echo "configure:8617: checking for sys/ipc.h" >&5
+echo "configure:9127: checking for sys/ipc.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8622 "configure"
+#line 9132 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8647,17 +9157,17 @@ fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "sys/shm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/shm.h""... $ac_c" 1>&6
-echo "configure:8662: checking for sys/shm.h" >&5
+echo "configure:9172: checking for sys/shm.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8667 "configure"
+#line 9177 "configure"
 #include "confdefs.h"
 #include <sys/shm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8672: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8709,7 +9219,7 @@ fi
   LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
 
   echo $ac_n "checking for XShmQueryExtension in -lXextSam""... $ac_c" 1>&6
-echo "configure:8724: checking for XShmQueryExtension in -lXextSam" >&5
+echo "configure:9234: checking for XShmQueryExtension in -lXextSam" >&5
 ac_lib_var=`echo XextSam'_'XShmQueryExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -8717,7 +9227,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXextSam -lX11 -lXext -lm $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8732 "configure"
+#line 9242 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8728,7 +9238,7 @@ int main() {
 XShmQueryExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:8743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8795,7 +9305,7 @@ fi
 
     /*)
      echo $ac_n "checking for DOUBLE-BUFFER headers""... $ac_c" 1>&6
-echo "configure:8810: checking for DOUBLE-BUFFER headers" >&5
+echo "configure:9320: checking for DOUBLE-BUFFER headers" >&5
      d=$with_xdbe/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -8805,7 +9315,7 @@ echo "configure:8810: checking for DOUBLE-BUFFER headers" >&5
      fi
 
      echo $ac_n "checking for DOUBLE-BUFFER libs""... $ac_c" 1>&6
-echo "configure:8820: checking for DOUBLE-BUFFER libs" >&5
+echo "configure:9330: checking for DOUBLE-BUFFER libs" >&5
      d=$with_xdbe/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8839,17 +9349,17 @@ if test "$with_xdbe" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/Xdbe.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/Xdbe.h""... $ac_c" 1>&6
-echo "configure:8854: checking for X11/extensions/Xdbe.h" >&5
+echo "configure:9364: checking for X11/extensions/Xdbe.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8859 "configure"
+#line 9369 "configure"
 #include "confdefs.h"
 #include <X11/extensions/Xdbe.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9374: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8912,7 +9422,7 @@ fi
 
     /*)
      echo $ac_n "checking for XReadDisplay headers""... $ac_c" 1>&6
-echo "configure:8927: checking for XReadDisplay headers" >&5
+echo "configure:9437: checking for XReadDisplay headers" >&5
      d=$with_readdisplay/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -8922,7 +9432,7 @@ echo "configure:8927: checking for XReadDisplay headers" >&5
      fi
 
      echo $ac_n "checking for XReadDisplay libs""... $ac_c" 1>&6
-echo "configure:8937: checking for XReadDisplay libs" >&5
+echo "configure:9447: checking for XReadDisplay libs" >&5
      d=$with_readdisplay/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -8955,17 +9465,17 @@ if test "$with_readdisplay" = yes; then
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   ac_safe=`echo "X11/extensions/readdisplay.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/readdisplay.h""... $ac_c" 1>&6
-echo "configure:8970: checking for X11/extensions/readdisplay.h" >&5
+echo "configure:9480: checking for X11/extensions/readdisplay.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8975 "configure"
+#line 9485 "configure"
 #include "confdefs.h"
 #include <X11/extensions/readdisplay.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9490: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9001,61 +9511,60 @@ fi
 #       Check for a program to generate random text.
 #
 #       Zippy is funnier than the idiocy generally spat out by `fortune',
-#       so try to find that, by invoking Emacs and asking it where its 
-#       libexec directory is ("yow" lives in there.)
+#       so first see if "fortune zippy" works.  Else, use plain "fortune".
 #
-#       If that doesn't work, see if fortune, zippy, or yow are on $PATH,
-#       and if so, use them.
-#
-#       If that doesn't work, look in /usr/games, and if it's there, use
-#       the full pathname.
+#       We used to dig around in Emacs to look for the "yow" program, but
+#       most people who have Emacs also have "fortune zippy", so nevermind.
 #
 ###############################################################################
 
-with_zippy_req=""
-# Check whether --with-zippy or --without-zippy was given.
-if test "${with_zippy+set}" = set; then
-  withval="$with_zippy"
-  with_zippy_req="$withval"; with_zippy="$withval"
+with_fortune_req=""
+# Check whether --with-fortune or --without-fortune was given.
+if test "${with_fortune+set}" = set; then
+  withval="$with_fortune"
+  with_fortune_req="$withval"; with_fortune="$withval"
 else
-  with_zippy=yes
+  with_fortune=yes
 fi
 
 
-if test "$with_zippy" = no || test "$with_zippy" = yes ; then
-  with_zippy=""
-  with_zippy_req=""
+if test "$with_fortune" = no || test "$with_fortune" = yes ; then
+  with_fortune=""
+  with_fortune_req=""
 fi
 
-if test -n "$with_zippy_req" ; then
-  ac_cv_zippy_program=""
-  case "$with_zippy_req" in
+if test -n "$with_fortune_req" ; then
+  ac_cv_fortune_program=""
+  case "$with_fortune_req" in
     /*)
-      echo $ac_n "checking for $with_zippy_req""... $ac_c" 1>&6
-echo "configure:9047: checking for $with_zippy_req" >&5
-      if test -x "$with_zippy_req" ; then
+
+      set dummy $with_fortune_req ; fortune_tmp=$2
+      echo $ac_n "checking for $fortune_tmp""... $ac_c" 1>&6
+echo "configure:9555: checking for $fortune_tmp" >&5
+      if test -x "$fortune_tmp" ; then
         echo "$ac_t""yes" 1>&6
       else
         echo "$ac_t""no" 1>&6
-        with_zippy=""
+        with_fortune=""
       fi
     ;;
     *)
+      set dummy $with_fortune_req ; fortune_tmp=$2
       # don't cache
-      unset ac_cv_path_zip2
-      # Extract the first word of "$with_zippy_req", so it can be a program name with args.
-set dummy $with_zippy_req; ac_word=$2
+      unset ac_cv_path_fortune_tmp
+      # Extract the first word of "$fortune_tmp", so it can be a program name with args.
+set dummy $fortune_tmp; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:9061: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_zip2'+set}'`\" = set"; then
+echo "configure:9570: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_fortune_tmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  case "$zip2" in
+  case "$fortune_tmp" in
   /*)
-  ac_cv_path_zip2="$zip2" # Let the user override the test with a path.
+  ac_cv_path_fortune_tmp="$fortune_tmp" # Let the user override the test with a path.
   ;;
   ?:/*)                         
-  ac_cv_path_zip2="$zip2" # Let the user override the test with a dos path.
+  ac_cv_path_fortune_tmp="$fortune_tmp" # Let the user override the test with a dos path.
   ;;
   *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
@@ -9063,7 +9572,7 @@ else
   for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      ac_cv_path_zip2="$ac_dir/$ac_word"
+      ac_cv_path_fortune_tmp="$ac_dir/$ac_word"
       break
     fi
   done
@@ -9071,263 +9580,135 @@ else
   ;;
 esac
 fi
-zip2="$ac_cv_path_zip2"
-if test -n "$zip2"; then
-  echo "$ac_t""$zip2" 1>&6
+fortune_tmp="$ac_cv_path_fortune_tmp"
+if test -n "$fortune_tmp"; then
+  echo "$ac_t""$fortune_tmp" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
-      if test "$zip2" = ""; then
-        with_zippy=""
+      if test -z "$fortune_tmp" ; then
+        with_fortune=""
       fi
     ;;
   esac
-  ac_cv_zippy_program="$with_zippy"
+  ac_cv_fortune_program="$with_fortune"
 
-elif test -n "$ac_cv_zippy_program"; then
-  echo "$ac_t""checking for zippy... (cached) $ac_cv_zippy_program" 1>&6
+elif test -n "$ac_cv_fortune_program"; then
+  echo "$ac_t""checking for fortune... (cached) $ac_cv_fortune_program" 1>&6
 fi
 
-if test ! -n "$ac_cv_zippy_program"; then
+unset ac_cv_path_fortune_tmp
+unset fortune_tmp
 
-  for ac_prog in emacs
+if test -z "$ac_cv_fortune_program" ; then
+
+  # first look for fortune in /usr/games/ (and use absolute path)
+  for ac_prog in fortune
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:9111: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_emacs_exe'+set}'`\" = set"; then
+echo "configure:9624: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_fortune_tmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  if test -n "$emacs_exe"; then
-  ac_cv_prog_emacs_exe="$emacs_exe" # Let the user override the test.
-else
+  case "$fortune_tmp" in
+  /*)
+  ac_cv_path_fortune_tmp="$fortune_tmp" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_fortune_tmp="$fortune_tmp" # Let the user override the test with a dos path.
+  ;;
+  *)
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
+  ac_dummy=""/usr/games""
+  for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_emacs_exe="$ac_prog"
+      ac_cv_path_fortune_tmp="$ac_dir/$ac_word"
       break
     fi
   done
   IFS="$ac_save_ifs"
+  ;;
+esac
 fi
-fi
-emacs_exe="$ac_cv_prog_emacs_exe"
-if test -n "$emacs_exe"; then
-  echo "$ac_t""$emacs_exe" 1>&6
+fortune_tmp="$ac_cv_path_fortune_tmp"
+if test -n "$fortune_tmp"; then
+  echo "$ac_t""$fortune_tmp" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
-test -n "$emacs_exe" && break
+test -n "$fortune_tmp" && break
 done
 
-  for ac_prog in xemacs
+
+  # if it's not there, look on $PATH (and don't use absolute path)
+  if test -z "$fortune_tmp" ; then
+     for ac_prog in fortune
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:9145: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_xemacs_exe'+set}'`\" = set"; then
+echo "configure:9667: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_fortune_tmp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  if test -n "$xemacs_exe"; then
-  ac_cv_prog_xemacs_exe="$xemacs_exe" # Let the user override the test.
+  if test -n "$fortune_tmp"; then
+  ac_cv_prog_fortune_tmp="$fortune_tmp" # Let the user override the test.
 else
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
   ac_dummy="$PATH"
   for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_xemacs_exe="$ac_prog"
+      ac_cv_prog_fortune_tmp="$ac_prog"
       break
     fi
   done
   IFS="$ac_save_ifs"
 fi
 fi
-xemacs_exe="$ac_cv_prog_xemacs_exe"
-if test -n "$xemacs_exe"; then
-  echo "$ac_t""$xemacs_exe" 1>&6
+fortune_tmp="$ac_cv_prog_fortune_tmp"
+if test -n "$fortune_tmp"; then
+  echo "$ac_t""$fortune_tmp" 1>&6
 else
   echo "$ac_t""no" 1>&6
 fi
 
-test -n "$xemacs_exe" && break
+test -n "$fortune_tmp" && break
 done
 
-
-  ac_cv_zippy_program=""
-  eargs='-batch -q -nw --eval'
-
-  if test -n "$emacs_exe" ; then
-    echo $ac_n "checking for emacs yow""... $ac_c" 1>&6
-echo "configure:9180: checking for emacs yow" >&5
-    #
-    # get emacs to tell us where the libexec directory is.
-    #
-    dir=`$emacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-         2>/dev/null | tail -1`
-    dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
-    #
-    # try running libexec/yow and see if it exits without error.
-    #
-    if test x"$dir" != x -a -x "$dir/yow" ; then
-      if $dir/yow >&- 2>&- ; then
-        ac_cv_zippy_program="$dir/yow"
-        echo "$ac_t""$ac_cv_zippy_program" 1>&6
-      else
-        echo "$ac_t""no" 1>&6
-      fi
-    fi
   fi
 
-  if test -z "$ac_cv_zippy_program" ; then
-    echo $ac_n "checking for xemacs yow""... $ac_c" 1>&6
-echo "configure:9202: checking for xemacs yow" >&5
-    if test -n "$xemacs_exe" ; then
-      #
-      # get xemacs to tell us where the libexec directory is.
-      #
-      dir=`$xemacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-           2>/dev/null | tail -1`
-      dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
-      #
-      # try running libexec/yow and see if it exits without error.
-      #
-      if test x"$dir" != x -a -x "$dir/yow" ; then
-        if $dir/yow >&- 2>&- ; then
-          ac_cv_zippy_program="$dir/yow"
-          echo "$ac_t""$ac_cv_zippy_program" 1>&6
-        else
-          #
-          # in some xemacs installations, the pathname of the yow.lines file
-          # isn't hardcoded into the yow executable, and must be passed on 
-          # the command line.  See if it's in libexec/../etc/.
-
-          # M4 sucks!!
-          
-          dir_up=`echo "$dir" | sed 's@/[^/]*$@@'`
-          
-
-          yowlines="$dir_up/etc/yow.lines"
-          if $dir/yow -f $yowlines >&- 2>&- ; then
-            ac_cv_zippy_program="$dir/yow -f $yowlines"
-            echo "$ac_t""$ac_cv_zippy_program" 1>&6
-          else
-            #
-            # In newer XEmacs releases, yow.lines is in a different place,
-            # and the easiest way to get it is by calling the new function
-            # `locate-data-file'.
-            #
-            yowlines=`$xemacs_exe $eargs \
-              '(princ (concat (locate-data-file "yow.lines") "\n"))' \
-              2>/dev/null | tail -1`
-            if $dir/yow -f $yowlines >&- 2>&- ; then
-              ac_cv_zippy_program="$dir/yow -f $yowlines"
-              echo "$ac_t""$ac_cv_zippy_program" 1>&6
-            else
-              echo "$ac_t""no" 1>&6
-            fi
-          fi
-        fi
-      fi
-    fi
+  # if we didn't find anything, then just assume /usr/games/
+  if test -z "$fortune_tmp" ; then
+     fortune_tmp="/usr/games/fortune"
   fi
 
-  # if that didn't work, try for some other programs...
-  if test -z "$ac_cv_zippy_program" ; then
-    fortune=''
-    for ac_prog in fortune zippy yow
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:9261: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_fortune'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$fortune"; then
-  ac_cv_prog_fortune="$fortune" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_fortune="$ac_prog"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-fortune="$ac_cv_prog_fortune"
-if test -n "$fortune"; then
-  echo "$ac_t""$fortune" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
+  ac_cv_fortune_program="$fortune_tmp"
 
-test -n "$fortune" && break
-done
-
-    # if that didn't work, try for those programs in /usr/games...
-    if test -z "$fortune" ; then
-      for ac_prog in fortune zippy yow
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:9297: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_fortune'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  case "$fortune" in
-  /*)
-  ac_cv_path_fortune="$fortune" # Let the user override the test with a path.
-  ;;
-  ?:/*)                         
-  ac_cv_path_fortune="$fortune" # Let the user override the test with a dos path.
-  ;;
-  *)
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="/usr/games:/usr/local/games:$PATH"
-  for ac_dir in $ac_dummy; do 
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_path_fortune="$ac_dir/$ac_word"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
-fi
-fortune="$ac_cv_path_fortune"
-if test -n "$fortune"; then
-  echo "$ac_t""$fortune" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-test -n "$fortune" && break
-done
-test -n "$fortune" || fortune="fortune"
-
-    fi
+  # now check to see whether "fortune zippy" works.
+  #
+  fortune_tmp="$fortune_tmp zippy"
+  echo $ac_n "checking for zippy quotes""... $ac_c" 1>&6
+echo "configure:9709: checking for zippy quotes" >&5
+  if ( $fortune_tmp >/dev/null 2>&1 ); then
+    ac_cv_fortune_program="$fortune_tmp"
+    echo "$ac_t""$fortune_tmp" 1>&6
+  else
+    echo "$ac_t""no" 1>&6
   fi
-fi
 
-if test -z "$ac_cv_zippy_program" ; then
-  ac_cv_zippy_program=fortune
 fi
 
+unset ac_cv_path_fortune_tmp
+unset fortune_tmp
+
 cat >> confdefs.h <<EOF
-#define ZIPPY_PROGRAM "$ac_cv_zippy_program"
+#define FORTUNE_PROGRAM "$ac_cv_fortune_program"
 EOF
 
 
@@ -9357,7 +9738,7 @@ fi
 
     /*)
      echo $ac_n "checking for setuid hacks headers""... $ac_c" 1>&6
-echo "configure:9372: checking for setuid hacks headers" >&5
+echo "configure:9753: checking for setuid hacks headers" >&5
      d=$setuid_hacks/include
      if test -d $d; then
        X_CFLAGS="-I$d $X_CFLAGS"
@@ -9367,7 +9748,7 @@ echo "configure:9372: checking for setuid hacks headers" >&5
      fi
 
      echo $ac_n "checking for setuid hacks libs""... $ac_c" 1>&6
-echo "configure:9382: checking for setuid hacks libs" >&5
+echo "configure:9763: checking for setuid hacks libs" >&5
      d=$setuid_hacks/lib
      if test -d $d; then
        X_LIBS="-L$d $X_LIBS"
@@ -9497,6 +9878,17 @@ else
 fi
 
 
+# Now that we know whether we have Gnome, we can decide where the XML
+# config files get installed.
+if test -z "$HACK_CONF_DIR" ; then
+  if test -n "$GNOME_DATADIR" ; then
+    HACK_CONF_DIR='${GNOME_DATADIR}/control-center/screensavers'
+  else
+    HACK_CONF_DIR='${prefix}/lib/xscreensaver/config'
+  fi
+fi
+
+
 ###############################################################################
 #
 #       Perform substitutions and write Makefiles.
@@ -9541,6 +9933,8 @@ fi
 
 
 
+
+
 
 
 
@@ -9710,16 +10104,14 @@ s%@glib_config@%$glib_config%g
 s%@gtk_config@%$gtk_config%g
 s%@gnome_config@%$gnome_config%g
 s%@have_gnome_help@%$have_gnome_help%g
-s%@zip2@%$zip2%g
-s%@emacs_exe@%$emacs_exe%g
-s%@xemacs_exe@%$xemacs_exe%g
-s%@fortune@%$fortune%g
+s%@fortune_tmp@%$fortune_tmp%g
 s%@INCLUDES@%$INCLUDES%g
 s%@PREFERRED_DEMO_PROGRAM@%$PREFERRED_DEMO_PROGRAM%g
 s%@ALL_DEMO_PROGRAMS@%$ALL_DEMO_PROGRAMS%g
 s%@SAVER_LIBS@%$SAVER_LIBS%g
 s%@MOTIF_LIBS@%$MOTIF_LIBS%g
 s%@GTK_LIBS@%$GTK_LIBS%g
+s%@XML_LIBS@%$XML_LIBS%g
 s%@HACK_LIBS@%$HACK_LIBS%g
 s%@XPM_LIBS@%$XPM_LIBS%g
 s%@GL_LIBS@%$GL_LIBS%g
@@ -9752,6 +10144,7 @@ s%@GNOMEHELP_Y@%$GNOMEHELP_Y%g
 s%@GNOMEHELP_N@%$GNOMEHELP_N%g
 s%@HACKDIR@%$HACKDIR%g
 s%@GNOME_DATADIR@%$GNOME_DATADIR%g
+s%@HACK_CONF_DIR@%$HACK_CONF_DIR%g
 s%@APPDEFAULTS@%$APPDEFAULTS%g
 s%@DEPEND@%$DEPEND%g
 s%@DEPEND_FLAGS@%$DEPEND_FLAGS%g
@@ -10065,6 +10458,10 @@ if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then
   warn 'The DPMS extension was requested, but was not found.'
 fi
 
+if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then
+  warn 'The Xinerama extension was requested, but was not found.'
+fi
+
 if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then
   warn 'The XF86VMODE extension was requested, but was not found.'
 fi
@@ -10109,6 +10506,13 @@ if test "$with_gnome_req" = yes -a "$have_gnome" = no ; then
   warn2 'headers and/or libraries were not found.'
 fi
 
+if test "$with_xml_req" = yes -a "$have_xml" = no ; then
+  warn  'Use of the XML library was requested, but the necessary'
+  warn2 'headers and/or libraries were not found.'
+elif test "$have_gtk" = yes -a "$have_xml" = no ; then
+  warn  'GTK is being used, but the XML library was not found.'
+  warn2 'Some functionality will be disabled.'
+fi
 
 if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
 
@@ -10233,9 +10637,9 @@ if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then
   warn 'Use of XReadDisplay was requested, but it was not found.'
 fi
 
-if test -n "$with_zippy_req"; then
-  if test "$with_zippy_req" != "$ac_cv_zippy_program" ; then
-    warnL "$with_zippy_req was requested as the Zippy program,"
+if test -n "$with_fortune_req"; then
+  if test "$with_fortune_req" != "$ac_cv_fortune_program" ; then
+    warnL "$with_fortune_req was requested as the Fortune program,"
     warn2 "but was not found.  The default will be used instead."
   fi
 fi
@@ -10268,17 +10672,24 @@ eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
 
 # canonicalize slashes.
-bindir=`echo  "${bindir}"  | sed 's@/$@@;s@//*@/@g'`
-HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+bindir=`echo  "${bindir}"              | sed 's@/$@@;s@//*@/@g'`
+HACKDIR=`echo "${HACKDIR}"             | sed 's@/$@@;s@//*@/@g'`
+HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'`
 
 
-# Sanity check the subdir
+# Sanity check the hackdir
 for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do
   if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then
     echo ""
-    { echo "configure: error: \"--enable-subdir=${bindir}/${bad_choice}\" won't work.
+    { echo "configure: error: \"--with-hackdir=${bindir}/${bad_choice}\" won't work.
                    There will be an executable installed with that name, so
                    that can't be the name of a directory as well.  Please
                    re-configure with a different directory name." 1>&2; exit 1; }
@@ -10322,19 +10733,6 @@ if test \! -z "$rpmv" ; then
 fi
 
 
-# Warn about egregious GNOME bogosity.
-#
-#if (rpm -qv control-center) >&- 2>&- ; then
-#  warning=no
-#  warnL "The Gnome Control Center seems to be installed."
-#  echo  ""
-#  warn2 "Note that simply installing this version of xscreensaver"
-#  warn2 "will not cause GNOME to know about the newly-added display"
-#  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
-#  warn2 "Control Center, try using the \`xscreensaver-demo' command."
-#fi
-
-
 if test "${bindir}" = "${HACKDIR}" ; then
   do_dir_warning=yes
 fi
@@ -10352,7 +10750,7 @@ if test "$do_dir_warning" = yes; then
   echo ""
   echo "      If you would prefer the demos to be installed elsewhere"
   echo "      (for example, in a dedicated directory) you should re-run"
-  echo "      configure with the --enable-subdir=DIR option.  For more"
+  echo "      configure with the --with-hackdir=DIR option.  For more"
   echo "      information, run $0 --help."
   warning=yes
 fi
 if test "$warning" != no; then
   echo '' ; echo "$warnsep" ; echo ''
 fi
+
+if test "$do_dir_warning" = no; then
+  if test "$warning" = no; then
+    echo ''
+  fi
+  echo "User programs will be installed in ${bindir}/"
+  echo "Screen savers will be installed in ${HACKDIR}/"
+  echo "Configuration will be installed in ${HACK_CONF_DIR}/"
+  echo ''
+fi
index 361fac21e5ca762100bb0daa8a3d18dfd11786e9..68a89a58dff7c62e6bb81e473fcc44d9970d7b65 100644 (file)
@@ -861,43 +861,91 @@ fi
 
 ###############################################################################
 #
-#       Handle the --enable-subdir option
+#       Handle the --with-hackdir option
 #
 ###############################################################################
 
-AC_ARG_ENABLE(subdir,[
+have_hackdir=yes
+with_hackdir_req=unspecified
+AC_ARG_WITH(hackdir,[
 Installation options:
 
-  --enable-subdir=DIR     Put the demo programs in a subdirectory of \`bindir',
-                          instead of putting them in bindir itself.  You can
-                          specify the name of the subdirectory.  For example,
-                          \`--exec-prefix=/usr/local --enable-subdir=demos'
-                          would put xscreensaver in /usr/local/bin/, and would
-                          put the demos in /usr/local/bin/demos/.  (If DIR
-                          begins with /, then bindir will not be prepended.)
-
-  --disable-subdir        Just put the demos in \`bindir' (this is the default.)
+  --with-hackdir=DIR      Where to install the hundreds of demo executables.
+                          Default: \`PREFIX/lib/xscreensaver/'
 ],
-  [enable_subdir="$enableval"],[enable_subdir=no])
-if test x"$enable_subdir" = xno; then
+  [with_hackdir="$withval"; with_hackdir_req="$withval"],[with_hackdir=yes])
+
+if test x"$with_hackdir" = xyes; then
+  HACKDIR='${exec_prefix}/lib/xscreensaver'
+elif test x"$with_hackdir" = xno; then
   HACKDIR='${bindir}'
-elif test x"$enable_subdir" = xyes -o x"$enable_subdir" = x ; then
-  echo "error: must be a subdirectory name: --enable-subdir=$enable_subdir"
-  exit 1
 else
   # there must be a better way than this...
-  if test -z "`echo $enable_subdir | sed 's@^/.*@@'`" ; then
+  if test -z "`echo $with_hackdir | sed 's@^/.*@@'`" ; then
     # absolute path
-    HACKDIR=$enable_subdir
+    HACKDIR=$with_hackdir
   else
     # relative path
-    HACKDIR='${bindir}/'$enable_subdir
+    HACKDIR="\${exec_prefix}$with_hackdir"
   fi
 fi
 
 # canonicalize slashes.
 HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
 
+# This option used to be called --enable-subdir; make sure that is no longer
+# used, since configure brain-damagedly ignores unknown --enable options.
+
+obsolete_enable=
+AC_ARG_ENABLE(subdir,,[obsolete_enable=yes])
+if test -n "$obsolete_enable"; then
+  echo "error: the --enable-subdir option has been replaced with"
+  echo "       the new --with-hackdir option; see \`configure --help'"
+  echo "       for more information."
+  exit 1
+fi
+
+
+###############################################################################
+#
+#       Handle the --with-configdir option
+#
+###############################################################################
+
+have_configdir=yes
+with_configdir_req=unspecified
+AC_ARG_WITH(configdir,
+[  --with-configdir=DIR    Where to install the data files that describe each
+                          of the display modes to the GUI.
+                          Default: \`GNOMEPREFIX/control-center/screensavers/'
+                          or \`PREFIX/lib/xscreensaver/config/', depending on
+                          whether GNOME is available.
+],
+  [with_configdir="$withval"; with_configdir_req="$withval"],
+  [with_configdir=yes])
+
+if test x"$with_configdir" = xyes; then
+  # filled in later...
+  HACK_CONF_DIR=''
+elif test x"$with_configdir" = xno; then
+  echo "error: must be yes, or a pathname: --with-configdir=$with_configdir"
+  exit 1
+else
+  # there must be a better way than this...
+  if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then
+    # absolute path
+    CONFIGDIR=$with_configdir
+  else
+    # relative path
+    CONFIGDIR="\${exec_prefix}$with_configdir"
+  fi
+fi
+
+# canonicalize slashes.
+CONFIGDIR=`echo "${CONFIGDIR}" | sed 's@/$@@;s@//*@/@g'`
+
+
+
 
 ###############################################################################
 #
@@ -1098,6 +1146,52 @@ elif test "$with_dpms" != no; then
 fi
 
 
+###############################################################################
+#
+#       Check for the XINERAMA server extension.
+#
+###############################################################################
+
+have_xinerama=no
+with_xinerama_req=unspecified
+AC_ARG_WITH(xinerama-ext,
+[  --with-xinerama-ext     Include support for the XINERAMA extension.],
+  [with_xinerama="$withval"; with_xinerama_req="$withval"],[with_xinerama=yes])
+
+HANDLE_X_PATH_ARG(with_xinerama, --with-xinerama-ext, XINERAMA)
+
+if test "$with_xinerama" = yes; then
+
+  # first check for Xinerama.h
+  AC_CHECK_X_HEADER(X11/extensions/Xinerama.h, [have_xinerama=yes])
+
+  # if that succeeded, then check for the XINERAMA code in the libraries
+  if test "$have_xinerama" = yes; then
+
+    # first look in -lXext
+    have_xinerama=no
+    AC_CHECK_X_LIB(Xext, XineramaQueryExtension, [have_xinerama=yes], [true],
+                  -lXext -lX11)
+
+    # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.)
+    if test "$have_xinerama" = no; then
+      AC_CHECK_X_LIB(Xinerama, XineramaQueryExtension,
+                     [have_xinerama=yes; SAVER_LIBS="$SAVER_LIBS -lXinerama"],
+                     [true], -lXext -lX11)
+    fi
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test "$have_xinerama" = yes; then
+    AC_DEFINE(HAVE_XINERAMA)
+  fi
+
+elif test "$with_xinerama" != no; then
+  echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama"
+  exit 1
+fi
+
+
 ###############################################################################
 #
 #       Check for the XF86VMODE server extension (for virtual screens.)
@@ -1810,7 +1904,7 @@ if test "$with_gtk" = yes; then
   # Check for Gnome Capplet support.
   #
   if test "$have_gnome" = yes -a "$have_gtk" = yes; then
-    gnome_config_libs="gtk capplet gnomeui"
+    gnome_config_libs="gtk capplet gnomeui xml"
     AC_MSG_CHECKING(for Gnome capplet includes)
     AC_CACHE_VAL(ac_cv_gnome_config_cflags,
       [if ( $gnome_config --cflags $gnome_config_libs 2>&1 >/dev/null | \
@@ -1880,6 +1974,57 @@ else
 fi
 
 
+###############################################################################
+#
+#       Check for -lxml (if we have Gtk)
+#
+###############################################################################
+
+have_xml=no
+with_xml_req=unspecified
+AC_ARG_WITH(xml,
+[  --with-xml              The XML toolkit is needed for some parts of
+                          the Gtk interface.],
+[with_xml="$withval"; with_xml_req="$withval"],[with_xml=yes])
+
+HANDLE_X_PATH_ARG(with_xml, --with-xml, XML)
+
+if test "$with_xml" != yes -a "$with_xml" != no ; then
+  echo "error: must be yes or no: --with-xml=$with_xml"
+  exit 1
+fi
+
+if test "$have_gtk" != yes; then
+  # don't bother if no GTK
+  with_xml=no
+fi
+
+if test "$with_xml" = yes; then
+  have_xml=no
+
+  # the XML stuff is likely to be in GTK paths.
+  ac_save_X_CFLAGS="$X_CFLAGS"
+  ac_save_X_LIBS="$X_LIBS"
+  X_CFLAGS="$X_CFLAGS $ac_gtk_config_cflags"
+  X_LIBS="$X_LIBS $ac_gtk_config_libs"
+
+  AC_CHECK_X_HEADER(xmlIO.h, [have_xml=yes])
+
+  if test "$have_xml" = yes; then
+    # we have the header, now check for the library
+    have_xml=no
+    AC_CHECK_X_LIB(xml, xmlParseChunk,
+                   [have_xml=yes
+                    XML_LIBS="-lxml"
+                    AC_DEFINE(HAVE_XML)])
+  fi
+
+  X_CFLAGS="$ac_save_X_CFLAGS"
+  X_LIBS="$ac_save_X_LIBS"
+
+fi
+
+
 ###############################################################################
 #
 #       Checking whether Motif is really Lesstif.
 #       Check for a program to generate random text.
 #
 #       Zippy is funnier than the idiocy generally spat out by `fortune',
-#       so try to find that, by invoking Emacs and asking it where its 
-#       libexec directory is ("yow" lives in there.)
+#       so first see if "fortune zippy" works.  Else, use plain "fortune".
 #
-#       If that doesn't work, see if fortune, zippy, or yow are on $PATH,
-#       and if so, use them.
-#
-#       If that doesn't work, look in /usr/games, and if it's there, use
-#       the full pathname.
+#       We used to dig around in Emacs to look for the "yow" program, but
+#       most people who have Emacs also have "fortune zippy", so nevermind.
 #
 ###############################################################################
 
-with_zippy_req=""
-AC_ARG_WITH(zippy,[
-  --with-zippy=PROGRAM    Some demos are able to run an external program and
+with_fortune_req=""
+AC_ARG_WITH(fortune,[
+  --with-fortune=PROGRAM  Some demos are able to run an external program and
                           display its text; this names the program to use by
                           default (though it can be overridden with X
-                          resources.)  If you don't specify this, the default
-                          is to use \"yow\" from the Emacs distribution (if you
-                          have it) or else to use \"fortune\".],
-  [with_zippy_req="$withval"; with_zippy="$withval"],[with_zippy=yes])
+                          resources.)  Default is \"/usr/games/fortune\".],
+  [with_fortune_req="$withval"; with_fortune="$withval"],[with_fortune=yes])
 
-if test "$with_zippy" = no || test "$with_zippy" = yes ; then
-  with_zippy=""
-  with_zippy_req=""
+if test "$with_fortune" = no || test "$with_fortune" = yes ; then
+  with_fortune=""
+  with_fortune_req=""
 fi
 
-if test -n "$with_zippy_req" ; then
-  ac_cv_zippy_program=""
-  case "$with_zippy_req" in
+if test -n "$with_fortune_req" ; then
+  ac_cv_fortune_program=""
+  case "$with_fortune_req" in
     /*)
-      AC_MSG_CHECKING([for $with_zippy_req])
-      if test -x "$with_zippy_req" ; then
+
+      set dummy $with_fortune_req ; fortune_tmp=$2
+      AC_MSG_CHECKING([for $fortune_tmp])
+      if test -x "$fortune_tmp" ; then
         AC_MSG_RESULT(yes)
       else
         AC_MSG_RESULT(no)
-        with_zippy=""
+        with_fortune=""
       fi
     ;;
     *)
+      set dummy $with_fortune_req ; fortune_tmp=$2
       # don't cache
-      unset ac_cv_path_zip2
-      AC_PATH_PROG(zip2, $with_zippy_req, [])
-      if test "$zip2" = ""; then
-        with_zippy=""
+      unset ac_cv_path_fortune_tmp
+      AC_PATH_PROG(fortune_tmp, $fortune_tmp, [])
+      if test -z "$fortune_tmp" ; then
+        with_fortune=""
       fi
     ;;
   esac
-  ac_cv_zippy_program="$with_zippy"
+  ac_cv_fortune_program="$with_fortune"
 
-elif test -n "$ac_cv_zippy_program"; then
-  AC_MSG_RESULT([checking for zippy... (cached) $ac_cv_zippy_program])
+elif test -n "$ac_cv_fortune_program"; then
+  AC_MSG_RESULT([checking for fortune... (cached) $ac_cv_fortune_program])
 fi
 
-if test ! -n "$ac_cv_zippy_program"; then
+unset ac_cv_path_fortune_tmp
+unset fortune_tmp
 
-  AC_CHECK_PROGS(emacs_exe, emacs)
-  AC_CHECK_PROGS(xemacs_exe, xemacs)
+if test -z "$ac_cv_fortune_program" ; then
 
-  ac_cv_zippy_program=""
-  eargs='-batch -q -nw --eval'
+  # first look for fortune in /usr/games/ (and use absolute path)
+  AC_PATH_PROGS(fortune_tmp, fortune,, "/usr/games")
 
-  if test -n "$emacs_exe" ; then
-    AC_MSG_CHECKING([for emacs yow])
-    #
-    # get emacs to tell us where the libexec directory is.
-    #
-    dir=`$emacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-         2>/dev/null | tail -1`
-    dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
-    #
-    # try running libexec/yow and see if it exits without error.
-    #
-    if test x"$dir" != x -a -x "$dir/yow" ; then
-      if $dir/yow >&- 2>&- ; then
-        ac_cv_zippy_program="$dir/yow"
-        AC_MSG_RESULT($ac_cv_zippy_program)
-      else
-        AC_MSG_RESULT(no)
-      fi
-    fi
+  # if it's not there, look on $PATH (and don't use absolute path)
+  if test -z "$fortune_tmp" ; then
+     AC_CHECK_PROGS(fortune_tmp, fortune)
   fi
 
-  if test -z "$ac_cv_zippy_program" ; then
-    AC_MSG_CHECKING([for xemacs yow])
-    if test -n "$xemacs_exe" ; then
-      #
-      # get xemacs to tell us where the libexec directory is.
-      #
-      dir=`$xemacs_exe $eargs '(princ (concat exec-directory "\n"))' \
-           2>/dev/null | tail -1`
-      dir=`echo "$dir" | sed 's@///*@/@g;s@/$@@'`
-      #
-      # try running libexec/yow and see if it exits without error.
-      #
-      if test x"$dir" != x -a -x "$dir/yow" ; then
-        if $dir/yow >&- 2>&- ; then
-          ac_cv_zippy_program="$dir/yow"
-          AC_MSG_RESULT($ac_cv_zippy_program)
-        else
-          #
-          # in some xemacs installations, the pathname of the yow.lines file
-          # isn't hardcoded into the yow executable, and must be passed on 
-          # the command line.  See if it's in libexec/../etc/.
-
-          # M4 sucks!!
-          changequote(X,Y)
-          dir_up=`echo "$dir" | sed 's@/[^/]*$@@'`
-          changequote([,])
-
-          yowlines="$dir_up/etc/yow.lines"
-          if $dir/yow -f $yowlines >&- 2>&- ; then
-            ac_cv_zippy_program="$dir/yow -f $yowlines"
-            AC_MSG_RESULT($ac_cv_zippy_program)
-          else
-            #
-            # In newer XEmacs releases, yow.lines is in a different place,
-            # and the easiest way to get it is by calling the new function
-            # `locate-data-file'.
-            #
-            yowlines=`$xemacs_exe $eargs \
-              '(princ (concat (locate-data-file "yow.lines") "\n"))' \
-              2>/dev/null | tail -1`
-            if $dir/yow -f $yowlines >&- 2>&- ; then
-              ac_cv_zippy_program="$dir/yow -f $yowlines"
-              AC_MSG_RESULT($ac_cv_zippy_program)
-            else
-              AC_MSG_RESULT(no)
-            fi
-          fi
-        fi
-      fi
-    fi
+  # if we didn't find anything, then just assume /usr/games/
+  if test -z "$fortune_tmp" ; then
+     fortune_tmp="/usr/games/fortune"
   fi
 
-  # if that didn't work, try for some other programs...
-  if test -z "$ac_cv_zippy_program" ; then
-    fortune=''
-    AC_CHECK_PROGS(fortune, [fortune zippy yow])
-    # if that didn't work, try for those programs in /usr/games...
-    if test -z "$fortune" ; then
-      AC_PATH_PROGS(fortune, [fortune zippy yow], fortune,
-                    /usr/games:/usr/local/games:$PATH)
-    fi
+  ac_cv_fortune_program="$fortune_tmp"
+
+  # now check to see whether "fortune zippy" works.
+  #
+  fortune_tmp="$fortune_tmp zippy"
+  AC_MSG_CHECKING([for zippy quotes])
+  if ( $fortune_tmp >/dev/null 2>&1 ); then
+    ac_cv_fortune_program="$fortune_tmp"
+    AC_MSG_RESULT($fortune_tmp)
+  else
+    AC_MSG_RESULT(no)
   fi
-fi
 
-if test -z "$ac_cv_zippy_program" ; then
-  ac_cv_zippy_program=fortune
 fi
 
-AC_DEFINE_UNQUOTED(ZIPPY_PROGRAM, "$ac_cv_zippy_program")
+unset ac_cv_path_fortune_tmp
+unset fortune_tmp
+
+AC_DEFINE_UNQUOTED(FORTUNE_PROGRAM, "$ac_cv_fortune_program")
 
 
 ###############################################################################
@@ -2692,6 +2773,17 @@ else
 fi
 
 
+# Now that we know whether we have Gnome, we can decide where the XML
+# config files get installed.
+if test -z "$HACK_CONF_DIR" ; then
+  if test -n "$GNOME_DATADIR" ; then
+    HACK_CONF_DIR='${GNOME_DATADIR}/control-center/screensavers'
+  else
+    HACK_CONF_DIR='${prefix}/lib/xscreensaver/config'
+  fi
+fi
+
+
 ###############################################################################
 #
 #       Perform substitutions and write Makefiles.
@@ -2705,6 +2797,7 @@ AC_SUBST(ALL_DEMO_PROGRAMS)
 AC_SUBST(SAVER_LIBS)
 AC_SUBST(MOTIF_LIBS)
 AC_SUBST(GTK_LIBS)
+AC_SUBST(XML_LIBS)
 AC_SUBST(HACK_LIBS)
 AC_SUBST(XPM_LIBS)
 AC_SUBST(GL_LIBS)
@@ -2738,6 +2831,7 @@ AC_SUBST(GNOMEHELP_Y)
 AC_SUBST(GNOMEHELP_N)
 AC_SUBST(HACKDIR)
 AC_SUBST(GNOME_DATADIR)
+AC_SUBST(HACK_CONF_DIR)
 
 APPDEFAULTS=$ac_x_app_defaults
 AC_SUBST(APPDEFAULTS)
@@ -2838,6 +2932,10 @@ if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then
   warn 'The DPMS extension was requested, but was not found.'
 fi
 
+if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then
+  warn 'The Xinerama extension was requested, but was not found.'
+fi
+
 if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then
   warn 'The XF86VMODE extension was requested, but was not found.'
 fi
@@ -2882,6 +2980,13 @@ if test "$with_gnome_req" = yes -a "$have_gnome" = no ; then
   warn2 'headers and/or libraries were not found.'
 fi
 
+if test "$with_xml_req" = yes -a "$have_xml" = no ; then
+  warn  'Use of the XML library was requested, but the necessary'
+  warn2 'headers and/or libraries were not found.'
+elif test "$have_gtk" = yes -a "$have_xml" = no ; then
+  warn  'GTK is being used, but the XML library was not found.'
+  warn2 'Some functionality will be disabled.'
+fi
 
 if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
 
@@ -3006,9 +3111,9 @@ if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then
   warn 'Use of XReadDisplay was requested, but it was not found.'
 fi
 
-if test -n "$with_zippy_req"; then
-  if test "$with_zippy_req" != "$ac_cv_zippy_program" ; then
-    warnL "$with_zippy_req was requested as the Zippy program,"
+if test -n "$with_fortune_req"; then
+  if test "$with_fortune_req" != "$ac_cv_fortune_program" ; then
+    warnL "$with_fortune_req was requested as the Fortune program,"
     warn2 "but was not found.  The default will be used instead."
   fi
 fi
@@ -3041,17 +3146,24 @@ eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
 
 # canonicalize slashes.
-bindir=`echo  "${bindir}"  | sed 's@/$@@;s@//*@/@g'`
-HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
+bindir=`echo  "${bindir}"              | sed 's@/$@@;s@//*@/@g'`
+HACKDIR=`echo "${HACKDIR}"             | sed 's@/$@@;s@//*@/@g'`
+HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'`
 
 
-# Sanity check the subdir
+# Sanity check the hackdir
 for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do
   if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then
     echo ""
-    AC_MSG_ERROR([\"--enable-subdir=${bindir}/${bad_choice}\" won't work.
+    AC_MSG_ERROR([\"--with-hackdir=${bindir}/${bad_choice}\" won't work.
                    There will be an executable installed with that name, so
                    that can't be the name of a directory as well.  Please
                    re-configure with a different directory name.])
@@ -3095,19 +3207,6 @@ if test \! -z "$rpmv" ; then
 fi
 
 
-# Warn about egregious GNOME bogosity.
-#
-#if (rpm -qv control-center) >&- 2>&- ; then
-#  warning=no
-#  warnL "The Gnome Control Center seems to be installed."
-#  echo  ""
-#  warn2 "Note that simply installing this version of xscreensaver"
-#  warn2 "will not cause GNOME to know about the newly-added display"
-#  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
-#  warn2 "Control Center, try using the \`xscreensaver-demo' command."
-#fi
-
-
 if test "${bindir}" = "${HACKDIR}" ; then
   do_dir_warning=yes
 fi
@@ -3125,7 +3224,7 @@ if test "$do_dir_warning" = yes; then
   echo ""
   echo "      If you would prefer the demos to be installed elsewhere"
   echo "      (for example, in a dedicated directory) you should re-run"
-  echo "      configure with the --enable-subdir=DIR option.  For more"
+  echo "      configure with the --with-hackdir=DIR option.  For more"
   echo "      information, run $0 --help."
   warning=yes
 fi
@@ -3133,3 +3232,13 @@ fi
 if test "$warning" != no; then
   echo '' ; echo "$warnsep" ; echo ''
 fi
+
+if test "$do_dir_warning" = no; then
+  if test "$warning" = no; then
+    echo ''
+  fi
+  echo "User programs will be installed in ${bindir}/"
+  echo "Screen savers will be installed in ${HACKDIR}/"
+  echo "Configuration will be installed in ${HACK_CONF_DIR}/"
+  echo ''
+fi
index 479588662e55d5da6730089f4d97fa0e75e3d702..6df5137c01fd9ef35fb5a6aa4368830ca1fee89e 100644 (file)
@@ -21,12 +21,16 @@ GNOME_CCDIR = $(GNOME_DATADIR)/control-center/Desktop
 GNOME_PANELDIR = $(GNOME_DATADIR)/gnome/apps/Settings/Desktop
 GNOME_ICONDIR  = $(GNOME_DATADIR)/pixmaps
 GNOME_BINDIR   = $(bindir)
+HACK_CONF_DIR  = @HACK_CONF_DIR@
 
 CC             = @CC@
 CFLAGS         = @CFLAGS@
 LDFLAGS                = @LDFLAGS@
 DEFS           = @DEFS@
-DEFS2          = $(DEFS) -DDEFAULT_PATH_PREFIX='"@HACKDIR@"'
+SUBP_DEFS      = $(DEFS) -DDEFAULT_PATH_PREFIX='"@HACKDIR@"'
+GTK_DEFS       = $(DEFS) -DDEFAULT_ICONDIR='"$(GNOME_ICONDIR)"'
+CONF_DEFS      = -DHACK_CONFIGURATION_PATH='"$(HACK_CONF_DIR)"'
+
 LIBS           = @LIBS@
 PERL           = @PERL@
 
@@ -76,8 +80,10 @@ INCLUDES     = -I. -I$(srcdir) -I$(UTILS_SRC) -I.. @INCLUDES@
 MOTIF_SRCS     = demo-Xm.c demo-Xm-widgets.c
 MOTIF_OBJS     = demo-Xm.o demo-Xm-widgets.o
 
-GTK_SRCS       = demo-Gtk.c demo-Gtk-widgets.c
-GTK_OBJS       = demo-Gtk.o demo-Gtk-widgets.o
+GTK_SRCS       = demo-Gtk.c demo-Gtk-conf.c \
+                 demo-Gtk-widgets.c demo-Gtk-support.c
+GTK_OBJS       = demo-Gtk.o demo-Gtk-conf.o \
+                 demo-Gtk-widgets.o demo-Gtk-support.o
 
 PWENT_SRCS     = passwd-pwent.c
 PWENT_OBJS     = passwd-pwent.o
@@ -100,6 +106,7 @@ TEST_EXES   = test-passwd   test-uid   test-xdpms   test-grab \
 
 MOTIF_LIBS     = @MOTIF_LIBS@ @XPM_LIBS@ $(XMU_LIBS)
 GTK_LIBS       = @GTK_LIBS@ $(XMU_LIBS)
+XML_LIBS       = @XML_LIBS@
 
 XDPMS_LIBS     = @XDPMS_LIBS@
 
@@ -117,7 +124,10 @@ GL_SRCS            = @SAVER_GL_SRCS@
 GL_OBJS                = @SAVER_GL_OBJS@
 GL_LIBS                = @SAVER_GL_LIBS@
 
-LOGO           = $(UTILS_SRC)/logo-50.xpm
+ICON_SRC        = $(UTILS_SRC)/images
+LOGO           = $(ICON_SRC)/logo-50.xpm
+GNOME_ICONS     = $(ICON_SRC)/screensaver-*.xpm
+
 DEMO_UTIL_SRCS = $(UTILS_SRC)/resources.c $(UTILS_SRC)/usleep.c \
                  $(UTILS_SRC)/visual.c
 DEMO_UTIL_OBJS = $(UTILS_BIN)/resources.o $(UTILS_BIN)/usleep.o \
@@ -183,7 +193,8 @@ EXES2               = @ALL_DEMO_PROGRAMS@
 SCRIPTS                = xscreensaver-getimage-file xscreensaver-getimage-video
 
 HDRS           = XScreenSaver_ad.h xscreensaver.h prefs.h remote.h \
-                 demo-Gtk-widgets.h demo-Gtk-stubs.h
+                 demo-Gtk-widgets.h demo-Gtk-stubs.h demo-Gtk-support.h \
+                 demo-Gtk-conf.h
 MEN            = xscreensaver.man xscreensaver-demo.man \
                  xscreensaver-command.man \
                  xscreensaver-getimage.man \
@@ -307,6 +318,7 @@ install-scripts: $(SCRIPTS) munge-scripts
 munge-scripts: $(SCRIPTS)
        @tmp=/tmp/mf.$$$$ ;                                             \
        perl="${PERL}" ;                                                \
+       rm -f $$tmp ;                                                   \
        for program in $(SCRIPTS); do                                   \
          echo "adjusting location of perl in $$program..." ;           \
          sed "s@^\(#!\)\(/[^ ]*/perl[^ ]*\)\(.*\)\$$@\1$$perl\3@"      \
@@ -316,7 +328,8 @@ munge-scripts: $(SCRIPTS)
          else                                                          \
            cat $$tmp > ./$$program ;                                   \
          fi ;                                                          \
-       done
+       done ;                                                          \
+       rm -f $$tmp
 
 install-man: $(MEN)
        @men="$(MEN)" ;                                                 \
@@ -494,6 +507,7 @@ install-gnome:: screensaver-properties-capplet
           fi ;                                                               \
         fi
 
+# xscreensaver.xpm
 install-gnome:: $(LOGO)
        @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
            if [ ! -d "$(install_prefix)$(GNOME_ICONDIR)" ]; then              \
@@ -507,6 +521,23 @@ install-gnome:: $(LOGO)
                  $(install_prefix)$(GNOME_ICONDIR)/$$target                 ;\
         fi
 
+# ../utils/images/screensaver-*.xpm
+install-gnome::
+       @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
+           if [ ! -d "$(install_prefix)$(GNOME_ICONDIR)" ]; then              \
+             echo $(INSTALL_DIRS) "$(install_prefix)$(GNOME_ICONDIR)"        ;\
+                  $(INSTALL_DIRS) "$(install_prefix)$(GNOME_ICONDIR)"        ;\
+           fi                                                                ;\
+          for target in $(GNOME_ICONS) ; do                                  \
+            dest=`echo $$target | sed 's@^.*/@@'`                           ;\
+            echo $(INSTALL_DATA) $$target                                    \
+                 $(install_prefix)$(GNOME_ICONDIR)/$$dest                   ;\
+                 $(INSTALL_DATA) $$target                                    \
+                 $(install_prefix)$(GNOME_ICONDIR)/$$dest                   ;\
+          done                                                              ;\
+        fi
+
+# screensaver-properties.desktop
 uninstall-gnome::
        @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
           f=screensaver-properties.desktop                                   ;\
@@ -516,6 +547,7 @@ uninstall-gnome::
                rm -f $(install_prefix)$(GNOME_PANELDIR)/$$f                  ;\
         fi
 
+# screensaver-properties-capplet
 uninstall-gnome::
        @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
          program=screensaver-properties-capplet                             ;\
@@ -523,6 +555,7 @@ uninstall-gnome::
               rm -f $(install_prefix)$(bindir)/$$program                    ;\
         fi
 
+# xscreensaver.xpm
 uninstall-gnome::
        @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
          target=xscreensaver.xpm                                            ;\
@@ -530,6 +563,16 @@ uninstall-gnome::
               rm -f $(install_prefix)$(GNOME_ICONDIR)/$$target              ;\
         fi
 
+# xscreensaver.xpm
+uninstall-gnome::
+       @if [ "$(GNOME_DATADIR)" != "" ]; then                                \
+          for target in $(GNOME_ICONS) ; do                                  \
+            dest=`echo $$target | sed 's@^.*/@@'`                           ;\
+            echo rm -f $(install_prefix)$(GNOME_ICONDIR)/$$dest             ;\
+                 rm -f $(install_prefix)$(GNOME_ICONDIR)/$$dest             ;\
+          done                                                              ;\
+        fi
+
 install-kde:
        @src="$(srcdir)/xscreensaver.kss" ;                                   \
        if [ "$$KDEDIR" != "" ]; then                                         \
@@ -605,22 +648,25 @@ distdepend: update_ad_version update_man_version XScreenSaver_ad.h
 # Updates the version number in the app-defaults file to be in sync with 
 # the version number in version.h.  This is so people can tell when they
 # have a version skew between the app-defaults file and the executable.
+# Also update hacks/config/README in the same way.
 update_ad_version::
-       @S=XScreenSaver.ad.in ;                                             \
+       @files="XScreenSaver.ad.in ../hacks/config/README" ;                \
        U=$(UTILS_SRC)/version.h ;                                          \
        V=`sed -n 's/.*\([0-9][0-9]*\.[0-9]*\).*/\1/p' < $$U` ;             \
        D=`date '+%d-%b-%Y'` ;                                              \
-       echo -n "Updating version number in $$S to $$V $$D... " ;           \
-       T=/tmp/xs.$$$$ ;                                                    \
-       sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*\(.*\)/\1$$V\2/"         \
-           -e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/"     \
-         < $$S > $$T ;                                                     \
-       if cmp -s $$S $$T ; then                                            \
-         echo "unchanged." ;                                               \
-       else                                                                \
-         cat $$T > $$S ;                                                   \
-         echo "done." ;                                                    \
-       fi ;                                                                \
+       for S in $$files ; do                                               \
+         echo -n "Updating version number in $$S to $$V $$D... " ;         \
+         T=/tmp/xs.$$$$ ;                                                  \
+         sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*\(.*\)/\1$$V\2/"       \
+             -e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/"   \
+           < $$S > $$T ;                                                   \
+         if cmp -s $$S $$T ; then                                          \
+           echo "unchanged." ;                                             \
+         else                                                              \
+           cat $$T > $$S ;                                                 \
+           echo "done." ;                                                  \
+         fi ;                                                              \
+       done ;                                                              \
        rm $$T
 
 update_man_version::
@@ -672,11 +718,22 @@ $(SAVER_UTIL_OBJS):
 .c.o:
        $(CC) -c $(INCLUDES) $(DEFS)  $(CFLAGS) $(X_CFLAGS) $<
 
-# subprocs is the only one that takes an extra -D option.
+# subprocs takes an extra -D option.
 subprocs.o: subprocs.c
-       $(CC) -c $(INCLUDES) $(DEFS2) $(CFLAGS) $(X_CFLAGS) \
+       $(CC) -c $(INCLUDES) $(SUBP_DEFS) $(CFLAGS) $(X_CFLAGS) \
          $(srcdir)/subprocs.c
 
+# demo-Gtk takes an extra -D option, and an extra -I option.
+demo-Gtk.o: demo-Gtk.c
+       $(CC) -c $(INCLUDES) $(SUBP_DEFS) -I$(ICON_SRC) $(GTK_DEFS) \
+         $(CFLAGS) $(X_CFLAGS) \
+         $(srcdir)/demo-Gtk.c
+
+# demo-Gtk-conf takes an extra -D option.
+demo-Gtk-conf.o: demo-Gtk-conf.c
+       $(CC) -c $(INCLUDES) $(CONF_DEFS) $(GTK_DEFS) $(CFLAGS) $(X_CFLAGS) \
+         $(srcdir)/demo-Gtk-conf.c
+
 
 # How we build the default app-defaults file into the program.
 #
@@ -708,7 +765,7 @@ xscreensaver-demo-Xm: $(DEMO_OBJS) $(MOTIF_OBJS)
 
 xscreensaver-demo-Gtk: $(DEMO_OBJS) $(GTK_OBJS)
        $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(GTK_OBJS) $(LIBS) $(X_LIBS) \
-       $(GTK_LIBS) $(X_PRE_LIBS) -lXt -lX11 $(XDPMS_LIBS) -lXext \
+       $(GTK_LIBS) $(XML_LIBS) $(X_PRE_LIBS) -lXt -lX11 $(XDPMS_LIBS) -lXext \
        $(X_EXTRA_LIBS)
 
 xscreensaver-getimage: $(GETIMG_OBJS)
@@ -737,7 +794,7 @@ test-apm: test-apm.o
        $(CC) $(LDFLAGS) -o $@ test-apm.o $(SAVER_LIBS) -lapm
 
 TEST_FADE_OBJS = test-fade.o $(UTILS_SRC)/fade.o $(DEMO_UTIL_OBJS)
-test-fade: test-fade.o 
+test-fade: test-fade.o $(UTILS_BIN)/fade.o
        $(CC) $(LDFLAGS) -o $@ $(TEST_FADE_OBJS) $(SAVER_LIBS)
 
 
@@ -759,81 +816,58 @@ xdpyinfo: xdpyinfo.o
 xscreensaver.o: ../config.h
 xscreensaver.o: $(srcdir)/xscreensaver.h
 xscreensaver.o: $(srcdir)/prefs.h
-xscreensaver.o: $(UTILS_SRC)/version.h
-xscreensaver.o: $(UTILS_SRC)/yarandom.h
-xscreensaver.o: $(UTILS_SRC)/resources.h
-xscreensaver.o: $(UTILS_SRC)/visual.h
-xscreensaver.o: $(UTILS_SRC)/usleep.h
 xscreensaver.o: XScreenSaver_ad.h
 windows.o: ../config.h
 windows.o: $(srcdir)/xscreensaver.h
 windows.o: $(srcdir)/prefs.h
-windows.o: $(UTILS_SRC)/visual.h
-windows.o: $(UTILS_SRC)/fade.h
 timers.o: ../config.h
 timers.o: $(srcdir)/xscreensaver.h
 timers.o: $(srcdir)/prefs.h
 subprocs.o: ../config.h
 subprocs.o: $(srcdir)/xscreensaver.h
 subprocs.o: $(srcdir)/prefs.h
-subprocs.o: $(UTILS_SRC)/yarandom.h
-subprocs.o: $(UTILS_SRC)/visual.h
 xset.o: ../config.h
 xset.o: $(srcdir)/xscreensaver.h
 xset.o: $(srcdir)/prefs.h
 splash.o: ../config.h
 splash.o: $(srcdir)/xscreensaver.h
 splash.o: $(srcdir)/prefs.h
-splash.o: $(UTILS_SRC)/resources.h
 setuid.o: ../config.h
 setuid.o: $(srcdir)/xscreensaver.h
 setuid.o: $(srcdir)/prefs.h
 stderr.o: ../config.h
 stderr.o: $(srcdir)/xscreensaver.h
 stderr.o: $(srcdir)/prefs.h
-stderr.o: $(UTILS_SRC)/resources.h
-stderr.o: $(UTILS_SRC)/visual.h
 demo-Xm.o: ../config.h
-demo-Xm.o: $(UTILS_SRC)/version.h
 demo-Xm.o: $(srcdir)/prefs.h
-demo-Xm.o: $(UTILS_SRC)/resources.h
-demo-Xm.o: $(UTILS_SRC)/visual.h
 demo-Xm.o: $(srcdir)/remote.h
-demo-Xm.o: $(UTILS_SRC)/usleep.h
 demo-Xm.o: XScreenSaver_ad.h
 demo-Xm-widgets.o: ../config.h
 demo-Gtk.o: ../config.h
-demo-Gtk.o: $(UTILS_SRC)/version.h
 demo-Gtk.o: $(srcdir)/prefs.h
-demo-Gtk.o: $(UTILS_SRC)/resources.h
-demo-Gtk.o: $(UTILS_SRC)/visual.h
 demo-Gtk.o: $(srcdir)/remote.h
-demo-Gtk.o: $(UTILS_SRC)/usleep.h
-demo-Gtk.o: $(UTILS_SRC)/logo-50.xpm
-demo-Gtk.o: $(UTILS_SRC)/logo-180.xpm
 demo-Gtk.o: $(srcdir)/demo-Gtk-widgets.h
+demo-Gtk.o: $(srcdir)/demo-Gtk-support.h
+demo-Gtk.o: $(srcdir)/demo-Gtk-conf.h
 demo-Gtk.o: XScreenSaver_ad.h
+demo-Gtk-conf.o: ../config.h
+demo-Gtk-conf.o: $(srcdir)/demo-Gtk-conf.h
 demo-Gtk-widgets.o: ../config.h
 demo-Gtk-widgets.o: $(srcdir)/demo-Gtk-stubs.h
 demo-Gtk-widgets.o: $(srcdir)/demo-Gtk-widgets.h
-xscreensaver-getimage.o: $(UTILS_SRC)/utils.h
+demo-Gtk-widgets.o: $(srcdir)/demo-Gtk-support.h
+demo-Gtk-support.o: ../config.h
+demo-Gtk-support.o: $(srcdir)/demo-Gtk-support.h
 xscreensaver-getimage.o: ../config.h
-xscreensaver-getimage.o: $(UTILS_SRC)/yarandom.h
-xscreensaver-getimage.o: $(UTILS_SRC)/grabscreen.h
-xscreensaver-getimage.o: $(UTILS_SRC)/resources.h
-xscreensaver-getimage.o: $(UTILS_SRC)/colorbars.h
 xscreensaver-getimage.o: $(srcdir)/prefs.h
-xscreensaver-getimage.o: $(UTILS_SRC)/vroot.h
 xscreensaver-getimage.o: XScreenSaver_ad.h
 passwd-pwent.o: ../config.h
 lock.o: ../config.h
 lock.o: $(srcdir)/xscreensaver.h
 lock.o: $(srcdir)/prefs.h
-lock.o: $(UTILS_SRC)/resources.h
 passwd.o: ../config.h
 prefs.o: ../config.h
 prefs.o: $(srcdir)/prefs.h
-prefs.o: $(UTILS_SRC)/resources.h
 dpms.o: ../config.h
 dpms.o: $(srcdir)/xscreensaver.h
 dpms.o: $(srcdir)/prefs.h
@@ -841,13 +875,9 @@ remote.o: ../config.h
 remote.o: $(srcdir)/remote.h
 xscreensaver-command.o: ../config.h
 xscreensaver-command.o: $(srcdir)/remote.h
-xscreensaver-command.o: $(UTILS_SRC)/version.h
 test-passwd.o: ../config.h
 test-passwd.o: $(srcdir)/xscreensaver.h
 test-passwd.o: $(srcdir)/prefs.h
-test-passwd.o: $(UTILS_SRC)/resources.h
-test-passwd.o: $(UTILS_SRC)/version.h
-test-passwd.o: $(UTILS_SRC)/visual.h
 test-passwd.o: XScreenSaver_ad.h
 test-uid.o: ../config.h
 test-xdpms.o: ../config.h
@@ -856,5 +886,4 @@ test-apm.o: ../config.h
 test-fade.o: ../config.h
 test-fade.o: $(srcdir)/xscreensaver.h
 test-fade.o: $(srcdir)/prefs.h
-test-fade.o: $(UTILS_SRC)/fade.h
 
index 5b1d3b65f8d1a1aac14021955bdb489740f4d8a6..77bd854d481c3d96eec73e7f6223ae36b5c3bb27 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 3.34
-!                              25-Oct-2001
+!                              version 4.00
+!                              02-Jan-2002
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
@@ -45,7 +45,7 @@
 *lock:                 False
 *lockVTs:              True
 *verbose:              False
-*timestamp:            False
+*timestamp:            True
 *fade:                 True
 *unfade:               False
 *fadeSeconds:          0:00:03
 ! and change other parameters.  See the man page for details.
 !
 *programs:                                                                   \
-                "Qix (solid)"  qix -root -solid -delay 0 -segments 100     \n\
+                "Qix (solid)"  qix -root -solid -segments 100              \n\
           "Qix (transparent)"  qix -root -count 4 -solid -transparent      \n\
                "Qix (linear)"  qix -root -count 5 -solid -transparent        \
                                  -linear -segments 250 -size 100           \n\
                                xflame -root                                \n\
                                wander -root                                \n\
              "Wander (spots)"  wander -root -advance 0 -size 10 -circles     \
-                                 True -length 10000 -reset 100000          \n\
+                                 -length 10000 -reset 100000               \n\
                                critical -root                              \n\
                                phosphor -root                              \n\
                                xmatrix -root                               \n\
                                  -texture_quality -light -fog              \n\
 @GLE_KLUDGE@GL:                        extrusion -root                             \n\
 @GL_KLUDGE@ GL:                        sierpinski3d -root                          \n\
-@GL_KLUDGE@ GL:                        gflux -root                                 \n\
+@GL_KLUDGE@ GL:                        menger -root                                \n\
+@GL_KLUDGE@ GL:         "GFlux"        gflux -root                                 \n\
+@GL_KLUDGE@ GL:         "GFlux (grab)" gflux -root -mode grab                      \n\
 @GL_KLUDGE@ GL:                        stonerview -root                            \n\
 @GL_KLUDGE@ GL:                        starwars -root                              \n\
 @GL_KLUDGE@ GL:                        gltext -root                                \n\
 @GL_KLUDGE@ GL:         "Molecule (lumpy)"     molecule -root -no-bonds -no-labels \n\
 @GL_KLUDGE@ GL:                        dangerball -root                            \n\
 @GL_KLUDGE@ GL:                        circuit -root                               \n\
+@GL_KLUDGE@ GL:                        engine -root                                \n\
+@GL_KLUDGE@ GL:                        flipscreen3d -root                          \n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \n\
 - default-n:                   xearth -nofork -nostars -ncolors 50           \
@@ -394,20 +398,23 @@ XScreenSaver.bourneShell:         /bin/sh
 *Dialog.buttonFont:            *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1
 *Dialog.dateFont:              *-courier-medium-r-*-*-*-80-*-*-*-iso8859-1
 *Dialog.foreground:            #000000
-*Dialog.background:            #BFBFBF
+*Dialog.background:            #D6D6D6
 *Dialog.Button.foreground:     #000000
-*Dialog.Button.background:     #D0D0D0
+*Dialog.Button.background:     #EAEAEA
+!*Dialog.Button.background:    #D6D6D6
+!*Dialog.Button.pointBackground: #EAEAEA
+!*Dialog.Button.clickBackground: #C3C3C3
 *Dialog.text.foreground:       #000000
 *Dialog.text.background:       #FFFFFF
 *passwd.thermometer.foreground:        #FF0000
 *passwd.thermometer.background:        #FFFFFF
-*Dialog.topShadowColor:                #E7E7E7
-*Dialog.bottomShadowColor:     #737373
+*Dialog.topShadowColor:                #FFFFFF
+*Dialog.bottomShadowColor:     #666666
 *Dialog.logo.width:            210
 *Dialog.logo.height:           210
 *Dialog.internalBorderWidth:   30
 *Dialog.borderWidth:           1
-*Dialog.shadowThickness:       4
+*Dialog.shadowThickness:       2
 
 *passwd.heading.label:         XScreenSaver %s
 *passwd.body.label:            This display is locked.
@@ -417,10 +424,9 @@ XScreenSaver.bourneShell:          /bin/sh
 *passwd.thermometer.width:     8
 
 *splash.heading.label:         XScreenSaver %s
-*splash.body.label:            Copyright Â© 1991-2001 by
+*splash.body.label:            Copyright Â© 1991-2002 by
 *splash.body2.label:           Jamie Zawinski <jwz@jwz.org>
-*splash.demo.label:            Demo
-*splash.prefs.label:           Prefs
+*splash.demo.label:            Settings
 *splash.help.label:            Help
 
 
@@ -552,843 +558,52 @@ XScreenSaver*doc.fontList:       *-helvetica-medium-r-*-*-*-100-*-*-*-iso8859-1
 *Cancel.bottomOffset:          10
 
 
-
-
-!=============================================================================
-!
-! Online documentation for xscreensaver-demo.
-!
-!=============================================================================
-
-! sanity check -- hands off.
-*hacks.documentation.isInstalled: True
-
-*hacks.qix.documentation:                                              \
-This is the swiss army chainsaw of qix programs.  It bounces a series  \
-of line segments around the screen, and uses variations on this basic  \
-motion pattern to produce all sorts of different presentations: line   \
-segments, filled polygons, overlapping translucent areas...  Written   \
-by Jamie Zawinski.
-
-*hacks.attraction.documentation:                                       \
-Like qix, this uses a simple simple motion model to generate many      \
-different display modes.  The control points attract each other up to  \
-a certain distance, and then begin to repel each other.         The            \
-attraction/repulsion is proportional to the distance between any two   \
-particles, similar to the strong and weak nuclear forces.              \
-                                                                   \n\n\
-One of the most interesting ways to watch this hack is simply as       \
-bouncing balls, because their motions and interactions with each       \
-other are so odd.  Sometimes two balls will get into a tight orbit     \
-around each other, to be interrupted later by a third, or by the edge  \
-of the screen. It looks quite chaotic.                                 \
-                                                                   \n\n\
-Written by Jamie Zawinski, based on Lisp code by John Pezaris.
-
-*hacks.pyro.documentation:                                             \
-Pyro draws exploding fireworks.         Blah blah blah.  Written by Jamie      \
-Zawinski.
-
-*hacks.helix.documentation:                                            \
-This repeatedly generates spirally string-art-ish patterns.  Written   \
-by Jamie Zawinski.
-
-*hacks.pedal.documentation:                                            \
-This is sort of a combination spirograph/string-art.  It generates a   \
-large, complex polygon, and lets the X server do the bulk of the work  \
-by giving it an even/odd winding rule. Written by Dale Moore, based    \
-on some ancient PDP-11 code.
-
-*hacks.rorschach.documentation:                                                \
-This generates random inkblot patterns.         The algorithm is deceptively   \
-simple for how well it works; it merely walks a dot around the screen  \
-randomly, and then reflects the image horizontally, vertically, or     \
-both.  Any deep-seated neurotic tendencies which this program reveals  \
-are your own problem.  Written by Jamie Zawinski.
-
-*hacks.hopalong.documentation:                                         \
-This draws lacy fractal patterns, based on iteration in the imaginary  \
-plane, from a 1986 Scientific American article.         Mostly written by      \
-Patrick Naughton.
-
-*hacks.greynetic.documentation:                                                \
-This draws random colored and stippled rectangles.  Written by Jamie   \
-Zawinski.
-
-*hacks.imsmap.name: IMSmap
-*hacks.imsmap.documentation:                                           \
-This generates random cloud-like patterns.  It looks quite different   \
-in monochrome and color.  The basic idea is to take four points on     \
-the edge of the image, and assign each a random ``elevation''. Then    \
-find the point between them, and give it a value which is the average  \
-of the other four, plus some small random offset. Then coloration is   \
-done based on elevation.                                               \
-                                                                   \n\n\
-The color selection is done by binding the elevation to either hue,    \
-saturation, or brightness, and assigning random values to the others.  \
-The ``brightness'' mode tends to yield cloudlike patterns, and the     \
-others tend to generate images that look like heat-maps or CAT-scans.  \
-Written by Juergen Nickelsen and Jamie Zawinski.
-
-*hacks.slidescreen.name: SlideScreen
-*hacks.slidescreen.documentation:                                      \
-This takes an image, divides it into a grid, and then randomly shuffles \
-the squares around as if it was one of those annoying ``16-puzzle''     \
-games, where there is a grid of squares, one of which is missing.       \
-I hate trying to solve those puzzles, but watching one permute itself   \
-is more amusing.  Written by Jamie Zawinski.
-
-*hacks.decayscreen.name: DecayScreen
-*hacks.decayscreen.documentation:                                      \
-This takes an image and makes it melt.  You've no doubt seen this       \
-effect before, but no screensaver would really be complete without it.  \
-It works best if there's something colorful visible.  Warning, if the   \
-effect continues after the screen saver is off, seek medical attention. \
-Written by David Wald and Vivek Khera.
-
-*hacks.jigsaw.documentation:                                           \
-This grabs a screen image, carves it up into a jigsaw puzzle,          \
-shuffles it, and then solves the puzzle.  This works especially well   \
-when you feed it an external video signal instead of letting it grab   \
-the screen image (actually, I guess this is generally true...) When    \
-it is grabbing a video image, it is sometimes pretty hard to guess     \
-what the image is going to look like once the puzzle is solved.                \
-Written by Jamie Zawinski.
-
-*hacks.blitspin.name: BlitSpin
-*hacks.blitspin.documentation:                                         \
-The ``blitspin'' hack repeatedly rotates a bitmap by 90 degrees by     \
-using logical operations: the bitmap is divided into quadrants, and    \
-the quadrants are shifted clockwise.  Then the same thing is done      \
-again with progressively smaller quadrants, except that all            \
-sub-quadrants of a given size are rotated in parallel. Written by      \
-Jamie Zawinski based on some cool SmallTalk code seen in in Byte       \
-Magazine in 1981.                                                      \
-                                                                   \n\n\
-As you watch it, the image appears to dissolve into static and then    \
-reconstitute itself, but rotated. You can provide the image to use,    \
-as an XBM or XPM file, or tell it to grab a screen image and rotate    \
-that.
-
-*hacks.slip.documentation:                                             \
-This program throws some random bits on the screen, then sucks them    \
-through a jet engine and spews them out the other side.         To avoid       \
-turning the image completely to mush, every now and then it will and   \
-then it interjects some splashes of color into the scene, or go into   \
-a spin cycle, or stretch the image like taffy, or (this is my          \
-addition) grab an image of your current desktop to chew on.            \
-Originally written by Scott Draves; whacked on by Jamie Zawinski.
-
-*hacks.distort.documentation:                                          \
-This hack grabs an image of the screen, and then lets a transparent    \
-lens wander around the screen, magnifying whatever is underneath.      \
-Written by Jonas Munsin.
-
-*hacks.spotlight.documentation:                                                \
-Draws a spotlight scanning across a black screen, illumnating the      \
-underlying desktop when it passes.  Written by Rick Schultz.
-
-*hacks.hypercube.documentation:                                                \
-This displays 2D projections of the sequence of 3D objects which are   \
-the projections of the 4D analog to the cube: as a square is composed  \
-of four lines, each touching two others; and a cube is composed of     \
-six squares, each touching four others; a hypercube is composed of     \
-eight cubes, each touching six others. To make it easier to            \
-visualize the rotation, it uses a different color for the edges of     \
-each face.  Don't think about it too long, or your brain will melt.    \
-Written by Joe Keane, Fritz Mueller, and Jamie Zawinski.
-
-*hacks.hyperball.documentation:                                                \
-Hyperball is to hypercube as dodecahedron is to cube: this displays    \
-a 2D projection of the sequence of 3D objects which are the projections        \
-of the 4D analog to the dodecahedron.  Written by Joe Keane.
-
-*hacks.halo.documentation:                                             \
-This draws trippy psychedelic circular patterns that hurt to look at.  \
-It can also animate the control-points, but that takes a lot of CPU    \
-and bandwidth. Written by Jamie Zawinski.
-
-*hacks.maze.documentation:                                             \
-This is the ancient X maze demo, modified to work with xscreensaver.   \
-It generates a random maze, then solves it with visual feedback.       \
-Originally by Jim Randell; modified by a cast of thousands.
-
-*hacks.noseguy.documentation:                                          \
-A little man with a big nose wanders around your screen saying         \
-things.         The things which he says can come from a file, or from an      \
-external program like `zippy' or `fortune'.  This was extracted from   \
-`xnlock' by Dan Heller.         Colorized by Jamie Zawinski.
-
-*hacks.flame.documentation:                                            \
-Another iterative fractal generator.  Written by Scott Draves.
-
-*hacks.lmorph.name: LMorph
-*hacks.lmorph.documentation:                                           \
-This generates random spline-ish line drawings and morphs between      \
-them.  Written by Sverre H.  Huseby and Glenn T.  Lines.
-
-*hacks.deco.documentation:                                             \
-This one subdivides and colors rectangles randomly.  It looks kind of  \
-like Brady-Bunch-era rec-room wall paneling.  (Raven says: ``this      \
-screensaver is ugly enough to peel paint.'')  Written by Jamie         \
-Zawinski, inspired by Java code by Michael Bayne.
-
-*hacks.moire.documentation:                                            \
-This one draws cool circular interference patterns.  Most of the       \
-circles you see aren't explicitly rendered, but show up as a result    \
-of interactions between the other pixels that were drawn.  Written by  \
-Jamie Zawinski, inspired by Java code by Michael Bayne.         As he          \
-pointed out, the beauty of this one is that the heart of the display   \
-algorithm can be expressed with just a pair of loops and a handful of  \
-arithmetic, giving it a high ``display hack metric''.
-
-*hacks.moire2.documentation:                                           \
-Another example of the fun you can have with moire                     \
-interference patterns; this hack generates fields of concentric                \
-circles or ovals, and combines the planes with various operations.     \
-The planes are moving independently of one another, causing the                \
-interference lines to ``spray.''  Written by Jamie Zawinski.
-
-*hacks.lightning.documentation:                                                \
-This one draws crackling fractal lightning bolts.  It's simple,                \
-direct, and to the point.  If only it had sound... Written by Keith    \
-Romberg.
-
-*hacks.strange.documentation:                                          \
-This draws strange attractors: it's a colorful,                                \
-unpredictably-animating field of dots that swoops and twists around.   \
-The motion is very nice.  Written by Massimino Pascal.
-
-*hacks.spiral.documentation:                                           \
-Moving circular patterns, by Peter Schmitzberger.  Moving circular     \
-patterns means moire; interference patterns, of course.
-
-*hacks.laser.documentation:                                            \
-Moving radiating lines, that look vaguely like scanning laser beams.   \
-Written by Pascal Pensa.  (Frankie say: relax.)
-
-*hacks.grav.documentation:                                             \
-This program draws a simple orbital simulation.         If you turn on         \
-trails, it looks kind of like a cloud-chamber photograph.  Written     \
-by Greg Bowering.
-
-*hacks.drift.documentation:                                            \
-How could one possibly describe this except as ``drifting recursive    \
-fractal cosmic flames?''  Another fine hack from the Scott Draves      \
-collection of fine hacks.
-
-*hacks.ifs.name: IFS
-*hacks.ifs.documentation:                                              \
-This one draws spinning, colliding iterated-function-system images.    \
-Written by Massimino Pascal.
-
-*hacks.julia.documentation:                                            \
-This one draws spinning, animating (are you detecting a pattern here   \
-yet?)  explorations of the Julia set. You've probably seen static      \
-images of this fractal form before, but it's a lot of fun to watch in  \
-motion as well.         One interesting thing is that there is a small         \
-swinging dot passing in front of the image, which indicates the                \
-control point from which the rest of the image was generated.          \
-Written by Sean McCullough.
-
-*hacks.penrose.documentation:                                          \
-Draws quasiperiodic tilings; think of the implications on modern       \
-formica technology.  Written by Timo Korvola.                          \
-                                                                   \n\n\
-In April 1997, Sir Roger Penrose, a British math professor who has     \
-worked with Stephen Hawking on such topics as relativity, black                \
-holes, and whether time has a beginning, filed a                       \
-copyright-infringement lawsuit against the Kimberly-Clark              \
-Corporation, which Penrose said copied a pattern he created (a         \
-pattern demonstrating that ``a nonrepeating pattern could exist in     \
-nature'') for its Kleenex quilted toilet paper.        Penrose said he         \
-doesn't like litigation but, ``When it comes to the population of      \
-Great Britain being invited by a multinational to wipe their bottoms   \
-on what appears to be the work of a Knight of the Realm, then a last   \
-stand must be taken.''                                                 \
-                                                                   \n\n\
-As reported by News of the Weird #491, 4-jul-1997.
-
-*hacks.sierpinski.documentation:                                       \
-This draws the two-dimensional variant of the recursive Sierpinski     \
-triangle fractal.  Written by Desmond Daignault.
-
-*hacks.braid.documentation:                                            \
-Draws random color-cycling inter-braided concentric circles.  Written  \
-by John Neil.
-
-*hacks.galaxy.documentation:                                           \
-This draws spinning galaxies, which then collide and scatter their     \
-stars to the, uh, four winds or something.  Originally an Amiga                \
-program by Uli Siegmund.
-
-*hacks.bouboule.documentation:                                         \
-This draws what looks like a spinning, deforming baloon with           \
-varying-sized spots painted on its invisible surface.  Written by      \
-Jeremie Petit.
-
-*hacks.swirl.documentation:                                            \
-More flowing, swirly patterns. This version is by M.  Dobie and R.     \
-Taylor, but you might have seen a Mac program similar to this called   \
-FlowFazer.  There is also a cool Java applet of a similar concept
-
-*hacks.flag.documentation:                                             \
-This draws a waving colored flag, that undulates its way around the    \
-screen.         The trick is the flag can contain arbitrary text and images.   \
-By default, it displays either the current system name and OS          \
-type, or a picture of ``Bob,'' but you can replace the text or the     \
-image with a command-line option.  Written by Charles Vidal and Jamie  \
-Zawinski.
-
-*hacks.sphere.documentation:                                           \
-Another of the classic screenhacks of the distant past, this one       \
-draws shaded spheres in multiple colors.  This hack traces its         \
-lineage back to Tom Duff in 1982.
-
-*hacks.forest.documentation:                                           \
-This draws fractal trees.  Written by Peter Baumung.  Everybody loves  \
-fractals, right?
-
-*hacks.lisa.documentation:                                             \
-This draws Lisajous loops, by Caleb Cullen.  Remember that device      \
-they had the Phantom Zone prisoners in during their trial in           \
-Superman?  I think that was one of these.
-
-*hacks.lissie.documentation:                                           \
-Another Lissajous figure.  This one draws the progress of circular     \
-shapes along a path.  Written by Alexander Jolk.
-
-*hacks.goop.documentation:                                             \
-This draws set of animating, transparent, amoeba-like blobs.  The      \
-blobs change shape as they wander around the screen, and they are      \
-translucent, so you can see the lower blobs through the higher ones,   \
-and when one passes over another, their colors merge.  Written by      \
-Jamie Zawinski.         I got the idea for this from a cool mouse pad I        \
-have, which achieves the same kind of effect in real life by having    \
-several layers plastic with colored oil between them.  Written by      \
-Jamie Zawinski.
-
-*hacks.starfish.documentation:                                         \
-This generates a sequence of undulating, throbbing, star-like          \
-patterns which pulsate, rotate, and turn inside out.  Another display  \
-mode uses these shapes to lay down a field of colors, which are then   \
-cycled.         The motion is very organic.  Written by Jamie Zawinski.
-
-*hacks.munch.documentation:                                          \n\
-        DATAI 2                                                              \n\
-        ADDB 1,2                                                     \n\
-        ROTC 2,-22                                                   \n\
-        XOR 1,2                                                              \n\
-        JRST .-4                                                     \n\
-                                                                     \n\
-As reported by HAKMEM, in 1962, Jackson Wright wrote the above PDP-1   \
-code. That code still lives on in this screenhack, some 35 years       \
-later.  The number of lines of enclosing code has increased            \
-substantially, however.  This version is by Tim Showalter.
-
-*hacks.fadeplot.name: FadePlot
-*hacks.fadeplot.documentation:                                         \
-Draws what looks like a waving ribbon following a sinusoidal path.     \
-Written by Bas van Gaalen and Charles Vidal.
-
-*hacks.coral.documentation:                                            \
-Simulates coral growth, albeit somewhat slowly.         This image doesn't     \
-really do it justice.  Written by Frederick Roeber.
-
-*hacks.mountain.documentation:                                         \
-Generates random 3d plots that look vaguely mountainous.  Written by   \
-Pascal Pensa.
-
-*hacks.triangle.documentation:                                         \
-Generates random mountain ranges using iterative subdivision of                \
-triangles.  Written by Tobias Gloth.
-
-*hacks.worm.documentation:                                             \
-An ancient xlock hack that draws multicolored worms that crawl around  \
-the screen.  Written by Brad Taylor, Dave Lemke, Boris Putanec, and    \
-Henrik Theiling.
-
-*hacks.rotor.documentation:                                            \
-Another ancient xlock demo, this one by Tom Lawrence.  It draws a      \
-line segment moving along a complex spiraling curve.  I tweaked this   \
-to generate curvier lines, but still frames of it don't look like      \
-much.
-
-*hacks.ant.documentation:                                              \
-A cellular automaton that is really a two-dimensional Turing machine:  \
-as the heads (``ants'') walk along the screen, they change pixel       \
-values in their path.  Then, as they pass over changed pixels, their   \
-behavior is influenced.         Written by David Bagley.
-
-*hacks.demon.documentation:                                            \
-A cellular automaton that starts with a random field, and organizes    \
-it into stripes and spirals.  Written by David Bagley.
-
-*hacks.loop.documentation:                                             \
-This one produces loop-shaped colonies that spawn, age, and            \
-eventually die.         Written by David Bagley.
-
-*hacks.vines.documentation:                                            \
-This one generates a continuous sequence of small, curvy geometric     \
-patterns.  It scatters them around your screen until it fills up,      \
-then it clears the screen and starts over.  Written by Tracy Camp and  \
-David Hansen.
-
-*hacks.kaleidescope.documentation:                                     \
-Another clone of an ancient meme, consisting largely of frenetic       \
-rotational motion of colored lines.  This one is by Ron Tapia. The     \
-motion is nice, but I think it needs more solids, or perhaps just      \
-brighter colors.  More variations in the rotational speed might help,  \
-too.
-
-*hacks.xjack.documentation:                                            \
-This program behaves schizophrenically and makes a lot of typos.       \
-Written by Jamie Zawinski.  If you haven't seen Stanley Kubrick's      \
-masterpiece, ``The Shining,'' you won't get it.         Those who have         \
-describe this hack as ``inspired.''
-
-*hacks.xlyap.documentation:                                            \
-This generates pretty fractal pictures by doing funky math involving   \
-the ``Lyapunov exponent.''  It has a cool interactive mode, too.       \
-Written by Ron Record.
-
-*hacks.cynosure.documentation:                                         \
-A hack similar to `greynetic', but less frenetic.  The first           \
-implementation was by Stephen Linhart; then Ozymandias G. Desiderata   \
-wrote a Java applet clone.  That clone was discovered by Jamie         \
-Zawinski, and ported to C for inclusion here.
-
-*hacks.flow.documentation:                                             \
-Another series of strange attractors: a flowing series of points,      \
-making strange rotational shapes.  Written by Jeff Butterworth.
-
-*hacks.epicycle.documentation:                                         \
-This program draws the path traced out by a point on the edge of a     \
-circle.         That circle rotates around a point on the rim of another       \
-circle, and so on, several times. These were the basis for the         \
-pre-heliocentric model of planetary motion.  Written by James          \
-Youngman.
-
-*hacks.interference.documentation:                                     \
-Another color-field hack, this one works by computing decaying         \
-sinusoidal waves, and allowing them to interfere with each other as    \
-their origins move.  Written by Hannu Mallat.
-
-*hacks.truchet.documentation:                                          \
-This draws line- and arc-based Truchet patterns that tile the screen.  \
-Written by Adrian Likins.
-
-*hacks.bsod.name: BSOD
-*hacks.bsod.documentation:                                             \
-BSOD stands for ``Blue Screen of Death.''  The finest in personal      \
-computer emulation, this hack simulates popular screen savers from a   \
-number of less robust operating systems.  Written by Jamie Zawinski.
-
-*hacks.crystal.documentation:                                          \
-Moving polygons, similar to a kaleidescope (more like a kaleidescope   \
-than the hack called `kaleid,' actually.) This one by Jouk Jansen.
-
-*hacks.discrete.documentation:                                         \
-More ``discrete map'' systems, including new variants of Hopalong and  \
-Julia, and a few others.  Written by Tim Auckland.
-
-*hacks.kumppa.documentation:                                           \
-Spiraling, spinning, and very, very fast splashes of color rush                \
-toward the screen.  Written by Teemu Suutari.
-
-*hacks.rd-bomb.name: RD-Bomb
-*hacks.rd-bomb.documentation:                                          \
-Another variation of the `Bomb' program by Scott Draves.  This draws   \
-a grid of growing square-like shapes that, once they overtake each     \
-other, react in unpredictable ways.  ``RD'' stands for                 \
-reaction-diffusion.
-
-*hacks.sonar.documentation:                                            \
-This program draws a simulation of a sonar screen.  Written by         \
-default, it displays a random assortment of ``bogies'' on the screen,  \
-but if compiled properly, it can ping (pun intended) your local                \
-network, and actually plot the proximity of the other hosts on your    \
-network to you.         It would be easy to make it monitor other sources of   \
-data, too.  (Processes?         Active network connections?  CPU usage per     \
-user?) Written by Stephen Martin.
-
-*hacks.t3d.name: T3D
-*hacks.t3d.documentation:                                              \
-This draws a working analog clock composed of floating, throbbing      \
-bubbles.  Written by Bernd Paysan.
-
-*hacks.penetrate.documentation:                                                \
-This hack simulates the classic arcade game Missile Command.  Written  \
-by Adam Miller.
-
-*hacks.deluxe.documentation:                                           \
-This draws a pulsing sequence of stars, circles, and lines.  It would  \
-look better if it was faster, but as far as I can tell, there is no    \
-way to make this be both: fast, and flicker-free.  Yet another reason  \
-X sucks.  Written by Jamie Zawinski.
-
-*hacks.compass.documentation:                                          \
-This draws a compass, with all elements spinning about randomly, for   \
-that ``lost and nauseous'' feeling. Written by Jamie Zawinski.
-
-*hacks.squiral.documentation:                                          \
-Draws a set of interacting, square-spiral-producing automata.  The     \
-spirals grow outward until they hit something, then they go around     \
-it.  Written by Jeff Epler.
-
-*hacks.xflame.documentation:                                           \
-Draws a simulation of pulsing fire.  It can also take an arbitrary     \
-image and set it on fire too.  Written by Carsten Haitzler, hacked on  \
-by many others.
-
-*hacks.wander.documentation:                                           \
-Draws a colorful random-walk, in various forms.         Written by Rick        \
-Campbell.
-
-*hacks.critical.documentation:                                         \
-Draws a system of self-organizing lines.  It starts out as random      \
-squiggles, but after a few iterations, order begins to appear.         \
-Written by Martin Pool.
-
-*hacks.phosphor.documentation:                                         \
-Draws a simulation of an old terminal, with large pixels and           \
-long-sustain phosphor. It can run any program as a source of the text  \
-it displays.  Written by Jamie Zawinski.
-
-*hacks.xmatrix.documentation:                                          \
-A rendition of the text scrolls seen in the movie ``The Matrix.''      \
-Written by Jamie Zawinski.
-
-*hacks.petri.documentation:                                            \
-This simulates colonies of mold growing in a petri dish.  Growing      \
-colored circles overlap and leave spiral interference in their wake.   \
-Written by Dan Bornstein.
-
-*hacks.shadebobs.name: ShadeBobs
-*hacks.shadebobs.documentation:                                                \
-This draws smoothly-shaded oscilating oval patterns, that look         \
-something like vapor trails or neon tubes.  Written by Shane Smit.
-
-*hacks.ccurve.name: C Curve
-*hacks.ccurve.documentation:                                           \
-Generates self-similar linear fractals, including the classic ``C      \
-Curve.''  Written by Rick Campbell.
-
-*hacks.blaster.documentation:                                          \
-Draws a simulation of flying space-combat robots (cleverly disguised   \
-as colored circles) doing battle in front of a moving star field.      \
-Written by Jonathan Lin.
-
-*hacks.bumps.documentation:                                            \
-A bit like `Spotlight', except that instead of merely exposing part    \
-of your desktop, it creates a bump map from it.         Basically, it          \
-3D-izes a roaming section of your desktop, based on color intensity.   \
-Written by Shane Smit.
-
-*hacks.xteevee.name: XTeeVee
-*hacks.xteevee.documentation:                                          \
-XTeeVee simulates various television problems, including static,       \
-loss of vertical hold, and a test pattern.  By Greg Knauss.
-
-*hacks.xspirograph.name: XSpiroGraph
-*hacks.xspirograph.documentation:                                      \
-Simulates that pen-in-nested-plastic-gears toy from your childhood.     \
-By Rohit Singh.
-
-*hacks.nerverot.name: NerveRot
-*hacks.nerverot.documentation:                                          \
-Draws different shapes composed of nervously vibrating squiggles,       \
-as if seen through a camera operated by a monkey on crack.              \
-By Dan Bornstein.
-
-*hacks.webcollage.name: WebCollage
-*hacks.webcollage.documentation:                                       \
-This program makes collages out of random images pulled off of the     \
-World Wide Web.         It finds these images by doing random web searches,    \
-and then extracting images from the returned pages.  It can also be    \
-set up to filter the images through the `VidWhacker' program, above,   \
-which looks really great.                                              \
-                                                                   \n\n\
-(Note that most of the images it finds are text, and not pictures.     \
-This is because most of the web is pictures of text.  Which is pretty  \
-sad.)  Written by Jamie Zawinski.
-
-*hacks.vidwhacker.name: VidWhacker
-*hacks.vidwhacker.documentation:                                       \
-This is actually just a shell script that grabs a frame of video from  \
-the system's video input, and then uses some PBM filters (chosen at    \
-random) to manipulate and recombine the video frame in various ways    \
-(edge detection, subtracting the image from a rotated version of       \
-itself, etc.)  Then it displays that image for a few seconds, and      \
-does it again. This works really well if you just feed broadcast       \
-television into it.                                                    \
-                                                                   \n\n\
-Currently, the three lines of the script that actually grab the                \
-source picture are SGI specific, but it should be trivial to adapt it  \
-to work on other systems that can grab video (please send me the       \
-changes if you do this...)
-
-*hacks.rocks.documentation:                                            \
-This draws an animation of flight through an asteroid field, with      \
-changes in rotation and direction.  It can also display 3D             \
-separations for red/blue glasses!  Mostly written by Jamie Zawinski.
-
-*hacks.bubbles.documentation:                                          \
-This simulates the kind of bubble formation that happens when water    \
-boils:small bubbles appear, and as they get closer to each other,      \
-they combine to form larger bubbles, which eventually pop.  Written    \
-by James Macnicol.
-
-*hacks.gears.documentation:                                            \
-This draws sets of turning, interlocking gears, rotating in three      \
-dimensions.  Another GL hack, by Danny Sung, Brian Paul, Ed Mackey,    \
-and Jamie Zawinski.
-
-*hacks.superquadrics.documentation:                                    \
-Ed Mackey reports that he wrote the first version of this program in   \
-BASIC on a Commodore 64 in 1987, as a 320x200 black and white          \
-wireframe.  Now it is GL and has specular reflections.
-
-*hacks.morph3d.name: Morph3D
-*hacks.morph3d.documentation:                                          \
-Another 3d shape-changing GL hack, by Marcelo Vianna.  It has the      \
-same shiny-plastic feel as Superquadrics, as many computer-generated   \
-objects do...
-
-*hacks.cage.documentation:                                             \
-This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius      \
-strip, and rotates it in three dimensions.  Written by Marcelo         \
-Vianna.
-
-*hacks.moebius.documentation:                                          \
-Another M.  C. Escher hack by Marcelo Vianna, this one draws           \
-``Moebius Strip II,'' a GL image of ants walking along the surface of  \
-a moebius strip.
-
-*hacks.stairs.documentation:                                           \
-by Marcelo Vianna's third Escher GL hack, this one draws an            \
-``infinite'' staircase.
-
-*hacks.pipes.documentation:                                            \
-If you've ever been in the same room with a Windows NT machine,                \
-you've probably seen this GL hack.  This version is by Marcelo         \
-Vianna.
-
-*hacks.sproingies.documentation:                                       \
-Q-Bert meets Marble Madness!  Written by Ed Mackey.
-
-*hacks.rubik.documentation:                                            \
-Draws a Rubik's Cube that rotates in three dimensions and repeatedly   \
-shuffles and solves itself.  Another fine GL hack by Marcelo Vianna.
-
-*hacks.atlantis.documentation:                                         \
-This is xfishtank writ large: a GL animation of a number of sharks,    \
-dolphins, and whales.  The swimming motions are great. Originally      \
-written by Mark Kilgard.
-
-*hacks.lament.documentation:                                           \
-Animates a simulation of Lemarchand's Box, repeatedly solving itself.  \
-Requires OpenGL, and a machine with fast hardware support for texture  \
-maps.  Warning: occasionally opens doors.  Written by Jamie Zawinski.
-
-*hacks.bubble3d.name: Bubble3D
-*hacks.bubble3d.documentation:                                         \
-Draws a stream of rising, undulating 3D bubbles, rising toward the     \
-top of the screen, with nice specular reflections. Written by Richard  \
-Jones.
-
-*hacks.glplanet.name: GLPlanet
-*hacks.glplanet.documentation:                                         \
-Draws a planet bouncing around in space.  Written by David Konerding.  \
-The built-in image is a map of the earth (extracted from `xearth'),    \
-but you can wrap any texture around the sphere, e.g., the planetary    \
-textures that come with `ssystem'.
-
-*hacks.pulsar.documentation:                                           \
-Draws some intersecting planes, making use of alpha blending, fog,     \
-textures, and mipmaps, plus a ``frames per second'' meter so that you  \
-can tell how fast your graphics card is...  Requires OpenGL.  Written  \
-by David Konerding.
-
-*hacks.extrusion.documentation:                                                \
-Draws various rotating extruded shapes that twist around, lengthen,    \
-and turn inside out.  Created by David Konerding from the samples      \
-that come with the GL Extrusion library by Linas Vepstas.
-
-*hacks.sierpinski3d.name: Sierpinski3D
-*hacks.sierpinski3d.documentation:                                     \
-This draws the three-dimensional variant of the recursive Sierpinski   \
-triangle fractal, using GL.  Written by Tim Robinson and Jamie Zawinski.
-
-*hacks.ripples.documentation:                                          \
-This draws rippling interference patterns like splashing water.                \
-With the -water option, it manipulates your desktop image to look      \
-like something is dripping into it.  Written by Tom Hammersley.
-
-*hacks.gflux.name: GFlux
-*hacks.gflux.documentation:                                            \
-Draws a rippling waves on a rotating wireframe grid, using GL.         \
-Written by Josiah Pease.
-
-*hacks.xrayswarm.name: XRaySwarm
-*hacks.xrayswarm.documentation:                                        \
-Draws a few swarms of critters flying around the screen, with nicely   \
-faded color trails behind them.  Written by Chris Leger.
-
-*hacks.zoom.documentation:                                              \
-Zooms in on a part of the screen and then moves around.  With the       \
--lenses option the result is like looking through many overlapping      \
-lenses rather than just a simple zoom.  Written by James Macnicol.
-
-*hacks.whirlwindwarp.name: WhirlwindWarp
-*hacks.whirlwindwarp.documentation:                                  \
-Floating stars are acted upon by a mixture of simple 2D              \
-forcefields.  The strength of each forcefield changes                \
-continuously, and it is also switched on and off at random.          \
-By Paul 'Joey' Clark.
-
-*hacks.rotzoomer.name: RotZoomer
-*hacks.rotzoomer.documentation:                                      \
-Creates a collage of rotated and scaled portions of the              \
-screen. Written by Claudio Matsuoka.
-
-*hacks.stonerview.name: StonerView
-*hacks.stonerview.documentation:                                     \
-Chains of colorful squares dance around each other in complex spiral \
-patterns.  Written by Andrew Plotkin, based on SGI's `electropaint'  \
-screensaver.
-
-*hacks.starwars.name: StarWars
-*hacks.starwars.documentation:                                       \
-Draws a stream of text slowly scrolling into the distance at an      \
-angle, over a star field, like at the beginning of the movie of the  \
-same name.  Written by Jamie Zawinski and Claudio Matauoka.
-
-*hacks.gltext.name: GLText
-*hacks.gltext.documentation:                                         \
-Displays a few lines of text spinning around in a solid 3D font.     \
-Written by Jamie Zawinski.
-
-*hacks.molecule.documentation:                                       \
-Draws several different representations of molecules.  Some common   \
-molecules are built in, and it can also read PDB (Protein Data Base) \
-files as input.  Written by Jamie Zawinski.
-
-*hacks.dangerball.name: DangerBall
-*hacks.dangerball.documentation:                                     \
-Draws a ball that periodically extrudes many random spikes.  Ouch!   \
-Written by Jamie Zawinski.
-
-*hacks.whirlygig.name: WhirlyGig
-*hacks.whirlygig.documentation:                                     \
-Draws zooming chains of sinusoidal spots.  Written by Ashton Trey Belew.
-
-*hacks.speedmine.name: SpeedMine
-*hacks.speedmine.documentation:                                     \
-Simulates speeding down a rocky mineshaft, or a funky dancing worm. \
-Written by Conrad Parker.
-
-*hacks.circuit.documentation:                                        \
-Animates a number of 3D electronic components.  Written by Ben Buxton.
-
-*hacks.vermiculate.documentation:                                    \
-Draws squiggly worm-like paths.  Written by Tyler Pierce.
-
-
 !=============================================================================
 !
-! Documentation for some programs that are not bundled with XScreenSaver
+! Pretty names for the hacks that have unusual capitalization.
 !
 !=============================================================================
 
-*hacks.xdaliclock.name: XDaliClock
-*hacks.xdaliclock.documentation:                                       \
-XDaliClock draws a large digital clock, the numbers of which change by \
-``melting'' into their new shapes.  Written by Jamie Zawinski.  This   \
-is not included with the XScreenSaver package, but if you don't have   \
-it already, you can find it at <http://www.jwz.org/xdaliclock/>.
-
-*hacks.xearth.documentation:                                           \
-XEarth draws an image of the Earth, as seen from your favorite vantage \
-point in space, correctly shaded for the current position of the Sun.  \
-Written by Kirk Johnson.  This is not included with the XScreenSaver   \
-package, but if you don't have it already, you can find it at          \
-<http://www.cs.colorado.edu/~tuna/xearth/>.
-
-*hacks.xplanetbg.name: XPlanet
-*hacks.xplanetbg.documentation:                                                \
-XPlanet is like XEarth, but with more options.  It draws an image of    \
-the Earth (or other planets!), as seen from your favorite vantage      \
-point in space, correctly shaded for the current position of the Sun.  \
-Written by Hari Nair.  This is not included with the XScreenSaver      \
-package, but if you don't have it already, you can find it at          \
-<http://xplanet.sourceforge.net/>.
-
-*hacks.ssystem.name: SSystem
-*hacks.ssystem.documentation:                                          \
-SSystem is a GL Solar System simulator.  It simulates flybys of Sun,   \
-the nine planets and a few major satellites, with four camera modes.   \
-Written by Raul Alonso.  This is not included with the XScreenSaver    \
-package, but if you don't have it already, you can find it at          \
-<http://www1.las.es/~amil/ssystem/>.
-
-*hacks.xmountains.documentation:                                       \
-XMountains generates realistic-looking fractal terrains of snow-capped \
-mountains near water, with either a top view or a side view.           \
-Written by Stephen Booth.  This is not included with the XScreenSaver  \
-package, but if you don't have it already, you can find it at          \
-<http://www.epcc.ed.ac.uk/~spb/xmountains/>.                           \
-                                                                   \n\n\
-Be sure to compile it with -DVROOT or it won't work right when launched        \
-by the xscreensaver daemon.
-
-*hacks.xaos.name: XaoS
-*hacks.xaos.documentation:                                             \
-XaoS generates fast fly-through animations of the Mandelbrot and other \
-fractal sets.  Written by Thomas Marsh and Jan Hubicka.    This is not \
-included with the XScreenSaver package, but if you don't have it       \
-already, you can find it at <http://limax.paru.cas.cz/~hubicka/XaoS/>.
-
-*hacks.xfishtank.name: XFishTank
-*hacks.xfishtank.documentation:                                                \
-Fish!  This is not included with the XScreenSaver package, but if you  \
-don't have it already, you can find it at                               \
-<http://metalab.unc.edu/pub/Linux/X11/demos/>.
-
-*hacks.xsnow.documentation:                                            \
-Draws falling snow and the occasional tiny Santa.  By Rick Jansen.      \
-You can find it at <http://www.euronet.nl/~rja/Xsnow/>.
-
-*hacks.goban.documentation:                                            \
-Replays historical games of go (aka wei-chi and baduk) on the screen.   \
-By Scott Draves.  You can find it at <http://www.draves.org/goban/>.
-
-*hacks.electricsheep.name: ElectricSheep
-*hacks.electricsheep.documentation:                                    \
-ElectricSheep is an xscreensaver module that displays mpeg video of    \
-an animated fractal flame.  In the background, it contributes render   \
-cycles to the next animation.  Periodically it uploades completed      \
-frames to the server, where they are compressed for distribution to    \
-all clients.                                                           \
-                                                                   \n\n\
-This program is recommended only if you have a high bandwidth          \
-connection to the Internet.                                            \
-                                                                   \n\n\
-By Scott Draves.  You can find it at <http://www.electricsheep.org/>.   \
-See that web site for configuration information.
-
-*hacks.cosmos.documentation:                                           \
-Draws fireworks and zooming, fading flares.  By Tom Campbell.           \
-You can find it at <http://www.mindspring.com/~campbell/cosmos/>.
-
+*hacks.imsmap.name:         IMSmap
+*hacks.slidescreen.name:    SlideScreen
+*hacks.decayscreen.name:    DecayScreen
+*hacks.blitspin.name:       BlitSpin
+*hacks.lmorph.name:         LMorph
+*hacks.ifs.name:            IFS
+*hacks.fadeplot.name:       FadePlot
+*hacks.bsod.name:           BSOD
+*hacks.rd-bomb.name:        RD-Bomb
+*hacks.t3d.name:            T3D
+*hacks.shadebobs.name:      ShadeBobs
+*hacks.ccurve.name:         C Curve
+*hacks.xteevee.name:        XTeeVee
+*hacks.xspirograph.name:    XSpiroGraph
+*hacks.nerverot.name:       NerveRot
+*hacks.webcollage.name:     WebCollage
+*hacks.vidwhacker.name:     VidWhacker
+*hacks.morph3d.name:        Morph3D
+*hacks.bubble3d.name:       Bubble3D
+*hacks.glplanet.name:       GLPlanet
+*hacks.sierpinski3d.name:   Sierpinski3D
+*hacks.gflux.name:          GFlux
+*hacks.xrayswarm.name:      XRaySwarm
+*hacks.whirlwindwarp.name:  WhirlwindWarp
+*hacks.rotzoomer.name:      RotZoomer
+*hacks.stonerview.name:     StonerView
+*hacks.starwars.name:       StarWars
+*hacks.gltext.name:         GLText
+*hacks.dangerball.name:     DangerBall
+*hacks.whirlygig.name:      WhirlyGig
+*hacks.speedmine.name:      SpeedMine
+*hacks.xdaliclock.name:     XDaliClock
+*hacks.xplanetbg.name:      XPlanet
+*hacks.ssystem.name:        SSystem
+*hacks.xaos.name:           XaoS
+*hacks.xfishtank.name:      XFishTank
+*hacks.electricsheep.name:  ElectricSheep
 *hacks.sphereEversion.name: SphereEversion
-*hacks.sphereEversion.documentation:                                   \
-SphereEversion draws an animation of a sphere being turned inside out.  \
-A sphere can be turned inside out, without any tears, sharp creases or  \
-discontinuities, if the surface of the sphere is allowed to intersect   \
-itself.  This program animates what is known as the Thurston Eversion.  \
-Written by Nathaniel Thurston and Michael McGuffin.  This program is    \
-not included with the XScreenSaver package, but if you don't have it    \
-already, you can find it at <http://www.dgp.utoronto.ca/~mjmcguff/eversion/>.
+
+! obsolete, but still used by xscreensaver-demo-Xm.
+*hacks.documentation.isInstalled: True
 
 ! (xrdb prevention kludge: whole file) */
index e159f5b4a3b6c6115f5c4e3d6ff270571e55a0f9..b06511d9778769afd1d862b7fcd0fb5aa3e22c61 100644 (file)
@@ -18,7 +18,7 @@
 "*lock:                        False",
 "*lockVTs:             True",
 "*verbose:             False",
-"*timestamp:           False",
+"*timestamp:           True",
 "*fade:                        True",
 "*unfade:              False",
 "*fadeSeconds:         0:00:03",
@@ -43,7 +43,7 @@
 "*dateFormat:          %d-%b-%y (%a); %I:%M %p",
 "*installColormap:     True",
 "*programs:                                                                  \
-                \"Qix (solid)\"        qix -root -solid -delay 0 -segments 100     \\n\
+                \"Qix (solid)\"        qix -root -solid -segments 100              \\n\
           \"Qix (transparent)\"        qix -root -count 4 -solid -transparent      \\n\
                \"Qix (linear)\"        qix -root -count 5 -solid -transparent        \
                                  -linear -segments 250 -size 100           \\n\
                                xflame -root                                \\n\
                                wander -root                                \\n\
              \"Wander (spots)\"        wander -root -advance 0 -size 10 -circles     \
-                                 True -length 10000 -reset 100000          \\n\
+                                 -length 10000 -reset 100000               \\n\
                                critical -root                              \\n\
                                phosphor -root                              \\n\
                                xmatrix -root                               \\n\
                                  -texture_quality -light -fog              \\n\
           GL:                  extrusion -root                             \\n\
           GL:                  sierpinski3d -root                          \\n\
-          GL:                  gflux -root                                 \\n\
+          GL:                  menger -root                                \\n\
+          GL:   \"GFlux\"      gflux -root                                 \\n\
+          GL:   \"GFlux (grab)\"       gflux -root -mode grab                      \\n\
           GL:                  stonerview -root                            \\n\
           GL:                  starwars -root                              \\n\
           GL:                  gltext -root                                \\n\
           GL:   \"Molecule (lumpy)\"   molecule -root -no-bonds -no-labels \\n\
           GL:                  dangerball -root                            \\n\
           GL:                  circuit -root                               \\n\
+          GL:                  engine -root                                \\n\
+          GL:                  flipscreen3d -root                          \\n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \\n\
 - default-n:                   xearth -nofork -nostars -ncolors 50           \
 "*Dialog.buttonFont:           *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1",
 "*Dialog.dateFont:             *-courier-medium-r-*-*-*-80-*-*-*-iso8859-1",
 "*Dialog.foreground:           #000000",
-"*Dialog.background:           #BFBFBF",
+"*Dialog.background:           #D6D6D6",
 "*Dialog.Button.foreground:    #000000",
-"*Dialog.Button.background:    #D0D0D0",
+"*Dialog.Button.background:    #EAEAEA",
 "*Dialog.text.foreground:      #000000",
 "*Dialog.text.background:      #FFFFFF",
 "*passwd.thermometer.foreground:       #FF0000",
 "*passwd.thermometer.background:       #FFFFFF",
-"*Dialog.topShadowColor:               #E7E7E7",
-"*Dialog.bottomShadowColor:    #737373",
+"*Dialog.topShadowColor:               #FFFFFF",
+"*Dialog.bottomShadowColor:    #666666",
 "*Dialog.logo.width:           210",
 "*Dialog.logo.height:          210",
 "*Dialog.internalBorderWidth:  30",
 "*Dialog.borderWidth:          1",
-"*Dialog.shadowThickness:      4",
+"*Dialog.shadowThickness:      2",
 "*passwd.heading.label:                XScreenSaver %s",
 "*passwd.body.label:           This display is locked.",
 "*passwd.user.label:           User:",
 "*passwd.passwdFont:           *-courier-medium-r-*-*-*-140-*-*-*-iso8859-1",
 "*passwd.thermometer.width:    8",
 "*splash.heading.label:                XScreenSaver %s",
-"*splash.body.label:           Copyright Â© 1991-2001 by",
+"*splash.body.label:           Copyright Â© 1991-2002 by",
 "*splash.body2.label:          Jamie Zawinski <jwz@jwz.org>",
-"*splash.demo.label:           Demo",
-"*splash.prefs.label:          Prefs",
+"*splash.demo.label:           Settings",
 "*splash.help.label:           Help",
 "*fontList:                       *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1",
 "*demoDialog*label1.fontList:     *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1",
 "*Cancel.marginHeight:         4",
 "*Cancel.rightOffset:          10",
 "*Cancel.bottomOffset:         10",
-"*hacks.documentation.isInstalled: True",
-"*hacks.qix.documentation:                                             \
-This is the swiss army chainsaw of qix programs.  It bounces a series  \
-of line segments around the screen, and uses variations on this basic  \
-motion pattern to produce all sorts of different presentations: line   \
-segments, filled polygons, overlapping translucent areas...  Written   \
-by Jamie Zawinski.",
-"*hacks.attraction.documentation:                                      \
-Like qix, this uses a simple simple motion model to generate many      \
-different display modes.  The control points attract each other up to  \
-a certain distance, and then begin to repel each other.         The            \
-attraction/repulsion is proportional to the distance between any two   \
-particles, similar to the strong and weak nuclear forces.              \
-                                                                   \\n\\n\
-One of the most interesting ways to watch this hack is simply as       \
-bouncing balls, because their motions and interactions with each       \
-other are so odd.  Sometimes two balls will get into a tight orbit     \
-around each other, to be interrupted later by a third, or by the edge  \
-of the screen. It looks quite chaotic.                                 \
-                                                                   \\n\\n\
-Written by Jamie Zawinski, based on Lisp code by John Pezaris.",
-"*hacks.pyro.documentation:                                            \
-Pyro draws exploding fireworks.         Blah blah blah.  Written by Jamie      \
-Zawinski.",
-"*hacks.helix.documentation:                                           \
-This repeatedly generates spirally string-art-ish patterns.  Written   \
-by Jamie Zawinski.",
-"*hacks.pedal.documentation:                                           \
-This is sort of a combination spirograph/string-art.  It generates a   \
-large, complex polygon, and lets the X server do the bulk of the work  \
-by giving it an even/odd winding rule. Written by Dale Moore, based    \
-on some ancient PDP-11 code.",
-"*hacks.rorschach.documentation:                                               \
-This generates random inkblot patterns.         The algorithm is deceptively   \
-simple for how well it works; it merely walks a dot around the screen  \
-randomly, and then reflects the image horizontally, vertically, or     \
-both.  Any deep-seated neurotic tendencies which this program reveals  \
-are your own problem.  Written by Jamie Zawinski.",
-"*hacks.hopalong.documentation:                                                \
-This draws lacy fractal patterns, based on iteration in the imaginary  \
-plane, from a 1986 Scientific American article.         Mostly written by      \
-Patrick Naughton.",
-"*hacks.greynetic.documentation:                                               \
-This draws random colored and stippled rectangles.  Written by Jamie   \
-Zawinski.",
-"*hacks.imsmap.name: IMSmap",
-"*hacks.imsmap.documentation:                                          \
-This generates random cloud-like patterns.  It looks quite different   \
-in monochrome and color.  The basic idea is to take four points on     \
-the edge of the image, and assign each a random ``elevation''. Then    \
-find the point between them, and give it a value which is the average  \
-of the other four, plus some small random offset. Then coloration is   \
-done based on elevation.                                               \
-                                                                   \\n\\n\
-The color selection is done by binding the elevation to either hue,    \
-saturation, or brightness, and assigning random values to the others.  \
-The ``brightness'' mode tends to yield cloudlike patterns, and the     \
-others tend to generate images that look like heat-maps or CAT-scans.  \
-Written by Juergen Nickelsen and Jamie Zawinski.",
-"*hacks.slidescreen.name: SlideScreen",
-"*hacks.slidescreen.documentation:                                     \
-This takes an image, divides it into a grid, and then randomly shuffles \
-the squares around as if it was one of those annoying ``16-puzzle''     \
-games, where there is a grid of squares, one of which is missing.       \
-I hate trying to solve those puzzles, but watching one permute itself   \
-is more amusing.  Written by Jamie Zawinski.",
-"*hacks.decayscreen.name: DecayScreen",
-"*hacks.decayscreen.documentation:                                     \
-This takes an image and makes it melt.  You've no doubt seen this       \
-effect before, but no screensaver would really be complete without it.  \
-It works best if there's something colorful visible.  Warning, if the   \
-effect continues after the screen saver is off, seek medical attention. \
-Written by David Wald and Vivek Khera.",
-"*hacks.jigsaw.documentation:                                          \
-This grabs a screen image, carves it up into a jigsaw puzzle,          \
-shuffles it, and then solves the puzzle.  This works especially well   \
-when you feed it an external video signal instead of letting it grab   \
-the screen image (actually, I guess this is generally true...) When    \
-it is grabbing a video image, it is sometimes pretty hard to guess     \
-what the image is going to look like once the puzzle is solved.                \
-Written by Jamie Zawinski.",
-"*hacks.blitspin.name: BlitSpin",
-"*hacks.blitspin.documentation:                                                \
-The ``blitspin'' hack repeatedly rotates a bitmap by 90 degrees by     \
-using logical operations: the bitmap is divided into quadrants, and    \
-the quadrants are shifted clockwise.  Then the same thing is done      \
-again with progressively smaller quadrants, except that all            \
-sub-quadrants of a given size are rotated in parallel. Written by      \
-Jamie Zawinski based on some cool SmallTalk code seen in in Byte       \
-Magazine in 1981.                                                      \
-                                                                   \\n\\n\
-As you watch it, the image appears to dissolve into static and then    \
-reconstitute itself, but rotated. You can provide the image to use,    \
-as an XBM or XPM file, or tell it to grab a screen image and rotate    \
-that.",
-"*hacks.slip.documentation:                                            \
-This program throws some random bits on the screen, then sucks them    \
-through a jet engine and spews them out the other side.         To avoid       \
-turning the image completely to mush, every now and then it will and   \
-then it interjects some splashes of color into the scene, or go into   \
-a spin cycle, or stretch the image like taffy, or (this is my          \
-addition) grab an image of your current desktop to chew on.            \
-Originally written by Scott Draves; whacked on by Jamie Zawinski.",
-"*hacks.distort.documentation:                                         \
-This hack grabs an image of the screen, and then lets a transparent    \
-lens wander around the screen, magnifying whatever is underneath.      \
-Written by Jonas Munsin.",
-"*hacks.spotlight.documentation:                                               \
-Draws a spotlight scanning across a black screen, illumnating the      \
-underlying desktop when it passes.  Written by Rick Schultz.",
-"*hacks.hypercube.documentation:                                               \
-This displays 2D projections of the sequence of 3D objects which are   \
-the projections of the 4D analog to the cube: as a square is composed  \
-of four lines, each touching two others; and a cube is composed of     \
-six squares, each touching four others; a hypercube is composed of     \
-eight cubes, each touching six others. To make it easier to            \
-visualize the rotation, it uses a different color for the edges of     \
-each face.  Don't think about it too long, or your brain will melt.    \
-Written by Joe Keane, Fritz Mueller, and Jamie Zawinski.",
-"*hacks.hyperball.documentation:                                               \
-Hyperball is to hypercube as dodecahedron is to cube: this displays    \
-a 2D projection of the sequence of 3D objects which are the projections        \
-of the 4D analog to the dodecahedron.  Written by Joe Keane.",
-"*hacks.halo.documentation:                                            \
-This draws trippy psychedelic circular patterns that hurt to look at.  \
-It can also animate the control-points, but that takes a lot of CPU    \
-and bandwidth. Written by Jamie Zawinski.",
-"*hacks.maze.documentation:                                            \
-This is the ancient X maze demo, modified to work with xscreensaver.   \
-It generates a random maze, then solves it with visual feedback.       \
-Originally by Jim Randell; modified by a cast of thousands.",
-"*hacks.noseguy.documentation:                                         \
-A little man with a big nose wanders around your screen saying         \
-things.         The things which he says can come from a file, or from an      \
-external program like `zippy' or `fortune'.  This was extracted from   \
-`xnlock' by Dan Heller.         Colorized by Jamie Zawinski.",
-"*hacks.flame.documentation:                                           \
-Another iterative fractal generator.  Written by Scott Draves.",
-"*hacks.lmorph.name: LMorph",
-"*hacks.lmorph.documentation:                                          \
-This generates random spline-ish line drawings and morphs between      \
-them.  Written by Sverre H.  Huseby and Glenn T.  Lines.",
-"*hacks.deco.documentation:                                            \
-This one subdivides and colors rectangles randomly.  It looks kind of  \
-like Brady-Bunch-era rec-room wall paneling.  (Raven says: ``this      \
-screensaver is ugly enough to peel paint.'')  Written by Jamie         \
-Zawinski, inspired by Java code by Michael Bayne.",
-"*hacks.moire.documentation:                                           \
-This one draws cool circular interference patterns.  Most of the       \
-circles you see aren't explicitly rendered, but show up as a result    \
-of interactions between the other pixels that were drawn.  Written by  \
-Jamie Zawinski, inspired by Java code by Michael Bayne.         As he          \
-pointed out, the beauty of this one is that the heart of the display   \
-algorithm can be expressed with just a pair of loops and a handful of  \
-arithmetic, giving it a high ``display hack metric''.",
-"*hacks.moire2.documentation:                                          \
-Another example of the fun you can have with moire                     \
-interference patterns; this hack generates fields of concentric                \
-circles or ovals, and combines the planes with various operations.     \
-The planes are moving independently of one another, causing the                \
-interference lines to ``spray.''  Written by Jamie Zawinski.",
-"*hacks.lightning.documentation:                                               \
-This one draws crackling fractal lightning bolts.  It's simple,                \
-direct, and to the point.  If only it had sound... Written by Keith    \
-Romberg.",
-"*hacks.strange.documentation:                                         \
-This draws strange attractors: it's a colorful,                                \
-unpredictably-animating field of dots that swoops and twists around.   \
-The motion is very nice.  Written by Massimino Pascal.",
-"*hacks.spiral.documentation:                                          \
-Moving circular patterns, by Peter Schmitzberger.  Moving circular     \
-patterns means moire; interference patterns, of course.",
-"*hacks.laser.documentation:                                           \
-Moving radiating lines, that look vaguely like scanning laser beams.   \
-Written by Pascal Pensa.  (Frankie say: relax.)",
-"*hacks.grav.documentation:                                            \
-This program draws a simple orbital simulation.         If you turn on         \
-trails, it looks kind of like a cloud-chamber photograph.  Written     \
-by Greg Bowering.",
-"*hacks.drift.documentation:                                           \
-How could one possibly describe this except as ``drifting recursive    \
-fractal cosmic flames?''  Another fine hack from the Scott Draves      \
-collection of fine hacks.",
-"*hacks.ifs.name: IFS",
-"*hacks.ifs.documentation:                                             \
-This one draws spinning, colliding iterated-function-system images.    \
-Written by Massimino Pascal.",
-"*hacks.julia.documentation:                                           \
-This one draws spinning, animating (are you detecting a pattern here   \
-yet?)  explorations of the Julia set. You've probably seen static      \
-images of this fractal form before, but it's a lot of fun to watch in  \
-motion as well.         One interesting thing is that there is a small         \
-swinging dot passing in front of the image, which indicates the                \
-control point from which the rest of the image was generated.          \
-Written by Sean McCullough.",
-"*hacks.penrose.documentation:                                         \
-Draws quasiperiodic tilings; think of the implications on modern       \
-formica technology.  Written by Timo Korvola.                          \
-                                                                   \\n\\n\
-In April 1997, Sir Roger Penrose, a British math professor who has     \
-worked with Stephen Hawking on such topics as relativity, black                \
-holes, and whether time has a beginning, filed a                       \
-copyright-infringement lawsuit against the Kimberly-Clark              \
-Corporation, which Penrose said copied a pattern he created (a         \
-pattern demonstrating that ``a nonrepeating pattern could exist in     \
-nature'') for its Kleenex quilted toilet paper.        Penrose said he         \
-doesn't like litigation but, ``When it comes to the population of      \
-Great Britain being invited by a multinational to wipe their bottoms   \
-on what appears to be the work of a Knight of the Realm, then a last   \
-stand must be taken.''                                                 \
-                                                                   \\n\\n\
-As reported by News of the Weird #491, 4-jul-1997.",
-"*hacks.sierpinski.documentation:                                      \
-This draws the two-dimensional variant of the recursive Sierpinski     \
-triangle fractal.  Written by Desmond Daignault.",
-"*hacks.braid.documentation:                                           \
-Draws random color-cycling inter-braided concentric circles.  Written  \
-by John Neil.",
-"*hacks.galaxy.documentation:                                          \
-This draws spinning galaxies, which then collide and scatter their     \
-stars to the, uh, four winds or something.  Originally an Amiga                \
-program by Uli Siegmund.",
-"*hacks.bouboule.documentation:                                                \
-This draws what looks like a spinning, deforming baloon with           \
-varying-sized spots painted on its invisible surface.  Written by      \
-Jeremie Petit.",
-"*hacks.swirl.documentation:                                           \
-More flowing, swirly patterns. This version is by M.  Dobie and R.     \
-Taylor, but you might have seen a Mac program similar to this called   \
-FlowFazer.  There is also a cool Java applet of a similar concept",
-"*hacks.flag.documentation:                                            \
-This draws a waving colored flag, that undulates its way around the    \
-screen.         The trick is the flag can contain arbitrary text and images.   \
-By default, it displays either the current system name and OS          \
-type, or a picture of ``Bob,'' but you can replace the text or the     \
-image with a command-line option.  Written by Charles Vidal and Jamie  \
-Zawinski.",
-"*hacks.sphere.documentation:                                          \
-Another of the classic screenhacks of the distant past, this one       \
-draws shaded spheres in multiple colors.  This hack traces its         \
-lineage back to Tom Duff in 1982.",
-"*hacks.forest.documentation:                                          \
-This draws fractal trees.  Written by Peter Baumung.  Everybody loves  \
-fractals, right?",
-"*hacks.lisa.documentation:                                            \
-This draws Lisajous loops, by Caleb Cullen.  Remember that device      \
-they had the Phantom Zone prisoners in during their trial in           \
-Superman?  I think that was one of these.",
-"*hacks.lissie.documentation:                                          \
-Another Lissajous figure.  This one draws the progress of circular     \
-shapes along a path.  Written by Alexander Jolk.",
-"*hacks.goop.documentation:                                            \
-This draws set of animating, transparent, amoeba-like blobs.  The      \
-blobs change shape as they wander around the screen, and they are      \
-translucent, so you can see the lower blobs through the higher ones,   \
-and when one passes over another, their colors merge.  Written by      \
-Jamie Zawinski.         I got the idea for this from a cool mouse pad I        \
-have, which achieves the same kind of effect in real life by having    \
-several layers plastic with colored oil between them.  Written by      \
-Jamie Zawinski.",
-"*hacks.starfish.documentation:                                                \
-This generates a sequence of undulating, throbbing, star-like          \
-patterns which pulsate, rotate, and turn inside out.  Another display  \
-mode uses these shapes to lay down a field of colors, which are then   \
-cycled.         The motion is very organic.  Written by Jamie Zawinski.",
-"*hacks.munch.documentation:                                         \\n\
-        DATAI 2                                                              \\n\
-        ADDB 1,2                                                     \\n\
-        ROTC 2,-22                                                   \\n\
-        XOR 1,2                                                              \\n\
-        JRST .-4                                                     \\n\
-                                                                     \\n\
-As reported by HAKMEM, in 1962, Jackson Wright wrote the above PDP-1   \
-code. That code still lives on in this screenhack, some 35 years       \
-later.  The number of lines of enclosing code has increased            \
-substantially, however.  This version is by Tim Showalter.",
-"*hacks.fadeplot.name: FadePlot",
-"*hacks.fadeplot.documentation:                                                \
-Draws what looks like a waving ribbon following a sinusoidal path.     \
-Written by Bas van Gaalen and Charles Vidal.",
-"*hacks.coral.documentation:                                           \
-Simulates coral growth, albeit somewhat slowly.         This image doesn't     \
-really do it justice.  Written by Frederick Roeber.",
-"*hacks.mountain.documentation:                                                \
-Generates random 3d plots that look vaguely mountainous.  Written by   \
-Pascal Pensa.",
-"*hacks.triangle.documentation:                                                \
-Generates random mountain ranges using iterative subdivision of                \
-triangles.  Written by Tobias Gloth.",
-"*hacks.worm.documentation:                                            \
-An ancient xlock hack that draws multicolored worms that crawl around  \
-the screen.  Written by Brad Taylor, Dave Lemke, Boris Putanec, and    \
-Henrik Theiling.",
-"*hacks.rotor.documentation:                                           \
-Another ancient xlock demo, this one by Tom Lawrence.  It draws a      \
-line segment moving along a complex spiraling curve.  I tweaked this   \
-to generate curvier lines, but still frames of it don't look like      \
-much.",
-"*hacks.ant.documentation:                                             \
-A cellular automaton that is really a two-dimensional Turing machine:  \
-as the heads (``ants'') walk along the screen, they change pixel       \
-values in their path.  Then, as they pass over changed pixels, their   \
-behavior is influenced.         Written by David Bagley.",
-"*hacks.demon.documentation:                                           \
-A cellular automaton that starts with a random field, and organizes    \
-it into stripes and spirals.  Written by David Bagley.",
-"*hacks.loop.documentation:                                            \
-This one produces loop-shaped colonies that spawn, age, and            \
-eventually die.         Written by David Bagley.",
-"*hacks.vines.documentation:                                           \
-This one generates a continuous sequence of small, curvy geometric     \
-patterns.  It scatters them around your screen until it fills up,      \
-then it clears the screen and starts over.  Written by Tracy Camp and  \
-David Hansen.",
-"*hacks.kaleidescope.documentation:                                    \
-Another clone of an ancient meme, consisting largely of frenetic       \
-rotational motion of colored lines.  This one is by Ron Tapia. The     \
-motion is nice, but I think it needs more solids, or perhaps just      \
-brighter colors.  More variations in the rotational speed might help,  \
-too.",
-"*hacks.xjack.documentation:                                           \
-This program behaves schizophrenically and makes a lot of typos.       \
-Written by Jamie Zawinski.  If you haven't seen Stanley Kubrick's      \
-masterpiece, ``The Shining,'' you won't get it.         Those who have         \
-describe this hack as ``inspired.''",
-"*hacks.xlyap.documentation:                                           \
-This generates pretty fractal pictures by doing funky math involving   \
-the ``Lyapunov exponent.''  It has a cool interactive mode, too.       \
-Written by Ron Record.",
-"*hacks.cynosure.documentation:                                                \
-A hack similar to `greynetic', but less frenetic.  The first           \
-implementation was by Stephen Linhart; then Ozymandias G. Desiderata   \
-wrote a Java applet clone.  That clone was discovered by Jamie         \
-Zawinski, and ported to C for inclusion here.",
-"*hacks.flow.documentation:                                            \
-Another series of strange attractors: a flowing series of points,      \
-making strange rotational shapes.  Written by Jeff Butterworth.",
-"*hacks.epicycle.documentation:                                                \
-This program draws the path traced out by a point on the edge of a     \
-circle.         That circle rotates around a point on the rim of another       \
-circle, and so on, several times. These were the basis for the         \
-pre-heliocentric model of planetary motion.  Written by James          \
-Youngman.",
-"*hacks.interference.documentation:                                    \
-Another color-field hack, this one works by computing decaying         \
-sinusoidal waves, and allowing them to interfere with each other as    \
-their origins move.  Written by Hannu Mallat.",
-"*hacks.truchet.documentation:                                         \
-This draws line- and arc-based Truchet patterns that tile the screen.  \
-Written by Adrian Likins.",
-"*hacks.bsod.name: BSOD",
-"*hacks.bsod.documentation:                                            \
-BSOD stands for ``Blue Screen of Death.''  The finest in personal      \
-computer emulation, this hack simulates popular screen savers from a   \
-number of less robust operating systems.  Written by Jamie Zawinski.",
-"*hacks.crystal.documentation:                                         \
-Moving polygons, similar to a kaleidescope (more like a kaleidescope   \
-than the hack called `kaleid,' actually.) This one by Jouk Jansen.",
-"*hacks.discrete.documentation:                                                \
-More ``discrete map'' systems, including new variants of Hopalong and  \
-Julia, and a few others.  Written by Tim Auckland.",
-"*hacks.kumppa.documentation:                                          \
-Spiraling, spinning, and very, very fast splashes of color rush                \
-toward the screen.  Written by Teemu Suutari.",
-"*hacks.rd-bomb.name: RD-Bomb",
-"*hacks.rd-bomb.documentation:                                         \
-Another variation of the `Bomb' program by Scott Draves.  This draws   \
-a grid of growing square-like shapes that, once they overtake each     \
-other, react in unpredictable ways.  ``RD'' stands for                 \
-reaction-diffusion.",
-"*hacks.sonar.documentation:                                           \
-This program draws a simulation of a sonar screen.  Written by         \
-default, it displays a random assortment of ``bogies'' on the screen,  \
-but if compiled properly, it can ping (pun intended) your local                \
-network, and actually plot the proximity of the other hosts on your    \
-network to you.         It would be easy to make it monitor other sources of   \
-data, too.  (Processes?         Active network connections?  CPU usage per     \
-user?) Written by Stephen Martin.",
-"*hacks.t3d.name: T3D",
-"*hacks.t3d.documentation:                                             \
-This draws a working analog clock composed of floating, throbbing      \
-bubbles.  Written by Bernd Paysan.",
-"*hacks.penetrate.documentation:                                               \
-This hack simulates the classic arcade game Missile Command.  Written  \
-by Adam Miller.",
-"*hacks.deluxe.documentation:                                          \
-This draws a pulsing sequence of stars, circles, and lines.  It would  \
-look better if it was faster, but as far as I can tell, there is no    \
-way to make this be both: fast, and flicker-free.  Yet another reason  \
-X sucks.  Written by Jamie Zawinski.",
-"*hacks.compass.documentation:                                         \
-This draws a compass, with all elements spinning about randomly, for   \
-that ``lost and nauseous'' feeling. Written by Jamie Zawinski.",
-"*hacks.squiral.documentation:                                         \
-Draws a set of interacting, square-spiral-producing automata.  The     \
-spirals grow outward until they hit something, then they go around     \
-it.  Written by Jeff Epler.",
-"*hacks.xflame.documentation:                                          \
-Draws a simulation of pulsing fire.  It can also take an arbitrary     \
-image and set it on fire too.  Written by Carsten Haitzler, hacked on  \
-by many others.",
-"*hacks.wander.documentation:                                          \
-Draws a colorful random-walk, in various forms.         Written by Rick        \
-Campbell.",
-"*hacks.critical.documentation:                                                \
-Draws a system of self-organizing lines.  It starts out as random      \
-squiggles, but after a few iterations, order begins to appear.         \
-Written by Martin Pool.",
-"*hacks.phosphor.documentation:                                                \
-Draws a simulation of an old terminal, with large pixels and           \
-long-sustain phosphor. It can run any program as a source of the text  \
-it displays.  Written by Jamie Zawinski.",
-"*hacks.xmatrix.documentation:                                         \
-A rendition of the text scrolls seen in the movie ``The Matrix.''      \
-Written by Jamie Zawinski.",
-"*hacks.petri.documentation:                                           \
-This simulates colonies of mold growing in a petri dish.  Growing      \
-colored circles overlap and leave spiral interference in their wake.   \
-Written by Dan Bornstein.",
-"*hacks.shadebobs.name: ShadeBobs",
-"*hacks.shadebobs.documentation:                                               \
-This draws smoothly-shaded oscilating oval patterns, that look         \
-something like vapor trails or neon tubes.  Written by Shane Smit.",
-"*hacks.ccurve.name: C Curve",
-"*hacks.ccurve.documentation:                                          \
-Generates self-similar linear fractals, including the classic ``C      \
-Curve.''  Written by Rick Campbell.",
-"*hacks.blaster.documentation:                                         \
-Draws a simulation of flying space-combat robots (cleverly disguised   \
-as colored circles) doing battle in front of a moving star field.      \
-Written by Jonathan Lin.",
-"*hacks.bumps.documentation:                                           \
-A bit like `Spotlight', except that instead of merely exposing part    \
-of your desktop, it creates a bump map from it.         Basically, it          \
-3D-izes a roaming section of your desktop, based on color intensity.   \
-Written by Shane Smit.",
-"*hacks.xteevee.name: XTeeVee",
-"*hacks.xteevee.documentation:                                         \
-XTeeVee simulates various television problems, including static,       \
-loss of vertical hold, and a test pattern.  By Greg Knauss.",
-"*hacks.xspirograph.name: XSpiroGraph",
-"*hacks.xspirograph.documentation:                                     \
-Simulates that pen-in-nested-plastic-gears toy from your childhood.     \
-By Rohit Singh.",
-"*hacks.nerverot.name: NerveRot",
-"*hacks.nerverot.documentation:                                          \
-Draws different shapes composed of nervously vibrating squiggles,       \
-as if seen through a camera operated by a monkey on crack.              \
-By Dan Bornstein.",
-"*hacks.webcollage.name: WebCollage",
-"*hacks.webcollage.documentation:                                      \
-This program makes collages out of random images pulled off of the     \
-World Wide Web.         It finds these images by doing random web searches,    \
-and then extracting images from the returned pages.  It can also be    \
-set up to filter the images through the `VidWhacker' program, above,   \
-which looks really great.                                              \
-                                                                   \\n\\n\
-(Note that most of the images it finds are text, and not pictures.     \
-This is because most of the web is pictures of text.  Which is pretty  \
-sad.)  Written by Jamie Zawinski.",
-"*hacks.vidwhacker.name: VidWhacker",
-"*hacks.vidwhacker.documentation:                                      \
-This is actually just a shell script that grabs a frame of video from  \
-the system's video input, and then uses some PBM filters (chosen at    \
-random) to manipulate and recombine the video frame in various ways    \
-(edge detection, subtracting the image from a rotated version of       \
-itself, etc.)  Then it displays that image for a few seconds, and      \
-does it again. This works really well if you just feed broadcast       \
-television into it.                                                    \
-                                                                   \\n\\n\
-Currently, the three lines of the script that actually grab the                \
-source picture are SGI specific, but it should be trivial to adapt it  \
-to work on other systems that can grab video (please send me the       \
-changes if you do this...)",
-"*hacks.rocks.documentation:                                           \
-This draws an animation of flight through an asteroid field, with      \
-changes in rotation and direction.  It can also display 3D             \
-separations for red/blue glasses!  Mostly written by Jamie Zawinski.",
-"*hacks.bubbles.documentation:                                         \
-This simulates the kind of bubble formation that happens when water    \
-boils:small bubbles appear, and as they get closer to each other,      \
-they combine to form larger bubbles, which eventually pop.  Written    \
-by James Macnicol.",
-"*hacks.gears.documentation:                                           \
-This draws sets of turning, interlocking gears, rotating in three      \
-dimensions.  Another GL hack, by Danny Sung, Brian Paul, Ed Mackey,    \
-and Jamie Zawinski.",
-"*hacks.superquadrics.documentation:                                   \
-Ed Mackey reports that he wrote the first version of this program in   \
-BASIC on a Commodore 64 in 1987, as a 320x200 black and white          \
-wireframe.  Now it is GL and has specular reflections.",
-"*hacks.morph3d.name: Morph3D",
-"*hacks.morph3d.documentation:                                         \
-Another 3d shape-changing GL hack, by Marcelo Vianna.  It has the      \
-same shiny-plastic feel as Superquadrics, as many computer-generated   \
-objects do...",
-"*hacks.cage.documentation:                                            \
-This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius      \
-strip, and rotates it in three dimensions.  Written by Marcelo         \
-Vianna.",
-"*hacks.moebius.documentation:                                         \
-Another M.  C. Escher hack by Marcelo Vianna, this one draws           \
-``Moebius Strip II,'' a GL image of ants walking along the surface of  \
-a moebius strip.",
-"*hacks.stairs.documentation:                                          \
-by Marcelo Vianna's third Escher GL hack, this one draws an            \
-``infinite'' staircase.",
-"*hacks.pipes.documentation:                                           \
-If you've ever been in the same room with a Windows NT machine,                \
-you've probably seen this GL hack.  This version is by Marcelo         \
-Vianna.",
-"*hacks.sproingies.documentation:                                      \
-Q-Bert meets Marble Madness!  Written by Ed Mackey.",
-"*hacks.rubik.documentation:                                           \
-Draws a Rubik's Cube that rotates in three dimensions and repeatedly   \
-shuffles and solves itself.  Another fine GL hack by Marcelo Vianna.",
-"*hacks.atlantis.documentation:                                                \
-This is xfishtank writ large: a GL animation of a number of sharks,    \
-dolphins, and whales.  The swimming motions are great. Originally      \
-written by Mark Kilgard.",
-"*hacks.lament.documentation:                                          \
-Animates a simulation of Lemarchand's Box, repeatedly solving itself.  \
-Requires OpenGL, and a machine with fast hardware support for texture  \
-maps.  Warning: occasionally opens doors.  Written by Jamie Zawinski.",
-"*hacks.bubble3d.name: Bubble3D",
-"*hacks.bubble3d.documentation:                                                \
-Draws a stream of rising, undulating 3D bubbles, rising toward the     \
-top of the screen, with nice specular reflections. Written by Richard  \
-Jones.",
-"*hacks.glplanet.name: GLPlanet",
-"*hacks.glplanet.documentation:                                                \
-Draws a planet bouncing around in space.  Written by David Konerding.  \
-The built-in image is a map of the earth (extracted from `xearth'),    \
-but you can wrap any texture around the sphere, e.g., the planetary    \
-textures that come with `ssystem'.",
-"*hacks.pulsar.documentation:                                          \
-Draws some intersecting planes, making use of alpha blending, fog,     \
-textures, and mipmaps, plus a ``frames per second'' meter so that you  \
-can tell how fast your graphics card is...  Requires OpenGL.  Written  \
-by David Konerding.",
-"*hacks.extrusion.documentation:                                               \
-Draws various rotating extruded shapes that twist around, lengthen,    \
-and turn inside out.  Created by David Konerding from the samples      \
-that come with the GL Extrusion library by Linas Vepstas.",
-"*hacks.sierpinski3d.name: Sierpinski3D",
-"*hacks.sierpinski3d.documentation:                                    \
-This draws the three-dimensional variant of the recursive Sierpinski   \
-triangle fractal, using GL.  Written by Tim Robinson and Jamie Zawinski.",
-"*hacks.ripples.documentation:                                         \
-This draws rippling interference patterns like splashing water.                \
-With the -water option, it manipulates your desktop image to look      \
-like something is dripping into it.  Written by Tom Hammersley.",
-"*hacks.gflux.name: GFlux",
-"*hacks.gflux.documentation:                                           \
-Draws a rippling waves on a rotating wireframe grid, using GL.         \
-Written by Josiah Pease.",
-"*hacks.xrayswarm.name: XRaySwarm",
-"*hacks.xrayswarm.documentation:                                       \
-Draws a few swarms of critters flying around the screen, with nicely   \
-faded color trails behind them.  Written by Chris Leger.",
-"*hacks.zoom.documentation:                                              \
-Zooms in on a part of the screen and then moves around.  With the       \
--lenses option the result is like looking through many overlapping      \
-lenses rather than just a simple zoom.  Written by James Macnicol.",
-"*hacks.whirlwindwarp.name: WhirlwindWarp",
-"*hacks.whirlwindwarp.documentation:                                  \
-Floating stars are acted upon by a mixture of simple 2D              \
-forcefields.  The strength of each forcefield changes                \
-continuously, and it is also switched on and off at random.          \
-By Paul 'Joey' Clark.",
-"*hacks.rotzoomer.name: RotZoomer",
-"*hacks.rotzoomer.documentation:                                      \
-Creates a collage of rotated and scaled portions of the              \
-screen. Written by Claudio Matsuoka.",
-"*hacks.stonerview.name: StonerView",
-"*hacks.stonerview.documentation:                                     \
-Chains of colorful squares dance around each other in complex spiral \
-patterns.  Written by Andrew Plotkin, based on SGI's `electropaint'  \
-screensaver.",
-"*hacks.starwars.name: StarWars",
-"*hacks.starwars.documentation:                                       \
-Draws a stream of text slowly scrolling into the distance at an      \
-angle, over a star field, like at the beginning of the movie of the  \
-same name.  Written by Jamie Zawinski and Claudio Matauoka.",
-"*hacks.gltext.name: GLText",
-"*hacks.gltext.documentation:                                         \
-Displays a few lines of text spinning around in a solid 3D font.     \
-Written by Jamie Zawinski.",
-"*hacks.molecule.documentation:                                       \
-Draws several different representations of molecules.  Some common   \
-molecules are built in, and it can also read PDB (Protein Data Base) \
-files as input.  Written by Jamie Zawinski.",
-"*hacks.dangerball.name: DangerBall",
-"*hacks.dangerball.documentation:                                     \
-Draws a ball that periodically extrudes many random spikes.  Ouch!   \
-Written by Jamie Zawinski.",
-"*hacks.whirlygig.name: WhirlyGig",
-"*hacks.whirlygig.documentation:                                     \
-Draws zooming chains of sinusoidal spots.  Written by Ashton Trey Belew.",
-"*hacks.speedmine.name: SpeedMine",
-"*hacks.speedmine.documentation:                                     \
-Simulates speeding down a rocky mineshaft, or a funky dancing worm. \
-Written by Conrad Parker.",
-"*hacks.circuit.documentation:                                        \
-Animates a number of 3D electronic components.  Written by Ben Buxton.",
-"*hacks.vermiculate.documentation:                                    \
-Draws squiggly worm-like paths.  Written by Tyler Pierce.",
-"*hacks.xdaliclock.name: XDaliClock",
-"*hacks.xdaliclock.documentation:                                      \
-XDaliClock draws a large digital clock, the numbers of which change by \
-``melting'' into their new shapes.  Written by Jamie Zawinski.  This   \
-is not included with the XScreenSaver package, but if you don't have   \
-it already, you can find it at <http://www.jwz.org/xdaliclock/>.",
-"*hacks.xearth.documentation:                                          \
-XEarth draws an image of the Earth, as seen from your favorite vantage \
-point in space, correctly shaded for the current position of the Sun.  \
-Written by Kirk Johnson.  This is not included with the XScreenSaver   \
-package, but if you don't have it already, you can find it at          \
-<http://www.cs.colorado.edu/~tuna/xearth/>.",
-"*hacks.xplanetbg.name: XPlanet",
-"*hacks.xplanetbg.documentation:                                               \
-XPlanet is like XEarth, but with more options.  It draws an image of    \
-the Earth (or other planets!), as seen from your favorite vantage      \
-point in space, correctly shaded for the current position of the Sun.  \
-Written by Hari Nair.  This is not included with the XScreenSaver      \
-package, but if you don't have it already, you can find it at          \
-<http://xplanet.sourceforge.net/>.",
-"*hacks.ssystem.name: SSystem",
-"*hacks.ssystem.documentation:                                         \
-SSystem is a GL Solar System simulator.  It simulates flybys of Sun,   \
-the nine planets and a few major satellites, with four camera modes.   \
-Written by Raul Alonso.  This is not included with the XScreenSaver    \
-package, but if you don't have it already, you can find it at          \
-<http://www1.las.es/~amil/ssystem/>.",
-"*hacks.xmountains.documentation:                                      \
-XMountains generates realistic-looking fractal terrains of snow-capped \
-mountains near water, with either a top view or a side view.           \
-Written by Stephen Booth.  This is not included with the XScreenSaver  \
-package, but if you don't have it already, you can find it at          \
-<http://www.epcc.ed.ac.uk/~spb/xmountains/>.                           \
-                                                                   \\n\\n\
-Be sure to compile it with -DVROOT or it won't work right when launched        \
-by the xscreensaver daemon.",
-"*hacks.xaos.name: XaoS",
-"*hacks.xaos.documentation:                                            \
-XaoS generates fast fly-through animations of the Mandelbrot and other \
-fractal sets.  Written by Thomas Marsh and Jan Hubicka.    This is not \
-included with the XScreenSaver package, but if you don't have it       \
-already, you can find it at <http://limax.paru.cas.cz/~hubicka/XaoS/>.",
-"*hacks.xfishtank.name: XFishTank",
-"*hacks.xfishtank.documentation:                                               \
-Fish!  This is not included with the XScreenSaver package, but if you  \
-don't have it already, you can find it at                               \
-<http://metalab.unc.edu/pub/Linux/X11/demos/>.",
-"*hacks.xsnow.documentation:                                           \
-Draws falling snow and the occasional tiny Santa.  By Rick Jansen.      \
-You can find it at <http://www.euronet.nl/~rja/Xsnow/>.",
-"*hacks.goban.documentation:                                           \
-Replays historical games of go (aka wei-chi and baduk) on the screen.   \
-By Scott Draves.  You can find it at <http://www.draves.org/goban/>.",
-"*hacks.electricsheep.name: ElectricSheep",
-"*hacks.electricsheep.documentation:                                   \
-ElectricSheep is an xscreensaver module that displays mpeg video of    \
-an animated fractal flame.  In the background, it contributes render   \
-cycles to the next animation.  Periodically it uploades completed      \
-frames to the server, where they are compressed for distribution to    \
-all clients.                                                           \
-                                                                   \\n\\n\
-This program is recommended only if you have a high bandwidth          \
-connection to the Internet.                                            \
-                                                                   \\n\\n\
-By Scott Draves.  You can find it at <http://www.electricsheep.org/>.   \
-See that web site for configuration information.",
-"*hacks.cosmos.documentation:                                          \
-Draws fireworks and zooming, fading flares.  By Tom Campbell.           \
-You can find it at <http://www.mindspring.com/~campbell/cosmos/>.",
+"*hacks.imsmap.name:         IMSmap",
+"*hacks.slidescreen.name:    SlideScreen",
+"*hacks.decayscreen.name:    DecayScreen",
+"*hacks.blitspin.name:       BlitSpin",
+"*hacks.lmorph.name:         LMorph",
+"*hacks.ifs.name:            IFS",
+"*hacks.fadeplot.name:       FadePlot",
+"*hacks.bsod.name:           BSOD",
+"*hacks.rd-bomb.name:        RD-Bomb",
+"*hacks.t3d.name:            T3D",
+"*hacks.shadebobs.name:      ShadeBobs",
+"*hacks.ccurve.name:         C Curve",
+"*hacks.xteevee.name:        XTeeVee",
+"*hacks.xspirograph.name:    XSpiroGraph",
+"*hacks.nerverot.name:       NerveRot",
+"*hacks.webcollage.name:     WebCollage",
+"*hacks.vidwhacker.name:     VidWhacker",
+"*hacks.morph3d.name:        Morph3D",
+"*hacks.bubble3d.name:       Bubble3D",
+"*hacks.glplanet.name:       GLPlanet",
+"*hacks.sierpinski3d.name:   Sierpinski3D",
+"*hacks.gflux.name:          GFlux",
+"*hacks.xrayswarm.name:      XRaySwarm",
+"*hacks.whirlwindwarp.name:  WhirlwindWarp",
+"*hacks.rotzoomer.name:      RotZoomer",
+"*hacks.stonerview.name:     StonerView",
+"*hacks.starwars.name:       StarWars",
+"*hacks.gltext.name:         GLText",
+"*hacks.dangerball.name:     DangerBall",
+"*hacks.whirlygig.name:      WhirlyGig",
+"*hacks.speedmine.name:      SpeedMine",
+"*hacks.xdaliclock.name:     XDaliClock",
+"*hacks.xplanetbg.name:      XPlanet",
+"*hacks.ssystem.name:        SSystem",
+"*hacks.xaos.name:           XaoS",
+"*hacks.xfishtank.name:      XFishTank",
+"*hacks.electricsheep.name:  ElectricSheep",
 "*hacks.sphereEversion.name: SphereEversion",
-"*hacks.sphereEversion.documentation:                                  \
-SphereEversion draws an animation of a sphere being turned inside out.  \
-A sphere can be turned inside out, without any tears, sharp creases or  \
-discontinuities, if the surface of the sphere is allowed to intersect   \
-itself.  This program animates what is known as the Thurston Eversion.  \
-Written by Nathaniel Thurston and Michael McGuffin.  This program is    \
-not included with the XScreenSaver package, but if you don't have it    \
-already, you can find it at <http://www.dgp.utoronto.ca/~mjmcguff/eversion/>.",
+"*hacks.documentation.isInstalled: True",
diff --git a/driver/demo-Gtk-conf.c b/driver/demo-Gtk-conf.c
new file mode 100644 (file)
index 0000000..b8bb1ee
--- /dev/null
@@ -0,0 +1,1853 @@
+/* demo-Gtk-conf.c --- implements the dynamic configuration dialogs.
+ * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#if defined(HAVE_GTK) && defined(HAVE_XML)   /* whole file */
+
+#include <stdlib.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <parser.h>   /* XML */
+
+#include <gtk/gtk.h>
+
+#include "demo-Gtk-conf.h"
+
+extern const char *blurb (void);
+
+
+static gboolean debug_p = FALSE;
+
+
+typedef enum {
+  COMMAND,
+  FAKE,
+  DESCRIPTION,
+  FAKEPREVIEW,
+  STRING,
+  FILENAME,
+  SLIDER,
+  SPINBUTTON,
+  BOOLEAN,
+  SELECT,
+  SELECT_OPTION
+} parameter_type;
+
+
+typedef struct {
+
+  parameter_type type;
+
+  char *id;            /* widget name */
+  char *label;         /* heading label, or null */
+
+  /* command, fake, description, fakepreview, string, file
+   */
+  char *string;                /* file name, description, whatever. */
+
+  /* slider, spinbutton
+   */
+  char *low_label;     /* label for the left side */
+  char *high_label;    /* label for the right side */
+  float low;           /* minimum value */
+  float high;          /* maximum value */
+  float value;         /* default value */
+  gboolean integer_p;  /* whether the range is integral, or real */
+  char *arg;           /* command-line option to set (substitute "%") */
+  gboolean invert_p;   /* whether to flip the value and pretend the
+                           range goes from hi-low instead of low-hi. */
+
+  /* boolean, select-option
+   */
+  char *arg_set;       /* command-line option to set for "yes", or null */
+  char *arg_unset;     /* command-line option to set for "no", or null */
+  char *test;          /* #### no idea - enablement? */
+
+  /* select
+   */
+  GList *options;
+
+  /* select_option
+   */
+  GList *enable;
+
+  GtkWidget *widget;
+
+} parameter;
+
+
+static parameter *make_select_option (const char *file, xmlNodePtr);
+static void make_parameter_widget (const char *filename,
+                                   parameter *, GtkWidget *, int *);
+static void browse_button_cb (GtkButton *button, gpointer user_data);
+
+
+/* Frees the parameter object and all strings and sub-parameters.
+   Does not destroy the widget, if any.
+ */
+static void
+free_parameter (parameter *p)
+{
+  GList *rest;
+  if (p->id)         free (p->id);
+  if (p->label)      free (p->label);
+  if (p->string)     free (p->string);
+  if (p->low_label)  free (p->low_label);
+  if (p->high_label) free (p->high_label);
+  if (p->arg)        free (p->arg);
+  if (p->arg_set)    free (p->arg_set);
+  if (p->arg_unset)  free (p->arg_unset);
+  if (p->test)       free (p->test);
+
+  for (rest = p->options; rest; rest = rest->next)
+    if (rest->data)
+      free_parameter ((parameter *) rest->data);
+
+  for (rest = p->enable; rest; rest = rest->next)
+    {
+      free ((char *) rest->data);
+      rest->data = 0;
+    }
+  if (p->enable) g_list_free (p->enable);
+
+  memset (p, ~0, sizeof(*p));
+  free (p);
+}
+
+
+/* Debugging: dumps out a `parameter' structure.
+ */
+#if 0
+void
+describe_parameter (FILE *out, parameter *p)
+{
+  fprintf (out, "<");
+  switch (p->type)
+    {
+    case COMMAND:     fprintf (out, "command");      break;
+    case FAKE:        fprintf (out, "fake");         break;
+    case DESCRIPTION: fprintf (out, "_description"); break;
+    case FAKEPREVIEW: fprintf (out, "fakepreview");  break;
+    case STRING:      fprintf (out, "string");       break;
+    case FILENAME:    fprintf (out, "filename");     break;
+    case SLIDER:      fprintf (out, "number type=\"slider\"");     break;
+    case SPINBUTTON:  fprintf (out, "number type=\"spinbutton\""); break;
+    case BOOLEAN:     fprintf (out, "boolean");      break;
+    case SELECT:      fprintf (out, "select");       break;
+    default: abort(); break;
+    }
+  if (p->id)         fprintf (out, " id=\"%s\"",            p->id);
+  if (p->label)      fprintf (out, " _label=\"%s\"",        p->label);
+  if (p->string && p->type != DESCRIPTION)
+                     fprintf (out, " string=\"%s\"",        p->string);
+  if (p->low_label)  fprintf (out, " _low-label=\"%s\"",    p->low_label);
+  if (p->high_label) fprintf (out, " _high-label=\"%s\"",   p->high_label);
+  if (p->low)        fprintf (out, " low=\"%.2f\"",         p->low);
+  if (p->high)       fprintf (out, " high=\"%.2f\"",        p->high);
+  if (p->value)      fprintf (out, " default=\"%.2f\"",     p->value);
+  if (p->arg)        fprintf (out, " arg=\"%s\"",           p->arg);
+  if (p->invert_p)   fprintf (out, " convert=\"invert\"");
+  if (p->arg_set)    fprintf (out, " arg-set=\"%s\"",       p->arg_set);
+  if (p->arg_unset)  fprintf (out, " arg-unset=\"%s\"",     p->arg_unset);
+  if (p->test)       fprintf (out, " test=\"%s\"",          p->test);
+  fprintf (out, ">\n");
+
+  if (p->type == SELECT)
+    {
+      GList *opt;
+      for (opt = p->options; opt; opt = opt->next)
+        {
+          parameter *o = (parameter *) opt->data;
+          if (o->type != SELECT_OPTION) abort();
+          fprintf (out, "  <option");
+          if (o->id)        fprintf (out, " id=\"%s\"",        o->id);
+          if (o->label)     fprintf (out, " _label=\"%s\"",    o->label);
+          if (o->arg_set)   fprintf (out, " arg-set=\"%s\"",   o->arg_set);
+          if (o->arg_unset) fprintf (out, " arg-unset=\"%s\"", o->arg_unset);
+          if (o->test)      fprintf (out, " test=\"%s\"",      o->test);
+          if (o->enable)
+            {
+              GList *e;
+              fprintf (out, " enable=\"");
+              for (e = o->enable; e; e = e->next)
+                fprintf (out, "%s%s", (char *) e->data, (e->next ? "," : ""));
+              fprintf (out, "\"");
+            }
+          fprintf (out, ">\n");
+        }
+      fprintf (out, "</select>\n");
+    }
+  else if (p->type == DESCRIPTION)
+    {
+      if (p->string)
+        fprintf (out, "  %s\n", p->string);
+      fprintf (out, "</_description>\n");
+    }
+}
+#endif /* 0 */
+
+
+/* Like xmlGetProp() but parses a float out of the string.
+   If the number was expressed as a float and not an integer
+   (that is, the string contained a decimal point) then
+   `floatp' is set to TRUE.  Otherwise, it is unchanged.
+ */
+static float
+xml_get_float (xmlNodePtr node, const char *name, gboolean *floatpP)
+{
+  const char *s = xmlGetProp (node, name);
+  float f;
+  char c;
+  if (!s || 1 != sscanf (s, "%f %c", &f, &c))
+    return 0;
+  else
+    {
+      if (strchr (s, '.')) *floatpP = TRUE;
+      return f;
+    }
+}
+
+
+static void sanity_check_parameter (const char *filename,
+                                    const char *node_name,
+                                    parameter *p);
+
+/* Allocates and returns a new `parameter' object based on the
+   properties in the given XML node.  Returns 0 if there's nothing
+   to create (comment, or unknown tag.)
+ */
+static parameter *
+make_parameter (const char *filename, xmlNodePtr node)
+{
+  parameter *p;
+  const char *name = node->name;
+  const char *convert;
+  gboolean floatp = FALSE;
+
+  if (node->type == XML_COMMENT_NODE)
+    return 0;
+
+  p = calloc (1, sizeof(*p));
+
+  if (!name) abort();
+  else if (!strcmp (name, "command"))      p->type = COMMAND;
+  else if (!strcmp (name, "fullcommand"))  p->type = COMMAND;
+  else if (!strcmp (name, "_description")) p->type = DESCRIPTION;
+  else if (!strcmp (name, "fakepreview"))  p->type = FAKEPREVIEW;
+  else if (!strcmp (name, "fake"))         p->type = FAKE;
+  else if (!strcmp (name, "boolean"))      p->type = BOOLEAN;
+  else if (!strcmp (name, "string"))       p->type = STRING;
+  else if (!strcmp (name, "file"))         p->type = FILENAME;
+  else if (!strcmp (name, "number"))       p->type = SPINBUTTON;
+  else if (!strcmp (name, "select"))       p->type = SELECT;
+  else
+    {
+      if (debug_p)
+        fprintf (stderr, "%s: WARNING: %s: unknown tag: \"%s\"\n",
+                 blurb(), filename, name);
+      free (p);
+      return 0;
+    }
+
+  if (p->type == SPINBUTTON)
+    {
+      const char *type = xmlGetProp (node, "type");
+      if (!type || !strcmp (type, "spinbutton")) p->type = SPINBUTTON;
+      else if (!strcmp (type, "slider"))         p->type = SLIDER;
+      else
+        {
+          if (debug_p)
+            fprintf (stderr, "%s: WARNING: %s: unknown %s type: \"%s\"\n",
+                     blurb(), filename, name, type);
+          free (p);
+          return 0;
+        }
+    }
+  else if (p->type == DESCRIPTION)
+    {
+      if (node->childs &&
+          node->childs->type == XML_TEXT_NODE &&
+          !node->childs->next)
+        p->string = strdup (node->childs->content);
+    }
+
+  p->id         = xmlGetProp (node, "id");
+  p->label      = xmlGetProp (node, "_label");
+  p->low_label  = xmlGetProp (node, "_low-label");
+  p->high_label = xmlGetProp (node, "_high-label");
+  p->low        = xml_get_float (node, "low",     &floatp);
+  p->high       = xml_get_float (node, "high",    &floatp);
+  p->value      = xml_get_float (node, "default", &floatp);
+  p->integer_p  = !floatp;
+  convert       = xmlGetProp (node, "convert");
+  p->invert_p   = (convert && !strcmp (convert, "invert"));
+  p->arg        = xmlGetProp (node, "arg");
+  p->arg_set    = xmlGetProp (node, "arg-set");
+  p->arg_unset  = xmlGetProp (node, "arg-unset");
+  p->test       = xmlGetProp (node, "test");
+
+  /* Check for missing decimal point */
+  if (debug_p &&
+      p->integer_p &&
+      (p->high != p->low) &&
+      (p->high - p->low) <= 1)
+    fprintf (stderr,
+            "%s: WARNING: %s: %s: range [%.1f, %.1f] shouldn't be integral!\n",
+             blurb(), filename, p->id,
+             p->low, p->high);
+
+  if (p->type == SELECT)
+    {
+      xmlNodePtr kids;
+      for (kids = node->childs; kids; kids = kids->next)
+        {
+          parameter *s = make_select_option (filename, kids);
+          if (s)
+            p->options = g_list_append (p->options, s);
+        }
+    }
+
+  sanity_check_parameter (filename, name, p);
+
+  return p;
+}
+
+
+/* Allocates and returns a new SELECT_OPTION `parameter' object based
+   on the properties in the given XML node.  Returns 0 if there's nothing
+   to create (comment, or unknown tag.)
+ */
+static parameter *
+make_select_option (const char *filename, xmlNodePtr node)
+{
+  if (node->type == XML_COMMENT_NODE)
+    return 0;
+  else if (node->type != XML_ELEMENT_NODE)
+    {
+      if (debug_p)
+        fprintf (stderr,
+                 "%s: WARNING: %s: %s: unexpected child tag type %d\n",
+                 blurb(), filename, node->name, (int)node->type);
+      return 0;
+    }
+  else if (strcmp (node->name, "option"))
+    {
+      if (debug_p)
+        fprintf (stderr,
+                 "%s: WARNING: %s: %s: child not an option tag: \"%s\"\n",
+                 blurb(), filename, node->name, node->name);
+      return 0;
+    }
+  else
+    {
+      parameter *s = calloc (1, sizeof(*s));
+      char *enable, *e;
+
+      s->type       = SELECT_OPTION;
+      s->id         = xmlGetProp (node, "id");
+      s->label      = xmlGetProp (node, "_label");
+      s->arg_set    = xmlGetProp (node, "arg-set");
+      s->arg_unset  = xmlGetProp (node, "arg-unset");
+      s->test       = xmlGetProp (node, "test");
+      enable        = xmlGetProp (node, "enable");
+
+      if (enable)
+        {
+          enable = strdup (enable);
+          e = strtok (enable, ", ");
+          while (e)
+            {
+              s->enable = g_list_append (s->enable, strdup (e));
+              e = strtok (0, ", ");
+            }
+          free (enable);
+        }
+
+      sanity_check_parameter (filename, node->name, s);
+      return s;
+    }
+}
+
+
+/* Rudimentary check to make sure someone hasn't typed "arg-set="
+   when they should have typed "arg=", etc.
+ */
+static void
+sanity_check_parameter (const char *filename, const char *node_name,
+                        parameter *p)
+{
+  struct {
+    gboolean id;
+    gboolean label;
+    gboolean string;
+    gboolean low_label;
+    gboolean high_label;
+    gboolean low;
+    gboolean high;
+    gboolean value;
+    gboolean arg;
+    gboolean invert_p;
+    gboolean arg_set;
+    gboolean arg_unset;
+  } allowed, require;
+
+  memset (&allowed, 0, sizeof (allowed));
+  memset (&require, 0, sizeof (require));
+
+  switch (p->type)
+    {
+    case COMMAND:
+      allowed.arg = TRUE;
+      require.arg = TRUE;
+      break;
+    case FAKE:
+      break;
+    case DESCRIPTION:
+      allowed.string = TRUE;
+      break;
+    case FAKEPREVIEW:
+      break;
+    case STRING:
+      allowed.id = TRUE;
+      require.id = TRUE;
+      allowed.label = TRUE;
+      require.label = TRUE;
+      allowed.arg = TRUE;
+      require.arg = TRUE;
+      break;
+    case FILENAME:
+      allowed.id = TRUE;
+      require.id = TRUE;
+      allowed.label = TRUE;
+      allowed.arg = TRUE;
+      require.arg = TRUE;
+      break;
+    case SLIDER:
+      allowed.id = TRUE;
+      require.id = TRUE;
+      allowed.label = TRUE;
+      allowed.low_label = TRUE;
+      allowed.high_label = TRUE;
+      allowed.arg = TRUE;
+      require.arg = TRUE;
+      allowed.low = TRUE;
+      /* require.low = TRUE; -- may be 0 */
+      allowed.high = TRUE;
+      /* require.high = TRUE; -- may be 0 */
+      allowed.value = TRUE;
+      /* require.value = TRUE; -- may be 0 */
+      allowed.invert_p = TRUE;
+      break;
+    case SPINBUTTON:
+      allowed.id = TRUE;
+      require.id = TRUE;
+      allowed.label = TRUE;
+      allowed.arg = TRUE;
+      require.arg = TRUE;
+      allowed.low = TRUE;
+      /* require.low = TRUE; -- may be 0 */
+      allowed.high = TRUE;
+      /* require.high = TRUE; -- may be 0 */
+      allowed.value = TRUE;
+      /* require.value = TRUE; -- may be 0 */
+      allowed.invert_p = TRUE;
+      break;
+    case BOOLEAN:
+      allowed.id = TRUE;
+      require.id = TRUE;
+      allowed.label = TRUE;
+      allowed.arg_set = TRUE;
+      allowed.arg_unset = TRUE;
+      break;
+    case SELECT:
+      allowed.id = TRUE;
+      require.id = TRUE;
+      break;
+    case SELECT_OPTION:
+      allowed.id = TRUE;
+      allowed.label = TRUE;
+      require.label = TRUE;
+      allowed.arg_set = TRUE;
+      break;
+    default:
+      abort();
+      break;
+    }
+
+# define WARN(STR) \
+   fprintf (stderr, "%s: %s: " STR " in <%s%s id=\"%s\">\n", \
+              blurb(), filename, node_name, \
+              (!strcmp(node_name, "number") \
+               ? (p->type == SPINBUTTON ? " type=spinbutton" : " type=slider")\
+               : ""), \
+              (p->id ? p->id : ""))
+# define CHECK(SLOT,NAME) \
+   if (p->SLOT && !allowed.SLOT) \
+     WARN ("\"" NAME "\" is not a valid option"); \
+   if (!p->SLOT && require.SLOT) \
+     WARN ("\"" NAME "\" is required")
+
+  CHECK (id,         "id");
+  CHECK (label,      "_label");
+  CHECK (string,     "(body text)");
+  CHECK (low_label,  "_low-label");
+  CHECK (high_label, "_high-label");
+  CHECK (low,        "low");
+  CHECK (high,       "high");
+  CHECK (value,      "default");
+  CHECK (arg,        "arg");
+  CHECK (invert_p,   "convert");
+  CHECK (arg_set,    "arg-set");
+  CHECK (arg_unset,  "arg-unset");
+# undef CHECK
+# undef WARN
+}
+
+
+
+/* Helper for make_parameters()
+ */
+static GList *
+make_parameters_1 (const char *filename, xmlNodePtr node,
+                   GtkWidget *parent, int *row)
+{
+  GList *list = 0;
+
+  for (; node; node = node->next)
+    {
+      const char *name = node->name;
+      if (!strcmp (name, "hgroup") ||
+          !strcmp (name, "vgroup"))
+        {
+          GtkWidget *box = (*name == 'h'
+                            ? gtk_hbox_new (FALSE, 0)
+                            : gtk_vbox_new (FALSE, 0));
+          GList *list2;
+          gtk_widget_show (box);
+
+          if (row)
+            gtk_table_attach (GTK_TABLE (parent), box, 0, 3, *row, *row + 1,
+                              0, 0, 0, 0);
+          else
+            gtk_box_pack_start (GTK_BOX (parent), box, FALSE, FALSE, 0);
+
+          if (row)
+            (*row)++;
+
+          list2 = make_parameters_1 (filename, node->childs, box, 0);
+          if (list2)
+            list = g_list_concat (list, list2);
+        }
+      else
+        {
+          parameter *p = make_parameter (filename, node);
+          if (p)
+            {
+              list = g_list_append (list, p);
+              make_parameter_widget (filename, p, parent, row);
+            }
+        }
+    }
+  return list;
+}
+
+
+/* Calls make_parameter() and make_parameter_widget() on each relevant
+   tag in the XML tree.  Also handles the "hgroup" and "vgroup" flags.
+   Returns a GList of `parameter' objects.
+ */
+static GList *
+make_parameters (const char *filename, xmlNodePtr node, GtkWidget *parent)
+{
+  int row = 0;
+  for (; node; node = node->next)
+    {
+      if (node->type == XML_ELEMENT_NODE &&
+          !strcmp (node->name, "screensaver"))
+        return make_parameters_1 (filename, node->childs, parent, &row);
+    }
+  return 0;
+}
+
+
+static gfloat
+invert_range (gfloat low, gfloat high, gfloat value)
+{
+  gfloat range = high-low;
+  gfloat off = value-low;
+  return (low + (range - off));
+}
+
+
+static GtkAdjustment *
+make_adjustment (const char *filename, parameter *p)
+{
+  float range = (p->high - p->low);
+  float value = (p->invert_p
+                 ? invert_range (p->low, p->high, p->value)
+                 : p->value);
+  gfloat si = (p->high - p->low) / 100;
+  gfloat pi = (p->high - p->low) / 10;
+
+  if (p->value < p->low || p->value > p->high)
+    {
+      if (debug_p && p->integer_p)
+        fprintf (stderr, "%s: WARNING: %s: %d is not in range [%d, %d]\n",
+                 blurb(), filename,
+                 (int) p->value, (int) p->low, (int) p->high);
+      else if (debug_p)
+        fprintf (stderr,
+                 "%s: WARNING: %s: %.2f is not in range [%.2f, %.2f]\n",
+                 blurb(), filename, p->value, p->low, p->high);
+      value = (value < p->low ? p->low : p->high);
+    }
+#if 0
+  else if (debug_p && p->value < 1000 && p->high >= 10000)
+    {
+      if (p->integer_p)
+        fprintf (stderr,
+                 "%s: WARNING: %s: %d is suspicious for range [%d, %d]\n",
+                 blurb(), filename,
+                 (int) p->value, (int) p->low, (int) p->high);
+      else
+        fprintf (stderr,
+               "%s: WARNING: %s: %.2f is suspicious for range [%.2f, %.2f]\n",
+                 blurb(), filename, p->value, p->low, p->high);
+    }
+#endif /* 0 */
+
+  if (p->integer_p)
+    {
+      si = (int) (si + 0.5);
+      pi = (int) (pi + 0.5);
+      if (si < 1) si = 1;
+      if (pi < 1) pi = 1;
+
+      if (range <= 500) si = 1;
+    }
+  return GTK_ADJUSTMENT (gtk_adjustment_new (value, p->low, p->high,
+                                             si, pi, pi));
+}
+
+
+
+/* Given a `parameter' struct, allocates an appropriate GtkWidget for it,
+   and stores it in `p->widget'.
+   `row' is used for keeping track of our position during table layout.
+   `parent' must be a GtkTable or a GtkBox.
+ */
+static void
+make_parameter_widget (const char *filename,
+                       parameter *p, GtkWidget *parent, int *row)
+{
+  const char *label = p->label;
+  if (p->widget) return;
+
+  switch (p->type)
+    {
+    case STRING:
+      {
+        if (label)
+          {
+            GtkWidget *w = gtk_label_new (label);
+            gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
+            gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
+            gtk_widget_show (w);
+            if (row)
+              gtk_table_attach (GTK_TABLE (parent), w, 0, 1, *row, *row + 1,
+                                GTK_FILL, 0, 0, 0);
+            else
+              gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4);
+          }
+
+        p->widget = gtk_entry_new ();
+        if (p->string)
+          gtk_entry_set_text (GTK_ENTRY (p->widget), p->string);
+        if (row)
+          gtk_table_attach (GTK_TABLE (parent), p->widget, 1, 3,
+                            *row, *row + 1,
+                            GTK_FILL, 0, 0, 0);
+        else
+          gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4);
+        break;
+      }
+    case FILENAME:
+      {
+        GtkWidget *L = gtk_label_new (label ? label : "");
+        GtkWidget *entry = gtk_entry_new ();
+        GtkWidget *button = gtk_button_new_with_label ("Browse...");
+        gtk_widget_show (entry);
+        gtk_widget_show (button);
+        p->widget = entry;
+
+        gtk_signal_connect (GTK_OBJECT (button),
+                            "clicked", GTK_SIGNAL_FUNC (browse_button_cb),
+                            (gpointer) entry);
+
+        gtk_label_set_justify (GTK_LABEL (L), GTK_JUSTIFY_RIGHT);
+        gtk_misc_set_alignment (GTK_MISC (L), 1.0, 0.5);
+        gtk_widget_show (L);
+
+        if (p->string)
+          gtk_entry_set_text (GTK_ENTRY (entry), p->string);
+
+        if (row)
+          {
+            gtk_table_attach (GTK_TABLE (parent), L, 0, 1,
+                              *row, *row + 1,
+                              GTK_FILL, 0, 0, 0);
+            gtk_table_attach (GTK_TABLE (parent), entry, 1, 2,
+                              *row, *row + 1,
+                              GTK_EXPAND | GTK_FILL, 0, 0, 0);
+            gtk_table_attach (GTK_TABLE (parent), button, 2, 3,
+                              *row, *row + 1,
+                              0, 0, 0, 0);
+          }
+        else
+          {
+            gtk_box_pack_start (GTK_BOX (parent), L,      FALSE, FALSE, 4);
+            gtk_box_pack_start (GTK_BOX (parent), entry,  TRUE,  TRUE,  4);
+            gtk_box_pack_start (GTK_BOX (parent), button, FALSE, FALSE, 4);
+          }
+        break;
+      }
+    case SLIDER:
+      {
+        GtkAdjustment *adj = make_adjustment (filename, p);
+        GtkWidget *scale = gtk_hscale_new (adj);
+        GtkWidget *labelw = 0;
+
+        if (label)
+          {
+            labelw = gtk_label_new (label);
+            gtk_label_set_justify (GTK_LABEL (labelw), GTK_JUSTIFY_LEFT);
+            gtk_misc_set_alignment (GTK_MISC (labelw), 0.0, 0.5);
+            gtk_widget_show (labelw);
+          }
+
+        if (GTK_IS_VBOX (parent))
+          {
+            /* If we're inside a vbox, we need to put an hbox in it, to get
+               the low/high labels to be to the left/right of the slider.
+             */
+            GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
+
+            /* But if we have a label, put that above the slider's hbox. */
+            if (labelw)
+              {
+                gtk_box_pack_start (GTK_BOX (parent), labelw, FALSE, TRUE, 2);
+                labelw = 0;
+              }
+
+            gtk_box_pack_start (GTK_BOX (parent), hbox, TRUE, TRUE, 6);
+            gtk_widget_show (hbox);
+            parent = hbox;
+          }
+
+        if (labelw)
+          {
+            if (row)
+              {
+                gtk_table_attach (GTK_TABLE (parent), labelw,
+                                  0, 3, *row, *row + 1,
+                                  GTK_EXPAND | GTK_FILL, 0, 0, 0);
+                (*row)++;
+              }
+            else
+              {
+                if (GTK_IS_HBOX (parent))
+                  {
+                    GtkWidget *box = gtk_vbox_new (FALSE, 0);
+                    gtk_box_pack_start (GTK_BOX (parent), box, FALSE, TRUE, 0);
+                    gtk_widget_show (box);
+                    gtk_box_pack_start (GTK_BOX (box), labelw, FALSE, TRUE, 4);
+                    parent = box;
+                    box = gtk_hbox_new (FALSE, 0);
+                    gtk_widget_show (box);
+                    gtk_box_pack_start (GTK_BOX (parent), box, TRUE, TRUE, 0);
+                    parent = box;
+                  }
+                else
+                  gtk_box_pack_start (GTK_BOX (parent), labelw,
+                                      FALSE, TRUE, 0);
+              }
+          }
+
+        if (p->low_label)
+          {
+            GtkWidget *w = gtk_label_new (p->low_label);
+            gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
+            gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
+            gtk_widget_show (w);
+            if (row)
+              gtk_table_attach (GTK_TABLE (parent), w, 0, 1, *row, *row + 1,
+                                GTK_FILL, 0, 0, 0);
+            else
+              gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4);
+          }
+
+        gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_BOTTOM);
+        gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
+        gtk_scale_set_digits (GTK_SCALE (scale), (p->integer_p ? 0 : 2));
+        if (row)
+          gtk_table_attach (GTK_TABLE (parent), scale, 1, 2,
+                            *row, *row + 1,
+                            GTK_EXPAND | GTK_FILL, 0, 0, 0);
+        else
+          gtk_box_pack_start (GTK_BOX (parent), scale, TRUE, TRUE, 4);
+
+        gtk_widget_show (scale);
+
+        if (p->high_label)
+          {
+            GtkWidget *w = gtk_label_new (p->high_label);
+            gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
+            gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
+            gtk_widget_show (w);
+            if (row)
+              gtk_table_attach (GTK_TABLE (parent), w, 2, 3, *row, *row + 1,
+                                GTK_FILL, 0, 0, 0);
+            else
+              gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4);
+          }
+
+        p->widget = scale;
+        break;
+      }
+    case SPINBUTTON:
+      {
+        GtkAdjustment *adj = make_adjustment (filename, p);
+        GtkWidget *spin = gtk_spin_button_new (adj, 15, 0);
+        gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin), TRUE);
+        gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (spin), TRUE);
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), adj->value);
+
+        if (label)
+          {
+            GtkWidget *w = gtk_label_new (label);
+            gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
+            gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
+            gtk_widget_show (w);
+            if (row)
+              gtk_table_attach (GTK_TABLE (parent), w, 0, 1, *row, *row + 1,
+                                GTK_FILL, 0, 0, 0);
+            else
+              gtk_box_pack_start (GTK_BOX (parent), w, TRUE, TRUE, 4);
+          }
+
+        gtk_widget_show (spin);
+        if (row)
+          {
+            GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
+            gtk_widget_show (hbox);
+            gtk_table_attach (GTK_TABLE (parent), hbox, 1, 3,
+                              *row, *row + 1,
+                              GTK_EXPAND | GTK_FILL, 0, 8, 0);
+            gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, FALSE, 0);
+          }
+        else
+          gtk_box_pack_start (GTK_BOX (parent), spin, FALSE, FALSE, 4);
+
+        p->widget = spin;
+        break;
+      }
+    case BOOLEAN:
+      {
+        p->widget = gtk_check_button_new_with_label (label);
+        if (row)
+          gtk_table_attach (GTK_TABLE (parent), p->widget, 0, 3,
+                            *row, *row + 1,
+                            GTK_EXPAND | GTK_FILL, 0, 0, 0);
+        else
+          gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4);
+        break;
+      }
+    case SELECT:
+      {
+        GtkWidget *opt = gtk_option_menu_new ();
+        GtkWidget *menu = gtk_menu_new ();
+        GList *opts;
+
+        if (label && row)
+          {
+            GtkWidget *w = gtk_label_new (label);
+            gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
+            gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
+            gtk_widget_show (w);
+            gtk_table_attach (GTK_TABLE (parent), w, 0, 3, *row, *row + 1,
+                              GTK_EXPAND | GTK_FILL, 0, 0, 0);
+            (*row)++;
+          }
+
+        for (opts = p->options; opts; opts = opts->next)
+          {
+            parameter *s = (parameter *) opts->data;
+            GtkWidget *i = gtk_menu_item_new_with_label (s->label);
+            gtk_widget_show (i);
+            gtk_menu_append (GTK_MENU (menu), i);
+          }
+
+        gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu);
+        p->widget = opt;
+        if (row)
+          gtk_table_attach (GTK_TABLE (parent), p->widget, 0, 3,
+                            *row, *row + 1,
+                            GTK_EXPAND | GTK_FILL, 0, 0, 0);
+        else
+          gtk_box_pack_start (GTK_BOX (parent), p->widget, TRUE, TRUE, 4);
+        break;
+      }
+
+    case COMMAND:
+    case FAKE:
+    case DESCRIPTION:
+    case FAKEPREVIEW:
+      break;
+    default:
+      abort();
+    }
+
+  if (p->widget)
+    {
+      gtk_widget_set_name (p->widget, p->id);
+      gtk_widget_show (p->widget);
+      if (row)
+        (*row)++;
+    }
+}
+
+\f
+/* File selection.
+   Absurdly, there is no GTK file entry widget, only a GNOME one,
+   so in order to avoid depending on GNOME in this code, we have
+   to do it ourselves.
+ */
+
+/* cancel button on GtkFileSelection: user_data unused */
+static void
+file_sel_cancel (GtkWidget *button, gpointer user_data)
+{
+  GtkWidget *dialog = button;
+  while (dialog->parent)
+    dialog = dialog->parent;
+  gtk_widget_destroy (dialog);
+}
+
+/* ok button on GtkFileSelection: user_data is the corresponding GtkEntry */
+static void
+file_sel_ok (GtkWidget *button, gpointer user_data)
+{
+  GtkWidget *entry = GTK_WIDGET (user_data);
+  GtkWidget *dialog = button;
+  char *path;
+  while (dialog->parent)
+    dialog = dialog->parent;
+  gtk_widget_hide (dialog);
+
+  path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog));
+  /* apparently one doesn't free `path' */
+
+  gtk_entry_set_text (GTK_ENTRY (entry), path);
+  gtk_entry_set_position (GTK_ENTRY (entry), strlen (path));
+
+  gtk_widget_destroy (dialog);
+}
+
+/* WM close on GtkFileSelection: user_data unused */
+static void
+file_sel_close (GtkWidget *widget, GdkEvent *event, gpointer user_data)
+{
+  file_sel_cancel (widget, user_data);
+}
+
+/* "Browse" button: user_data is the corresponding GtkEntry */
+static void
+browse_button_cb (GtkButton *button, gpointer user_data)
+{
+  GtkWidget *entry = GTK_WIDGET (user_data);
+  char *text = gtk_entry_get_text (GTK_ENTRY (entry));
+  GtkFileSelection *selector =
+    GTK_FILE_SELECTION (gtk_file_selection_new ("Select file."));
+
+  gtk_file_selection_set_filename (selector, text);
+  gtk_signal_connect (GTK_OBJECT (selector->ok_button),
+                      "clicked", GTK_SIGNAL_FUNC (file_sel_ok),
+                      (gpointer) entry);
+  gtk_signal_connect (GTK_OBJECT (selector->cancel_button),
+                      "clicked", GTK_SIGNAL_FUNC (file_sel_cancel),
+                      (gpointer) entry);
+  gtk_signal_connect (GTK_OBJECT (selector), "delete_event",
+                      GTK_SIGNAL_FUNC (file_sel_close),
+                      (gpointer) entry);
+
+  gtk_window_set_modal (GTK_WINDOW (selector), TRUE);
+  gtk_widget_show (GTK_WIDGET (selector));
+}
+
+\f
+/* Converting to and from command-lines
+ */
+
+
+/* Returns a copy of string that has been quoted according to shell rules:
+   it may have been wrapped in "" and had some characters backslashed; or
+   it may be unchanged.
+ */
+static char *
+shell_quotify (const char *string)
+{
+  char *string2 = (char *) malloc ((strlen (string) * 2) + 10);
+  const char *in;
+  char *out;
+  int need_quotes = 0;
+  int in_length = 0;
+
+  out = string2;
+  *out++ = '"';
+  for (in = string; *in; in++)
+    {
+      in_length++;
+      if (*in == '!' ||
+          *in == '"' ||
+          *in == '$')
+        {
+          need_quotes = 1;
+          *out++ = '\\';
+          *out++ = *in;
+        }
+      else if (*in <= ' ' ||
+               *in >= 127 ||
+               *in == '\'' ||
+               *in == '#' ||
+               *in == '%' ||
+               *in == '&' ||
+               *in == '(' ||
+               *in == ')' ||
+               *in == '*')
+        {
+          need_quotes = 1;
+          *out++ = *in;
+        }
+      else
+        *out++ = *in;
+    }
+  *out++ = '"';
+  *out = 0;
+
+  if (in_length == 0)
+    need_quotes = 1;
+
+  if (need_quotes)
+    return (string2);
+
+  free (string2);
+  return strdup (string);
+}
+
+/* Modify the string in place to remove wrapping double-quotes
+   and interior backslashes. 
+ */
+static void
+de_stringify (char *s)
+{
+  char q = s[0];
+  if (q != '\'' && q != '\"' && q != '`')
+    abort();
+  memmove (s, s+1, strlen (s)+1);
+  while (*s && *s != q)
+    {
+      if (*s == '\\')
+        memmove (s, s+1, strlen (s)+1);
+      s++;
+    }
+  if (*s != q) abort();
+  *s = 0;
+}
+
+
+/* Substitutes a shell-quotified version of `value' into `p->arg' at
+   the place where the `%' character appeared.
+ */
+static char *
+format_switch (parameter *p, const char *value)
+{
+  char *fmt = p->arg;
+  char *v2;
+  char *result, *s;
+  if (!fmt || !value) return 0;
+  v2 = shell_quotify (value);
+  result = (char *) malloc (strlen (fmt) + strlen (v2) + 10);
+  s = result;
+  for (; *fmt; fmt++)
+    if (*fmt != '%')
+      *s++ = *fmt;
+    else
+      {
+        strcpy (s, v2);
+        s += strlen (s);
+      }
+  *s = 0;
+
+  free (v2);
+  return result;
+}
+
+
+/* Maps a `parameter' to a command-line switch.
+   Returns 0 if it can't, or if the parameter has the default value.
+ */
+static char *
+parameter_to_switch (parameter *p)
+{
+  switch (p->type)
+    {
+    case COMMAND:
+      if (p->arg)
+        return strdup (p->arg);
+      else
+        return 0;
+      break;
+    case STRING:
+    case FILENAME:
+      if (!p->widget) return 0;
+      {
+        const char *s = gtk_entry_get_text (GTK_ENTRY (p->widget));
+        char *v;
+        if (!strcmp ((s ? s : ""),
+                     (p->string ? p->string : "")))
+          v = 0;  /* same as default */
+        else
+          v = format_switch (p, s);
+
+        /* don't free `s' */
+        return v;
+      }
+    case SLIDER:
+    case SPINBUTTON:
+      if (!p->widget) return 0;
+      {
+        GtkAdjustment *adj =
+          (p->type == SLIDER
+           ? gtk_range_get_adjustment (GTK_RANGE (p->widget))
+           : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget)));
+        char buf[255];
+        char *s1;
+        float value = (p->invert_p
+                       ? invert_range (adj->lower, adj->upper, adj->value)
+                       : adj->value);
+
+        if (value == p->value)  /* same as default */
+          return 0;
+
+        if (p->integer_p)
+          sprintf (buf, "%d", (int) (value + 0.5));
+        else
+          sprintf (buf, "%.4f", value);
+          
+        s1 = strchr (buf, '.');
+        if (s1)
+          {
+            char *s2 = s1 + strlen(s1) - 1;
+            while (s2 > s1 && *s2 == '0')      /* lose trailing zeroes */
+              *s2-- = 0;
+            if (s2 >= s1 && *s2 == '.')                /* lose trailing decimal */
+              *s2-- = 0;
+          }
+        return format_switch (p, buf);
+      }
+    case BOOLEAN:
+      if (!p->widget) return 0;
+      {
+        GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget);
+        const char *s = (gtk_toggle_button_get_active (b)
+                         ? p->arg_set
+                         : p->arg_unset);
+        if (s)
+          return strdup (s);
+        else
+          return 0;
+      }
+    case SELECT:
+      if (!p->widget) return 0;
+      {
+        GtkOptionMenu *opt = GTK_OPTION_MENU (p->widget);
+        GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt));
+        GtkWidget *selected = gtk_menu_get_active (menu);
+        GList *kids = gtk_container_children (GTK_CONTAINER (menu));
+        int menu_elt = g_list_index (kids, (gpointer) selected);
+        GList *ol = g_list_nth (p->options, menu_elt);
+        parameter *o = (ol ? (parameter *) ol->data : 0);
+        const char *s;
+        if (!o) abort();
+        if (o->type != SELECT_OPTION) abort();
+        s = o->arg_set;
+        if (s)
+          return strdup (s);
+        else
+          return 0;
+      }
+    default:
+      if (p->widget)
+        abort();
+      else
+        return 0;
+    }
+}
+
+/* Maps a GList of `parameter' objects to a complete command-line string.
+   All arguments will be properly quoted.
+ */
+static char *
+parameters_to_cmd_line (GList *parms)
+{
+  int L = g_list_length (parms);
+  int LL = 0;
+  char **strs = (char **) calloc (sizeof (*parms), L);
+  char *result;
+  char *out;
+  int i;
+
+  for (i = 0; parms; parms = parms->next, i++)
+    {
+      char *s = parameter_to_switch ((parameter *) parms->data);
+      strs[i] = s;
+      LL += (s ? strlen(s) : 0) + 1;
+    }
+
+  result = (char *) malloc (LL + 10);
+  out = result;
+  for (i = 0; i < L; i++)
+    if (strs[i])
+      {
+        strcpy (out, strs[i]);
+        out += strlen (out);
+        *out++ = ' ';
+        free (strs[i]);
+      }
+  *out = 0;
+  while (out > result && out[-1] == ' ')  /* strip trailing spaces */
+    *(--out) = 0;
+  free (strs);
+
+  return result;
+}
+
+
+/* Returns a GList of the tokens the string, using shell syntax;
+   Quoted strings are handled as a single token.
+ */
+static GList *
+tokenize_command_line (const char *cmd)
+{
+  GList *result = 0;
+  const char *s = cmd;
+  while (*s)
+    {
+      const char *start;
+      char *ss;
+      for (; isspace(*s); s++);                /* skip whitespace */
+
+      start = s;
+      if (*s == '\'' || *s == '\"' || *s == '`')
+        {
+          char q = *s;
+          s++;
+          while (*s && *s != q)                /* skip to matching quote */
+            {
+              if (*s == '\\' && s[1])  /* allowing backslash quoting */
+                s++;
+              s++;
+            }
+          s++;
+        }
+      else
+        {
+          while (*s &&
+                 (! (isspace(*s) ||
+                     *s == '\'' ||
+                     *s == '\"' ||
+                     *s == '`')))
+            s++;
+        }
+
+      if (s > start)
+        {
+          ss = (char *) malloc ((s - start) + 1);
+          strncpy (ss, start, s-start);
+          ss[s-start] = 0;
+          if (*ss == '\'' || *ss == '\"' || *ss == '`')
+            de_stringify (ss);
+          result = g_list_append (result, ss);
+        }
+    }
+
+  return result;
+}
+
+static void parameter_set_switch (parameter *, gpointer value);
+static gboolean parse_command_line_into_parameters_1 (const char *filename,
+                                                      GList *parms,
+                                                      const char *option,
+                                                      const char *value,
+                                                      parameter *parent);
+
+
+/* Parses the command line, and flushes those options down into
+   the `parameter' structs in the list.
+ */
+static void
+parse_command_line_into_parameters (const char *filename,
+                                    const char *cmd, GList *parms)
+{
+  GList *tokens = tokenize_command_line (cmd);
+  GList *rest;
+  for (rest = tokens; rest; rest = rest->next)
+    {
+      char *option = rest->data;
+      rest->data = 0;
+
+      if (option[0] != '-')
+        {
+          if (debug_p)
+            fprintf (stderr, "%s: WARNING: %s: not a switch: \"%s\"\n",
+                     blurb(), filename, option);
+        }
+      else
+        {
+          char *value = 0;
+
+          if (rest->next)   /* pop off the arg to this option */
+            {
+              char *s = (char *) rest->next->data;
+              /* the next token is the next switch iff it matches "-[a-z]".
+                 (To avoid losing on "-x -3.1".)
+               */
+              if (s && (s[0] != '-' || !isalpha(s[1])))
+                {
+                  value = s;
+                  rest->next->data = 0;
+                  rest = rest->next;
+                }
+            }
+
+          parse_command_line_into_parameters_1 (filename, parms,
+                                                option, value, 0);
+          if (value) free (value);
+          free (option);
+        }
+    }
+  g_list_free (tokens);
+}
+
+
+static gboolean
+compare_opts (const char *option, const char *value,
+              const char *template)
+{
+  int ol = strlen (option);
+  char *c;
+
+  if (strncmp (option, template, ol))
+    return FALSE;
+
+  if (template[ol] != (value ? ' ' : 0))
+    return FALSE;
+
+  /* At this point, we have a match against "option".
+     If template contains a %, we're done.
+     Else, compare against "value" too.
+   */
+  c = strchr (template, '%');
+  if (c)
+    return TRUE;
+
+  if (!value)
+    return (template[ol] == 0);
+  if (strcmp (template + ol + 1, value))
+    return FALSE;
+
+  return TRUE;
+}
+
+
+static gboolean
+parse_command_line_into_parameters_1 (const char *filename,
+                                      GList *parms,
+                                      const char *option,
+                                      const char *value,
+                                      parameter *parent)
+{
+  GList *p;
+  parameter *match = 0;
+  int which = -1;
+  int index = 0;
+
+  for (p = parms; p; p = p->next)
+    {
+      parameter *pp = (parameter *) p->data;
+      which = -99;
+
+      if (pp->type == SELECT)
+        {
+          if (parse_command_line_into_parameters_1 (filename,
+                                                    pp->options,
+                                                    option, value,
+                                                    pp))
+            {
+              which = -2;
+              match = pp;
+            }
+        }
+      else if (pp->arg)
+        {
+          if (compare_opts (option, value, pp->arg))
+            {
+              which = -1;
+              match = pp;
+            }
+        }
+      else if (pp->arg_set)
+        {
+          if (compare_opts (option, value, pp->arg_set))
+            {
+              which = 1;
+              match = pp;
+            }
+        }
+      else if (pp->arg_unset)
+        {
+          if (compare_opts (option, value, pp->arg_unset))
+            {
+              which = 0;
+              match = pp;
+            }
+        }
+
+      if (match)
+        break;
+
+      index++;
+    }
+
+  if (!match)
+    {
+      if (debug_p && !parent)
+        fprintf (stderr, "%s: WARNING: %s: no match for %s %s\n",
+                 blurb(), filename, option, (value ? value : ""));
+      return FALSE;
+    }
+
+  switch (match->type)
+    {
+    case STRING:
+    case FILENAME:
+    case SLIDER:
+    case SPINBUTTON:
+      if (which != -1) abort();
+      parameter_set_switch (match, (gpointer) value);
+      break;
+    case BOOLEAN:
+      if (which != 0 && which != 1) abort();
+      parameter_set_switch (match, (gpointer) which);
+      break;
+    case SELECT_OPTION:
+      if (which != 1) abort();
+      parameter_set_switch (parent, (gpointer) index);
+      break;
+    default:
+      break;
+    }
+  return TRUE;
+}
+
+
+/* Set the parameter's value.
+   For STRING, FILENAME, SLIDER, and SPINBUTTON, `value' is a char*.
+   For BOOLEAN and SELECT, `value' is an int.
+ */
+static void
+parameter_set_switch (parameter *p, gpointer value)
+{
+  if (p->type == SELECT_OPTION) abort();
+  if (!p->widget) return;
+  switch (p->type)
+    {
+    case STRING:
+    case FILENAME:
+      {
+        gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) value);
+        break;
+      }
+    case SLIDER:
+    case SPINBUTTON:
+      {
+        GtkAdjustment *adj =
+          (p->type == SLIDER
+           ? gtk_range_get_adjustment (GTK_RANGE (p->widget))
+           : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget)));
+        float f;
+        char c;
+
+        if (1 == sscanf ((char *) value, "%f %c", &f, &c))
+          {
+            if (p->invert_p)
+              f = invert_range (adj->lower, adj->upper, f);
+            gtk_adjustment_set_value (adj, f);
+          }
+        break;
+      }
+    case BOOLEAN:
+      {
+        GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget);
+        gtk_toggle_button_set_active (b, (int) value);
+        break;
+      }
+    case SELECT:
+      {
+        gtk_option_menu_set_history (GTK_OPTION_MENU (p->widget),
+                                     (int) value);
+        break;
+      }
+    default:
+      abort();
+    }
+}
+
+
+static void
+restore_defaults (const char *progname, GList *parms)
+{
+  for (; parms; parms = parms->next)
+    {
+      parameter *p = (parameter *) parms->data;
+      if (!p->widget) continue;
+      switch (p->type)
+        {
+        case STRING:
+        case FILENAME:
+          {
+            gtk_entry_set_text (GTK_ENTRY (p->widget),
+                                (p->string ? p->string : ""));
+            break;
+          }
+        case SLIDER:
+        case SPINBUTTON:
+          {
+            GtkAdjustment *adj =
+              (p->type == SLIDER
+               ? gtk_range_get_adjustment (GTK_RANGE (p->widget))
+               : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget)));
+            float value = (p->invert_p
+                           ? invert_range (p->low, p->high, p->value)
+                           : p->value);
+            gtk_adjustment_set_value (adj, value);
+            break;
+          }
+        case BOOLEAN:
+          {
+            /* A toggle button should be on by default if it inserts
+               nothing into the command line when on.  E.g., it should
+               be on if `arg_set' is null.
+             */
+            gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (p->widget),
+                                          (!p->arg_set || !*p->arg_set));
+            break;
+          }
+        case SELECT:
+          {
+            GtkOptionMenu *opt = GTK_OPTION_MENU (p->widget);
+            GList *opts;
+            int selected = 0;
+            int index;
+
+            for (opts = p->options, index = 0; opts;
+                 opts = opts->next, index++)
+              {
+                parameter *s = (parameter *) opts->data;
+                /* The default menu item is the first one with
+                   no `arg_set' field. */
+                if (!s->arg_set)
+                  {
+                    selected = index;
+                    break;
+                  }
+              }
+
+            gtk_option_menu_set_history (GTK_OPTION_MENU (opt), selected);
+            break;
+          }
+        default:
+          abort();
+        }
+    }
+}
+
+
+\f
+/* Documentation strings
+ */
+
+static char *
+get_description (GList *parms)
+{
+  parameter *doc = 0;
+  for (; parms; parms = parms->next)
+    {
+      parameter *p = (parameter *) parms->data;
+      if (p->type == DESCRIPTION)
+        {
+          doc = p;
+          break;
+        }
+    }
+
+  if (!doc || !doc->string)
+    return 0;
+  else
+    {
+      char *d = strdup (doc->string);
+      char *s;
+      for (s = d; *s; s++)
+        if (s[0] == '\n')
+          {
+            if (s[1] == '\n')      /* blank line: leave it */
+              s++;
+            else if (s[1] == ' ' || s[1] == '\t')
+              s++;                 /* next line is indented: leave newline */
+            else
+              s[0] = ' ';          /* delete newline to un-fold this line */
+          }
+
+      /* strip off leading whitespace on first line only */
+      for (s = d; *s && (*s == ' ' || *s == '\t'); s++)
+        ;
+      while (*s == '\n')   /* strip leading newlines */
+        s++;
+      if (s != d)
+        memmove (d, s, strlen(s)+1);
+
+      /* strip off trailing whitespace and newlines */
+      {
+        int L = strlen(d);
+        while (L && isspace(d[L-1]))
+          d[--L] = 0;
+      }
+
+      return d;
+    }
+}
+
+\f
+/* External interface.
+ */
+
+static conf_data *
+load_configurator_1 (const char *program, const char *arguments,
+                     gboolean verbose_p)
+{
+  const char *dir = HACK_CONFIGURATION_PATH;
+  int L = strlen (dir);
+  char *file = (char *) malloc (L + strlen (program) + 10);
+  char *s;
+  FILE *f;
+  conf_data *data = (conf_data *) calloc (1, sizeof(*data));
+
+  strcpy (file, dir);
+  if (file[L-1] != '/')
+    file[L++] = '/';
+  strcpy (file+L, program);
+
+  for (s = file+L; *s; s++)
+    if (*s == '/' || *s == ' ')
+      *s = '_';
+    else if (isupper (*s))
+      *s = tolower (*s);
+
+  strcat (file+L, ".xml");
+
+  f = fopen (file, "r");
+  if (f)
+    {
+      int res, size = 1024;
+      char chars[1024];
+      xmlParserCtxtPtr ctxt;
+      xmlDocPtr doc = 0;
+      GtkWidget *table;
+      GList *parms;
+
+      if (verbose_p)
+        fprintf (stderr, "%s: reading %s...\n", blurb(), file);
+
+      res = fread (chars, 1, 4, f);
+      if (res <= 0) return 0;
+
+      ctxt = xmlCreatePushParserCtxt(NULL, NULL, chars, res, file);
+      while ((res = fread(chars, 1, size, f)) > 0)
+        xmlParseChunk (ctxt, chars, res, 0);
+      xmlParseChunk (ctxt, chars, 0, 1);
+      doc = ctxt->myDoc;
+      xmlFreeParserCtxt (ctxt);
+      fclose (f);
+
+      /* Parsed the XML file.  Now make some widgets. */
+
+      table = gtk_table_new (1, 3, FALSE);
+      gtk_table_set_row_spacings (GTK_TABLE (table), 4);
+      gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+      gtk_container_set_border_width (GTK_CONTAINER (table), 8);
+      gtk_widget_show (table);
+
+      parms = make_parameters (file, doc->root, table);
+
+      xmlFreeDoc (doc);
+
+      restore_defaults (program, parms);
+      if (arguments && *arguments)
+        parse_command_line_into_parameters (program, arguments, parms);
+
+      data->widget = table;
+      data->parameters = parms;
+      data->description = get_description (parms);
+    }
+  else
+    {
+      parameter *p;
+
+      if (verbose_p)
+        fprintf (stderr, "%s: %s does not exist.\n", blurb(), file);
+
+      p = calloc (1, sizeof(*p));
+      p->type = COMMAND;
+      p->arg = strdup (arguments);
+
+      data->parameters = g_list_append (0, (gpointer) p);
+    }
+
+  data->progname = strdup (program);
+  return data;
+}
+
+static void
+split_command_line (const char *full_command_line,
+                    char **prog_ret, char **args_ret)
+{
+  char *line = strdup (full_command_line);
+  char *prog;
+  char *args;
+  char *s;
+
+  prog = line;
+  s = line;
+  while (*s)
+    {
+      if (isspace (*s))
+        {
+          *s = 0;
+          s++;
+          while (isspace (*s)) s++;
+          break;
+        }
+      else if (*s == '=')  /* if the leading word contains an "=", skip it. */
+        {
+          while (*s && !isspace (*s)) s++;
+          while (isspace (*s)) s++;
+          prog = s;
+        }
+      s++;
+    }
+  args = s;
+
+  *prog_ret = strdup (prog);
+  *args_ret = strdup (args);
+  free (line);
+}
+
+
+conf_data *
+load_configurator (const char *full_command_line, gboolean verbose_p)
+{
+  char *prog;
+  char *args;
+  conf_data *cd;
+  split_command_line (full_command_line, &prog, &args);
+  cd = load_configurator_1 (prog, args, verbose_p);
+  free (prog);
+  free (args);
+  return cd;
+}
+
+
+
+char *
+get_configurator_command_line (conf_data *data)
+{
+  char *args = parameters_to_cmd_line (data->parameters);
+  char *result = (char *) malloc (strlen (data->progname) +
+                                  strlen (args) + 2);
+  strcpy (result, data->progname);
+  strcat (result, " ");
+  strcat (result, args);
+  free (args);
+  return result;
+}
+
+
+void
+set_configurator_command_line (conf_data *data, const char *full_command_line)
+{
+  char *prog;
+  char *args;
+  split_command_line (full_command_line, &prog, &args);
+  if (data->progname) free (data->progname);
+  data->progname = prog;
+  restore_defaults (prog, data->parameters);
+  parse_command_line_into_parameters (prog, args, data->parameters);
+  free (args);
+}
+
+void
+free_conf_data (conf_data *data)
+{
+  if (data->parameters)
+    {
+      GList *rest;
+      for (rest = data->parameters; rest; rest = rest->next)
+        {
+          free_parameter ((parameter *) rest->data);
+          rest->data = 0;
+        }
+      g_list_free (data->parameters);
+      data->parameters = 0;
+    }
+
+  if (data->widget)
+    gtk_widget_destroy (data->widget);
+
+  if (data->progname)
+    free (data->progname);;
+
+  memset (data, ~0, sizeof(*data));
+  free (data);
+}
+
+
+#endif /* HAVE_GTK && HAVE_XML -- whole file */
diff --git a/driver/demo-Gtk-conf.h b/driver/demo-Gtk-conf.h
new file mode 100644 (file)
index 0000000..42b1dbf
--- /dev/null
@@ -0,0 +1,29 @@
+/* demo-Gtk-conf.c --- implements the dynamic configuration dialogs.
+ * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#ifndef _DEMO_GTK_CONF_H_
+#define _DEMO_GTK_CONF_H_
+
+typedef struct {
+  GtkWidget *widget;  /* the container widget with the sliders and stuff. */
+  GList *parameters;  /* internal data -- hands off */
+  char *progname;
+  char *progclass;
+  char *description;
+} conf_data;
+
+extern conf_data *load_configurator (const char *cmd_line, gboolean verbose_p);
+extern char *get_configurator_command_line (conf_data *);
+extern void  set_configurator_command_line (conf_data *, const char *cmd_line);
+extern void free_conf_data (conf_data *);
+
+#endif /* _DEMO_GTK_CONF_H_ */
index a9fadcd311acaae27f7aaf61a5c9d36627ef3134..59bc17b9808f1b5b8a86482da33ba14ee903e61e 100644 (file)
@@ -41,6 +41,16 @@ void
 doc_menu_cb                            (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
+void
+switch_page_cb                         (GtkNotebook     *notebook,
+                                        GtkNotebookPage *page,
+                                        gint             page_num,
+                                        gpointer         user_data);
+
+void
+pref_changed_cb                        (GtkWidget       *widget,
+                                        gpointer         user_data);
+
 void
 run_next_cb                            (GtkButton       *button,
                                         gpointer         user_data);
@@ -54,35 +64,39 @@ run_this_cb                            (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-apply_manual_cb                        (GtkButton       *button,
+manual_cb                              (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-prefs_ok_cb                            (GtkButton       *button,
+settings_cb                            (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-prefs_cancel_cb                        (GtkButton       *button,
+browse_image_dir_cb                    (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-manual_cb                              (GtkButton       *button,
+settings_switch_page_cb                (GtkNotebook     *notebook,
+                                        GtkNotebookPage *page,
+                                        gint             page_num,
                                         gpointer         user_data);
 
 void
-notebook_switch_page_cb                (GtkNotebook     *notebook,
-                                        GtkNotebookPage *page,
-                                        gint             page_num,
+enabled_cb                             (GtkToggleButton *togglebutton,
                                         gpointer         user_data);
 
 void
-pref_changed_cb                        (GtkToggleButton *togglebutton,
+settings_adv_cb                        (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-enabled_cb                             (GtkToggleButton *togglebutton,
+settings_std_cb                        (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-browse_image_dir_cb                    (GtkButton       *button,
+settings_ok_cb                         (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+settings_cancel_cb                     (GtkButton       *button,
                                         gpointer         user_data);
diff --git a/driver/demo-Gtk-support.c b/driver/demo-Gtk-support.c
new file mode 100644 (file)
index 0000000..df64c82
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <gtk/gtk.h>
+
+#include "demo-Gtk-support.h"
+
+/* This is an internally used function to check if a pixmap file exists. */
+static gchar* check_file_exists        (const gchar     *directory,
+                                        const gchar     *filename);
+
+/* This is an internally used function to create pixmaps. */
+static GtkWidget* create_dummy_pixmap  (GtkWidget       *widget);
+
+GtkWidget*
+lookup_widget                          (GtkWidget       *widget,
+                                        const gchar     *widget_name)
+{
+  GtkWidget *parent, *found_widget;
+
+  for (;;)
+    {
+      if (GTK_IS_MENU (widget))
+        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+      else
+        parent = widget->parent;
+      if (parent == NULL)
+        break;
+      widget = parent;
+    }
+
+  found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
+                                                   widget_name);
+  if (!found_widget)
+    g_warning ("Widget not found: %s", widget_name);
+  return found_widget;
+}
+
+/* This is a dummy pixmap we use when a pixmap can't be found. */
+static char *dummy_pixmap_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"1 1 1 1",
+"  c None",
+/* pixels */
+" "
+};
+
+/* This is an internally used function to create pixmaps. */
+static GtkWidget*
+create_dummy_pixmap                    (GtkWidget       *widget)
+{
+  GdkColormap *colormap;
+  GdkPixmap *gdkpixmap;
+  GdkBitmap *mask;
+  GtkWidget *pixmap;
+
+  colormap = gtk_widget_get_colormap (widget);
+  gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask,
+                                                     NULL, dummy_pixmap_xpm);
+  if (gdkpixmap == NULL)
+    g_error ("Couldn't create replacement pixmap.");
+  pixmap = gtk_pixmap_new (gdkpixmap, mask);
+  gdk_pixmap_unref (gdkpixmap);
+  gdk_bitmap_unref (mask);
+  return pixmap;
+}
+
+static GList *pixmaps_directories = NULL;
+
+/* Use this function to set the directory containing installed pixmaps. */
+void
+add_pixmap_directory                   (const gchar     *directory)
+{
+  pixmaps_directories = g_list_prepend (pixmaps_directories,
+                                        g_strdup (directory));
+}
+
+/* This is an internally used function to create pixmaps. */
+GtkWidget*
+create_pixmap                          (GtkWidget       *widget,
+                                        const gchar     *filename)
+{
+  gchar *found_filename = NULL;
+  GdkColormap *colormap;
+  GdkPixmap *gdkpixmap;
+  GdkBitmap *mask;
+  GtkWidget *pixmap;
+  GList *elem;
+
+  if (!filename || !filename[0])
+      return create_dummy_pixmap (widget);
+
+  /* We first try any pixmaps directories set by the application. */
+  elem = pixmaps_directories;
+  while (elem)
+    {
+      found_filename = check_file_exists ((gchar*)elem->data, filename);
+      if (found_filename)
+        break;
+      elem = elem->next;
+    }
+
+  /* If we haven't found the pixmap, try the source directory. */
+  if (!found_filename)
+    {
+      found_filename = check_file_exists ("", filename);
+    }
+
+  if (!found_filename)
+    {
+      g_warning ("Couldn't find pixmap file: %s", filename);
+      return create_dummy_pixmap (widget);
+    }
+
+  colormap = gtk_widget_get_colormap (widget);
+  gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask,
+                                                   NULL, found_filename);
+  if (gdkpixmap == NULL)
+    {
+      g_warning ("Error loading pixmap file: %s", found_filename);
+      g_free (found_filename);
+      return create_dummy_pixmap (widget);
+    }
+  g_free (found_filename);
+  pixmap = gtk_pixmap_new (gdkpixmap, mask);
+  gdk_pixmap_unref (gdkpixmap);
+  gdk_bitmap_unref (mask);
+  return pixmap;
+}
+
+/* This is an internally used function to check if a pixmap file exists. */
+gchar*
+check_file_exists                      (const gchar     *directory,
+                                        const gchar     *filename)
+{
+  gchar *full_filename;
+  struct stat s;
+  gint status;
+
+  full_filename = (gchar*) g_malloc (strlen (directory) + 1
+                                     + strlen (filename) + 1);
+  strcpy (full_filename, directory);
+  strcat (full_filename, G_DIR_SEPARATOR_S);
+  strcat (full_filename, filename);
+
+  status = stat (full_filename, &s);
+  if (status == 0 && S_ISREG (s.st_mode))
+    return full_filename;
+  g_free (full_filename);
+  return NULL;
+}
+
diff --git a/driver/demo-Gtk-support.h b/driver/demo-Gtk-support.h
new file mode 100644 (file)
index 0000000..aee31f9
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+/*
+ * Public Functions.
+ */
+
+/*
+ * This function returns a widget in a component created by Glade.
+ * Call it with the toplevel widget in the component (i.e. a window/dialog),
+ * or alternatively any widget in the component, and the name of the widget
+ * you want returned.
+ */
+GtkWidget*  lookup_widget              (GtkWidget       *widget,
+                                        const gchar     *widget_name);
+
+/* get_widget() is deprecated. Use lookup_widget instead. */
+#define get_widget lookup_widget
+
+/* Use this function to set the directory containing installed pixmaps. */
+void        add_pixmap_directory       (const gchar     *directory);
+
+
+/*
+ * Private Functions.
+ */
+
+/* This is used to create the pixmaps in the interface. */
+GtkWidget*  create_pixmap              (GtkWidget       *widget,
+                                        const gchar     *filename);
+
index 08392c1f497d08e6f13bc90a4dd3be266f197929..50794917939fffe61a518e7eaa0fec4934d3ef91 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "demo-Gtk-stubs.h"
 #include "demo-Gtk-widgets.h"
+#include "demo-Gtk-support.h"
 
 GtkWidget*
 create_xscreensaver_demo (void)
@@ -33,20 +34,41 @@ create_xscreensaver_demo (void)
   GtkWidget *restart;
   GtkWidget *separator1;
   GtkWidget *exit_menu;
-  GtkWidget *edit;
-  GtkWidget *edit_menu;
-  GtkAccelGroup *edit_menu_accels;
-  GtkWidget *cut_menu;
-  GtkWidget *copy_menu;
-  GtkWidget *paste_menu;
   GtkWidget *help;
   GtkWidget *help_menu;
   GtkAccelGroup *help_menu_accels;
   GtkWidget *about_menu;
   GtkWidget *doc_menu;
   GtkWidget *notebook;
-  GtkWidget *demos_hbox;
+  GtkWidget *demos_table;
+  GtkWidget *blanking_table;
+  GtkWidget *cycle_label;
+  GtkWidget *lock_button_eventbox;
+  GtkWidget *lock_button;
+  GtkWidget *timeout_label;
+  GtkObject *timeout_spinbutton_adj;
+  GtkWidget *timeout_spinbutton;
+  GtkWidget *timeout_mlabel;
+  GtkWidget *cycle_mlabel;
+  GtkWidget *lock_mlabel;
+  GtkObject *lock_spinbutton_adj;
+  GtkWidget *lock_spinbutton;
+  GtkObject *cycle_spinbutton_adj;
+  GtkWidget *cycle_spinbutton;
+  GtkWidget *demo_manual_hbbox;
+  GtkWidget *demo;
+  GtkWidget *settings;
   GtkWidget *list_vbox;
+  GtkWidget *mode_hbox;
+  GtkWidget *mode_label;
+  GtkWidget *mode_menu;
+  GtkWidget *mode_menu_menu;
+  GtkWidget *glade_menuitem;
+  GtkWidget *col_head_hbox;
+  GtkWidget *use_col_frame;
+  GtkWidget *use_label;
+  GtkWidget *saver_col_frame;
+  GtkWidget *saver_label;
   GtkWidget *scroller;
   GtkWidget *viewport;
   GtkWidget *list;
@@ -54,81 +76,71 @@ create_xscreensaver_demo (void)
   GtkWidget *next_prev_hbox;
   GtkWidget *next;
   GtkWidget *prev;
-  GtkWidget *opts_vbox;
-  GtkWidget *frame;
-  GtkWidget *doc;
-  GtkWidget *opts_vbox2;
-  GtkWidget *cmd_label;
-  GtkWidget *cmd_text;
-  GtkWidget *opts_hbox3;
-  GtkWidget *enabled;
-  GtkWidget *visual;
-  GtkWidget *visual_combo;
-  GList *visual_combo_items = NULL;
-  GtkWidget *combo_entry1;
-  GtkWidget *demo_hline;
-  GtkWidget *demo_manual_hbox;
-  GtkWidget *demo;
-  GtkWidget *manual;
+  GtkWidget *preview_frame;
+  GtkWidget *preview_aspectframe;
+  GtkWidget *preview;
   GtkWidget *demo_tab;
-  GtkWidget *options_vbox;
   GtkWidget *options_table;
-  GtkWidget *options_table_2;
-  GtkWidget *dpms_frame;
-  GtkWidget *dpms_table;
-  GtkWidget *dpms_off_text;
-  GtkWidget *dpms_suspend_text;
-  GtkWidget *dpms_standby_text;
-  GtkWidget *dpms_standby_label;
-  GtkWidget *dpms_off_label;
-  GtkWidget *dpms_suspend_label;
-  GtkWidget *dpms_dummy;
-  GtkWidget *dpms_button_eventbox;
-  GtkWidget *dpms_button;
+  GtkWidget *diag_frame;
+  GtkWidget *diag_hbox;
+  GtkWidget *diag_logo;
+  GtkWidget *diag_vbox;
+  GtkWidget *verbose_button_eventbox;
+  GtkWidget *verbose_button;
+  GtkWidget *capture_button_eventbox;
+  GtkWidget *capture_button;
+  GtkWidget *splash_button_eventbox;
+  GtkWidget *splash_button;
   GtkWidget *cmap_frame;
-  GtkWidget *cmap_table;
-  GtkWidget *fade_text;
-  GtkWidget *cmap_dummy;
-  GtkWidget *fade_label;
+  GtkWidget *cmap_hbox;
+  GtkWidget *cmap_logo;
+  GtkWidget *cmap_vbox;
   GtkWidget *install_button_eventbox;
   GtkWidget *install_button;
+  GtkWidget *cmap_hr;
   GtkWidget *fade_button_eventbox;
   GtkWidget *fade_button;
   GtkWidget *unfade_button_eventbox;
   GtkWidget *unfade_button;
-  GtkWidget *cmap_hr;
-  GtkWidget *options_table_1;
+  GtkWidget *fade_hbox;
+  GtkWidget *fade_dummy;
+  GtkWidget *fade_label;
+  GtkObject *fade_spinbutton_adj;
+  GtkWidget *fade_spinbutton;
+  GtkWidget *fade_sec_label;
+  GtkWidget *dpms_frame;
+  GtkWidget *dpms_hbox;
+  GtkWidget *dpms_logo;
+  GtkWidget *dpms_vbox;
+  GtkWidget *dpms_button_eventbox;
+  GtkWidget *dpms_button;
+  GtkWidget *dpms_table;
+  GtkObject *dpms_standby_spinbutton_adj;
+  GtkWidget *dpms_standby_spinbutton;
+  GtkWidget *dpms_standby_mlabel;
+  GtkWidget *dpms_suspend_mlabel;
+  GtkWidget *dpms_off_mlabel;
+  GtkWidget *dpms_off_label;
+  GtkWidget *dpms_suspend_label;
+  GtkWidget *dpms_standby_label;
+  GtkObject *dpms_suspend_spinbutton_adj;
+  GtkWidget *dpms_suspend_spinbutton;
+  GtkObject *dpms_off_spinbutton_adj;
+  GtkWidget *dpms_off_spinbutton;
   GtkWidget *grab_frame;
-  GtkWidget *grab_table;
-  GtkWidget *grab_image_eventbox;
-  GtkWidget *grab_image_button;
-  GtkWidget *image_browse_button;
-  GtkWidget *grab_video_eventbox;
-  GtkWidget *grab_video_button;
+  GtkWidget *grab_hbox;
+  GtkWidget *img_logo;
+  GtkWidget *grab_vbox;
   GtkWidget *grab_desk_eventbox;
   GtkWidget *grab_desk_button;
+  GtkWidget *grab_video_eventbox;
+  GtkWidget *grab_video_button;
+  GtkWidget *grab_image_eventbox;
+  GtkWidget *grab_image_button;
+  GtkWidget *image_hbox;
   GtkWidget *grab_dummy;
   GtkWidget *image_text;
-  GtkWidget *blanking_frame;
-  GtkWidget *blanking_table;
-  GtkWidget *lock_text;
-  GtkWidget *cycle_text;
-  GtkWidget *timeout_text;
-  GtkWidget *timeout_label;
-  GtkWidget *cycle_label;
-  GtkWidget *lock_label;
-  GtkWidget *blanking_dummy;
-  GtkWidget *lock_button_eventbox;
-  GtkWidget *lock_button;
-  GtkWidget *blanking_hr;
-  GtkWidget *diag_frame;
-  GtkWidget *diag_table;
-  GtkWidget *splash_button_eventbox;
-  GtkWidget *splash_button;
-  GtkWidget *capture_button_eventbox;
-  GtkWidget *capture_button;
-  GtkWidget *verbose_button_eventbox;
-  GtkWidget *verbose_button;
+  GtkWidget *image_browse_button;
   GtkWidget *options_tab;
   GtkAccelGroup *accel_group;
   GtkTooltips *tooltips;
@@ -141,7 +153,6 @@ create_xscreensaver_demo (void)
   gtk_widget_set_name (xscreensaver_demo, "xscreensaver_demo");
   gtk_object_set_data (GTK_OBJECT (xscreensaver_demo), "xscreensaver_demo", xscreensaver_demo);
   gtk_window_set_title (GTK_WINDOW (xscreensaver_demo), "XScreenSaver");
-  gtk_window_set_policy (GTK_WINDOW (xscreensaver_demo), TRUE, TRUE, FALSE);
   gtk_window_set_wmclass (GTK_WINDOW (xscreensaver_demo), "xscreensaver", "XScreenSaver");
 
   outer_vbox = gtk_vbox_new (FALSE, 5);
@@ -164,7 +175,7 @@ create_xscreensaver_demo (void)
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file)->child),
                                    "_File");
   gtk_widget_add_accelerator (file, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
+                              tmp_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
   gtk_widget_set_name (file, "file");
   gtk_widget_ref (file);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "file", file,
@@ -204,7 +215,7 @@ create_xscreensaver_demo (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (lock_menu);
   gtk_container_add (GTK_CONTAINER (file_menu), lock_menu);
-  gtk_tooltips_set_tip (tooltips, lock_menu, "Lock the screen now (even if \"Require Password\" is unchecked.)", NULL);
+  gtk_tooltips_set_tip (tooltips, lock_menu, "Lock the screen now (even if \"Lock Screen\" is unchecked.)", NULL);
 
   kill_menu = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (kill_menu)->child),
@@ -254,67 +265,11 @@ create_xscreensaver_demo (void)
   gtk_container_add (GTK_CONTAINER (file_menu), exit_menu);
   gtk_tooltips_set_tip (tooltips, exit_menu, "Exit the xscreensaver-demo program (but leave the XScreenSaver daemon running in the background.)", NULL);
 
-  edit = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (edit)->child),
-                                   "_Edit");
-  gtk_widget_add_accelerator (edit, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
-  gtk_widget_set_name (edit, "edit");
-  gtk_widget_ref (edit);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "edit", edit,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (edit);
-  gtk_container_add (GTK_CONTAINER (menubar), edit);
-
-  edit_menu = gtk_menu_new ();
-  gtk_widget_set_name (edit_menu, "edit_menu");
-  gtk_widget_ref (edit_menu);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "edit_menu", edit_menu,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_menu_item_set_submenu (GTK_MENU_ITEM (edit), edit_menu);
-  edit_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (edit_menu));
-
-  cut_menu = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (cut_menu)->child),
-                                   "C_ut");
-  gtk_widget_add_accelerator (cut_menu, "activate_item", edit_menu_accels,
-                              tmp_key, 0, 0);
-  gtk_widget_set_name (cut_menu, "cut_menu");
-  gtk_widget_ref (cut_menu);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cut_menu", cut_menu,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cut_menu);
-  gtk_container_add (GTK_CONTAINER (edit_menu), cut_menu);
-
-  copy_menu = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (copy_menu)->child),
-                                   "_Copy");
-  gtk_widget_add_accelerator (copy_menu, "activate_item", edit_menu_accels,
-                              tmp_key, 0, 0);
-  gtk_widget_set_name (copy_menu, "copy_menu");
-  gtk_widget_ref (copy_menu);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "copy_menu", copy_menu,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (copy_menu);
-  gtk_container_add (GTK_CONTAINER (edit_menu), copy_menu);
-
-  paste_menu = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (paste_menu)->child),
-                                   "_Paste");
-  gtk_widget_add_accelerator (paste_menu, "activate_item", edit_menu_accels,
-                              tmp_key, 0, 0);
-  gtk_widget_set_name (paste_menu, "paste_menu");
-  gtk_widget_ref (paste_menu);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "paste_menu", paste_menu,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (paste_menu);
-  gtk_container_add (GTK_CONTAINER (edit_menu), paste_menu);
-
   help = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (help)->child),
                                    "_Help");
   gtk_widget_add_accelerator (help, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
+                              tmp_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
   gtk_widget_set_name (help, "help");
   gtk_widget_ref (help);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "help", help,
@@ -364,23 +319,280 @@ create_xscreensaver_demo (void)
   gtk_widget_show (notebook);
   gtk_box_pack_start (GTK_BOX (outer_vbox), notebook, TRUE, TRUE, 0);
 
-  demos_hbox = gtk_hbox_new (FALSE, 5);
-  gtk_widget_set_name (demos_hbox, "demos_hbox");
-  gtk_widget_ref (demos_hbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demos_hbox", demos_hbox,
+  demos_table = gtk_table_new (2, 2, FALSE);
+  gtk_widget_set_name (demos_table, "demos_table");
+  gtk_widget_ref (demos_table);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demos_table", demos_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (demos_table);
+  gtk_container_add (GTK_CONTAINER (notebook), demos_table);
+  gtk_container_set_border_width (GTK_CONTAINER (demos_table), 10);
+
+  blanking_table = gtk_table_new (3, 4, FALSE);
+  gtk_widget_set_name (blanking_table, "blanking_table");
+  gtk_widget_ref (blanking_table);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "blanking_table", blanking_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (blanking_table);
+  gtk_table_attach (GTK_TABLE (demos_table), blanking_table, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_table_set_row_spacings (GTK_TABLE (blanking_table), 2);
+
+  cycle_label = gtk_label_new ("Cycle After");
+  gtk_widget_set_name (cycle_label, "cycle_label");
+  gtk_widget_ref (cycle_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cycle_label", cycle_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cycle_label);
+  gtk_table_attach (GTK_TABLE (blanking_table), cycle_label, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (cycle_label), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (cycle_label), 1, 0.5);
+  gtk_misc_set_padding (GTK_MISC (cycle_label), 8, 0);
+
+  lock_button_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (lock_button_eventbox, "lock_button_eventbox");
+  gtk_widget_ref (lock_button_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_button_eventbox", lock_button_eventbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (lock_button_eventbox);
+  gtk_table_attach (GTK_TABLE (blanking_table), lock_button_eventbox, 0, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, lock_button_eventbox, "Whether a password should be required to un-blank the screen.", NULL);
+
+  lock_button = gtk_check_button_new_with_label ("Lock Screen After");
+  gtk_widget_set_name (lock_button, "lock_button");
+  gtk_widget_ref (lock_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_button", lock_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (lock_button);
+  gtk_container_add (GTK_CONTAINER (lock_button_eventbox), lock_button);
+
+  timeout_label = gtk_label_new ("Blank After");
+  gtk_widget_set_name (timeout_label, "timeout_label");
+  gtk_widget_ref (timeout_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "timeout_label", timeout_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (timeout_label);
+  gtk_table_attach (GTK_TABLE (blanking_table), timeout_label, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (timeout_label), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (timeout_label), 1, 0.5);
+  gtk_misc_set_padding (GTK_MISC (timeout_label), 8, 0);
+
+  timeout_spinbutton_adj = gtk_adjustment_new (0, 1, 720, 1, 30, 30);
+  timeout_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (timeout_spinbutton_adj), 15, 0);
+  gtk_widget_set_name (timeout_spinbutton, "timeout_spinbutton");
+  gtk_widget_ref (timeout_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "timeout_spinbutton", timeout_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (timeout_spinbutton);
+  gtk_table_attach (GTK_TABLE (blanking_table), timeout_spinbutton, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, timeout_spinbutton, "How long before the monitor goes completely black.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (timeout_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (timeout_spinbutton), TRUE);
+
+  timeout_mlabel = gtk_label_new ("minutes");
+  gtk_widget_set_name (timeout_mlabel, "timeout_mlabel");
+  gtk_widget_ref (timeout_mlabel);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "timeout_mlabel", timeout_mlabel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (timeout_mlabel);
+  gtk_table_attach (GTK_TABLE (blanking_table), timeout_mlabel, 3, 4, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (timeout_mlabel), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (timeout_mlabel), 0, 0.5);
+
+  cycle_mlabel = gtk_label_new ("minutes");
+  gtk_widget_set_name (cycle_mlabel, "cycle_mlabel");
+  gtk_widget_ref (cycle_mlabel);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cycle_mlabel", cycle_mlabel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cycle_mlabel);
+  gtk_table_attach (GTK_TABLE (blanking_table), cycle_mlabel, 3, 4, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (cycle_mlabel), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (cycle_mlabel), 0, 0.5);
+
+  lock_mlabel = gtk_label_new ("minutes");
+  gtk_widget_set_name (lock_mlabel, "lock_mlabel");
+  gtk_widget_ref (lock_mlabel);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_mlabel", lock_mlabel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (lock_mlabel);
+  gtk_table_attach (GTK_TABLE (blanking_table), lock_mlabel, 3, 4, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (lock_mlabel), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (lock_mlabel), 0, 0.5);
+
+  lock_spinbutton_adj = gtk_adjustment_new (0, 0, 720, 1, 30, 30);
+  lock_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (lock_spinbutton_adj), 15, 0);
+  gtk_widget_set_name (lock_spinbutton, "lock_spinbutton");
+  gtk_widget_ref (lock_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_spinbutton", lock_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (lock_spinbutton);
+  gtk_table_attach (GTK_TABLE (blanking_table), lock_spinbutton, 2, 3, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 10);
+  gtk_tooltips_set_tip (tooltips, lock_spinbutton, "How long before the monitor goes completely black.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (lock_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (lock_spinbutton), TRUE);
+
+  cycle_spinbutton_adj = gtk_adjustment_new (0, 1, 720, 1, 30, 30);
+  cycle_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (cycle_spinbutton_adj), 15, 0);
+  gtk_widget_set_name (cycle_spinbutton, "cycle_spinbutton");
+  gtk_widget_ref (cycle_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cycle_spinbutton", cycle_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cycle_spinbutton);
+  gtk_table_attach (GTK_TABLE (blanking_table), cycle_spinbutton, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, cycle_spinbutton, "How long before the monitor goes completely black.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (cycle_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (cycle_spinbutton), TRUE);
+
+  demo_manual_hbbox = gtk_hbutton_box_new ();
+  gtk_widget_set_name (demo_manual_hbbox, "demo_manual_hbbox");
+  gtk_widget_ref (demo_manual_hbbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demo_manual_hbbox", demo_manual_hbbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (demo_manual_hbbox);
+  gtk_table_attach (GTK_TABLE (demos_table), demo_manual_hbbox, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (demo_manual_hbbox), GTK_BUTTONBOX_SPREAD);
+
+  demo = gtk_button_new_with_label ("Preview");
+  gtk_widget_set_name (demo, "demo");
+  gtk_widget_ref (demo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demo", demo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (demo);
+  gtk_container_add (GTK_CONTAINER (demo_manual_hbbox), demo);
+  GTK_WIDGET_SET_FLAGS (demo, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, demo, "Demo the selected screen saver in full-screen mode (click the mouse to return.)", NULL);
+
+  settings = gtk_button_new_with_label ("Settings...");
+  gtk_widget_set_name (settings, "settings");
+  gtk_widget_ref (settings);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "settings", settings,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (demos_hbox);
-  gtk_container_add (GTK_CONTAINER (notebook), demos_hbox);
+  gtk_widget_show (settings);
+  gtk_container_add (GTK_CONTAINER (demo_manual_hbbox), settings);
+  GTK_WIDGET_SET_FLAGS (settings, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, settings, "Customization and explanation of the selected screen saver.", NULL);
 
-  list_vbox = gtk_vbox_new (FALSE, 5);
+  list_vbox = gtk_vbox_new (FALSE, 0);
   gtk_widget_set_name (list_vbox, "list_vbox");
   gtk_widget_ref (list_vbox);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "list_vbox", list_vbox,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (list_vbox);
-  gtk_box_pack_start (GTK_BOX (demos_hbox), list_vbox, FALSE, FALSE, 0);
+  gtk_table_attach (GTK_TABLE (demos_table), list_vbox, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
   gtk_container_set_border_width (GTK_CONTAINER (list_vbox), 10);
 
+  mode_hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (mode_hbox, "mode_hbox");
+  gtk_widget_ref (mode_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "mode_hbox", mode_hbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (mode_hbox);
+  gtk_box_pack_start (GTK_BOX (list_vbox), mode_hbox, FALSE, TRUE, 10);
+
+  mode_label = gtk_label_new ("Mode:");
+  gtk_widget_set_name (mode_label, "mode_label");
+  gtk_widget_ref (mode_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "mode_label", mode_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (mode_label);
+  gtk_box_pack_start (GTK_BOX (mode_hbox), mode_label, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (mode_label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (mode_label), 0, 0.5);
+
+  mode_menu = gtk_option_menu_new ();
+  gtk_widget_set_name (mode_menu, "mode_menu");
+  gtk_widget_ref (mode_menu);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "mode_menu", mode_menu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (mode_menu);
+  gtk_box_pack_start (GTK_BOX (mode_hbox), mode_menu, FALSE, FALSE, 4);
+  mode_menu_menu = gtk_menu_new ();
+  glade_menuitem = gtk_menu_item_new_with_label ("Disable Screen Saver");
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (mode_menu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label ("Blank Screen Only");
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (mode_menu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label ("Only One Screen Saver");
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (mode_menu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label ("Random Screen Saver");
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (mode_menu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (mode_menu), mode_menu_menu);
+  gtk_option_menu_set_history (GTK_OPTION_MENU (mode_menu), 3);
+
+  col_head_hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (col_head_hbox, "col_head_hbox");
+  gtk_widget_ref (col_head_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "col_head_hbox", col_head_hbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (col_head_hbox);
+  gtk_box_pack_start (GTK_BOX (list_vbox), col_head_hbox, FALSE, TRUE, 0);
+
+  use_col_frame = gtk_frame_new (NULL);
+  gtk_widget_set_name (use_col_frame, "use_col_frame");
+  gtk_widget_ref (use_col_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "use_col_frame", use_col_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (use_col_frame);
+  gtk_box_pack_start (GTK_BOX (col_head_hbox), use_col_frame, FALSE, FALSE, 0);
+  gtk_frame_set_shadow_type (GTK_FRAME (use_col_frame), GTK_SHADOW_OUT);
+
+  use_label = gtk_label_new ("Use");
+  gtk_widget_set_name (use_label, "use_label");
+  gtk_widget_ref (use_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "use_label", use_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (use_label);
+  gtk_container_add (GTK_CONTAINER (use_col_frame), use_label);
+  gtk_label_set_justify (GTK_LABEL (use_label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (use_label), 0, 0.5);
+  gtk_misc_set_padding (GTK_MISC (use_label), 3, 0);
+
+  saver_col_frame = gtk_frame_new (NULL);
+  gtk_widget_set_name (saver_col_frame, "saver_col_frame");
+  gtk_widget_ref (saver_col_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "saver_col_frame", saver_col_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (saver_col_frame);
+  gtk_box_pack_start (GTK_BOX (col_head_hbox), saver_col_frame, TRUE, TRUE, 0);
+  gtk_frame_set_shadow_type (GTK_FRAME (saver_col_frame), GTK_SHADOW_OUT);
+
+  saver_label = gtk_label_new ("Screen Saver");
+  gtk_widget_set_name (saver_label, "saver_label");
+  gtk_widget_ref (saver_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "saver_label", saver_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (saver_label);
+  gtk_container_add (GTK_CONTAINER (saver_col_frame), saver_label);
+  gtk_label_set_justify (GTK_LABEL (saver_label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (saver_label), 0, 0.5);
+  gtk_misc_set_padding (GTK_MISC (saver_label), 6, 0);
+
   scroller = gtk_scrolled_window_new (NULL, NULL);
   gtk_widget_set_name (scroller, "scroller");
   gtk_widget_ref (scroller);
@@ -413,7 +625,7 @@ create_xscreensaver_demo (void)
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "centering_hbox", centering_hbox,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (centering_hbox);
-  gtk_box_pack_start (GTK_BOX (list_vbox), centering_hbox, FALSE, TRUE, 0);
+  gtk_box_pack_end (GTK_BOX (list_vbox), centering_hbox, FALSE, TRUE, 0);
 
   next_prev_hbox = gtk_hbox_new (FALSE, 0);
   gtk_widget_set_name (next_prev_hbox, "next_prev_hbox");
@@ -431,7 +643,7 @@ create_xscreensaver_demo (void)
   gtk_widget_show (next);
   gtk_box_pack_start (GTK_BOX (next_prev_hbox), next, FALSE, FALSE, 0);
   GTK_WIDGET_SET_FLAGS (next, GTK_CAN_DEFAULT);
-  gtk_tooltips_set_tip (tooltips, next, "Run the next demo in this list in full-screen mode (click the mouse to return.)", NULL);
+  gtk_tooltips_set_tip (tooltips, next, "Run the next screen saver in the list in full-screen mode (click the mouse to return.)", NULL);
 
   prev = gtk_button_new_with_label ("/\\");
   gtk_widget_set_name (prev, "prev");
@@ -441,162 +653,36 @@ create_xscreensaver_demo (void)
   gtk_widget_show (prev);
   gtk_box_pack_start (GTK_BOX (next_prev_hbox), prev, FALSE, FALSE, 0);
   GTK_WIDGET_SET_FLAGS (prev, GTK_CAN_DEFAULT);
-  gtk_tooltips_set_tip (tooltips, prev, "Run the previous demo in this list in full-screen mode (click the mouse to return.)", NULL);
-
-  opts_vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_set_name (opts_vbox, "opts_vbox");
-  gtk_widget_ref (opts_vbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "opts_vbox", opts_vbox,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (opts_vbox);
-  gtk_box_pack_start (GTK_BOX (demos_hbox), opts_vbox, TRUE, TRUE, 0);
-  gtk_container_set_border_width (GTK_CONTAINER (opts_vbox), 10);
-
-  frame = gtk_frame_new (NULL);
-  gtk_widget_set_name (frame, "frame");
-  gtk_widget_ref (frame);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "frame", frame,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (frame);
-  gtk_box_pack_start (GTK_BOX (opts_vbox), frame, TRUE, TRUE, 0);
-
-  doc = gtk_label_new ("");
-  gtk_widget_set_name (doc, "doc");
-  gtk_widget_ref (doc);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "doc", doc,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (doc);
-  gtk_container_add (GTK_CONTAINER (frame), doc);
-  gtk_label_set_justify (GTK_LABEL (doc), GTK_JUSTIFY_LEFT);
-  gtk_label_set_line_wrap (GTK_LABEL (doc), TRUE);
-  gtk_misc_set_alignment (GTK_MISC (doc), 0, 0);
-  gtk_misc_set_padding (GTK_MISC (doc), 10, 10);
-
-  opts_vbox2 = gtk_vbox_new (FALSE, 2);
-  gtk_widget_set_name (opts_vbox2, "opts_vbox2");
-  gtk_widget_ref (opts_vbox2);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "opts_vbox2", opts_vbox2,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (opts_vbox2);
-  gtk_box_pack_start (GTK_BOX (opts_vbox), opts_vbox2, FALSE, TRUE, 0);
-
-  cmd_label = gtk_label_new ("Command Line:");
-  gtk_widget_set_name (cmd_label, "cmd_label");
-  gtk_widget_ref (cmd_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmd_label", cmd_label,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cmd_label);
-  gtk_box_pack_start (GTK_BOX (opts_vbox2), cmd_label, FALSE, FALSE, 0);
-  gtk_label_set_justify (GTK_LABEL (cmd_label), GTK_JUSTIFY_LEFT);
-  gtk_misc_set_alignment (GTK_MISC (cmd_label), 0, 1);
-  gtk_misc_set_padding (GTK_MISC (cmd_label), 0, 2);
-
-  cmd_text = gtk_entry_new ();
-  gtk_widget_set_name (cmd_text, "cmd_text");
-  gtk_widget_ref (cmd_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmd_text", cmd_text,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cmd_text);
-  gtk_box_pack_start (GTK_BOX (opts_vbox2), cmd_text, FALSE, TRUE, 0);
-
-  opts_hbox3 = gtk_hbox_new (FALSE, 0);
-  gtk_widget_set_name (opts_hbox3, "opts_hbox3");
-  gtk_widget_ref (opts_hbox3);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "opts_hbox3", opts_hbox3,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (opts_hbox3);
-  gtk_box_pack_start (GTK_BOX (opts_vbox2), opts_hbox3, FALSE, TRUE, 4);
-  gtk_container_set_border_width (GTK_CONTAINER (opts_hbox3), 4);
-
-  enabled = gtk_check_button_new_with_label ("Enabled");
-  gtk_widget_set_name (enabled, "enabled");
-  gtk_widget_ref (enabled);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "enabled", enabled,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (enabled);
-  gtk_box_pack_start (GTK_BOX (opts_hbox3), enabled, FALSE, FALSE, 0);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enabled), TRUE);
-
-  visual = gtk_label_new ("Visual:");
-  gtk_widget_set_name (visual, "visual");
-  gtk_widget_ref (visual);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "visual", visual,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (visual);
-  gtk_box_pack_start (GTK_BOX (opts_hbox3), visual, FALSE, FALSE, 0);
-  gtk_label_set_justify (GTK_LABEL (visual), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (visual), 1, 0.5);
-  gtk_misc_set_padding (GTK_MISC (visual), 10, 0);
-
-  visual_combo = gtk_combo_new ();
-  gtk_widget_set_name (visual_combo, "visual_combo");
-  gtk_widget_ref (visual_combo);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "visual_combo", visual_combo,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (visual_combo);
-  gtk_box_pack_start (GTK_BOX (opts_hbox3), visual_combo, FALSE, FALSE, 0);
-  visual_combo_items = g_list_append (visual_combo_items, "Any");
-  visual_combo_items = g_list_append (visual_combo_items, "Best");
-  visual_combo_items = g_list_append (visual_combo_items, "Default");
-  visual_combo_items = g_list_append (visual_combo_items, "Default-N");
-  visual_combo_items = g_list_append (visual_combo_items, "GL");
-  visual_combo_items = g_list_append (visual_combo_items, "TrueColor");
-  visual_combo_items = g_list_append (visual_combo_items, "PseudoColor");
-  visual_combo_items = g_list_append (visual_combo_items, "StaticGray");
-  visual_combo_items = g_list_append (visual_combo_items, "GrayScale");
-  visual_combo_items = g_list_append (visual_combo_items, "DirectColor");
-  visual_combo_items = g_list_append (visual_combo_items, "Color");
-  visual_combo_items = g_list_append (visual_combo_items, "Gray");
-  visual_combo_items = g_list_append (visual_combo_items, "Mono");
-  gtk_combo_set_popdown_strings (GTK_COMBO (visual_combo), visual_combo_items);
-  g_list_free (visual_combo_items);
-
-  combo_entry1 = GTK_COMBO (visual_combo)->entry;
-  gtk_widget_set_name (combo_entry1, "combo_entry1");
-  gtk_widget_ref (combo_entry1);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "combo_entry1", combo_entry1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (combo_entry1);
-  gtk_tooltips_set_tip (tooltips, combo_entry1, "The X visual type that this demo will require.  If that visual is available it will be used, otherwise, this demo will not be run.", NULL);
-  gtk_entry_set_text (GTK_ENTRY (combo_entry1), "Any");
+  gtk_tooltips_set_tip (tooltips, prev, "Run the previous screen saver in the list in full-screen mode (click the mouse to return.)", NULL);
 
-  demo_hline = gtk_hseparator_new ();
-  gtk_widget_set_name (demo_hline, "demo_hline");
-  gtk_widget_ref (demo_hline);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demo_hline", demo_hline,
+  preview_frame = gtk_frame_new ("Description");
+  gtk_widget_set_name (preview_frame, "preview_frame");
+  gtk_widget_ref (preview_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "preview_frame", preview_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (demo_hline);
-  gtk_box_pack_start (GTK_BOX (opts_vbox), demo_hline, FALSE, FALSE, 5);
+  gtk_widget_show (preview_frame);
+  gtk_table_attach (GTK_TABLE (demos_table), preview_frame, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 6);
 
-  demo_manual_hbox = gtk_hbutton_box_new ();
-  gtk_widget_set_name (demo_manual_hbox, "demo_manual_hbox");
-  gtk_widget_ref (demo_manual_hbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demo_manual_hbox", demo_manual_hbox,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (demo_manual_hbox);
-  gtk_box_pack_start (GTK_BOX (opts_vbox), demo_manual_hbox, FALSE, TRUE, 0);
-
-  demo = gtk_button_new_with_label ("Demo");
-  gtk_widget_set_name (demo, "demo");
-  gtk_widget_ref (demo);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demo", demo,
+  preview_aspectframe = gtk_aspect_frame_new (NULL, 0.5, 0.5, 1.33, FALSE);
+  gtk_widget_set_name (preview_aspectframe, "preview_aspectframe");
+  gtk_widget_ref (preview_aspectframe);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "preview_aspectframe", preview_aspectframe,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (demo);
-  gtk_container_add (GTK_CONTAINER (demo_manual_hbox), demo);
-  GTK_WIDGET_SET_FLAGS (demo, GTK_CAN_DEFAULT);
-  gtk_tooltips_set_tip (tooltips, demo, "Run this one in full-screen mode (click the mouse to return.)", NULL);
+  gtk_widget_show (preview_aspectframe);
+  gtk_container_add (GTK_CONTAINER (preview_frame), preview_aspectframe);
+  gtk_container_set_border_width (GTK_CONTAINER (preview_aspectframe), 8);
 
-  manual = gtk_button_new_with_label ("Documentation...");
-  gtk_widget_set_name (manual, "manual");
-  gtk_widget_ref (manual);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "manual", manual,
+  preview = gtk_drawing_area_new ();
+  gtk_widget_set_name (preview, "preview");
+  gtk_widget_ref (preview);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "preview", preview,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (manual);
-  gtk_container_add (GTK_CONTAINER (demo_manual_hbox), manual);
-  GTK_WIDGET_SET_FLAGS (manual, GTK_CAN_DEFAULT);
-  gtk_tooltips_set_tip (tooltips, manual, "Click here to read the manual for this display mode, if it has one.", NULL);
+  gtk_widget_show (preview);
+  gtk_container_add (GTK_CONTAINER (preview_aspectframe), preview);
 
-  demo_tab = gtk_label_new ("Graphics Demos");
+  demo_tab = gtk_label_new ("Display Modes");
   gtk_widget_set_name (demo_tab, "demo_tab");
   gtk_widget_ref (demo_tab);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "demo_tab", demo_tab,
@@ -604,209 +690,139 @@ create_xscreensaver_demo (void)
   gtk_widget_show (demo_tab);
   gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0), demo_tab);
 
-  options_vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_set_name (options_vbox, "options_vbox");
-  gtk_widget_ref (options_vbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "options_vbox", options_vbox,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (options_vbox);
-  gtk_container_add (GTK_CONTAINER (notebook), options_vbox);
-
-  options_table = gtk_table_new (1, 2, TRUE);
+  options_table = gtk_table_new (2, 2, TRUE);
   gtk_widget_set_name (options_table, "options_table");
   gtk_widget_ref (options_table);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "options_table", options_table,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (options_table);
-  gtk_box_pack_start (GTK_BOX (options_vbox), options_table, FALSE, FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (notebook), options_table);
 
-  options_table_2 = gtk_table_new (2, 1, FALSE);
-  gtk_widget_set_name (options_table_2, "options_table_2");
-  gtk_widget_ref (options_table_2);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "options_table_2", options_table_2,
+  diag_frame = gtk_frame_new ("Diagnostics");
+  gtk_widget_set_name (diag_frame, "diag_frame");
+  gtk_widget_ref (diag_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "diag_frame", diag_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (options_table_2);
-  gtk_table_attach (GTK_TABLE (options_table), options_table_2, 1, 2, 0, 1,
+  gtk_widget_show (diag_frame);
+  gtk_table_attach (GTK_TABLE (options_table), diag_frame, 0, 1, 1, 2,
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (diag_frame), 10);
 
-  dpms_frame = gtk_frame_new ("Display Power Management:");
-  gtk_widget_set_name (dpms_frame, "dpms_frame");
-  gtk_widget_ref (dpms_frame);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_frame", dpms_frame,
+  diag_hbox = gtk_hbox_new (FALSE, 8);
+  gtk_widget_set_name (diag_hbox, "diag_hbox");
+  gtk_widget_ref (diag_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "diag_hbox", diag_hbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_frame);
-  gtk_table_attach (GTK_TABLE (options_table_2), dpms_frame, 0, 1, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_container_set_border_width (GTK_CONTAINER (dpms_frame), 10);
+  gtk_widget_show (diag_hbox);
+  gtk_container_add (GTK_CONTAINER (diag_frame), diag_hbox);
+  gtk_container_set_border_width (GTK_CONTAINER (diag_hbox), 8);
 
-  dpms_table = gtk_table_new (4, 3, FALSE);
-  gtk_widget_set_name (dpms_table, "dpms_table");
-  gtk_widget_ref (dpms_table);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_table", dpms_table,
+  diag_logo = create_pixmap (xscreensaver_demo, "screensaver-diagnostic.xpm");
+  gtk_widget_set_name (diag_logo, "diag_logo");
+  gtk_widget_ref (diag_logo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "diag_logo", diag_logo,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_table);
-  gtk_container_add (GTK_CONTAINER (dpms_frame), dpms_table);
-  gtk_container_set_border_width (GTK_CONTAINER (dpms_table), 10);
-  gtk_table_set_row_spacings (GTK_TABLE (dpms_table), 2);
-  gtk_table_set_col_spacings (GTK_TABLE (dpms_table), 10);
+  gtk_widget_show (diag_logo);
+  gtk_box_pack_start (GTK_BOX (diag_hbox), diag_logo, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (diag_logo), 0.5, 0);
 
-  dpms_off_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (dpms_off_text, "dpms_off_text");
-  gtk_widget_ref (dpms_off_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_off_text", dpms_off_text,
+  diag_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (diag_vbox, "diag_vbox");
+  gtk_widget_ref (diag_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "diag_vbox", diag_vbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_off_text);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_off_text, 1, 2, 3, 4,
-                    (GtkAttachOptions) (0),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, dpms_off_text, "How long until the monitor powers down (if Power Management is enabled).", NULL);
+  gtk_widget_show (diag_vbox);
+  gtk_box_pack_start (GTK_BOX (diag_hbox), diag_vbox, TRUE, TRUE, 0);
 
-  dpms_suspend_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (dpms_suspend_text, "dpms_suspend_text");
-  gtk_widget_ref (dpms_suspend_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_suspend_text", dpms_suspend_text,
+  verbose_button_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (verbose_button_eventbox, "verbose_button_eventbox");
+  gtk_widget_ref (verbose_button_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "verbose_button_eventbox", verbose_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_suspend_text);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_suspend_text, 1, 2, 2, 3,
-                    (GtkAttachOptions) (0),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, dpms_suspend_text, "How long until the monitor goes into power-saving mode (if Power Management is enabled).", NULL);
+  gtk_widget_show (verbose_button_eventbox);
+  gtk_box_pack_start (GTK_BOX (diag_vbox), verbose_button_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, verbose_button_eventbox, "Whether the daemon should print lots of debugging information.", NULL);
 
-  dpms_standby_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (dpms_standby_text, "dpms_standby_text");
-  gtk_widget_ref (dpms_standby_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_standby_text", dpms_standby_text,
+  verbose_button = gtk_check_button_new_with_label ("Verbose Diagnostics");
+  gtk_widget_set_name (verbose_button, "verbose_button");
+  gtk_widget_ref (verbose_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "verbose_button", verbose_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_standby_text);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_standby_text, 1, 2, 1, 2,
-                    (GtkAttachOptions) (0),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, dpms_standby_text, "How long before the monitor goes completely black (if Power Management is enabled).", NULL);
-
-  dpms_standby_label = gtk_label_new ("Standby After:");
-  gtk_widget_set_name (dpms_standby_label, "dpms_standby_label");
-  gtk_widget_ref (dpms_standby_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_standby_label", dpms_standby_label,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_standby_label);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_standby_label, 0, 1, 1, 2,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (dpms_standby_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (dpms_standby_label), 1, 0.5);
-
-  dpms_off_label = gtk_label_new ("Off After:");
-  gtk_widget_set_name (dpms_off_label, "dpms_off_label");
-  gtk_widget_ref (dpms_off_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_off_label", dpms_off_label,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_off_label);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_off_label, 0, 1, 3, 4,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (dpms_off_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (dpms_off_label), 1, 0.5);
+  gtk_widget_show (verbose_button);
+  gtk_container_add (GTK_CONTAINER (verbose_button_eventbox), verbose_button);
 
-  dpms_suspend_label = gtk_label_new ("Suspend After:");
-  gtk_widget_set_name (dpms_suspend_label, "dpms_suspend_label");
-  gtk_widget_ref (dpms_suspend_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_suspend_label", dpms_suspend_label,
+  capture_button_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (capture_button_eventbox, "capture_button_eventbox");
+  gtk_widget_ref (capture_button_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "capture_button_eventbox", capture_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_suspend_label);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_suspend_label, 0, 1, 2, 3,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (dpms_suspend_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (dpms_suspend_label), 1, 0.5);
+  gtk_widget_show (capture_button_eventbox);
+  gtk_box_pack_start (GTK_BOX (diag_vbox), capture_button_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, capture_button_eventbox, "Whether any error output of the display modes should be redirected to the screen.", NULL);
 
-  dpms_dummy = gtk_label_new ("");
-  gtk_widget_set_name (dpms_dummy, "dpms_dummy");
-  gtk_widget_ref (dpms_dummy);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_dummy", dpms_dummy,
+  capture_button = gtk_check_button_new_with_label ("Display Subprocess Errors");
+  gtk_widget_set_name (capture_button, "capture_button");
+  gtk_widget_ref (capture_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "capture_button", capture_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_dummy);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_dummy, 2, 3, 3, 4,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (dpms_dummy), GTK_JUSTIFY_LEFT);
+  gtk_widget_show (capture_button);
+  gtk_container_add (GTK_CONTAINER (capture_button_eventbox), capture_button);
 
-  dpms_button_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (dpms_button_eventbox, "dpms_button_eventbox");
-  gtk_widget_ref (dpms_button_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_button_eventbox", dpms_button_eventbox,
+  splash_button_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (splash_button_eventbox, "splash_button_eventbox");
+  gtk_widget_ref (splash_button_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "splash_button_eventbox", splash_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_button_eventbox);
-  gtk_table_attach (GTK_TABLE (dpms_table), dpms_button_eventbox, 0, 3, 0, 1,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_tooltips_set_tip (tooltips, dpms_button_eventbox, "Whether the monitor should be powered down after a while.", NULL);
+  gtk_widget_show (splash_button_eventbox);
+  gtk_box_pack_start (GTK_BOX (diag_vbox), splash_button_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, splash_button_eventbox, "Whether the splash screen (with the version number and `Help' button) should be momentarily displayed when the daemon first starts up.", NULL);
 
-  dpms_button = gtk_check_button_new_with_label ("Power Management Enabled");
-  gtk_widget_set_name (dpms_button, "dpms_button");
-  gtk_widget_ref (dpms_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_button", dpms_button,
+  splash_button = gtk_check_button_new_with_label ("Display Splash Screen at Startup");
+  gtk_widget_set_name (splash_button, "splash_button");
+  gtk_widget_ref (splash_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "splash_button", splash_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (dpms_button);
-  gtk_container_add (GTK_CONTAINER (dpms_button_eventbox), dpms_button);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dpms_button), TRUE);
+  gtk_widget_show (splash_button);
+  gtk_container_add (GTK_CONTAINER (splash_button_eventbox), splash_button);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (splash_button), TRUE);
 
-  cmap_frame = gtk_frame_new ("Colormaps:");
+  cmap_frame = gtk_frame_new ("Colormaps");
   gtk_widget_set_name (cmap_frame, "cmap_frame");
   gtk_widget_ref (cmap_frame);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_frame", cmap_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (cmap_frame);
-  gtk_table_attach (GTK_TABLE (options_table_2), cmap_frame, 0, 1, 1, 2,
+  gtk_table_attach (GTK_TABLE (options_table), cmap_frame, 1, 2, 1, 2,
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (GTK_FILL), 0, 0);
   gtk_container_set_border_width (GTK_CONTAINER (cmap_frame), 10);
 
-  cmap_table = gtk_table_new (5, 3, FALSE);
-  gtk_widget_set_name (cmap_table, "cmap_table");
-  gtk_widget_ref (cmap_table);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_table", cmap_table,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cmap_table);
-  gtk_container_add (GTK_CONTAINER (cmap_frame), cmap_table);
-  gtk_container_set_border_width (GTK_CONTAINER (cmap_table), 10);
-  gtk_table_set_row_spacings (GTK_TABLE (cmap_table), 2);
-  gtk_table_set_col_spacings (GTK_TABLE (cmap_table), 10);
-
-  fade_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (fade_text, "fade_text");
-  gtk_widget_ref (fade_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_text", fade_text,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (fade_text);
-  gtk_table_attach (GTK_TABLE (cmap_table), fade_text, 1, 2, 4, 5,
-                    (GtkAttachOptions) (0),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, fade_text, "How long it should take for the screen to fade in and out.", NULL);
+  cmap_hbox = gtk_hbox_new (FALSE, 8);
+  gtk_widget_set_name (cmap_hbox, "cmap_hbox");
+  gtk_widget_ref (cmap_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_hbox", cmap_hbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cmap_hbox);
+  gtk_container_add (GTK_CONTAINER (cmap_frame), cmap_hbox);
+  gtk_container_set_border_width (GTK_CONTAINER (cmap_hbox), 8);
 
-  cmap_dummy = gtk_label_new ("");
-  gtk_widget_set_name (cmap_dummy, "cmap_dummy");
-  gtk_widget_ref (cmap_dummy);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_dummy", cmap_dummy,
+  cmap_logo = create_pixmap (xscreensaver_demo, "screensaver-colorselector.xpm");
+  gtk_widget_set_name (cmap_logo, "cmap_logo");
+  gtk_widget_ref (cmap_logo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_logo", cmap_logo,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cmap_dummy);
-  gtk_table_attach (GTK_TABLE (cmap_table), cmap_dummy, 2, 3, 4, 5,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (cmap_dummy), GTK_JUSTIFY_LEFT);
+  gtk_widget_show (cmap_logo);
+  gtk_box_pack_start (GTK_BOX (cmap_hbox), cmap_logo, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (cmap_logo), 0.5, 0);
 
-  fade_label = gtk_label_new ("Fade Duration:");
-  gtk_widget_set_name (fade_label, "fade_label");
-  gtk_widget_ref (fade_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_label", fade_label,
+  cmap_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (cmap_vbox, "cmap_vbox");
+  gtk_widget_ref (cmap_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_vbox", cmap_vbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (fade_label);
-  gtk_table_attach (GTK_TABLE (cmap_table), fade_label, 0, 1, 4, 5,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (fade_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (fade_label), 1, 0.5);
+  gtk_widget_show (cmap_vbox);
+  gtk_box_pack_start (GTK_BOX (cmap_hbox), cmap_vbox, TRUE, TRUE, 0);
 
   install_button_eventbox = gtk_event_box_new ();
   gtk_widget_set_name (install_button_eventbox, "install_button_eventbox");
@@ -814,9 +830,7 @@ create_xscreensaver_demo (void)
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "install_button_eventbox", install_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (install_button_eventbox);
-  gtk_table_attach (GTK_TABLE (cmap_table), install_button_eventbox, 0, 3, 0, 1,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_box_pack_start (GTK_BOX (cmap_vbox), install_button_eventbox, FALSE, FALSE, 0);
   gtk_tooltips_set_tip (tooltips, install_button_eventbox, "Whether to install a private colormap when running in 8-bit mode on the default Visual.", NULL);
 
   install_button = gtk_check_button_new_with_label ("Install Colormap");
@@ -827,15 +841,21 @@ create_xscreensaver_demo (void)
   gtk_widget_show (install_button);
   gtk_container_add (GTK_CONTAINER (install_button_eventbox), install_button);
 
+  cmap_hr = gtk_hseparator_new ();
+  gtk_widget_set_name (cmap_hr, "cmap_hr");
+  gtk_widget_ref (cmap_hr);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_hr", cmap_hr,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cmap_hr);
+  gtk_box_pack_start (GTK_BOX (cmap_vbox), cmap_hr, FALSE, FALSE, 4);
+
   fade_button_eventbox = gtk_event_box_new ();
   gtk_widget_set_name (fade_button_eventbox, "fade_button_eventbox");
   gtk_widget_ref (fade_button_eventbox);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_button_eventbox", fade_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (fade_button_eventbox);
-  gtk_table_attach (GTK_TABLE (cmap_table), fade_button_eventbox, 0, 3, 2, 3,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_box_pack_start (GTK_BOX (cmap_vbox), fade_button_eventbox, FALSE, FALSE, 0);
   gtk_tooltips_set_tip (tooltips, fade_button_eventbox, "Whether the screen should slowly fade to black when the screen saver activates.", NULL);
 
   fade_button = gtk_check_button_new_with_label ("Fade To Black When Blanking");
@@ -852,9 +872,7 @@ create_xscreensaver_demo (void)
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "unfade_button_eventbox", unfade_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (unfade_button_eventbox);
-  gtk_table_attach (GTK_TABLE (cmap_table), unfade_button_eventbox, 0, 3, 3, 4,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_box_pack_start (GTK_BOX (cmap_vbox), unfade_button_eventbox, FALSE, FALSE, 0);
   gtk_tooltips_set_tip (tooltips, unfade_button_eventbox, "Whether the screen should slowly fade in from black when the screen saver deactivates.", NULL);
 
   unfade_button = gtk_check_button_new_with_label ("Fade From Black When Unblanking");
@@ -865,348 +883,361 @@ create_xscreensaver_demo (void)
   gtk_widget_show (unfade_button);
   gtk_container_add (GTK_CONTAINER (unfade_button_eventbox), unfade_button);
 
-  cmap_hr = gtk_hseparator_new ();
-  gtk_widget_set_name (cmap_hr, "cmap_hr");
-  gtk_widget_ref (cmap_hr);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cmap_hr", cmap_hr,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cmap_hr);
-  gtk_table_attach (GTK_TABLE (cmap_table), cmap_hr, 0, 3, 1, 2,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 2);
-
-  options_table_1 = gtk_table_new (3, 1, FALSE);
-  gtk_widget_set_name (options_table_1, "options_table_1");
-  gtk_widget_ref (options_table_1);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "options_table_1", options_table_1,
+  fade_hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (fade_hbox, "fade_hbox");
+  gtk_widget_ref (fade_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_hbox", fade_hbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (options_table_1);
-  gtk_table_attach (GTK_TABLE (options_table), options_table_1, 0, 1, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+  gtk_widget_show (fade_hbox);
+  gtk_box_pack_start (GTK_BOX (cmap_vbox), fade_hbox, FALSE, FALSE, 0);
 
-  grab_frame = gtk_frame_new ("Image Manipulation:");
-  gtk_widget_set_name (grab_frame, "grab_frame");
-  gtk_widget_ref (grab_frame);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_frame", grab_frame,
+  fade_dummy = gtk_label_new ("");
+  gtk_widget_set_name (fade_dummy, "fade_dummy");
+  gtk_widget_ref (fade_dummy);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_dummy", fade_dummy,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_frame);
-  gtk_table_attach (GTK_TABLE (options_table_1), grab_frame, 0, 1, 1, 2,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_container_set_border_width (GTK_CONTAINER (grab_frame), 10);
+  gtk_widget_show (fade_dummy);
+  gtk_box_pack_start (GTK_BOX (fade_hbox), fade_dummy, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (fade_dummy), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_padding (GTK_MISC (fade_dummy), 3, 0);
 
-  grab_table = gtk_table_new (4, 3, FALSE);
-  gtk_widget_set_name (grab_table, "grab_table");
-  gtk_widget_ref (grab_table);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_table", grab_table,
+  fade_label = gtk_label_new ("Fade Duration");
+  gtk_widget_set_name (fade_label, "fade_label");
+  gtk_widget_ref (fade_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_label", fade_label,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_table);
-  gtk_container_add (GTK_CONTAINER (grab_frame), grab_table);
-  gtk_container_set_border_width (GTK_CONTAINER (grab_table), 10);
-
-  grab_image_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (grab_image_eventbox, "grab_image_eventbox");
-  gtk_widget_ref (grab_image_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_image_eventbox", grab_image_eventbox,
+  gtk_widget_show (fade_label);
+  gtk_box_pack_start (GTK_BOX (fade_hbox), fade_label, FALSE, FALSE, 10);
+  gtk_label_set_justify (GTK_LABEL (fade_label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (fade_label), 0, 0.5);
+
+  fade_spinbutton_adj = gtk_adjustment_new (0, 0, 10, 1, 1, 1);
+  fade_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (fade_spinbutton_adj), 1, 0);
+  gtk_widget_set_name (fade_spinbutton, "fade_spinbutton");
+  gtk_widget_ref (fade_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_spinbutton", fade_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (fade_spinbutton);
+  gtk_box_pack_start (GTK_BOX (fade_hbox), fade_spinbutton, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, fade_spinbutton, "How long it should take for the screen to fade in and out.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fade_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (fade_spinbutton), TRUE);
+
+  fade_sec_label = gtk_label_new ("seconds");
+  gtk_widget_set_name (fade_sec_label, "fade_sec_label");
+  gtk_widget_ref (fade_sec_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "fade_sec_label", fade_sec_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (fade_sec_label);
+  gtk_box_pack_start (GTK_BOX (fade_hbox), fade_sec_label, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (fade_sec_label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (fade_sec_label), 0, 0.5);
+
+  dpms_frame = gtk_frame_new ("Display Power Management");
+  gtk_widget_set_name (dpms_frame, "dpms_frame");
+  gtk_widget_ref (dpms_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_frame", dpms_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_image_eventbox);
-  gtk_table_attach (GTK_TABLE (grab_table), grab_image_eventbox, 0, 3, 2, 3,
+  gtk_widget_show (dpms_frame);
+  gtk_table_attach (GTK_TABLE (options_table), dpms_frame, 1, 2, 0, 1,
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_tooltips_set_tip (tooltips, grab_image_eventbox, "Whether the image-manipulating modes should operate on random images loaded from disk.", NULL);
-
-  grab_image_button = gtk_check_button_new_with_label ("Choose Random Image:");
-  gtk_widget_set_name (grab_image_button, "grab_image_button");
-  gtk_widget_ref (grab_image_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_image_button", grab_image_button,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_image_button);
-  gtk_container_add (GTK_CONTAINER (grab_image_eventbox), grab_image_button);
+  gtk_container_set_border_width (GTK_CONTAINER (dpms_frame), 10);
 
-  image_browse_button = gtk_button_new_with_label ("Browse");
-  gtk_widget_set_name (image_browse_button, "image_browse_button");
-  gtk_widget_ref (image_browse_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "image_browse_button", image_browse_button,
+  dpms_hbox = gtk_hbox_new (FALSE, 8);
+  gtk_widget_set_name (dpms_hbox, "dpms_hbox");
+  gtk_widget_ref (dpms_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_hbox", dpms_hbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (image_browse_button);
-  gtk_table_attach (GTK_TABLE (grab_table), image_browse_button, 2, 3, 3, 4,
-                    (GtkAttachOptions) (0),
-                    (GtkAttachOptions) (0), 4, 0);
+  gtk_widget_show (dpms_hbox);
+  gtk_container_add (GTK_CONTAINER (dpms_frame), dpms_hbox);
+  gtk_container_set_border_width (GTK_CONTAINER (dpms_hbox), 8);
 
-  grab_video_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (grab_video_eventbox, "grab_video_eventbox");
-  gtk_widget_ref (grab_video_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_video_eventbox", grab_video_eventbox,
+  dpms_logo = create_pixmap (xscreensaver_demo, "screensaver-power.xpm");
+  gtk_widget_set_name (dpms_logo, "dpms_logo");
+  gtk_widget_ref (dpms_logo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_logo", dpms_logo,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_video_eventbox);
-  gtk_table_attach (GTK_TABLE (grab_table), grab_video_eventbox, 0, 3, 1, 2,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_tooltips_set_tip (tooltips, grab_video_eventbox, "Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one).", NULL);
+  gtk_widget_show (dpms_logo);
+  gtk_box_pack_start (GTK_BOX (dpms_hbox), dpms_logo, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (dpms_logo), 0.5, 0);
 
-  grab_video_button = gtk_check_button_new_with_label ("Grab Video Frames");
-  gtk_widget_set_name (grab_video_button, "grab_video_button");
-  gtk_widget_ref (grab_video_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_video_button", grab_video_button,
+  dpms_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (dpms_vbox, "dpms_vbox");
+  gtk_widget_ref (dpms_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_vbox", dpms_vbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_video_button);
-  gtk_container_add (GTK_CONTAINER (grab_video_eventbox), grab_video_button);
+  gtk_widget_show (dpms_vbox);
+  gtk_box_pack_start (GTK_BOX (dpms_hbox), dpms_vbox, FALSE, FALSE, 0);
 
-  grab_desk_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (grab_desk_eventbox, "grab_desk_eventbox");
-  gtk_widget_ref (grab_desk_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_desk_eventbox", grab_desk_eventbox,
+  dpms_button_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (dpms_button_eventbox, "dpms_button_eventbox");
+  gtk_widget_ref (dpms_button_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_button_eventbox", dpms_button_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_desk_eventbox);
-  gtk_table_attach (GTK_TABLE (grab_table), grab_desk_eventbox, 0, 3, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_tooltips_set_tip (tooltips, grab_desk_eventbox, "Whether the image-manipulating modes should be allowed to operate on an image of your desktop.", NULL);
+  gtk_widget_show (dpms_button_eventbox);
+  gtk_box_pack_start (GTK_BOX (dpms_vbox), dpms_button_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, dpms_button_eventbox, "Whether the monitor should be powered down after a while.", NULL);
 
-  grab_desk_button = gtk_check_button_new_with_label ("Grab Desktop Images");
-  gtk_widget_set_name (grab_desk_button, "grab_desk_button");
-  gtk_widget_ref (grab_desk_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_desk_button", grab_desk_button,
+  dpms_button = gtk_check_button_new_with_label ("Power Management Enabled");
+  gtk_widget_set_name (dpms_button, "dpms_button");
+  gtk_widget_ref (dpms_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_button", dpms_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_desk_button);
-  gtk_container_add (GTK_CONTAINER (grab_desk_eventbox), grab_desk_button);
+  gtk_widget_show (dpms_button);
+  gtk_container_add (GTK_CONTAINER (dpms_button_eventbox), dpms_button);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dpms_button), TRUE);
 
-  grab_dummy = gtk_label_new ("");
-  gtk_widget_set_name (grab_dummy, "grab_dummy");
-  gtk_widget_ref (grab_dummy);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_dummy", grab_dummy,
+  dpms_table = gtk_table_new (3, 3, FALSE);
+  gtk_widget_set_name (dpms_table, "dpms_table");
+  gtk_widget_ref (dpms_table);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_table", dpms_table,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (grab_dummy);
-  gtk_table_attach (GTK_TABLE (grab_table), grab_dummy, 0, 1, 3, 4,
-                    (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
-                    (GtkAttachOptions) (GTK_SHRINK), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (grab_dummy), GTK_JUSTIFY_LEFT);
-  gtk_misc_set_padding (GTK_MISC (grab_dummy), 8, 0);
+  gtk_widget_show (dpms_table);
+  gtk_box_pack_start (GTK_BOX (dpms_vbox), dpms_table, FALSE, FALSE, 0);
+  gtk_table_set_row_spacings (GTK_TABLE (dpms_table), 2);
 
-  image_text = gtk_entry_new ();
-  gtk_widget_set_name (image_text, "image_text");
-  gtk_widget_ref (image_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "image_text", image_text,
+  dpms_standby_spinbutton_adj = gtk_adjustment_new (0, 0, 1440, 1, 30, 30);
+  dpms_standby_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (dpms_standby_spinbutton_adj), 15, 0);
+  gtk_widget_set_name (dpms_standby_spinbutton, "dpms_standby_spinbutton");
+  gtk_widget_ref (dpms_standby_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_standby_spinbutton", dpms_standby_spinbutton,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (image_text);
-  gtk_table_attach (GTK_TABLE (grab_table), image_text, 1, 2, 3, 4,
-                    (GtkAttachOptions) (GTK_SHRINK | GTK_FILL),
+  gtk_widget_show (dpms_standby_spinbutton);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_standby_spinbutton, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, image_text, "The directory from which images will be randomly chosen.", NULL);
+  gtk_tooltips_set_tip (tooltips, dpms_standby_spinbutton, "How long before the monitor goes completely black.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (dpms_standby_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (dpms_standby_spinbutton), TRUE);
 
-  blanking_frame = gtk_frame_new ("Blanking and Locking:");
-  gtk_widget_set_name (blanking_frame, "blanking_frame");
-  gtk_widget_ref (blanking_frame);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "blanking_frame", blanking_frame,
+  dpms_standby_mlabel = gtk_label_new ("minutes");
+  gtk_widget_set_name (dpms_standby_mlabel, "dpms_standby_mlabel");
+  gtk_widget_ref (dpms_standby_mlabel);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_standby_mlabel", dpms_standby_mlabel,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (blanking_frame);
-  gtk_table_attach (GTK_TABLE (options_table_1), blanking_frame, 0, 1, 0, 1,
+  gtk_widget_show (dpms_standby_mlabel);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_standby_mlabel, 2, 3, 0, 1,
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_container_set_border_width (GTK_CONTAINER (blanking_frame), 10);
-
-  blanking_table = gtk_table_new (5, 3, FALSE);
-  gtk_widget_set_name (blanking_table, "blanking_table");
-  gtk_widget_ref (blanking_table);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "blanking_table", blanking_table,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (blanking_table);
-  gtk_container_add (GTK_CONTAINER (blanking_frame), blanking_table);
-  gtk_container_set_border_width (GTK_CONTAINER (blanking_table), 10);
-  gtk_table_set_row_spacings (GTK_TABLE (blanking_table), 2);
-  gtk_table_set_col_spacings (GTK_TABLE (blanking_table), 10);
-
-  lock_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (lock_text, "lock_text");
-  gtk_widget_ref (lock_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_text", lock_text,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (lock_text);
-  gtk_table_attach (GTK_TABLE (blanking_table), lock_text, 1, 2, 4, 5,
-                    (GtkAttachOptions) (0),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, lock_text, "How long after the screen saver has activated until a password will be required (if  `Require Password' is also set.)", NULL);
+  gtk_label_set_justify (GTK_LABEL (dpms_standby_mlabel), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (dpms_standby_mlabel), 0, 0.5);
 
-  cycle_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (cycle_text, "cycle_text");
-  gtk_widget_ref (cycle_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cycle_text", cycle_text,
+  dpms_suspend_mlabel = gtk_label_new ("minutes");
+  gtk_widget_set_name (dpms_suspend_mlabel, "dpms_suspend_mlabel");
+  gtk_widget_ref (dpms_suspend_mlabel);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_suspend_mlabel", dpms_suspend_mlabel,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cycle_text);
-  gtk_table_attach (GTK_TABLE (blanking_table), cycle_text, 1, 2, 1, 2,
-                    (GtkAttachOptions) (0),
+  gtk_widget_show (dpms_suspend_mlabel);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_suspend_mlabel, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, cycle_text, "How long each demo will be run before moving on to another.", NULL);
+  gtk_label_set_justify (GTK_LABEL (dpms_suspend_mlabel), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (dpms_suspend_mlabel), 0, 0.5);
 
-  timeout_text = gtk_entry_new_with_max_length (8);
-  gtk_widget_set_name (timeout_text, "timeout_text");
-  gtk_widget_ref (timeout_text);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "timeout_text", timeout_text,
+  dpms_off_mlabel = gtk_label_new ("minutes");
+  gtk_widget_set_name (dpms_off_mlabel, "dpms_off_mlabel");
+  gtk_widget_ref (dpms_off_mlabel);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_off_mlabel", dpms_off_mlabel,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (timeout_text);
-  gtk_table_attach (GTK_TABLE (blanking_table), timeout_text, 1, 2, 0, 1,
-                    (GtkAttachOptions) (0),
+  gtk_widget_show (dpms_off_mlabel);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_off_mlabel, 2, 3, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, timeout_text, "How long until the screen saver activates and begins running demos.", NULL);
+  gtk_label_set_justify (GTK_LABEL (dpms_off_mlabel), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (dpms_off_mlabel), 0, 0.5);
 
-  timeout_label = gtk_label_new ("Blank After:");
-  gtk_widget_set_name (timeout_label, "timeout_label");
-  gtk_widget_ref (timeout_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "timeout_label", timeout_label,
+  dpms_off_label = gtk_label_new ("Off After");
+  gtk_widget_set_name (dpms_off_label, "dpms_off_label");
+  gtk_widget_ref (dpms_off_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_off_label", dpms_off_label,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (timeout_label);
-  gtk_table_attach (GTK_TABLE (blanking_table), timeout_label, 0, 1, 0, 1,
+  gtk_widget_show (dpms_off_label);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_off_label, 0, 1, 2, 3,
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (timeout_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (timeout_label), 1, 0.5);
+  gtk_label_set_justify (GTK_LABEL (dpms_off_label), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (dpms_off_label), 1, 0.5);
+  gtk_misc_set_padding (GTK_MISC (dpms_off_label), 10, 0);
 
-  cycle_label = gtk_label_new ("Cycle After:");
-  gtk_widget_set_name (cycle_label, "cycle_label");
-  gtk_widget_ref (cycle_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "cycle_label", cycle_label,
+  dpms_suspend_label = gtk_label_new ("Suspend After");
+  gtk_widget_set_name (dpms_suspend_label, "dpms_suspend_label");
+  gtk_widget_ref (dpms_suspend_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_suspend_label", dpms_suspend_label,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (cycle_label);
-  gtk_table_attach (GTK_TABLE (blanking_table), cycle_label, 0, 1, 1, 2,
+  gtk_widget_show (dpms_suspend_label);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_suspend_label, 0, 1, 1, 2,
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (cycle_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (cycle_label), 1, 0.5);
+  gtk_label_set_justify (GTK_LABEL (dpms_suspend_label), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (dpms_suspend_label), 1, 0.5);
+  gtk_misc_set_padding (GTK_MISC (dpms_suspend_label), 10, 0);
 
-  lock_label = gtk_label_new ("Lock After:");
-  gtk_widget_set_name (lock_label, "lock_label");
-  gtk_widget_ref (lock_label);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_label", lock_label,
+  dpms_standby_label = gtk_label_new ("Standby After");
+  gtk_widget_set_name (dpms_standby_label, "dpms_standby_label");
+  gtk_widget_ref (dpms_standby_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_standby_label", dpms_standby_label,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (lock_label);
-  gtk_table_attach (GTK_TABLE (blanking_table), lock_label, 0, 1, 4, 5,
+  gtk_widget_show (dpms_standby_label);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_standby_label, 0, 1, 0, 1,
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (lock_label), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (lock_label), 1, 0.5);
+  gtk_label_set_justify (GTK_LABEL (dpms_standby_label), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (dpms_standby_label), 1, 0.5);
+  gtk_misc_set_padding (GTK_MISC (dpms_standby_label), 10, 0);
 
-  blanking_dummy = gtk_label_new ("");
-  gtk_widget_set_name (blanking_dummy, "blanking_dummy");
-  gtk_widget_ref (blanking_dummy);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "blanking_dummy", blanking_dummy,
+  dpms_suspend_spinbutton_adj = gtk_adjustment_new (0, 0, 1440, 1, 30, 30);
+  dpms_suspend_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (dpms_suspend_spinbutton_adj), 15, 0);
+  gtk_widget_set_name (dpms_suspend_spinbutton, "dpms_suspend_spinbutton");
+  gtk_widget_ref (dpms_suspend_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_suspend_spinbutton", dpms_suspend_spinbutton,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (blanking_dummy);
-  gtk_table_attach (GTK_TABLE (blanking_table), blanking_dummy, 2, 3, 4, 5,
+  gtk_widget_show (dpms_suspend_spinbutton);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_suspend_spinbutton, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, dpms_suspend_spinbutton, "How long until the monitor goes into power-saving mode.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (dpms_suspend_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (dpms_suspend_spinbutton), TRUE);
+
+  dpms_off_spinbutton_adj = gtk_adjustment_new (0, 0, 1440, 1, 30, 30);
+  dpms_off_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (dpms_off_spinbutton_adj), 15, 0);
+  gtk_widget_set_name (dpms_off_spinbutton, "dpms_off_spinbutton");
+  gtk_widget_ref (dpms_off_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "dpms_off_spinbutton", dpms_off_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (dpms_off_spinbutton);
+  gtk_table_attach (GTK_TABLE (dpms_table), dpms_off_spinbutton, 1, 2, 2, 3,
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
-  gtk_label_set_justify (GTK_LABEL (blanking_dummy), GTK_JUSTIFY_LEFT);
+  gtk_tooltips_set_tip (tooltips, dpms_off_spinbutton, "How long until the monitor powers down.", NULL);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (dpms_off_spinbutton), TRUE);
+  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (dpms_off_spinbutton), TRUE);
 
-  lock_button_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (lock_button_eventbox, "lock_button_eventbox");
-  gtk_widget_ref (lock_button_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_button_eventbox", lock_button_eventbox,
+  grab_frame = gtk_frame_new ("Image Manipulation");
+  gtk_widget_set_name (grab_frame, "grab_frame");
+  gtk_widget_ref (grab_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_frame", grab_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (lock_button_eventbox);
-  gtk_table_attach (GTK_TABLE (blanking_table), lock_button_eventbox, 0, 3, 3, 4,
-                    (GtkAttachOptions) (GTK_FILL),
+  gtk_widget_show (grab_frame);
+  gtk_table_attach (GTK_TABLE (options_table), grab_frame, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_tooltips_set_tip (tooltips, lock_button_eventbox, "Whether a password should be required to unblank the screen.", NULL);
+  gtk_container_set_border_width (GTK_CONTAINER (grab_frame), 10);
 
-  lock_button = gtk_check_button_new_with_label ("Require Password");
-  gtk_widget_set_name (lock_button, "lock_button");
-  gtk_widget_ref (lock_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "lock_button", lock_button,
+  grab_hbox = gtk_hbox_new (FALSE, 8);
+  gtk_widget_set_name (grab_hbox, "grab_hbox");
+  gtk_widget_ref (grab_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_hbox", grab_hbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (lock_button);
-  gtk_container_add (GTK_CONTAINER (lock_button_eventbox), lock_button);
+  gtk_widget_show (grab_hbox);
+  gtk_container_add (GTK_CONTAINER (grab_frame), grab_hbox);
+  gtk_container_set_border_width (GTK_CONTAINER (grab_hbox), 8);
 
-  blanking_hr = gtk_hseparator_new ();
-  gtk_widget_set_name (blanking_hr, "blanking_hr");
-  gtk_widget_ref (blanking_hr);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "blanking_hr", blanking_hr,
+  img_logo = create_pixmap (xscreensaver_demo, "screensaver-snap.xpm");
+  gtk_widget_set_name (img_logo, "img_logo");
+  gtk_widget_ref (img_logo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "img_logo", img_logo,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (blanking_hr);
-  gtk_table_attach (GTK_TABLE (blanking_table), blanking_hr, 0, 3, 2, 3,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 2);
+  gtk_widget_show (img_logo);
+  gtk_box_pack_start (GTK_BOX (grab_hbox), img_logo, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (img_logo), 0.5, 0);
 
-  diag_frame = gtk_frame_new ("Diagnostics:");
-  gtk_widget_set_name (diag_frame, "diag_frame");
-  gtk_widget_ref (diag_frame);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "diag_frame", diag_frame,
+  grab_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (grab_vbox, "grab_vbox");
+  gtk_widget_ref (grab_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_vbox", grab_vbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (diag_frame);
-  gtk_table_attach (GTK_TABLE (options_table_1), diag_frame, 0, 1, 2, 3,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (GTK_FILL), 0, 0);
-  gtk_container_set_border_width (GTK_CONTAINER (diag_frame), 10);
+  gtk_widget_show (grab_vbox);
+  gtk_box_pack_start (GTK_BOX (grab_hbox), grab_vbox, TRUE, TRUE, 0);
 
-  diag_table = gtk_table_new (3, 1, FALSE);
-  gtk_widget_set_name (diag_table, "diag_table");
-  gtk_widget_ref (diag_table);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "diag_table", diag_table,
+  grab_desk_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (grab_desk_eventbox, "grab_desk_eventbox");
+  gtk_widget_ref (grab_desk_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_desk_eventbox", grab_desk_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (diag_table);
-  gtk_container_add (GTK_CONTAINER (diag_frame), diag_table);
-  gtk_container_set_border_width (GTK_CONTAINER (diag_table), 10);
-  gtk_table_set_row_spacings (GTK_TABLE (diag_table), 2);
-  gtk_table_set_col_spacings (GTK_TABLE (diag_table), 10);
+  gtk_widget_show (grab_desk_eventbox);
+  gtk_box_pack_start (GTK_BOX (grab_vbox), grab_desk_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, grab_desk_eventbox, "Whether the image-manipulating modes should be allowed to operate on an image of your desktop.", NULL);
 
-  splash_button_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (splash_button_eventbox, "splash_button_eventbox");
-  gtk_widget_ref (splash_button_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "splash_button_eventbox", splash_button_eventbox,
+  grab_desk_button = gtk_check_button_new_with_label ("Grab Desktop Images");
+  gtk_widget_set_name (grab_desk_button, "grab_desk_button");
+  gtk_widget_ref (grab_desk_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_desk_button", grab_desk_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (splash_button_eventbox);
-  gtk_table_attach (GTK_TABLE (diag_table), splash_button_eventbox, 0, 1, 2, 3,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, splash_button_eventbox, "Whether the splash screen (with the version number and `Help' button) should be momentarily displayed when the daemon first starts up.", NULL);
+  gtk_widget_show (grab_desk_button);
+  gtk_container_add (GTK_CONTAINER (grab_desk_eventbox), grab_desk_button);
 
-  splash_button = gtk_check_button_new_with_label ("Display Splash Screen at Startup");
-  gtk_widget_set_name (splash_button, "splash_button");
-  gtk_widget_ref (splash_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "splash_button", splash_button,
+  grab_video_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (grab_video_eventbox, "grab_video_eventbox");
+  gtk_widget_ref (grab_video_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_video_eventbox", grab_video_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (splash_button);
-  gtk_container_add (GTK_CONTAINER (splash_button_eventbox), splash_button);
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (splash_button), TRUE);
+  gtk_widget_show (grab_video_eventbox);
+  gtk_box_pack_start (GTK_BOX (grab_vbox), grab_video_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, grab_video_eventbox, "Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one).", NULL);
 
-  capture_button_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (capture_button_eventbox, "capture_button_eventbox");
-  gtk_widget_ref (capture_button_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "capture_button_eventbox", capture_button_eventbox,
+  grab_video_button = gtk_check_button_new_with_label ("Grab Video Frames");
+  gtk_widget_set_name (grab_video_button, "grab_video_button");
+  gtk_widget_ref (grab_video_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_video_button", grab_video_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (capture_button_eventbox);
-  gtk_table_attach (GTK_TABLE (diag_table), capture_button_eventbox, 0, 1, 1, 2,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, capture_button_eventbox, "Whether the stdout and stderr streams of graphics demos should be displayed on the xscreensaver window.", NULL);
+  gtk_widget_show (grab_video_button);
+  gtk_container_add (GTK_CONTAINER (grab_video_eventbox), grab_video_button);
 
-  capture_button = gtk_check_button_new_with_label ("Display Subprocess Errors");
-  gtk_widget_set_name (capture_button, "capture_button");
-  gtk_widget_ref (capture_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "capture_button", capture_button,
+  grab_image_eventbox = gtk_event_box_new ();
+  gtk_widget_set_name (grab_image_eventbox, "grab_image_eventbox");
+  gtk_widget_ref (grab_image_eventbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_image_eventbox", grab_image_eventbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (capture_button);
-  gtk_container_add (GTK_CONTAINER (capture_button_eventbox), capture_button);
+  gtk_widget_show (grab_image_eventbox);
+  gtk_box_pack_start (GTK_BOX (grab_vbox), grab_image_eventbox, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, grab_image_eventbox, "Whether the image-manipulating modes should operate on random images loaded from disk.", NULL);
 
-  verbose_button_eventbox = gtk_event_box_new ();
-  gtk_widget_set_name (verbose_button_eventbox, "verbose_button_eventbox");
-  gtk_widget_ref (verbose_button_eventbox);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "verbose_button_eventbox", verbose_button_eventbox,
+  grab_image_button = gtk_check_button_new_with_label ("Choose Random Image:");
+  gtk_widget_set_name (grab_image_button, "grab_image_button");
+  gtk_widget_ref (grab_image_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_image_button", grab_image_button,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (verbose_button_eventbox);
-  gtk_table_attach (GTK_TABLE (diag_table), verbose_button_eventbox, 0, 1, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-  gtk_tooltips_set_tip (tooltips, verbose_button_eventbox, "Whether the daemon should print lots of debugging information.", NULL);
+  gtk_widget_show (grab_image_button);
+  gtk_container_add (GTK_CONTAINER (grab_image_eventbox), grab_image_button);
 
-  verbose_button = gtk_check_button_new_with_label ("Verbose Diagnostics");
-  gtk_widget_set_name (verbose_button, "verbose_button");
-  gtk_widget_ref (verbose_button);
-  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "verbose_button", verbose_button,
+  image_hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (image_hbox, "image_hbox");
+  gtk_widget_ref (image_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "image_hbox", image_hbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (verbose_button);
-  gtk_container_add (GTK_CONTAINER (verbose_button_eventbox), verbose_button);
+  gtk_widget_show (image_hbox);
+  gtk_box_pack_start (GTK_BOX (grab_vbox), image_hbox, FALSE, FALSE, 0);
 
-  options_tab = gtk_label_new ("Screensaver Options");
+  grab_dummy = gtk_label_new ("");
+  gtk_widget_set_name (grab_dummy, "grab_dummy");
+  gtk_widget_ref (grab_dummy);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "grab_dummy", grab_dummy,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (grab_dummy);
+  gtk_box_pack_start (GTK_BOX (image_hbox), grab_dummy, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (grab_dummy), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_padding (GTK_MISC (grab_dummy), 8, 0);
+
+  image_text = gtk_entry_new ();
+  gtk_widget_set_name (image_text, "image_text");
+  gtk_widget_ref (image_text);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "image_text", image_text,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (image_text);
+  gtk_box_pack_start (GTK_BOX (image_hbox), image_text, TRUE, TRUE, 0);
+  gtk_tooltips_set_tip (tooltips, image_text, "The directory from which images will be randomly chosen.", NULL);
+
+  image_browse_button = gtk_button_new_with_label ("Browse");
+  gtk_widget_set_name (image_browse_button, "image_browse_button");
+  gtk_widget_ref (image_browse_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "image_browse_button", image_browse_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (image_browse_button);
+  gtk_box_pack_start (GTK_BOX (image_hbox), image_browse_button, FALSE, FALSE, 4);
+
+  options_tab = gtk_label_new ("Advanced");
   gtk_widget_set_name (options_tab, "options_tab");
   gtk_widget_ref (options_tab);
   gtk_object_set_data_full (GTK_OBJECT (xscreensaver_demo), "options_tab", options_tab,
@@ -1229,15 +1260,6 @@ create_xscreensaver_demo (void)
   gtk_signal_connect (GTK_OBJECT (exit_menu), "activate",
                       GTK_SIGNAL_FUNC (exit_menu_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (cut_menu), "activate",
-                      GTK_SIGNAL_FUNC (cut_menu_cb),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (copy_menu), "activate",
-                      GTK_SIGNAL_FUNC (copy_menu_cb),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (paste_menu), "activate",
-                      GTK_SIGNAL_FUNC (paste_menu_cb),
-                      NULL);
   gtk_signal_connect (GTK_OBJECT (about_menu), "activate",
                       GTK_SIGNAL_FUNC (about_menu_cb),
                       NULL);
@@ -1245,48 +1267,57 @@ create_xscreensaver_demo (void)
                       GTK_SIGNAL_FUNC (doc_menu_cb),
                       NULL);
   gtk_signal_connect (GTK_OBJECT (notebook), "switch_page",
-                      GTK_SIGNAL_FUNC (pref_changed_cb),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (next), "clicked",
-                      GTK_SIGNAL_FUNC (run_next_cb),
+                      GTK_SIGNAL_FUNC (switch_page_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (prev), "clicked",
-                      GTK_SIGNAL_FUNC (run_prev_cb),
+  gtk_signal_connect (GTK_OBJECT (lock_button), "toggled",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (enabled), "toggled",
-                      GTK_SIGNAL_FUNC (enabled_cb),
+  gtk_signal_connect (GTK_OBJECT (timeout_spinbutton), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (demo), "clicked",
-                      GTK_SIGNAL_FUNC (run_this_cb),
+  gtk_signal_connect (GTK_OBJECT (timeout_spinbutton), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (manual), "clicked",
-                      GTK_SIGNAL_FUNC (manual_cb),
+  gtk_signal_connect (GTK_OBJECT (timeout_spinbutton), "changed",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_off_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (lock_spinbutton), "activate",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_off_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (lock_spinbutton), "focus_out_event",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_suspend_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (lock_spinbutton), "changed",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_suspend_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (cycle_spinbutton), "activate",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_standby_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (cycle_spinbutton), "focus_out_event",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_standby_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (cycle_spinbutton), "changed",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (dpms_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (demo), "clicked",
+                      GTK_SIGNAL_FUNC (run_this_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (settings), "clicked",
+                      GTK_SIGNAL_FUNC (settings_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (next), "clicked",
+                      GTK_SIGNAL_FUNC (run_next_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (prev), "clicked",
+                      GTK_SIGNAL_FUNC (run_prev_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (verbose_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (fade_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (capture_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (fade_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (splash_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
   gtk_signal_connect (GTK_OBJECT (install_button), "toggled",
@@ -1298,54 +1329,63 @@ create_xscreensaver_demo (void)
   gtk_signal_connect (GTK_OBJECT (unfade_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (grab_image_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (fade_spinbutton), "activate",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (image_browse_button), "clicked",
-                      GTK_SIGNAL_FUNC (browse_image_dir_cb),
+  gtk_signal_connect (GTK_OBJECT (fade_spinbutton), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (grab_video_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (fade_spinbutton), "changed",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (grab_desk_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (dpms_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (image_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (dpms_standby_spinbutton), "activate",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (image_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (dpms_standby_spinbutton), "focus_out_event",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (lock_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (dpms_standby_spinbutton), "changed",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (lock_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (dpms_suspend_spinbutton), "activate",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (cycle_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (dpms_suspend_spinbutton), "focus_out_event",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (cycle_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (dpms_suspend_spinbutton), "changed",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (timeout_text), "activate",
+  gtk_signal_connect (GTK_OBJECT (dpms_off_spinbutton), "activate",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (timeout_text), "focus_out_event",
+  gtk_signal_connect (GTK_OBJECT (dpms_off_spinbutton), "focus_out_event",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (lock_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (dpms_off_spinbutton), "changed",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (splash_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (grab_desk_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (capture_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (grab_video_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
-  gtk_signal_connect (GTK_OBJECT (verbose_button), "toggled",
+  gtk_signal_connect (GTK_OBJECT (grab_image_button), "toggled",
                       GTK_SIGNAL_FUNC (pref_changed_cb),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (image_text), "activate",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (image_text), "focus_out_event",
+                      GTK_SIGNAL_FUNC (pref_changed_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (image_browse_button), "clicked",
+                      GTK_SIGNAL_FUNC (browse_image_dir_cb),
+                      NULL);
 
   gtk_widget_grab_default (next);
   gtk_object_set_data (GTK_OBJECT (xscreensaver_demo), "tooltips", tooltips);
@@ -1355,3 +1395,350 @@ create_xscreensaver_demo (void)
   return xscreensaver_demo;
 }
 
+GtkWidget*
+create_xscreensaver_settings_dialog (void)
+{
+  GtkWidget *xscreensaver_settings_dialog;
+  GtkWidget *dialog_vbox;
+  GtkWidget *dialog_top_table;
+  GtkWidget *opt_frame;
+  GtkWidget *opt_notebook;
+  GtkWidget *settings_vbox;
+  GtkWidget *std_label;
+  GtkWidget *opt_table;
+  GtkWidget *cmd_logo;
+  GtkWidget *visual_hbox;
+  GtkWidget *visual;
+  GtkWidget *visual_combo;
+  GList *visual_combo_items = NULL;
+  GtkWidget *combo_entry1;
+  GtkWidget *cmd_label;
+  GtkWidget *cmd_text;
+  GtkWidget *adv_label;
+  GtkWidget *doc_frame;
+  GtkWidget *doc_vbox;
+  GtkWidget *doc;
+  GtkWidget *doc_hbuttonbox;
+  GtkWidget *manual;
+  GtkWidget *dialog_action_area;
+  GtkWidget *actionarea_hbox;
+  GtkWidget *dialog_hbuttonbox;
+  GtkWidget *adv_button;
+  GtkWidget *std_button;
+  GtkWidget *ok_cancel_hbuttonbox;
+  GtkWidget *ok_button;
+  GtkWidget *cancel_button;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  xscreensaver_settings_dialog = gtk_dialog_new ();
+  gtk_widget_set_name (xscreensaver_settings_dialog, "xscreensaver_settings_dialog");
+  gtk_object_set_data (GTK_OBJECT (xscreensaver_settings_dialog), "xscreensaver_settings_dialog", xscreensaver_settings_dialog);
+  gtk_window_set_title (GTK_WINDOW (xscreensaver_settings_dialog), "XScreenSaver: Mode-Specific Settings");
+  GTK_WINDOW (xscreensaver_settings_dialog)->type = GTK_WINDOW_DIALOG;
+  gtk_window_set_modal (GTK_WINDOW (xscreensaver_settings_dialog), TRUE);
+  gtk_window_set_policy (GTK_WINDOW (xscreensaver_settings_dialog), TRUE, TRUE, FALSE);
+  gtk_window_set_wmclass (GTK_WINDOW (xscreensaver_settings_dialog), "settings", "XScreenSaver");
+
+  dialog_vbox = GTK_DIALOG (xscreensaver_settings_dialog)->vbox;
+  gtk_widget_set_name (dialog_vbox, "dialog_vbox");
+  gtk_object_set_data (GTK_OBJECT (xscreensaver_settings_dialog), "dialog_vbox", dialog_vbox);
+  gtk_widget_show (dialog_vbox);
+
+  dialog_top_table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_set_name (dialog_top_table, "dialog_top_table");
+  gtk_widget_ref (dialog_top_table);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "dialog_top_table", dialog_top_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (dialog_top_table);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox), dialog_top_table, TRUE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_top_table), 8);
+  gtk_table_set_row_spacings (GTK_TABLE (dialog_top_table), 8);
+  gtk_table_set_col_spacings (GTK_TABLE (dialog_top_table), 8);
+
+  opt_frame = gtk_frame_new ("Settings");
+  gtk_widget_set_name (opt_frame, "opt_frame");
+  gtk_widget_ref (opt_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "opt_frame", opt_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (opt_frame);
+  gtk_table_attach (GTK_TABLE (dialog_top_table), opt_frame, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 4, 8);
+
+  opt_notebook = gtk_notebook_new ();
+  gtk_widget_set_name (opt_notebook, "opt_notebook");
+  gtk_widget_ref (opt_notebook);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "opt_notebook", opt_notebook,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (opt_notebook);
+  gtk_container_add (GTK_CONTAINER (opt_frame), opt_notebook);
+  gtk_container_set_border_width (GTK_CONTAINER (opt_notebook), 12);
+  gtk_notebook_set_show_border (GTK_NOTEBOOK (opt_notebook), FALSE);
+  gtk_notebook_set_tab_pos (GTK_NOTEBOOK (opt_notebook), GTK_POS_BOTTOM);
+
+  settings_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (settings_vbox, "settings_vbox");
+  gtk_widget_ref (settings_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "settings_vbox", settings_vbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (settings_vbox);
+  gtk_container_add (GTK_CONTAINER (opt_notebook), settings_vbox);
+
+  std_label = gtk_label_new ("Standard");
+  gtk_widget_set_name (std_label, "std_label");
+  gtk_widget_ref (std_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "std_label", std_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (std_label);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (opt_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (opt_notebook), 0), std_label);
+
+  opt_table = gtk_table_new (4, 2, FALSE);
+  gtk_widget_set_name (opt_table, "opt_table");
+  gtk_widget_ref (opt_table);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "opt_table", opt_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (opt_table);
+  gtk_container_add (GTK_CONTAINER (opt_notebook), opt_table);
+
+  cmd_logo = create_pixmap (xscreensaver_settings_dialog, "screensaver-cmndln.xpm");
+  gtk_widget_set_name (cmd_logo, "cmd_logo");
+  gtk_widget_ref (cmd_logo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "cmd_logo", cmd_logo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cmd_logo);
+  gtk_table_attach (GTK_TABLE (opt_table), cmd_logo, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_misc_set_padding (GTK_MISC (cmd_logo), 4, 8);
+
+  visual_hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (visual_hbox, "visual_hbox");
+  gtk_widget_ref (visual_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "visual_hbox", visual_hbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (visual_hbox);
+  gtk_table_attach (GTK_TABLE (opt_table), visual_hbox, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  visual = gtk_label_new ("Visual:");
+  gtk_widget_set_name (visual, "visual");
+  gtk_widget_ref (visual);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "visual", visual,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (visual);
+  gtk_box_pack_start (GTK_BOX (visual_hbox), visual, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (visual), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (visual), 1, 0.5);
+  gtk_misc_set_padding (GTK_MISC (visual), 4, 0);
+
+  visual_combo = gtk_combo_new ();
+  gtk_widget_set_name (visual_combo, "visual_combo");
+  gtk_widget_ref (visual_combo);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "visual_combo", visual_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (visual_combo);
+  gtk_box_pack_start (GTK_BOX (visual_hbox), visual_combo, FALSE, FALSE, 0);
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Any");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Best");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Default");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Default-N");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "GL");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "TrueColor");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "PseudoColor");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "StaticGray");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "GrayScale");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "DirectColor");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Color");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Gray");
+  visual_combo_items = g_list_append (visual_combo_items, (gpointer) "Mono");
+  gtk_combo_set_popdown_strings (GTK_COMBO (visual_combo), visual_combo_items);
+  g_list_free (visual_combo_items);
+
+  combo_entry1 = GTK_COMBO (visual_combo)->entry;
+  gtk_widget_set_name (combo_entry1, "combo_entry1");
+  gtk_widget_ref (combo_entry1);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "combo_entry1", combo_entry1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (combo_entry1);
+  gtk_tooltips_set_tip (tooltips, combo_entry1, "The X visual type that this demo will require.  If that visual is available it will be used, otherwise, this demo will not be run.", NULL);
+  gtk_entry_set_text (GTK_ENTRY (combo_entry1), "Any");
+
+  cmd_label = gtk_label_new ("Command Line:");
+  gtk_widget_set_name (cmd_label, "cmd_label");
+  gtk_widget_ref (cmd_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "cmd_label", cmd_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cmd_label);
+  gtk_table_attach (GTK_TABLE (opt_table), cmd_label, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (cmd_label), GTK_JUSTIFY_LEFT);
+  gtk_misc_set_alignment (GTK_MISC (cmd_label), 0, 1);
+  gtk_misc_set_padding (GTK_MISC (cmd_label), 0, 2);
+
+  cmd_text = gtk_entry_new ();
+  gtk_widget_set_name (cmd_text, "cmd_text");
+  gtk_widget_ref (cmd_text);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "cmd_text", cmd_text,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cmd_text);
+  gtk_table_attach (GTK_TABLE (opt_table), cmd_text, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_widget_set_usize (cmd_text, 80, -2);
+
+  adv_label = gtk_label_new ("Advanced");
+  gtk_widget_set_name (adv_label, "adv_label");
+  gtk_widget_ref (adv_label);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "adv_label", adv_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (adv_label);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (opt_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (opt_notebook), 1), adv_label);
+
+  doc_frame = gtk_frame_new ("Description");
+  gtk_widget_set_name (doc_frame, "doc_frame");
+  gtk_widget_ref (doc_frame);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "doc_frame", doc_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (doc_frame);
+  gtk_table_attach (GTK_TABLE (dialog_top_table), doc_frame, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 4, 8);
+
+  doc_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_set_name (doc_vbox, "doc_vbox");
+  gtk_widget_ref (doc_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "doc_vbox", doc_vbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (doc_vbox);
+  gtk_container_add (GTK_CONTAINER (doc_frame), doc_vbox);
+
+  doc = gtk_label_new ("");
+  gtk_widget_set_name (doc, "doc");
+  gtk_widget_ref (doc);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "doc", doc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (doc);
+  gtk_box_pack_start (GTK_BOX (doc_vbox), doc, TRUE, TRUE, 0);
+  gtk_label_set_justify (GTK_LABEL (doc), GTK_JUSTIFY_LEFT);
+  gtk_label_set_line_wrap (GTK_LABEL (doc), TRUE);
+  gtk_misc_set_alignment (GTK_MISC (doc), 0, 0);
+  gtk_misc_set_padding (GTK_MISC (doc), 10, 10);
+
+  doc_hbuttonbox = gtk_hbutton_box_new ();
+  gtk_widget_set_name (doc_hbuttonbox, "doc_hbuttonbox");
+  gtk_widget_ref (doc_hbuttonbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "doc_hbuttonbox", doc_hbuttonbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (doc_hbuttonbox);
+  gtk_box_pack_end (GTK_BOX (doc_vbox), doc_hbuttonbox, FALSE, FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (doc_hbuttonbox), 4);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (doc_hbuttonbox), GTK_BUTTONBOX_END);
+
+  manual = gtk_button_new_with_label ("Documentation...");
+  gtk_widget_set_name (manual, "manual");
+  gtk_widget_ref (manual);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "manual", manual,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (manual);
+  gtk_container_add (GTK_CONTAINER (doc_hbuttonbox), manual);
+  GTK_WIDGET_SET_FLAGS (manual, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, manual, "Click here to read the manual for this display mode, if it has one.", NULL);
+
+  dialog_action_area = GTK_DIALOG (xscreensaver_settings_dialog)->action_area;
+  gtk_widget_set_name (dialog_action_area, "dialog_action_area");
+  gtk_object_set_data (GTK_OBJECT (xscreensaver_settings_dialog), "dialog_action_area", dialog_action_area);
+  gtk_widget_show (dialog_action_area);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area), 10);
+
+  actionarea_hbox = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (actionarea_hbox, "actionarea_hbox");
+  gtk_widget_ref (actionarea_hbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "actionarea_hbox", actionarea_hbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (actionarea_hbox);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area), actionarea_hbox, TRUE, TRUE, 0);
+
+  dialog_hbuttonbox = gtk_hbutton_box_new ();
+  gtk_widget_set_name (dialog_hbuttonbox, "dialog_hbuttonbox");
+  gtk_widget_ref (dialog_hbuttonbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "dialog_hbuttonbox", dialog_hbuttonbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (dialog_hbuttonbox);
+  gtk_box_pack_start (GTK_BOX (actionarea_hbox), dialog_hbuttonbox, TRUE, TRUE, 0);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_hbuttonbox), GTK_BUTTONBOX_SPREAD);
+
+  adv_button = gtk_button_new_with_label ("Advanced >>");
+  gtk_widget_set_name (adv_button, "adv_button");
+  gtk_widget_ref (adv_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "adv_button", adv_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (adv_button);
+  gtk_container_add (GTK_CONTAINER (dialog_hbuttonbox), adv_button);
+  GTK_WIDGET_SET_FLAGS (adv_button, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, adv_button, "Edit the command line directly.", NULL);
+
+  std_button = gtk_button_new_with_label ("Standard <<");
+  gtk_widget_set_name (std_button, "std_button");
+  gtk_widget_ref (std_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "std_button", std_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (std_button);
+  gtk_container_add (GTK_CONTAINER (dialog_hbuttonbox), std_button);
+  GTK_WIDGET_SET_FLAGS (std_button, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, std_button, "Back to the graphical configuration options.", NULL);
+
+  ok_cancel_hbuttonbox = gtk_hbutton_box_new ();
+  gtk_widget_set_name (ok_cancel_hbuttonbox, "ok_cancel_hbuttonbox");
+  gtk_widget_ref (ok_cancel_hbuttonbox);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "ok_cancel_hbuttonbox", ok_cancel_hbuttonbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (ok_cancel_hbuttonbox);
+  gtk_box_pack_start (GTK_BOX (actionarea_hbox), ok_cancel_hbuttonbox, TRUE, TRUE, 0);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (ok_cancel_hbuttonbox), GTK_BUTTONBOX_END);
+
+  ok_button = gtk_button_new_with_label ("OK");
+  gtk_widget_set_name (ok_button, "ok_button");
+  gtk_widget_ref (ok_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "ok_button", ok_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (ok_button);
+  gtk_container_add (GTK_CONTAINER (ok_cancel_hbuttonbox), ok_button);
+  GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
+
+  cancel_button = gtk_button_new_with_label ("Cancel");
+  gtk_widget_set_name (cancel_button, "cancel_button");
+  gtk_widget_ref (cancel_button);
+  gtk_object_set_data_full (GTK_OBJECT (xscreensaver_settings_dialog), "cancel_button", cancel_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (cancel_button);
+  gtk_container_add (GTK_CONTAINER (ok_cancel_hbuttonbox), cancel_button);
+  GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
+
+  gtk_signal_connect (GTK_OBJECT (opt_notebook), "switch_page",
+                      GTK_SIGNAL_FUNC (settings_switch_page_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (manual), "clicked",
+                      GTK_SIGNAL_FUNC (manual_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (adv_button), "clicked",
+                      GTK_SIGNAL_FUNC (settings_adv_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (std_button), "clicked",
+                      GTK_SIGNAL_FUNC (settings_std_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (ok_button), "clicked",
+                      GTK_SIGNAL_FUNC (settings_ok_cb),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (cancel_button), "clicked",
+                      GTK_SIGNAL_FUNC (settings_cancel_cb),
+                      NULL);
+
+  gtk_object_set_data (GTK_OBJECT (xscreensaver_settings_dialog), "tooltips", tooltips);
+
+  return xscreensaver_settings_dialog;
+}
+
index 54ca500aed84dca5bc3daf319447260b8c8d77f6..298c5171cf43e8a4480d1095c56fc2a0f05b6706 100644 (file)
@@ -3,3 +3,4 @@
  */
 
 GtkWidget* create_xscreensaver_demo (void);
+GtkWidget* create_xscreensaver_settings_dialog (void);
index c11224d4b0ecb43fb4ae4e50c825007d83bc5492..3c83e8aba1049255ad7dd81a101326a0183b84ae 100644 (file)
@@ -1,5 +1,5 @@
 /* demo-Gtk.c --- implements the interactive demo-mode and options dialogs.
- * xscreensaver, Copyright (c) 1993-2001 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-2002 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 #include <stdio.h>
 #include <sys/stat.h>
 
+
+#include <signal.h>
+#include <errno.h>
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>         /* for waitpid() and associated macros */
+#endif
+
+
 #include <X11/Xproto.h>                /* for CARD32 */
 #include <X11/Xatom.h>         /* for XA_INTEGER */
 #include <X11/Intrinsic.h>
@@ -75,6 +83,8 @@
 #include "logo-180.xpm"
 
 #include "demo-Gtk-widgets.h"
+#include "demo-Gtk-support.h"
+#include "demo-Gtk-conf.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -88,19 +98,49 @@ char *progname = 0;
 char *progclass = "XScreenSaver";
 XrmDatabase db;
 
-static Bool crapplet_p = False;
-static Bool initializing_p;
-static GtkWidget *toplevel_widget;
+/* The order of the items in the mode menu. */
+static int mode_menu_order[] = {
+  DONT_BLANK, BLANK_ONLY, ONE_HACK, RANDOM_HACKS };
+
 
 typedef struct {
-  saver_preferences *a, *b;
-} prefs_pair;
 
-static void *global_prefs_pair;  /* I hate C so much... */
+  char *short_version;         /* version number of this xscreensaver build */
+
+  GtkWidget *toplevel_widget;  /* the main window */
+  GtkWidget *base_widget;      /* root of our hierarchy (for name lookups) */
+  GtkWidget *popup_widget;     /* the "Settings" dialog */
+  conf_data *cdata;            /* private data for per-hack configuration */
+
+  Bool debug_p;                        /* whether to print diagnostics */
+  Bool initializing_p;         /* flag for breaking recursion loops */
+  Bool saving_p;               /* flag for breaking recursion loops */
+
+  char *desired_preview_cmd;   /* subprocess we intend to run */
+  char *running_preview_cmd;   /* subprocess we are currently running */
+  pid_t running_preview_pid;   /* pid of forked subproc (might be dead) */
+  Bool running_preview_error_p;        /* whether the pid died abnormally */
 
-char *blurb (void) { return progname; }
+  Bool preview_suppressed_p;   /* flag meaning "don't launch subproc" */
+  int subproc_timer_id;                /* timer to delay subproc launch */
+  int subproc_check_timer_id;  /* timer to check whether it started up */
+  int subproc_check_countdown;  /* how many more checks left */
+  int preview_nice_level;
 
-static char *short_version = 0;
+  int *list_elt_to_hack_number;        /* table for sorting the hack list */
+  int *hack_number_to_list_elt;        /* the inverse table */
+
+  int _selected_list_element;  /* don't use this: call
+                                   selected_list_element() instead */
+
+  saver_preferences prefs;
+
+} state;
+
+
+/* Total fucking evilness due to the fact that it's rocket science to get
+   a closure object of our own down into the various widget callbacks. */
+static state *global_state_kludge;
 
 Atom XA_VROOT;
 Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION;
@@ -108,21 +148,59 @@ Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO;
 Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT;
 
 
-static void populate_demo_window (GtkWidget *toplevel,
-                                  int which, prefs_pair *pair);
-static void populate_prefs_page (GtkWidget *top, prefs_pair *pair);
-static int apply_changes_and_save (GtkWidget *widget);
-static int maybe_reload_init_file (GtkWidget *widget, prefs_pair *pair);
-static void await_xscreensaver (GtkWidget *widget);
+static void populate_demo_window (state *, int list_elt);
+static void populate_prefs_page (state *);
+static void populate_popup_window (state *);
+
+static Bool flush_dialog_changes_and_save (state *);
+static Bool flush_popup_changes_and_save (state *);
+
+static int maybe_reload_init_file (state *);
+static void await_xscreensaver (state *);
+
+static void schedule_preview (state *, const char *cmd);
+static void kill_preview_subproc (state *);
+static void schedule_preview_check (state *);
+
 
 \f
 /* Some random utility functions
  */
 
+const char *
+blurb (void)
+{
+  time_t now = time ((time_t *) 0);
+  char *ct = (char *) ctime (&now);
+  static char buf[255];
+  int n = strlen(progname);
+  if (n > 100) n = 99;
+  strncpy(buf, progname, n);
+  buf[n++] = ':';
+  buf[n++] = ' ';
+  strncpy(buf+n, ct+11, 8);
+  strcpy(buf+n+9, ": ");
+  return buf;
+}
+
+
 static GtkWidget *
-name_to_widget (GtkWidget *widget, const char *name)
+name_to_widget (state *s, const char *name)
 {
-  return (GtkWidget *) gtk_object_get_data (GTK_OBJECT(toplevel_widget), name);
+  GtkWidget *w;
+  if (!s) abort();
+  if (!name) abort();
+  if (!*name) abort();
+
+  w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->base_widget),
+                                         name);
+  if (w) return w;
+  w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->popup_widget),
+                                         name);
+  if (w) return w;
+
+  fprintf (stderr, "%s: no widget \"%s\"\n", blurb(), name);
+  abort();
 }
 
 
@@ -139,7 +217,7 @@ ensure_selected_item_visible (GtkWidget *widget)
   GList *kids;
   int nkids = 0;
   GtkWidget *selected = 0;
-  int which = -1;
+  int list_elt = -1;
   GtkAdjustment *adj;
   gint parent_h, child_y, child_h, children_h, ignore;
   double ratio_t, ratio_b;
@@ -170,7 +248,7 @@ ensure_selected_item_visible (GtkWidget *widget)
   if (!selected)
     return;
 
-  which = gtk_list_child_position (list_widget, GTK_WIDGET (selected));
+  list_elt = gtk_list_child_position (list_widget, GTK_WIDGET (selected));
 
   for (kids = gtk_container_children (GTK_CONTAINER (list_widget));
        kids; kids = kids->next)
@@ -249,11 +327,14 @@ warning_dialog (GtkWidget *parent, const char *message,
   GtkWidget *cancel = 0;
   int i = 0;
 
-  while (parent->parent)
+  while (parent && !parent->window)
     parent = parent->parent;
 
   if (!GTK_WIDGET (parent)->window) /* too early to pop up transient dialogs */
-    return;
+    {
+      fprintf (stderr, "%s: too early for dialog?\n", progname);
+      return;
+    }
 
   head = msg;
   while (head)
@@ -348,12 +429,12 @@ warning_dialog (GtkWidget *parent, const char *message,
 
 
 static void
-run_cmd (GtkWidget *widget, Atom command, int arg)
+run_cmd (state *s, Atom command, int arg)
 {
   char *err = 0;
   int status;
 
-  apply_changes_and_save (widget);
+  flush_dialog_changes_and_save (s);
   status = xscreensaver_command (GDK_DISPLAY(), command, arg, False, &err);
   if (status < 0)
     {
@@ -362,23 +443,28 @@ run_cmd (GtkWidget *widget, Atom command, int arg)
         sprintf (buf, "Error:\n\n%s", err);
       else
         strcpy (buf, "Unknown error!");
-      warning_dialog (widget, buf, False, 100);
+      warning_dialog (s->toplevel_widget, buf, False, 100);
     }
   if (err) free (err);
 }
 
 
 static void
-run_hack (GtkWidget *widget, int which, Bool report_errors_p)
+run_hack (state *s, int list_elt, Bool report_errors_p)
 {
-  if (which < 0) return;
-  apply_changes_and_save (widget);
+  int hack_number;
+  if (list_elt < 0) return;
+  hack_number = s->list_elt_to_hack_number[list_elt];
+
+  flush_dialog_changes_and_save (s);
+  schedule_preview (s, 0);
   if (report_errors_p)
-    run_cmd (widget, XA_DEMO, which + 1);
+    run_cmd (s, XA_DEMO, hack_number + 1);
   else
     {
       char *s = 0;
-      xscreensaver_command (GDK_DISPLAY(), XA_DEMO, which + 1, False, &s);
+      xscreensaver_command (GDK_DISPLAY(), XA_DEMO, hack_number + 1,
+                            False, &s);
       if (s) free (s);
     }
 }
@@ -391,48 +477,21 @@ run_hack (GtkWidget *widget, int which, Bool report_errors_p)
 void
 exit_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 {
-  apply_changes_and_save (GTK_WIDGET (menuitem));
+  state *s = global_state_kludge;  /* I hate C so much... */
+  flush_dialog_changes_and_save (s);
+  kill_preview_subproc (s);
   gtk_main_quit ();
 }
 
 static void
-wm_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
+wm_toplevel_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
 {
-  apply_changes_and_save (widget);
+  state *s = (state *) data;
+  flush_dialog_changes_and_save (s);
   gtk_main_quit ();
 }
 
 
-void
-cut_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
-{
-  /* #### */
-  warning_dialog (GTK_WIDGET (menuitem),
-                  "Error:\n\n"
-                  "cut unimplemented\n", False, 1);
-}
-
-
-void
-copy_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
-{
-  /* #### */
-  warning_dialog (GTK_WIDGET (menuitem),
-                  "Error:\n\n"
-                  "copy unimplemented\n", False, 1);
-}
-
-
-void
-paste_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
-{
-  /* #### */
-  warning_dialog (GTK_WIDGET (menuitem),
-                  "Error:\n\n"
-                  "paste unimplemented\n", False, 1);
-}
-
-
 void
 about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 {
@@ -446,7 +505,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
   *s = 0;
   s += 2;
 
-  sprintf(copy, "Copyright \251 1991-2001 %s", s);
+  sprintf(copy, "Copyright \251 1991-2002 %s", s);
 
   sprintf (msg, "%s\n\n%s", copy, desc);
 
@@ -546,15 +605,13 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 void
 doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-
-  saver_preferences *p =  pair->a;
+  state *s = global_state_kludge;  /* I hate C so much... */
+  saver_preferences *p = &s->prefs;
   char *help_command;
 
   if (!p->help_url || !*p->help_url)
     {
-      warning_dialog (GTK_WIDGET (menuitem),
+      warning_dialog (s->toplevel_widget,
                       "Error:\n\n"
                       "No Help URL has been specified.\n", False, 100);
       return;
@@ -574,41 +631,41 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 void
 activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 {
-  run_cmd (GTK_WIDGET (menuitem), XA_ACTIVATE, 0);
+  state *s = global_state_kludge;  /* I hate C so much... */
+  run_cmd (s, XA_ACTIVATE, 0);
 }
 
 
 void
 lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 {
-  run_cmd (GTK_WIDGET (menuitem), XA_LOCK, 0);
+  state *s = global_state_kludge;  /* I hate C so much... */
+  run_cmd (s, XA_LOCK, 0);
 }
 
 
 void
 kill_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 {
-  run_cmd (GTK_WIDGET (menuitem), XA_EXIT, 0);
+  state *s = global_state_kludge;  /* I hate C so much... */
+  run_cmd (s, XA_EXIT, 0);
 }
 
 
 void
 restart_menu_cb (GtkWidget *widget, gpointer user_data)
 {
-#if 0
-  run_cmd (GTK_WIDGET (widget), XA_RESTART, 0);
-#else
-  apply_changes_and_save (GTK_WIDGET (widget));
+  state *s = global_state_kludge;  /* I hate C so much... */
+  flush_dialog_changes_and_save (s);
   xscreensaver_command (GDK_DISPLAY(), XA_EXIT, 0, False, NULL);
   sleep (1);
   system ("xscreensaver -nosplash &");
-#endif
 
-  await_xscreensaver (GTK_WIDGET (widget));
+  await_xscreensaver (s);
 }
 
 static void
-await_xscreensaver (GtkWidget *widget)
+await_xscreensaver (state *s)
 {
   int countdown = 5;
 
@@ -622,7 +679,8 @@ await_xscreensaver (GtkWidget *widget)
       server_xscreensaver_version (dpy, &rversion, 0, 0);
 
       /* If it's not there yet, wait a second... */
-      sleep (1);
+      if (!rversion)
+        sleep (1);
     }
 
 /*  if (dialog) gtk_widget_destroy (dialog);*/
@@ -664,48 +722,46 @@ await_xscreensaver (GtkWidget *widget)
       else
         strcat (buf, "Please check your $PATH and permissions.");
 
-      warning_dialog (widget, buf, False, 1);
+      warning_dialog (s->toplevel_widget, buf, False, 1);
     }
 }
 
 
-static int _selected_hack_number = -1;
-
 static int
-selected_hack_number (GtkWidget *toplevel)
+selected_list_element (state *s)
 {
-#if 0
-  GtkViewport *vp = GTK_VIEWPORT (name_to_widget (toplevel, "viewport"));
-  GtkList *list_widget = GTK_LIST (GTK_BIN(vp)->child);
-  GList *slist = list_widget->selection;
-  GtkWidget *selected = (slist ? GTK_WIDGET (slist->data) : 0);
-  int which = (selected
-               ? gtk_list_child_position (list_widget, GTK_WIDGET (selected))
-               : -1);
-  return which;
-#else
-  return _selected_hack_number;
-#endif
+  return s->_selected_list_element;
 }
 
 
 static int
-demo_write_init_file (GtkWidget *widget, saver_preferences *p)
+demo_write_init_file (state *s, saver_preferences *p)
 {
-  if (!write_init_file (p, short_version, False))
-    return 0;
+
+#if 0
+  /* #### try to figure out why shit keeps getting reordered... */
+  if (strcmp (s->prefs.screenhacks[0]->name, "DNA Lounge Slideshow"))
+    abort();
+#endif
+
+  if (!write_init_file (p, s->short_version, False))
+    {
+      if (s->debug_p)
+        fprintf (stderr, "%s: wrote %s\n", blurb(), init_file_name());
+      return 0;
+    }
   else
     {
       const char *f = init_file_name();
       if (!f || !*f)
-        warning_dialog (widget,
+        warning_dialog (s->toplevel_widget,
                         "Error:\n\nCouldn't determine init file name!\n",
                         False, 100);
       else
         {
           char *b = (char *) malloc (strlen(f) + 1024);
           sprintf (b, "Error:\n\nCouldn't write %s\n", f);
-          warning_dialog (widget, b, False, 100);
+          warning_dialog (s->toplevel_widget, b, False, 100);
           free (b);
         }
       return -1;
@@ -713,132 +769,40 @@ demo_write_init_file (GtkWidget *widget, saver_preferences *p)
 }
 
 
-static int
-apply_changes_and_save_1 (GtkWidget *widget)
-{
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-  saver_preferences *p =  pair->a;
-  GtkList *list_widget =
-    GTK_LIST (name_to_widget (widget, "list"));
-  int which = selected_hack_number (widget);
-
-  GtkEntry *cmd = GTK_ENTRY (name_to_widget (widget, "cmd_text"));
-  GtkToggleButton *enabled =
-    GTK_TOGGLE_BUTTON (name_to_widget (widget, "enabled"));
-  GtkCombo *vis = GTK_COMBO (name_to_widget (widget, "visual_combo"));
-
-  Bool enabled_p = gtk_toggle_button_get_active (enabled);
-  const char *visual = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (vis)->entry));
-  const char *command = gtk_entry_get_text (cmd);
-  
-  char c;
-  unsigned long id;
-
-  if (which < 0) return -1;
-
-  if (maybe_reload_init_file (widget, pair) != 0)
-    return 1;
-
-  /* Sanity-check and canonicalize whatever the user typed into the combo box.
-   */
-  if      (!strcasecmp (visual, ""))                   visual = "";
-  else if (!strcasecmp (visual, "any"))                visual = "";
-  else if (!strcasecmp (visual, "default"))            visual = "Default";
-  else if (!strcasecmp (visual, "default-n"))          visual = "Default-N";
-  else if (!strcasecmp (visual, "default-i"))          visual = "Default-I";
-  else if (!strcasecmp (visual, "best"))               visual = "Best";
-  else if (!strcasecmp (visual, "mono"))               visual = "Mono";
-  else if (!strcasecmp (visual, "monochrome"))         visual = "Mono";
-  else if (!strcasecmp (visual, "gray"))               visual = "Gray";
-  else if (!strcasecmp (visual, "grey"))               visual = "Gray";
-  else if (!strcasecmp (visual, "color"))              visual = "Color";
-  else if (!strcasecmp (visual, "gl"))                 visual = "GL";
-  else if (!strcasecmp (visual, "staticgray"))         visual = "StaticGray";
-  else if (!strcasecmp (visual, "staticcolor"))        visual = "StaticColor";
-  else if (!strcasecmp (visual, "truecolor"))          visual = "TrueColor";
-  else if (!strcasecmp (visual, "grayscale"))          visual = "GrayScale";
-  else if (!strcasecmp (visual, "greyscale"))          visual = "GrayScale";
-  else if (!strcasecmp (visual, "pseudocolor"))        visual = "PseudoColor";
-  else if (!strcasecmp (visual, "directcolor"))        visual = "DirectColor";
-  else if (1 == sscanf (visual, " %ld %c", &id, &c))   ;
-  else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ;
-  else
-    {
-      gdk_beep ();                               /* unparsable */
-      visual = "";
-      gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), "Any");
-    }
-
-  ensure_selected_item_visible (GTK_WIDGET (list_widget));
-
-  if (!p->screenhacks[which]->visual)
-    p->screenhacks[which]->visual = strdup ("");
-  if (!p->screenhacks[which]->command)
-    p->screenhacks[which]->command = strdup ("");
-
-  if (p->screenhacks[which]->enabled_p != enabled_p ||
-      !!strcasecmp (p->screenhacks[which]->visual, visual) ||
-      !!strcasecmp (p->screenhacks[which]->command, command))
-    {
-      /* Something was changed -- store results into the struct,
-         and write the file.
-       */
-      free (p->screenhacks[which]->visual);
-      free (p->screenhacks[which]->command);
-      p->screenhacks[which]->visual = strdup (visual);
-      p->screenhacks[which]->command = strdup (command);
-      p->screenhacks[which]->enabled_p = enabled_p;
-
-      return demo_write_init_file (widget, p);
-    }
-
-  /* No changes made */
-  return 0;
-}
-
-void prefs_ok_cb (GtkButton *button, gpointer user_data);
-
-static int
-apply_changes_and_save (GtkWidget *widget)
-{
-  prefs_ok_cb ((GtkButton *) widget, 0);
-  return apply_changes_and_save_1 (widget);
-}
-
-
 void
 run_this_cb (GtkButton *button, gpointer user_data)
 {
-  int which = selected_hack_number (GTK_WIDGET (button));
-  if (which < 0) return;
-  if (0 == apply_changes_and_save (GTK_WIDGET (button)))
-    run_hack (GTK_WIDGET (button), which, True);
+  state *s = global_state_kludge;  /* I hate C so much... */
+  int list_elt = selected_list_element (s);
+  if (list_elt < 0) return;
+  if (!flush_dialog_changes_and_save (s))
+    run_hack (s, list_elt, True);
 }
 
 
 void
 manual_cb (GtkButton *button, gpointer user_data)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-  saver_preferences *p =  pair->a;
-  GtkList *list_widget =
-    GTK_LIST (name_to_widget (GTK_WIDGET (button), "list"));
-  int which = selected_hack_number (GTK_WIDGET (button));
-  char *name, *name2, *cmd, *s;
-  if (which < 0) return;
-  apply_changes_and_save (GTK_WIDGET (button));
+  state *s = global_state_kludge;  /* I hate C so much... */
+  saver_preferences *p = &s->prefs;
+  GtkList *list_widget = GTK_LIST (name_to_widget (s, "list"));
+  int list_elt = selected_list_element (s);
+  int hack_number;
+  char *name, *name2, *cmd, *str;
+  if (list_elt < 0) return;
+  hack_number = s->list_elt_to_hack_number[list_elt];
+
+  flush_dialog_changes_and_save (s);
   ensure_selected_item_visible (GTK_WIDGET (list_widget));
 
-  name = strdup (p->screenhacks[which]->command);
+  name = strdup (p->screenhacks[hack_number]->command);
   name2 = name;
   while (isspace (*name2)) name2++;
-  s = name2;
-  while (*s && !isspace (*s)) s++;
-  *s = 0;
-  s = strrchr (name2, '/');
-  if (s) name = s+1;
+  str = name2;
+  while (*str && !isspace (*str)) str++;
+  *str = 0;
+  str = strrchr (name2, '/');
+  if (str) name = str+1;
 
   cmd = get_string_resource ("manualCommand", "ManualCommand");
   if (cmd)
@@ -863,57 +827,140 @@ manual_cb (GtkButton *button, gpointer user_data)
 }
 
 
+static void
+force_list_select_item (state *s, GtkList *list, int list_elt, Bool scroll_p)
+{
+  GtkWidget *parent = name_to_widget (s, "scroller");
+  Bool was = GTK_WIDGET_IS_SENSITIVE (parent);
+
+  if (!was) gtk_widget_set_sensitive (parent, True);
+  gtk_list_select_item (GTK_LIST (list), list_elt);
+  if (scroll_p) ensure_selected_item_visible (GTK_WIDGET (list));
+  if (!was) gtk_widget_set_sensitive (parent, False);
+}
+
+
 void
 run_next_cb (GtkButton *button, gpointer user_data)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-  saver_preferences *p =  pair->a;
+  state *s = global_state_kludge;  /* I hate C so much... */
+  saver_preferences *p = &s->prefs;
+  Bool ops = s->preview_suppressed_p;
 
   GtkList *list_widget =
-    GTK_LIST (name_to_widget (GTK_WIDGET (button), "list"));
-  int which = selected_hack_number (GTK_WIDGET (button));
+    GTK_LIST (name_to_widget (s, "list"));
+  int list_elt = selected_list_element (s);
 
-  if (which < 0)
-    which = 0;
+  if (list_elt < 0)
+    list_elt = 0;
   else
-    which++;
+    list_elt++;
 
-  if (which >= p->screenhacks_count)
-    which = 0;
+  if (list_elt >= p->screenhacks_count)
+    list_elt = 0;
 
-  apply_changes_and_save (GTK_WIDGET (button));
-  gtk_list_select_item (GTK_LIST (list_widget), which);
-  ensure_selected_item_visible (GTK_WIDGET (list_widget));
-  populate_demo_window (GTK_WIDGET (button), which, pair);
-  run_hack (GTK_WIDGET (button), which, False);
+  s->preview_suppressed_p = True;
+
+  flush_dialog_changes_and_save (s);
+  force_list_select_item (s, GTK_LIST (list_widget), list_elt, True);
+  populate_demo_window (s, list_elt);
+  run_hack (s, list_elt, False);
+
+  s->preview_suppressed_p = ops;
 }
 
 
 void
 run_prev_cb (GtkButton *button, gpointer user_data)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-  saver_preferences *p =  pair->a;
+  state *s = global_state_kludge;  /* I hate C so much... */
+  saver_preferences *p = &s->prefs;
+  Bool ops = s->preview_suppressed_p;
 
   GtkList *list_widget =
-    GTK_LIST (name_to_widget (GTK_WIDGET (button), "list"));
-  int which = selected_hack_number (GTK_WIDGET (button));
+    GTK_LIST (name_to_widget (s, "list"));
+  int list_elt = selected_list_element (s);
 
-  if (which < 0)
-    which = p->screenhacks_count - 1;
+  if (list_elt < 0)
+    list_elt = p->screenhacks_count - 1;
   else
-    which--;
+    list_elt--;
 
-  if (which < 0)
-    which = p->screenhacks_count - 1;
+  if (list_elt < 0)
+    list_elt = p->screenhacks_count - 1;
 
-  apply_changes_and_save (GTK_WIDGET (button));
-  gtk_list_select_item (GTK_LIST (list_widget), which);
-  ensure_selected_item_visible (GTK_WIDGET (list_widget));
-  populate_demo_window (GTK_WIDGET (button), which, pair);
-  run_hack (GTK_WIDGET (button), which, False);
+  s->preview_suppressed_p = True;
+
+  flush_dialog_changes_and_save (s);
+  force_list_select_item (s, GTK_LIST (list_widget), list_elt, True);
+  populate_demo_window (s, list_elt);
+  run_hack (s, list_elt, False);
+
+  s->preview_suppressed_p = ops;
+}
+
+
+/* Writes the given settings into prefs.
+   Returns true if there was a change, False otherwise.
+   command and/or visual may be 0, or enabled_p may be -1, meaning "no change".
+ */
+static Bool
+flush_changes (state *s,
+               int list_elt,
+               int enabled_p,
+               const char *command,
+               const char *visual)
+{
+  saver_preferences *p = &s->prefs;
+  Bool changed = False;
+  screenhack *hack;
+  int hack_number;
+  if (list_elt < 0 || list_elt >= p->screenhacks_count)
+    abort();
+
+  hack_number = s->list_elt_to_hack_number[list_elt];
+  hack = p->screenhacks[hack_number];
+
+  if (enabled_p != -1 &&
+      enabled_p != hack->enabled_p)
+    {
+      hack->enabled_p = enabled_p;
+      changed = True;
+      if (s->debug_p)
+        fprintf (stderr, "%s: \"%s\": enabled => %d\n",
+                 blurb(), hack->name, enabled_p);
+    }
+
+  if (command)
+    {
+      if (!hack->command || !!strcmp (command, hack->command))
+        {
+          if (hack->command) free (hack->command);
+          hack->command = strdup (command);
+          changed = True;
+          if (s->debug_p)
+            fprintf (stderr, "%s: \"%s\": command => \"%s\"\n",
+                     blurb(), hack->name, command);
+        }
+    }
+
+  if (visual)
+    {
+      const char *ov = hack->visual;
+      if (!ov || !*ov) ov = "any";
+      if (!*visual) visual = "any";
+      if (!!strcasecmp (visual, ov))
+        {
+          if (hack->visual) free (hack->visual);
+          hack->visual = strdup (visual);
+          changed = True;
+          if (s->debug_p)
+            fprintf (stderr, "%s: \"%s\": visual => \"%s\"\n",
+                     blurb(), hack->name, visual);
+        }
+    }
+
+  return changed;
 }
 
 
@@ -921,12 +968,22 @@ run_prev_cb (GtkButton *button, gpointer user_data)
    this parses the text, and does error checking.
  */
 static void 
-hack_time_text (GtkWidget *widget, const char *line, Time *store, Bool sec_p)
+hack_time_text (state *s, const char *line, Time *store, Bool sec_p)
 {
   if (*line)
     {
       int value;
-      value = parse_time ((char *) line, sec_p, True);
+      if (!sec_p || strchr (line, ':'))
+        value = parse_time ((char *) line, sec_p, True);
+      else
+        {
+          char c;
+          if (sscanf (line, "%u%c", &value, &c) != 1)
+            value = -1;
+          if (!sec_p)
+            value *= 60;
+        }
+
       value *= 1000;   /* Time measures in microseconds */
       if (value < 0)
        {
@@ -935,7 +992,7 @@ hack_time_text (GtkWidget *widget, const char *line, Time *store, Bool sec_p)
                   "Error:\n\n"
                   "Unparsable time format: \"%s\"\n",
                   line);
-         warning_dialog (widget, b, False, 100);
+         warning_dialog (s->toplevel_widget, b, False, 100);
        }
       else
        *store = value;
@@ -996,81 +1053,79 @@ normalize_directory (const char *path)
     while (s[0] == '/' && s[1] == '/')
       strcpy (s, s+1);
 
+  /* and strip trailing whitespace for good measure. */
+  L = strlen(p2);
+  while (isspace(p2[L-1]))
+    p2[--L] = 0;
+
   return p2;
 }
 
 
-void
-prefs_ok_cb (GtkButton *button, gpointer user_data)
+/* Flush out any changes made in the main dialog window (where changes
+   take place immediately: clicking on a checkbox causes the init file
+   to be written right away.)
+ */
+static Bool
+flush_dialog_changes_and_save (state *s)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-
-  saver_preferences *p =  pair->a;
-  saver_preferences *p2 = pair->b;
+  saver_preferences *p = &s->prefs;
+  saver_preferences P2, *p2 = &P2;
+  GtkList *list_widget = GTK_LIST (name_to_widget (s, "list"));
+  GList *kids = gtk_container_children (GTK_CONTAINER (list_widget));
   Bool changed = False;
+  GtkWidget *w;
+  int i;
+
+  if (s->saving_p) return False;
+  s->saving_p = True;
+
+  *p2 = *p;
+
+  /* Flush any checkbox changes in the list down into the prefs struct.
+   */
+  for (i = 0; kids; kids = kids->next, i++)
+    {
+      GtkWidget *line = GTK_WIDGET (kids->data);
+      GtkWidget *line_hbox = GTK_WIDGET (GTK_BIN (line)->child);
+      GtkWidget *line_check =
+        GTK_WIDGET (gtk_container_children (GTK_CONTAINER (line_hbox))->data);
+      Bool checked =
+        gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (line_check));
+
+      if (flush_changes (s, i, (checked ? 1 : 0), 0, 0))
+        changed = True;
+    }
+
+
+  /* Flush the non-hack-specific settings down into the prefs struct.
+   */
 
-# define SECONDS(field, name) \
-  hack_time_text (GTK_WIDGET(button), gtk_entry_get_text (\
-                    GTK_ENTRY (name_to_widget (GTK_WIDGET(button), (name)))), \
-                  (field), \
-                  True)
-
-# define MINUTES(field, name) \
-  hack_time_text (GTK_WIDGET(button), gtk_entry_get_text (\
-                    GTK_ENTRY (name_to_widget (GTK_WIDGET(button), (name)))), \
-                  (field), \
-                  False)
-
-# define INTEGER(field, name) do { \
-    char *line = gtk_entry_get_text (\
-                    GTK_ENTRY (name_to_widget (GTK_WIDGET(button), (name)))); \
-    unsigned int value; \
-    char c; \
-    if (! *line) \
-      ; \
-    else if (sscanf (line, "%u%c", &value, &c) != 1) \
-      { \
-       char b[255]; \
-       sprintf (b, "Error:\n\n" "Not an integer: \"%s\"\n", line); \
-       warning_dialog (GTK_WIDGET (button), b, False, 100); \
-      } \
-   else \
-     *(field) = value; \
-  } while(0)
-
-# define PATHNAME(field, name) do { \
-    char *line = gtk_entry_get_text (\
-                    GTK_ENTRY (name_to_widget (GTK_WIDGET(button), (name)))); \
-    if (! *line) \
-      ; \
-    else if (!directory_p (line)) \
-      { \
-       char b[255]; \
-       sprintf (b, "Error:\n\n" "Directory does not exist: \"%s\"\n", line); \
-       warning_dialog (GTK_WIDGET (button), b, False, 100); \
-        if ((field)) free ((field)); \
-        (field) = strdup(line); \
-      } \
-   else { \
-     if ((field)) free ((field)); \
-     (field) = strdup(line); \
-    } \
-  } while(0)
-
-# define CHECKBOX(field, name) \
-  field = gtk_toggle_button_get_active (\
-             GTK_TOGGLE_BUTTON (name_to_widget (GTK_WIDGET(button), (name))))
-
-  MINUTES (&p2->timeout,          "timeout_text");
-  MINUTES (&p2->cycle,            "cycle_text");
+# define SECONDS(FIELD,NAME) \
+    w = name_to_widget (s, (NAME)); \
+    hack_time_text (s, gtk_entry_get_text (GTK_ENTRY (w)), (FIELD), True)
+
+# define MINUTES(FIELD,NAME) \
+    w = name_to_widget (s, (NAME)); \
+    hack_time_text (s, gtk_entry_get_text (GTK_ENTRY (w)), (FIELD), False)
+
+# define CHECKBOX(FIELD,NAME) \
+    w = name_to_widget (s, (NAME)); \
+    (FIELD) = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w))
+
+# define PATHNAME(FIELD,NAME) \
+    w = name_to_widget (s, (NAME)); \
+    (FIELD) = normalize_directory (gtk_entry_get_text (GTK_ENTRY (w)))
+
+  MINUTES  (&p2->timeout,         "timeout_spinbutton");
+  MINUTES  (&p2->cycle,           "cycle_spinbutton");
   CHECKBOX (p2->lock_p,           "lock_button");
-  MINUTES (&p2->lock_timeout,     "lock_text");
+  MINUTES  (&p2->lock_timeout,    "lock_spinbutton");
 
-  CHECKBOX (p2->dpms_enabled_p,   "dpms_button");
-  MINUTES (&p2->dpms_standby,     "dpms_standby_text");
-  MINUTES (&p2->dpms_suspend,     "dpms_suspend_text");
-  MINUTES (&p2->dpms_off,         "dpms_off_text");
+  CHECKBOX (p2->dpms_enabled_p,  "dpms_button");
+  MINUTES  (&p2->dpms_standby,    "dpms_standby_spinbutton");
+  MINUTES  (&p2->dpms_suspend,    "dpms_suspend_spinbutton");
+  MINUTES  (&p2->dpms_off,        "dpms_off_spinbutton");
 
   CHECKBOX (p2->grab_desktop_p,   "grab_desk_button");
   CHECKBOX (p2->grab_video_p,     "grab_video_button");
@@ -1084,203 +1139,362 @@ prefs_ok_cb (GtkButton *button, gpointer user_data)
   CHECKBOX (p2->install_cmap_p,   "install_button");
   CHECKBOX (p2->fade_p,           "fade_button");
   CHECKBOX (p2->unfade_p,         "unfade_button");
-  SECONDS (&p2->fade_seconds,     "fade_text");
+  SECONDS  (&p2->fade_seconds,    "fade_spinbutton");
 
 # undef SECONDS
 # undef MINUTES
-# undef INTEGER
-# undef PATHNAME
 # undef CHECKBOX
+# undef PATHNAME
+
+  /* Warn if the image directory doesn't exist.
+   */
+  if (p2->image_directory &&
+      *p2->image_directory &&
+      !directory_p (p2->image_directory))
+    {
+      char b[255];
+      sprintf (b, "Error:\n\n" "Directory does not exist: \"%s\"\n",
+               p2->image_directory);
+      warning_dialog (s->toplevel_widget, b, False, 100);
+    }
+
+
+  /* Map the mode menu to `saver_mode' enum values. */
+  {
+    GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu"));
+    GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt));
+    GtkWidget *selected = gtk_menu_get_active (menu);
+    GList *kids = gtk_container_children (GTK_CONTAINER (menu));
+    int menu_elt = g_list_index (kids, (gpointer) selected);
+    if (menu_elt < 0 || menu_elt >= countof(mode_menu_order)) abort();
+    p2->mode = mode_menu_order[menu_elt];
+  }
+
+  if (p2->mode == ONE_HACK)
+    {
+      int list_elt = selected_list_element (s);
+      p2->selected_hack = (list_elt >= 0
+                           ? s->list_elt_to_hack_number[list_elt]
+                           : -1);
+    }
 
-# define COPY(field) \
-  if (p->field != p2->field) changed = True; \
+# define COPY(field, name) \
+  if (p->field != p2->field) { \
+    changed = True; \
+    if (s->debug_p) \
+      fprintf (stderr, "%s: %s => %d\n", blurb(), name, p2->field); \
+  } \
   p->field = p2->field
 
-  COPY(timeout);
-  COPY(cycle);
-  COPY(lock_p);
-  COPY(lock_timeout);
+  COPY(mode,             "mode");
+  COPY(selected_hack,    "selected_hack");
+
+  COPY(timeout,        "timeout");
+  COPY(cycle,          "cycle");
+  COPY(lock_p,         "lock_p");
+  COPY(lock_timeout,   "lock_timeout");
+
+  COPY(dpms_enabled_p, "dpms_enabled_p");
+  COPY(dpms_standby,   "dpms_standby");
+  COPY(dpms_suspend,   "dpms_suspend");
+  COPY(dpms_off,       "dpms_off");
 
-  COPY(dpms_enabled_p);
-  COPY(dpms_standby);
-  COPY(dpms_suspend);
-  COPY(dpms_off);
+  COPY(verbose_p,        "verbose_p");
+  COPY(capture_stderr_p, "capture_stderr_p");
+  COPY(splash_p,         "splash_p");
 
-  COPY (grab_desktop_p);
-  COPY (grab_video_p);
-  COPY (random_image_p);
+  COPY(install_cmap_p,   "install_cmap_p");
+  COPY(fade_p,           "fade_p");
+  COPY(unfade_p,         "unfade_p");
+  COPY(fade_seconds,     "fade_seconds");
+
+  COPY(grab_desktop_p, "grab_desktop_p");
+  COPY(grab_video_p,   "grab_video_p");
+  COPY(random_image_p, "random_image_p");
+
+# undef COPY
 
   if (!p->image_directory ||
       !p2->image_directory ||
       strcmp(p->image_directory, p2->image_directory))
-    changed = True;
+    {
+      changed = True;
+      if (s->debug_p)
+        fprintf (stderr, "%s: image_directory => \"%s\"\n",
+                 blurb(), p2->image_directory);
+    }
   if (p->image_directory && p->image_directory != p2->image_directory)
     free (p->image_directory);
-  p->image_directory = normalize_directory (p2->image_directory);
-  if (p2->image_directory) free (p2->image_directory);
+  p->image_directory = p2->image_directory;
   p2->image_directory = 0;
 
-  COPY(verbose_p);
-  COPY(capture_stderr_p);
-  COPY(splash_p);
-
-  COPY(install_cmap_p);
-  COPY(fade_p);
-  COPY(unfade_p);
-  COPY(fade_seconds);
-# undef COPY
-
-  populate_prefs_page (GTK_WIDGET (button), pair);
+  populate_prefs_page (s);
 
   if (changed)
     {
       Display *dpy = GDK_DISPLAY();
-      sync_server_dpms_settings (dpy, p->dpms_enabled_p,
+      Bool enabled_p = (p->dpms_enabled_p && p->mode != DONT_BLANK);
+      sync_server_dpms_settings (dpy, enabled_p,
                                  p->dpms_standby / 1000,
                                  p->dpms_suspend / 1000,
                                  p->dpms_off / 1000,
                                  False);
 
-      demo_write_init_file (GTK_WIDGET (button), p);
-    }
-}
-
-
-void
-prefs_cancel_cb (GtkButton *button, gpointer user_data)
-{
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-
-  *pair->b = *pair->a;
-  populate_prefs_page (GTK_WIDGET (button), pair);
-}
-
-
-void
-pref_changed_cb (GtkButton *button, gpointer user_data)
-{
-  if (! initializing_p)
-    apply_changes_and_save (GTK_WIDGET (button));
-}
-
-
-static gint
-list_doubleclick_cb (GtkWidget *button, GdkEventButton *event,
-                     gpointer client_data)
-{
-  if (event->type == GDK_2BUTTON_PRESS)
-    {
-      GtkList *list = GTK_LIST (name_to_widget (button, "list"));
-      int which = gtk_list_child_position (list, GTK_WIDGET (button));
-
-      if (which >= 0)
-        run_hack (GTK_WIDGET (button), which, True);
+      changed = demo_write_init_file (s, p);
     }
 
-  return FALSE;
+  s->saving_p = False;
+  return changed;
 }
 
 
-static void
-list_select_cb (GtkList *list, GtkWidget *child)
+/* Flush out any changes made in the popup dialog box (where changes
+   take place only when the OK button is clicked.)
+ */
+static Bool
+flush_popup_changes_and_save (state *s)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
+  Bool changed = False;
+  saver_preferences *p = &s->prefs;
+  int list_elt = selected_list_element (s);
 
-  int which = gtk_list_child_position (list, GTK_WIDGET (child));
-  apply_changes_and_save (GTK_WIDGET (list));
-  populate_demo_window (GTK_WIDGET (list), which, pair);
-}
+  GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text"));
+  GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo"));
 
-static void
-list_unselect_cb (GtkList *list, GtkWidget *child)
-{
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
+  const char *visual = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (vis)->entry));
+  const char *command = gtk_entry_get_text (cmd);
 
-  apply_changes_and_save (GTK_WIDGET (list));
-  populate_demo_window (GTK_WIDGET (list), -1, pair);
-}
+  char c;
+  unsigned long id;
 
+  if (s->saving_p) return False;
+  s->saving_p = True;
 
-static int updating_enabled_cb = 0;  /* kludge to make sure that enabled_cb
-                                        is only run by user action, not by
-                                        program action. */
+  if (list_elt < 0)
+    goto DONE;
 
-/* Called when the checkboxes that are in the left column of the
-   scrolling list are clicked.  This both populates the right pane
-   (just as clicking on the label (really, listitem) does) and
-   also syncs this checkbox with  the right pane Enabled checkbox.
- */
-static void
-list_checkbox_cb (GtkWidget *cb, gpointer client_data)
-{
-  prefs_pair *pair = (prefs_pair *) client_data;
+  if (maybe_reload_init_file (s) != 0)
+    {
+      changed = True;
+      goto DONE;
+    }
 
-  GtkWidget *line_hbox = GTK_WIDGET (cb)->parent;
-  GtkWidget *line = GTK_WIDGET (line_hbox)->parent;
+  /* Sanity-check and canonicalize whatever the user typed into the combo box.
+   */
+  if      (!strcasecmp (visual, ""))                   visual = "";
+  else if (!strcasecmp (visual, "any"))                visual = "";
+  else if (!strcasecmp (visual, "default"))            visual = "Default";
+  else if (!strcasecmp (visual, "default-n"))          visual = "Default-N";
+  else if (!strcasecmp (visual, "default-i"))          visual = "Default-I";
+  else if (!strcasecmp (visual, "best"))               visual = "Best";
+  else if (!strcasecmp (visual, "mono"))               visual = "Mono";
+  else if (!strcasecmp (visual, "monochrome"))         visual = "Mono";
+  else if (!strcasecmp (visual, "gray"))               visual = "Gray";
+  else if (!strcasecmp (visual, "grey"))               visual = "Gray";
+  else if (!strcasecmp (visual, "color"))              visual = "Color";
+  else if (!strcasecmp (visual, "gl"))                 visual = "GL";
+  else if (!strcasecmp (visual, "staticgray"))         visual = "StaticGray";
+  else if (!strcasecmp (visual, "staticcolor"))        visual = "StaticColor";
+  else if (!strcasecmp (visual, "truecolor"))          visual = "TrueColor";
+  else if (!strcasecmp (visual, "grayscale"))          visual = "GrayScale";
+  else if (!strcasecmp (visual, "greyscale"))          visual = "GrayScale";
+  else if (!strcasecmp (visual, "pseudocolor"))        visual = "PseudoColor";
+  else if (!strcasecmp (visual, "directcolor"))        visual = "DirectColor";
+  else if (1 == sscanf (visual, " %ld %c", &id, &c))   ;
+  else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ;
+  else
+    {
+      gdk_beep ();                               /* unparsable */
+      visual = "";
+      gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), "Any");
+    }
 
-  GtkList *list = GTK_LIST (GTK_WIDGET (line)->parent);
-  GtkViewport *vp = GTK_VIEWPORT (GTK_WIDGET (list)->parent);
-  GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent);
-  GtkAdjustment *adj;
-  double scroll_top;
+  changed = flush_changes (s, list_elt, -1, command, visual);
+  if (changed)
+    {
+      changed = demo_write_init_file (s, p);
 
-  GtkToggleButton *enabled =
-    GTK_TOGGLE_BUTTON (name_to_widget (cb, "enabled"));
+      /* Do this to re-launch the hack if (and only if) the command line
+         has changed. */
+      populate_demo_window (s, selected_list_element (s));
+    }
 
-  int which = gtk_list_child_position (list, line);
+ DONE:
+  s->saving_p = False;
+  return changed;
+}
 
-  /* remember previous scroll position of the top of the list */
-  adj = gtk_scrolled_window_get_vadjustment (scroller);
-  scroll_top = adj->value;
 
-  apply_changes_and_save (GTK_WIDGET (list));
-  gtk_list_select_item (list, which);
-  /* ensure_selected_item_visible (GTK_WIDGET (list)); */
-  populate_demo_window (GTK_WIDGET (list), which, pair);
-  
-  updating_enabled_cb++;
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enabled),
-                                GTK_TOGGLE_BUTTON (cb)->active);
-  updating_enabled_cb--;
 
-  /* restore the previous scroll position of the top of the list.
-     this is weak, but I don't really know why it's moving... */
-  gtk_adjustment_set_value (adj, scroll_top);
+
+void
+pref_changed_cb (GtkWidget *widget, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  if (! s->initializing_p)
+    {
+      s->initializing_p = True;
+      flush_dialog_changes_and_save (s);
+      s->initializing_p = False;
+    }
 }
 
 
-/* Called when the right pane Enabled checkbox is clicked.  This syncs
-   the corresponding checkbox inside the scrolling list to the state
-   of this checkbox.
+/* Callback on menu items in the "mode" options menu.
  */
 void
-enabled_cb (GtkWidget *cb, gpointer client_data)
+mode_menu_item_cb (GtkWidget *widget, gpointer user_data)
 {
-  int which = selected_hack_number (cb);
-  
-  if (updating_enabled_cb) return;
+  state *s = (state *) user_data;
+  saver_preferences *p = &s->prefs;
+  GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+  int list_elt;
 
-  if (which != -1)
+  GList *menu_items = gtk_container_children (GTK_CONTAINER (widget->parent));
+  int menu_index = 0;
+  saver_mode new_mode;
+  int old_selected = p->selected_hack;
+
+  while (menu_items)
     {
-      GtkList *list = GTK_LIST (name_to_widget (cb, "list"));
-      GList *kids = GTK_LIST (list)->children;
-      GtkWidget *line = GTK_WIDGET (g_list_nth_data (kids, which));
-      GtkWidget *line_hbox = GTK_WIDGET (GTK_BIN (line)->child);
-      GtkWidget *line_check =
-        GTK_WIDGET (gtk_container_children (GTK_CONTAINER (line_hbox))->data);
+      if (menu_items->data == widget)
+        break;
+      menu_index++;
+      menu_items = menu_items->next;
+    }
+  if (!menu_items) abort();
 
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (line_check),
-                                    GTK_TOGGLE_BUTTON (cb)->active);
+  new_mode = mode_menu_order[menu_index];
+
+  /* Keep the same list element displayed as before; except if we're
+     switching *to* "one screensaver" mode from any other mode, scroll
+     to and select "the one".
+   */
+  list_elt = -1;
+  if (new_mode == ONE_HACK)
+    list_elt = (p->selected_hack >= 0
+                ? s->hack_number_to_list_elt[p->selected_hack]
+                : -1);
+
+  if (list_elt < 0)
+    list_elt = selected_list_element (s);
+
+  {
+    saver_mode old_mode = p->mode;
+    p->mode = new_mode;
+    populate_demo_window (s, list_elt);
+    force_list_select_item (s, list, list_elt, True);
+    p->mode = old_mode;  /* put it back, so the init file gets written */
+  }
+
+  pref_changed_cb (widget, user_data);
+
+  if (old_selected != p->selected_hack)
+    abort();    /* dammit, not again... */
+}
+
+
+void
+switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page,
+                gint page_num, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  pref_changed_cb (GTK_WIDGET (notebook), user_data);
+
+  /* If we're switching to page 0, schedule the current hack to be run.
+     Otherwise, schedule it to stop. */
+  if (page_num == 0)
+    populate_demo_window (s, selected_list_element (s));
+  else
+    schedule_preview (s, 0);
+}
+
+
+static time_t last_doubleclick_time = 0;   /* FMH!  This is to suppress the
+                                              list_select_cb that comes in
+                                              *after* we've double-clicked.
+                                            */
+
+static gint
+list_doubleclick_cb (GtkWidget *button, GdkEventButton *event,
+                     gpointer data)
+{
+  state *s = (state *) data;
+  if (event->type == GDK_2BUTTON_PRESS)
+    {
+      GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+      int list_elt = gtk_list_child_position (list, GTK_WIDGET (button));
+
+      last_doubleclick_time = time ((time_t *) 0);
+
+      if (list_elt >= 0)
+        run_hack (s, list_elt, True);
+    }
+
+  return FALSE;
+}
+
+
+static void
+list_select_cb (GtkList *list, GtkWidget *child, gpointer data)
+{
+  state *s = (state *) data;
+  time_t now = time ((time_t *) 0);
+
+  if (now >= last_doubleclick_time + 2)
+    {
+      int list_elt = gtk_list_child_position (list, GTK_WIDGET (child));
+      populate_demo_window (s, list_elt);
+      flush_dialog_changes_and_save (s);
     }
 }
 
+static void
+list_unselect_cb (GtkList *list, GtkWidget *child, gpointer data)
+{
+  state *s = (state *) data;
+  populate_demo_window (s, -1);
+  flush_dialog_changes_and_save (s);
+}
+
+
+/* Called when the checkboxes that are in the left column of the
+   scrolling list are clicked.  This both populates the right pane
+   (just as clicking on the label (really, listitem) does) and
+   also syncs this checkbox with  the right pane Enabled checkbox.
+ */
+static void
+list_checkbox_cb (GtkWidget *cb, gpointer data)
+{
+  state *s = (state *) data;
+
+  GtkWidget *line_hbox = GTK_WIDGET (cb)->parent;
+  GtkWidget *line = GTK_WIDGET (line_hbox)->parent;
+
+  GtkList *list = GTK_LIST (GTK_WIDGET (line)->parent);
+  GtkViewport *vp = GTK_VIEWPORT (GTK_WIDGET (list)->parent);
+  GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent);
+  GtkAdjustment *adj;
+  double scroll_top;
+
+  int list_elt = gtk_list_child_position (list, line);
+
+  /* remember previous scroll position of the top of the list */
+  adj = gtk_scrolled_window_get_vadjustment (scroller);
+  scroll_top = adj->value;
+
+  flush_dialog_changes_and_save (s);
+  force_list_select_item (s, list, list_elt, False);
+  populate_demo_window (s, list_elt);
+  
+  /* restore the previous scroll position of the top of the list.
+     this is weak, but I don't really know why it's moving... */
+  gtk_adjustment_set_value (adj, scroll_top);
+}
 
 
 typedef struct {
-  prefs_pair *pair;
+  state *state;
   GtkFileSelection *widget;
 } file_selection_data;
 
@@ -1290,10 +1504,10 @@ static void
 store_image_directory (GtkWidget *button, gpointer user_data)
 {
   file_selection_data *fsd = (file_selection_data *) user_data;
-  prefs_pair *pair = fsd->pair;
+  state *s = fsd->state;
   GtkFileSelection *selector = fsd->widget;
-  GtkWidget *top = toplevel_widget;
-  saver_preferences *p = pair->a;
+  GtkWidget *top = s->toplevel_widget;
+  saver_preferences *p = &s->prefs;
   char *path = gtk_file_selection_get_filename (selector);
 
   if (p->image_directory && !strcmp(p->image_directory, path))
@@ -1310,9 +1524,9 @@ store_image_directory (GtkWidget *button, gpointer user_data)
   if (p->image_directory) free (p->image_directory);
   p->image_directory = normalize_directory (path);
 
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "image_text")),
+  gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "image_text")),
                       (p->image_directory ? p->image_directory : ""));
-  demo_write_init_file (GTK_WIDGET (top), p);
+  demo_write_init_file (s, p);
 }
 
 
@@ -1340,9 +1554,8 @@ browse_image_dir_close (GtkWidget *widget, GdkEvent *event, gpointer user_data)
 void
 browse_image_dir_cb (GtkButton *button, gpointer user_data)
 {
-  /* prefs_pair *pair = (prefs_pair *) client_data; */
-  prefs_pair *pair = global_prefs_pair;  /* I hate C so much... */
-  saver_preferences *p = pair->a;
+  state *s = global_state_kludge;  /* I hate C so much... */
+  saver_preferences *p = &s->prefs;
   static file_selection_data *fsd = 0;
 
   GtkFileSelection *selector = GTK_FILE_SELECTION(
@@ -1352,7 +1565,7 @@ browse_image_dir_cb (GtkButton *button, gpointer user_data)
     fsd = (file_selection_data *) malloc (sizeof (*fsd));  
 
   fsd->widget = selector;
-  fsd->pair = pair;
+  fsd->state = s;
 
   if (p->image_directory && *p->image_directory)
     gtk_file_selection_set_filename (selector, p->image_directory);
@@ -1374,46 +1587,125 @@ browse_image_dir_cb (GtkButton *button, gpointer user_data)
 }
 
 
-\f
-/* Populating the various widgets
- */
+void
+settings_cb (GtkButton *button, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  int list_elt = selected_list_element (s);
 
+  populate_demo_window (s, list_elt);   /* reset the widget */
+  populate_popup_window (s);           /* create UI on popup window */
+  gtk_widget_show (s->popup_widget);
+}
 
-/* Formats a `Time' into "H:MM:SS".  (Time is microseconds.)
- */
 static void
-format_time (char *buf, Time time)
+settings_sync_cmd_text (state *s)
+{
+# ifdef HAVE_XML
+  GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text"));
+  char *cmd_line = get_configurator_command_line (s->cdata);
+  gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line);
+  gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line));
+  free (cmd_line);
+# endif /* HAVE_XML */
+}
+
+void
+settings_adv_cb (GtkButton *button, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  GtkNotebook *notebook =
+    GTK_NOTEBOOK (name_to_widget (s, "opt_notebook"));
+
+  settings_sync_cmd_text (s);
+  gtk_notebook_set_page (notebook, 1);
+}
+
+void
+settings_std_cb (GtkButton *button, gpointer user_data)
 {
-  int s = time / 1000;
-  unsigned int h = 0, m = 0;
-  if (s >= 60)
+  state *s = global_state_kludge;  /* I hate C so much... */
+  GtkNotebook *notebook =
+    GTK_NOTEBOOK (name_to_widget (s, "opt_notebook"));
+
+  /* Re-create UI to reflect the in-progress command-line settings. */
+  populate_popup_window (s);
+
+  gtk_notebook_set_page (notebook, 0);
+}
+
+void
+settings_switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page,
+                         gint page_num, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  GtkWidget *adv = name_to_widget (s, "adv_button");
+  GtkWidget *std = name_to_widget (s, "std_button");
+
+  if (page_num == 0)
     {
-      m += (s / 60);
-      s %= 60;
+      gtk_widget_show (adv);
+      gtk_widget_hide (std);
     }
-  if (m >= 60)
+  else if (page_num == 1)
     {
-      h += (m / 60);
-      m %= 60;
+      gtk_widget_hide (adv);
+      gtk_widget_show (std);
     }
-  sprintf (buf, "%u:%02u:%02u", h, m, s);
+  else
+    abort();
 }
 
 
-/* Finds the number of the last hack to run, and makes that item be
-   selected by default.
- */
+
+void
+settings_cancel_cb (GtkButton *button, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  gtk_widget_hide (s->popup_widget);
+}
+
+void
+settings_ok_cb (GtkButton *button, gpointer user_data)
+{
+  state *s = global_state_kludge;  /* I hate C so much... */
+  GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook"));
+  int page = gtk_notebook_get_current_page (notebook);
+
+  if (page == 0)
+    /* Regenerate the command-line from the widget contents before saving.
+       But don't do this if we're looking at the command-line page already,
+       or we will blow away what they typed... */
+    settings_sync_cmd_text (s);
+
+  flush_popup_changes_and_save (s);
+  gtk_widget_hide (s->popup_widget);
+}
+
 static void
-scroll_to_current_hack (GtkWidget *toplevel, prefs_pair *pair)
+wm_popup_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  state *s = (state *) data;
+  settings_cancel_cb (0, (gpointer) s);
+}
+
+
+\f
+/* Populating the various widgets
+ */
+
+
+/* Returns the number of the last hack run by the server.
+ */
+static int
+server_current_hack (void)
 {
-  saver_preferences *p =  pair->a;
   Atom type;
   int format;
   unsigned long nitems, bytesafter;
   CARD32 *data = 0;
   Display *dpy = GDK_DISPLAY();
-  int which = 0;
-  GtkList *list;
+  int hack_number = -1;
 
   if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */
                           XA_SCREENSAVER_STATUS,
@@ -1424,35 +1716,48 @@ scroll_to_current_hack (GtkWidget *toplevel, prefs_pair *pair)
       && type == XA_INTEGER
       && nitems >= 3
       && data)
-    which = (int) data[2] - 1;
+    hack_number = (int) data[2] - 1;
 
   if (data) free (data);
 
-  if (which < 0)
-    return;
+  return hack_number;
+}
+
+
+/* Finds the number of the last hack to run, and makes that item be
+   selected by default.
+ */
+static void
+scroll_to_current_hack (state *s)
+{
+  saver_preferences *p = &s->prefs;
+  int hack_number;
 
-  list = GTK_LIST (name_to_widget (toplevel, "list"));
-  apply_changes_and_save (toplevel);
-  if (which < p->screenhacks_count)
+  if (p->mode == ONE_HACK)
+    hack_number = p->selected_hack;
+  else
+    hack_number = server_current_hack ();
+
+  if (hack_number >= 0 && hack_number < p->screenhacks_count)
     {
-      gtk_list_select_item (list, which);
-      ensure_selected_item_visible (GTK_WIDGET (list));
-      populate_demo_window (toplevel, which, pair);
+      int list_elt = s->hack_number_to_list_elt[hack_number];
+      GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+      force_list_select_item (s, list, list_elt, True);
+      populate_demo_window (s, list_elt);
     }
 }
 
 
-
 static void
-populate_hack_list (GtkWidget *toplevel, prefs_pair *pair)
+populate_hack_list (state *s)
 {
-  saver_preferences *p =  pair->a;
-  GtkList *list = GTK_LIST (name_to_widget (toplevel, "list"));
-  screenhack **hacks = p->screenhacks;
-  screenhack **h;
-
-  for (h = hacks; h && *h; h++)
+  saver_preferences *p = &s->prefs;
+  GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+  int i;
+  for (i = 0; i < p->screenhacks_count; i++)
     {
+      screenhack *hack = p->screenhacks[s->list_elt_to_hack_number[i]];
+
       /* A GtkList must contain only GtkListItems, but those can contain
          an arbitrary widget.  We add an Hbox, and inside that, a Checkbox
          and a Label.  We handle single and double click events on the
@@ -1464,9 +1769,9 @@ populate_hack_list (GtkWidget *toplevel, prefs_pair *pair)
       GtkWidget *line_check;
       GtkWidget *line_label;
 
-      char *pretty_name = (h[0]->name
-                           ? strdup (h[0]->name)
-                           : make_hack_name (h[0]->command));
+      char *pretty_name = (hack->name
+                           ? strdup (hack->name)
+                           : make_hack_name (hack->command));
 
       line = gtk_list_item_new ();
       line_hbox = gtk_hbox_new (FALSE, 0);
@@ -1478,7 +1783,7 @@ populate_hack_list (GtkWidget *toplevel, prefs_pair *pair)
       gtk_box_pack_start (GTK_BOX (line_hbox), line_label, FALSE, FALSE, 0);
 
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (line_check),
-                                    h[0]->enabled_p);
+                                    hack->enabled_p);
       gtk_label_set_justify (GTK_LABEL (line_label), GTK_JUSTIFY_LEFT);
 
       gtk_widget_show (line_check);
@@ -1491,11 +1796,11 @@ populate_hack_list (GtkWidget *toplevel, prefs_pair *pair)
       gtk_container_add (GTK_CONTAINER (list), line);
       gtk_signal_connect (GTK_OBJECT (line), "button_press_event",
                           GTK_SIGNAL_FUNC (list_doubleclick_cb),
-                          (gpointer) pair);
+                          (gpointer) s);
 
       gtk_signal_connect (GTK_OBJECT (line_check), "toggled",
                           GTK_SIGNAL_FUNC (list_checkbox_cb),
-                          (gpointer) pair);
+                          (gpointer) s);
 
 #if 0 /* #### */
       GTK_WIDGET (GTK_BIN(line)->child)->style =
@@ -1506,80 +1811,119 @@ populate_hack_list (GtkWidget *toplevel, prefs_pair *pair)
 
   gtk_signal_connect (GTK_OBJECT (list), "select_child",
                       GTK_SIGNAL_FUNC (list_select_cb),
-                      (gpointer) pair);
+                      (gpointer) s);
   gtk_signal_connect (GTK_OBJECT (list), "unselect_child",
                       GTK_SIGNAL_FUNC (list_unselect_cb),
-                      (gpointer) pair);
+                      (gpointer) s);
+}
+
+
+static void
+update_list_sensitivity (state *s)
+{
+  saver_preferences *p = &s->prefs;
+  Bool sensitive = (p->mode == RANDOM_HACKS || p->mode == ONE_HACK);
+  Bool checkable = (p->mode == RANDOM_HACKS);
+  Bool blankable = (p->mode != DONT_BLANK);
+
+  GtkWidget *head     = name_to_widget (s, "col_head_hbox");
+  GtkWidget *use      = name_to_widget (s, "use_col_frame");
+  GtkWidget *scroller = name_to_widget (s, "scroller");
+  GtkWidget *buttons  = name_to_widget (s, "next_prev_hbox");
+  GtkWidget *blanker  = name_to_widget (s, "blanking_table");
+
+  GtkList *list = GTK_LIST (name_to_widget (s, "list"));
+  GList *kids   = gtk_container_children (GTK_CONTAINER (list));
+
+  gtk_widget_set_sensitive (GTK_WIDGET (head),     sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (scroller), sensitive);
+  gtk_widget_set_sensitive (GTK_WIDGET (buttons),  sensitive);
+
+  gtk_widget_set_sensitive (GTK_WIDGET (blanker),  blankable);
+
+  if (checkable)
+    gtk_widget_show (use);   /* the "Use" column header */
+  else
+    gtk_widget_hide (use);
+
+  while (kids)
+    {
+      GtkBin *line = GTK_BIN (kids->data);
+      GtkContainer *line_hbox = GTK_CONTAINER (line->child);
+      GtkWidget *line_check =
+        GTK_WIDGET (gtk_container_children (line_hbox)->data);
+      
+      if (checkable)
+        gtk_widget_show (line_check);
+      else
+        gtk_widget_hide (line_check);
+
+      kids = kids->next;
+    }
 }
 
 
 static void
-populate_prefs_page (GtkWidget *top, prefs_pair *pair)
-{
-  saver_preferences *p =  pair->a;
-  char s[100];
-
-  format_time (s, p->timeout);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "timeout_text")), s);
-  format_time (s, p->cycle);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "cycle_text")), s);
-  format_time (s, p->lock_timeout);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "lock_text")), s);
-
-  format_time (s, p->dpms_standby);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "dpms_standby_text")),s);
-  format_time (s, p->dpms_suspend);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "dpms_suspend_text")),s);
-  format_time (s, p->dpms_off);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "dpms_off_text")), s);
-
-  format_time (s, p->fade_seconds);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "fade_text")), s);
-
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "lock_button")),
-                   p->lock_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "verbose_button")),
-                   p->verbose_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "capture_button")),
-                   p->capture_stderr_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "splash_button")),
-                   p->splash_p);
-
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "dpms_button")),
-                   p->dpms_enabled_p);
-
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top,"grab_desk_button")),
-                   p->grab_desktop_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget(top,"grab_video_button")),
-                   p->grab_video_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget(top,"grab_image_button")),
-                   p->random_image_p);
-  gtk_entry_set_text (GTK_ENTRY (name_to_widget (top, "image_text")),
+populate_prefs_page (state *s)
+{
+  saver_preferences *p = &s->prefs;
+  char str[100];
+
+# define FMT_MINUTES(NAME,N) \
+    sprintf (str, "%d", ((N) + 59) / (60 * 1000)); \
+    gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, (NAME))), str)
+
+# define FMT_SECONDS(NAME,N) \
+    sprintf (str, "%d", ((N) / 1000)); \
+    gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, (NAME))), str)
+
+  FMT_MINUTES ("timeout_spinbutton",      p->timeout);
+  FMT_MINUTES ("cycle_spinbutton",        p->cycle);
+  FMT_MINUTES ("lock_spinbutton",         p->lock_timeout);
+  FMT_MINUTES ("dpms_standby_spinbutton", p->dpms_standby);
+  FMT_MINUTES ("dpms_suspend_spinbutton", p->dpms_suspend);
+  FMT_MINUTES ("dpms_off_spinbutton",     p->dpms_off);
+  FMT_SECONDS ("fade_spinbutton",         p->fade_seconds);
+
+# undef FMT_MINUTES
+# undef FMT_SECONDS
+
+# define TOGGLE_ACTIVE(NAME,ACTIVEP) \
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (name_to_widget (s,(NAME))),\
+                                (ACTIVEP))
+
+  TOGGLE_ACTIVE ("lock_button",       p->lock_p);
+  TOGGLE_ACTIVE ("verbose_button",    p->verbose_p);
+  TOGGLE_ACTIVE ("capture_button",    p->capture_stderr_p);
+  TOGGLE_ACTIVE ("splash_button",     p->splash_p);
+  TOGGLE_ACTIVE ("dpms_button",       p->dpms_enabled_p);
+  TOGGLE_ACTIVE ("grab_desk_button",  p->grab_desktop_p);
+  TOGGLE_ACTIVE ("grab_video_button", p->grab_video_p);
+  TOGGLE_ACTIVE ("grab_image_button", p->random_image_p);
+  TOGGLE_ACTIVE ("install_button",    p->install_cmap_p);
+  TOGGLE_ACTIVE ("fade_button",       p->fade_p);
+  TOGGLE_ACTIVE ("unfade_button",     p->unfade_p);
+
+# undef TOGGLE_ACTIVE
+
+  gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "image_text")),
                       (p->image_directory ? p->image_directory : ""));
-  gtk_widget_set_sensitive (GTK_WIDGET (name_to_widget (top, "image_text")),
+  gtk_widget_set_sensitive (name_to_widget (s, "image_text"),
                             p->random_image_p);
-  gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top,"image_browse_button")),
+  gtk_widget_set_sensitive (name_to_widget (s, "image_browse_button"),
                             p->random_image_p);
 
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "install_button")),
-                   p->install_cmap_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "fade_button")),
-                   p->fade_p);
-  gtk_toggle_button_set_active (
-                   GTK_TOGGLE_BUTTON (name_to_widget (top, "unfade_button")),
-                   p->unfade_p);
+  /* Map the `saver_mode' enum to mode menu to values. */
+  {
+    GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu"));
 
+    int i;
+    for (i = 0; i < countof(mode_menu_order); i++)
+      if (mode_menu_order[i] == p->mode)
+        break;
+    gtk_option_menu_set_history (opt, i);
+    update_list_sensitivity (s);
+  }
 
   {
     Bool found_any_writable_cells = False;
@@ -1611,92 +1955,104 @@ populate_prefs_page (GtkWidget *top, prefs_pair *pair)
 #endif /* HAVE_DPMS_EXTENSION */
 
 
+# define SENSITIZE(NAME,SENSITIVEP) \
+    gtk_widget_set_sensitive (name_to_widget (s, (NAME)), (SENSITIVEP))
+
     /* Blanking and Locking
      */
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "lock_label")),
-                           p->lock_p);
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "lock_text")),
-                           p->lock_p);
+    SENSITIZE ("lock_spinbutton", p->lock_p);
+    SENSITIZE ("lock_mlabel",     p->lock_p);
 
     /* DPMS
      */
-    gtk_widget_set_sensitive (
-                      GTK_WIDGET (name_to_widget (top, "dpms_frame")),
-                      dpms_supported);
-    gtk_widget_set_sensitive (
-                      GTK_WIDGET (name_to_widget (top, "dpms_button")),
-                      dpms_supported);
-    gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top, "dpms_standby_label")),
-                       dpms_supported && p->dpms_enabled_p);
-    gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top, "dpms_standby_text")),
-                       dpms_supported && p->dpms_enabled_p);
-    gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top, "dpms_suspend_label")),
-                       dpms_supported && p->dpms_enabled_p);
-    gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top, "dpms_suspend_text")),
-                       dpms_supported && p->dpms_enabled_p);
-    gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top, "dpms_off_label")),
-                       dpms_supported && p->dpms_enabled_p);
-    gtk_widget_set_sensitive (
-                       GTK_WIDGET (name_to_widget (top, "dpms_off_text")),
-                       dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_frame",              dpms_supported);
+    SENSITIZE ("dpms_button",             dpms_supported);
+    SENSITIZE ("dpms_standby_label",      dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_standby_mlabel",     dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_standby_spinbutton", dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_suspend_label",      dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_suspend_mlabel",     dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_suspend_spinbutton", dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_off_label",          dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_off_mlabel",         dpms_supported && p->dpms_enabled_p);
+    SENSITIZE ("dpms_off_spinbutton",     dpms_supported && p->dpms_enabled_p);
 
     /* Colormaps
      */
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "cmap_frame")),
-                           found_any_writable_cells);
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "install_button")),
-                           found_any_writable_cells);
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "fade_button")),
-                           found_any_writable_cells);
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "unfade_button")),
-                           found_any_writable_cells);
-
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "fade_label")),
-                           (found_any_writable_cells &&
-                            (p->fade_p || p->unfade_p)));
-    gtk_widget_set_sensitive (
-                           GTK_WIDGET (name_to_widget (top, "fade_text")),
-                           (found_any_writable_cells &&
-                            (p->fade_p || p->unfade_p)));
+    SENSITIZE ("cmap_frame",      found_any_writable_cells);
+    SENSITIZE ("install_button",  found_any_writable_cells);
+    SENSITIZE ("fade_button",     found_any_writable_cells);
+    SENSITIZE ("unfade_button",   found_any_writable_cells);
+
+    SENSITIZE ("fade_label",      (found_any_writable_cells &&
+                                   (p->fade_p || p->unfade_p)));
+    SENSITIZE ("fade_spinbutton", (found_any_writable_cells &&
+                                   (p->fade_p || p->unfade_p)));
+
+# undef SENSITIZE
   }
+}
+
+
+static void
+populate_popup_window (state *s)
+{
+  saver_preferences *p = &s->prefs;
+  GtkWidget *parent = name_to_widget (s, "settings_vbox");
+  GtkLabel *doc = GTK_LABEL (name_to_widget (s, "doc"));
+  int list_elt = selected_list_element (s);
+  int hack_number = (list_elt >= 0 && list_elt < p->screenhacks_count
+                     ? s->list_elt_to_hack_number[list_elt]
+                     : -1);
+  screenhack *hack = (hack_number >= 0 ? p->screenhacks[hack_number] : 0);
+  char *doc_string = 0;
+
+# ifdef HAVE_XML
+  if (s->cdata)
+    {
+      free_conf_data (s->cdata);
+      s->cdata = 0;
+    }
+
+  if (hack)
+    {
+      GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text"));
+      const char *cmd_line = gtk_entry_get_text (GTK_ENTRY (cmd));
+      s->cdata = load_configurator (cmd_line, s->debug_p);
+      if (s->cdata && s->cdata->widget)
+        gtk_box_pack_start (GTK_BOX (parent), s->cdata->widget, TRUE, TRUE, 0);
+    }
+
+  doc_string = (s->cdata
+                ? s->cdata->description
+                : 0);
+# else  /* !HAVE_XML */
+  doc_string = "Descriptions not available: no XML support compiled in.";
+# endif /* !HAVE_XML */
 
+  gtk_label_set_text (doc, (doc_string
+                            ? doc_string
+                            : "No description available."));
 }
 
 
 static void
-sensitize_demo_widgets (GtkWidget *toplevel, Bool sensitive_p)
+sensitize_demo_widgets (state *s, Bool sensitive_p)
 {
-  const char *names[] = { "cmd_label", "cmd_text", "enabled",
-                          "visual", "visual_combo",
-                          "demo", "manual" };
+  const char *names1[] = { "demo", "settings" };
+  const char *names2[] = { "cmd_label", "cmd_text", "manual",
+                           "visual", "visual_combo" };
   int i;
-  for (i = 0; i < countof(names); i++)
+  for (i = 0; i < countof(names1); i++)
     {
-      GtkWidget *w = name_to_widget (toplevel, names[i]);
+      GtkWidget *w = name_to_widget (s, names1[i]);
+      gtk_widget_set_sensitive (GTK_WIDGET(w), sensitive_p);
+    }
+  for (i = 0; i < countof(names2); i++)
+    {
+      GtkWidget *w = name_to_widget (s, names2[i]);
       gtk_widget_set_sensitive (GTK_WIDGET(w), sensitive_p);
     }
-
-  /* I don't know how to handle these yet... */
-  {
-    const char *names2[] = { "cut_menu", "copy_menu", "paste_menu" };
-    for (i = 0; i < countof(names2); i++)
-      {
-        GtkWidget *w = name_to_widget (toplevel, names2[i]);
-        gtk_widget_set_sensitive (GTK_WIDGET(w), False);
-      }
-  }
 }
 
 
@@ -1705,43 +2061,61 @@ sensitize_demo_widgets (GtkWidget *toplevel, Bool sensitive_p)
    a string in their font, and resize them to just fit that.
  */
 static void
-fix_text_entry_sizes (GtkWidget *toplevel)
+fix_text_entry_sizes (state *s)
 {
-  const char *names[] = { "timeout_text", "cycle_text", "lock_text",
-                          "dpms_standby_text", "dpms_suspend_text",
-                          "dpms_off_text", "fade_text" };
+  const char * const spinbuttons[] = {
+    "timeout_spinbutton", "cycle_spinbutton", "lock_spinbutton",
+    "dpms_standby_spinbutton", "dpms_suspend_spinbutton",
+    "dpms_off_spinbutton",
+    "-fade_spinbutton" };
   int i;
   int width = 0;
   GtkWidget *w;
 
-  for (i = 0; i < countof(names); i++)
+  for (i = 0; i < countof(spinbuttons); i++)
     {
-      w = GTK_WIDGET (name_to_widget (toplevel, names[i]));
-      if (width == 0)
-        width = gdk_text_width (w->style->font, "00:00:00_", 9);
+      const char *n = spinbuttons[i];
+      int cols = 4;
+      while (*n == '-') n++, cols--;
+      w = GTK_WIDGET (name_to_widget (s, n));
+      width = gdk_text_width (w->style->font, "MMMMMMMM", cols);
       gtk_widget_set_usize (w, width, -2);
     }
 
-  /* Now fix the size of the combo box.
+  /* Now fix the width of the combo box.
    */
-  w = GTK_WIDGET (name_to_widget (GTK_WIDGET (toplevel), "visual_combo"));
+  w = GTK_WIDGET (name_to_widget (s, "visual_combo"));
   w = GTK_COMBO (w)->entry;
-  width = gdk_text_width (w->style->font, "PseudoColor___", 14);
+  width = gdk_string_width (w->style->font, "PseudoColor___");
   gtk_widget_set_usize (w, width, -2);
 
-  /* Now fix the size of the file entry text.
+  /* Now fix the width of the file entry text.
    */
-  w = GTK_WIDGET (name_to_widget (GTK_WIDGET (toplevel), "image_text"));
-  width = gdk_text_width (w->style->font, "MMMMMMMMMMMMMM", 14);
+  w = GTK_WIDGET (name_to_widget (s, "image_text"));
+  width = gdk_string_width (w->style->font, "mmmmmmmmmmmmmm");
   gtk_widget_set_usize (w, width, -2);
 
-#if 0
-  /* Now fix the size of the list.
+  /* Now fix the width of the command line text.
    */
-  w = GTK_WIDGET (name_to_widget (GTK_WIDGET (toplevel), "list"));
-  width = gdk_text_width (w->style->font, "nnnnnnnnnnnnnnnnnnnnnn", 22);
+  w = GTK_WIDGET (name_to_widget (s, "cmd_text"));
+  width = gdk_string_width (w->style->font, "mmmmmmmmmmmmmmmmmmmm");
   gtk_widget_set_usize (w, width, -2);
-#endif
+
+  /* Now fix the height of the list.
+   */
+  {
+    int lines = 10;
+    int height;
+    int leading = 3;  /* approximate is ok... */
+    int border = 2;
+    w = GTK_WIDGET (name_to_widget (s, "list"));
+    height = w->style->font->ascent + w->style->font->descent;
+    height += leading;
+    height *= lines;
+    height += border * 2;
+    w = GTK_WIDGET (name_to_widget (s, "scroller"));
+    gtk_widget_set_usize (w, -2, height);
+  }
 }
 
 
@@ -1809,7 +2183,7 @@ static char *down_arrow_xpm[] = {
 };
 
 static void
-pixmapify_button (GtkWidget *toplevel, int down_p)
+pixmapify_button (state *s, int down_p)
 {
   GdkPixmap *pixmap;
   GdkBitmap *mask;
@@ -1817,8 +2191,7 @@ pixmapify_button (GtkWidget *toplevel, int down_p)
   GtkStyle *style;
   GtkWidget *w;
 
-  w = GTK_WIDGET (name_to_widget (GTK_WIDGET (toplevel),
-                                  (down_p ? "next" : "prev")));
+  w = GTK_WIDGET (name_to_widget (s, (down_p ? "next" : "prev")));
   style = gtk_widget_get_style (w);
   mask = 0;
   pixmap = gdk_pixmap_create_from_xpm_d (w->window, &mask,
@@ -1835,13 +2208,15 @@ pixmapify_button (GtkWidget *toplevel, int down_p)
 static void
 map_next_button_cb (GtkWidget *w, gpointer user_data)
 {
-  pixmapify_button (w, 1);
+  state *s = (state *) user_data;
+  pixmapify_button (s, 1);
 }
 
 static void
 map_prev_button_cb (GtkWidget *w, gpointer user_data)
 {
-  pixmapify_button (w, 0);
+  state *s = (state *) user_data;
+  pixmapify_button (s, 0);
 }
 
 
@@ -1850,253 +2225,902 @@ map_prev_button_cb (GtkWidget *w, gpointer user_data)
  */
 
 static void
-you_are_not_a_unique_or_beautiful_snowflake (GtkWidget *label,
-                                             GtkAllocation *allocation,
-                                            void *foo)
+you_are_not_a_unique_or_beautiful_snowflake (GtkWidget *label,
+                                             GtkAllocation *allocation,
+                                            void *foo)
+{
+  GtkRequisition req;
+  GtkWidgetAuxInfo *aux_info;
+
+  aux_info = gtk_object_get_data (GTK_OBJECT (label), "gtk-aux-info");
+
+  aux_info->width = allocation->width;
+  aux_info->height = -2;
+  aux_info->x = -1;
+  aux_info->y = -1;
+
+  gtk_widget_size_request (label, &req);
+}
+
+
+/* Feel the love.  Thanks to Nat Friedman for finding this workaround.
+ */
+static void
+eschew_gtk_lossage (GtkLabel *label)
+{
+  GtkWidgetAuxInfo *aux_info = g_new0 (GtkWidgetAuxInfo, 1);
+  aux_info->width = GTK_WIDGET (label)->allocation.width;
+  aux_info->height = -2;
+  aux_info->x = -1;
+  aux_info->y = -1;
+
+  gtk_object_set_data (GTK_OBJECT (label), "gtk-aux-info", aux_info);
+
+  gtk_signal_connect (GTK_OBJECT (label), "size_allocate",
+                      you_are_not_a_unique_or_beautiful_snowflake,
+                      0);
+
+  gtk_widget_set_usize (GTK_WIDGET (label), -2, -2);
+
+  gtk_widget_queue_resize (GTK_WIDGET (label));
+}
+
+
+static void
+populate_demo_window (state *s, int list_elt)
+{
+  saver_preferences *p = &s->prefs;
+  screenhack *hack;
+  char *pretty_name;
+  GtkFrame *frame1 = GTK_FRAME (name_to_widget (s, "preview_frame"));
+  GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "doc_frame"));
+  GtkEntry *cmd    = GTK_ENTRY (name_to_widget (s, "cmd_text"));
+  GtkCombo *vis    = GTK_COMBO (name_to_widget (s, "visual_combo"));
+  GtkWidget *list  = GTK_WIDGET (name_to_widget (s, "list"));
+
+  if (p->mode == BLANK_ONLY)
+    {
+      hack = 0;
+      pretty_name = strdup ("Blank Screen");
+      schedule_preview (s, 0);
+    }
+  else if (p->mode == DONT_BLANK)
+    {
+      hack = 0;
+      pretty_name = strdup ("Screen Saver Disabled");
+      schedule_preview (s, 0);
+    }
+  else
+    {
+      int hack_number = (list_elt >= 0 && list_elt < p->screenhacks_count
+                         ? s->list_elt_to_hack_number[list_elt]
+                         : -1);
+      hack = (hack_number >= 0 ? p->screenhacks[hack_number] : 0);
+
+      pretty_name = (hack
+                     ? (hack->name
+                        ? strdup (hack->name)
+                        : make_hack_name (hack->command))
+                     : 0);
+
+      if (hack)
+        schedule_preview (s, hack->command);
+      else
+        schedule_preview (s, 0);
+    }
+
+  if (!pretty_name)
+    pretty_name = strdup ("Preview");
+
+  gtk_frame_set_label (frame1, pretty_name);
+  gtk_frame_set_label (frame2, pretty_name);
+
+  gtk_entry_set_text (cmd, (hack ? hack->command : ""));
+  gtk_entry_set_position (cmd, 0);
+
+  {
+    char title[255];
+    sprintf (title, "%s: %.100s Settings",
+             progclass, (pretty_name ? pretty_name : "???"));
+    gtk_window_set_title (GTK_WINDOW (s->popup_widget), title);
+  }
+
+  gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry),
+                      (hack
+                       ? (hack->visual && *hack->visual
+                          ? hack->visual
+                          : "Any")
+                       : ""));
+
+  sensitize_demo_widgets (s, (hack ? True : False));
+
+  if (pretty_name) free (pretty_name);
+
+  ensure_selected_item_visible (list);
+
+  s->_selected_list_element = list_elt;
+}
+
+
+static void
+widget_deleter (GtkWidget *widget, gpointer data)
+{
+  /* #### Well, I want to destroy these widgets, but if I do that, they get
+     referenced again, and eventually I get a SEGV.  So instead of
+     destroying them, I'll just hide them, and leak a bunch of memory
+     every time the disk file changes.  Go go go Gtk!
+
+     #### Ok, that's a lie, I get a crash even if I just hide the widget
+     and don't ever delete it.  Fuck!
+   */
+#if 0
+  gtk_widget_destroy (widget);
+#else
+  gtk_widget_hide (widget);
+#endif
+}
+
+
+static char **sort_hack_cmp_names_kludge;
+static int
+sort_hack_cmp (const void *a, const void *b)
+{
+  if (a == b)
+    return 0;
+  else
+    return strcmp (sort_hack_cmp_names_kludge[*(int *) a],
+                   sort_hack_cmp_names_kludge[*(int *) b]);
+}
+
+
+static void
+initialize_sort_map (state *s)
+{
+  saver_preferences *p = &s->prefs;
+  int i;
+
+  if (s->list_elt_to_hack_number) free (s->list_elt_to_hack_number);
+  if (s->hack_number_to_list_elt) free (s->hack_number_to_list_elt);
+
+  s->list_elt_to_hack_number = (int *)
+    calloc (sizeof(int), p->screenhacks_count + 1);
+  s->hack_number_to_list_elt = (int *)
+    calloc (sizeof(int), p->screenhacks_count + 1);
+
+  /* Initialize table to 1:1 mapping */
+  for (i = 0; i < p->screenhacks_count; i++)
+    s->list_elt_to_hack_number[i] = i;
+
+  /* Generate list of names (once)
+   */
+  sort_hack_cmp_names_kludge = (char **)
+    calloc (sizeof(char *), p->screenhacks_count);
+  for (i = 0; i < p->screenhacks_count; i++)
+    {
+      screenhack *hack = p->screenhacks[i];
+      char *name = (hack->name && *hack->name
+                    ? strdup (hack->name)
+                    : make_hack_name (hack->command));
+      char *str;
+      for (str = name; *str; str++)
+        *str = tolower(*str);
+      sort_hack_cmp_names_kludge[i] = name;
+    }
+
+  /* Sort alphabetically
+   */
+  qsort (s->list_elt_to_hack_number,
+         p->screenhacks_count,
+         sizeof(*s->list_elt_to_hack_number),
+         sort_hack_cmp);
+
+  /* Free names
+   */
+  for (i = 0; i < p->screenhacks_count; i++)
+    free (sort_hack_cmp_names_kludge[i]);
+  free (sort_hack_cmp_names_kludge);
+  sort_hack_cmp_names_kludge = 0;
+
+  /* Build inverse table */
+  for (i = 0; i < p->screenhacks_count; i++)
+    s->hack_number_to_list_elt[s->list_elt_to_hack_number[i]] = i;
+}
+
+
+static int
+maybe_reload_init_file (state *s)
+{
+  saver_preferences *p = &s->prefs;
+  int status = 0;
+
+  static Bool reentrant_lock = False;
+  if (reentrant_lock) return 0;
+  reentrant_lock = True;
+
+  if (init_file_changed_p (p))
+    {
+      const char *f = init_file_name();
+      char *b;
+      int list_elt;
+      GtkList *list;
+
+      if (!f || !*f) return 0;
+      b = (char *) malloc (strlen(f) + 1024);
+      sprintf (b,
+               "Warning:\n\n"
+               "file \"%s\" has changed, reloading.\n",
+               f);
+      warning_dialog (s->toplevel_widget, b, False, 100);
+      free (b);
+
+      load_init_file (p);
+      initialize_sort_map (s);
+
+      list_elt = selected_list_element (s);
+      list = GTK_LIST (name_to_widget (s, "list"));
+      gtk_container_foreach (GTK_CONTAINER (list), widget_deleter, NULL);
+      populate_hack_list (s);
+      force_list_select_item (s, list, list_elt, True);
+      populate_prefs_page (s);
+      populate_demo_window (s, list_elt);
+      ensure_selected_item_visible (GTK_WIDGET (list));
+
+      status = 1;
+    }
+
+  reentrant_lock = False;
+  return status;
+}
+
+
+\f
+/* Making the preview window have the right X visual (so that GL works.)
+ */
+
+static Visual *get_best_gl_visual (state *);
+
+static GdkVisual *
+x_visual_to_gdk_visual (Visual *xv)
+{
+  GList *gvs = gdk_list_visuals();
+  if (!xv) return gdk_visual_get_system();
+  for (; gvs; gvs = gvs->next)
+    {
+      GdkVisual *gv = (GdkVisual *) gvs->data;
+      if (xv == GDK_VISUAL_XVISUAL (gv))
+        return gv;
+    }
+  fprintf (stderr, "%s: couldn't convert X Visual 0x%lx to a GdkVisual\n",
+           blurb(), (unsigned long) xv->visualid);
+  abort();
+}
+
+static void
+clear_preview_window (state *s)
+{
+  GtkWidget *p;
+  GdkWindow *window;
+
+  if (!s->toplevel_widget) return;  /* very early */
+  p = name_to_widget (s, "preview");
+  window = p->window;
+
+  if (!window) return;
+
+  /* Flush the widget background down into the window, in case a subproc
+     has changed it. */
+  gdk_window_set_background (window, &p->style->bg[GTK_STATE_NORMAL]);
+  gdk_window_clear (window);
+
+  if (s->running_preview_error_p)
+    {
+      const char * const lines[] = { "No Preview", "Available" };
+      int lh = p->style->font->ascent + p->style->font->descent;
+      int y, i;
+      gint w, h;
+      gdk_window_get_size (window, &w, &h);
+      y = (h - (lh * countof(lines))) / 2;
+      y += p->style->font->ascent;
+      for (i = 0; i < countof(lines); i++)
+        {
+          int sw = gdk_string_width (p->style->font, lines[i]);
+          int x = (w - sw) / 2;
+          gdk_draw_string (window, p->style->font,
+                           p->style->fg_gc[GTK_STATE_NORMAL],
+                           x, y, lines[i]);
+          y += lh;
+        }
+    }
+
+  gdk_flush ();
+
+  /* Is there a GDK way of doing this? */
+  XSync (GDK_DISPLAY(), False);
+}
+
+
+static void
+fix_preview_visual (state *s)
+{
+  GtkWidget *widget = name_to_widget (s, "preview");
+  Visual *xvisual = get_best_gl_visual (s);
+  GdkVisual *visual = x_visual_to_gdk_visual (xvisual);
+  GdkVisual *dvisual = gdk_visual_get_system();
+  GdkColormap *cmap = (visual == dvisual
+                       ? gdk_colormap_get_system ()
+                       : gdk_colormap_new (visual, False));
+
+  if (s->debug_p)
+    fprintf (stderr, "%s: using %s visual 0x%lx\n", blurb(),
+             (visual == dvisual ? "default" : "non-default"),
+             (xvisual ? (unsigned long) xvisual->visualid : 0L));
+
+  if (!GTK_WIDGET_REALIZED (widget) ||
+      gtk_widget_get_visual (widget) != visual)
+    {
+      gtk_widget_unrealize (widget);
+      gtk_widget_set_visual (widget, visual);
+      gtk_widget_set_colormap (widget, cmap);
+      gtk_widget_realize (widget);
+    }
+
+  /* Set the Widget colors to be white-on-black. */
+  {
+    GdkWindow *window = widget->window;
+    GtkStyle *style = gtk_style_copy (widget->style);
+    GdkColormap *cmap = gtk_widget_get_colormap (widget);
+    GdkColor *fg = &style->fg[GTK_STATE_NORMAL];
+    GdkColor *bg = &style->bg[GTK_STATE_NORMAL];
+    GdkGC *fgc = gdk_gc_new(window);
+    GdkGC *bgc = gdk_gc_new(window);
+    if (!gdk_color_white (cmap, fg)) abort();
+    if (!gdk_color_black (cmap, bg)) abort();
+    gdk_gc_set_foreground (fgc, fg);
+    gdk_gc_set_background (fgc, bg);
+    gdk_gc_set_foreground (bgc, bg);
+    gdk_gc_set_background (bgc, fg);
+    style->fg_gc[GTK_STATE_NORMAL] = fgc;
+    style->bg_gc[GTK_STATE_NORMAL] = fgc;
+    gtk_widget_set_style (widget, style);
+  }
+
+  gtk_widget_show (widget);
+}
+
+\f
+/* Subprocesses
+ */
+
+static char *
+subproc_pretty_name (state *s)
+{
+  if (s->running_preview_cmd)
+    {
+      char *ps = strdup (s->running_preview_cmd);
+      char *ss = strchr (ps, ' ');
+      if (ss) *ss = 0;
+      ss = strrchr (ps, '/');
+      if (ss) *ss = 0;
+      else ss = ps;
+      return ss;
+    }
+  else
+    return strdup ("???");
+}
+
+
+static void
+reap_zombies (state *s)
+{
+  int wait_status = 0;
+  pid_t pid;
+  while ((pid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED)) > 0)
+    {
+      if (s->debug_p)
+        {
+          if (pid == s->running_preview_pid)
+            {
+              char *ss = subproc_pretty_name (s);
+              fprintf (stderr, "%s: pid %lu (%s) died\n", blurb(), pid, ss);
+              free (ss);
+            }
+          else
+            fprintf (stderr, "%s: pid %lu died\n", blurb(), pid);
+        }
+    }
+}
+
+
+/* Mostly lifted from driver/subprocs.c */
+static Visual *
+get_best_gl_visual (state *s)
+{
+  Display *dpy = GDK_DISPLAY();
+  pid_t forked;
+  int fds [2];
+  int in, out;
+  char buf[1024];
+
+  char *av[10];
+  int ac = 0;
+
+  av[ac++] = "xscreensaver-gl-helper";
+  av[ac] = 0;
+
+  if (pipe (fds))
+    {
+      perror ("error creating pipe:");
+      return 0;
+    }
+
+  in = fds [0];
+  out = fds [1];
+
+  switch ((int) (forked = fork ()))
+    {
+    case -1:
+      {
+        sprintf (buf, "%s: couldn't fork", blurb());
+        perror (buf);
+        exit (1);
+      }
+    case 0:
+      {
+        int stdout_fd = 1;
+
+        close (in);  /* don't need this one */
+        close (ConnectionNumber (dpy));                /* close display fd */
+
+        if (dup2 (out, stdout_fd) < 0)         /* pipe stdout */
+          {
+            perror ("could not dup() a new stdout:");
+            return 0;
+          }
+
+        execvp (av[0], av);                    /* shouldn't return. */
+
+        if (errno != ENOENT)
+          {
+            /* Ignore "no such file or directory" errors, unless verbose.
+               Issue all other exec errors, though. */
+            sprintf (buf, "%s: running %s", blurb(), av[0]);
+            perror (buf);
+          }
+        exit (1);                               /* exits fork */
+        break;
+      }
+    default:
+      {
+        int result = 0;
+        int wait_status = 0;
+
+        FILE *f = fdopen (in, "r");
+        unsigned long v = 0;
+        char c;
+
+        close (out);  /* don't need this one */
+
+        *buf = 0;
+        fgets (buf, sizeof(buf)-1, f);
+        fclose (f);
+
+        /* Wait for the child to die. */
+        waitpid (-1, &wait_status, 0);
+
+        if (1 == sscanf (buf, "0x%x %c", &v, &c))
+          result = (int) v;
+
+        if (result == 0)
+          {
+            if (s->debug_p)
+              fprintf (stderr, "%s: %s did not report a GL visual!\n",
+                       blurb(), av[0]);
+            return 0;
+          }
+        else
+          {
+            Visual *v = id_to_visual (DefaultScreenOfDisplay (dpy), result);
+            if (s->debug_p)
+              fprintf (stderr, "%s: %s says the GL visual is 0x%X.\n",
+                       blurb(), av[0], result);
+            if (!v) abort();
+            return v;
+          }
+      }
+    }
+
+  abort();
+}
+
+
+static void
+kill_preview_subproc (state *s)
 {
-  GtkRequisition req;
-  GtkWidgetAuxInfo *aux_info;
+  s->running_preview_error_p = False;
 
-  aux_info = gtk_object_get_data (GTK_OBJECT (label), "gtk-aux-info");
+  reap_zombies (s);
+  clear_preview_window (s);
 
-  aux_info->width = allocation->width;
-  aux_info->height = -2;
-  aux_info->x = -1;
-  aux_info->y = -1;
+  if (s->subproc_check_timer_id)
+    {
+      gtk_timeout_remove (s->subproc_check_timer_id);
+      s->subproc_check_timer_id = 0;
+      s->subproc_check_countdown = 0;
+    }
 
-  gtk_widget_size_request (label, &req);
+  if (s->running_preview_pid)
+    {
+      int status = kill (s->running_preview_pid, SIGTERM);
+      char *ss = subproc_pretty_name (s);
+
+      if (status < 0)
+        {
+          if (errno == ESRCH)
+            {
+              if (s->debug_p)
+                fprintf (stderr, "%s: pid %lu (%s) was already dead.\n",
+                         blurb(), s->running_preview_pid, ss);
+            }
+          else
+            {
+              char buf [1024];
+              sprintf (buf, "%s: couldn't kill pid %lu (%s)",
+                       blurb(), s->running_preview_pid, ss);
+              perror (buf);
+            }
+        }
+      else if (s->debug_p)
+        fprintf (stderr, "%s: killed pid %lu (%s)\n", blurb(),
+                 s->running_preview_pid, ss);
+
+      free (ss);
+      s->running_preview_pid = 0;
+      if (s->running_preview_cmd) free (s->running_preview_cmd);
+      s->running_preview_cmd = 0;
+    }
+
+  reap_zombies (s);
 }
 
 
-/* Feel the love.  Thanks to Nat Friedman for finding this workaround.
- */
 static void
-eschew_gtk_lossage (GtkWidget *toplevel)
+exec_program (const char *cmd, int nice_level)
 {
-  GtkWidgetAuxInfo *aux_info;
-  GtkWidget *label = GTK_WIDGET (name_to_widget (toplevel, "doc"));
+  char *av[1024];
+  int ac = 0;
+  char *token = strtok (strdup(cmd), " \t");
+  while (token)
+    {
+      av[ac++] = token;
+      token = strtok(0, " \t");
+    }
+  av[ac] = 0;
 
-  aux_info = g_new0 (GtkWidgetAuxInfo, 1);
-  aux_info->width = label->allocation.width;
-  aux_info->height = -2;
-  aux_info->x = -1;
-  aux_info->y = -1;
+  nice (nice_level - nice (0));
 
-  gtk_object_set_data (GTK_OBJECT (label), "gtk-aux-info", aux_info);
+  usleep (250000);  /* pause for 1/4th second before launching, to give the
+                       previous program time to die and flush its X buffer,
+                       so we don't get leftover turds on the window. */
 
-  gtk_signal_connect (GTK_OBJECT (label), "size_allocate",
-                     you_are_not_a_unique_or_beautiful_snowflake, NULL);
+  execvp (av[0], av);                  /* shouldn't return. */
 
-  gtk_widget_queue_resize (label); 
+  {
+    char buf [512];
+    sprintf (buf, "%s: could not execute \"%s\"", blurb(), av[0]);
+    perror (buf);
+  }
+  fflush(stderr);
+  fflush(stdout);
+  exit (1);    /* Note that this only exits a child fork.  */
 }
 
 
-char *
-get_hack_blurb (screenhack *hack)
+/* Immediately and unconditionally launches the given process,
+   after appending the -window-id option; sets running_preview_pid.
+ */
+static void
+launch_preview_subproc (state *s)
 {
-  char *doc_string;
-  char *prog_name = strdup (hack->command);
-  char *pretty_name = (hack->name
-                       ? strdup (hack->name)
-                       : make_hack_name (hack->command));
-  char doc_name[255], doc_class[255];
-  char *s, *s2;
+  saver_preferences *p = &s->prefs;
+  Window id;
+  Bool hairy_p;
+  char *new_cmd;
+  pid_t forked;
+  int nice_level = nice (0) - p->nice_inferior;
+  const char *cmd = s->desired_preview_cmd;
 
-  for (s = prog_name; *s && !isspace(*s); s++)
-    ;
-  *s = 0;
-  s = strrchr (prog_name, '/');
-  if (s) strcpy (prog_name, s+1);
+  GtkWidget *pr = name_to_widget (s, "preview");
+  GdkWindow *window = pr->window;
 
-  sprintf (doc_name,  "hacks.%s.documentation", pretty_name);
-  sprintf (doc_class, "hacks.%s.documentation", prog_name);
-  free (prog_name);
-  free (pretty_name);
+  s->running_preview_error_p = False;
 
-  doc_string = get_string_resource (doc_name, doc_class);
-  if (doc_string)
+  if (s->preview_suppressed_p)
     {
-      for (s = doc_string; *s; s++)
-        {
-          if (*s == '\n')
-            {
-              /* skip over whitespace at beginning of line */
-              s++;
-              while (*s && (*s == ' ' || *s == '\t'))
-                s++;
-            }
-          else if (*s == ' ' || *s == '\t')
-            {
-              /* compress all other horizontal whitespace. */
-              *s = ' ';
-              s++;
-              for (s2 = s; *s2 && (*s2 == ' ' || *s2 == '\t'); s2++)
-                ;
-              if (s2 > s) strcpy (s, s2);
-              s--;
-            }
-        }
+      kill_preview_subproc (s);
+      return;
+    }
 
-      while (*s && isspace (*s))      /* Strip trailing whitespace */
-        *(--s) = 0;
+  new_cmd = malloc (strlen (cmd) + 40);
 
-      /* Delete whitespace at end of each line. */
-      for (; s > doc_string; s--)
-        if (*s == '\n' && (s[-1] == ' ' || s[-1] == '\t'))
-          {
-            for (s2 = s-1;
-                 s2 > doc_string && (*s2 == ' ' || *s2 == '\t');
-                 s2--)
-              ;
-            s2++;
-            if (s2 < s) strcpy (s2, s);
-            s = s2;
-          }
-      
-      /* Delete leading blank lines. */
-      for (s = doc_string; *s == '\n'; s++)
-        ;
-      if (s > doc_string) strcpy (doc_string, s);
+  id = (window ? GDK_WINDOW_XWINDOW (window) : 0);
+  if (id == 0)
+    {
+      /* No window id?  No command to run. */
+      free (new_cmd);
+      new_cmd = 0;
     }
   else
     {
-      static int doc_installed = 0;
-      if (doc_installed == 0)
-        {
-          if (get_boolean_resource ("hacks.documentation.isInstalled",
-                                    "hacks.documentation.isInstalled"))
-            doc_installed = 1;
-          else
-            doc_installed = -1;
-        }
+      strcpy (new_cmd, cmd);
+      sprintf (new_cmd + strlen (new_cmd), " -window-id 0x%X", id);
+    }
 
-      if (doc_installed < 0)
-        doc_string =
-          strdup ("Error:\n\n"
-                  "The documentation strings do not appear to be "
-                  "installed.  This is probably because there is "
-                  "an \"XScreenSaver\" app-defaults file installed "
-                  "that is from an older version of the program. "
-                  "To fix this problem, delete that file, or "
-                  "install a current version (either will work.)");
-      else
-        doc_string = strdup ("");
+  hairy_p = (new_cmd && !!strpbrk (new_cmd, "*?$&!<>[];`'\\\"="));
+  if (hairy_p)
+    {
+      /* Command requires a full shell?  Forget it. */
+      free (new_cmd);
+      new_cmd = 0;
+      if (s->debug_p)
+        fprintf (stderr, "%s: command is hairy: not previewing\n", blurb());
+    }
+
+  kill_preview_subproc (s);
+  if (! new_cmd)
+    {
+      s->running_preview_error_p = True;
+      clear_preview_window (s);
+      return;
     }
 
-  return doc_string;
+  switch ((int) (forked = fork ()))
+    {
+    case -1:
+      {
+        char buf[255];
+        sprintf (buf, "%s: couldn't fork", blurb());
+        perror (buf);
+        s->running_preview_error_p = True;
+        return;
+      }
+    case 0:
+      {
+        close (ConnectionNumber (GDK_DISPLAY()));
+        exec_program (new_cmd, nice_level);
+        abort();
+        break;
+
+      default:
+
+        if (s->running_preview_cmd) free (s->running_preview_cmd);
+        s->running_preview_cmd = strdup (s->desired_preview_cmd);
+        s->running_preview_pid = forked;
+
+        if (s->debug_p)
+          {
+            char *ss = subproc_pretty_name (s);
+            fprintf (stderr, "%s: forked %lu (%s)\n", blurb(), forked, ss);
+            free (ss);
+          }
+        break;
+      }
+    }
+
+  schedule_preview_check (s);
 }
 
 
+/* Modify $DISPLAY and $PATH for the benefit of subprocesses.
+ */
 static void
-populate_demo_window (GtkWidget *toplevel, int which, prefs_pair *pair)
-{
-  saver_preferences *p = pair->a;
-  screenhack *hack = (which >= 0 && which < p->screenhacks_count
-                     ? p->screenhacks[which] : 0);
-  GtkFrame *frame = GTK_FRAME (name_to_widget (toplevel, "frame"));
-  GtkLabel *doc = GTK_LABEL (name_to_widget (toplevel, "doc"));
-  GtkEntry *cmd = GTK_ENTRY (name_to_widget (toplevel, "cmd_text"));
-  GtkToggleButton *enabled =
-    GTK_TOGGLE_BUTTON (name_to_widget (toplevel, "enabled"));
-  GtkCombo *vis = GTK_COMBO (name_to_widget (toplevel, "visual_combo"));
-
-  char *pretty_name = (hack
-                       ? (hack->name
-                          ? strdup (hack->name)
-                          : make_hack_name (hack->command))
-                       : 0);
-  char *doc_string = hack ? get_hack_blurb (hack) : 0;
-
-  gtk_frame_set_label (frame, (pretty_name ? pretty_name : ""));
-  gtk_label_set_text (doc, (doc_string ? doc_string : ""));
-  gtk_entry_set_text (cmd, (hack ? hack->command : ""));
-  gtk_entry_set_position (cmd, 0);
+hack_environment (state *s)
+{
+  static const char *def_path =
+# ifdef DEFAULT_PATH_PREFIX
+    DEFAULT_PATH_PREFIX;
+# else
+    "";
+# endif
 
-  updating_enabled_cb++;
-  gtk_toggle_button_set_active (enabled, (hack ? hack->enabled_p : False));
-  updating_enabled_cb--;
+  Display *dpy = GDK_DISPLAY();
+  const char *odpy = DisplayString (dpy);
+  char *ndpy = (char *) malloc(strlen(odpy) + 20);
+  strcpy (ndpy, "DISPLAY=");
+  strcat (ndpy, odpy);
+  if (putenv (ndpy))
+    abort ();
 
-  gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry),
-                      (hack
-                       ? (hack->visual && *hack->visual
-                          ? hack->visual
-                          : "Any")
-                       : ""));
+  if (s->debug_p)
+    fprintf (stderr, "%s: %s\n", blurb(), ndpy);
 
-  gtk_container_resize_children (GTK_CONTAINER (GTK_WIDGET (doc)->parent));
+  if (def_path && *def_path)
+    {
+      const char *opath = getenv("PATH");
+      char *npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20);
+      strcpy (npath, "PATH=");
+      strcat (npath, def_path);
+      strcat (npath, ":");
+      strcat (npath, opath);
+
+      if (putenv (npath))
+       abort ();
+
+      if (s->debug_p)
+        fprintf (stderr, "%s: added \"%s\" to $PATH\n", blurb(), def_path);
+    }
+}
 
-  sensitize_demo_widgets (toplevel, (hack ? True : False));
 
-  if (pretty_name) free (pretty_name);
-  if (doc_string) free (doc_string);
+/* Called from a timer:
+   Launches the currently-chosen subprocess, if it's not already running.
+   If there's a different process running, kills it.
+ */
+static int
+update_subproc_timer (gpointer data)
+{
+  state *s = (state *) data;
+  if (! s->desired_preview_cmd)
+    kill_preview_subproc (s);
+  else if (!s->running_preview_cmd ||
+           !!strcmp (s->desired_preview_cmd, s->running_preview_cmd))
+    launch_preview_subproc (s);
 
-  _selected_hack_number = which;
+  s->subproc_timer_id = 0;
+  return FALSE;  /* do not re-execute timer */
 }
 
 
+/* Call this when you think you might want a preview process running.
+   It will set a timer that will actually launch that program a second
+   from now, if you haven't changed your mind (to avoid double-click
+   spazzing, etc.)  `cmd' may be null meaning "no process".
+ */
 static void
-widget_deleter (GtkWidget *widget, gpointer data)
+schedule_preview (state *s, const char *cmd)
 {
-  /* #### Well, I want to destroy these widgets, but if I do that, they get
-     referenced again, and eventually I get a SEGV.  So instead of
-     destroying them, I'll just hide them, and leak a bunch of memory
-     every time the disk file changes.  Go go go Gtk!
+  int delay = 1000 * 0.5;   /* 1/2 second hysteresis */
 
-     #### Ok, that's a lie, I get a crash even if I just hide the widget
-     and don't ever delete it.  Fuck!
-   */
-#if 0
-  gtk_widget_destroy (widget);
-#else
-  gtk_widget_hide (widget);
-#endif
+  if (s->debug_p)
+    {
+      if (cmd)
+        fprintf (stderr, "%s: scheduling preview \"%s\"\n", blurb(), cmd);
+      else
+        fprintf (stderr, "%s: scheduling preview death\n", blurb());
+    }
+
+  if (s->desired_preview_cmd) free (s->desired_preview_cmd);
+  s->desired_preview_cmd = (cmd ? strdup (cmd) : 0);
+
+  if (s->subproc_timer_id)
+    gtk_timeout_remove (s->subproc_timer_id);
+  s->subproc_timer_id = gtk_timeout_add (delay, update_subproc_timer, s);
 }
 
 
+/* Called from a timer:
+   Checks to see if the subproc that should be running, actually is.
+ */
 static int
-maybe_reload_init_file (GtkWidget *widget, prefs_pair *pair)
+check_subproc_timer (gpointer data)
 {
-  int status = 0;
-  saver_preferences *p =  pair->a;
-
-  static Bool reentrant_lock = False;
-  if (reentrant_lock) return 0;
-  reentrant_lock = True;
+  state *s = (state *) data;
+  Bool again_p = True;
 
-  if (init_file_changed_p (p))
+  if (s->running_preview_error_p ||   /* already dead */
+      s->running_preview_pid <= 0)
     {
-      const char *f = init_file_name();
-      char *b;
-      int which;
-      GtkList *list;
+      again_p = False;
+    }
+  else
+    {
+      int status;
+      reap_zombies (s);
+      status = kill (s->running_preview_pid, 0);
+      if (status < 0 && errno == ESRCH)
+        s->running_preview_error_p = True;
 
-      if (!f || !*f) return 0;
-      b = (char *) malloc (strlen(f) + 1024);
-      sprintf (b,
-               "Warning:\n\n"
-               "file \"%s\" has changed, reloading.\n",
-               f);
-      warning_dialog (widget, b, False, 100);
-      free (b);
+      if (s->debug_p)
+        {
+          char *ss = subproc_pretty_name (s);
+          fprintf (stderr, "%s: timer: pid %lu (%s) is %s\n", blurb(),
+                   s->running_preview_pid, ss,
+                   (s->running_preview_error_p ? "dead" : "alive"));
+          free (ss);
+        }
 
-      load_init_file (p);
+      if (s->running_preview_error_p)
+        {
+          clear_preview_window (s);
+          again_p = False;
+        }
+    }
 
-      which = selected_hack_number (widget);
-      list = GTK_LIST (name_to_widget (widget, "list"));
-      gtk_container_foreach (GTK_CONTAINER (list), widget_deleter, NULL);
-      populate_hack_list (widget, pair);
-      gtk_list_select_item (list, which);
-      populate_prefs_page (widget, pair);
-      populate_demo_window (widget, which, pair);
-      ensure_selected_item_visible (GTK_WIDGET (list));
+  /* Otherwise, it's currently alive.  We might be checking again, or we
+     might be satisfied. */
 
-      status = 1;
+  if (--s->subproc_check_countdown <= 0)
+    again_p = False;
+
+  if (again_p)
+    return TRUE;     /* re-execute timer */
+  else
+    {
+      s->subproc_check_timer_id = 0;
+      s->subproc_check_countdown = 0;
+      return FALSE;  /* do not re-execute timer */
     }
+}
 
-  reentrant_lock = False;
-  return status;
+
+/* Call this just after launching a subprocess.
+   This sets a timer that will, five times a second for two seconds,
+   check whether the program is still running.  The assumption here
+   is that if the process didn't stay up for more than a couple of
+   seconds, then either the program doesn't exist, or it doesn't
+   take a -window-id argument.
+ */
+static void
+schedule_preview_check (state *s)
+{
+  int seconds = 2;
+  int ticks = 5;
+
+  if (s->debug_p)
+    fprintf (stderr, "%s: scheduling check\n", blurb());
+
+  if (s->subproc_check_timer_id)
+    gtk_timeout_remove (s->subproc_check_timer_id);
+  s->subproc_check_timer_id =
+    gtk_timeout_add (1000 / ticks,
+                     check_subproc_timer, (gpointer) s);
+  s->subproc_check_countdown = ticks * seconds;
+}
+
+
+static Bool
+screen_blanked_p (void)
+{
+  Atom type;
+  int format;
+  unsigned long nitems, bytesafter;
+  CARD32 *data = 0;
+  Display *dpy = GDK_DISPLAY();
+  Bool blanked_p = False;
+
+  if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */
+                          XA_SCREENSAVER_STATUS,
+                          0, 3, False, XA_INTEGER,
+                          &type, &format, &nitems, &bytesafter,
+                          (unsigned char **) &data)
+      == Success
+      && type == XA_INTEGER
+      && nitems >= 3
+      && data)
+    blanked_p = (data[0] == XA_BLANK || data[0] == XA_LOCK);
+
+  if (data) free (data);
+
+  return blanked_p;
 }
 
+/* Wake up every now and then and see if the screen is blanked.
+   If it is, kill off the small-window demo -- no point in wasting
+   cycles by running two screensavers at once...
+ */
+static int
+check_blanked_timer (gpointer data)
+{
+  state *s = (state *) data;
+  Bool blanked_p = screen_blanked_p ();
+  if (blanked_p && s->running_preview_pid)
+    {
+      if (s->debug_p)
+        fprintf (stderr, "%s: screen is blanked: killing preview\n", blurb());
+      kill_preview_subproc (s);
+    }
+
+  return True;  /* re-execute timer */
+}
 
 \f
 /* Setting window manager icon
@@ -2143,7 +3167,7 @@ mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks,
 
 
 static void
-the_network_is_not_the_computer (GtkWidget *parent)
+the_network_is_not_the_computer (state *s)
 {
   Display *dpy = GDK_DISPLAY();
   char *rversion, *ruser, *rhost;
@@ -2208,11 +3232,11 @@ the_network_is_not_the_computer (GtkWidget *parent)
              "xscreensaver as \"%s\".\n"
               "\n"
               "Restart the xscreensaver daemon now?\n",
-             progname, luser, lhost,
+             blurb(), luser, lhost,
              d,
              (ruser ? ruser : "???"), (rhost ? rhost : "???"),
-             progname,
-             progname, (ruser ? ruser : "???"),
+             blurb(),
+             blurb(), (ruser ? ruser : "???"),
              luser);
     }
   else if (rhost && *rhost && !!strcmp (rhost, lhost))
@@ -2230,14 +3254,14 @@ the_network_is_not_the_computer (GtkWidget *parent)
               "%s won't work right.\n"
                "\n"
                "Restart the daemon on \"%s\" as \"%s\" now?\n",
-              progname, luser, lhost,
+              blurb(), luser, lhost,
               d,
               (ruser ? ruser : "???"), (rhost ? rhost : "???"),
               luser,
-              progname,
+              blurb(),
                lhost, luser);
     }
-  else if (!!strcmp (rversion, short_version))
+  else if (!!strcmp (rversion, s->short_version))
     {
       /* Warn that the version numbers don't match.
        */
@@ -2248,14 +3272,14 @@ the_network_is_not_the_computer (GtkWidget *parent)
               "is version %s.  This could cause problems.\n"
               "\n"
               "Restart the xscreensaver daemon now?\n",
-              progname, short_version,
+              blurb(), s->short_version,
               d,
               rversion);
     }
 
 
   if (*msg)
-    warning_dialog (parent, msg, True, 1);
+    warning_dialog (s->toplevel_widget, msg, True, 1);
 
   free (msg);
 }
@@ -2267,9 +3291,13 @@ the_network_is_not_the_computer (GtkWidget *parent)
 static int
 demo_ehandler (Display *dpy, XErrorEvent *error)
 {
-  fprintf (stderr, "\nX error in %s:\n", progname);
+  state *s = global_state_kludge;  /* I hate C so much... */
+  fprintf (stderr, "\nX error in %s:\n", blurb());
   if (XmuPrintDefaultErrorMessage (dpy, error, stderr))
-    exit (-1);
+    {
+      kill_preview_subproc (s);
+      exit (-1);
+    }
   else
     fprintf (stderr, " (nonfatal.)\n");
   return 0;
@@ -2293,7 +3321,8 @@ g_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
   if (strstr (message, "unknown window"))
     return;
 
-  fprintf (stderr, "%s: %s-%s: %s%s", blurb(), log_domain,
+  fprintf (stderr, "%s: %s-%s: %s%s", blurb(),
+           (log_domain ? log_domain : progclass),
            (log_level == G_LOG_LEVEL_ERROR    ? "error" :
             log_level == G_LOG_LEVEL_CRITICAL ? "critical" :
             log_level == G_LOG_LEVEL_WARNING  ? "warning" :
@@ -2319,19 +3348,65 @@ static struct poptOption crapplet_options[] = {
 #endif /* HAVE_CRAPPLET */
 #endif /* 0 */
 
-#define USAGE() \
-  fprintf (stderr, "usage: %s [ -display dpy-string ] [ -prefs ]\n", \
-           real_progname)
+const char *usage = "[--display dpy] [--prefs]"
+# ifdef HAVE_CRAPPLET
+                    " [--crapplet]"
+# endif
+                    " [--debug]";
+
+
+static void
+map_popup_window_cb (GtkWidget *w, gpointer user_data)
+{
+  state *s = (state *) user_data;
+  Boolean oi = s->initializing_p;
+  GtkLabel *label = GTK_LABEL (name_to_widget (s, "doc"));
+  s->initializing_p = True;
+  eschew_gtk_lossage (label);
+  s->initializing_p = oi;
+}
 
 
+#if 0
 static void
-map_window_cb (GtkWidget *w, gpointer user_data)
+print_widget_tree (GtkWidget *w, int depth)
+{
+  int i;
+  for (i = 0; i < depth; i++)
+    fprintf (stderr, "  ");
+  fprintf (stderr, "%s\n", gtk_widget_get_name (w));
+
+  if (GTK_IS_LIST (w))
+    {
+      for (i = 0; i < depth+1; i++)
+        fprintf (stderr, "  ");
+      fprintf (stderr, "...list kids...\n");
+    }
+  else if (GTK_IS_CONTAINER (w))
+    {
+      GList *kids = gtk_container_children (GTK_CONTAINER (w));
+      while (kids)
+        {
+          print_widget_tree (GTK_WIDGET (kids->data), depth+1);
+          kids = kids->next;
+        }
+    }
+}
+#endif /* 0 */
+
+static int
+delayed_scroll_kludge (gpointer data)
 {
-  Boolean oi = initializing_p;
-  initializing_p = True;
-  eschew_gtk_lossage (w);
-  ensure_selected_item_visible (GTK_WIDGET(name_to_widget(w, "list")));
-  initializing_p = oi;
+  state *s = (state *) data;
+  GtkWidget *w = GTK_WIDGET (name_to_widget (s, "list"));
+  ensure_selected_item_visible (w);
+
+  /* Oh, this is just fucking lovely, too. */
+  w = GTK_WIDGET (name_to_widget (s, "preview"));
+  gtk_widget_hide (w);
+  gtk_widget_show (w);
+
+  return FALSE;  /* do not re-execute timer */
 }
 
 
@@ -2339,36 +3414,32 @@ int
 main (int argc, char **argv)
 {
   XtAppContext app;
-  prefs_pair Pair, *pair;
-  saver_preferences P, P2, *p, *p2;
+  state S, *s;
+  saver_preferences *p;
   Bool prefs = False;
   int i;
   Display *dpy;
   Widget toplevel_shell;
-  GtkWidget *gtk_window;
   char *real_progname = argv[0];
-  char *s;
-
-  initializing_p = True;
+  char window_title[255];
+  Bool crapplet_p = False;
+  char *str;
 
-  s = strrchr (real_progname, '/');
-  if (s) real_progname = s+1;
+  str = strrchr (real_progname, '/');
+  if (str) real_progname = str+1;
 
-  p = &P;
-  p2 = &P2;
-  pair = &Pair;
-  pair->a = p;
-  pair->b = p2;
-  memset (p,  0, sizeof (*p));
-  memset (p2, 0, sizeof (*p2));
+  s = &S;
+  memset (s, 0, sizeof(*s));
+  s->initializing_p = True;
+  p = &s->prefs;
 
-  global_prefs_pair = pair;  /* I hate C so much... */
+  global_state_kludge = s;  /* I hate C so much... */
 
   progname = real_progname;
 
-  short_version = (char *) malloc (5);
-  memcpy (short_version, screensaver_id + 17, 4);
-  short_version [4] = 0;
+  s->short_version = (char *) malloc (5);
+  memcpy (s->short_version, screensaver_id + 17, 4);
+  s->short_version [4] = 0;
 
 
   /* Register our error message logger for every ``log domain'' known.
@@ -2376,12 +3447,17 @@ main (int argc, char **argv)
      for all of the domains that seem to be in use.
   */
   {
-    const char * const domains[] = { "Gtk", "Gdk", "GLib", "GModule",
-                                     "GThread", "Gnome", "GnomeUI", 0 };
-    for (i = 0; domains[i]; i++)
+    const char * const domains[] = { 0,
+                                     "Gtk", "Gdk", "GLib", "GModule",
+                                     "GThread", "Gnome", "GnomeUI" };
+    for (i = 0; i < countof(domains); i++)
       g_log_set_handler (domains[i], G_LOG_LEVEL_MASK, g_log_handler, 0);
   }
 
+#ifdef DEFAULT_ICONDIR  /* from -D on compile line */
+  add_pixmap_directory (DEFAULT_ICONDIR);
+#endif
+
   /* This is gross, but Gtk understands --display and not -display...
    */
   for (i = 1; i < argc; i++)
@@ -2406,10 +3482,21 @@ main (int argc, char **argv)
 # else  /* !HAVE_CRAPPLET */
         fprintf (stderr, "%s: not compiled with --crapplet support\n",
                  real_progname);
-        USAGE ();
+        fprintf (stderr, "%s: %s\n", real_progname, usage);
         exit (1);
 # endif /* !HAVE_CRAPPLET */
       }
+  else if (argv[i] &&
+           (!strcmp(argv[i], "--debug") ||
+            !strcmp(argv[i], "-debug") ||
+            !strcmp(argv[i], "-d")))
+    {
+      int j;
+      s->debug_p = True;
+      for (j = i; j < argc; j++)  /* remove it from the list */
+        argv[j] = argv[j+1];
+      argc--;
+    }
 
   /* Let Gtk open the X connection, then initialize Xt to use that
      same connection.  Doctor Frankenstein would be proud.
@@ -2421,7 +3508,7 @@ main (int argc, char **argv)
       GnomeClientFlags flags = 0;
 
       int init_results = gnome_capplet_init ("screensaver-properties",
-                                             short_version,
+                                             s->short_version,
                                              argc, argv, NULL, 0, NULL);
       /* init_results is:
          0 upon successful initialization;
@@ -2514,16 +3601,18 @@ main (int argc, char **argv)
   XtGetApplicationNameAndClass (dpy, &progname, &progclass);
   XSetErrorHandler (demo_ehandler);
 
+  /* Let's just ignore these.  They seem to confuse Irix Gtk... */
+  signal (SIGPIPE, SIG_IGN);
 
   /* After doing Xt-style command-line processing, complain about any
      unrecognized command-line arguments.
    */
   for (i = 1; i < argc; i++)
     {
-      char *s = argv[i];
-      if (s[0] == '-' && s[1] == '-')
-       s++;
-      if (!strcmp (s, "-prefs"))
+      char *str = argv[i];
+      if (str[0] == '-' && str[1] == '-')
+       str++;
+      if (!strcmp (str, "-prefs"))
        prefs = True;
       else if (crapplet_p)
         /* There are lots of random args that we don't care about when we're
@@ -2532,7 +3621,7 @@ main (int argc, char **argv)
       else
        {
          fprintf (stderr, "%s: unknown option: %s\n", real_progname, argv[i]);
-          USAGE ();
+          fprintf (stderr, "%s: %s\n", real_progname, usage);
           exit (1);
        }
     }
@@ -2544,7 +3633,7 @@ main (int argc, char **argv)
    */
   p->db = db;
   load_init_file (p);
-  *p2 = *p;
+  initialize_sort_map (s);
 
   /* Now that Xt has been initialized, and the resources have been read,
      we can set our `progname' variable to something more in line with
@@ -2584,12 +3673,13 @@ main (int argc, char **argv)
 
   /* Create the window and all its widgets.
    */
-  gtk_window = create_xscreensaver_demo ();
-  toplevel_widget = gtk_window;
+  s->base_widget     = create_xscreensaver_demo ();
+  s->popup_widget    = create_xscreensaver_settings_dialog ();
+  s->toplevel_widget = s->base_widget;
+
 
-  /* Set the window's title. */
+  /* Set the main window's title. */
   {
-    char title[255];
     char *v = (char *) strdup(strchr(screensaver_id, ' '));
     char *s1, *s2, *s3, *s4;
     s1 = (char *) strchr(v,  ' '); s1++;
@@ -2598,38 +3688,77 @@ main (int argc, char **argv)
     s4 = (char *) strchr(s3, ')');
     *s2 = 0;
     *s4 = 0;
-    sprintf (title, "%.50s %.50s, %.50s", progclass, s1, s3);
-    gtk_window_set_title (GTK_WINDOW (gtk_window), title);
+    sprintf (window_title, "%.50s %.50s, %.50s", progclass, s1, s3);
+    gtk_window_set_title (GTK_WINDOW (s->toplevel_widget), window_title);
+    gtk_window_set_title (GTK_WINDOW (s->popup_widget),    window_title);
     free (v);
   }
 
+  /* Adjust the (invisible) notebooks on the popup dialog... */
+  {
+    GtkNotebook *notebook =
+      GTK_NOTEBOOK (name_to_widget (s, "opt_notebook"));
+    GtkWidget *std = GTK_WIDGET (name_to_widget (s, "std_button"));
+    int page = 0;
+
+# ifdef HAVE_XML
+    gtk_widget_hide (std);
+# else  /* !HAVE_XML */
+    /* Make the advanced page be the only one available. */
+    gtk_widget_set_sensitive (std, False);
+    std = GTK_WIDGET (name_to_widget (s, "adv_button"));
+    gtk_widget_hide (std);
+    page = 1;
+# endif /* !HAVE_XML */
+
+    gtk_notebook_set_page (notebook, page);
+    gtk_notebook_set_show_tabs (notebook, False);
+  }
+
   /* Various other widget initializations...
    */
-  gtk_signal_connect (GTK_OBJECT (gtk_window), "delete_event",
-                      GTK_SIGNAL_FUNC (wm_close_cb), NULL);
-
-  populate_hack_list (gtk_window, pair);
-  populate_prefs_page (gtk_window, pair);
-  sensitize_demo_widgets (gtk_window, False);
-  fix_text_entry_sizes (gtk_window);
-  scroll_to_current_hack (gtk_window, pair);
-
-  gtk_signal_connect (
-              GTK_OBJECT (name_to_widget (GTK_WIDGET (gtk_window), "list")),
-              "map", GTK_SIGNAL_FUNC(map_window_cb), 0);
-  gtk_signal_connect (
-              GTK_OBJECT (name_to_widget (GTK_WIDGET (gtk_window), "prev")),
-              "map", GTK_SIGNAL_FUNC(map_prev_button_cb), 0);
-  gtk_signal_connect (
-              GTK_OBJECT (name_to_widget (GTK_WIDGET (gtk_window), "next")),
-              "map", GTK_SIGNAL_FUNC(map_next_button_cb), 0);
+  gtk_signal_connect (GTK_OBJECT (s->toplevel_widget), "delete_event",
+                      GTK_SIGNAL_FUNC (wm_toplevel_close_cb),
+                      (gpointer) s);
+  gtk_signal_connect (GTK_OBJECT (s->popup_widget), "delete_event",
+                      GTK_SIGNAL_FUNC (wm_popup_close_cb),
+                      (gpointer) s);
+
+  populate_hack_list (s);
+  populate_prefs_page (s);
+  sensitize_demo_widgets (s, False);
+  fix_text_entry_sizes (s);
+  scroll_to_current_hack (s);
+
+  gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "cancel_button")),
+                      "map", GTK_SIGNAL_FUNC(map_popup_window_cb),
+                      (gpointer) s);
+
+  gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "prev")),
+                      "map", GTK_SIGNAL_FUNC(map_prev_button_cb),
+                      (gpointer) s);
+  gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "next")),
+                      "map", GTK_SIGNAL_FUNC(map_next_button_cb),
+                      (gpointer) s);
+
+
+  /* Hook up callbacks to the items on the mode menu. */
+  {
+    GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu"));
+    GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt));
+    GList *kids = gtk_container_children (GTK_CONTAINER (menu));
+    for (; kids; kids = kids->next)
+      gtk_signal_connect (GTK_OBJECT (kids->data), "activate",
+                          GTK_SIGNAL_FUNC (mode_menu_item_cb),
+                          (gpointer) s);
+  }
 
 
   /* Handle the -prefs command-line argument. */
   if (prefs)
     {
       GtkNotebook *notebook =
-        GTK_NOTEBOOK (name_to_widget (gtk_window, "notebook"));
+        GTK_NOTEBOOK (name_to_widget (s, "notebook"));
       gtk_notebook_set_page (notebook, 1);
     }
 
@@ -2637,39 +3766,71 @@ main (int argc, char **argv)
   if (crapplet_p)
     {
       GtkWidget *capplet;
-      GtkWidget *top_vbox;
+      GtkWidget *outer_vbox;
 
-      capplet = capplet_widget_new ();
-
-      top_vbox = GTK_BIN (gtk_window)->child;
+      gtk_widget_hide (s->toplevel_widget);
 
-      gtk_widget_ref (top_vbox);
-      gtk_container_remove (GTK_CONTAINER (gtk_window), top_vbox);
-      GTK_OBJECT_SET_FLAGS (top_vbox, GTK_FLOATING);
+      capplet = capplet_widget_new ();
 
-      /* In crapplet-mode, take off the menubar. */
-      gtk_widget_hide (name_to_widget (gtk_window, "menubar"));
+      /* Make there be a "Close" button instead of "OK" and "Cancel" */
+      capplet_widget_changes_are_immediate (CAPPLET_WIDGET (capplet));
 
-      gtk_container_add (GTK_CONTAINER (capplet), top_vbox);
-      gtk_widget_show (capplet);
-      gtk_widget_hide (gtk_window);
+# if 1
+        /* In crapplet-mode, take off the menubar. */
+        gtk_widget_hide (name_to_widget (s, "menubar"));
+# endif
 
-      /* Hook up the Control Center's redundant Help button, too. */
-      gtk_signal_connect (GTK_OBJECT (capplet), "help",
-                          GTK_SIGNAL_FUNC (doc_menu_cb), 0);
+      /* Reparent our top-level container to be a child of the capplet
+         window.
+       */
+      outer_vbox = GTK_BIN (s->toplevel_widget)->child;
+      gtk_widget_ref (outer_vbox);
+      gtk_container_remove (GTK_CONTAINER (s->toplevel_widget),
+                            outer_vbox);
+      GTK_OBJECT_SET_FLAGS (outer_vbox, GTK_FLOATING);
+      gtk_container_add (GTK_CONTAINER (capplet), outer_vbox);
+
+      /* Find the window above us, and set the title and close handler. */
+      {
+        GtkWidget *window = capplet;
+        while (window && !GTK_IS_WINDOW (window))
+          window = window->parent;
+        if (window)
+          {
+            gtk_window_set_title (GTK_WINDOW (window), window_title);
+            gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+                                GTK_SIGNAL_FUNC (wm_toplevel_close_cb),
+                                (gpointer) s);
+          }
+      }
 
-      /* Issue any warnings about the running xscreensaver daemon. */
-      the_network_is_not_the_computer (top_vbox);
+      s->toplevel_widget = capplet;
     }
-  else
 # endif /* HAVE_CRAPPLET */
-    {
-      gtk_widget_show (gtk_window);
-      init_icon (GTK_WIDGET(gtk_window)->window);
 
-      /* Issue any warnings about the running xscreensaver daemon. */
-      the_network_is_not_the_computer (gtk_window);
-    }
+
+  gtk_widget_show (s->toplevel_widget);
+  init_icon (GTK_WIDGET (s->toplevel_widget)->window);  /* after `show' */
+  hack_environment (s);
+  fix_preview_visual (s);
+
+  /* Realize page zero, so that we can diddle the scrollbar when the
+     user tabs back to it -- otherwise, the current hack isn't scrolled
+     to the first time they tab back there, when started with "-prefs".
+     (Though it is if they then tab away, and back again.)
+
+     #### Bah!  This doesn't work.  Gtk eats my ass!  Someone who
+     #### understands this crap, explain to me how to make this work.
+  */
+  gtk_widget_realize (name_to_widget (s, "demos_table"));
+
+
+  gtk_timeout_add (60 * 1000, check_blanked_timer, s);
+
+
+  /* Issue any warnings about the running xscreensaver daemon. */
+  the_network_is_not_the_computer (s);
+
 
   /* Run the Gtk event loop, and not the Xt event loop.  This means that
      if there were Xt timers or fds registered, they would never get serviced,
@@ -2678,7 +3839,27 @@ main (int argc, char **argv)
      Xt so that we could process the command line and use the X resource
      manager.
    */
-  initializing_p = False;
+  s->initializing_p = False;
+
+  /* This totally sucks -- set a timer that whacks the scrollbar 0.5 seconds
+     after we start up.  Otherwise, it always appears scrolled to the top
+     when in crapplet-mode. */
+  gtk_timeout_add (500, delayed_scroll_kludge, s);
+
+
+#if 0
+  /* Load every configurator in turn, to scan them for errors all at once. */
+  {
+    int i;
+    for (i = 0; i < p->screenhacks_count; i++)
+      {
+        screenhack *hack = p->screenhacks[s->hack_number_to_list_elt[i]];
+        conf_data *d = load_configurator (hack->command, False);
+        if (d) free_conf_data (d);
+      }
+  }
+#endif
+
 
 # ifdef HAVE_CRAPPLET
   if (crapplet_p)
@@ -2687,6 +3868,7 @@ main (int argc, char **argv)
 # endif /* HAVE_CRAPPLET */
     gtk_main ();
 
+  kill_preview_subproc (s);
   exit (0);
 }
 
index 80094ca53ebb63572c93c5bfe6e49d6a7f34f8a1..09199d9f06d58744938673fa7864a72273b2fa41 100644 (file)
@@ -46,6 +46,7 @@
 #endif /* HAVE_XMCOMBOBOX */
 
 #include <stdio.h>
+#include <stdlib.h>
 
 
 
@@ -457,6 +458,111 @@ create_demos_page (Widget parent)
 static Widget
 create_options_page (Widget parent)
 {
+  /* This is what the layout is today:
+
+     Form (horizontal)
+       Label ("Saver Timeout")
+       Label ("Cycle Timeout")
+       Label ("Fade Duration")
+       Label ("Fade Ticks")
+       Label ("Lock Timeout")
+       Label ("Password Timeout")
+
+       Text (timeout)
+       Text (cycle)
+       Text (fade seconds)
+       Text (fade ticks)
+       Text (lock)
+       Text (passwd)
+
+       Toggle ("Verbose")
+       Toggle ("Install Colormap")
+       Toggle ("Fade Colormap")
+       Toggle ("Unfade Colormap")
+       Toggle ("Require Password")
+
+       HR
+       Button ("OK")
+       Button ("Cancel")
+   */
+
+  /* This is what it should be:
+
+     Form (horizontal)
+       Form (vertical) ("column1")
+         Frame
+           Label ("Blanking and Locking")
+           Form
+             Label ("Blank After")
+             Label ("Cycle After")
+             Text ("Blank After")
+             Text ("Cycle After")
+             HR
+             Checkbox ("Require Password")
+             Label ("Lock After")
+             Text ("Lock After")
+         Frame
+           Label ("Image Manipulation")
+           Form
+             Checkbox ("Grab Desktop Images")
+             Checkbox ("Grab Video Frames")
+             Checkbox ("Choose Random Image")
+             Text (pathname)
+             Button ("Browse")
+         Frame
+           Label ("Diagnostics")
+           Form
+             Checkbox ("Verbose Diagnostics")
+             Checkbox ("Display Subprocess Errors")
+             Checkbox ("Display Splash Screen at Startup")
+       Form (vertical) ("column2")
+         Frame
+           Label ("Display Power Management")
+           Form
+             Checkbox ("Power Management Enabled")
+             Label ("Standby After")
+             Label ("Suspend After")
+             Label ("Off After")
+             Text ("Standby After")
+             Text ("Suspend After")
+             Text ("Off After")
+         Frame
+           Label ("Colormaps")
+           Form
+             Checkbox ("Install Colormap")
+             HR
+             Checkbox ("Fade To Black When Blanking")
+             Checkbox ("Fade From Black When Unblanking")
+             Label ("Fade Duration")
+             Text ("Fade Duration")
+
+       timeoutLabel
+       cycleLabel
+       fadeSecondsLabel
+       fadeTicksLabel
+       lockLabel
+       passwdLabel
+
+       timeoutText
+       cycleText
+       fadeSecondsText
+       fadeTicksText
+       lockText
+       passwdText
+
+       verboseToggle
+       cmapToggle
+       fadeToggle
+       unfadeToggle
+       lockToggle
+
+       separator
+       OK
+       Cancel
+   */
+
+
+
   Arg av[64];
   int ac = 0;
   Widget children[100];
index 0e8e5dff4af9c1019f4e934459c117fb53221932..aad2cc6f58530d849f3d0b35849005a197697558 100644 (file)
@@ -75,6 +75,9 @@ enum passwd_state { pw_read, pw_ok, pw_null, pw_fail, pw_cancel, pw_time };
 
 struct passwd_dialog_data {
 
+  saver_screen_info *prompt_screen;
+  int previous_mouse_x, previous_mouse_y;
+
   enum passwd_state state;
   char typed_passwd [80];
   XtIntervalId timer;
@@ -141,11 +144,19 @@ make_passwd_window (saver_info *si)
   struct passwd *p = getpwuid (getuid ());
   XSetWindowAttributes attrs;
   unsigned long attrmask = 0;
-  Screen *screen = si->default_screen->screen;
   passwd_dialog_data *pw = (passwd_dialog_data *) calloc (1, sizeof(*pw));
-  Colormap cmap = DefaultColormapOfScreen (screen);
+  Screen *screen;
+  Colormap cmap;
   char *f;
 
+  pw->prompt_screen = &si->screens [mouse_screen (si)];
+  if (si->prefs.verbose_p)
+    fprintf (stderr, "%s: %d: creating password dialog.\n",
+             blurb(), pw->prompt_screen->number);
+
+  screen = pw->prompt_screen->screen;
+  cmap = DefaultColormapOfScreen (screen);
+
   pw->ratio = 1.0;
 
   pw->heading_label = get_string_resource ("passwd.heading.label",
@@ -335,9 +346,40 @@ make_passwd_window (saver_info *si)
   attrmask |= CWOverrideRedirect; attrs.override_redirect = True;
   attrmask |= CWEventMask; attrs.event_mask = ExposureMask|KeyPressMask;
 
+  /* We need to remember the mouse position and restore it afterward, or
+     sometimes (perhaps only with Xinerama?) the mouse gets warped to
+     inside the bounds of the lock dialog window.
+   */
+  {
+    Window pointer_root, pointer_child;
+    int root_x, root_y, win_x, win_y;
+    unsigned int mask;
+    pw->previous_mouse_x = 0;
+    pw->previous_mouse_y = 0;
+    if (XQueryPointer (si->dpy, RootWindowOfScreen (pw->prompt_screen->screen),
+                       &pointer_root, &pointer_child,
+                       &root_x, &root_y, &win_x, &win_y, &mask))
+      {
+        pw->previous_mouse_x = root_x;
+        pw->previous_mouse_y = root_y;
+        if (si->prefs.verbose_p)
+          fprintf (stderr, "%s: %d: mouse is at %d,%d.\n",
+                   blurb(), pw->prompt_screen->number,
+                   pw->previous_mouse_x, pw->previous_mouse_y);
+      }
+    else if (si->prefs.verbose_p)
+      fprintf (stderr, "%s: %d: unable to determine mouse position?\n",
+               blurb(), pw->prompt_screen->number);
+  }
+
+  /* Figure out where on the desktop to place the window so that it will
+     actually be visible; this takes into account virtual viewports as
+     well as Xinerama. */
   {
     int x, y, w, h;
-    get_screen_viewport (si->default_screen, &x, &y, &w, &h, False);
+    get_screen_viewport (pw->prompt_screen, &x, &y, &w, &h,
+                         pw->previous_mouse_x, pw->previous_mouse_y,
+                         si->prefs.verbose_p);
     if (si->prefs.debug_p) w /= 2;
     pw->x = x + ((w + pw->width) / 2) - pw->width;
     pw->y = y + ((h + pw->height) / 2) - pw->height;
@@ -371,13 +413,13 @@ make_passwd_window (saver_info *si)
     XGCValues gcv;
     GC gc;
     pw->save_under = XCreatePixmap (si->dpy,
-                                    si->default_screen->screensaver_window,
+                                    pw->prompt_screen->screensaver_window,
                                     pw->width + (pw->border_width*2) + 1,
                                     pw->height + (pw->border_width*2) + 1,
-                                    si->default_screen->current_depth);
+                                    pw->prompt_screen->current_depth);
     gcv.function = GXcopy;
     gc = XCreateGC (si->dpy, pw->save_under, GCFunction, &gcv);
-    XCopyArea (si->dpy, si->default_screen->screensaver_window,
+    XCopyArea (si->dpy, pw->prompt_screen->screensaver_window,
                pw->save_under, gc,
                pw->x - pw->border_width, pw->y - pw->border_width,
                pw->width + (pw->border_width*2) + 1,
@@ -389,11 +431,15 @@ make_passwd_window (saver_info *si)
   XMapRaised (si->dpy, si->passwd_dialog);
   XSync (si->dpy, False);
 
-  move_mouse_grab (si, si->passwd_dialog, si->screens[0].cursor);
+  move_mouse_grab (si, si->passwd_dialog,
+                   pw->prompt_screen->cursor,
+                   pw->prompt_screen->number);
   undo_vp_motion (si);
 
   si->pw_data = pw;
 
+  if (cmap)
+    XInstallColormap (si->dpy, cmap);
   draw_passwd_window (si);
   XSync (si->dpy, False);
 }
@@ -546,10 +592,10 @@ draw_passwd_window (saver_info *si)
 
   /* The logo
    */
-  x1 = pw->shadow_width * 3;
-  y1 = pw->shadow_width * 3;
-  x2 = pw->logo_width - (pw->shadow_width * 6);
-  y2 = pw->logo_height - (pw->shadow_width * 6);
+  x1 = pw->shadow_width * 6;
+  y1 = pw->shadow_width * 6;
+  x2 = pw->logo_width - (pw->shadow_width * 12);
+  y2 = pw->logo_height - (pw->shadow_width * 12);
 
   if (pw->logo_pixmap)
     {
@@ -578,20 +624,22 @@ draw_passwd_window (saver_info *si)
   XSetForeground (si->dpy, gc2, pw->thermo_background);
 
   pw->thermo_field_x = pw->logo_width + pw->shadow_width;
-  pw->thermo_field_y = pw->shadow_width * 3;
-  pw->thermo_field_height = pw->height - (pw->shadow_width * 6);
+  pw->thermo_field_y = pw->shadow_width * 5;
+  pw->thermo_field_height = pw->height - (pw->shadow_width * 10);
 
+#if 0
   /* Solid border inside the logo box. */
   XSetForeground (si->dpy, gc1, pw->foreground);
   XDrawRectangle (si->dpy, si->passwd_dialog, gc1, x1, y1, x2-1, y2-1);
+#endif
 
   /* The shadow around the logo
    */
   draw_shaded_rectangle (si->dpy, si->passwd_dialog,
-                        pw->shadow_width * 2,
-                        pw->shadow_width * 2,
-                        pw->logo_width - (pw->shadow_width * 4),
-                        pw->logo_height - (pw->shadow_width * 4),
+                        pw->shadow_width * 4,
+                        pw->shadow_width * 4,
+                        pw->logo_width - (pw->shadow_width * 8),
+                        pw->logo_height - (pw->shadow_width * 8),
                         pw->shadow_width,
                         pw->shadow_bottom, pw->shadow_top);
 
@@ -599,19 +647,19 @@ draw_passwd_window (saver_info *si)
    */
   draw_shaded_rectangle (si->dpy, si->passwd_dialog,
                         pw->logo_width,
-                        pw->shadow_width * 2,
+                        pw->shadow_width * 4,
                         pw->thermo_width + (pw->shadow_width * 2),
-                        pw->height - (pw->shadow_width * 4),
+                        pw->height - (pw->shadow_width * 8),
                         pw->shadow_width,
                         pw->shadow_bottom, pw->shadow_top);
 
+#if 1
   /* Solid border inside the thermometer. */
   XSetForeground (si->dpy, gc1, pw->foreground);
   XDrawRectangle (si->dpy, si->passwd_dialog, gc1, 
-                 pw->logo_width + pw->shadow_width,
-                 pw->shadow_width * 3,
-                 pw->thermo_width - 1,
-                 pw->height - (pw->shadow_width * 6) - 1);
+                 pw->thermo_field_x, pw->thermo_field_y,
+                  pw->thermo_width - 1, pw->thermo_field_height - 1);
+#endif
 
   /* The shadow around the whole window
    */
@@ -688,7 +736,7 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
 
   /* the thermometer
    */
-  y = pw->thermo_field_height * (1.0 - pw->ratio);
+  y = (pw->thermo_field_height - 2) * (1.0 - pw->ratio);
   if (y > 0)
     {
       XFillRectangle (si->dpy, si->passwd_dialog, gc2,
@@ -713,17 +761,33 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
 static void
 destroy_passwd_window (saver_info *si)
 {
+  saver_preferences *p = &si->prefs;
   passwd_dialog_data *pw = si->pw_data;
-  Screen *screen = si->default_screen->screen;
-  Colormap cmap = DefaultColormapOfScreen (screen);
-  Pixel black = BlackPixelOfScreen (screen);
-  Pixel white = WhitePixelOfScreen (screen);
+  saver_screen_info *ssi = pw->prompt_screen;
+  Colormap cmap = DefaultColormapOfScreen (ssi->screen);
+  Pixel black = BlackPixelOfScreen (ssi->screen);
+  Pixel white = WhitePixelOfScreen (ssi->screen);
+  XEvent event;
 
   if (pw->timer)
     XtRemoveTimeOut (pw->timer);
 
-  move_mouse_grab (si, RootWindowOfScreen(si->screens[0].screen),
-                   si->screens[0].cursor);
+  move_mouse_grab (si, RootWindowOfScreen (ssi->screen),
+                   ssi->cursor, ssi->number);
+
+  if (p->verbose_p)
+    fprintf (stderr, "%s: %d: moving mouse back to %d,%d.\n",
+             blurb(), ssi->number,
+             pw->previous_mouse_x, pw->previous_mouse_y);
+
+  XWarpPointer (si->dpy, None, RootWindowOfScreen (ssi->screen),
+                0, 0, 0, 0,
+                pw->previous_mouse_x, pw->previous_mouse_y);
+
+  XSync (si->dpy, False);
+  while (XCheckMaskEvent (si->dpy, PointerMotionMask, &event))
+    if (p->verbose_p)
+      fprintf (stderr, "%s: discarding MotionNotify event.\n", blurb());
 
   if (si->passwd_dialog)
     {
@@ -736,10 +800,9 @@ destroy_passwd_window (saver_info *si)
       XGCValues gcv;
       GC gc;
       gcv.function = GXcopy;
-      gc = XCreateGC (si->dpy, si->default_screen->screensaver_window,
-                      GCFunction, &gcv);
+      gc = XCreateGC (si->dpy, ssi->screensaver_window, GCFunction, &gcv);
       XCopyArea (si->dpy, pw->save_under,
-                 si->default_screen->screensaver_window, gc,
+                 ssi->screensaver_window, gc,
                  0, 0,
                  pw->width + (pw->border_width*2) + 1,
                  pw->height + (pw->border_width*2) + 1,
@@ -786,6 +849,9 @@ destroy_passwd_window (saver_info *si)
   memset (pw, 0, sizeof(*pw));
   free (pw);
 
+  if (cmap)
+    XInstallColormap (si->dpy, cmap);
+
   si->pw_data = 0;
 }
 
@@ -893,37 +959,40 @@ static Bool vp_got_error = False;
 static void
 xfree_lock_mode_switch (saver_info *si, Bool lock_p)
 {
-  static Bool mode_locked_p = False;
+  static Bool any_mode_locked_p = False;
   saver_preferences *p = &si->prefs;
-  int screen = 0;  /* always screen 0 */
+  int screen;
   int event, error;
   Bool status;
   XErrorHandler old_handler;
 
-  if (mode_locked_p == lock_p)
+  if (any_mode_locked_p == lock_p)
     return;
   if (!XF86VidModeQueryExtension (si->dpy, &event, &error))
     return;
 
-  XSync (si->dpy, False);
-  old_handler = XSetErrorHandler (ignore_all_errors_ehandler);
-  status = XF86VidModeLockModeSwitch (si->dpy, screen, lock_p);
-  XSync (si->dpy, False);
-  XSetErrorHandler (old_handler);
-  if (vp_got_error) status = False;
-
-  if (status)
-    mode_locked_p = lock_p;
-
-  if (!status && (p->verbose_p || !lock_p))
-    /* Only print this when verbose, or when we locked but can't unlock.
-       I tried printing this message whenever it comes up, but
-       mode-locking always fails if DontZoom is set in XF86Config. */
-    fprintf (stderr, "%s: unable to %s mode switching!\n",
-             blurb(), (lock_p ? "lock" : "unlock"));
-  else if (p->verbose_p)
-    fprintf (stderr, "%s: %s mode switching.\n",
-             blurb(), (lock_p ? "locked" : "unlocked"));
+  for (screen = 0; screen < si->nscreens; screen++)
+    {
+      XSync (si->dpy, False);
+      old_handler = XSetErrorHandler (ignore_all_errors_ehandler);
+      status = XF86VidModeLockModeSwitch (si->dpy, screen, lock_p);
+      XSync (si->dpy, False);
+      XSetErrorHandler (old_handler);
+      if (vp_got_error) status = False;
+
+      if (status)
+        any_mode_locked_p = lock_p;
+
+      if (!status && (p->verbose_p || !lock_p))
+        /* Only print this when verbose, or when we locked but can't unlock.
+           I tried printing this message whenever it comes up, but
+           mode-locking always fails if DontZoom is set in XF86Config. */
+        fprintf (stderr, "%s: %d: unable to %s mode switching!\n",
+                 blurb(), screen, (lock_p ? "lock" : "unlock"));
+      else if (p->verbose_p)
+        fprintf (stderr, "%s: %d: %s mode switching.\n",
+                 blurb(), screen, (lock_p ? "locked" : "unlocked"));
+    }
 }
 
 static int
@@ -945,40 +1014,47 @@ undo_vp_motion (saver_info *si)
 {
 #ifdef HAVE_XF86VMODE
   saver_preferences *p = &si->prefs;
-  int screen = 0;  /* always screen 0 */
-  saver_screen_info *ssi = &si->screens[screen];
-  int event, error, x, y;
-  Bool status;
+  int screen;
+  int event, error;
 
-  if (ssi->blank_vp_x == -1 && ssi->blank_vp_y == -1)
-    return;
   if (!XF86VidModeQueryExtension (si->dpy, &event, &error))
     return;
-  if (!XF86VidModeGetViewPort (si->dpy, 0, &x, &y))
-    return;
-  if (ssi->blank_vp_x == x && ssi->blank_vp_y == y)
-    return;
-    
-  /* We're going to move the viewport.  The mouse has just been grabbed on
-     (and constrained to, thus warped to) the password window, so it is no
-     longer near the edge of the screen.  However, wait a bit anyway, just
-     to make sure the server drains its last motion event, so that the
-     screen doesn't continue to scroll after we've reset the viewport.
-   */
-  XSync (si->dpy, False);
-  usleep (250000);  /* 1/4 second */
-  XSync (si->dpy, False);
-
-  status = XF86VidModeSetViewPort (si->dpy, screen,
-                                   ssi->blank_vp_x, ssi->blank_vp_y);
 
-  if (!status)
-    fprintf (stderr, "%s: unable to move vp from (%d,%d) back to (%d,%d)!\n",
-             blurb(), x, y, ssi->blank_vp_x, ssi->blank_vp_y);
-  else if (p->verbose_p)
-    fprintf (stderr, "%s: vp moved to (%d,%d); moved it back to (%d,%d).\n",
-             blurb(), x, y, ssi->blank_vp_x, ssi->blank_vp_y);
+  for (screen = 0; screen < si->nscreens; screen++)
+    {
+      saver_screen_info *ssi = &si->screens[screen];
+      int x, y;
+      Bool status;
+
+      if (ssi->blank_vp_x == -1 && ssi->blank_vp_y == -1)
+        break;
+      if (!XF86VidModeGetViewPort (si->dpy, screen, &x, &y))
+        return;
+      if (ssi->blank_vp_x == x && ssi->blank_vp_y == y)
+        return;
+    
+      /* We're going to move the viewport.  The mouse has just been grabbed on
+         (and constrained to, thus warped to) the password window, so it is no
+         longer near the edge of the screen.  However, wait a bit anyway, just
+         to make sure the server drains its last motion event, so that the
+         screen doesn't continue to scroll after we've reset the viewport.
+       */
+      XSync (si->dpy, False);
+      usleep (250000);  /* 1/4 second */
+      XSync (si->dpy, False);
 
+      status = XF86VidModeSetViewPort (si->dpy, screen,
+                                       ssi->blank_vp_x, ssi->blank_vp_y);
+
+      if (!status)
+        fprintf (stderr,
+                 "%s: %d: unable to move vp from (%d,%d) back to (%d,%d)!\n",
+                 blurb(), screen, x, y, ssi->blank_vp_x, ssi->blank_vp_y);
+      else if (p->verbose_p)
+        fprintf (stderr,
+                 "%s: %d: vp moved to (%d,%d); moved it back to (%d,%d).\n",
+                 blurb(), screen, x, y, ssi->blank_vp_x, ssi->blank_vp_y);
+    }
 #endif /* HAVE_XF86VMODE */
 }
 
@@ -1225,8 +1301,6 @@ Bool
 unlock_p (saver_info *si)
 {
   saver_preferences *p = &si->prefs;
-  Screen *screen = si->default_screen->screen;
-  Colormap cmap = DefaultColormapOfScreen (screen);
   Bool status;
 
   raise_window (si, True, True, True);
@@ -1238,7 +1312,6 @@ unlock_p (saver_info *si)
     destroy_passwd_window (si);
 
   make_passwd_window (si);
-  if (cmap) XInstallColormap (si->dpy, cmap);
 
   compose_status = calloc (1, sizeof (*compose_status));
 
@@ -1251,9 +1324,6 @@ unlock_p (saver_info *si)
   free (compose_status);
   compose_status = 0;
 
-  cmap = si->default_screen->cmap;
-  if (cmap) XInstallColormap (si->dpy, cmap);
-
   return status;
 }
 
index c074d1f4c2cb509bc043f80a0a1ee41ba1c4bba2..7dcb768adecd4ecfde82ccd677ba7e757f47e918 100644 (file)
@@ -261,6 +261,8 @@ static const char * const prefs[] = {
   "grabVideoFrames",
   "chooseRandomImages",
   "imageDirectory",
+  "mode",
+  "selected",
   "",
   "programs",
   "",
@@ -778,6 +780,13 @@ write_init_file (saver_preferences *p, const char *version_string,
       CHECK("chooseRandomImages")type =pref_bool, b = p->random_image_p;
       CHECK("imageDirectory")    type =pref_str,  s = p->image_directory;
 
+      CHECK("mode")             type = pref_str,
+                                s = (p->mode == ONE_HACK ? "one" :
+                                     p->mode == BLANK_ONLY ? "blank" :
+                                     p->mode == DONT_BLANK ? "off" :
+                                     "random");
+      CHECK("selected")         type = pref_int,  i = p->selected_hack;
+
       CHECK("programs")                type = pref_str,  s =    programs;
       CHECK("pointerPollTime") type = pref_time, t = p->pointer_timeout;
       CHECK("windowCreationTimeout")type=pref_time,t= p->notice_events_timeout;
@@ -838,6 +847,9 @@ write_init_file (saver_preferences *p, const char *version_string,
          abort();
          break;
        }
+
+      if (pr && !strcmp(pr, "mode")) fprintf(out, "\n");
+
       write_entry (out, pr, s);
     }
 
@@ -1069,6 +1081,18 @@ load_init_file (saver_preferences *p)
 
   get_screenhacks (p);
 
+  p->selected_hack = get_integer_resource ("selected", "Integer");
+  if (p->selected_hack < 0 || p->selected_hack >= p->screenhacks_count)
+    p->selected_hack = -1;
+
+  {
+    char *s = get_string_resource ("mode", "Mode");
+    if      (s && !strcasecmp (s, "one"))   p->mode = ONE_HACK;
+    else if (s && !strcasecmp (s, "blank")) p->mode = BLANK_ONLY;
+    else if (s && !strcasecmp (s, "off"))   p->mode = DONT_BLANK;
+    else                                    p->mode = RANDOM_HACKS;
+  }
+
   if (system_default_screenhack_count)  /* note: first_time is also true */
     {
       merge_system_screenhacks (p, system_default_screenhacks,
index fb4cd1bd79fb7af1ad672efd97d40ce9d9b8e2d4..6640492bb7d44b817dc3437976d0512df1018b1c 100644 (file)
@@ -20,6 +20,8 @@ struct screenhack {
   char *command;
 };
 
+typedef enum { RANDOM_HACKS, ONE_HACK, BLANK_ONLY, DONT_BLANK } saver_mode;
+
 typedef struct saver_preferences saver_preferences;
 
 
@@ -57,6 +59,9 @@ struct saver_preferences {
   screenhack **screenhacks;    /* the programs to run */
   int screenhacks_count;
 
+  saver_mode mode;             /* hack-selection mode */
+  int selected_hack;           /* in one_hack mode, this is the one */
+
   int nice_inferior;           /* nice value for subprocs */
   int inferior_memory_limit;   /* setrlimit(LIMIT_AS) value for subprocs */
 
index 33d255ebc3675e889e6290cef84dd312fcad7be7..0ae76a4a3dc1b59850cbc5bbcda8af663c6789e1 100644 (file)
@@ -100,11 +100,15 @@ static void destroy_splash_window (saver_info *si);
 static void unsplash_timer (XtPointer closure, XtIntervalId *id);
 
 static void do_demo (saver_info *si);
+#ifdef PREFS_BUTTON
 static void do_prefs (saver_info *si);
+#endif /* PREFS_BUTTON */
 static void do_help (saver_info *si);
 
 
 struct splash_dialog_data {
+
+  saver_screen_info *prompt_screen;
   XtIntervalId timer;
 
   Dimension width;
@@ -114,7 +118,9 @@ struct splash_dialog_data {
   char *body_label;
   char *body2_label;
   char *demo_label;
+#ifdef PREFS_BUTTON
   char *prefs_label;
+#endif /* PREFS_BUTTON */
   char *help_label;
 
   XFontStruct *heading_font;
@@ -135,7 +141,9 @@ struct splash_dialog_data {
 
   Dimension button_width, button_height;
   Dimension demo_button_x, demo_button_y;
+#ifdef PREFS_BUTTON
   Dimension prefs_button_x, prefs_button_y;
+#endif /* PREFS_BUTTON */
   Dimension help_button_x, help_button_y;
 
   Pixmap logo_pixmap;
@@ -153,8 +161,8 @@ make_splash_dialog (saver_info *si)
   XSetWindowAttributes attrs;
   unsigned long attrmask = 0;
   splash_dialog_data *sp;
-  Screen *screen = si->default_screen->screen;
-  Colormap cmap = DefaultColormapOfScreen (screen);
+  saver_screen_info *ssi;
+  Colormap cmap;
   char *f;
 
   if (si->sp_data)
@@ -163,7 +171,11 @@ make_splash_dialog (saver_info *si)
       si->prefs.splash_duration <= 0)
     return;
 
+  ssi = &si->screens[mouse_screen (si)];
+  cmap = DefaultColormapOfScreen (ssi->screen);
+
   sp = (splash_dialog_data *) calloc (1, sizeof(*sp));
+  sp->prompt_screen = ssi;
 
   sp->heading_label = get_string_resource ("splash.heading.label",
                                           "Dialog.Label.Label");
@@ -173,8 +185,10 @@ make_splash_dialog (saver_info *si)
                                         "Dialog.Label.Label");
   sp->demo_label = get_string_resource ("splash.demo.label",
                                        "Dialog.Button.Label");
+#ifdef PREFS_BUTTON
   sp->prefs_label = get_string_resource ("splash.prefs.label",
                                        "Dialog.Button.Label");
+#endif /* PREFS_BUTTON */
   sp->help_label = get_string_resource ("splash.help.label",
                                        "Dialog.Button.Label");
 
@@ -185,7 +199,9 @@ make_splash_dialog (saver_info *si)
   if (!sp->body2_label)
     sp->body2_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY");
   if (!sp->demo_label) sp->demo_label = strdup("ERROR");
+#ifdef PREFS_BUTTON
   if (!sp->prefs_label) sp->prefs_label = strdup("ERROR");
+#endif /* PREFS_BUTTON */
   if (!sp->help_label) sp->help_label = strdup("ERROR");
 
   /* Put the version number in the label. */
@@ -221,8 +237,8 @@ make_splash_dialog (saver_info *si)
   if (sp->foreground == sp->background)
     {
       /* Make sure the error messages show up. */
-      sp->foreground = BlackPixelOfScreen (screen);
-      sp->background = WhitePixelOfScreen (screen);
+      sp->foreground = BlackPixelOfScreen (ssi->screen);
+      sp->background = WhitePixelOfScreen (ssi->screen);
     }
 
   sp->button_foreground = get_pixel_resource ("splash.Button.foreground",
@@ -291,12 +307,17 @@ make_splash_dialog (saver_info *si)
       w2 = overall.width;
       h2 = ascent + descent;
 
+#ifdef PREFS_BUTTON
       /* Measure the Prefs button. */
       XTextExtents (sp->button_font,
                    sp->prefs_label, strlen(sp->prefs_label),
                    &direction, &ascent, &descent, &overall);
       w3 = overall.width;
       h3 = ascent + descent;
+#else  /* !PREFS_BUTTON */
+      w3 = 0;
+      h3 = 0;
+#endif /* !PREFS_BUTTON */
 
       /* Measure the Help button. */
       XTextExtents (sp->button_font,
@@ -308,13 +329,20 @@ make_splash_dialog (saver_info *si)
       w2 = MAX(w2, w3); w2 = MAX(w2, w4);
       h2 = MAX(h2, h3); h2 = MAX(h2, h4);
 
+      /* Add some horizontal padding inside the buttons. */
+      w2 += ascent;
+
       w2 += ((ascent + descent) / 2) + (sp->shadow_width * 2);
       h2 += ((ascent + descent) / 2) + (sp->shadow_width * 2);
 
       sp->button_width = w2;
       sp->button_height = h2;
 
+#ifdef PREFS_BUTTON
       w2 *= 3;
+#else  /* !PREFS_BUTTON */
+      w2 *= 2;
+#endif /* !PREFS_BUTTON */
 
       w2 += ((ascent + descent) * 2);  /* for space between buttons */
 
@@ -341,7 +369,23 @@ make_splash_dialog (saver_info *si)
 
   {
     int sx, sy, w, h;
-    get_screen_viewport (si->default_screen, &sx, &sy, &w, &h, False);
+    int mouse_x = 0, mouse_y = 0;
+
+    {
+      Window pointer_root, pointer_child;
+      int root_x, root_y, win_x, win_y;
+      unsigned int mask;
+      if (XQueryPointer (si->dpy,
+                         RootWindowOfScreen (ssi->screen),
+                         &pointer_root, &pointer_child,
+                         &root_x, &root_y, &win_x, &win_y, &mask))
+        {
+          mouse_x = root_x;
+          mouse_y = root_y;
+        }
+    }
+
+    get_screen_viewport (ssi, &sx, &sy, &w, &h, mouse_x, mouse_y, False);
     if (si->prefs.debug_p) w /= 2;
     x = sx + (((w + sp->width)  / 2) - sp->width);
     y = sy + (((h + sp->height) / 2) - sp->height);
@@ -353,10 +397,10 @@ make_splash_dialog (saver_info *si)
 
   si->splash_dialog =
     XCreateWindow (si->dpy,
-                  RootWindowOfScreen(screen),
+                  RootWindowOfScreen(ssi->screen),
                   x, y, sp->width, sp->height, bw,
-                  DefaultDepthOfScreen (screen), InputOutput,
-                  DefaultVisualOfScreen(screen),
+                  DefaultDepthOfScreen (ssi->screen), InputOutput,
+                  DefaultVisualOfScreen(ssi->screen),
                   attrmask, &attrs);
   XSetWindowBackground (si->dpy, si->splash_dialog, sp->background);
 
@@ -388,6 +432,12 @@ draw_splash_window (saver_info *si)
   int x1, x2, x3, y1, y2;
   int sw;
 
+#ifdef PREFS_BUTTON
+  int nbuttons = 3;
+#else  /* !PREFS_BUTTON */
+  int nbuttons = 2;
+#endif /* !PREFS_BUTTON */
+
   height = (sp->heading_font->ascent + sp->heading_font->descent +
            sp->body_font->ascent + sp->body_font->descent +
            sp->body_font->ascent + sp->body_font->descent +
@@ -448,7 +498,7 @@ draw_splash_window (saver_info *si)
              / 2)
        + sp->button_font->ascent);
   hspacing = ((sp->width - x1 - (sp->shadow_width * 2) -
-              sp->internal_border - (sp->button_width * 3))
+              sp->internal_border - (sp->button_width * nbuttons))
              / 2);
 
   x2 = x1 + ((sp->button_width - string_width(sp->button_font, sp->demo_label))
@@ -460,6 +510,7 @@ draw_splash_window (saver_info *si)
   sp->demo_button_x = x1;
   sp->demo_button_y = y1;
   
+#ifdef PREFS_BUTTON
   x1 += hspacing + sp->button_width;
   x2 = x1 + ((sp->button_width - string_width(sp->button_font,sp->prefs_label))
             / 2);
@@ -469,8 +520,15 @@ draw_splash_window (saver_info *si)
               sp->prefs_label, strlen(sp->prefs_label));
   sp->prefs_button_x = x1;
   sp->prefs_button_y = y1;
+#endif /* PREFS_BUTTON */
 
+#ifdef PREFS_BUTTON
   x1 += hspacing + sp->button_width;
+#else  /* !PREFS_BUTTON */
+  x1 = (sp->width - sp->button_width -
+        sp->internal_border - (sp->shadow_width * 2));
+#endif /* !PREFS_BUTTON */
+
   x2 = x1 + ((sp->button_width - string_width(sp->button_font,sp->help_label))
             / 2);
   XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1,
@@ -483,10 +541,10 @@ draw_splash_window (saver_info *si)
 
   /* The logo
    */
-  x1 = sp->shadow_width * 3;
-  y1 = sp->shadow_width * 3;
-  x2 = sp->logo_width - (sp->shadow_width * 6);
-  y2 = sp->logo_height - (sp->shadow_width * 6);
+  x1 = sp->shadow_width * 6;
+  y1 = sp->shadow_width * 6;
+  x2 = sp->logo_width - (sp->shadow_width * 12);
+  y2 = sp->logo_height - (sp->shadow_width * 12);
 
   if (sp->logo_pixmap)
     {
@@ -510,16 +568,18 @@ draw_splash_window (saver_info *si)
     }
 
   /* Solid border inside the logo box. */
+#if 0
   XSetForeground (si->dpy, gc1, sp->foreground);
   XDrawRectangle (si->dpy, si->splash_dialog, gc1, x1, y1, x2-1, y2-1);
+#endif
 
   /* The shadow around the logo
    */
   draw_shaded_rectangle (si->dpy, si->splash_dialog,
-                        sp->shadow_width * 2,
-                        sp->shadow_width * 2,
-                        sp->logo_width - (sp->shadow_width * 4),
-                        sp->logo_height - (sp->shadow_width * 4),
+                        sp->shadow_width * 4,
+                        sp->shadow_width * 4,
+                        sp->logo_width - (sp->shadow_width * 8),
+                        sp->logo_height - (sp->shadow_width * 8),
                         sp->shadow_width,
                         sp->shadow_bottom, sp->shadow_top);
 
@@ -551,11 +611,13 @@ update_splash_window (saver_info *si)
                         sp->button_width, sp->button_height, sp->shadow_width,
                         (pressed == 1 ? sp->shadow_bottom : sp->shadow_top),
                         (pressed == 1 ? sp->shadow_top : sp->shadow_bottom));
+#ifdef PREFS_BUTTON
   draw_shaded_rectangle (si->dpy, si->splash_dialog,
                         sp->prefs_button_x, sp->prefs_button_y,
                         sp->button_width, sp->button_height, sp->shadow_width,
                         (pressed == 2 ? sp->shadow_bottom : sp->shadow_top),
                         (pressed == 2 ? sp->shadow_top : sp->shadow_bottom));
+#endif /* PREFS_BUTTON */
   draw_shaded_rectangle (si->dpy, si->splash_dialog,
                         sp->help_button_x, sp->help_button_y,
                         sp->button_width, sp->button_height, sp->shadow_width,
@@ -567,10 +629,10 @@ static void
 destroy_splash_window (saver_info *si)
 {
   splash_dialog_data *sp = si->sp_data;
-  Screen *screen = si->default_screen->screen;
-  Colormap cmap = DefaultColormapOfScreen (screen);
-  Pixel black = BlackPixelOfScreen (screen);
-  Pixel white = WhitePixelOfScreen (screen);
+  saver_screen_info *ssi = sp->prompt_screen;
+  Colormap cmap = DefaultColormapOfScreen (ssi->screen);
+  Pixel black = BlackPixelOfScreen (ssi->screen);
+  Pixel white = WhitePixelOfScreen (ssi->screen);
 
   if (sp->timer)
     XtRemoveTimeOut (sp->timer);
@@ -584,7 +646,9 @@ destroy_splash_window (saver_info *si)
   if (sp->heading_label) free (sp->heading_label);
   if (sp->body_label)    free (sp->body_label);
   if (sp->demo_label)    free (sp->demo_label);
+#ifdef PREFS_BUTTON
   if (sp->prefs_label)   free (sp->prefs_label);
+#endif /* PREFS_BUTTON */
   if (sp->help_label)    free (sp->help_label);
 
   if (sp->heading_font) XFreeFont (si->dpy, sp->heading_font);
@@ -638,11 +702,13 @@ handle_splash_event (saver_info *si, XEvent *event)
          event->xbutton.y < sp->demo_button_y + sp->button_height)
        which = 1;
 
+#ifdef PREFS_BUTTON
       else if (event->xbutton.x >= sp->prefs_button_x &&
               event->xbutton.x < sp->prefs_button_x + sp->button_width &&
               event->xbutton.y >= sp->prefs_button_y &&
               event->xbutton.y < sp->prefs_button_y + sp->button_height)
        which = 2;
+#endif /* PREFS_BUTTON */
 
       else if (event->xbutton.x >= sp->help_button_x &&
               event->xbutton.x < sp->help_button_x + sp->button_width &&
@@ -665,11 +731,19 @@ handle_splash_event (saver_info *si, XEvent *event)
              switch (which)
                {
                case 1: do_demo (si); break;
+#ifdef PREFS_BUTTON
                case 2: do_prefs (si); break;
+#endif /* PREFS_BUTTON */
                case 3: do_help (si); break;
                default: abort();
                }
            }
+          else if (which == 0 && sp->pressed == 0)
+            {
+              /* click and release on the window but not in a button:
+                 treat that as "dismiss the splash dialog." */
+             destroy_splash_window (si);
+            }
          sp->pressed = 0;
          update_splash_window (si);
        }
@@ -751,12 +825,14 @@ do_demo (saver_info *si)
   fork_and_exec (si, p->demo_command, "demo-mode");
 }
 
+#ifdef PREFS_BUTTON
 static void
 do_prefs (saver_info *si)
 {
   saver_preferences *p = &si->prefs;
   fork_and_exec (si, p->prefs_command, "preferences");
 }
+#endif /* PREFS_BUTTON */
 
 static void
 do_help (saver_info *si)
index e34f896859dca33fd4e385f27ea935817f62cccf..e97fc928944ba66a5f30de387d89c2661ef24aae 100644 (file)
@@ -305,7 +305,7 @@ exec_vms_command (const char *command)
 
 
 static void
-exec_screenhack (saver_info *si, const char *command)
+exec_screenhack (saver_screen_info *ssi, const char *command)
 {
   /* I don't believe what a sorry excuse for an operating system UNIX is!
 
@@ -341,6 +341,7 @@ exec_screenhack (saver_info *si, const char *command)
      what I've seen in Emacs, dealing with process groups isn't especially
      portable.)
    */
+  saver_info *si = ssi->global;
   saver_preferences *p = &si->prefs;
 
 #ifndef VMS
@@ -359,8 +360,9 @@ exec_screenhack (saver_info *si, const char *command)
     }
 
   if (p->verbose_p)
-    fprintf (stderr, "%s: spawning \"%s\" in pid %lu%s.\n",
-            blurb(), command, (unsigned long) getpid (),
+    fprintf (stderr, "%s: %d: spawning \"%s\" in pid %lu%s.\n",
+            blurb(), ssi->number, command,
+             (unsigned long) getpid (),
             (hairy_p ? " (via shell)" : ""));
 
   if (hairy_p)
@@ -373,8 +375,8 @@ exec_screenhack (saver_info *si, const char *command)
 
 #else /* VMS */
   if (p->verbose_p)
-    fprintf (stderr, "%s: spawning \"%s\" in pid %lu.\n",
-            blurb(), command, getpid());
+    fprintf (stderr, "%s: %d: spawning \"%s\" in pid %lu.\n",
+            blurb(), ssi->number, command, getpid());
   exec_vms_command (command);
 #endif /* VMS */
 
@@ -399,6 +401,7 @@ enum job_status {
 struct screenhack_job {
   char *name;
   pid_t pid;
+  int screen;
   enum job_status status;
   struct screenhack_job *next;
 };
@@ -412,8 +415,9 @@ show_job_list (void)
   struct screenhack_job *job;
   fprintf(stderr, "%s: job list:\n", blurb());
   for (job = jobs; job; job = job->next)
-    fprintf (stderr, "  %5ld: (%s) %s\n",
+    fprintf (stderr, "  %5ld: %2d: (%s) %s\n",
             (long) job->pid,
+             job->screen,
             (job->status == job_running ? "running" :
              job->status == job_stopped ? "stopped" :
              job->status == job_killed  ? " killed" :
@@ -426,7 +430,7 @@ show_job_list (void)
 static void clean_job_list (void);
 
 static struct screenhack_job *
-make_job (pid_t pid, const char *cmd)
+make_job (pid_t pid, int screen, const char *cmd)
 {
   struct screenhack_job *job = (struct screenhack_job *) malloc (sizeof(*job));
 
@@ -458,6 +462,7 @@ make_job (pid_t pid, const char *cmd)
 
   job->name = strdup(name);
   job->pid = pid;
+  job->screen = screen;
   job->status = job_running;
   job->next = jobs;
   jobs = job;
@@ -596,31 +601,27 @@ kill_job (saver_info *si, pid_t pid, int signal)
   default: abort();
   }
 
-#ifdef SIGSTOP
   if (p->verbose_p)
-    fprintf (stderr, "%s: %s pid %lu.\n", blurb(),
-            (signal == SIGTERM ? "killing" :
-             signal == SIGSTOP ? "suspending" :
-             signal == SIGCONT ? "resuming" : "signalling"),
-            (unsigned long) job->pid);
-#else  /* !SIGSTOP */
-  if (p->verbose_p)
-    fprintf (stderr, "%s: %s pid %lu.\n", blurb(), "killing",
-            (unsigned long) job->pid);
-#endif /* !SIGSTOP */
+    fprintf (stderr, "%s: %d: %s pid %lu (%s)\n",
+             blurb(), job->screen,
+             (job->status == job_killed  ? "killing" :
+              job->status == job_stopped ? "suspending" : "resuming"),
+             (unsigned long) job->pid,
+             job->name);
 
   status = kill (job->pid, signal);
 
   if (p->verbose_p && status < 0)
     {
       if (errno == ESRCH)
-       fprintf (stderr, "%s: child process %lu (%s) was already dead.\n",
-                blurb(), job->pid, job->name);
+       fprintf (stderr,
+                 "%s: %d: child process %lu (%s) was already dead.\n",
+                blurb(), job->screen, job->pid, job->name);
       else
        {
          char buf [1024];
-         sprintf (buf, "%s: couldn't kill child process %lu (%s)",
-                  blurb(), job->pid, job->name);
+         sprintf (buf, "%s: %d: couldn't kill child process %lu (%s)",
+                  blurb(), job->screen, job->pid, job->name);
          perror (buf);
        }
     }
@@ -702,6 +703,7 @@ describe_dead_child (saver_info *si, pid_t kid, int wait_status)
   saver_preferences *p = &si->prefs;
   struct screenhack_job *job = find_job (kid);
   const char *name = job ? job->name : "<unknown>";
+  int screen_no = job ? job->screen : 0;
 
   if (WIFEXITED (wait_status))
     {
@@ -720,11 +722,11 @@ describe_dead_child (saver_info *si, pid_t kid, int wait_status)
          (exit_status != 0 &&
           (p->verbose_p || job->status != job_killed)))
        fprintf (stderr,
-                "%s: child pid %lu (%s) exited abnormally (code %d).\n",
-                blurb(), (unsigned long) kid, name, exit_status);
+                "%s: %d: child pid %lu (%s) exited abnormally (code %d).\n",
+                blurb(), screen_no, (unsigned long) kid, name, exit_status);
       else if (p->verbose_p)
-       fprintf (stderr, "%s: child pid %lu (%s) exited normally.\n",
-                blurb(), (unsigned long) kid, name);
+       fprintf (stderr, "%s: %d: child pid %lu (%s) exited normally.\n",
+                blurb(), screen_no, (unsigned long) kid, name);
 
       if (job)
        job->status = job_dead;
@@ -735,8 +737,8 @@ describe_dead_child (saver_info *si, pid_t kid, int wait_status)
          !job ||
          job->status != job_killed ||
          WTERMSIG (wait_status) != SIGTERM)
-       fprintf (stderr, "%s: child pid %lu (%s) terminated with %s.\n",
-                blurb(), (unsigned long) kid, name,
+       fprintf (stderr, "%s: %d: child pid %lu (%s) terminated with %s.\n",
+                blurb(), screen_no, (unsigned long) kid, name,
                 signal_name (WTERMSIG(wait_status)));
 
       if (job)
@@ -861,26 +863,43 @@ spawn_screenhack_1 (saver_screen_info *ssi, Bool first_time_p)
 
     AGAIN:
 
-      if (p->screenhacks_count == 1)
-       /* If there is only one hack in the list, there is no choice. */
-       new_hack = 0;
-
+      if (p->screenhacks_count < 1)
+        {
+          /* No hacks at all */
+          new_hack = -1;
+        }
       else if (si->selection_mode == -1)
-       /* Select the next hack, wrapping. */
-       new_hack = (ssi->current_hack + 1) % p->screenhacks_count;
-
+        {
+          /* Select the next hack, wrapping. */
+          new_hack = (ssi->current_hack + 1) % p->screenhacks_count;
+        }
       else if (si->selection_mode == -2)
-       /* Select the previous hack, wrapping. */
-       new_hack = ((ssi->current_hack + p->screenhacks_count - 1)
-                   % p->screenhacks_count);
-
+        {
+          /* Select the previous hack, wrapping. */
+          if (ssi->current_hack < 0)
+            new_hack = p->screenhacks_count - 1;
+          else
+            new_hack = ((ssi->current_hack + p->screenhacks_count - 1)
+                        % p->screenhacks_count);
+        }
       else if (si->selection_mode > 0)
-       /* Select a specific hack, by number.  No negotiation. */
        {
+          /* Select a specific hack, by number (via the ACTIVATE command.) */
          new_hack = ((si->selection_mode - 1) % p->screenhacks_count);
          force = True;
        }
-      else
+      else if (p->mode == ONE_HACK &&
+               p->selected_hack >= 0)
+       {
+          /* Select a specific hack, by number (via "One Saver" mode.) */
+          new_hack = p->selected_hack;
+         force = True;
+       }
+      else if (p->mode == BLANK_ONLY || p->mode == DONT_BLANK)
+        {
+          new_hack = -1;
+        }
+      else  /* (p->mode == RANDOM_HACKS) */
        {
          /* Select a random hack (but not the one we just ran.) */
          while ((new_hack = random () % p->screenhacks_count)
@@ -888,6 +907,14 @@ spawn_screenhack_1 (saver_screen_info *ssi, Bool first_time_p)
            ;
        }
 
+      if (new_hack < 0)   /* don't run a hack */
+        {
+          ssi->current_hack = -1;
+          if (si->selection_mode < 0)
+            si->selection_mode = 0;
+          return;
+        }
+
       ssi->current_hack = new_hack;
       hack = p->screenhacks[ssi->current_hack];
 
@@ -939,13 +966,13 @@ spawn_screenhack_1 (saver_screen_info *ssi, Bool first_time_p)
          nice_subproc (p->nice_inferior);      /* change process priority */
          limit_subproc_memory (p->inferior_memory_limit, p->verbose_p);
          hack_subproc_environment (ssi);       /* set $DISPLAY */
-         exec_screenhack (si, hack->command);  /* this does not return */
+         exec_screenhack (ssi, hack->command); /* this does not return */
          abort();
          break;
 
        default:
          ssi->pid = forked;
-         (void) make_job (forked, hack->command);
+         (void) make_job (forked, ssi->number, hack->command);
          break;
        }
     }
@@ -1078,13 +1105,8 @@ hack_subproc_environment (saver_screen_info *ssi)
   saver_info *si = ssi->global;
   const char *odpy = DisplayString (si->dpy);
   char *ndpy = (char *) malloc(strlen(odpy) + 20);
-  int screen_number;
   char *s;
 
-  for (screen_number = 0; screen_number < si->nscreens; screen_number++)
-    if (ssi == &si->screens[screen_number])
-      break;
-
   strcpy (ndpy, "DISPLAY=");
   s = ndpy + strlen(ndpy);
   strcpy (s, odpy);
@@ -1094,7 +1116,7 @@ hack_subproc_environment (saver_screen_info *ssi)
   while (isdigit(*s)) s++;                     /* skip over dpy number */
   while (*s == '.') s++;                       /* skip over dot */
   if (s[-1] != '.') *s++ = '.';                        /* put on a dot */
-  sprintf(s, "%d", screen_number);             /* put on screen number */
+  sprintf(s, "%d", ssi->number);               /* put on screen number */
 
   /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems
      any more, right?  It's not Posix, but everyone seems to have it. */
@@ -1197,9 +1219,10 @@ get_best_gl_visual (saver_screen_info *ssi)
           {
             Visual *v = id_to_visual (ssi->screen, result);
             if (si->prefs.verbose_p)
-              fprintf (stderr, "%s: %s says the GL visual is 0x%X%s.\n",
-                       blurb(), av[0], result,
-                       (v == ssi->default_visual ? " (the default)" : ""));
+              fprintf (stderr, "%s: %d: %s: GL visual is 0x%X%s.\n",
+                       blurb(), ssi->number,
+                       av[0], result,
+                       (v == ssi->default_visual ? " (default)" : ""));
             return v;
           }
       }
index b8e4475f45337250e6185657f11f76e9de656956..f43b87caacce097e2d9b247cef5be9561d70035e 100644 (file)
@@ -97,6 +97,9 @@ main (int argc, char **argv)
 # endif /* !HAVE_XF86VMODE_GAMMA */
     }
 
+  fprintf (stderr, "%s: fading %d screen%s\n",
+           progname, ScreenCount(dpy), ScreenCount(dpy) == 1 ? "" : "s");
+
   while (1)
     {
       XSync (dpy, False);
index eaa884ff2ecb460769e3bcf0c48cc5373b440faa..988b00126c7f411303a4a76c5d9fe207cfbfb32e 100644 (file)
    itself.
  */
 
-#define WHICH_PASS   100
-#define WHICH_SPLASH 101
-#define WHICH_TTY    102
-
-#define WHICH        WHICH_PASS
-
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
@@ -61,7 +55,8 @@ const char *signal_name(int signal) { return "???"; }
 void restore_real_vroot (saver_info *si) {}
 void store_saver_status (saver_info *si) {}
 void saver_exit (saver_info *si, int status, const char *core) { exit(status);}
-int move_mouse_grab (saver_info *si, Window to, Cursor cursor) { return 0; }
+int move_mouse_grab (saver_info *si, Window to, Cursor c, int ts) { return 0; }
+int mouse_screen (saver_info *si) { return 0; }
 
 const char *blurb(void) { return progname; }
 Atom XA_SCREENSAVER, XA_DEMO, XA_PREFS;
@@ -70,6 +65,7 @@ void
 get_screen_viewport (saver_screen_info *ssi,
                      int *x_ret, int *y_ret,
                      int *w_ret, int *h_ret,
+                     int tx, int ty,
                      Bool verbose_p)
 {
   *x_ret = 0;
@@ -99,6 +95,7 @@ static char *fallback[] = {
 int
 main (int argc, char **argv)
 {
+  enum { PASS, SPLASH, TTY } which;
   Widget toplevel_shell = 0;
   saver_screen_info ssip;
   saver_info sip;
@@ -124,6 +121,17 @@ main (int argc, char **argv)
     if (*s) strcpy (progname, s+1);
   }
 
+  if (argc != 2) goto USAGE;
+  else if (!strcmp (argv[1], "pass"))   which = PASS;
+  else if (!strcmp (argv[1], "splash")) which = SPLASH;
+  else if (!strcmp (argv[1], "tty"))    which = TTY;
+  else
+    {
+    USAGE:
+      fprintf (stderr, "usage: %s [ pass | splash | tty ]\n", progname);
+      exit (1);
+    }
+
   /* before hack_uid() for proper permissions */
   lock_priv_init (argc, argv, True);
 
@@ -137,79 +145,81 @@ main (int argc, char **argv)
 
   progclass = "XScreenSaver";
 
-#if (WHICH != WHICH_TTY)
-  toplevel_shell = XtAppInitialize (&si->app, progclass, 0, 0,
-                                   &argc, argv, fallback,
-                                   0, 0);
-
-  si->dpy = XtDisplay (toplevel_shell);
-  p->db = XtDatabase (si->dpy);
-  si->default_screen->toplevel_shell = toplevel_shell;
-  si->default_screen->screen = XtScreen(toplevel_shell);
-  si->default_screen->default_visual =
-    si->default_screen->current_visual =
-      DefaultVisualOfScreen(si->default_screen->screen);
-  si->default_screen->screensaver_window =
-    RootWindowOfScreen(si->default_screen->screen);
-  si->default_screen->current_depth =
-    visual_depth(si->default_screen->screen,
-                 si->default_screen->current_visual);
-
-  db = p->db;
-  XtGetApplicationNameAndClass (si->dpy, &progname, &progclass);
-
-  load_init_file (&si->prefs);
+  if (which != TTY)
+    {
+      toplevel_shell = XtAppInitialize (&si->app, progclass, 0, 0,
+                                        &argc, argv, fallback,
+                                        0, 0);
+
+      si->dpy = XtDisplay (toplevel_shell);
+      p->db = XtDatabase (si->dpy);
+      si->default_screen->toplevel_shell = toplevel_shell;
+      si->default_screen->screen = XtScreen(toplevel_shell);
+      si->default_screen->default_visual =
+        si->default_screen->current_visual =
+        DefaultVisualOfScreen(si->default_screen->screen);
+      si->default_screen->screensaver_window =
+        RootWindowOfScreen(si->default_screen->screen);
+      si->default_screen->current_depth =
+        visual_depth(si->default_screen->screen,
+                     si->default_screen->current_visual);
+
+      db = p->db;
+      XtGetApplicationNameAndClass (si->dpy, &progname, &progclass);
+
+      load_init_file (&si->prefs);
 
-#endif /* (WHICH != 2) */
+    }
 
   p->verbose_p = True;
 
   while (1)
     {
-#if WHICH == WHICH_PASS
-      if (unlock_p (si))
-       fprintf (stderr, "%s: password correct\n", progname);
+      if (which == PASS)
+        {
+          if (unlock_p (si))
+            fprintf (stderr, "%s: password correct\n", progname);
+          else
+            fprintf (stderr, "%s: password INCORRECT!\n", progname);
+
+          XSync(si->dpy, False);
+          sleep (3);
+        }
+      else if (which == SPLASH)
+        {
+          XEvent event;
+          make_splash_dialog (si);
+          XtAppAddTimeOut (si->app, p->splash_duration + 1000,
+                           idle_timer, (XtPointer) si);
+          while (si->splash_dialog)
+            {
+              XtAppNextEvent (si->app, &event);
+              if (event.xany.window == si->splash_dialog)
+                handle_splash_event (si, &event);
+              XtDispatchEvent (&event);
+            }
+          XSync (si->dpy, False);
+          sleep (1);
+        }
+      else if (which == TTY)
+        {
+          char *pass;
+          char buf[255];
+          struct passwd *p = getpwuid (getuid ());
+          printf ("\n%s: %s's password: ", progname, p->pw_name);
+
+          pass = fgets (buf, sizeof(buf)-1, stdin);
+          if (!pass || !*pass)
+            exit (0);
+          if (pass[strlen(pass)-1] == '\n')
+            pass[strlen(pass)-1] = 0;
+
+          if (passwd_valid_p (pass, True))
+            printf ("%s: Ok!\n", progname);
+          else
+            printf ("%s: Wrong!\n", progname);
+        }
       else
-       fprintf (stderr, "%s: password INCORRECT!\n", progname);
-
-      XSync(si->dpy, False);
-      sleep (3);
-#elif WHICH == WHICH_SPLASH
-      {
-       XEvent event;
-       make_splash_dialog (si);
-       XtAppAddTimeOut (si->app, p->splash_duration + 1000,
-                        idle_timer, (XtPointer) si);
-       while (si->splash_dialog)
-         {
-           XtAppNextEvent (si->app, &event);
-           if (event.xany.window == si->splash_dialog)
-             handle_splash_event (si, &event);
-           XtDispatchEvent (&event);
-         }
-       XSync (si->dpy, False);
-       sleep (1);
-      }
-#elif WHICH == WHICH_TTY
-      {
-        char *pass;
-        char buf[255];
-        struct passwd *p = getpwuid (getuid ());
-        printf ("\n%s: %s's password: ", progname, p->pw_name);
-
-        pass = fgets (buf, sizeof(buf)-1, stdin);
-        if (!pass || !*pass)
-          exit (0);
-        if (pass[strlen(pass)-1] == '\n')
-          pass[strlen(pass)-1] = 0;
-
-        if (passwd_valid_p (pass, True))
-          printf ("%s: Ok!\n", progname);
-        else
-          printf ("%s: Wrong!\n", progname);
-      }
-#else
-# error bogus WHICH value!
-#endif
+        abort();
     }
 }
index 1e66c7705f841cacc358076e50eb87e1f088aac1..7c2c363a071bb1a256d93dee8fa67091f0716a33 100644 (file)
@@ -99,6 +99,7 @@ notice_events (saver_info *si, Window window, Bool top_p)
   unsigned long events;
   Window root, parent, *kids;
   unsigned int nkids;
+  int screen_no;
 
   if (XtWindowToWidget (si->dpy, window))
     /* If it's one of ours, don't mess up its event mask. */
@@ -109,6 +110,11 @@ notice_events (saver_info *si, Window window, Bool top_p)
   if (window == root)
     top_p = False;
 
+  /* Figure out which screen this window is on, for the diagnostics. */
+  for (screen_no = 0; screen_no < si->nscreens; screen_no++)
+    if (root == RootWindowOfScreen (si->screens[screen_no].screen))
+      break;
+
   XGetWindowAttributes (si->dpy, window, &attrs);
   events = ((attrs.all_event_masks | attrs.do_not_propagate_mask)
            & KeyPressMask);
@@ -131,8 +137,8 @@ notice_events (saver_info *si, Window window, Bool top_p)
   if (top_p && p->verbose_p && (events & KeyPressMask))
     {
       /* Only mention one window per tree (hack hack). */
-      fprintf (stderr, "%s: selected KeyPress on 0x%lX\n", blurb(),
-              (unsigned long) window);
+      fprintf (stderr, "%s: %d: selected KeyPress on 0x%lX\n",
+               blurb(), screen_no, (unsigned long) window);
       top_p = False;
     }
 
@@ -336,8 +342,14 @@ check_pointer_timer (XtPointer closure, XtIntervalId *id)
       int root_x, root_y, x, y;
       unsigned int mask;
 
-      XQueryPointer (si->dpy, ssi->screensaver_window, &root, &child,
-                    &root_x, &root_y, &x, &y, &mask);
+      if (!XQueryPointer (si->dpy, ssi->screensaver_window, &root, &child,
+                          &root_x, &root_y, &x, &y, &mask))
+        {
+          /* If XQueryPointer() returns false, the mouse is not on this screen.
+           */
+          root_x = -1;
+          root_y = -1;
+        }
 
       if (root_x == ssi->poll_mouse_last_root_x &&
          root_y == ssi->poll_mouse_last_root_y &&
@@ -349,23 +361,37 @@ check_pointer_timer (XtPointer closure, XtIntervalId *id)
 
 #ifdef DEBUG_TIMERS
       if (p->verbose_p)
-       if (root_x == ssi->poll_mouse_last_root_x &&
-           root_y == ssi->poll_mouse_last_root_y &&
-           child  == ssi->poll_mouse_last_child)
-         fprintf (stderr, "%s: modifiers changed at %s on screen %d.\n",
-                  blurb(), timestring(), i);
-       else
-         fprintf (stderr, "%s: pointer moved at %s on screen %d.\n",
-                  blurb(), timestring(), i);
-
-# if 0
-      fprintf (stderr, "%s: old: %d %d 0x%x ; new: %d %d 0x%x\n",
-               blurb(), 
-               ssi->poll_mouse_last_root_x,
-               ssi->poll_mouse_last_root_y,
-               (unsigned int) ssi->poll_mouse_last_child,
-               root_x, root_y, (unsigned int) child);
-# endif /* 0 */
+        {
+          if (root_x == ssi->poll_mouse_last_root_x &&
+              root_y == ssi->poll_mouse_last_root_y &&
+              child  == ssi->poll_mouse_last_child)
+            fprintf (stderr, "%s: %d: modifiers changed: 0x%04x -> 0x%04x.\n",
+                     blurb(), i, ssi->poll_mouse_last_mask, mask);
+          else
+            {
+              fprintf (stderr, "%s: %d: pointer moved: ", blurb(), i);
+              if (ssi->poll_mouse_last_root_x == -1)
+                fprintf (stderr, "off screen");
+              else
+                fprintf (stderr, "%d,%d",
+                         ssi->poll_mouse_last_root_x,
+                         ssi->poll_mouse_last_root_y);
+              fprintf (stderr, " -> ");
+              if (root_x == -1)
+                fprintf (stderr, "off screen.");
+              else
+                fprintf (stderr, "%d,%d", root_x, root_y);
+              if (ssi->poll_mouse_last_root_x == -1 || root_x == -1)
+                fprintf (stderr, ".\n");
+              else
+#   undef ABS
+#   define ABS(x)((x)<0?-(x):(x))
+                fprintf (stderr, " (%d,%d).\n",
+                         ABS(ssi->poll_mouse_last_root_x - root_x),
+                         ABS(ssi->poll_mouse_last_root_y - root_y));
+# undef ABS
+            }
+        }
 
 #endif /* DEBUG_TIMERS */
 
@@ -424,8 +450,13 @@ check_for_clock_skew (saver_info *si)
 
 #ifdef DEBUG_TIMERS
   if (p->verbose_p)
-    fprintf (stderr, "%s: checking wall clock (%d).\n", blurb(),
-             (si->last_wall_clock_time == 0 ? 0 : shift));
+    {
+      int i = (si->last_wall_clock_time == 0 ? 0 : shift);
+      fprintf (stderr,
+               "%s: checking wall clock for hibernation (%d:%02d:%02d).\n",
+               blurb(),
+               (i / (60 * 60)), ((i / 60) % 60), (i % 60));
+    }
 #endif /* DEBUG_TIMERS */
 
   if (si->last_wall_clock_time != 0 &&
@@ -692,14 +723,46 @@ sleep_until_idle (saver_info *si, Bool until_idle_p)
 #ifdef DEBUG_TIMERS
        if (p->verbose_p)
          {
+            Window root, window;
+            int x, y;
+            const char *type = 0;
            if (event.xany.type == MotionNotify)
-             fprintf (stderr,"%s: MotionNotify at %s\n",blurb(),timestring());
+              {
+                type = "MotionNotify";
+                root = event.xmotion.root;
+                window = event.xmotion.window;
+                x = event.xmotion.x_root;
+                y = event.xmotion.y_root;
+              }
            else if (event.xany.type == KeyPress)
-             fprintf (stderr, "%s: KeyPress seen on 0x%X at %s\n", blurb(),
-                      (unsigned int) event.xkey.window, timestring ());
+              {
+                type = "KeyPress";
+                root = event.xkey.root;
+                window = event.xkey.window;
+                x = y = -1;
+              }
            else if (event.xany.type == ButtonPress)
-             fprintf (stderr, "%s: ButtonPress seen on 0x%X at %s\n", blurb(),
-                      (unsigned int) event.xbutton.window, timestring ());
+              {
+                type = "ButtonPress";
+                root = event.xkey.root;
+                window = event.xkey.window;
+                x = event.xmotion.x_root;
+                y = event.xmotion.y_root;
+              }
+
+            if (type)
+              {
+                int i;
+                for (i = 0; i < si->nscreens; i++)
+                  if (root == RootWindowOfScreen (si->screens[i].screen))
+                    break;
+                fprintf (stderr,"%s: %d: %s on 0x%x",
+                         blurb(), i, type, (unsigned long) window);
+                if (x == -1)
+                  fprintf (stderr, "\n");
+                else
+                  fprintf (stderr, " at %d,%d.\n", x, y);
+              }
          }
 #endif /* DEBUG_TIMERS */
 
@@ -1088,7 +1151,9 @@ watchdog_timer (XtPointer closure, XtIntervalId *id)
 
   /* If the DPMS settings on the server have changed, change them back to
      what ~/.xscreensaver says they should be. */
-  sync_server_dpms_settings (si->dpy, p->dpms_enabled_p,
+  sync_server_dpms_settings (si->dpy,
+                             (p->dpms_enabled_p  &&
+                              p->mode != DONT_BLANK),
                              p->dpms_standby / 1000,
                              p->dpms_suspend / 1000,
                              p->dpms_off / 1000,
index b0198e14a528c2512b0de882d86764e0153281f1..8598e7e0f1ab05cfe4aae2afe3b0cb59aa9d44ab 100644 (file)
 # include <X11/extensions/xf86vmode.h>
 #endif /* HAVE_XF86VMODE */
 
+#ifdef HAVE_XINERAMA
+# include <X11/extensions/Xinerama.h>
+#endif /* HAVE_XINERAMA */
+
 
 /* This file doesn't need the Xt headers, so stub these types out... */
 #undef XtPointer
@@ -69,7 +73,7 @@ Atom XA_SCREENSAVER_STATUS;
 extern saver_info *global_si_kludge;   /* I hate C so much... */
 
 static void maybe_transfer_grabs (saver_screen_info *ssi,
-                                  Window old_w, Window new_w);
+                                  Window old_w, Window new_w, int new_screen);
 
 #define ALL_POINTER_EVENTS \
        (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | \
@@ -98,7 +102,7 @@ grab_string(int status)
 }
 
 static int
-grab_kbd(saver_info *si, Window w)
+grab_kbd(saver_info *si, Window w, int screen_no)
 {
   saver_preferences *p = &si->prefs;
   int status = XGrabKeyboard (si->dpy, w, True,
@@ -107,28 +111,34 @@ grab_kbd(saver_info *si, Window w)
                              GrabModeSync, GrabModeAsync,
                              CurrentTime);
   if (status == GrabSuccess)
-    si->keyboard_grab_window = w;
+    {
+      si->keyboard_grab_window = w;
+      si->keyboard_grab_screen = screen_no;
+    }
 
   if (p->verbose_p)
-    fprintf(stderr, "%s: grabbing keyboard on 0x%x... %s.\n",
-           blurb(), (unsigned long) w, grab_string(status));
+    fprintf(stderr, "%s: %d: grabbing keyboard on 0x%x... %s.\n",
+           blurb(), screen_no, (unsigned long) w, grab_string(status));
   return status;
 }
 
 
 static int
-grab_mouse (saver_info *si, Window w, Cursor cursor)
+grab_mouse (saver_info *si, Window w, Cursor cursor, int screen_no)
 {
   saver_preferences *p = &si->prefs;
   int status = XGrabPointer (si->dpy, w, True, ALL_POINTER_EVENTS,
                             GrabModeAsync, GrabModeAsync, w,
                             cursor, CurrentTime);
   if (status == GrabSuccess)
-    si->mouse_grab_window = w;
+    {
+      si->mouse_grab_window = w;
+      si->mouse_grab_screen = screen_no;
+    }
 
   if (p->verbose_p)
-    fprintf(stderr, "%s: grabbing mouse on 0x%x... %s.\n",
-           blurb(), (unsigned long) w, grab_string(status));
+    fprintf(stderr, "%s: %d: grabbing mouse on 0x%x... %s.\n",
+           blurb(), screen_no, (unsigned long) w, grab_string(status));
   return status;
 }
 
@@ -139,8 +149,9 @@ ungrab_kbd(saver_info *si)
   saver_preferences *p = &si->prefs;
   XUngrabKeyboard(si->dpy, CurrentTime);
   if (p->verbose_p)
-    fprintf(stderr, "%s: ungrabbing keyboard (was 0x%x).\n", blurb(),
-           (unsigned long) si->keyboard_grab_window);
+    fprintf(stderr, "%s: %d: ungrabbing keyboard (was 0x%x).\n",
+            blurb(), si->keyboard_grab_screen,
+            (unsigned long) si->keyboard_grab_window);
   si->keyboard_grab_window = 0;
 }
 
@@ -151,14 +162,16 @@ ungrab_mouse(saver_info *si)
   saver_preferences *p = &si->prefs;
   XUngrabPointer(si->dpy, CurrentTime);
   if (p->verbose_p)
-    fprintf(stderr, "%s: ungrabbing mouse (was 0x%x).\n", blurb(),
-           (unsigned long) si->mouse_grab_window);
+    fprintf(stderr, "%s: %d: ungrabbing mouse (was 0x%x).\n",
+            blurb(), si->mouse_grab_screen,
+            (unsigned long) si->mouse_grab_window);
   si->mouse_grab_window = 0;
 }
 
 
 static Bool
-grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor)
+grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor,
+                         int screen_no)
 {
   Status mstatus, kstatus;
   int i;
@@ -167,7 +180,7 @@ grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor)
   for (i = 0; i < retries; i++)
     {
       XSync (si->dpy, False);
-      kstatus = grab_kbd (si, window);
+      kstatus = grab_kbd (si, window, screen_no);
       if (kstatus == GrabSuccess)
         break;
 
@@ -182,7 +195,7 @@ grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor)
   for (i = 0; i < retries; i++)
     {
       XSync (si->dpy, False);
-      mstatus = grab_mouse (si, window, cursor);
+      mstatus = grab_mouse (si, window, cursor, screen_no);
       if (mstatus == GrabSuccess)
         break;
 
@@ -207,12 +220,12 @@ ungrab_keyboard_and_mouse (saver_info *si)
 
 
 int
-move_mouse_grab (saver_info *si, Window to, Cursor cursor)
+move_mouse_grab (saver_info *si, Window to, Cursor cursor, int to_screen_no)
 {
   Window old = si->mouse_grab_window;
 
   if (old == 0)
-    return grab_mouse (si, to, cursor);
+    return grab_mouse (si, to, cursor, to_screen_no);
   else
     {
       saver_preferences *p = &si->prefs;
@@ -226,18 +239,18 @@ move_mouse_grab (saver_info *si, Window to, Cursor cursor)
         fprintf(stderr, "%s: grabbing server...\n", blurb());
 
       ungrab_mouse (si);
-      status = grab_mouse (si, to, cursor);
+      status = grab_mouse (si, to, cursor, to_screen_no);
 
       if (status != GrabSuccess)   /* Augh! */
         {
           sleep (1);               /* Note dramatic evil of sleeping
                                       with server grabbed. */
           XSync (si->dpy, False);
-          status = grab_mouse (si, to, cursor);
+          status = grab_mouse (si, to, cursor, to_screen_no);
         }
 
       if (status != GrabSuccess)   /* Augh!  Try to get the old one back... */
-        grab_mouse (si, to, cursor);
+        grab_mouse (si, old, cursor, to_screen_no);
 
       XUngrabServer (si->dpy);
       XSync (si->dpy, False);                  /* ###### (danger over) */
@@ -836,6 +849,7 @@ void
 get_screen_viewport (saver_screen_info *ssi,
                      int *x_ret, int *y_ret,
                      int *w_ret, int *h_ret,
+                     int target_x, int target_y,
                      Bool verbose_p)
 {
   int w = WidthOfScreen (ssi->screen);
@@ -843,20 +857,68 @@ get_screen_viewport (saver_screen_info *ssi,
 
 #ifdef HAVE_XF86VMODE
   saver_info *si = ssi->global;
-  int screen_no = screen_number (ssi->screen);
-  int op, event, error;
+  int event, error;
   int dot;
   XF86VidModeModeLine ml;
   int x, y;
+  Bool xinerama_p;
+  Bool placement_only_p = (target_x != -1 && target_y != -1);
+
+#ifdef HAVE_XINERAMA
+  xinerama_p = (XineramaQueryExtension (si->dpy, &event, &error) &&
+                XineramaIsActive (si->dpy));
+#else  /* !HAVE_XINERAMA */
+  /* Even if we don't have the client-side Xinerama lib, check to see if
+     the server supports Xinerama, so that we know to ignore the VidMode
+     extension -- otherwise a server crash could result.  Yay. */
+  xinerama_p = XQueryExtension (si->dpy, "XINERAMA", &error, &event, &error);
+  
+#endif /* !HAVE_XINERAMA */
 
-  /* Check for Xinerama first, because the VidModeExtension is broken
-     when Xinerama is present.  Wheee!
-   */
+#ifdef HAVE_XINERAMA
+  if (xinerama_p && placement_only_p)
+    {
+      int nscreens = 0;
+      XineramaScreenInfo *xsi = XineramaQueryScreens (si->dpy, &nscreens);
+      if (xsi)
+        {
+          /* Find the screen that contains the mouse. */
+          int which = -1;
+          int i;
+          for (i = 0; i < nscreens; i++)
+            {
+              if (target_x >= xsi[i].x_org &&
+                  target_y >= xsi[i].y_org &&
+                  target_x < xsi[i].x_org + xsi[i].width &&
+                  target_y < xsi[i].y_org + xsi[i].height)
+                which = i;
+              if (verbose_p)
+                {
+                  fprintf (stderr, "%s: %d: xinerama vp: %dx%d+%d+%d",
+                           blurb(), i,
+                           xsi[which].width, xsi[which].height,
+                           xsi[i].x_org, xsi[i].y_org);
+                  if (which == i)
+                    fprintf (stderr, "; mouse at %d,%d",
+                             target_x, target_y);
+                  fprintf (stderr, ".\n");
+                }
+            }
+          if (which == -1) which = 0;  /* didn't find it?  Use the first. */
+          *x_ret = xsi[which].x_org;
+          *y_ret = xsi[which].y_org;
+          *w_ret = xsi[which].width;
+          *h_ret = xsi[which].height;
+          XFree (xsi);
+          return;
+        }
+    }
+#endif /* HAVE_XINERAMA */
 
-  if (!XQueryExtension (si->dpy, "XINERAMA", &op, &event, &error) &&
+  if (!xinerama_p &&  /* Xinerama + VidMode = broken. */
       XF86VidModeQueryExtension (si->dpy, &event, &error) &&
-      XF86VidModeGetModeLine (si->dpy, screen_no, &dot, &ml) &&
-      XF86VidModeGetViewPort (si->dpy, screen_no, &x, &y))
+      XF86VidModeGetModeLine (si->dpy, ssi->number, &dot, &ml) &&
+      XF86VidModeGetViewPort (si->dpy, ssi->number, &x, &y))
     {
       char msg[512];
       *x_ret = x;
@@ -895,10 +957,10 @@ get_screen_viewport (saver_screen_info *ssi,
           *h_ret = h;
           return;
         }
-          
 
-      sprintf (msg, "%s: vp is %dx%d+%d+%d",
-               blurb(), *w_ret, *h_ret, *x_ret, *y_ret);
+      sprintf (msg, "%s: %d: vp is %dx%d+%d+%d",
+               blurb(), ssi->number,
+               *w_ret, *h_ret, *x_ret, *y_ret);
 
 
       /* Apparently, though the server stores the X position in increments of
@@ -1054,7 +1116,7 @@ initialize_screensaver_window_1 (saver_screen_info *ssi)
   static Bool printed_visual_info = False;  /* only print the message once. */
   Window horked_window = 0;
 
-  get_screen_viewport (ssi, &x, &y, &width, &height,
+  get_screen_viewport (ssi, &x, &y, &width, &height, -1, -1,
                        (p->verbose_p && !si->screen_blanked_p));
 
   black.red = black.green = black.blue = 0;
@@ -1115,7 +1177,7 @@ initialize_screensaver_window_1 (saver_screen_info *ssi)
     ;
   else if (ssi->current_visual == DefaultVisualOfScreen (ssi->screen))
     {
-      fprintf (stderr, "%s: using default visual ", blurb());
+      fprintf (stderr, "%s: %d: visual ", blurb(), ssi->number);
       describe_visual (stderr, ssi->screen, ssi->current_visual,
                       install_cmap_p);
     }
@@ -1217,14 +1279,16 @@ initialize_screensaver_window_1 (saver_screen_info *ssi)
           fprintf (stderr,
             "%s: someone horked our saver window (0x%lx)!  Recreating it...\n",
                    blurb(), (unsigned long) horked_window);
-          maybe_transfer_grabs (ssi, horked_window, ssi->screensaver_window);
+          maybe_transfer_grabs (ssi, horked_window, ssi->screensaver_window,
+                                ssi->number);
           safe_XDestroyWindow (si->dpy, horked_window);
           horked_window = 0;
         }
 
       if (p->verbose_p)
-       fprintf (stderr, "%s: saver window is 0x%lx.\n",
-                blurb(), (unsigned long) ssi->screensaver_window);
+       fprintf (stderr, "%s: %d: saver window is 0x%lx.\n",
+                 blurb(), ssi->number,
+                 (unsigned long) ssi->screensaver_window);
     }
 
   store_saver_id (ssi);       /* store window name and IDs */
@@ -1364,22 +1428,63 @@ raise_window (saver_info *si,
     }
 }
 
+
+int
+mouse_screen (saver_info *si)
+{
+  saver_preferences *p = &si->prefs;
+
+  if (si->nscreens == 1)
+    return 0;
+  else
+    {
+      int i;
+      for (i = 0; i < si->nscreens; i++)
+        {
+          saver_screen_info *ssi = &si->screens[i];
+          Window pointer_root, pointer_child;
+          int root_x, root_y, win_x, win_y;
+          unsigned int mask;
+          if (XQueryPointer (si->dpy,
+                             RootWindowOfScreen (ssi->screen),
+                             &pointer_root, &pointer_child,
+                             &root_x, &root_y, &win_x, &win_y, &mask))
+            {
+              if (p->verbose_p)
+                fprintf (stderr, "%s: mouse is on screen %d\n",
+                         blurb(), i, si->nscreens);
+              return i;
+            }
+        }
+
+      /* couldn't figure out where the mouse is?  Oh well. */
+      return 0;
+    }
+}
+
+
 Bool
 blank_screen (saver_info *si)
 {
   int i;
   Bool ok;
+  Window w;
+  int mscreen;
 
   /* Note: we do our grabs on the root window, not on the screensaver window.
      If we grabbed on the saver window, then the demo mode and lock dialog
      boxes wouldn't get any events.
+
+     By "the root window", we mean "the root window that contains the mouse."
+     We use to always grab the mouse on screen 0, but that has the effect of
+     moving the mouse to screen 0 from whichever screen it was on, on
+     multi-head systems.
    */
-  ok = grab_keyboard_and_mouse (si,
-                                /*si->screens[0].screensaver_window,*/
-                                RootWindowOfScreen(si->screens[0].screen),
-                                (si->demoing_p
-                                 ? 0
-                                 : si->screens[0].cursor));
+  mscreen = mouse_screen (si);
+  w = RootWindowOfScreen(si->screens[mscreen].screen);
+  ok = grab_keyboard_and_mouse (si, w,
+                                (si->demoing_p ? 0 : si->screens[0].cursor),
+                                mscreen);
 
 
   if (si->using_mit_saver_extension || si->using_sgi_saver_extension)
@@ -1552,7 +1657,8 @@ unblank_screen (saver_info *si)
  */
 static void
 maybe_transfer_grabs (saver_screen_info *ssi,
-                      Window old_w, Window new_w)
+                      Window old_w, Window new_w,
+                      int new_screen_no)
 {
   saver_info *si = ssi->global;
 
@@ -1564,9 +1670,8 @@ maybe_transfer_grabs (saver_screen_info *ssi,
       XGrabServer (si->dpy);           /* ############ DANGER! */
       ungrab_mouse (si);
       grab_mouse (si, ssi->screensaver_window,
-                  (si->demoing_p
-                   ? 0
-                   : ssi->cursor));
+                  (si->demoing_p ? 0 : ssi->cursor),
+                  new_screen_no);
       XUngrabServer (si->dpy);
       XSync (si->dpy, False);          /* ###### (danger over) */
     }
@@ -1578,7 +1683,7 @@ maybe_transfer_grabs (saver_screen_info *ssi,
     {
       XGrabServer (si->dpy);           /* ############ DANGER! */
       ungrab_kbd(si);
-      grab_kbd(si, ssi->screensaver_window);
+      grab_kbd(si, ssi->screensaver_window, ssi->number);
       XUngrabServer (si->dpy);
       XSync (si->dpy, False);          /* ###### (danger over) */
     }
@@ -1647,10 +1752,10 @@ select_visual (saver_screen_info *ssi, const char *visual_name)
 
       if (p->verbose_p)
        {
-         fprintf (stderr, "%s: switching to visual ", blurb());
+         fprintf (stderr, "%s: %d: visual ", blurb(), ssi->number);
          describe_visual (stderr, ssi->screen, new_v, install_cmap_p);
 #if 0
-         fprintf (stderr, "%s:                from ", blurb());
+         fprintf (stderr, "%s:                  from ", blurb());
          describe_visual (stderr, ssi->screen, ssi->current_visual,
                           was_installed_p);
 #endif
@@ -1675,14 +1780,14 @@ select_visual (saver_screen_info *ssi, const char *visual_name)
                            ssi->screensaver_window, ssi->screensaver_window);
 
       /* Transfer any grabs from the old window to the new. */
-      maybe_transfer_grabs (ssi, old_w, ssi->screensaver_window);
+      maybe_transfer_grabs (ssi, old_w, ssi->screensaver_window, ssi->number);
 
       /* Now we can destroy the old window without horking our grabs. */
       XDestroyWindow (si->dpy, old_w);
 
       if (p->verbose_p)
-       fprintf (stderr, "%s: destroyed old saver window 0x%lx.\n",
-                blurb(), (unsigned long) old_w);
+       fprintf (stderr, "%s: %d: destroyed old saver window 0x%lx.\n",
+                blurb(), ssi->number, (unsigned long) old_w);
 
       if (old_c &&
          old_c != DefaultColormapOfScreen (ssi->screen) &&
index 9b86557b85f4ca541910d14e7001f37591380e26..53712ee2f2b400a3f9ebf17ebe435a2d71f01993 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver-command, Copyright (c) 1991-2001
+/* xscreensaver-command, Copyright (c) 1991-2002
  *  by Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -52,7 +52,7 @@ static char *usage = "\n\
 usage: %s -<option>\n\
 \n\
   This program provides external control of a running xscreensaver process.\n\
-  Version %s, copyright (c) 1991-2001 Jamie Zawinski <jwz@jwz.org>.\n\
+  Version %s, copyright (c) 1991-2002 Jamie Zawinski <jwz@jwz.org>.\n\
 \n\
   The xscreensaver program is a daemon that runs in the background.\n\
   You control a running xscreensaver process by sending it messages\n\
index 6b5fb02968e920f4aedba8a20b67db0e65b29213..e9faa1e86ed08ea70e2cc70783b880cdbc35e3f4 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "25-Oct-2001 (3.34)" "X Version 11"
+.TH XScreenSaver 1 "02-Jan-2002 (4.00)" "X Version 11"
 .SH NAME
 xscreensaver-command - control a running xscreensaver process
 .SH SYNOPSIS
index 7fa9f86d34896e79254dfa3cc508ef45416020f7..2e66a9736e9321b8789aa62e8e70223d48313fcf 100644 (file)
   <gettext_support>False</gettext_support>
   <use_widget_names>True</use_widget_names>
   <output_main_file>False</output_main_file>
-  <output_support_files>False</output_support_files>
   <output_build_files>False</output_build_files>
   <backup_source_files>False</backup_source_files>
   <main_source_file>demo-Gtk-widgets.c</main_source_file>
   <main_header_file>demo-Gtk-widgets.h</main_header_file>
   <handler_source_file>demo-Gtk-stubs.c</handler_source_file>
   <handler_header_file>demo-Gtk-stubs.h</handler_header_file>
+  <support_source_file>demo-Gtk-support.c</support_source_file>
+  <support_header_file>demo-Gtk-support.h</support_header_file>
 </project>
 
 <widget>
@@ -28,7 +29,7 @@
   <type>GTK_WINDOW_TOPLEVEL</type>
   <position>GTK_WIN_POS_NONE</position>
   <modal>False</modal>
-  <allow_shrink>True</allow_shrink>
+  <allow_shrink>False</allow_shrink>
   <allow_grow>True</allow_grow>
   <auto_shrink>False</auto_shrink>
   <wmclass_name>xscreensaver</wmclass_name>
@@ -75,7 +76,7 @@
          <widget>
            <class>GtkMenuItem</class>
            <name>lock_menu</name>
-           <tooltip>Lock the screen now (even if &quot;Require Password&quot; is unchecked.)</tooltip>
+           <tooltip>Lock the screen now (even if &quot;Lock Screen&quot; is unchecked.)</tooltip>
            <signal>
              <name>activate</name>
              <handler>lock_menu_cb</handler>
        </widget>
       </widget>
 
-      <widget>
-       <class>GtkMenuItem</class>
-       <name>edit</name>
-       <stock_item>GNOMEUIINFO_MENU_EDIT_TREE</stock_item>
-
-       <widget>
-         <class>GtkMenu</class>
-         <name>edit_menu</name>
-
-         <widget>
-           <class>GtkMenuItem</class>
-           <name>cut_menu</name>
-           <signal>
-             <name>activate</name>
-             <handler>cut_menu_cb</handler>
-             <last_modification_time>Mon, 08 Nov 1999 05:34:40 GMT</last_modification_time>
-           </signal>
-           <label>C_ut</label>
-           <right_justify>False</right_justify>
-         </widget>
-
-         <widget>
-           <class>GtkMenuItem</class>
-           <name>copy_menu</name>
-           <signal>
-             <name>activate</name>
-             <handler>copy_menu_cb</handler>
-             <last_modification_time>Mon, 08 Nov 1999 05:35:00 GMT</last_modification_time>
-           </signal>
-           <label>_Copy</label>
-           <right_justify>False</right_justify>
-         </widget>
-
-         <widget>
-           <class>GtkMenuItem</class>
-           <name>paste_menu</name>
-           <signal>
-             <name>activate</name>
-             <handler>paste_menu_cb</handler>
-             <last_modification_time>Mon, 08 Nov 1999 05:35:16 GMT</last_modification_time>
-           </signal>
-           <label>_Paste</label>
-           <right_justify>False</right_justify>
-         </widget>
-       </widget>
-      </widget>
-
       <widget>
        <class>GtkMenuItem</class>
        <name>help</name>
       <can_focus>True</can_focus>
       <signal>
        <name>switch_page</name>
-       <handler>pref_changed_cb</handler>
-       <last_modification_time>Mon, 03 Apr 2000 02:36:24 GMT</last_modification_time>
+       <handler>switch_page_cb</handler>
+       <last_modification_time>Tue, 20 Nov 2001 02:43:26 GMT</last_modification_time>
       </signal>
       <show_tabs>True</show_tabs>
       <show_border>True</show_border>
       </child>
 
       <widget>
-       <class>GtkHBox</class>
-       <name>demos_hbox</name>
+       <class>GtkTable</class>
+       <name>demos_table</name>
+       <border_width>10</border_width>
+       <rows>2</rows>
+       <columns>2</columns>
        <homogeneous>False</homogeneous>
-       <spacing>5</spacing>
+       <row_spacing>0</row_spacing>
+       <column_spacing>0</column_spacing>
 
        <widget>
-         <class>GtkVBox</class>
-         <name>list_vbox</name>
-         <border_width>10</border_width>
+         <class>GtkTable</class>
+         <name>blanking_table</name>
+         <rows>3</rows>
+         <columns>4</columns>
          <homogeneous>False</homogeneous>
-         <spacing>5</spacing>
+         <row_spacing>2</row_spacing>
+         <column_spacing>0</column_spacing>
          <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
+           <left_attach>0</left_attach>
+           <right_attach>1</right_attach>
+           <top_attach>1</top_attach>
+           <bottom_attach>2</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>False</xexpand>
+           <yexpand>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
          </child>
 
          <widget>
-           <class>GtkScrolledWindow</class>
-           <name>scroller</name>
-           <hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
-           <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
-           <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
-           <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+           <class>GtkLabel</class>
+           <name>cycle_label</name>
+           <label>Cycle After</label>
+           <justify>GTK_JUSTIFY_RIGHT</justify>
+           <wrap>False</wrap>
+           <xalign>1</xalign>
+           <yalign>0.5</yalign>
+           <xpad>8</xpad>
+           <ypad>0</ypad>
            <child>
-             <padding>0</padding>
-             <expand>True</expand>
-             <fill>True</fill>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
            </child>
+         </widget>
 
-           <widget>
-             <class>GtkViewport</class>
-             <name>viewport</name>
-             <border_width>1</border_width>
-             <shadow_type>GTK_SHADOW_IN</shadow_type>
+         <widget>
+           <class>GtkEventBox</class>
+           <name>lock_button_eventbox</name>
+           <tooltip>Whether a password should be required to un-blank the screen.</tooltip>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
 
-             <widget>
-               <class>GtkList</class>
-               <name>list</name>
-               <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
-             </widget>
+           <widget>
+             <class>GtkCheckButton</class>
+             <name>lock_button</name>
+             <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>pref_changed_cb</handler>
+               <last_modification_time>Mon, 03 Apr 2000 02:31:53 GMT</last_modification_time>
+             </signal>
+             <label>Lock Screen After</label>
+             <active>False</active>
+             <draw_indicator>True</draw_indicator>
            </widget>
          </widget>
 
          <widget>
-           <class>GtkHBox</class>
-           <name>centering_hbox</name>
-           <homogeneous>True</homogeneous>
-           <spacing>0</spacing>
+           <class>GtkLabel</class>
+           <name>timeout_label</name>
+           <label>Blank After</label>
+           <justify>GTK_JUSTIFY_RIGHT</justify>
+           <wrap>False</wrap>
+           <xalign>1</xalign>
+           <yalign>0.5</yalign>
+           <xpad>8</xpad>
+           <ypad>0</ypad>
            <child>
-             <padding>0</padding>
-             <expand>False</expand>
-             <fill>True</fill>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
            </child>
+         </widget>
 
-           <widget>
-             <class>GtkHBox</class>
-             <name>next_prev_hbox</name>
-             <homogeneous>False</homogeneous>
-             <spacing>0</spacing>
-             <child>
-               <padding>0</padding>
-               <expand>False</expand>
-               <fill>False</fill>
-             </child>
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>timeout_spinbutton</name>
+           <tooltip>How long before the monitor goes completely black.</tooltip>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>activate</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>focus_out_event</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>changed</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+           </signal>
+           <climb_rate>15</climb_rate>
+           <digits>0</digits>
+           <numeric>True</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>True</snap>
+           <wrap>False</wrap>
+           <value>0</value>
+           <lower>1</lower>
+           <upper>720</upper>
+           <step>1</step>
+           <page>30</page>
+           <page_size>30</page_size>
+           <child>
+             <left_attach>2</left_attach>
+             <right_attach>3</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
 
-             <widget>
-               <class>GtkButton</class>
-               <name>next</name>
-               <tooltip>Run the next demo in this list in full-screen mode (click the mouse to return.)</tooltip>
-               <can_default>True</can_default>
-               <has_default>True</has_default>
-               <can_focus>True</can_focus>
-               <signal>
-                 <name>clicked</name>
-                 <handler>run_next_cb</handler>
-                 <last_modification_time>Mon, 08 Nov 1999 04:46:12 GMT</last_modification_time>
-               </signal>
-               <label>\/</label>
-               <child>
-                 <padding>0</padding>
-                 <expand>False</expand>
-                 <fill>False</fill>
-               </child>
-             </widget>
+         <widget>
+           <class>GtkLabel</class>
+           <name>timeout_mlabel</name>
+           <label>minutes</label>
+           <justify>GTK_JUSTIFY_LEFT</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>3</left_attach>
+             <right_attach>4</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
 
-             <widget>
-               <class>GtkButton</class>
-               <name>prev</name>
-               <tooltip>Run the previous demo in this list in full-screen mode (click the mouse to return.)</tooltip>
-               <can_default>True</can_default>
-               <can_focus>True</can_focus>
-               <signal>
-                 <name>clicked</name>
-                 <handler>run_prev_cb</handler>
-                 <last_modification_time>Wed, 10 Nov 1999 01:31:30 GMT</last_modification_time>
-               </signal>
-               <label>/\</label>
-               <child>
-                 <padding>0</padding>
-                 <expand>False</expand>
-                 <fill>False</fill>
-               </child>
-             </widget>
-           </widget>
+         <widget>
+           <class>GtkLabel</class>
+           <name>cycle_mlabel</name>
+           <label>minutes</label>
+           <justify>GTK_JUSTIFY_LEFT</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>3</left_attach>
+             <right_attach>4</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>lock_mlabel</name>
+           <label>minutes</label>
+           <justify>GTK_JUSTIFY_LEFT</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>3</left_attach>
+             <right_attach>4</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>lock_spinbutton</name>
+           <tooltip>How long before the monitor goes completely black.</tooltip>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>activate</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>focus_out_event</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>changed</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+           </signal>
+           <climb_rate>15</climb_rate>
+           <digits>0</digits>
+           <numeric>True</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>True</snap>
+           <wrap>False</wrap>
+           <value>0</value>
+           <lower>0</lower>
+           <upper>720</upper>
+           <step>1</step>
+           <page>30</page>
+           <page_size>30</page_size>
+           <child>
+             <left_attach>2</left_attach>
+             <right_attach>3</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>10</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>cycle_spinbutton</name>
+           <tooltip>How long before the monitor goes completely black.</tooltip>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>activate</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>focus_out_event</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>changed</name>
+             <handler>pref_changed_cb</handler>
+             <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+           </signal>
+           <climb_rate>15</climb_rate>
+           <digits>0</digits>
+           <numeric>True</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>True</snap>
+           <wrap>False</wrap>
+           <value>0</value>
+           <lower>1</lower>
+           <upper>720</upper>
+           <step>1</step>
+           <page>30</page>
+           <page_size>30</page_size>
+           <child>
+             <left_attach>2</left_attach>
+             <right_attach>3</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkHButtonBox</class>
+         <name>demo_manual_hbbox</name>
+         <layout_style>GTK_BUTTONBOX_SPREAD</layout_style>
+         <spacing>30</spacing>
+         <child_min_width>85</child_min_width>
+         <child_min_height>27</child_min_height>
+         <child_ipad_x>7</child_ipad_x>
+         <child_ipad_y>0</child_ipad_y>
+         <child>
+           <left_attach>1</left_attach>
+           <right_attach>2</right_attach>
+           <top_attach>1</top_attach>
+           <bottom_attach>2</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>False</xexpand>
+           <yexpand>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
+         </child>
+
+         <widget>
+           <class>GtkButton</class>
+           <name>demo</name>
+           <tooltip>Demo the selected screen saver in full-screen mode (click the mouse to return.)</tooltip>
+           <can_default>True</can_default>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>clicked</name>
+             <handler>run_this_cb</handler>
+             <last_modification_time>Mon, 08 Nov 1999 04:46:40 GMT</last_modification_time>
+           </signal>
+           <label>Preview</label>
+           <relief>GTK_RELIEF_NORMAL</relief>
+         </widget>
+
+         <widget>
+           <class>GtkButton</class>
+           <name>settings</name>
+           <tooltip>Customization and explanation of the selected screen saver.</tooltip>
+           <can_default>True</can_default>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>clicked</name>
+             <handler>settings_cb</handler>
+             <last_modification_time>Mon, 19 Nov 2001 22:03:21 GMT</last_modification_time>
+           </signal>
+           <label>Settings...</label>
+           <relief>GTK_RELIEF_NORMAL</relief>
          </widget>
        </widget>
 
        <widget>
          <class>GtkVBox</class>
-         <name>opts_vbox</name>
+         <name>list_vbox</name>
          <border_width>10</border_width>
          <homogeneous>False</homogeneous>
          <spacing>0</spacing>
          <child>
-           <padding>0</padding>
-           <expand>True</expand>
-           <fill>True</fill>
+           <left_attach>0</left_attach>
+           <right_attach>1</right_attach>
+           <top_attach>0</top_attach>
+           <bottom_attach>1</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>False</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
          </child>
 
          <widget>
-           <class>GtkFrame</class>
-           <name>frame</name>
-           <label_xalign>0</label_xalign>
-           <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+           <class>GtkHBox</class>
+           <name>mode_hbox</name>
+           <homogeneous>False</homogeneous>
+           <spacing>0</spacing>
            <child>
-             <padding>0</padding>
-             <expand>True</expand>
+             <padding>10</padding>
+             <expand>False</expand>
              <fill>True</fill>
            </child>
 
            <widget>
              <class>GtkLabel</class>
-             <name>doc</name>
-             <label></label>
+             <name>mode_label</name>
+             <label>Mode:</label>
              <justify>GTK_JUSTIFY_LEFT</justify>
-             <wrap>True</wrap>
+             <wrap>False</wrap>
              <xalign>0</xalign>
-             <yalign>0</yalign>
-             <xpad>10</xpad>
-             <ypad>10</ypad>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
+           </widget>
+
+           <widget>
+             <class>GtkOptionMenu</class>
+             <name>mode_menu</name>
+             <can_focus>True</can_focus>
+             <items>Disable Screen Saver
+Blank Screen Only
+Only One Screen Saver
+Random Screen Saver
+</items>
+             <initial_choice>3</initial_choice>
+             <child>
+               <padding>4</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
            </widget>
          </widget>
 
          <widget>
-           <class>GtkVBox</class>
-           <name>opts_vbox2</name>
+           <class>GtkHBox</class>
+           <name>col_head_hbox</name>
            <homogeneous>False</homogeneous>
-           <spacing>2</spacing>
+           <spacing>0</spacing>
            <child>
              <padding>0</padding>
              <expand>False</expand>
            </child>
 
            <widget>
-             <class>GtkLabel</class>
-             <name>cmd_label</name>
-             <label>Command Line:</label>
-             <justify>GTK_JUSTIFY_LEFT</justify>
-             <wrap>False</wrap>
-             <xalign>0</xalign>
-             <yalign>1</yalign>
-             <xpad>0</xpad>
-             <ypad>2</ypad>
+             <class>GtkFrame</class>
+             <name>use_col_frame</name>
+             <label_xalign>0</label_xalign>
+             <shadow_type>GTK_SHADOW_OUT</shadow_type>
              <child>
                <padding>0</padding>
                <expand>False</expand>
                <fill>False</fill>
              </child>
+
+             <widget>
+               <class>GtkLabel</class>
+               <name>use_label</name>
+               <label>Use</label>
+               <justify>GTK_JUSTIFY_LEFT</justify>
+               <wrap>False</wrap>
+               <xalign>0</xalign>
+               <yalign>0.5</yalign>
+               <xpad>3</xpad>
+               <ypad>0</ypad>
+             </widget>
            </widget>
 
            <widget>
-             <class>GtkEntry</class>
-             <name>cmd_text</name>
-             <can_focus>True</can_focus>
-             <editable>True</editable>
-             <text_visible>True</text_visible>
-             <text_max_length>0</text_max_length>
-             <text></text>
+             <class>GtkFrame</class>
+             <name>saver_col_frame</name>
+             <label_xalign>0</label_xalign>
+             <shadow_type>GTK_SHADOW_OUT</shadow_type>
              <child>
                <padding>0</padding>
-               <expand>False</expand>
+               <expand>True</expand>
                <fill>True</fill>
              </child>
+
+             <widget>
+               <class>GtkLabel</class>
+               <name>saver_label</name>
+               <label>Screen Saver</label>
+               <justify>GTK_JUSTIFY_LEFT</justify>
+               <wrap>False</wrap>
+               <xalign>0</xalign>
+               <yalign>0.5</yalign>
+               <xpad>6</xpad>
+               <ypad>0</ypad>
+             </widget>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkScrolledWindow</class>
+           <name>scroller</name>
+           <hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
+           <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
+           <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
+           <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+           <child>
+             <padding>0</padding>
+             <expand>True</expand>
+             <fill>True</fill>
+           </child>
+
+           <widget>
+             <class>GtkViewport</class>
+             <name>viewport</name>
+             <border_width>1</border_width>
+             <shadow_type>GTK_SHADOW_IN</shadow_type>
+
+             <widget>
+               <class>GtkList</class>
+               <name>list</name>
+               <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
+             </widget>
            </widget>
+         </widget>
+
+         <widget>
+           <class>GtkHBox</class>
+           <name>centering_hbox</name>
+           <homogeneous>True</homogeneous>
+           <spacing>0</spacing>
+           <child>
+             <padding>0</padding>
+             <expand>False</expand>
+             <fill>True</fill>
+             <pack>GTK_PACK_END</pack>
+           </child>
 
            <widget>
              <class>GtkHBox</class>
-             <name>opts_hbox3</name>
-             <border_width>4</border_width>
+             <name>next_prev_hbox</name>
              <homogeneous>False</homogeneous>
              <spacing>0</spacing>
              <child>
-               <padding>4</padding>
+               <padding>0</padding>
                <expand>False</expand>
-               <fill>True</fill>
+               <fill>False</fill>
              </child>
 
              <widget>
-               <class>GtkCheckButton</class>
-               <name>enabled</name>
+               <class>GtkButton</class>
+               <name>next</name>
+               <tooltip>Run the next screen saver in the list in full-screen mode (click the mouse to return.)</tooltip>
+               <can_default>True</can_default>
+               <has_default>True</has_default>
                <can_focus>True</can_focus>
                <signal>
-                 <name>toggled</name>
-                 <handler>enabled_cb</handler>
-                 <last_modification_time>Fri, 10 Nov 2000 12:50:58 GMT</last_modification_time>
+                 <name>clicked</name>
+                 <handler>run_next_cb</handler>
+                 <last_modification_time>Mon, 08 Nov 1999 04:46:12 GMT</last_modification_time>
                </signal>
-               <label>Enabled</label>
-               <active>True</active>
-               <draw_indicator>True</draw_indicator>
-               <child>
-                 <padding>0</padding>
-                 <expand>False</expand>
-                 <fill>False</fill>
-               </child>
-             </widget>
-
-             <widget>
-               <class>GtkLabel</class>
-               <name>visual</name>
-               <label>Visual:</label>
-               <justify>GTK_JUSTIFY_RIGHT</justify>
-               <wrap>False</wrap>
-               <xalign>1</xalign>
-               <yalign>0.5</yalign>
-               <xpad>10</xpad>
-               <ypad>0</ypad>
+               <label>\/</label>
+               <relief>GTK_RELIEF_NORMAL</relief>
                <child>
                  <padding>0</padding>
                  <expand>False</expand>
              </widget>
 
              <widget>
-               <class>GtkCombo</class>
-               <name>visual_combo</name>
-               <value_in_list>False</value_in_list>
-               <ok_if_empty>True</ok_if_empty>
-               <case_sensitive>False</case_sensitive>
-               <use_arrows>True</use_arrows>
-               <use_arrows_always>False</use_arrows_always>
-               <items>Any
-Best
-Default
-Default-N
-GL
-TrueColor
-PseudoColor
-StaticGray
-GrayScale
-DirectColor
-Color
-Gray
-Mono
-</items>
+               <class>GtkButton</class>
+               <name>prev</name>
+               <tooltip>Run the previous screen saver in the list in full-screen mode (click the mouse to return.)</tooltip>
+               <can_default>True</can_default>
+               <can_focus>True</can_focus>
+               <signal>
+                 <name>clicked</name>
+                 <handler>run_prev_cb</handler>
+                 <last_modification_time>Wed, 10 Nov 1999 01:31:30 GMT</last_modification_time>
+               </signal>
+               <label>/\</label>
+               <relief>GTK_RELIEF_NORMAL</relief>
                <child>
                  <padding>0</padding>
                  <expand>False</expand>
                  <fill>False</fill>
                </child>
-
-               <widget>
-                 <class>GtkEntry</class>
-                 <child_name>GtkCombo:entry</child_name>
-                 <name>combo-entry1</name>
-                 <tooltip>The X visual type that this demo will require.  If that visual is available it will be used, otherwise, this demo will not be run.</tooltip>
-                 <can_focus>True</can_focus>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>0</text_max_length>
-                 <text>Any</text>
-               </widget>
              </widget>
            </widget>
          </widget>
+       </widget>
 
-         <widget>
-           <class>GtkHSeparator</class>
-           <name>demo_hline</name>
-           <child>
-             <padding>5</padding>
-             <expand>False</expand>
-             <fill>False</fill>
-           </child>
-         </widget>
+       <widget>
+         <class>GtkFrame</class>
+         <name>preview_frame</name>
+         <label>Description</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <child>
+           <left_attach>1</left_attach>
+           <right_attach>2</right_attach>
+           <top_attach>0</top_attach>
+           <bottom_attach>1</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>6</ypad>
+           <xexpand>True</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>True</xshrink>
+           <yshrink>True</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
+         </child>
 
          <widget>
-           <class>GtkHButtonBox</class>
-           <name>demo_manual_hbox</name>
-           <layout_style>GTK_BUTTONBOX_DEFAULT_STYLE</layout_style>
-           <spacing>30</spacing>
-           <child_min_width>85</child_min_width>
-           <child_min_height>27</child_min_height>
-           <child_ipad_x>7</child_ipad_x>
-           <child_ipad_y>0</child_ipad_y>
-           <child>
-             <padding>0</padding>
-             <expand>False</expand>
-             <fill>True</fill>
-           </child>
-
-           <widget>
-             <class>GtkButton</class>
-             <name>demo</name>
-             <tooltip>Run this one in full-screen mode (click the mouse to return.)</tooltip>
-             <can_default>True</can_default>
-             <can_focus>True</can_focus>
-             <signal>
-               <name>clicked</name>
-               <handler>run_this_cb</handler>
-               <last_modification_time>Mon, 08 Nov 1999 04:46:40 GMT</last_modification_time>
-             </signal>
-             <label>Demo</label>
-           </widget>
+           <class>GtkAspectFrame</class>
+           <name>preview_aspectframe</name>
+           <border_width>8</border_width>
+           <label_xalign>0</label_xalign>
+           <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+           <xalign>0.5</xalign>
+           <yalign>0.5</yalign>
+           <ratio>1.33</ratio>
+           <obey_child>False</obey_child>
 
            <widget>
-             <class>GtkButton</class>
-             <name>manual</name>
-             <tooltip>Click here to read the manual for this display mode, if it has one.</tooltip>
-             <can_default>True</can_default>
-             <can_focus>True</can_focus>
-             <signal>
-               <name>clicked</name>
-               <handler>manual_cb</handler>
-               <last_modification_time>Wed, 17 Nov 1999 09:43:37 GMT</last_modification_time>
-             </signal>
-             <label>Documentation...</label>
+             <class>GtkDrawingArea</class>
+             <name>preview</name>
            </widget>
          </widget>
        </widget>
@@ -578,7 +855,7 @@ Mono
        <class>GtkLabel</class>
        <child_name>Notebook:tab</child_name>
        <name>demo_tab</name>
-       <label>Graphics Demos</label>
+       <label>Display Modes</label>
        <justify>GTK_JUSTIFY_CENTER</justify>
        <wrap>False</wrap>
        <xalign>0.5</xalign>
@@ -588,407 +865,552 @@ Mono
       </widget>
 
       <widget>
-       <class>GtkVBox</class>
-       <name>options_vbox</name>
-       <homogeneous>False</homogeneous>
-       <spacing>0</spacing>
+       <class>GtkTable</class>
+       <name>options_table</name>
+       <rows>2</rows>
+       <columns>2</columns>
+       <homogeneous>True</homogeneous>
+       <row_spacing>0</row_spacing>
+       <column_spacing>0</column_spacing>
 
        <widget>
-         <class>GtkTable</class>
-         <name>options_table</name>
-         <rows>1</rows>
-         <columns>2</columns>
-         <homogeneous>True</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <class>GtkFrame</class>
+         <name>diag_frame</name>
+         <border_width>10</border_width>
+         <label>Diagnostics</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
          <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
+           <left_attach>0</left_attach>
+           <right_attach>1</right_attach>
+           <top_attach>1</top_attach>
+           <bottom_attach>2</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>True</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
          </child>
 
          <widget>
-           <class>GtkTable</class>
-           <name>options_table_2</name>
-           <rows>2</rows>
-           <columns>1</columns>
+           <class>GtkHBox</class>
+           <name>diag_hbox</name>
+           <border_width>8</border_width>
            <homogeneous>False</homogeneous>
-           <row_spacing>0</row_spacing>
-           <column_spacing>0</column_spacing>
-           <child>
-             <left_attach>1</left_attach>
-             <right_attach>2</right_attach>
-             <top_attach>0</top_attach>
-             <bottom_attach>1</bottom_attach>
-             <xpad>0</xpad>
-             <ypad>0</ypad>
-             <xexpand>True</xexpand>
-             <yexpand>True</yexpand>
-             <xshrink>False</xshrink>
-             <yshrink>False</yshrink>
-             <xfill>True</xfill>
-             <yfill>True</yfill>
-           </child>
+           <spacing>8</spacing>
 
            <widget>
-             <class>GtkFrame</class>
-             <name>dpms_frame</name>
-             <border_width>10</border_width>
-             <label>Display Power Management:</label>
-             <label_xalign>0</label_xalign>
-             <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+             <class>GtkPixmap</class>
+             <name>diag_logo</name>
+             <filename>screensaver-diagnostic.xpm</filename>
+             <xalign>0.5</xalign>
+             <yalign>0</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <build_insensitive>True</build_insensitive>
              <child>
-               <left_attach>0</left_attach>
-               <right_attach>1</right_attach>
-               <top_attach>0</top_attach>
-               <bottom_attach>1</bottom_attach>
-               <xpad>0</xpad>
-               <ypad>0</ypad>
-               <xexpand>True</xexpand>
-               <yexpand>False</yexpand>
-               <xshrink>False</xshrink>
-               <yshrink>False</yshrink>
-               <xfill>True</xfill>
-               <yfill>True</yfill>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
              </child>
+           </widget>
 
-             <widget>
-               <class>GtkTable</class>
-               <name>dpms_table</name>
-               <border_width>10</border_width>
-               <rows>4</rows>
-               <columns>3</columns>
-               <homogeneous>False</homogeneous>
-               <row_spacing>2</row_spacing>
-               <column_spacing>10</column_spacing>
+           <widget>
+             <class>GtkVBox</class>
+             <name>diag_vbox</name>
+             <homogeneous>False</homogeneous>
+             <spacing>0</spacing>
+             <child>
+               <padding>0</padding>
+               <expand>True</expand>
+               <fill>True</fill>
+             </child>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>verbose_button_eventbox</name>
+               <tooltip>Whether the daemon should print lots of debugging information.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
-                 <class>GtkEntry</class>
-                 <name>dpms_off_text</name>
-                 <tooltip>How long until the monitor powers down (if Power Management is enabled).</tooltip>
+                 <class>GtkCheckButton</class>
+                 <name>verbose_button</name>
                  <can_focus>True</can_focus>
                  <signal>
-                   <name>activate</name>
+                   <name>toggled</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+                   <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
                  </signal>
+                 <label>Verbose Diagnostics</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
+               </widget>
+             </widget>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>capture_button_eventbox</name>
+               <tooltip>Whether any error output of the display modes should be redirected to the screen.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+
+               <widget>
+                 <class>GtkCheckButton</class>
+                 <name>capture_button</name>
+                 <can_focus>True</can_focus>
                  <signal>
-                   <name>focus_out_event</name>
+                   <name>toggled</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+                   <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
                  </signal>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
-                 <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>False</xfill>
-                   <yfill>False</yfill>
-                 </child>
+                 <label>Display Subprocess Errors</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
                </widget>
+             </widget>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>splash_button_eventbox</name>
+               <tooltip>Whether the splash screen (with the version number and `Help' button) should be momentarily displayed when the daemon first starts up.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
-                 <class>GtkEntry</class>
-                 <name>dpms_suspend_text</name>
-                 <tooltip>How long until the monitor goes into power-saving mode (if Power Management is enabled).</tooltip>
+                 <class>GtkCheckButton</class>
+                 <name>splash_button</name>
                  <can_focus>True</can_focus>
                  <signal>
-                   <name>activate</name>
+                   <name>toggled</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+                   <last_modification_time>Mon, 03 Apr 2000 02:32:39 GMT</last_modification_time>
                  </signal>
+                 <label>Display Splash Screen at Startup</label>
+                 <active>True</active>
+                 <draw_indicator>True</draw_indicator>
+               </widget>
+             </widget>
+           </widget>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkFrame</class>
+         <name>cmap_frame</name>
+         <border_width>10</border_width>
+         <label>Colormaps</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <child>
+           <left_attach>1</left_attach>
+           <right_attach>2</right_attach>
+           <top_attach>1</top_attach>
+           <bottom_attach>2</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>True</xexpand>
+           <yexpand>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
+         </child>
+
+         <widget>
+           <class>GtkHBox</class>
+           <name>cmap_hbox</name>
+           <border_width>8</border_width>
+           <homogeneous>False</homogeneous>
+           <spacing>8</spacing>
+
+           <widget>
+             <class>GtkPixmap</class>
+             <name>cmap_logo</name>
+             <filename>screensaver-colorselector.xpm</filename>
+             <xalign>0.5</xalign>
+             <yalign>0</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <build_insensitive>True</build_insensitive>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
+           </widget>
+
+           <widget>
+             <class>GtkVBox</class>
+             <name>cmap_vbox</name>
+             <homogeneous>False</homogeneous>
+             <spacing>0</spacing>
+             <child>
+               <padding>0</padding>
+               <expand>True</expand>
+               <fill>True</fill>
+             </child>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>install_button_eventbox</name>
+               <tooltip>Whether to install a private colormap when running in 8-bit mode on the default Visual.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+
+               <widget>
+                 <class>GtkCheckButton</class>
+                 <name>install_button</name>
+                 <can_focus>True</can_focus>
                  <signal>
-                   <name>focus_out_event</name>
+                   <name>toggled</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+                   <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
                  </signal>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
-                 <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>2</top_attach>
-                   <bottom_attach>3</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>False</xfill>
-                   <yfill>False</yfill>
-                 </child>
+                 <label>Install Colormap</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
                </widget>
+             </widget>
+
+             <widget>
+               <class>GtkHSeparator</class>
+               <name>cmap_hr</name>
+               <child>
+                 <padding>4</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+             </widget>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>fade_button_eventbox</name>
+               <tooltip>Whether the screen should slowly fade to black when the screen saver activates.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
-                 <class>GtkEntry</class>
-                 <name>dpms_standby_text</name>
-                 <tooltip>How long before the monitor goes completely black (if Power Management is enabled).</tooltip>
+                 <class>GtkCheckButton</class>
+                 <name>fade_button</name>
                  <can_focus>True</can_focus>
                  <signal>
-                   <name>activate</name>
+                   <name>toggled</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+                   <last_modification_time>Mon, 03 Apr 2000 02:32:39 GMT</last_modification_time>
                  </signal>
+                 <label>Fade To Black When Blanking</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
+               </widget>
+             </widget>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>unfade_button_eventbox</name>
+               <tooltip>Whether the screen should slowly fade in from black when the screen saver deactivates.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+
+               <widget>
+                 <class>GtkCheckButton</class>
+                 <name>unfade_button</name>
+                 <can_focus>True</can_focus>
                  <signal>
-                   <name>focus_out_event</name>
+                   <name>toggled</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+                   <last_modification_time>Mon, 03 Apr 2000 02:32:51 GMT</last_modification_time>
                  </signal>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
-                 <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>False</xfill>
-                   <yfill>False</yfill>
-                 </child>
+                 <label>Fade From Black When Unblanking</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
                </widget>
+             </widget>
+
+             <widget>
+               <class>GtkHBox</class>
+               <name>fade_hbox</name>
+               <homogeneous>False</homogeneous>
+               <spacing>0</spacing>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
                  <class>GtkLabel</class>
-                 <name>dpms_standby_label</name>
-                 <label>Standby After:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <name>fade_dummy</name>
+                 <label></label>
+                 <justify>GTK_JUSTIFY_LEFT</justify>
                  <wrap>False</wrap>
-                 <xalign>1</xalign>
+                 <xalign>0.5</xalign>
                  <yalign>0.5</yalign>
-                 <xpad>0</xpad>
+                 <xpad>3</xpad>
                  <ypad>0</ypad>
                  <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
+                   <padding>0</padding>
+                   <expand>False</expand>
+                   <fill>False</fill>
                  </child>
                </widget>
 
                <widget>
                  <class>GtkLabel</class>
-                 <name>dpms_off_label</name>
-                 <label>Off After:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <name>fade_label</name>
+                 <label>Fade Duration</label>
+                 <justify>GTK_JUSTIFY_LEFT</justify>
                  <wrap>False</wrap>
-                 <xalign>1</xalign>
+                 <xalign>0</xalign>
                  <yalign>0.5</yalign>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
+                   <padding>10</padding>
+                   <expand>False</expand>
+                   <fill>False</fill>
                  </child>
                </widget>
 
                <widget>
-                 <class>GtkLabel</class>
-                 <name>dpms_suspend_label</name>
-                 <label>Suspend After:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <class>GtkSpinButton</class>
+                 <name>fade_spinbutton</name>
+                 <tooltip>How long it should take for the screen to fade in and out.</tooltip>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>activate</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
+                 </signal>
+                 <signal>
+                   <name>focus_out_event</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
+                 </signal>
+                 <signal>
+                   <name>changed</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+                 </signal>
+                 <climb_rate>1</climb_rate>
+                 <digits>0</digits>
+                 <numeric>True</numeric>
+                 <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+                 <snap>True</snap>
                  <wrap>False</wrap>
-                 <xalign>1</xalign>
-                 <yalign>0.5</yalign>
-                 <xpad>0</xpad>
-                 <ypad>0</ypad>
+                 <value>0</value>
+                 <lower>0</lower>
+                 <upper>10</upper>
+                 <step>1</step>
+                 <page>1</page>
+                 <page_size>1</page_size>
                  <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>2</top_attach>
-                   <bottom_attach>3</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
+                   <padding>0</padding>
+                   <expand>False</expand>
+                   <fill>False</fill>
                  </child>
                </widget>
 
                <widget>
                  <class>GtkLabel</class>
-                 <name>dpms_dummy</name>
-                 <label></label>
+                 <name>fade_sec_label</name>
+                 <label>seconds</label>
                  <justify>GTK_JUSTIFY_LEFT</justify>
                  <wrap>False</wrap>
-                 <xalign>0.5</xalign>
+                 <xalign>0</xalign>
                  <yalign>0.5</yalign>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <child>
-                   <left_attach>2</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
+                   <padding>0</padding>
+                   <expand>False</expand>
+                   <fill>False</fill>
                  </child>
                </widget>
+             </widget>
+           </widget>
+         </widget>
+       </widget>
 
-               <widget>
-                 <class>GtkEventBox</class>
-                 <name>dpms_button_eventbox</name>
-                 <tooltip>Whether the monitor should be powered down after a while.</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>0</top_attach>
-                   <bottom_attach>1</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>True</yfill>
-                 </child>
+       <widget>
+         <class>GtkFrame</class>
+         <name>dpms_frame</name>
+         <border_width>10</border_width>
+         <label>Display Power Management</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <child>
+           <left_attach>1</left_attach>
+           <right_attach>2</right_attach>
+           <top_attach>0</top_attach>
+           <bottom_attach>1</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>True</xexpand>
+           <yexpand>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
+         </child>
 
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>dpms_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:33:01 GMT</last_modification_time>
-                   </signal>
-                   <label>Power Management Enabled</label>
-                   <active>True</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
-               </widget>
-             </widget>
+         <widget>
+           <class>GtkHBox</class>
+           <name>dpms_hbox</name>
+           <border_width>8</border_width>
+           <homogeneous>False</homogeneous>
+           <spacing>8</spacing>
+
+           <widget>
+             <class>GtkPixmap</class>
+             <name>dpms_logo</name>
+             <filename>screensaver-power.xpm</filename>
+             <xalign>0.5</xalign>
+             <yalign>0</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <build_insensitive>True</build_insensitive>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
            </widget>
 
            <widget>
-             <class>GtkFrame</class>
-             <name>cmap_frame</name>
-             <border_width>10</border_width>
-             <label>Colormaps:</label>
-             <label_xalign>0</label_xalign>
-             <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+             <class>GtkVBox</class>
+             <name>dpms_vbox</name>
+             <homogeneous>False</homogeneous>
+             <spacing>0</spacing>
              <child>
-               <left_attach>0</left_attach>
-               <right_attach>1</right_attach>
-               <top_attach>1</top_attach>
-               <bottom_attach>2</bottom_attach>
-               <xpad>0</xpad>
-               <ypad>0</ypad>
-               <xexpand>True</xexpand>
-               <yexpand>False</yexpand>
-               <xshrink>False</xshrink>
-               <yshrink>False</yshrink>
-               <xfill>True</xfill>
-               <yfill>True</yfill>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
              </child>
 
+             <widget>
+               <class>GtkEventBox</class>
+               <name>dpms_button_eventbox</name>
+               <tooltip>Whether the monitor should be powered down after a while.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+
+               <widget>
+                 <class>GtkCheckButton</class>
+                 <name>dpms_button</name>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>toggled</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Mon, 03 Apr 2000 02:33:01 GMT</last_modification_time>
+                 </signal>
+                 <label>Power Management Enabled</label>
+                 <active>True</active>
+                 <draw_indicator>True</draw_indicator>
+               </widget>
+             </widget>
+
              <widget>
                <class>GtkTable</class>
-               <name>cmap_table</name>
-               <border_width>10</border_width>
-               <rows>5</rows>
+               <name>dpms_table</name>
+               <rows>3</rows>
                <columns>3</columns>
                <homogeneous>False</homogeneous>
                <row_spacing>2</row_spacing>
-               <column_spacing>10</column_spacing>
+               <column_spacing>0</column_spacing>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
-                 <class>GtkEntry</class>
-                 <name>fade_text</name>
-                 <tooltip>How long it should take for the screen to fade in and out.</tooltip>
+                 <class>GtkSpinButton</class>
+                 <name>dpms_standby_spinbutton</name>
+                 <tooltip>How long before the monitor goes completely black.</tooltip>
                  <can_focus>True</can_focus>
                  <signal>
                    <name>activate</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
+                   <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
                  </signal>
                  <signal>
                    <name>focus_out_event</name>
                    <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
+                   <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
                  </signal>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
+                 <signal>
+                   <name>changed</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+                 </signal>
+                 <climb_rate>15</climb_rate>
+                 <digits>0</digits>
+                 <numeric>True</numeric>
+                 <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+                 <snap>True</snap>
+                 <wrap>False</wrap>
+                 <value>0</value>
+                 <lower>0</lower>
+                 <upper>1440</upper>
+                 <step>1</step>
+                 <page>30</page>
+                 <page_size>30</page_size>
                  <child>
                    <left_attach>1</left_attach>
                    <right_attach>2</right_attach>
-                   <top_attach>4</top_attach>
-                   <bottom_attach>5</bottom_attach>
+                   <top_attach>0</top_attach>
+                   <bottom_attach>1</bottom_attach>
                    <xpad>0</xpad>
                    <ypad>0</ypad>
                    <xexpand>False</xexpand>
                    <yexpand>False</yexpand>
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
-                   <xfill>False</xfill>
+                   <xfill>True</xfill>
                    <yfill>False</yfill>
                  </child>
                </widget>
 
                <widget>
                  <class>GtkLabel</class>
-                 <name>cmap_dummy</name>
-                 <label></label>
+                 <name>dpms_standby_mlabel</name>
+                 <label>minutes</label>
                  <justify>GTK_JUSTIFY_LEFT</justify>
                  <wrap>False</wrap>
-                 <xalign>0.5</xalign>
+                 <xalign>0</xalign>
                  <yalign>0.5</yalign>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <child>
                    <left_attach>2</left_attach>
                    <right_attach>3</right_attach>
-                   <top_attach>4</top_attach>
-                   <bottom_attach>5</bottom_attach>
+                   <top_attach>0</top_attach>
+                   <bottom_attach>1</bottom_attach>
                    <xpad>0</xpad>
                    <ypad>0</ypad>
                    <xexpand>True</xexpand>
@@ -1002,22 +1424,22 @@ Mono
 
                <widget>
                  <class>GtkLabel</class>
-                 <name>fade_label</name>
-                 <label>Fade Duration:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <name>dpms_suspend_mlabel</name>
+                 <label>minutes</label>
+                 <justify>GTK_JUSTIFY_LEFT</justify>
                  <wrap>False</wrap>
-                 <xalign>1</xalign>
+                 <xalign>0</xalign>
                  <yalign>0.5</yalign>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>4</top_attach>
-                   <bottom_attach>5</bottom_attach>
+                   <left_attach>2</left_attach>
+                   <right_attach>3</right_attach>
+                   <top_attach>1</top_attach>
+                   <bottom_attach>2</bottom_attach>
                    <xpad>0</xpad>
                    <ypad>0</ypad>
-                   <xexpand>False</xexpand>
+                   <xexpand>True</xexpand>
                    <yexpand>False</yexpand>
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
@@ -1027,46 +1449,44 @@ Mono
                </widget>
 
                <widget>
-                 <class>GtkEventBox</class>
-                 <name>install_button_eventbox</name>
-                 <tooltip>Whether to install a private colormap when running in 8-bit mode on the default Visual.</tooltip>
+                 <class>GtkLabel</class>
+                 <name>dpms_off_mlabel</name>
+                 <label>minutes</label>
+                 <justify>GTK_JUSTIFY_LEFT</justify>
+                 <wrap>False</wrap>
+                 <xalign>0</xalign>
+                 <yalign>0.5</yalign>
+                 <xpad>0</xpad>
+                 <ypad>0</ypad>
                  <child>
-                   <left_attach>0</left_attach>
+                   <left_attach>2</left_attach>
                    <right_attach>3</right_attach>
-                   <top_attach>0</top_attach>
-                   <bottom_attach>1</bottom_attach>
+                   <top_attach>2</top_attach>
+                   <bottom_attach>3</bottom_attach>
                    <xpad>0</xpad>
                    <ypad>0</ypad>
-                   <xexpand>False</xexpand>
+                   <xexpand>True</xexpand>
                    <yexpand>False</yexpand>
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
                    <xfill>True</xfill>
-                   <yfill>True</yfill>
+                   <yfill>False</yfill>
                  </child>
-
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>install_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
-                   </signal>
-                   <label>Install Colormap</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
                </widget>
 
                <widget>
-                 <class>GtkEventBox</class>
-                 <name>fade_button_eventbox</name>
-                 <tooltip>Whether the screen should slowly fade to black when the screen saver activates.</tooltip>
+                 <class>GtkLabel</class>
+                 <name>dpms_off_label</name>
+                 <label>Off After</label>
+                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <wrap>False</wrap>
+                 <xalign>1</xalign>
+                 <yalign>0.5</yalign>
+                 <xpad>10</xpad>
+                 <ypad>0</ypad>
                  <child>
                    <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
+                   <right_attach>1</right_attach>
                    <top_attach>2</top_attach>
                    <bottom_attach>3</bottom_attach>
                    <xpad>0</xpad>
@@ -1076,33 +1496,25 @@ Mono
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
                    <xfill>True</xfill>
-                   <yfill>True</yfill>
+                   <yfill>False</yfill>
                  </child>
-
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>fade_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:32:39 GMT</last_modification_time>
-                   </signal>
-                   <label>Fade To Black When Blanking</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
                </widget>
 
                <widget>
-                 <class>GtkEventBox</class>
-                 <name>unfade_button_eventbox</name>
-                 <tooltip>Whether the screen should slowly fade in from black when the screen saver deactivates.</tooltip>
+                 <class>GtkLabel</class>
+                 <name>dpms_suspend_label</name>
+                 <label>Suspend After</label>
+                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <wrap>False</wrap>
+                 <xalign>1</xalign>
+                 <yalign>0.5</yalign>
+                 <xpad>10</xpad>
+                 <ypad>0</ypad>
                  <child>
                    <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
+                   <right_attach>1</right_attach>
+                   <top_attach>1</top_attach>
+                   <bottom_attach>2</bottom_attach>
                    <xpad>0</xpad>
                    <ypad>0</ypad>
                    <xexpand>False</xexpand>
@@ -1110,110 +1522,73 @@ Mono
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
                    <xfill>True</xfill>
-                   <yfill>True</yfill>
+                   <yfill>False</yfill>
                  </child>
-
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>unfade_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:32:51 GMT</last_modification_time>
-                   </signal>
-                   <label>Fade From Black When Unblanking</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
                </widget>
 
                <widget>
-                 <class>GtkHSeparator</class>
-                 <name>cmap_hr</name>
+                 <class>GtkLabel</class>
+                 <name>dpms_standby_label</name>
+                 <label>Standby After</label>
+                 <justify>GTK_JUSTIFY_RIGHT</justify>
+                 <wrap>False</wrap>
+                 <xalign>1</xalign>
+                 <yalign>0.5</yalign>
+                 <xpad>10</xpad>
+                 <ypad>0</ypad>
                  <child>
                    <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
+                   <right_attach>1</right_attach>
+                   <top_attach>0</top_attach>
+                   <bottom_attach>1</bottom_attach>
                    <xpad>0</xpad>
-                   <ypad>2</ypad>
-                   <xexpand>True</xexpand>
+                   <ypad>0</ypad>
+                   <xexpand>False</xexpand>
                    <yexpand>False</yexpand>
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
                    <xfill>True</xfill>
-                   <yfill>True</yfill>
+                   <yfill>False</yfill>
                  </child>
                </widget>
-             </widget>
-           </widget>
-         </widget>
-
-         <widget>
-           <class>GtkTable</class>
-           <name>options_table_1</name>
-           <rows>3</rows>
-           <columns>1</columns>
-           <homogeneous>False</homogeneous>
-           <row_spacing>0</row_spacing>
-           <column_spacing>0</column_spacing>
-           <child>
-             <left_attach>0</left_attach>
-             <right_attach>1</right_attach>
-             <top_attach>0</top_attach>
-             <bottom_attach>1</bottom_attach>
-             <xpad>0</xpad>
-             <ypad>0</ypad>
-             <xexpand>True</xexpand>
-             <yexpand>True</yexpand>
-             <xshrink>False</xshrink>
-             <yshrink>False</yshrink>
-             <xfill>True</xfill>
-             <yfill>True</yfill>
-           </child>
-
-           <widget>
-             <class>GtkFrame</class>
-             <name>grab_frame</name>
-             <border_width>10</border_width>
-             <label>Image Manipulation:</label>
-             <label_xalign>0</label_xalign>
-             <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-             <child>
-               <left_attach>0</left_attach>
-               <right_attach>1</right_attach>
-               <top_attach>1</top_attach>
-               <bottom_attach>2</bottom_attach>
-               <xpad>0</xpad>
-               <ypad>0</ypad>
-               <xexpand>True</xexpand>
-               <yexpand>False</yexpand>
-               <xshrink>False</xshrink>
-               <yshrink>False</yshrink>
-               <xfill>True</xfill>
-               <yfill>True</yfill>
-             </child>
-
-             <widget>
-               <class>GtkTable</class>
-               <name>grab_table</name>
-               <border_width>10</border_width>
-               <rows>4</rows>
-               <columns>3</columns>
-               <homogeneous>False</homogeneous>
-               <row_spacing>0</row_spacing>
-               <column_spacing>0</column_spacing>
 
                <widget>
-                 <class>GtkEventBox</class>
-                 <name>grab_image_eventbox</name>
-                 <tooltip>Whether the image-manipulating modes should operate on random images loaded from disk.</tooltip>
+                 <class>GtkSpinButton</class>
+                 <name>dpms_suspend_spinbutton</name>
+                 <tooltip>How long until the monitor goes into power-saving mode.</tooltip>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>activate</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
+                 </signal>
+                 <signal>
+                   <name>focus_out_event</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
+                 </signal>
+                 <signal>
+                   <name>changed</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+                 </signal>
+                 <climb_rate>15</climb_rate>
+                 <digits>0</digits>
+                 <numeric>True</numeric>
+                 <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+                 <snap>True</snap>
+                 <wrap>False</wrap>
+                 <value>0</value>
+                 <lower>0</lower>
+                 <upper>1440</upper>
+                 <step>1</step>
+                 <page>30</page>
+                 <page_size>30</page_size>
                  <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>2</top_attach>
-                   <bottom_attach>3</bottom_attach>
+                   <left_attach>1</left_attach>
+                   <right_attach>2</right_attach>
+                   <top_attach>1</top_attach>
+                   <bottom_attach>2</bottom_attach>
                    <xpad>0</xpad>
                    <ypad>0</ypad>
                    <xexpand>True</xexpand>
@@ -1221,117 +1596,203 @@ Mono
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
                    <xfill>True</xfill>
-                   <yfill>True</yfill>
+                   <yfill>False</yfill>
                  </child>
-
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>grab_image_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Thu, 12 Apr 2001 23:40:53 GMT</last_modification_time>
-                   </signal>
-                   <label>Choose Random Image:</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
                </widget>
 
                <widget>
-                 <class>GtkButton</class>
-                 <name>image_browse_button</name>
+                 <class>GtkSpinButton</class>
+                 <name>dpms_off_spinbutton</name>
+                 <tooltip>How long until the monitor powers down.</tooltip>
                  <can_focus>True</can_focus>
                  <signal>
-                   <name>clicked</name>
-                   <handler>browse_image_dir_cb</handler>
-                   <last_modification_time>Thu, 12 Apr 2001 00:35:43 GMT</last_modification_time>
+                   <name>activate</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:31:51 GMT</last_modification_time>
                  </signal>
-                 <label>Browse</label>
+                 <signal>
+                   <name>focus_out_event</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:32:24 GMT</last_modification_time>
+                 </signal>
+                 <signal>
+                   <name>changed</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 22 Nov 2001 21:42:33 GMT</last_modification_time>
+                 </signal>
+                 <climb_rate>15</climb_rate>
+                 <digits>0</digits>
+                 <numeric>True</numeric>
+                 <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+                 <snap>True</snap>
+                 <wrap>False</wrap>
+                 <value>0</value>
+                 <lower>0</lower>
+                 <upper>1440</upper>
+                 <step>1</step>
+                 <page>30</page>
+                 <page_size>30</page_size>
                  <child>
-                   <left_attach>2</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>4</xpad>
+                   <left_attach>1</left_attach>
+                   <right_attach>2</right_attach>
+                   <top_attach>2</top_attach>
+                   <bottom_attach>3</bottom_attach>
+                   <xpad>0</xpad>
                    <ypad>0</ypad>
-                   <xexpand>False</xexpand>
+                   <xexpand>True</xexpand>
                    <yexpand>False</yexpand>
                    <xshrink>False</xshrink>
                    <yshrink>False</yshrink>
-                   <xfill>False</xfill>
+                   <xfill>True</xfill>
                    <yfill>False</yfill>
                  </child>
                </widget>
+             </widget>
+           </widget>
+         </widget>
+       </widget>
 
-               <widget>
-                 <class>GtkEventBox</class>
-                 <name>grab_video_eventbox</name>
-                 <tooltip>Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one).</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>True</yfill>
-                 </child>
+       <widget>
+         <class>GtkFrame</class>
+         <name>grab_frame</name>
+         <border_width>10</border_width>
+         <label>Image Manipulation</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <child>
+           <left_attach>0</left_attach>
+           <right_attach>1</right_attach>
+           <top_attach>0</top_attach>
+           <bottom_attach>1</bottom_attach>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <xexpand>True</xexpand>
+           <yexpand>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>True</yfill>
+         </child>
+
+         <widget>
+           <class>GtkHBox</class>
+           <name>grab_hbox</name>
+           <border_width>8</border_width>
+           <homogeneous>False</homogeneous>
+           <spacing>8</spacing>
+
+           <widget>
+             <class>GtkPixmap</class>
+             <name>img_logo</name>
+             <filename>screensaver-snap.xpm</filename>
+             <xalign>0.5</xalign>
+             <yalign>0</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <build_insensitive>True</build_insensitive>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
+           </widget>
 
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>grab_video_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Thu, 12 Apr 2001 23:40:40 GMT</last_modification_time>
-                   </signal>
-                   <label>Grab Video Frames</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
+           <widget>
+             <class>GtkVBox</class>
+             <name>grab_vbox</name>
+             <homogeneous>False</homogeneous>
+             <spacing>0</spacing>
+             <child>
+               <padding>0</padding>
+               <expand>True</expand>
+               <fill>True</fill>
+             </child>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>grab_desk_eventbox</name>
+               <tooltip>Whether the image-manipulating modes should be allowed to operate on an image of your desktop.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+
+               <widget>
+                 <class>GtkCheckButton</class>
+                 <name>grab_desk_button</name>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>toggled</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 12 Apr 2001 23:40:27 GMT</last_modification_time>
+                 </signal>
+                 <label>Grab Desktop Images</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
                </widget>
+             </widget>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>grab_video_eventbox</name>
+               <tooltip>Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one).</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
-                 <class>GtkEventBox</class>
-                 <name>grab_desk_eventbox</name>
-                 <tooltip>Whether the image-manipulating modes should be allowed to operate on an image of your desktop.</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>0</top_attach>
-                   <bottom_attach>1</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>True</yfill>
-                 </child>
+                 <class>GtkCheckButton</class>
+                 <name>grab_video_button</name>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>toggled</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 12 Apr 2001 23:40:40 GMT</last_modification_time>
+                 </signal>
+                 <label>Grab Video Frames</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
+               </widget>
+             </widget>
+
+             <widget>
+               <class>GtkEventBox</class>
+               <name>grab_image_eventbox</name>
+               <tooltip>Whether the image-manipulating modes should operate on random images loaded from disk.</tooltip>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>grab_desk_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Thu, 12 Apr 2001 23:40:27 GMT</last_modification_time>
-                   </signal>
-                   <label>Grab Desktop Images</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
+               <widget>
+                 <class>GtkCheckButton</class>
+                 <name>grab_image_button</name>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>toggled</name>
+                   <handler>pref_changed_cb</handler>
+                   <last_modification_time>Thu, 12 Apr 2001 23:40:53 GMT</last_modification_time>
+                 </signal>
+                 <label>Choose Random Image:</label>
+                 <active>False</active>
+                 <draw_indicator>True</draw_indicator>
                </widget>
+             </widget>
+
+             <widget>
+               <class>GtkHBox</class>
+               <name>image_hbox</name>
+               <homogeneous>False</homogeneous>
+               <spacing>0</spacing>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
                  <class>GtkLabel</class>
@@ -1344,18 +1805,9 @@ Mono
                  <xpad>8</xpad>
                  <ypad>0</ypad>
                  <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>True</xshrink>
-                   <yshrink>True</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
+                   <padding>0</padding>
+                   <expand>False</expand>
+                   <fill>False</fill>
                  </child>
                </widget>
 
@@ -1379,30 +1831,284 @@ Mono
                  <text_max_length>0</text_max_length>
                  <text></text>
                  <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>True</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
+                   <padding>0</padding>
+                   <expand>True</expand>
+                   <fill>True</fill>
+                 </child>
+               </widget>
+
+               <widget>
+                 <class>GtkButton</class>
+                 <name>image_browse_button</name>
+                 <can_focus>True</can_focus>
+                 <signal>
+                   <name>clicked</name>
+                   <handler>browse_image_dir_cb</handler>
+                   <last_modification_time>Thu, 12 Apr 2001 00:35:43 GMT</last_modification_time>
+                 </signal>
+                 <label>Browse</label>
+                 <relief>GTK_RELIEF_NORMAL</relief>
+                 <child>
+                   <padding>4</padding>
+                   <expand>False</expand>
+                   <fill>False</fill>
                  </child>
                </widget>
              </widget>
            </widget>
+         </widget>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkLabel</class>
+       <child_name>Notebook:tab</child_name>
+       <name>options_tab</name>
+       <label>Advanced</label>
+       <justify>GTK_JUSTIFY_CENTER</justify>
+       <wrap>False</wrap>
+       <xalign>0.5</xalign>
+       <yalign>0.5</yalign>
+       <xpad>0</xpad>
+       <ypad>0</ypad>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
+<widget>
+  <class>GtkDialog</class>
+  <name>xscreensaver_settings_dialog</name>
+  <title>XScreenSaver: Mode-Specific Settings</title>
+  <type>GTK_WINDOW_DIALOG</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>True</modal>
+  <allow_shrink>True</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+  <wmclass_name>settings</wmclass_name>
+  <wmclass_class>XScreenSaver</wmclass_class>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>Dialog:vbox</child_name>
+    <name>dialog_vbox</name>
+    <homogeneous>False</homogeneous>
+    <spacing>0</spacing>
+
+    <widget>
+      <class>GtkHBox</class>
+      <child_name>Dialog:action_area</child_name>
+      <name>dialog_action_area</name>
+      <border_width>10</border_width>
+      <homogeneous>True</homogeneous>
+      <spacing>5</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkHBox</class>
+       <name>actionarea_hbox</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+
+       <widget>
+         <class>GtkHButtonBox</class>
+         <name>dialog_hbuttonbox</name>
+         <layout_style>GTK_BUTTONBOX_SPREAD</layout_style>
+         <spacing>30</spacing>
+         <child_min_width>85</child_min_width>
+         <child_min_height>27</child_min_height>
+         <child_ipad_x>7</child_ipad_x>
+         <child_ipad_y>0</child_ipad_y>
+         <child>
+           <padding>0</padding>
+           <expand>True</expand>
+           <fill>True</fill>
+         </child>
+
+         <widget>
+           <class>GtkButton</class>
+           <name>adv_button</name>
+           <tooltip>Edit the command line directly.</tooltip>
+           <can_default>True</can_default>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>clicked</name>
+             <handler>settings_adv_cb</handler>
+             <last_modification_time>Tue, 20 Nov 2001 00:18:26 GMT</last_modification_time>
+           </signal>
+           <label>Advanced &gt;&gt;</label>
+           <relief>GTK_RELIEF_NORMAL</relief>
+         </widget>
+
+         <widget>
+           <class>GtkButton</class>
+           <name>std_button</name>
+           <tooltip>Back to the graphical configuration options.</tooltip>
+           <can_default>True</can_default>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>clicked</name>
+             <handler>settings_std_cb</handler>
+             <last_modification_time>Tue, 20 Nov 2001 00:18:45 GMT</last_modification_time>
+           </signal>
+           <label>Standard &lt;&lt;</label>
+           <relief>GTK_RELIEF_NORMAL</relief>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkHButtonBox</class>
+         <name>ok_cancel_hbuttonbox</name>
+         <layout_style>GTK_BUTTONBOX_END</layout_style>
+         <spacing>30</spacing>
+         <child_min_width>85</child_min_width>
+         <child_min_height>27</child_min_height>
+         <child_ipad_x>7</child_ipad_x>
+         <child_ipad_y>0</child_ipad_y>
+         <child>
+           <padding>0</padding>
+           <expand>True</expand>
+           <fill>True</fill>
+         </child>
+
+         <widget>
+           <class>GtkButton</class>
+           <name>ok_button</name>
+           <can_default>True</can_default>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>clicked</name>
+             <handler>settings_ok_cb</handler>
+             <last_modification_time>Mon, 19 Nov 2001 22:07:36 GMT</last_modification_time>
+           </signal>
+           <label>OK</label>
+           <relief>GTK_RELIEF_NORMAL</relief>
+         </widget>
+
+         <widget>
+           <class>GtkButton</class>
+           <name>cancel_button</name>
+           <can_default>True</can_default>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>clicked</name>
+             <handler>settings_cancel_cb</handler>
+             <last_modification_time>Mon, 19 Nov 2001 22:07:52 GMT</last_modification_time>
+           </signal>
+           <label>Cancel</label>
+           <relief>GTK_RELIEF_NORMAL</relief>
+         </widget>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkTable</class>
+      <name>dialog_top_table</name>
+      <border_width>8</border_width>
+      <rows>1</rows>
+      <columns>2</columns>
+      <homogeneous>False</homogeneous>
+      <row_spacing>8</row_spacing>
+      <column_spacing>8</column_spacing>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkFrame</class>
+       <name>opt_frame</name>
+       <label>Settings</label>
+       <label_xalign>0</label_xalign>
+       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+       <child>
+         <left_attach>0</left_attach>
+         <right_attach>1</right_attach>
+         <top_attach>0</top_attach>
+         <bottom_attach>1</bottom_attach>
+         <xpad>4</xpad>
+         <ypad>8</ypad>
+         <xexpand>True</xexpand>
+         <yexpand>True</yexpand>
+         <xshrink>False</xshrink>
+         <yshrink>False</yshrink>
+         <xfill>True</xfill>
+         <yfill>True</yfill>
+       </child>
+
+       <widget>
+         <class>GtkNotebook</class>
+         <name>opt_notebook</name>
+         <border_width>12</border_width>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>switch_page</name>
+           <handler>settings_switch_page_cb</handler>
+           <last_modification_time>Tue, 20 Nov 2001 00:16:51 GMT</last_modification_time>
+         </signal>
+         <show_tabs>True</show_tabs>
+         <show_border>False</show_border>
+         <tab_pos>GTK_POS_BOTTOM</tab_pos>
+         <scrollable>False</scrollable>
+         <tab_hborder>2</tab_hborder>
+         <tab_vborder>2</tab_vborder>
+         <popup_enable>False</popup_enable>
+
+         <widget>
+           <class>GtkVBox</class>
+           <name>settings_vbox</name>
+           <homogeneous>False</homogeneous>
+           <spacing>0</spacing>
+
+           <widget>
+             <class>Placeholder</class>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <child_name>Notebook:tab</child_name>
+           <name>std_label</name>
+           <label>Standard</label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0.5</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+         </widget>
+
+         <widget>
+           <class>GtkTable</class>
+           <name>opt_table</name>
+           <rows>4</rows>
+           <columns>2</columns>
+           <homogeneous>False</homogeneous>
+           <row_spacing>0</row_spacing>
+           <column_spacing>0</column_spacing>
 
            <widget>
-             <class>GtkFrame</class>
-             <name>blanking_frame</name>
-             <border_width>10</border_width>
-             <label>Blanking and Locking:</label>
-             <label_xalign>0</label_xalign>
-             <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+             <class>GtkPixmap</class>
+             <name>cmd_logo</name>
+             <filename>screensaver-cmndln.xpm</filename>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>4</xpad>
+             <ypad>8</ypad>
+             <build_insensitive>True</build_insensitive>
              <child>
                <left_attach>0</left_attach>
                <right_attach>1</right_attach>
@@ -1410,298 +2116,132 @@ Mono
                <bottom_attach>1</bottom_attach>
                <xpad>0</xpad>
                <ypad>0</ypad>
-               <xexpand>True</xexpand>
+               <xexpand>False</xexpand>
                <yexpand>False</yexpand>
                <xshrink>False</xshrink>
                <yshrink>False</yshrink>
                <xfill>True</xfill>
                <yfill>True</yfill>
              </child>
+           </widget>
 
-             <widget>
-               <class>GtkTable</class>
-               <name>blanking_table</name>
-               <border_width>10</border_width>
-               <rows>5</rows>
-               <columns>3</columns>
-               <homogeneous>False</homogeneous>
-               <row_spacing>2</row_spacing>
-               <column_spacing>10</column_spacing>
-
-               <widget>
-                 <class>GtkEntry</class>
-                 <name>lock_text</name>
-                 <tooltip>How long after the screen saver has activated until a password will be required (if  `Require Password' is also set.)</tooltip>
-                 <can_focus>True</can_focus>
-                 <signal>
-                   <name>activate</name>
-                   <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
-                 </signal>
-                 <signal>
-                   <name>focus_out_event</name>
-                   <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
-                 </signal>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
-                 <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>4</top_attach>
-                   <bottom_attach>5</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>False</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
+           <widget>
+             <class>GtkHBox</class>
+             <name>visual_hbox</name>
+             <homogeneous>False</homogeneous>
+             <spacing>0</spacing>
+             <child>
+               <left_attach>1</left_attach>
+               <right_attach>2</right_attach>
+               <top_attach>3</top_attach>
+               <bottom_attach>4</bottom_attach>
+               <xpad>0</xpad>
+               <ypad>0</ypad>
+               <xexpand>False</xexpand>
+               <yexpand>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>True</yfill>
+             </child>
 
-               <widget>
-                 <class>GtkEntry</class>
-                 <name>cycle_text</name>
-                 <tooltip>How long each demo will be run before moving on to another.</tooltip>
-                 <can_focus>True</can_focus>
-                 <signal>
-                   <name>activate</name>
-                   <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:29 GMT</last_modification_time>
-                 </signal>
-                 <signal>
-                   <name>focus_out_event</name>
-                   <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:35:28 GMT</last_modification_time>
-                 </signal>
-                 <editable>True</editable>
-                 <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
-                 <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>False</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
+             <widget>
+               <class>GtkLabel</class>
+               <name>visual</name>
+               <label>Visual:</label>
+               <justify>GTK_JUSTIFY_RIGHT</justify>
+               <wrap>False</wrap>
+               <xalign>1</xalign>
+               <yalign>0.5</yalign>
+               <xpad>4</xpad>
+               <ypad>0</ypad>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+             </widget>
+
+             <widget>
+               <class>GtkCombo</class>
+               <name>visual_combo</name>
+               <value_in_list>False</value_in_list>
+               <ok_if_empty>True</ok_if_empty>
+               <case_sensitive>False</case_sensitive>
+               <use_arrows>True</use_arrows>
+               <use_arrows_always>False</use_arrows_always>
+               <items>Any
+Best
+Default
+Default-N
+GL
+TrueColor
+PseudoColor
+StaticGray
+GrayScale
+DirectColor
+Color
+Gray
+Mono
+</items>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
 
                <widget>
                  <class>GtkEntry</class>
-                 <name>timeout_text</name>
-                 <tooltip>How long until the screen saver activates and begins running demos.</tooltip>
+                 <child_name>GtkCombo:entry</child_name>
+                 <name>combo-entry1</name>
+                 <tooltip>The X visual type that this demo will require.  If that visual is available it will be used, otherwise, this demo will not be run.</tooltip>
                  <can_focus>True</can_focus>
-                 <signal>
-                   <name>activate</name>
-                   <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:28:10 GMT</last_modification_time>
-                 </signal>
-                 <signal>
-                   <name>focus_out_event</name>
-                   <handler>pref_changed_cb</handler>
-                   <last_modification_time>Mon, 03 Apr 2000 02:34:26 GMT</last_modification_time>
-                 </signal>
                  <editable>True</editable>
                  <text_visible>True</text_visible>
-                 <text_max_length>8</text_max_length>
-                 <text></text>
-                 <child>
-                   <left_attach>1</left_attach>
-                   <right_attach>2</right_attach>
-                   <top_attach>0</top_attach>
-                   <bottom_attach>1</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>False</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
-
-               <widget>
-                 <class>GtkLabel</class>
-                 <name>timeout_label</name>
-                 <label>Blank After:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
-                 <wrap>False</wrap>
-                 <xalign>1</xalign>
-                 <yalign>0.5</yalign>
-                 <xpad>0</xpad>
-                 <ypad>0</ypad>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>0</top_attach>
-                   <bottom_attach>1</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
-
-               <widget>
-                 <class>GtkLabel</class>
-                 <name>cycle_label</name>
-                 <label>Cycle After:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
-                 <wrap>False</wrap>
-                 <xalign>1</xalign>
-                 <yalign>0.5</yalign>
-                 <xpad>0</xpad>
-                 <ypad>0</ypad>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
-
-               <widget>
-                 <class>GtkLabel</class>
-                 <name>lock_label</name>
-                 <label>Lock After:</label>
-                 <justify>GTK_JUSTIFY_RIGHT</justify>
-                 <wrap>False</wrap>
-                 <xalign>1</xalign>
-                 <yalign>0.5</yalign>
-                 <xpad>0</xpad>
-                 <ypad>0</ypad>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>4</top_attach>
-                   <bottom_attach>5</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
-
-               <widget>
-                 <class>GtkLabel</class>
-                 <name>blanking_dummy</name>
-                 <label></label>
-                 <justify>GTK_JUSTIFY_LEFT</justify>
-                 <wrap>False</wrap>
-                 <xalign>0.5</xalign>
-                 <yalign>0.5</yalign>
-                 <xpad>0</xpad>
-                 <ypad>0</ypad>
-                 <child>
-                   <left_attach>2</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>4</top_attach>
-                   <bottom_attach>5</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
-               </widget>
-
-               <widget>
-                 <class>GtkEventBox</class>
-                 <name>lock_button_eventbox</name>
-                 <tooltip>Whether a password should be required to unblank the screen.</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>3</top_attach>
-                   <bottom_attach>4</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>False</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>True</yfill>
-                 </child>
-
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>lock_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:31:53 GMT</last_modification_time>
-                   </signal>
-                   <label>Require Password</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
-               </widget>
-
-               <widget>
-                 <class>GtkHSeparator</class>
-                 <name>blanking_hr</name>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>3</right_attach>
-                   <top_attach>2</top_attach>
-                   <bottom_attach>3</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>2</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>True</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>True</yfill>
-                 </child>
+                 <text_max_length>0</text_max_length>
+                 <text>Any</text>
                </widget>
              </widget>
            </widget>
 
            <widget>
-             <class>GtkFrame</class>
-             <name>diag_frame</name>
-             <border_width>10</border_width>
-             <label>Diagnostics:</label>
-             <label_xalign>0</label_xalign>
-             <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+             <class>GtkLabel</class>
+             <name>cmd_label</name>
+             <label>Command Line:</label>
+             <justify>GTK_JUSTIFY_LEFT</justify>
+             <wrap>False</wrap>
+             <xalign>0</xalign>
+             <yalign>1</yalign>
+             <xpad>0</xpad>
+             <ypad>2</ypad>
              <child>
-               <left_attach>0</left_attach>
-               <right_attach>1</right_attach>
+               <left_attach>1</left_attach>
+               <right_attach>2</right_attach>
+               <top_attach>1</top_attach>
+               <bottom_attach>2</bottom_attach>
+               <xpad>0</xpad>
+               <ypad>0</ypad>
+               <xexpand>True</xexpand>
+               <yexpand>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>False</yfill>
+             </child>
+           </widget>
+
+           <widget>
+             <class>GtkEntry</class>
+             <name>cmd_text</name>
+             <width>80</width>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+             <child>
+               <left_attach>1</left_attach>
+               <right_attach>2</right_attach>
                <top_attach>2</top_attach>
                <bottom_attach>3</bottom_attach>
                <xpad>0</xpad>
@@ -1711,138 +2251,104 @@ Mono
                <xshrink>False</xshrink>
                <yshrink>False</yshrink>
                <xfill>True</xfill>
-               <yfill>True</yfill>
+               <yfill>False</yfill>
              </child>
+           </widget>
+         </widget>
 
-             <widget>
-               <class>GtkTable</class>
-               <name>diag_table</name>
-               <border_width>10</border_width>
-               <rows>3</rows>
-               <columns>1</columns>
-               <homogeneous>False</homogeneous>
-               <row_spacing>2</row_spacing>
-               <column_spacing>10</column_spacing>
-
-               <widget>
-                 <class>GtkEventBox</class>
-                 <name>splash_button_eventbox</name>
-                 <tooltip>Whether the splash screen (with the version number and `Help' button) should be momentarily displayed when the daemon first starts up.</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>2</top_attach>
-                   <bottom_attach>3</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
+         <widget>
+           <class>GtkLabel</class>
+           <child_name>Notebook:tab</child_name>
+           <name>adv_label</name>
+           <label>Advanced</label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0.5</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+         </widget>
+       </widget>
+      </widget>
 
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>splash_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:32:39 GMT</last_modification_time>
-                   </signal>
-                   <label>Display Splash Screen at Startup</label>
-                   <active>True</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
-               </widget>
+      <widget>
+       <class>GtkFrame</class>
+       <name>doc_frame</name>
+       <label>Description</label>
+       <label_xalign>0</label_xalign>
+       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+       <child>
+         <left_attach>1</left_attach>
+         <right_attach>2</right_attach>
+         <top_attach>0</top_attach>
+         <bottom_attach>1</bottom_attach>
+         <xpad>4</xpad>
+         <ypad>8</ypad>
+         <xexpand>True</xexpand>
+         <yexpand>True</yexpand>
+         <xshrink>True</xshrink>
+         <yshrink>True</yshrink>
+         <xfill>True</xfill>
+         <yfill>True</yfill>
+       </child>
 
-               <widget>
-                 <class>GtkEventBox</class>
-                 <name>capture_button_eventbox</name>
-                 <tooltip>Whether the stdout and stderr streams of graphics demos should be displayed on the xscreensaver window.</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>1</top_attach>
-                   <bottom_attach>2</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
+       <widget>
+         <class>GtkVBox</class>
+         <name>doc_vbox</name>
+         <homogeneous>False</homogeneous>
+         <spacing>0</spacing>
 
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>capture_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
-                   </signal>
-                   <label>Display Subprocess Errors</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
-               </widget>
+         <widget>
+           <class>GtkLabel</class>
+           <name>doc</name>
+           <label></label>
+           <justify>GTK_JUSTIFY_LEFT</justify>
+           <wrap>True</wrap>
+           <xalign>0</xalign>
+           <yalign>0</yalign>
+           <xpad>10</xpad>
+           <ypad>10</ypad>
+           <child>
+             <padding>0</padding>
+             <expand>True</expand>
+             <fill>True</fill>
+           </child>
+         </widget>
 
-               <widget>
-                 <class>GtkEventBox</class>
-                 <name>verbose_button_eventbox</name>
-                 <tooltip>Whether the daemon should print lots of debugging information.</tooltip>
-                 <child>
-                   <left_attach>0</left_attach>
-                   <right_attach>1</right_attach>
-                   <top_attach>0</top_attach>
-                   <bottom_attach>1</bottom_attach>
-                   <xpad>0</xpad>
-                   <ypad>0</ypad>
-                   <xexpand>True</xexpand>
-                   <yexpand>False</yexpand>
-                   <xshrink>False</xshrink>
-                   <yshrink>False</yshrink>
-                   <xfill>True</xfill>
-                   <yfill>False</yfill>
-                 </child>
+         <widget>
+           <class>GtkHButtonBox</class>
+           <name>doc_hbuttonbox</name>
+           <border_width>4</border_width>
+           <layout_style>GTK_BUTTONBOX_END</layout_style>
+           <spacing>30</spacing>
+           <child_min_width>85</child_min_width>
+           <child_min_height>27</child_min_height>
+           <child_ipad_x>7</child_ipad_x>
+           <child_ipad_y>0</child_ipad_y>
+           <child>
+             <padding>0</padding>
+             <expand>False</expand>
+             <fill>False</fill>
+             <pack>GTK_PACK_END</pack>
+           </child>
 
-                 <widget>
-                   <class>GtkCheckButton</class>
-                   <name>verbose_button</name>
-                   <can_focus>True</can_focus>
-                   <signal>
-                     <name>toggled</name>
-                     <handler>pref_changed_cb</handler>
-                     <last_modification_time>Mon, 03 Apr 2000 02:32:25 GMT</last_modification_time>
-                   </signal>
-                   <label>Verbose Diagnostics</label>
-                   <active>False</active>
-                   <draw_indicator>True</draw_indicator>
-                 </widget>
-               </widget>
-             </widget>
+           <widget>
+             <class>GtkButton</class>
+             <name>manual</name>
+             <tooltip>Click here to read the manual for this display mode, if it has one.</tooltip>
+             <can_default>True</can_default>
+             <can_focus>True</can_focus>
+             <signal>
+               <name>clicked</name>
+               <handler>manual_cb</handler>
+               <last_modification_time>Wed, 17 Nov 1999 09:43:37 GMT</last_modification_time>
+             </signal>
+             <label>Documentation...</label>
+             <relief>GTK_RELIEF_NORMAL</relief>
            </widget>
          </widget>
        </widget>
       </widget>
-
-      <widget>
-       <class>GtkLabel</class>
-       <child_name>Notebook:tab</child_name>
-       <name>options_tab</name>
-       <label>Screensaver Options</label>
-       <justify>GTK_JUSTIFY_CENTER</justify>
-       <wrap>False</wrap>
-       <xalign>0.5</xalign>
-       <yalign>0.5</yalign>
-       <xpad>0</xpad>
-       <ypad>0</ypad>
-      </widget>
     </widget>
   </widget>
 </widget>
index 689a325d90bf59f4b5757d44388ad8eab1bff4cf..f4f6d246cff5347fc9e431f6bfdebd49ca5336a8 100644 (file)
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "25-Oct-2001 (3.34)" "X Version 11"
+.TH XScreenSaver 1 "02-Jan-2002 (4.00)" "X Version 11"
 .SH NAME
 xscreensaver-demo - interactively control the background xscreensaver daemon
 .SH SYNOPSIS
 .B xscreensaver\-demo
-[\-display \fIhost:display.screen\fP] [\-prefs] [\-xrm \fIresources\fP]
+[\-display \fIhost:display.screen\fP]
+[\-prefs]
+[--crapplet]
+[--debug]
 .SH DESCRIPTION
 The \fIxscreensaver\-demo\fP program is a graphical front-end for 
 setting the parameters used by the background
@@ -74,9 +77,29 @@ can find online copies of the
 and
 .BR xscreensaver\-command (1)
 manuals.
-.SH GRAPHICS DEMOS TAB
-On the left is a list of the names of the various display modes, and
-on the right are some fields that let you edit their behavior.
+.SH DISPLAY MODES TAB
+This page contains a list of the names of the various display modes, a
+preview area, and some fields that let you configure screen saver behavior.
+.TP 4
+.B Mode
+This option menu controls the behavior of the screen saver.  The options are:
+.RS 8
+.TP 8
+.B Random Screen Saver
+When blanking the screen, select a random display mode from among those
+that are enabled and applicable.  This is the default.
+.TP 8
+.B Only One Screen Saver
+When blanking the screen, only ever use one particular display mode (the
+one selected in the list.)
+.TP 8
+.B Blank Screen Only
+When blanking the screen, just go black: don't run any graphics hacks.
+.TP 8
+.B Disable Screen Saver
+Don't ever blank the screen, and don't ever allow the monitor to power down.
+
+.RE
 .TP 4
 .B Demo List
 Double-clicking in the list on the left will let you try out the indicated
@@ -85,14 +108,15 @@ mode, just as it would if the \fIxscreensaver\fP daemon had launched it.
 Clicking the mouse again will stop the demo and un-blank the screen, making
 the dialog box visible again.
 
-Single-clicking in the list will populate the fields on the right side of
-the window.
+Single-clicking in the list will run it in the small preview pane on the
+right.  (But beware: many of the display modes behave somewhat differently
+when running in full-screen mode, so the scaled-down view might not give
+an accurate impression.)
 
-Each name in the list has a checkbox next to it: this is a duplicate of
-the \fIEnabled\fP checkbox, and indicates (and controls) whether
-xscreensaver will  use this display mode at all.  If the box is not
-checked, then this demo will not be run automatically (though you can
-run it explicitly by double-clicking on its name.)
+When \fBMode\fP is set to \fBRandom Screen Saver\fP, each name in the list
+has a checkbox next to it: this controls whether this display mode is
+enabled.  If it is unchecked, then that mode will not be chosen.  (Though
+you can still run it explicitly by double-clicking on its name.)
 .TP 4
 .B Arrow Buttons
 Beneath the list are a pair of up and down arrows. Clicking on the down 
@@ -100,67 +124,43 @@ arrow will select the next item in the list, and then run it in full-screen
 mode, just as if you had double-clicked on it.  The up arrow goes the other
 way.  This is just a shortcut for trying out all of the display modes in turn.
 .TP 4
-.B Program Description
-At the top will be a brief description of the program.  Below that is a
-text field where you can edit the arguments to the program as xscreensaver
-will invoke it.  (Note that most of these programs have their own man pages
-that describe the command-line options they take.)
-.TP 4
-.B Enabled
-The \fIEnabled\fP checkbox controls whether xscreensaver will use this
-display mode at all.  This way, all the modes can remain available, but
-you can choose which ones will be automatically run.
-.TP 4
-.B Visual
-The \fIVisual\fP field is where you can select the X visual type that this
-demo will require.  If you specify one (other than \fIAny\fP) then the
-program will only be run on that kind of visual.  For example, you can
-specify that a particular program should only be run if color is available,
-and another should only be run in monochrome.  See the discussion of the
-\fIprograms\fP parameter in the \fIConfiguration\fP section of the
-.BR xscreensaver (1)
-manual.
-
-This is a combo-box, so you can either select an item from the popup menu,
-or type in a specific visual's hexadecimal ID.
-.TP 4
-.B Demo
-This button runs the demo in full-screen mode so that you can try it out.
-Click the mouse to dismiss it.
-.TP 4
-.B Documentation
-Since each of the display modes is actually a separate program, they each
-may have their own manual.  This opens a window viewing the man page of
-this program, if it has one.
-.SH SCREENSAVER OPTIONS TAB
-This tab lets you change various settings used by the xscreensaver daemon
-itself, rather than its sub-programs.
-.TP 4
 .B Blank After
 After the user has been idle this long, the \fIxscreensaver\fP daemon
 will blank the screen.
 .TP 4
 .B Cycle After
-After the screensaver has been running for this long, the currently
+jAfter the screensaver has been running for this long, the currently
 running graphics demo will be killed, and a new one started.  
 If this is 0, then the graphics demo will never be changed:
 only one demo will run until the screensaver is deactivated by user 
 activity.
 .TP 4
-.B Require Password
-Whether the screen saver should lock the screen when it activates.
-.TP 4
-.B Lock After
-If \fIRequire Password\fP is selected, this controls the length of 
-the ``grace period'' between when the screensaver activates, and when the
-screen becomes locked.  For example, if this is 0:05:00, 
-and \fIBlank After\fP is 0:10:00, then after 10 minutes, the screen 
-would blank.  If there was user  activity at 12 minutes, no password
-would be required to un-blank the screen.  But, if there was user activity
-at 15 minutes or later (that is, \fILock After\fP minutes after 
-activation) then a password would be required.  The default is 0, meaning
-that if locking is enabled, then a password will be required as soon as the 
-screen blanks.
+.B Lock Screen
+When this is checked, the screen will be locked when it activates.
+.TP 4
+.B Lock Screen After
+This controls the length of the ``grace period'' between when the
+screensaver activates, and when the screen becomes locked.  For
+example, if this is 5 minutes, and \fIBlank After\fP is 10 minutes,
+then after 10 minutes, the screen would blank.  If there was user
+activity at 12 minutes, no password would be required to un-blank the
+screen.  But, if there was user activity at 15 minutes or later (that
+is, \fILock Screen After\fP minutes after activation) then a password
+would be required.  The default is 0, meaning that if locking is
+enabled, then a password will be required as soon as the screen blanks.
+.TP 4
+.B Preview
+This button, below the small preview window, runs the demo in full-screen
+mode so that you can try it out.  This is the same thing that happens when
+you double-click an element in the list.  Click the mouse to dismiss the
+full-screen preview.
+.TP 4
+.B Settings
+This button will pop up a dialog where you can configure settings specific
+to the display mode selected in the list.
+.SH ADVANCED TAB
+This tab lets you change various settings used by the xscreensaver daemon
+itself, rather than its sub-programs.
 .TP 4
 .B Grab Desktop Images
 Some of the graphics hacks manipulate images.  If this option is selected,
@@ -262,6 +262,29 @@ commonly used ones; see the manual for
 .BR xscreensaver (1)
 for other parameters that can be set by editing the \fI~/.xscreensaver\fP
 file, or the X resource database.
+.SH SETTINGS DIALOG
+When you click on the \fISettings\fP button on the \fIDisplay Modes\fP
+tab, a configuration dialog will pop up that lets you customize settings
+of the selected display mode.  Each display mode has its own custom
+configuration controls on the left side.
+
+On the right side is a paragraph or two describing the display mode.
+Below that is a \fBDocumentation\fP button that will display the display
+mode's manual page, if it has one, in a new window (since each of the
+display modes is actually a separate program, they each may have their
+own manual.)
+
+The \fBAdvanced\fP button reconfigures the dialog box so that you can
+edit the display mode's command line directly, instead of using the 
+graphical controls.  It also lets you configure the X visual type that
+this mode will require.  If you specify one (other than \fIAny\fP) then
+the program will only be run on that kind of visual.  For example, you
+can specify that a particular program should only be run if color is
+available, and another should only be run in monochrome.  See the
+discussion of the \fIprograms\fP parameter in the \fIConfiguration\fP
+section of the
+.BR xscreensaver (1)
+manual.
 .SH COMMAND-LINE OPTIONS
 .I xscreensaver\-demo
 accepts the following command line options.
@@ -272,8 +295,15 @@ window on that display, and also control the \fIxscreensaver\fP daemon that
 is managing that same display.
 .TP 8
 .B \-prefs
-Start up with the \fBScreensaver Options\fP tab selected by default
-instead of the \fBGraphics Demos\fP tab.
+Start up with the \fBAdvanced\fP tab selected by default
+instead of the \fBDisplay Modes\fP tab.
+.TP 8
+.B \-crapplet
+For use by the Gnome Control Center code: this causes this program to
+be embedded inside the Control Center window.
+.TP 8
+.B \-debug
+Causes lots of diagnostics to be printed on stderr.
 .P
 It is important that the \fIxscreensaver\fP and \fIxscreensaver\-demo\fP
 processes be running on the same machine, or at least, on two machines
index 402b1439dc413607c8dce4222e853efb2a222217..6370db1c24b4d47ca4a1647e55a6d697b1fb3e40 100755 (executable)
@@ -32,7 +32,7 @@ use Fcntl;
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.5 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.6 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 
@@ -43,11 +43,11 @@ my $verbose = 0;
 # If you add other programs to this list, please let me know!
 #
 my @programs = (
+  "chbg       -once -xscreensaver -max_grow 4 -max_size 100",
   "xv         -root -quit -viewonly -maxpect -noresetroot -quick24 -rmode 5" .
   "           -rfg black -rbg black",
   "xli        -quiet -fullscreen -onroot -center -border black",
   "xloadimage -quiet -fullscreen -onroot -center -border black",
-  "chbg       -once -xscreensaver -max_grow 4",
 
 # this lame program wasn't built with vroot.h:
 # "xsri       -scale -keep-aspect -center-horizontal -center-vertical",
index 48195c31f08ad139fc8f57ce615d1fe1d7ed94cd..175e744ebe4b763ad10a26326139bcfb91eb78ca 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "25-Oct-2001 (3.34)" "X Version 11"
+.TH XScreenSaver 1 "02-Jan-2002 (4.00)" "X Version 11"
 .SH NAME
 xscreensaver-getimage-file - put a randomly-selected image on the root window
 .SH SYNOPSIS
index 7bcd9ff2c90b4aa5933fb494204269d8a6d65812..4dc449ff53fe52c5088cec86d68b9d2690312554 100755 (executable)
@@ -29,7 +29,7 @@ use diagnostics;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.5 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.6 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 
@@ -52,12 +52,12 @@ my $sgi_bogosity = "$tmpfile-00000.rgb";
 
 my @programs = (
 
-  "bttvgrab -d q -Q -l 1 -o jpg -f $tmpfile",  # BTTV
+  "bttvgrab -d q -Q -l 1 -o ppm -f $tmpfile",  # BTTV
   "qcam > $tmpfile",                           # Connectix Qcam
   "streamer -s 768x576 -o $tmpfile",           # XawTV
   "atitv snap $tmpfile",                       # ATI video capture card
 
-  "vidtomem -f $tmpfile 2>- && mv $sgi_bogosity $tmpfile",  # Silicon Graphics
+  "vidtomem -f $tmpfile 2>&- && mv $sgi_bogosity $tmpfile",  # Silicon Graphics
 );
 
 
index 03702cc70729dba52929e46db58474108a4afbb0..e6674b177d341aee73fa125c6adef824819b2e4c 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "25-Oct-2001 (3.34)" "X Version 11"
+.TH XScreenSaver 1 "02-Jan-2002 (4.00)" "X Version 11"
 .SH NAME
 xscreensaver-getimage-video - put a video frame on the root window
 .SH SYNOPSIS
index c8e8228b6820af6711b371f9ab2a80637c378deb..c5c302996315fd5e1352692292a9ac145603587c 100644 (file)
 #include <X11/Intrinsic.h>
 #include <errno.h>
 
+#ifdef HAVE_XMU
+# ifndef VMS
+#  include <X11/Xmu/Error.h>
+# else /* VMS */
+#  include <Xmu/Error.h>
+# endif
+#else
+# include "xmu.h"
+#endif
+
 #include "yarandom.h"
 #include "grabscreen.h"
 #include "resources.h"
@@ -94,6 +104,18 @@ exec_error (char **av)
   exit (1);
 }
 
+static int
+x_ehandler (Display *dpy, XErrorEvent *error)
+{
+  fprintf (stderr, "\nX error in %s:\n", progname);
+  if (XmuPrintDefaultErrorMessage (dpy, error, stderr))
+    exit (-1);
+  else
+    fprintf (stderr, " (nonfatal.)\n");
+  return 0;
+}
+
+
 
 static void
 get_image (Screen *screen, Window window, Bool verbose_p)
@@ -106,9 +128,6 @@ get_image (Screen *screen, Window window, Bool verbose_p)
 
   enum { do_desk, do_video, do_image, do_bars } which = do_bars;
   int count = 0;
-  if (desk_p) count++;
-  if (video_p) count++;
-  if (image_p) count++;
 
   if (verbose_p)
     {
@@ -146,7 +165,17 @@ get_image (Screen *screen, Window window, Bool verbose_p)
      know it's not a security problem to expose desktop bits.)
    */
 
-  if (window != VirtualRootWindowOfScreen (screen))
+  if ((desk_p || video_p || image_p) &&
+      !top_level_window_p (screen, window))
+    {
+      desk_p  = False;
+      video_p = False;
+      image_p = False;
+      if (verbose_p)
+        fprintf (stderr, "%s: not a top-level window: using colorbars.\n",
+                 progname);
+    }
+  else if (window != VirtualRootWindowOfScreen (screen))
     {
       Bool changed_p = False;
       if (!desk_p) desk_p  = True,  changed_p = True;
@@ -158,6 +187,11 @@ get_image (Screen *screen, Window window, Bool verbose_p)
                  progname);
     }
 
+  count = 0;
+  if (desk_p)  count++;
+  if (video_p) count++;
+  if (image_p) count++;
+
   if (count == 0)
     which = do_bars;
   else
@@ -306,6 +340,8 @@ main (int argc, char **argv)
   db = XtDatabase (dpy);
 
   XtGetApplicationNameAndClass (dpy, &s, &progclass);
+  XSetErrorHandler (x_ehandler);
+  XSync (dpy, False);
 
   /* half-assed way of avoiding buffer-overrun attacks. */
   if (strlen (progname) >= 100) progname[100] = 0;
index 743404a1fbd8b505a43a81e2fde6b84b8a7b2269..37791f5417056999ffff2ba4c0d360535582f288 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "25-Oct-2001 (3.34)" "X Version 11"
+.TH XScreenSaver 1 "02-Jan-2002 (4.00)" "X Version 11"
 .SH NAME
 xscreensaver-getimage - put some randomly-selected image on the root window
 .SH SYNOPSIS
index 08d98e4f82d3474d4f0628e451f593098528a3de..67daea81eed6df9e39dd76203f5b8d31dbd4c811 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1991-2001 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2002 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -169,6 +169,23 @@ Atom XA_DEMO, XA_PREFS, XA_EXIT, XA_LOCK, XA_BLANK;
 
 \f
 static XrmOptionDescRec options [] = {
+
+  { "-verbose",                   ".verbose",          XrmoptionNoArg, "on" },
+  { "-silent",            ".verbose",          XrmoptionNoArg, "off" },
+
+  /* xscreensaver-demo uses this one */
+  { "-nosplash",          ".splash",           XrmoptionNoArg, "off" },
+  { "-no-splash",         ".splash",           XrmoptionNoArg, "off" },
+
+  /* useful for debugging */
+  { "-no-capture-stderr",  ".captureStderr",   XrmoptionNoArg, "off" },
+
+  /* There's really no reason to have these command-line args; they just
+     lead to confusion when the .xscreensaver file has conflicting values.
+   */
+#if 0
+  { "-splash",            ".splash",           XrmoptionNoArg, "on" },
+  { "-capture-stderr",    ".captureStderr",    XrmoptionNoArg, "on" },
   { "-timeout",                   ".timeout",          XrmoptionSepArg, 0 },
   { "-cycle",             ".cycle",            XrmoptionSepArg, 0 },
   { "-lock-mode",         ".lock",             XrmoptionNoArg, "on" },
@@ -180,11 +197,7 @@ static XrmOptionDescRec options [] = {
   { "-visual",            ".visualID",         XrmoptionSepArg, 0 },
   { "-install",                   ".installColormap",  XrmoptionNoArg, "on" },
   { "-no-install",        ".installColormap",  XrmoptionNoArg, "off" },
-  { "-verbose",                   ".verbose",          XrmoptionNoArg, "on" },
-  { "-silent",            ".verbose",          XrmoptionNoArg, "off" },
   { "-timestamp",         ".timestamp",        XrmoptionNoArg, "on" },
-  { "-capture-stderr",    ".captureStderr",    XrmoptionNoArg, "on" },
-  { "-no-capture-stderr",  ".captureStderr",   XrmoptionNoArg, "off" },
   { "-xidle-extension",           ".xidleExtension",   XrmoptionNoArg, "on" },
   { "-no-xidle-extension", ".xidleExtension",  XrmoptionNoArg, "off" },
   { "-mit-extension",     ".mitSaverExtension",XrmoptionNoArg, "on" },
@@ -193,15 +206,9 @@ static XrmOptionDescRec options [] = {
   { "-no-sgi-extension",   ".sgiSaverExtension",XrmoptionNoArg, "off" },
   { "-proc-interrupts",           ".procInterrupts",   XrmoptionNoArg, "on" },
   { "-no-proc-interrupts", ".procInterrupts",  XrmoptionNoArg, "off" },
-  { "-splash",            ".splash",           XrmoptionNoArg, "on" },
-  { "-no-splash",         ".splash",           XrmoptionNoArg, "off" },
-  { "-nosplash",          ".splash",           XrmoptionNoArg, "off" },
   { "-idelay",            ".initialDelay",     XrmoptionSepArg, 0 },
   { "-nice",              ".nice",             XrmoptionSepArg, 0 },
-
-  /* Actually these are built in to Xt, but just to be sure... */
-  { "-synchronous",       ".synchronous",      XrmoptionNoArg, "on" },
-  { "-xrm",               NULL,                XrmoptionResArg, NULL }
+#endif /* 0 */
 };
 
 static char *defaults[] = {
@@ -219,34 +226,21 @@ do_help (saver_info *si)
   fflush (stdout);
   fflush (stderr);
   fprintf (stdout, "\
-xscreensaver %s, copyright (c) 1991-2001 by Jamie Zawinski <jwz@jwz.org>\n\
-The standard Xt command-line options are accepted; other options include:\n\
-\n\
-    -timeout <minutes>       When the screensaver should activate.\n\
-    -cycle <minutes>         How long to let each hack run before switching.\n\
-    -lock-mode               Require a password before deactivating.\n\
-    -lock-timeout <minutes>  Grace period before locking; default 0.\n\
-    -visual <id-or-class>    Which X visual to run on.\n\
-    -install                 Install a private colormap.\n\
-    -verbose                 Be loud.\n\
-    -no-splash               Don't display a splash-screen at startup.\n\
-    -help                    This message.\n\
-\n\
-See the manual for other options and X resources.\n\
+xscreensaver %s, copyright (c) 1991-2002 by Jamie Zawinski <jwz@jwz.org>\n\
 \n\
-The `xscreensaver' program should be left running in the background.\n\
-Use the `xscreensaver-demo' and `xscreensaver-command' programs to\n\
-manipulate a running xscreensaver.\n\
+  All xscreensaver configuration is via the `~/.xscreensaver' file.\n\
+  Rather than editing that file by hand, just run `xscreensaver-demo':\n\
+  that program lets you configure the screen saver graphically,\n\
+  including timeouts, locking, and display modes.\n\
 \n\
-The `*programs' resource controls which graphics demos will be launched by\n\
-the screensaver.  See `man xscreensaver' or the web page for more details.\n\
-\n\
-Just getting started?  Try this:\n\
+  Just getting started?  Try this:\n\
 \n\
         xscreensaver &\n\
         xscreensaver-demo\n\
 \n\
-For updates, check http://www.jwz.org/xscreensaver/\n\
+  For updates, online manual, and FAQ, please see the web page:\n\
+\n\
+       http://www.jwz.org/xscreensaver/\n\
 \n",
          si->version);
   fflush (stdout);
@@ -635,7 +629,7 @@ print_banner (saver_info *si)
 
   if (p->verbose_p)
     fprintf (stderr,
-            "%s %s, copyright (c) 1991-2001 "
+            "%s %s, copyright (c) 1991-2002 "
             "by Jamie Zawinski <jwz@jwz.org>.\n",
             progname, si->version);
 
@@ -710,6 +704,7 @@ initialize_per_screen_info (saver_info *si, Widget toplevel_shell)
       saver_screen_info *ssi = &si->screens[i];
       ssi->global = si;
       ssi->screen = ScreenOfDisplay (si->dpy, i);
+      ssi->number = i;
 
       /* Note: we can't use the resource ".visual" because Xt is SO FUCKED. */
       ssi->default_visual =
@@ -915,7 +910,9 @@ maybe_reload_init_file (saver_info *si)
 
       /* If the DPMS settings in the init file have changed,
          change the settings on the server to match. */
-      sync_server_dpms_settings (si->dpy, p->dpms_enabled_p,
+      sync_server_dpms_settings (si->dpy,
+                                 (p->dpms_enabled_p  &&
+                                  p->mode != DONT_BLANK),
                                  p->dpms_standby / 1000,
                                  p->dpms_suspend / 1000,
                                  p->dpms_off / 1000,
@@ -950,13 +947,25 @@ main_loop (saver_info *si)
            fprintf (stderr, "%s: demoing %d at %s.\n", blurb(),
                     si->selection_mode, timestring());
          else
-           if (p->verbose_p)
-             fprintf (stderr, "%s: blanking screen at %s.\n", blurb(),
-                      timestring());
+            fprintf (stderr, "%s: blanking screen at %s.\n", blurb(),
+                     timestring());
        }
 
       maybe_reload_init_file (si);
 
+      if (p->mode == DONT_BLANK)
+        {
+          if (p->verbose_p)
+            fprintf (stderr, "%s: idle with blanking disabled at %s.\n",
+                     blurb(), timestring());
+
+          /* Go around the loop and wait for the next bout of idleness,
+             or for the init file to change, or for a remote command to
+             come in, or something.
+           */
+          continue;
+        }
+
       if (! blank_screen (si))
         {
           /* We were unable to grab either the keyboard or mouse.
@@ -995,6 +1004,8 @@ main_loop (saver_info *si)
 
 
 #ifndef NO_LOCKING
+      /* Maybe start locking the screen.
+       */
       {
         Time lock_timeout = p->lock_timeout;
 
@@ -1038,6 +1049,8 @@ main_loop (saver_info *si)
        maybe_reload_init_file (si);
 
 #ifndef NO_LOCKING
+        /* Maybe unlock the screen.
+         */
        if (si->locked_p)
          {
            saver_screen_info *ssi = si->default_screen;
@@ -1140,6 +1153,7 @@ main (int argc, char **argv)
   print_banner (si);
 
   load_init_file (p);  /* must be before initialize_per_screen_info() */
+  blurb_timestamp_p = p->timestamp_p;  /* kludge */
   initialize_per_screen_info (si, shell); /* also sets si->fading_possible_p */
 
   /* We can only issue this warnings now. */
@@ -1156,7 +1170,6 @@ main (int argc, char **argv)
   lock_initialization (si, &argc, argv);
 
   if (p->xsync_p) XSynchronize (si->dpy, True);
-  blurb_timestamp_p = p->timestamp_p;  /* kludge */
 
   if (p->verbose_p) analyze_display (si);
   initialize_server_extensions (si);
@@ -1168,7 +1181,9 @@ main (int argc, char **argv)
   init_sigchld ();
 
   disable_builtin_screensaver (si, True);
-  sync_server_dpms_settings (si->dpy, p->dpms_enabled_p,
+  sync_server_dpms_settings (si->dpy,
+                             (p->dpms_enabled_p  &&
+                              p->mode != DONT_BLANK),
                              p->dpms_standby / 1000,
                              p->dpms_suspend / 1000,
                              p->dpms_off / 1000,
@@ -1661,13 +1676,13 @@ analyze_display (saver_info *si)
     const char *name; const char *desc; Bool useful_p;
   } exts[] = {
 
-   { "SCREEN_SAVER",                            "SGI Screen-Saver",
+   { "SCREEN_SAVER", /* underscore */           "SGI Screen-Saver",
 #     ifdef HAVE_SGI_SAVER_EXTENSION
         True
 #     else
         False
 #     endif
-   }, { "SCREEN-SAVER",                         "SGI Screen-Saver",
+   }, { "SCREEN-SAVER", /* dash */              "SGI Screen-Saver",
 #     ifdef HAVE_SGI_SAVER_EXTENSION
         True
 #     else
@@ -1732,20 +1747,31 @@ analyze_display (saver_info *si)
    },
   };
 
-  fprintf (stderr, "%s: running on display \"%s\"\n", blurb(),
-          DisplayString(si->dpy));
-  fprintf (stderr, "%s: vendor is %s, %d\n", blurb(),
+  fprintf (stderr, "%s: running on display \"%s\" (%d screen%s).\n",
+           blurb(),
+          DisplayString(si->dpy),
+           si->nscreens, (si->nscreens == 1 ? "" : "s"));
+  fprintf (stderr, "%s: vendor is %s, %d.\n", blurb(),
           ServerVendor(si->dpy), VendorRelease(si->dpy));
 
   fprintf (stderr, "%s: useful extensions:\n", blurb());
   for (i = 0; i < countof(exts); i++)
     {
       int op = 0, event = 0, error = 0;
-      if (XQueryExtension (si->dpy, exts[i].name, &op, &event, &error))
-       fprintf (stderr, "%s:  %s%s\n", blurb(),
-                 exts[i].desc,
-                 (exts[i].useful_p ? "" :
-                  "       \t<== unsupported at compile-time!"));
+      char buf [255];
+      int j;
+      if (!XQueryExtension (si->dpy, exts[i].name, &op, &event, &error))
+        continue;
+      sprintf (buf, "%s:   ", blurb());
+      j = strlen (buf);
+      strcat (buf, exts[i].desc);
+      if (!exts[i].useful_p)
+        {
+          int k = j + 18;
+          while (strlen (buf) < k) strcat (buf, " ");
+          strcat (buf, "<-- not supported at compile time!");
+        }
+      fprintf (stderr, "%s\n", buf);
     }
 
   for (i = 0; i < si->nscreens; i++)
@@ -1770,15 +1796,16 @@ analyze_display (saver_info *si)
          for (j = 0; j < 32; j++)
            if (colormapped_depths & (1 << j))
              fprintf (stderr, " %d", j);
-         fprintf (stderr, "\n");
+         fprintf (stderr, ".\n");
        }
       if (non_mapped_depths)
        {
-         fprintf (stderr, "%s: screen %d non-mapped depths:", blurb(), i);
+         fprintf (stderr, "%s: screen %d non-colormapped depths:",
+                   blurb(), i);
          for (j = 0; j < 32; j++)
            if (non_mapped_depths & (1 << j))
              fprintf (stderr, " %d", j);
-         fprintf (stderr, "\n");
+         fprintf (stderr, ".\n");
        }
     }
 }
index 4232c711a5f2d46da731e634832ccf91f3351134..3ab14eaaab69e29863c5448c78cd6ed18e1f47cf 100644 (file)
@@ -84,6 +84,8 @@ struct saver_info {
   Bool screen_blanked_p;       /* Whether the saver is currently active. */
   Window mouse_grab_window;    /* Window holding our mouse grab */
   Window keyboard_grab_window; /* Window holding our keyboard grab */
+  int mouse_grab_screen;       /* The screen number the mouse grab is on */
+  int keyboard_grab_screen;    /* The screen number the keyboard grab is on */
   Bool fading_possible_p;      /* Whether fading to/from black is possible. */
   Bool throttled_p;             /* Whether we should temporarily just blank
                                    the screen, not run hacks. */
@@ -182,6 +184,7 @@ struct saver_info {
 struct saver_screen_info {
   saver_info *global;
 
+  int number;
   Screen *screen;
   Widget toplevel_shell;
 
@@ -303,6 +306,7 @@ extern void unblank_screen (saver_info *si);
 extern void get_screen_viewport (saver_screen_info *ssi,
                                  int *x_ret, int *y_ret,
                                  int *w_ret, int *h_ret,
+                                 int target_x, int target_y,
                                  Bool verbose_p);
 
 
@@ -318,7 +322,9 @@ extern Bool passwd_valid_p (const char *typed_passwd, Bool verbose_p);
 #endif /* NO_LOCKING */
 
 extern void set_locked_p (saver_info *si, Bool locked_p);
-extern int move_mouse_grab (saver_info *si, Window to, Cursor cursor);
+extern int move_mouse_grab (saver_info *si, Window to, Cursor cursor,
+                            int to_screen_no);
+extern int mouse_screen (saver_info *si);
 
 
 /* =======================================================================
index c52e1e4b7cf4a021abd6742174d92dd4931946df..77b960bb526c30a72637437e3c9def516d4f96be 100644 (file)
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "25-Oct-2001 (3.34)" "X Version 11"
+.TH XScreenSaver 1 "02-Jan-2002 (4.00)" "X Version 11"
 .SH NAME
-xscreensaver - graphics hack and screen locker, launched when the user is idle
+xscreensaver - extensible screen saver framework, plus locking
 .SH SYNOPSIS
 .B xscreensaver
 [\-display \fIhost:display.screen\fP] \
-[\-timeout \fIint\fP] \
-[\-cycle \fIint\fP] \
-[\-lock\-mode] \
-[\-no\-lock\-mode] \
-[\-lock\-timeout \fIint\fP] \
-[\-visual \fIvisual\fP] \
-[\-install] \
-[\-no\-install] \
 [\-verbose] \
-[\-silent] \
-[\-timestamp] \
-[\-capture\-stderr] \
 [\-no\-capture\-stderr] \
-[\-splash] \
-[\-no\-splash] \
-[\-nice \fIint\fP] \
-[\-mit\-extension] \
-[\-no\-mit\-extension] \
-[\-sgi\-extension] \
-[\-no\-sgi\-extension] \
-[\-xidle\-extension] \
-[\-no\-xidle\-extension] \
-[\-proc\-interrupts] \
-[\-no\-proc\-interrupts] \
-[\-xrm \fIresources\fP]
+[\-no\-splash]
 .SH DESCRIPTION
 The \fIxscreensaver\fP program waits until the keyboard and mouse have been 
 idle for a period, and then runs a graphics demo chosen at random.  It 
@@ -49,15 +27,10 @@ turns off as soon as there is any mouse or keyboard activity.
 
 This program can lock your terminal in order to prevent others from using it,
 though its default mode of operation is merely to display pretty pictures on
-your screen when it is not in use.  
+your screen when it is not in use.
 
-The benefit that this program has over the combination of the
-.BR xlock (1)
-and
-.BR xautolock (1)
-programs is the ease with which new graphics hacks can be installed.  You
-don't need to recompile (or even re-run) this program to add a new display
-mode.
+It also provides configuration and control of your monitor's power-saving
+features.
 .SH GETTING STARTED
 For the impatient, try this:
 .EX
@@ -66,8 +39,8 @@ xscreensaver-demo
 .EE
 The
 .BR xscreensaver-demo (1)
-program should pop up a dialog box that lets you experiment with the
-xscreensaver settings and graphics modes.
+program pops up a dialog box that lets you configure the screen saver,
+and experiment with the various display modes.
 
 .B Note:
 unlike
@@ -296,21 +269,21 @@ The assumption here is that if one of the screenhacks is trying to use
 a lot of memory, then something has gone wrong, and it's better to kill
 that program than to overload the machine.
 
-Default: 50M.
+Default: 0, meaning "no limit."  30M is a good choice on most systems.
+(But beware that setting this to a small value can cause OpenGL programs
+to malfunction on certain systems.)
 .TP 8
 .B fade\fP (class \fBBoolean\fP)
 If this is true, then when the screensaver activates, the current contents
 of the screen will fade to black instead of simply winking out.  This only
-works on displays with writable colormaps, that is, if the screen's default
-visual is a PseudoColor visual.  A fade will also be done when
-switching graphics hacks (when the \fIcycle\fP timer expires.)
-Default: true.  
+works on certain systems.  A fade will also be done when switching graphics
+hacks (when the \fIcycle\fP timer expires.)  Default: true.  
 .TP 8
 .B unfade\fP (class \fBBoolean\fP)
 If this is true, then when the screensaver deactivates, the original contents
 of the screen will fade in from black instead of appearing immediately.  This
-only works on displays with writable colormaps, and if \fIfade\fP is true
-as well.  Default false.
+only works on certain systems, and if \fIfade\fP is true as well.
+Default false.
 .TP 8
 .B fadeSeconds\fP (class \fBTime\fP)
 If \fIfade\fP is true, this is how long the fade will be in 
@@ -334,6 +307,33 @@ controlling terminal of the screensaver driver process.  Default true.
 The font used for the stdout/stderr text, if \fBcaptureStderr\fP is true.
 Default \fB*\-medium\-r\-*\-140\-*\-m\-*\fP (a 14 point fixed-width font.)
 .TP 8
+.B mode\fP (class \fBMode\fP)
+Controls the behavior of xscreensaver.  Legal values are:
+.RS 8
+.TP 8
+.B random
+When blanking the screen, select a random display mode from among those
+that are enabled and applicable.  This is the default.
+.TP 8
+.B one
+When blanking the screen, only ever use one particular display mode (the
+one indicated by the \fIselected\fP setting.)
+.TP 8
+.B blank
+When blanking the screen, just go black: don't run any graphics hacks.
+.TP 8
+.B off
+Don't ever blank the screen, and don't ever allow the monitor to power down.
+
+.RE
+.TP 8
+.B selected\fP (class \fBInteger\fP)
+When \fImode\fP is set to \fIone\fP, this is the one, indicated by its
+index in the \fIprograms\fP list.  You're crazy if you count them and
+set this number by hand: let
+.BR xscreensaver\-demo (1)
+do it for you!
+.TP 8
 .B programs\fP (class \fBPrograms\fP)
 The graphics hacks which \fIxscreensaver\fP runs when the user is idle.
 The value of this resource is a string, one \fIsh\fP-syntax command per line.  
@@ -349,15 +349,15 @@ it explicitly using the
 .BR xscreensaver\-demo (1)
 program.)
 
-If all programs are disabled, then the screen will just be made blank.
+If all programs are disabled, then the screen will just be made blank,
+as when \fImode\fP is set to \fIblank\fP.
 
-To disable a program, it's better to mark it as disabled with a dash
-than to remove it from the list.  This is because the system-wide
-(app-defaults) and per-user (.xscreensaver) settings are merged
-together, and if a user just \fIdeletes\fP an entry from their programs
-list, but that entry still exists in the system-wide list, then it will
-come back.  However, if the user \fIdisables\fP it, then their setting
-takes precedence.
+To disable a program, you must mark it as disabled with a dash instead
+of removing it from the list.  This is because the system-wide (app-defaults)
+and per-user (.xscreensaver) settings are merged together, and if a user
+just \fIdeletes\fP an entry from their programs list, but that entry still
+exists in the system-wide list, then it will come back.  However, if the
+user \fIdisables\fP it, then their setting takes precedence.
 
 If the display has multiple screens, then a different program will be run
 for each screen.  (All screens are blanked and unblanked simultaniously.)
@@ -519,93 +519,23 @@ This must be whatever your local variant of \fB/bin/sh\fP is: in particular,
 it must not be \fBcsh\fP.
 .SH COMMAND-LINE OPTIONS
 .I xscreensaver
-also accepts the following command line options.  Except for 
-the \fI\-display\fP option, these command-line options are all 
-simply shorthand for the X resources described in 
-the \fIConfiguration\fP section, above.
+also accepts a few command-line options, mostly for use when debugging:
+for normal operation, you should configure things via the \fI~/.xscreensaver\fP
+file.
 .TP 8
 .B \-display \fIhost:display.screen\fP
-The X display to use.  For displays with multiple screens, XScreenSaver 
-will manage all screens on the display simultaniously; the \fIscreen\fP 
-argument (the ``default'' screen) says which screen should be used for
-dialog boxes (the password window, \fIDemo Mode\fP, etc.)
-.TP 8
-.B \-timeout \fIminutes\fP
-Same as the \fItimeout\fP resource.
-.TP 8
-.B \-cycle \fIminutes\fP
-Same as the \fIcycle\fP resource.
-.TP 8
-.B \-lock\-mode
-Same as setting the \fIlock\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-lock\-mode
-Same as setting the \fIlock\fP resource to \fIfalse\fP.
-.TP 8
-.B \-lock\-timeout \fIminutes\fP
-Same as the \fIlockTimeout\fP resource.
-.TP 8
-.B \-visual \fIvisual\fP
-Same as the \fIvisualID\fP resource.
-.TP 8
-.B \-install
-Same as setting the \fIinstallColormap\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-install
-Same as setting the \fIinstallColormap\fP resource to \fIfalse\fP.
+The X display to use.  For displays with multiple screens, XScreenSaver
+will manage all screens on the display simultaniously.
 .TP 8
 .B \-verbose
-Same as setting the \fIverbose\fP resource to \fItrue\fP.
-.TP 8
-.B \-silent
-Same as setting the \fIverbose\fP resource to \fIfalse\fP.
-.TP 8
-.B \-timestamp
-Same as setting the \fItimestamp\fP resource to \fItrue\fP.
-.TP 8
-.B \-capture\-stderr
-Same as setting the \fIcaptureStderr\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-capture\-stderr
-Same as setting the \fIcaptureStderr\fP resource to \fIfalse\fP.
-.TP 8
-.B \-splash
-Same as setting the \fIsplash\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-splash
-Same as setting the \fIsplash\fP resource to \fIfalse\fP.
-.TP 8
-.B \-nice \fIinteger\fP
-Same as the \fInice\fP resource.
-.TP 8
-.B \-sgi\-extension
-Same as setting the \fIsgiSaverExtension\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-sgi\-extension
-Same as setting the \fIsgiSaverExtension\fP resource to \fIfalse\fP.
-.TP 8
-.B \-mit\-extension
-Same as setting the \fImitSaverExtension\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-mit\-extension
-Same as setting the \fImitSaverExtension\fP resource to \fIfalse\fP.
-.TP 8
-.B \-xidle\-extension
-Same as setting the \fIxidleExtension\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-xidle\-extension
-Same as setting the \fIxidleExtension\fP resource to \fIfalse\fP.
-.TP 8
-.B \-proc\-interrupts
-Same as setting the \fIprocInterrupts\fP resource to \fItrue\fP.
-.TP 8
-.B \-no\-proc\-interrupts
-Same as setting the \fIprocInterrupts\fP resource to \fIfalse\fP.
-.TP 8
-.B \-xrm \fIresource-specification\fP
-As with all other Xt programs, you can specify X resources on the command-line
-using the \fI\-xrm\fP argument.  Most of the interesting resources have 
-command-line equivalents, however.
+Same as setting the \fIverbose\fP resource to \fItrue\fP: print diagnostics
+on stderr and on the xscreensaver window.
+.TP 8
+.B \-no-capture-stderr
+Same as setting the \fIcaptureStderr\fP resource to \fIfalse\fP: do not
+redirect the stdout and stderr streams to the xscreensaver window itself.
+If xscreensaver is crashing, you might need to do this in order to see
+the error message.
 .SH HOW IT WORKS
 When it is time to activate the screensaver, a full-screen black window is
 created on each screen of the display.  Each window is created in such a way
@@ -667,7 +597,7 @@ is not available.
 If you're using a laptop, don't be surprised if changing the DPMS
 settings has no effect: many laptops have monitor power-saving behavior
 built in at a very low level that is invisible to Unix and X.  On such
-systems, you can typically only adjust the power-saving delays by
+systems, you can typically adjust the power-saving delays only by
 changing settings in the BIOS in some hardware-specific way.
 .SH USING XDM(1)
 You can run \fIxscreensaver\fP from your 
@@ -1275,6 +1205,8 @@ mode (you can't do it in a window, and you can't see the output of 3D and 2D
 programs simultaniously), and that 3D will probably drive your monitor at a
 lower resolution, as well.  It's bizarre.
 
+This probably isn't ever necessary on more modern cards; I'm not sure.
+
 If you find that GL programs only work properly when run as root, and not
 as normal users, then the problem is that your \fI/dev/3dfx\fP file is not
 configured properly.  Check the Linux 3Dfx FAQ.
@@ -1318,14 +1250,14 @@ of the screen on which to draw.
 to find the sub-programs to run.
 .TP 8
 .B HOME
-for the directory in which to read and write the \fI.xscreensaver\fP file.
+for the directory in which to read the \fI.xscreensaver\fP file.
 .TP 8
 .B XENVIRONMENT
 to get the name of a resource file that overrides the global resources
 stored in the RESOURCE_MANAGER property.
 .SH UPGRADES
-The latest version can always be found at 
-http://www.jwz.org/xscreensaver/
+The latest version of xscreensaver, an online version of this manual,
+and a FAQ can always be found at http://www.jwz.org/xscreensaver/
 .SH SEE ALSO
 .BR X (1),
 .BR xscreensaver\-demo (1),
@@ -1449,17 +1381,18 @@ http://www.jwz.org/xscreensaver/
 .BR chbg (1),
 .BR xwave (1).
 .SH COPYRIGHT
-Copyright \(co 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-by Jamie Zawinski.  Permission to use, copy, modify, distribute, and sell
-this software and its documentation for any purpose is hereby granted without
-fee, provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in supporting
-documentation.  No representations are made about the suitability of this
-software for any purpose.  It is provided "as is" without express or implied
+Copyright \(co 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+2000, 2001, 2002 by Jamie Zawinski.  Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any
+purpose is hereby granted without fee, provided that the above
+copyright notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting documentation.
+No representations are made about the suitability of this software for
+any purpose.  It is provided "as is" without express or implied
 warranty.
 .SH AUTHOR
-Jamie Zawinski <jwz@jwz.org>.  Written in late 1991; first posted
-to comp.sources.x on 13-Aug-1992.
+Jamie Zawinski <jwz@jwz.org>.  Written in late 1991; version 1.0 posted
+to comp.sources.x on 17-Aug-1992.
 
 Please let me know if you find any bugs or make any improvements.
 .SH ACKNOWLEDGEMENTS
index aba11ccf8d1166e55f359da59ac803fb9e733ee2..69d0fe432191b43c00bcefb720df0c21f8e817c9 100644 (file)
@@ -35,7 +35,9 @@ INSTALL_SCRIPT  = @INSTALL_SCRIPT@
 INSTALL_SETUID  = @INSTALL_SETUID@
 INSTALL_DATA   = @INSTALL_DATA@
 INSTALL_DIRS   = @INSTALL_DIRS@
+GNOME_DATADIR  = @GNOME_DATADIR@
 HACKDIR                = @HACKDIR@
+HACK_CONF_DIR  = @HACK_CONF_DIR@
 
 X_CFLAGS       = @X_CFLAGS@
 X_LIBS         = @X_LIBS@
@@ -158,6 +160,8 @@ MEN         = attraction.man blitspin.man bouboule.man braid.man \
                  rotzoomer.man whirlygig.man speedmine.man penetrate.man
 STAR           = *
 EXTRAS         = README Makefile.in xlock_23.h .gdbinit \
+                 config/README \
+                 config/$(STAR).xml \
                  images/$(STAR).xbm \
                  images/$(STAR).xpm \
                  images/bubbles/$(STAR).pov \
@@ -176,8 +180,8 @@ TARFILES    = $(SRCS) $(HDRS) $(SCRIPTS) $(MEN) $(EXTRAS) $(VMSFILES)
 default: all
 all: $(EXES)
 
-install:   install-program   install-scripts install-man
-uninstall: uninstall-program uninstall-man
+install:   install-program   install-scripts install-xml install-man
+uninstall: uninstall-program uninstall-xml uninstall-man
 
 install-strip:
        $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
@@ -200,8 +204,23 @@ install-program:: $(EXES)
          sinst="$(INSTALL_PROGRAM)" ;                                  \
        fi ;                                                            \
        for program in $(SEXES); do                                     \
-         echo $$sinst $$program $(install_prefix)$(HACKDIR)/$$program ;\
-              $$sinst $$program $(install_prefix)$(HACKDIR)/$$program ;\
+         instargs="$$program $(install_prefix)$(HACKDIR)/$$program" ;  \
+         echo $$sinst $$instargs ;                                     \
+         if   $$sinst $$instargs ; then                                \
+             true ;                                                    \
+         elif [ @SETUID_HACKS@ = yes ]; then                           \
+           echo $(INSTALL_PROGRAM) $$instargs ;                        \
+           if   $(INSTALL_PROGRAM) $$instargs ; then                   \
+             echo "" ;                                                 \
+             echo "WARNING: unable to install $$program setuid:"       \
+                  "installed non-setuid instead." ;                    \
+             echo "" ;                                                 \
+           else                                                        \
+             exit 1 ;                                                  \
+           fi ;                                                        \
+         else                                                          \
+           exit 1 ;                                                    \
+         fi ;                                                          \
        done
 
 install-scripts: $(SCRIPTS) munge-scripts
@@ -220,6 +239,7 @@ install-scripts: $(SCRIPTS) munge-scripts
 munge-scripts: $(SCRIPTS)
        @tmp=/tmp/mf.$$$$ ;                                             \
        perl="${PERL}" ;                                                \
+       rm -f $$tmp ;                                                   \
        for program in $(SCRIPTS); do                                   \
          echo "adjusting location of perl in $$program..." ;           \
          sed "s@^\(#!\)\(/[^ ]*/perl[^ ]*\)\(.*\)\$$@\1$$perl\3@"      \
@@ -229,7 +249,8 @@ munge-scripts: $(SCRIPTS)
          else                                                          \
            cat $$tmp > ./$$program ;                                   \
          fi ;                                                          \
-       done
+       done ;                                                          \
+       rm -f $$tmp
 
 install-man: $(MEN)
        @men="$(MEN)" ;                                                 \
@@ -244,6 +265,18 @@ install-man: $(MEN)
            $(install_prefix)$(man1dir)/$$instname ;                    \
        done
 
+install-xml:
+       @if [ ! -d $(install_prefix)$(HACK_CONF_DIR) ]; then            \
+         $(INSTALL_DIRS) $(install_prefix)$(HACK_CONF_DIR) ;           \
+        fi ;                                                           \
+        cd $(srcdir)/config/ ;                                         \
+        for file in README $(STAR).xml ; do                            \
+          echo $(INSTALL_DATA) $$file                                  \
+           $(install_prefix)$(HACK_CONF_DIR)/$$file ;                  \
+         $(INSTALL_DATA) $$file                                        \
+           $(install_prefix)$(HACK_CONF_DIR)/$$file ;                  \
+       done
+
 uninstall-program:
        @for program in $(EXES) $(SCRIPTS); do                          \
          echo rm -f $(install_prefix)$(HACKDIR)/$$program ;            \
@@ -258,6 +291,13 @@ uninstall-man:
          rm -f $(install_prefix)$(man1dir)/$$instname ;                \
        done
 
+uninstall-xml:
+       @cd $(srcdir)/config/ ;                                         \
+        for file in README $(STAR).xml ; do                            \
+         echo rm -f $(install_prefix)$(HACK_CONF_DIR)/$$file ;         \
+         rm -f $(install_prefix)$(HACK_CONF_DIR)/$$file ;              \
+       done
+
 clean:
        -rm -f *.o a.out core $(EXES)
 
@@ -730,62 +770,22 @@ xsublim:  xsublim.o       $(HACK_OBJS_1)
 
 attraction.o: $(srcdir)/screenhack.h
 attraction.o: ../config.h
-attraction.o: $(UTILS_SRC)/yarandom.h
-attraction.o: $(UTILS_SRC)/usleep.h
-attraction.o: $(UTILS_SRC)/resources.h
-attraction.o: $(UTILS_SRC)/hsv.h
-attraction.o: $(UTILS_SRC)/colors.h
-attraction.o: $(UTILS_SRC)/grabscreen.h
-attraction.o: $(UTILS_SRC)/visual.h
-attraction.o: $(UTILS_SRC)/spline.h
 blitspin.o: $(srcdir)/screenhack.h
 blitspin.o: ../config.h
-blitspin.o: $(UTILS_SRC)/yarandom.h
-blitspin.o: $(UTILS_SRC)/usleep.h
-blitspin.o: $(UTILS_SRC)/resources.h
-blitspin.o: $(UTILS_SRC)/hsv.h
-blitspin.o: $(UTILS_SRC)/colors.h
-blitspin.o: $(UTILS_SRC)/grabscreen.h
-blitspin.o: $(UTILS_SRC)/visual.h
 blitspin.o: $(srcdir)/images/som.xbm
 bouboule.o: $(srcdir)/xlockmore.h
 bouboule.o: ../config.h
 bouboule.o: $(srcdir)/xlockmoreI.h
 bouboule.o: $(srcdir)/screenhack.h
-bouboule.o: $(UTILS_SRC)/yarandom.h
-bouboule.o: $(UTILS_SRC)/usleep.h
-bouboule.o: $(UTILS_SRC)/resources.h
-bouboule.o: $(UTILS_SRC)/hsv.h
-bouboule.o: $(UTILS_SRC)/colors.h
-bouboule.o: $(UTILS_SRC)/grabscreen.h
-bouboule.o: $(UTILS_SRC)/visual.h
-bouboule.o: $(UTILS_SRC)/xshm.h
 braid.o: $(srcdir)/xlockmore.h
 braid.o: ../config.h
 braid.o: $(srcdir)/xlockmoreI.h
 braid.o: $(srcdir)/screenhack.h
-braid.o: $(UTILS_SRC)/yarandom.h
-braid.o: $(UTILS_SRC)/usleep.h
-braid.o: $(UTILS_SRC)/resources.h
-braid.o: $(UTILS_SRC)/hsv.h
-braid.o: $(UTILS_SRC)/colors.h
-braid.o: $(UTILS_SRC)/grabscreen.h
-braid.o: $(UTILS_SRC)/visual.h
-braid.o: $(UTILS_SRC)/xshm.h
-braid.o: $(UTILS_SRC)/erase.h
 bubbles.o: $(srcdir)/screenhack.h
 bubbles.o: ../config.h
-bubbles.o: $(UTILS_SRC)/yarandom.h
-bubbles.o: $(UTILS_SRC)/usleep.h
-bubbles.o: $(UTILS_SRC)/resources.h
-bubbles.o: $(UTILS_SRC)/hsv.h
-bubbles.o: $(UTILS_SRC)/colors.h
-bubbles.o: $(UTILS_SRC)/grabscreen.h
-bubbles.o: $(UTILS_SRC)/visual.h
 bubbles.o: $(srcdir)/bubbles.h
 bubbles-default.o: ../config.h
 bubbles-default.o: $(srcdir)/bubbles.h
-bubbles-default.o: $(UTILS_SRC)/yarandom.h
 bubbles-default.o: $(srcdir)/images/bubbles/blood1.xpm
 bubbles-default.o: $(srcdir)/images/bubbles/blood2.xpm
 bubbles-default.o: $(srcdir)/images/bubbles/blood3.xpm
@@ -832,273 +832,79 @@ bubbles-default.o: $(srcdir)/images/bubbles/jade10.xpm
 bubbles-default.o: $(srcdir)/images/bubbles/jade11.xpm
 decayscreen.o: $(srcdir)/screenhack.h
 decayscreen.o: ../config.h
-decayscreen.o: $(UTILS_SRC)/yarandom.h
-decayscreen.o: $(UTILS_SRC)/usleep.h
-decayscreen.o: $(UTILS_SRC)/resources.h
-decayscreen.o: $(UTILS_SRC)/hsv.h
-decayscreen.o: $(UTILS_SRC)/colors.h
-decayscreen.o: $(UTILS_SRC)/grabscreen.h
-decayscreen.o: $(UTILS_SRC)/visual.h
 deco.o: $(srcdir)/screenhack.h
 deco.o: ../config.h
-deco.o: $(UTILS_SRC)/yarandom.h
-deco.o: $(UTILS_SRC)/usleep.h
-deco.o: $(UTILS_SRC)/resources.h
-deco.o: $(UTILS_SRC)/hsv.h
-deco.o: $(UTILS_SRC)/colors.h
-deco.o: $(UTILS_SRC)/grabscreen.h
-deco.o: $(UTILS_SRC)/visual.h
 drift.o: $(srcdir)/xlockmore.h
 drift.o: ../config.h
 drift.o: $(srcdir)/xlockmoreI.h
 drift.o: $(srcdir)/screenhack.h
-drift.o: $(UTILS_SRC)/yarandom.h
-drift.o: $(UTILS_SRC)/usleep.h
-drift.o: $(UTILS_SRC)/resources.h
-drift.o: $(UTILS_SRC)/hsv.h
-drift.o: $(UTILS_SRC)/colors.h
-drift.o: $(UTILS_SRC)/grabscreen.h
-drift.o: $(UTILS_SRC)/visual.h
-drift.o: $(UTILS_SRC)/xshm.h
-drift.o: $(UTILS_SRC)/erase.h
 flag.o: $(srcdir)/xlockmore.h
 flag.o: ../config.h
 flag.o: $(srcdir)/xlockmoreI.h
 flag.o: $(srcdir)/screenhack.h
-flag.o: $(UTILS_SRC)/yarandom.h
-flag.o: $(UTILS_SRC)/usleep.h
-flag.o: $(UTILS_SRC)/resources.h
-flag.o: $(UTILS_SRC)/hsv.h
-flag.o: $(UTILS_SRC)/colors.h
-flag.o: $(UTILS_SRC)/grabscreen.h
-flag.o: $(UTILS_SRC)/visual.h
-flag.o: $(UTILS_SRC)/xshm.h
 flag.o: $(srcdir)/images/bob.xbm
 flame.o: $(srcdir)/screenhack.h
 flame.o: ../config.h
-flame.o: $(UTILS_SRC)/yarandom.h
-flame.o: $(UTILS_SRC)/usleep.h
-flame.o: $(UTILS_SRC)/resources.h
-flame.o: $(UTILS_SRC)/hsv.h
-flame.o: $(UTILS_SRC)/colors.h
-flame.o: $(UTILS_SRC)/grabscreen.h
-flame.o: $(UTILS_SRC)/visual.h
 forest.o: ../config.h
 forest.o: $(srcdir)/xlockmore.h
 forest.o: $(srcdir)/xlockmoreI.h
 forest.o: $(srcdir)/screenhack.h
-forest.o: $(UTILS_SRC)/yarandom.h
-forest.o: $(UTILS_SRC)/usleep.h
-forest.o: $(UTILS_SRC)/resources.h
-forest.o: $(UTILS_SRC)/hsv.h
-forest.o: $(UTILS_SRC)/colors.h
-forest.o: $(UTILS_SRC)/grabscreen.h
-forest.o: $(UTILS_SRC)/visual.h
-forest.o: $(UTILS_SRC)/xshm.h
 vines.o: $(srcdir)/xlockmore.h
 vines.o: ../config.h
 vines.o: $(srcdir)/xlockmoreI.h
 vines.o: $(srcdir)/screenhack.h
-vines.o: $(UTILS_SRC)/yarandom.h
-vines.o: $(UTILS_SRC)/usleep.h
-vines.o: $(UTILS_SRC)/resources.h
-vines.o: $(UTILS_SRC)/hsv.h
-vines.o: $(UTILS_SRC)/colors.h
-vines.o: $(UTILS_SRC)/grabscreen.h
-vines.o: $(UTILS_SRC)/visual.h
-vines.o: $(UTILS_SRC)/xshm.h
-vines.o: $(UTILS_SRC)/erase.h
 galaxy.o: $(srcdir)/xlockmore.h
 galaxy.o: ../config.h
 galaxy.o: $(srcdir)/xlockmoreI.h
 galaxy.o: $(srcdir)/screenhack.h
-galaxy.o: $(UTILS_SRC)/yarandom.h
-galaxy.o: $(UTILS_SRC)/usleep.h
-galaxy.o: $(UTILS_SRC)/resources.h
-galaxy.o: $(UTILS_SRC)/hsv.h
-galaxy.o: $(UTILS_SRC)/colors.h
-galaxy.o: $(UTILS_SRC)/grabscreen.h
-galaxy.o: $(UTILS_SRC)/visual.h
-galaxy.o: $(UTILS_SRC)/xshm.h
 grav.o: $(srcdir)/xlockmore.h
 grav.o: ../config.h
 grav.o: $(srcdir)/xlockmoreI.h
 grav.o: $(srcdir)/screenhack.h
-grav.o: $(UTILS_SRC)/yarandom.h
-grav.o: $(UTILS_SRC)/usleep.h
-grav.o: $(UTILS_SRC)/resources.h
-grav.o: $(UTILS_SRC)/hsv.h
-grav.o: $(UTILS_SRC)/colors.h
-grav.o: $(UTILS_SRC)/grabscreen.h
-grav.o: $(UTILS_SRC)/visual.h
-grav.o: $(UTILS_SRC)/xshm.h
 greynetic.o: $(srcdir)/screenhack.h
 greynetic.o: ../config.h
-greynetic.o: $(UTILS_SRC)/yarandom.h
-greynetic.o: $(UTILS_SRC)/usleep.h
-greynetic.o: $(UTILS_SRC)/resources.h
-greynetic.o: $(UTILS_SRC)/hsv.h
-greynetic.o: $(UTILS_SRC)/colors.h
-greynetic.o: $(UTILS_SRC)/grabscreen.h
-greynetic.o: $(UTILS_SRC)/visual.h
 halo.o: $(srcdir)/screenhack.h
 halo.o: ../config.h
-halo.o: $(UTILS_SRC)/yarandom.h
-halo.o: $(UTILS_SRC)/usleep.h
-halo.o: $(UTILS_SRC)/resources.h
-halo.o: $(UTILS_SRC)/hsv.h
-halo.o: $(UTILS_SRC)/colors.h
-halo.o: $(UTILS_SRC)/grabscreen.h
-halo.o: $(UTILS_SRC)/visual.h
 helix.o: $(srcdir)/screenhack.h
 helix.o: ../config.h
-helix.o: $(UTILS_SRC)/yarandom.h
-helix.o: $(UTILS_SRC)/usleep.h
-helix.o: $(UTILS_SRC)/resources.h
-helix.o: $(UTILS_SRC)/hsv.h
-helix.o: $(UTILS_SRC)/colors.h
-helix.o: $(UTILS_SRC)/grabscreen.h
-helix.o: $(UTILS_SRC)/visual.h
-helix.o: $(UTILS_SRC)/erase.h
 hopalong.o: $(srcdir)/xlockmore.h
 hopalong.o: ../config.h
 hopalong.o: $(srcdir)/xlockmoreI.h
 hopalong.o: $(srcdir)/screenhack.h
-hopalong.o: $(UTILS_SRC)/yarandom.h
-hopalong.o: $(UTILS_SRC)/usleep.h
-hopalong.o: $(UTILS_SRC)/resources.h
-hopalong.o: $(UTILS_SRC)/hsv.h
-hopalong.o: $(UTILS_SRC)/colors.h
-hopalong.o: $(UTILS_SRC)/grabscreen.h
-hopalong.o: $(UTILS_SRC)/visual.h
-hopalong.o: $(UTILS_SRC)/xshm.h
-hopalong.o: $(UTILS_SRC)/erase.h
 hypercube.o: $(srcdir)/screenhack.h
 hypercube.o: ../config.h
-hypercube.o: $(UTILS_SRC)/yarandom.h
-hypercube.o: $(UTILS_SRC)/usleep.h
-hypercube.o: $(UTILS_SRC)/resources.h
-hypercube.o: $(UTILS_SRC)/hsv.h
-hypercube.o: $(UTILS_SRC)/colors.h
-hypercube.o: $(UTILS_SRC)/grabscreen.h
-hypercube.o: $(UTILS_SRC)/visual.h
 ifs.o: $(srcdir)/xlockmore.h
 ifs.o: ../config.h
 ifs.o: $(srcdir)/xlockmoreI.h
 ifs.o: $(srcdir)/screenhack.h
-ifs.o: $(UTILS_SRC)/yarandom.h
-ifs.o: $(UTILS_SRC)/usleep.h
-ifs.o: $(UTILS_SRC)/resources.h
-ifs.o: $(UTILS_SRC)/hsv.h
-ifs.o: $(UTILS_SRC)/colors.h
-ifs.o: $(UTILS_SRC)/grabscreen.h
-ifs.o: $(UTILS_SRC)/visual.h
-ifs.o: $(UTILS_SRC)/xshm.h
 imsmap.o: $(srcdir)/screenhack.h
 imsmap.o: ../config.h
-imsmap.o: $(UTILS_SRC)/yarandom.h
-imsmap.o: $(UTILS_SRC)/usleep.h
-imsmap.o: $(UTILS_SRC)/resources.h
-imsmap.o: $(UTILS_SRC)/hsv.h
-imsmap.o: $(UTILS_SRC)/colors.h
-imsmap.o: $(UTILS_SRC)/grabscreen.h
-imsmap.o: $(UTILS_SRC)/visual.h
 julia.o: $(srcdir)/xlockmore.h
 julia.o: ../config.h
 julia.o: $(srcdir)/xlockmoreI.h
 julia.o: $(srcdir)/screenhack.h
-julia.o: $(UTILS_SRC)/yarandom.h
-julia.o: $(UTILS_SRC)/usleep.h
-julia.o: $(UTILS_SRC)/resources.h
-julia.o: $(UTILS_SRC)/hsv.h
-julia.o: $(UTILS_SRC)/colors.h
-julia.o: $(UTILS_SRC)/grabscreen.h
-julia.o: $(UTILS_SRC)/visual.h
-julia.o: $(UTILS_SRC)/xshm.h
-kaleidescope.o: $(UTILS_SRC)/spline.h
 kaleidescope.o: $(srcdir)/screenhack.h
 kaleidescope.o: ../config.h
-kaleidescope.o: $(UTILS_SRC)/yarandom.h
-kaleidescope.o: $(UTILS_SRC)/usleep.h
-kaleidescope.o: $(UTILS_SRC)/resources.h
-kaleidescope.o: $(UTILS_SRC)/hsv.h
-kaleidescope.o: $(UTILS_SRC)/colors.h
-kaleidescope.o: $(UTILS_SRC)/grabscreen.h
-kaleidescope.o: $(UTILS_SRC)/visual.h
 laser.o: $(srcdir)/xlockmore.h
 laser.o: ../config.h
 laser.o: $(srcdir)/xlockmoreI.h
 laser.o: $(srcdir)/screenhack.h
-laser.o: $(UTILS_SRC)/yarandom.h
-laser.o: $(UTILS_SRC)/usleep.h
-laser.o: $(UTILS_SRC)/resources.h
-laser.o: $(UTILS_SRC)/hsv.h
-laser.o: $(UTILS_SRC)/colors.h
-laser.o: $(UTILS_SRC)/grabscreen.h
-laser.o: $(UTILS_SRC)/visual.h
-laser.o: $(UTILS_SRC)/xshm.h
 lightning.o: $(srcdir)/xlockmore.h
 lightning.o: ../config.h
 lightning.o: $(srcdir)/xlockmoreI.h
 lightning.o: $(srcdir)/screenhack.h
-lightning.o: $(UTILS_SRC)/yarandom.h
-lightning.o: $(UTILS_SRC)/usleep.h
-lightning.o: $(UTILS_SRC)/resources.h
-lightning.o: $(UTILS_SRC)/hsv.h
-lightning.o: $(UTILS_SRC)/colors.h
-lightning.o: $(UTILS_SRC)/grabscreen.h
-lightning.o: $(UTILS_SRC)/visual.h
-lightning.o: $(UTILS_SRC)/xshm.h
 lisa.o: $(srcdir)/xlockmore.h
 lisa.o: ../config.h
 lisa.o: $(srcdir)/xlockmoreI.h
 lisa.o: $(srcdir)/screenhack.h
-lisa.o: $(UTILS_SRC)/yarandom.h
-lisa.o: $(UTILS_SRC)/usleep.h
-lisa.o: $(UTILS_SRC)/resources.h
-lisa.o: $(UTILS_SRC)/hsv.h
-lisa.o: $(UTILS_SRC)/colors.h
-lisa.o: $(UTILS_SRC)/grabscreen.h
-lisa.o: $(UTILS_SRC)/visual.h
-lisa.o: $(UTILS_SRC)/xshm.h
 lmorph.o: $(srcdir)/screenhack.h
 lmorph.o: ../config.h
-lmorph.o: $(UTILS_SRC)/yarandom.h
-lmorph.o: $(UTILS_SRC)/usleep.h
-lmorph.o: $(UTILS_SRC)/resources.h
-lmorph.o: $(UTILS_SRC)/hsv.h
-lmorph.o: $(UTILS_SRC)/colors.h
-lmorph.o: $(UTILS_SRC)/grabscreen.h
-lmorph.o: $(UTILS_SRC)/visual.h
 maze.o: $(srcdir)/screenhack.h
 maze.o: ../config.h
-maze.o: $(UTILS_SRC)/yarandom.h
-maze.o: $(UTILS_SRC)/usleep.h
-maze.o: $(UTILS_SRC)/resources.h
-maze.o: $(UTILS_SRC)/hsv.h
-maze.o: $(UTILS_SRC)/colors.h
-maze.o: $(UTILS_SRC)/grabscreen.h
-maze.o: $(UTILS_SRC)/visual.h
-maze.o: $(UTILS_SRC)/erase.h
 moire.o: $(srcdir)/screenhack.h
 moire.o: ../config.h
-moire.o: $(UTILS_SRC)/yarandom.h
-moire.o: $(UTILS_SRC)/usleep.h
-moire.o: $(UTILS_SRC)/resources.h
-moire.o: $(UTILS_SRC)/hsv.h
-moire.o: $(UTILS_SRC)/colors.h
-moire.o: $(UTILS_SRC)/grabscreen.h
-moire.o: $(UTILS_SRC)/visual.h
-moire.o: $(UTILS_SRC)/xshm.h
 noseguy.o: $(srcdir)/screenhack.h
 noseguy.o: ../config.h
-noseguy.o: $(UTILS_SRC)/yarandom.h
-noseguy.o: $(UTILS_SRC)/usleep.h
-noseguy.o: $(UTILS_SRC)/resources.h
-noseguy.o: $(UTILS_SRC)/hsv.h
-noseguy.o: $(UTILS_SRC)/colors.h
-noseguy.o: $(UTILS_SRC)/grabscreen.h
-noseguy.o: $(UTILS_SRC)/visual.h
 noseguy.o: $(srcdir)/images/noseguy/nose-f1.xpm
 noseguy.o: $(srcdir)/images/noseguy/nose-f2.xpm
 noseguy.o: $(srcdir)/images/noseguy/nose-f3.xpm
@@ -1109,331 +915,94 @@ noseguy.o: $(srcdir)/images/noseguy/nose-r1.xpm
 noseguy.o: $(srcdir)/images/noseguy/nose-r2.xpm
 pedal.o: $(srcdir)/screenhack.h
 pedal.o: ../config.h
-pedal.o: $(UTILS_SRC)/yarandom.h
-pedal.o: $(UTILS_SRC)/usleep.h
-pedal.o: $(UTILS_SRC)/resources.h
-pedal.o: $(UTILS_SRC)/hsv.h
-pedal.o: $(UTILS_SRC)/colors.h
-pedal.o: $(UTILS_SRC)/grabscreen.h
-pedal.o: $(UTILS_SRC)/visual.h
 penrose.o: $(srcdir)/xlockmore.h
 penrose.o: ../config.h
 penrose.o: $(srcdir)/xlockmoreI.h
 penrose.o: $(srcdir)/screenhack.h
-penrose.o: $(UTILS_SRC)/yarandom.h
-penrose.o: $(UTILS_SRC)/usleep.h
-penrose.o: $(UTILS_SRC)/resources.h
-penrose.o: $(UTILS_SRC)/hsv.h
-penrose.o: $(UTILS_SRC)/colors.h
-penrose.o: $(UTILS_SRC)/grabscreen.h
-penrose.o: $(UTILS_SRC)/visual.h
-penrose.o: $(UTILS_SRC)/xshm.h
 pyro.o: $(srcdir)/screenhack.h
 pyro.o: ../config.h
-pyro.o: $(UTILS_SRC)/yarandom.h
-pyro.o: $(UTILS_SRC)/usleep.h
-pyro.o: $(UTILS_SRC)/resources.h
-pyro.o: $(UTILS_SRC)/hsv.h
-pyro.o: $(UTILS_SRC)/colors.h
-pyro.o: $(UTILS_SRC)/grabscreen.h
-pyro.o: $(UTILS_SRC)/visual.h
 qix.o: $(srcdir)/screenhack.h
 qix.o: ../config.h
-qix.o: $(UTILS_SRC)/yarandom.h
-qix.o: $(UTILS_SRC)/usleep.h
-qix.o: $(UTILS_SRC)/resources.h
-qix.o: $(UTILS_SRC)/hsv.h
-qix.o: $(UTILS_SRC)/colors.h
-qix.o: $(UTILS_SRC)/grabscreen.h
-qix.o: $(UTILS_SRC)/visual.h
-qix.o: $(UTILS_SRC)/alpha.h
 rocks.o: $(srcdir)/screenhack.h
 rocks.o: ../config.h
-rocks.o: $(UTILS_SRC)/yarandom.h
-rocks.o: $(UTILS_SRC)/usleep.h
-rocks.o: $(UTILS_SRC)/resources.h
-rocks.o: $(UTILS_SRC)/hsv.h
-rocks.o: $(UTILS_SRC)/colors.h
-rocks.o: $(UTILS_SRC)/grabscreen.h
-rocks.o: $(UTILS_SRC)/visual.h
 rorschach.o: $(srcdir)/screenhack.h
 rorschach.o: ../config.h
-rorschach.o: $(UTILS_SRC)/yarandom.h
-rorschach.o: $(UTILS_SRC)/usleep.h
-rorschach.o: $(UTILS_SRC)/resources.h
-rorschach.o: $(UTILS_SRC)/hsv.h
-rorschach.o: $(UTILS_SRC)/colors.h
-rorschach.o: $(UTILS_SRC)/grabscreen.h
-rorschach.o: $(UTILS_SRC)/visual.h
-rorschach.o: $(UTILS_SRC)/erase.h
-screenhack.o: $(UTILS_SRC)/xmu.h
 screenhack.o: $(srcdir)/screenhack.h
 screenhack.o: ../config.h
-screenhack.o: $(UTILS_SRC)/yarandom.h
-screenhack.o: $(UTILS_SRC)/usleep.h
-screenhack.o: $(UTILS_SRC)/resources.h
-screenhack.o: $(UTILS_SRC)/hsv.h
-screenhack.o: $(UTILS_SRC)/colors.h
-screenhack.o: $(UTILS_SRC)/grabscreen.h
-screenhack.o: $(UTILS_SRC)/visual.h
-screenhack.o: $(UTILS_SRC)/version.h
-screenhack.o: $(UTILS_SRC)/vroot.h
 sierpinski.o: $(srcdir)/xlockmore.h
 sierpinski.o: ../config.h
 sierpinski.o: $(srcdir)/xlockmoreI.h
 sierpinski.o: $(srcdir)/screenhack.h
-sierpinski.o: $(UTILS_SRC)/yarandom.h
-sierpinski.o: $(UTILS_SRC)/usleep.h
-sierpinski.o: $(UTILS_SRC)/resources.h
-sierpinski.o: $(UTILS_SRC)/hsv.h
-sierpinski.o: $(UTILS_SRC)/colors.h
-sierpinski.o: $(UTILS_SRC)/grabscreen.h
-sierpinski.o: $(UTILS_SRC)/visual.h
-sierpinski.o: $(UTILS_SRC)/xshm.h
 slidescreen.o: $(srcdir)/screenhack.h
 slidescreen.o: ../config.h
-slidescreen.o: $(UTILS_SRC)/yarandom.h
-slidescreen.o: $(UTILS_SRC)/usleep.h
-slidescreen.o: $(UTILS_SRC)/resources.h
-slidescreen.o: $(UTILS_SRC)/hsv.h
-slidescreen.o: $(UTILS_SRC)/colors.h
-slidescreen.o: $(UTILS_SRC)/grabscreen.h
-slidescreen.o: $(UTILS_SRC)/visual.h
 slip.o: $(srcdir)/xlockmore.h
 slip.o: ../config.h
 slip.o: $(srcdir)/xlockmoreI.h
 slip.o: $(srcdir)/screenhack.h
-slip.o: $(UTILS_SRC)/yarandom.h
-slip.o: $(UTILS_SRC)/usleep.h
-slip.o: $(UTILS_SRC)/resources.h
-slip.o: $(UTILS_SRC)/hsv.h
-slip.o: $(UTILS_SRC)/colors.h
-slip.o: $(UTILS_SRC)/grabscreen.h
-slip.o: $(UTILS_SRC)/visual.h
-slip.o: $(UTILS_SRC)/xshm.h
 sphere.o: $(srcdir)/xlockmore.h
 sphere.o: ../config.h
 sphere.o: $(srcdir)/xlockmoreI.h
 sphere.o: $(srcdir)/screenhack.h
-sphere.o: $(UTILS_SRC)/yarandom.h
-sphere.o: $(UTILS_SRC)/usleep.h
-sphere.o: $(UTILS_SRC)/resources.h
-sphere.o: $(UTILS_SRC)/hsv.h
-sphere.o: $(UTILS_SRC)/colors.h
-sphere.o: $(UTILS_SRC)/grabscreen.h
-sphere.o: $(UTILS_SRC)/visual.h
-sphere.o: $(UTILS_SRC)/xshm.h
 spiral.o: $(srcdir)/xlockmore.h
 spiral.o: ../config.h
 spiral.o: $(srcdir)/xlockmoreI.h
 spiral.o: $(srcdir)/screenhack.h
-spiral.o: $(UTILS_SRC)/yarandom.h
-spiral.o: $(UTILS_SRC)/usleep.h
-spiral.o: $(UTILS_SRC)/resources.h
-spiral.o: $(UTILS_SRC)/hsv.h
-spiral.o: $(UTILS_SRC)/colors.h
-spiral.o: $(UTILS_SRC)/grabscreen.h
-spiral.o: $(UTILS_SRC)/visual.h
-spiral.o: $(UTILS_SRC)/xshm.h
 strange.o: $(srcdir)/xlockmore.h
 strange.o: ../config.h
 strange.o: $(srcdir)/xlockmoreI.h
 strange.o: $(srcdir)/screenhack.h
-strange.o: $(UTILS_SRC)/yarandom.h
-strange.o: $(UTILS_SRC)/usleep.h
-strange.o: $(UTILS_SRC)/resources.h
-strange.o: $(UTILS_SRC)/hsv.h
-strange.o: $(UTILS_SRC)/colors.h
-strange.o: $(UTILS_SRC)/grabscreen.h
-strange.o: $(UTILS_SRC)/visual.h
-strange.o: $(UTILS_SRC)/xshm.h
 swirl.o: $(srcdir)/xlockmore.h
 swirl.o: ../config.h
 swirl.o: $(srcdir)/xlockmoreI.h
 swirl.o: $(srcdir)/screenhack.h
-swirl.o: $(UTILS_SRC)/yarandom.h
-swirl.o: $(UTILS_SRC)/usleep.h
-swirl.o: $(UTILS_SRC)/resources.h
-swirl.o: $(UTILS_SRC)/hsv.h
-swirl.o: $(UTILS_SRC)/colors.h
-swirl.o: $(UTILS_SRC)/grabscreen.h
-swirl.o: $(UTILS_SRC)/visual.h
-swirl.o: $(UTILS_SRC)/xshm.h
 xlockmore.o: $(srcdir)/screenhack.h
 xlockmore.o: ../config.h
-xlockmore.o: $(UTILS_SRC)/yarandom.h
-xlockmore.o: $(UTILS_SRC)/usleep.h
-xlockmore.o: $(UTILS_SRC)/resources.h
-xlockmore.o: $(UTILS_SRC)/hsv.h
-xlockmore.o: $(UTILS_SRC)/colors.h
-xlockmore.o: $(UTILS_SRC)/grabscreen.h
-xlockmore.o: $(UTILS_SRC)/visual.h
 xlockmore.o: $(srcdir)/xlockmoreI.h
-xlockmore.o: $(UTILS_SRC)/xshm.h
 goop.o: $(srcdir)/screenhack.h
 goop.o: ../config.h
-goop.o: $(UTILS_SRC)/yarandom.h
-goop.o: $(UTILS_SRC)/usleep.h
-goop.o: $(UTILS_SRC)/resources.h
-goop.o: $(UTILS_SRC)/hsv.h
-goop.o: $(UTILS_SRC)/colors.h
-goop.o: $(UTILS_SRC)/grabscreen.h
-goop.o: $(UTILS_SRC)/visual.h
-goop.o: $(UTILS_SRC)/spline.h
-goop.o: $(UTILS_SRC)/alpha.h
 starfish.o: $(srcdir)/screenhack.h
 starfish.o: ../config.h
-starfish.o: $(UTILS_SRC)/yarandom.h
-starfish.o: $(UTILS_SRC)/usleep.h
-starfish.o: $(UTILS_SRC)/resources.h
-starfish.o: $(UTILS_SRC)/hsv.h
-starfish.o: $(UTILS_SRC)/colors.h
-starfish.o: $(UTILS_SRC)/grabscreen.h
-starfish.o: $(UTILS_SRC)/visual.h
-starfish.o: $(UTILS_SRC)/spline.h
 munch.o: $(srcdir)/screenhack.h
 munch.o: ../config.h
-munch.o: $(UTILS_SRC)/yarandom.h
-munch.o: $(UTILS_SRC)/usleep.h
-munch.o: $(UTILS_SRC)/resources.h
-munch.o: $(UTILS_SRC)/hsv.h
-munch.o: $(UTILS_SRC)/colors.h
-munch.o: $(UTILS_SRC)/grabscreen.h
-munch.o: $(UTILS_SRC)/visual.h
 fadeplot.o: $(srcdir)/xlockmore.h
 fadeplot.o: ../config.h
 fadeplot.o: $(srcdir)/xlockmoreI.h
 fadeplot.o: $(srcdir)/screenhack.h
-fadeplot.o: $(UTILS_SRC)/yarandom.h
-fadeplot.o: $(UTILS_SRC)/usleep.h
-fadeplot.o: $(UTILS_SRC)/resources.h
-fadeplot.o: $(UTILS_SRC)/hsv.h
-fadeplot.o: $(UTILS_SRC)/colors.h
-fadeplot.o: $(UTILS_SRC)/grabscreen.h
-fadeplot.o: $(UTILS_SRC)/visual.h
-fadeplot.o: $(UTILS_SRC)/xshm.h
 rd-bomb.o: $(srcdir)/screenhack.h
 rd-bomb.o: ../config.h
-rd-bomb.o: $(UTILS_SRC)/yarandom.h
-rd-bomb.o: $(UTILS_SRC)/usleep.h
-rd-bomb.o: $(UTILS_SRC)/resources.h
-rd-bomb.o: $(UTILS_SRC)/hsv.h
-rd-bomb.o: $(UTILS_SRC)/colors.h
-rd-bomb.o: $(UTILS_SRC)/grabscreen.h
-rd-bomb.o: $(UTILS_SRC)/visual.h
-rd-bomb.o: $(UTILS_SRC)/xshm.h
 coral.o: $(srcdir)/screenhack.h
 coral.o: ../config.h
-coral.o: $(UTILS_SRC)/yarandom.h
-coral.o: $(UTILS_SRC)/usleep.h
-coral.o: $(UTILS_SRC)/resources.h
-coral.o: $(UTILS_SRC)/hsv.h
-coral.o: $(UTILS_SRC)/colors.h
-coral.o: $(UTILS_SRC)/grabscreen.h
-coral.o: $(UTILS_SRC)/visual.h
-coral.o: $(UTILS_SRC)/erase.h
 mountain.o: $(srcdir)/xlockmore.h
 mountain.o: ../config.h
 mountain.o: $(srcdir)/xlockmoreI.h
 mountain.o: $(srcdir)/screenhack.h
-mountain.o: $(UTILS_SRC)/yarandom.h
-mountain.o: $(UTILS_SRC)/usleep.h
-mountain.o: $(UTILS_SRC)/resources.h
-mountain.o: $(UTILS_SRC)/hsv.h
-mountain.o: $(UTILS_SRC)/colors.h
-mountain.o: $(UTILS_SRC)/grabscreen.h
-mountain.o: $(UTILS_SRC)/visual.h
-mountain.o: $(UTILS_SRC)/xshm.h
 triangle.o: $(srcdir)/xlockmore.h
 triangle.o: ../config.h
 triangle.o: $(srcdir)/xlockmoreI.h
 triangle.o: $(srcdir)/screenhack.h
-triangle.o: $(UTILS_SRC)/yarandom.h
-triangle.o: $(UTILS_SRC)/usleep.h
-triangle.o: $(UTILS_SRC)/resources.h
-triangle.o: $(UTILS_SRC)/hsv.h
-triangle.o: $(UTILS_SRC)/colors.h
-triangle.o: $(UTILS_SRC)/grabscreen.h
-triangle.o: $(UTILS_SRC)/visual.h
-triangle.o: $(UTILS_SRC)/xshm.h
 lissie.o: $(srcdir)/xlockmore.h
 lissie.o: ../config.h
 lissie.o: $(srcdir)/xlockmoreI.h
 lissie.o: $(srcdir)/screenhack.h
-lissie.o: $(UTILS_SRC)/yarandom.h
-lissie.o: $(UTILS_SRC)/usleep.h
-lissie.o: $(UTILS_SRC)/resources.h
-lissie.o: $(UTILS_SRC)/hsv.h
-lissie.o: $(UTILS_SRC)/colors.h
-lissie.o: $(UTILS_SRC)/grabscreen.h
-lissie.o: $(UTILS_SRC)/visual.h
-lissie.o: $(UTILS_SRC)/xshm.h
 worm.o: $(srcdir)/xlockmore.h
 worm.o: ../config.h
 worm.o: $(srcdir)/xlockmoreI.h
 worm.o: $(srcdir)/screenhack.h
-worm.o: $(UTILS_SRC)/yarandom.h
-worm.o: $(UTILS_SRC)/usleep.h
-worm.o: $(UTILS_SRC)/resources.h
-worm.o: $(UTILS_SRC)/hsv.h
-worm.o: $(UTILS_SRC)/colors.h
-worm.o: $(UTILS_SRC)/grabscreen.h
-worm.o: $(UTILS_SRC)/visual.h
-worm.o: $(UTILS_SRC)/xshm.h
 rotor.o: $(srcdir)/xlockmore.h
 rotor.o: ../config.h
 rotor.o: $(srcdir)/xlockmoreI.h
 rotor.o: $(srcdir)/screenhack.h
-rotor.o: $(UTILS_SRC)/yarandom.h
-rotor.o: $(UTILS_SRC)/usleep.h
-rotor.o: $(UTILS_SRC)/resources.h
-rotor.o: $(UTILS_SRC)/hsv.h
-rotor.o: $(UTILS_SRC)/colors.h
-rotor.o: $(UTILS_SRC)/grabscreen.h
-rotor.o: $(UTILS_SRC)/visual.h
-rotor.o: $(UTILS_SRC)/xshm.h
 ant.o: $(srcdir)/xlockmore.h
 ant.o: ../config.h
 ant.o: $(srcdir)/xlockmoreI.h
 ant.o: $(srcdir)/screenhack.h
-ant.o: $(UTILS_SRC)/yarandom.h
-ant.o: $(UTILS_SRC)/usleep.h
-ant.o: $(UTILS_SRC)/resources.h
-ant.o: $(UTILS_SRC)/hsv.h
-ant.o: $(UTILS_SRC)/colors.h
-ant.o: $(UTILS_SRC)/grabscreen.h
-ant.o: $(UTILS_SRC)/visual.h
-ant.o: $(UTILS_SRC)/xshm.h
-ant.o: $(UTILS_SRC)/erase.h
 ant.o: $(srcdir)/automata.h
 xjack.o: $(srcdir)/screenhack.h
 xjack.o: ../config.h
-xjack.o: $(UTILS_SRC)/yarandom.h
-xjack.o: $(UTILS_SRC)/usleep.h
-xjack.o: $(UTILS_SRC)/resources.h
-xjack.o: $(UTILS_SRC)/hsv.h
-xjack.o: $(UTILS_SRC)/colors.h
-xjack.o: $(UTILS_SRC)/grabscreen.h
-xjack.o: $(UTILS_SRC)/visual.h
 xlyap.o: $(srcdir)/screenhack.h
 xlyap.o: ../config.h
-xlyap.o: $(UTILS_SRC)/yarandom.h
-xlyap.o: $(UTILS_SRC)/usleep.h
-xlyap.o: $(UTILS_SRC)/resources.h
-xlyap.o: $(UTILS_SRC)/hsv.h
-xlyap.o: $(UTILS_SRC)/colors.h
-xlyap.o: $(UTILS_SRC)/grabscreen.h
-xlyap.o: $(UTILS_SRC)/visual.h
-xlyap.o: $(UTILS_SRC)/vroot.h
 jigsaw.o: $(srcdir)/screenhack.h
 jigsaw.o: ../config.h
-jigsaw.o: $(UTILS_SRC)/yarandom.h
-jigsaw.o: $(UTILS_SRC)/usleep.h
-jigsaw.o: $(UTILS_SRC)/resources.h
-jigsaw.o: $(UTILS_SRC)/hsv.h
-jigsaw.o: $(UTILS_SRC)/colors.h
-jigsaw.o: $(UTILS_SRC)/grabscreen.h
-jigsaw.o: $(UTILS_SRC)/visual.h
 jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_a_h.xbm
 jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_a_n_h.xbm
 jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_a_ne_h.xbm
@@ -1470,77 +1039,22 @@ jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_b_s_f.xbm
 jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_b_sw_f.xbm
 jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_b_w_f.xbm
 jigsaw.o: $(srcdir)/images/jigsaw/jigsaw_b_nw_f.xbm
-xscreensaver-sgigl.o: $(UTILS_SRC)/vroot.h
 cynosure.o: $(srcdir)/screenhack.h
 cynosure.o: ../config.h
-cynosure.o: $(UTILS_SRC)/yarandom.h
-cynosure.o: $(UTILS_SRC)/usleep.h
-cynosure.o: $(UTILS_SRC)/resources.h
-cynosure.o: $(UTILS_SRC)/hsv.h
-cynosure.o: $(UTILS_SRC)/colors.h
-cynosure.o: $(UTILS_SRC)/grabscreen.h
-cynosure.o: $(UTILS_SRC)/visual.h
 moire2.o: $(srcdir)/screenhack.h
 moire2.o: ../config.h
-moire2.o: $(UTILS_SRC)/yarandom.h
-moire2.o: $(UTILS_SRC)/usleep.h
-moire2.o: $(UTILS_SRC)/resources.h
-moire2.o: $(UTILS_SRC)/hsv.h
-moire2.o: $(UTILS_SRC)/colors.h
-moire2.o: $(UTILS_SRC)/grabscreen.h
-moire2.o: $(UTILS_SRC)/visual.h
-moire2.o: $(UTILS_SRC)/xdbe.h
 flow.o: $(srcdir)/xlockmore.h
 flow.o: ../config.h
 flow.o: $(srcdir)/xlockmoreI.h
 flow.o: $(srcdir)/screenhack.h
-flow.o: $(UTILS_SRC)/yarandom.h
-flow.o: $(UTILS_SRC)/usleep.h
-flow.o: $(UTILS_SRC)/resources.h
-flow.o: $(UTILS_SRC)/hsv.h
-flow.o: $(UTILS_SRC)/colors.h
-flow.o: $(UTILS_SRC)/grabscreen.h
-flow.o: $(UTILS_SRC)/visual.h
-flow.o: $(UTILS_SRC)/xshm.h
-flow.o: $(UTILS_SRC)/erase.h
 epicycle.o: $(srcdir)/screenhack.h
 epicycle.o: ../config.h
-epicycle.o: $(UTILS_SRC)/yarandom.h
-epicycle.o: $(UTILS_SRC)/usleep.h
-epicycle.o: $(UTILS_SRC)/resources.h
-epicycle.o: $(UTILS_SRC)/hsv.h
-epicycle.o: $(UTILS_SRC)/colors.h
-epicycle.o: $(UTILS_SRC)/grabscreen.h
-epicycle.o: $(UTILS_SRC)/visual.h
-epicycle.o: $(UTILS_SRC)/erase.h
 interference.o: $(srcdir)/screenhack.h
 interference.o: ../config.h
-interference.o: $(UTILS_SRC)/yarandom.h
-interference.o: $(UTILS_SRC)/usleep.h
-interference.o: $(UTILS_SRC)/resources.h
-interference.o: $(UTILS_SRC)/hsv.h
-interference.o: $(UTILS_SRC)/colors.h
-interference.o: $(UTILS_SRC)/grabscreen.h
-interference.o: $(UTILS_SRC)/visual.h
-interference.o: $(UTILS_SRC)/xdbe.h
 truchet.o: $(srcdir)/screenhack.h
 truchet.o: ../config.h
-truchet.o: $(UTILS_SRC)/yarandom.h
-truchet.o: $(UTILS_SRC)/usleep.h
-truchet.o: $(UTILS_SRC)/resources.h
-truchet.o: $(UTILS_SRC)/hsv.h
-truchet.o: $(UTILS_SRC)/colors.h
-truchet.o: $(UTILS_SRC)/grabscreen.h
-truchet.o: $(UTILS_SRC)/visual.h
 bsod.o: $(srcdir)/screenhack.h
 bsod.o: ../config.h
-bsod.o: $(UTILS_SRC)/yarandom.h
-bsod.o: $(UTILS_SRC)/usleep.h
-bsod.o: $(UTILS_SRC)/resources.h
-bsod.o: $(UTILS_SRC)/hsv.h
-bsod.o: $(UTILS_SRC)/colors.h
-bsod.o: $(UTILS_SRC)/grabscreen.h
-bsod.o: $(UTILS_SRC)/visual.h
 bsod.o: $(srcdir)/images/amiga.xpm
 bsod.o: $(srcdir)/images/atari.xbm
 bsod.o: $(srcdir)/images/mac.xbm
@@ -1548,356 +1062,94 @@ crystal.o: $(srcdir)/xlockmore.h
 crystal.o: ../config.h
 crystal.o: $(srcdir)/xlockmoreI.h
 crystal.o: $(srcdir)/screenhack.h
-crystal.o: $(UTILS_SRC)/yarandom.h
-crystal.o: $(UTILS_SRC)/usleep.h
-crystal.o: $(UTILS_SRC)/resources.h
-crystal.o: $(UTILS_SRC)/hsv.h
-crystal.o: $(UTILS_SRC)/colors.h
-crystal.o: $(UTILS_SRC)/grabscreen.h
-crystal.o: $(UTILS_SRC)/visual.h
-crystal.o: $(UTILS_SRC)/xshm.h
 discrete.o: $(srcdir)/xlockmore.h
 discrete.o: ../config.h
 discrete.o: $(srcdir)/xlockmoreI.h
 discrete.o: $(srcdir)/screenhack.h
-discrete.o: $(UTILS_SRC)/yarandom.h
-discrete.o: $(UTILS_SRC)/usleep.h
-discrete.o: $(UTILS_SRC)/resources.h
-discrete.o: $(UTILS_SRC)/hsv.h
-discrete.o: $(UTILS_SRC)/colors.h
-discrete.o: $(UTILS_SRC)/grabscreen.h
-discrete.o: $(UTILS_SRC)/visual.h
-discrete.o: $(UTILS_SRC)/xshm.h
-discrete.o: $(UTILS_SRC)/erase.h
 distort.o: $(srcdir)/screenhack.h
 distort.o: ../config.h
-distort.o: $(UTILS_SRC)/yarandom.h
-distort.o: $(UTILS_SRC)/usleep.h
-distort.o: $(UTILS_SRC)/resources.h
-distort.o: $(UTILS_SRC)/hsv.h
-distort.o: $(UTILS_SRC)/colors.h
-distort.o: $(UTILS_SRC)/grabscreen.h
-distort.o: $(UTILS_SRC)/visual.h
-distort.o: $(UTILS_SRC)/xshm.h
 kumppa.o: $(srcdir)/screenhack.h
 kumppa.o: ../config.h
-kumppa.o: $(UTILS_SRC)/yarandom.h
-kumppa.o: $(UTILS_SRC)/usleep.h
-kumppa.o: $(UTILS_SRC)/resources.h
-kumppa.o: $(UTILS_SRC)/hsv.h
-kumppa.o: $(UTILS_SRC)/colors.h
-kumppa.o: $(UTILS_SRC)/grabscreen.h
-kumppa.o: $(UTILS_SRC)/visual.h
-kumppa.o: $(UTILS_SRC)/xdbe.h
 sonar.o: $(srcdir)/screenhack.h
 sonar.o: ../config.h
-sonar.o: $(UTILS_SRC)/yarandom.h
-sonar.o: $(UTILS_SRC)/usleep.h
-sonar.o: $(UTILS_SRC)/resources.h
-sonar.o: $(UTILS_SRC)/hsv.h
-sonar.o: $(UTILS_SRC)/colors.h
-sonar.o: $(UTILS_SRC)/grabscreen.h
-sonar.o: $(UTILS_SRC)/visual.h
 demon.o: $(srcdir)/xlockmore.h
 demon.o: ../config.h
 demon.o: $(srcdir)/xlockmoreI.h
 demon.o: $(srcdir)/screenhack.h
-demon.o: $(UTILS_SRC)/yarandom.h
-demon.o: $(UTILS_SRC)/usleep.h
-demon.o: $(UTILS_SRC)/resources.h
-demon.o: $(UTILS_SRC)/hsv.h
-demon.o: $(UTILS_SRC)/colors.h
-demon.o: $(UTILS_SRC)/grabscreen.h
-demon.o: $(UTILS_SRC)/visual.h
-demon.o: $(UTILS_SRC)/xshm.h
 demon.o: $(srcdir)/automata.h
 loop.o: $(srcdir)/xlockmore.h
 loop.o: ../config.h
 loop.o: $(srcdir)/xlockmoreI.h
 loop.o: $(srcdir)/screenhack.h
-loop.o: $(UTILS_SRC)/yarandom.h
-loop.o: $(UTILS_SRC)/usleep.h
-loop.o: $(UTILS_SRC)/resources.h
-loop.o: $(UTILS_SRC)/hsv.h
-loop.o: $(UTILS_SRC)/colors.h
-loop.o: $(UTILS_SRC)/grabscreen.h
-loop.o: $(UTILS_SRC)/visual.h
-loop.o: $(UTILS_SRC)/xshm.h
 loop.o: $(srcdir)/automata.h
 t3d.o: $(srcdir)/screenhack.h
 t3d.o: ../config.h
-t3d.o: $(UTILS_SRC)/yarandom.h
-t3d.o: $(UTILS_SRC)/usleep.h
-t3d.o: $(UTILS_SRC)/resources.h
-t3d.o: $(UTILS_SRC)/hsv.h
-t3d.o: $(UTILS_SRC)/colors.h
-t3d.o: $(UTILS_SRC)/grabscreen.h
-t3d.o: $(UTILS_SRC)/visual.h
 penetrate.o: $(srcdir)/screenhack.h
 penetrate.o: ../config.h
-penetrate.o: $(UTILS_SRC)/yarandom.h
-penetrate.o: $(UTILS_SRC)/usleep.h
-penetrate.o: $(UTILS_SRC)/resources.h
-penetrate.o: $(UTILS_SRC)/hsv.h
-penetrate.o: $(UTILS_SRC)/colors.h
-penetrate.o: $(UTILS_SRC)/grabscreen.h
-penetrate.o: $(UTILS_SRC)/visual.h
 deluxe.o: $(srcdir)/screenhack.h
 deluxe.o: ../config.h
-deluxe.o: $(UTILS_SRC)/yarandom.h
-deluxe.o: $(UTILS_SRC)/usleep.h
-deluxe.o: $(UTILS_SRC)/resources.h
-deluxe.o: $(UTILS_SRC)/hsv.h
-deluxe.o: $(UTILS_SRC)/colors.h
-deluxe.o: $(UTILS_SRC)/grabscreen.h
-deluxe.o: $(UTILS_SRC)/visual.h
-deluxe.o: $(UTILS_SRC)/alpha.h
-deluxe.o: $(UTILS_SRC)/xdbe.h
 compass.o: $(srcdir)/screenhack.h
 compass.o: ../config.h
-compass.o: $(UTILS_SRC)/yarandom.h
-compass.o: $(UTILS_SRC)/usleep.h
-compass.o: $(UTILS_SRC)/resources.h
-compass.o: $(UTILS_SRC)/hsv.h
-compass.o: $(UTILS_SRC)/colors.h
-compass.o: $(UTILS_SRC)/grabscreen.h
-compass.o: $(UTILS_SRC)/visual.h
-compass.o: $(UTILS_SRC)/xdbe.h
 squiral.o: $(srcdir)/screenhack.h
 squiral.o: ../config.h
-squiral.o: $(UTILS_SRC)/yarandom.h
-squiral.o: $(UTILS_SRC)/usleep.h
-squiral.o: $(UTILS_SRC)/resources.h
-squiral.o: $(UTILS_SRC)/hsv.h
-squiral.o: $(UTILS_SRC)/colors.h
-squiral.o: $(UTILS_SRC)/grabscreen.h
-squiral.o: $(UTILS_SRC)/visual.h
-squiral.o: $(UTILS_SRC)/erase.h
 xflame.o: $(srcdir)/screenhack.h
 xflame.o: ../config.h
-xflame.o: $(UTILS_SRC)/yarandom.h
-xflame.o: $(UTILS_SRC)/usleep.h
-xflame.o: $(UTILS_SRC)/resources.h
-xflame.o: $(UTILS_SRC)/hsv.h
-xflame.o: $(UTILS_SRC)/colors.h
-xflame.o: $(UTILS_SRC)/grabscreen.h
-xflame.o: $(UTILS_SRC)/visual.h
-xflame.o: $(UTILS_SRC)/xshm.h
 xflame.o: $(srcdir)/images/bob.xbm
 wander.o: $(srcdir)/screenhack.h
 wander.o: ../config.h
-wander.o: $(UTILS_SRC)/yarandom.h
-wander.o: $(UTILS_SRC)/usleep.h
-wander.o: $(UTILS_SRC)/resources.h
-wander.o: $(UTILS_SRC)/hsv.h
-wander.o: $(UTILS_SRC)/colors.h
-wander.o: $(UTILS_SRC)/grabscreen.h
-wander.o: $(UTILS_SRC)/visual.h
-wander.o: $(UTILS_SRC)/erase.h
 spotlight.o: $(srcdir)/screenhack.h
 spotlight.o: ../config.h
-spotlight.o: $(UTILS_SRC)/yarandom.h
-spotlight.o: $(UTILS_SRC)/usleep.h
-spotlight.o: $(UTILS_SRC)/resources.h
-spotlight.o: $(UTILS_SRC)/hsv.h
-spotlight.o: $(UTILS_SRC)/colors.h
-spotlight.o: $(UTILS_SRC)/grabscreen.h
-spotlight.o: $(UTILS_SRC)/visual.h
 critical.o: $(srcdir)/screenhack.h
 critical.o: ../config.h
-critical.o: $(UTILS_SRC)/yarandom.h
-critical.o: $(UTILS_SRC)/usleep.h
-critical.o: $(UTILS_SRC)/resources.h
-critical.o: $(UTILS_SRC)/hsv.h
-critical.o: $(UTILS_SRC)/colors.h
-critical.o: $(UTILS_SRC)/grabscreen.h
-critical.o: $(UTILS_SRC)/visual.h
-critical.o: $(UTILS_SRC)/erase.h
 phosphor.o: $(srcdir)/screenhack.h
 phosphor.o: ../config.h
-phosphor.o: $(UTILS_SRC)/yarandom.h
-phosphor.o: $(UTILS_SRC)/usleep.h
-phosphor.o: $(UTILS_SRC)/resources.h
-phosphor.o: $(UTILS_SRC)/hsv.h
-phosphor.o: $(UTILS_SRC)/colors.h
-phosphor.o: $(UTILS_SRC)/grabscreen.h
-phosphor.o: $(UTILS_SRC)/visual.h
 xmatrix.o: $(srcdir)/screenhack.h
 xmatrix.o: ../config.h
-xmatrix.o: $(UTILS_SRC)/yarandom.h
-xmatrix.o: $(UTILS_SRC)/usleep.h
-xmatrix.o: $(UTILS_SRC)/resources.h
-xmatrix.o: $(UTILS_SRC)/hsv.h
-xmatrix.o: $(UTILS_SRC)/colors.h
-xmatrix.o: $(UTILS_SRC)/grabscreen.h
-xmatrix.o: $(UTILS_SRC)/visual.h
-xmatrix.o: $(srcdir)/images/matrix.xpm
+xmatrix.o: $(srcdir)/images/matrix0.xpm
+xmatrix.o: $(srcdir)/images/matrix1.xpm
 xmatrix.o: $(srcdir)/images/matrix2.xpm
-xmatrix.o: $(srcdir)/images/matrix.xbm
+xmatrix.o: $(srcdir)/images/matrix0b.xpm
+xmatrix.o: $(srcdir)/images/matrix1b.xpm
+xmatrix.o: $(srcdir)/images/matrix2b.xpm
+xmatrix.o: $(srcdir)/images/matrix0.xbm
+xmatrix.o: $(srcdir)/images/matrix1.xbm
 xmatrix.o: $(srcdir)/images/matrix2.xbm
+xmatrix.o: $(srcdir)/images/matrix0b.xbm
+xmatrix.o: $(srcdir)/images/matrix1b.xbm
+xmatrix.o: $(srcdir)/images/matrix2b.xbm
 petri.o: $(srcdir)/screenhack.h
 petri.o: ../config.h
-petri.o: $(UTILS_SRC)/yarandom.h
-petri.o: $(UTILS_SRC)/usleep.h
-petri.o: $(UTILS_SRC)/resources.h
-petri.o: $(UTILS_SRC)/hsv.h
-petri.o: $(UTILS_SRC)/colors.h
-petri.o: $(UTILS_SRC)/grabscreen.h
-petri.o: $(UTILS_SRC)/visual.h
-petri.o: $(UTILS_SRC)/spline.h
 shadebobs.o: $(srcdir)/screenhack.h
 shadebobs.o: ../config.h
-shadebobs.o: $(UTILS_SRC)/yarandom.h
-shadebobs.o: $(UTILS_SRC)/usleep.h
-shadebobs.o: $(UTILS_SRC)/resources.h
-shadebobs.o: $(UTILS_SRC)/hsv.h
-shadebobs.o: $(UTILS_SRC)/colors.h
-shadebobs.o: $(UTILS_SRC)/grabscreen.h
-shadebobs.o: $(UTILS_SRC)/visual.h
-xsublim.o: $(UTILS_SRC)/usleep.h
-xsublim.o: $(UTILS_SRC)/yarandom.h
-xsublim.o: $(UTILS_SRC)/resources.h
 ccurve.o: $(srcdir)/screenhack.h
 ccurve.o: ../config.h
-ccurve.o: $(UTILS_SRC)/yarandom.h
-ccurve.o: $(UTILS_SRC)/usleep.h
-ccurve.o: $(UTILS_SRC)/resources.h
-ccurve.o: $(UTILS_SRC)/hsv.h
-ccurve.o: $(UTILS_SRC)/colors.h
-ccurve.o: $(UTILS_SRC)/grabscreen.h
-ccurve.o: $(UTILS_SRC)/visual.h
-ccurve.o: $(UTILS_SRC)/erase.h
 blaster.o: $(srcdir)/screenhack.h
 blaster.o: ../config.h
-blaster.o: $(UTILS_SRC)/yarandom.h
-blaster.o: $(UTILS_SRC)/usleep.h
-blaster.o: $(UTILS_SRC)/resources.h
-blaster.o: $(UTILS_SRC)/hsv.h
-blaster.o: $(UTILS_SRC)/colors.h
-blaster.o: $(UTILS_SRC)/grabscreen.h
-blaster.o: $(UTILS_SRC)/visual.h
 bumps.o: $(srcdir)/bumps.h
 bumps.o: $(srcdir)/screenhack.h
 bumps.o: ../config.h
-bumps.o: $(UTILS_SRC)/yarandom.h
-bumps.o: $(UTILS_SRC)/usleep.h
-bumps.o: $(UTILS_SRC)/resources.h
-bumps.o: $(UTILS_SRC)/hsv.h
-bumps.o: $(UTILS_SRC)/colors.h
-bumps.o: $(UTILS_SRC)/grabscreen.h
-bumps.o: $(UTILS_SRC)/visual.h
 ripples.o: $(srcdir)/screenhack.h
 ripples.o: ../config.h
-ripples.o: $(UTILS_SRC)/yarandom.h
-ripples.o: $(UTILS_SRC)/usleep.h
-ripples.o: $(UTILS_SRC)/resources.h
-ripples.o: $(UTILS_SRC)/hsv.h
-ripples.o: $(UTILS_SRC)/colors.h
-ripples.o: $(UTILS_SRC)/grabscreen.h
-ripples.o: $(UTILS_SRC)/visual.h
-ripples.o: $(UTILS_SRC)/xshm.h
 xteevee.o: $(srcdir)/screenhack.h
 xteevee.o: ../config.h
-xteevee.o: $(UTILS_SRC)/yarandom.h
-xteevee.o: $(UTILS_SRC)/usleep.h
-xteevee.o: $(UTILS_SRC)/resources.h
-xteevee.o: $(UTILS_SRC)/hsv.h
-xteevee.o: $(UTILS_SRC)/colors.h
-xteevee.o: $(UTILS_SRC)/grabscreen.h
-xteevee.o: $(UTILS_SRC)/visual.h
-xteevee.o: $(UTILS_SRC)/colorbars.h
 xspirograph.o: $(srcdir)/screenhack.h
 xspirograph.o: ../config.h
-xspirograph.o: $(UTILS_SRC)/yarandom.h
-xspirograph.o: $(UTILS_SRC)/usleep.h
-xspirograph.o: $(UTILS_SRC)/resources.h
-xspirograph.o: $(UTILS_SRC)/hsv.h
-xspirograph.o: $(UTILS_SRC)/colors.h
-xspirograph.o: $(UTILS_SRC)/grabscreen.h
-xspirograph.o: $(UTILS_SRC)/visual.h
-xspirograph.o: $(UTILS_SRC)/erase.h
 nerverot.o: $(srcdir)/screenhack.h
 nerverot.o: ../config.h
-nerverot.o: $(UTILS_SRC)/yarandom.h
-nerverot.o: $(UTILS_SRC)/usleep.h
-nerverot.o: $(UTILS_SRC)/resources.h
-nerverot.o: $(UTILS_SRC)/hsv.h
-nerverot.o: $(UTILS_SRC)/colors.h
-nerverot.o: $(UTILS_SRC)/grabscreen.h
-nerverot.o: $(UTILS_SRC)/visual.h
 xrayswarm.o: $(srcdir)/screenhack.h
 xrayswarm.o: ../config.h
-xrayswarm.o: $(UTILS_SRC)/yarandom.h
-xrayswarm.o: $(UTILS_SRC)/usleep.h
-xrayswarm.o: $(UTILS_SRC)/resources.h
-xrayswarm.o: $(UTILS_SRC)/hsv.h
-xrayswarm.o: $(UTILS_SRC)/colors.h
-xrayswarm.o: $(UTILS_SRC)/grabscreen.h
-xrayswarm.o: $(UTILS_SRC)/visual.h
 hyperball.o: $(srcdir)/screenhack.h
 hyperball.o: ../config.h
-hyperball.o: $(UTILS_SRC)/yarandom.h
-hyperball.o: $(UTILS_SRC)/usleep.h
-hyperball.o: $(UTILS_SRC)/resources.h
-hyperball.o: $(UTILS_SRC)/hsv.h
-hyperball.o: $(UTILS_SRC)/colors.h
-hyperball.o: $(UTILS_SRC)/grabscreen.h
-hyperball.o: $(UTILS_SRC)/visual.h
 zoom.o: $(srcdir)/screenhack.h
 zoom.o: ../config.h
-zoom.o: $(UTILS_SRC)/yarandom.h
-zoom.o: $(UTILS_SRC)/usleep.h
-zoom.o: $(UTILS_SRC)/resources.h
-zoom.o: $(UTILS_SRC)/hsv.h
-zoom.o: $(UTILS_SRC)/colors.h
-zoom.o: $(UTILS_SRC)/grabscreen.h
-zoom.o: $(UTILS_SRC)/visual.h
 whirlwindwarp.o: $(srcdir)/screenhack.h
 whirlwindwarp.o: ../config.h
-whirlwindwarp.o: $(UTILS_SRC)/yarandom.h
-whirlwindwarp.o: $(UTILS_SRC)/usleep.h
-whirlwindwarp.o: $(UTILS_SRC)/resources.h
-whirlwindwarp.o: $(UTILS_SRC)/hsv.h
-whirlwindwarp.o: $(UTILS_SRC)/colors.h
-whirlwindwarp.o: $(UTILS_SRC)/grabscreen.h
-whirlwindwarp.o: $(UTILS_SRC)/visual.h
-whirlwindwarp.o: $(UTILS_SRC)/erase.h
 rotzoomer.o: $(srcdir)/screenhack.h
 rotzoomer.o: ../config.h
-rotzoomer.o: $(UTILS_SRC)/yarandom.h
-rotzoomer.o: $(UTILS_SRC)/usleep.h
-rotzoomer.o: $(UTILS_SRC)/resources.h
-rotzoomer.o: $(UTILS_SRC)/hsv.h
-rotzoomer.o: $(UTILS_SRC)/colors.h
-rotzoomer.o: $(UTILS_SRC)/grabscreen.h
-rotzoomer.o: $(UTILS_SRC)/visual.h
-rotzoomer.o: $(UTILS_SRC)/xshm.h
 whirlygig.o: $(srcdir)/screenhack.h
 whirlygig.o: ../config.h
-whirlygig.o: $(UTILS_SRC)/yarandom.h
-whirlygig.o: $(UTILS_SRC)/usleep.h
-whirlygig.o: $(UTILS_SRC)/resources.h
-whirlygig.o: $(UTILS_SRC)/hsv.h
-whirlygig.o: $(UTILS_SRC)/colors.h
-whirlygig.o: $(UTILS_SRC)/grabscreen.h
-whirlygig.o: $(UTILS_SRC)/visual.h
 speedmine.o: $(srcdir)/screenhack.h
 speedmine.o: ../config.h
-speedmine.o: $(UTILS_SRC)/yarandom.h
-speedmine.o: $(UTILS_SRC)/usleep.h
-speedmine.o: $(UTILS_SRC)/resources.h
-speedmine.o: $(UTILS_SRC)/hsv.h
-speedmine.o: $(UTILS_SRC)/colors.h
-speedmine.o: $(UTILS_SRC)/grabscreen.h
-speedmine.o: $(UTILS_SRC)/visual.h
-speedmine.o: $(UTILS_SRC)/erase.h
 vermiculate.o: $(srcdir)/screenhack.h
 vermiculate.o: ../config.h
-vermiculate.o: $(UTILS_SRC)/yarandom.h
-vermiculate.o: $(UTILS_SRC)/usleep.h
-vermiculate.o: $(UTILS_SRC)/resources.h
-vermiculate.o: $(UTILS_SRC)/hsv.h
-vermiculate.o: $(UTILS_SRC)/colors.h
-vermiculate.o: $(UTILS_SRC)/grabscreen.h
-vermiculate.o: $(UTILS_SRC)/visual.h
 
index c7cbd54f6c6ee1e0d08a1dff4746c8de71f93a91..dfa67f3ad42fde20ede1288d677bc26e74eba5b6 100644 (file)
@@ -361,10 +361,10 @@ static void move_robots(void)
                                                                                }
                                                                                else {
                                                                                        robots[x].lasers[y].start_y = -robots[x].radius;
-                                                                                       robots[x].lasers[y].end_y = robots[x].lasers[y].start_y + 7;
+                                                                                       robots[x].lasers[y].end_y = robots[x].lasers[y].start_y - 7;
                                                                                }
                                                                                robots[x].lasers[y].start_x = (int)(robots[x].lasers[y].start_y * slope);;
-                                                                               robots[x].lasers[y].start_x = (int)(robots[x].lasers[y].end_y * slope);
+                                                                               robots[x].lasers[y].end_x = (int)(robots[x].lasers[y].end_y * slope);
                                                                        }
                                                                        robots[x].lasers[y].start_x = robots[x].lasers[y].start_x + robots[x].new_x;
                                                                        robots[x].lasers[y].start_y = robots[x].lasers[y].start_y + robots[x].new_y;
index fb04fdc8f5ce4c2483bd246ee3c207f4842c4183..e86efe267677fd4462f7e83ecd7e5bd3121abcf6 100644 (file)
@@ -1567,6 +1567,28 @@ char *defaults [] = {
 
 XrmOptionDescRec options [] = {
   { "-delay",          ".delay",               XrmoptionSepArg, 0 },
+  { "-windows",                ".doWindows",           XrmoptionNoArg,  "True"  },
+  { "-no-windows",     ".doWindows",           XrmoptionNoArg,  "False" },
+  { "-nt",             ".doNT",                XrmoptionNoArg,  "True"  },
+  { "-no-nt",          ".doNT",                XrmoptionNoArg,  "False" },
+  { "-amiga",          ".doAmiga",             XrmoptionNoArg,  "True"  },
+  { "-no-amiga",       ".doAmiga",             XrmoptionNoArg,  "False" },
+  { "-mac",            ".doMac",               XrmoptionNoArg,  "True"  },
+  { "-no-mac",         ".doMac",               XrmoptionNoArg,  "False" },
+  { "-atari",          ".doAtari",             XrmoptionNoArg,  "True"  },
+  { "-no-atari",       ".doAtari",             XrmoptionNoArg,  "False" },
+  { "-macsbug",                ".doMacsBug",           XrmoptionNoArg,  "True"  },
+  { "-no-macsbug",     ".doMacsBug",           XrmoptionNoArg,  "False" },
+  { "-sco",            ".doSCO",               XrmoptionNoArg,  "True"  },
+  { "-no-sco",         ".doSCO",               XrmoptionNoArg,  "False" },
+  { "-bsd",            ".doBSD",               XrmoptionNoArg,  "True"  },
+  { "-no-bsd",         ".doBSD",               XrmoptionNoArg,  "False" },
+  { "-sparclinux",     ".doSparcLinux",        XrmoptionNoArg,  "True"  },
+  { "-no-sparclinux",  ".doSparcLinux",        XrmoptionNoArg,  "False" },
+  { "-blitdamage",     ".doBlitDamage",        XrmoptionNoArg,  "True"  },
+  { "-no-blitdamage",  ".doBlitDamage",        XrmoptionNoArg,  "False" },
+  { "-solaris",                ".doSolaris",           XrmoptionNoArg,  "True"  },
+  { "-no-solaris",     ".doSolaris",           XrmoptionNoArg,  "False" },
   { 0, 0, 0, 0 }
 };
 
@@ -1609,7 +1631,11 @@ screenhack (Display *dpy, Window window)
        }
       loop++;
       if (loop > 100) j = -1;
-      if (loop > 200) exit(-1);
+      if (loop > 200)
+        {
+          fprintf (stderr, "%s: no display modes enabled?\n", progname);
+          exit(-1);
+        }
       if (!did) continue;
       XSync (dpy, False);
       j = i;
index 61a2709ba377456a0bf3d289afda7c4f5d85a7a7..bd83e4d3bfbd094a6fc02a753c1a96150061f25d 100644 (file)
@@ -5,8 +5,8 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BOUBOULE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BRAID.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BSOD.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES-DEFAULT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES-DEFAULT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUMPS.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CCURVE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) COMPASS.C
@@ -50,8 +50,8 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LMORPH.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LOOP.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MUNCH.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) NERVEROT.C
index 61a2709ba377456a0bf3d289afda7c4f5d85a7a7..bd83e4d3bfbd094a6fc02a753c1a96150061f25d 100644 (file)
@@ -5,8 +5,8 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BOUBOULE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BRAID.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BSOD.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES-DEFAULT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES-DEFAULT.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUMPS.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CCURVE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) COMPASS.C
@@ -50,8 +50,8 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LMORPH.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LOOP.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MUNCH.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) NERVEROT.C
diff --git a/hacks/config/README b/hacks/config/README
new file mode 100644 (file)
index 0000000..b752898
--- /dev/null
@@ -0,0 +1,172 @@
+
+                              XScreenSaver
+
+            a screen saver and locker for the X window system
+                            by Jamie Zawinski
+
+                              version 4.00
+                               02-Jan-2002
+
+                     http://www.jwz.org/xscreensaver/
+
+-----------------------------------------------------------------------
+
+This directory contains XML files that describe each of the screenhacks;
+the per-hack user interface is constructed based on the things in these
+files.  The files are loaded at run-time by xscreensaver-demo (also
+known as "the Control Center screensaver properties capplet".)
+
+The tags and parameters used here are:
+
+-----------------------------------------------------------------------
+
+  <screensaver name="PROGRAM-NAME" _label="PRETTY NAME">
+     ...
+  </screensaver>
+
+        This encloses the whole file: all of the tags described below
+        are inside this one.
+
+-----------------------------------------------------------------------
+
+  <command arg="-SWITCH"/>
+
+        specifies that "-SWITCH" always appears on the command line.
+        You'll most often see this with "-root".
+
+-----------------------------------------------------------------------
+
+  <boolean id="SYMBOLIC NAME"
+           _label="USER VISIBLE STRING"
+            arg-set="-SWITCH-A"
+            arg-unset="-SWITCH-B"
+           />
+
+        This creates a checkbox.
+
+        "id" is currently unused, but may eventually be used for
+        letting other widgets refer to this one.
+
+        "_label" is the string printed next to the checkbox.
+
+        "arg-set" is what to insert into the command line if the
+        box is checked.
+
+        "arg-unset" is what to insert into the command line if the
+        box is unchecked.
+
+        You will probably never specify both "arg-set" and "arg-unset",
+        because the setting that is the default should insert nothing
+        into the command line (that's what makes it the default.)
+        For example:
+
+           <boolean "foo" arg_set="-foo">
+
+        or if "foo" is the default, and must be explicity turned off,
+
+           <boolean "foo" arg_unset="-no-foo">
+
+-----------------------------------------------------------------------
+
+  <number id="SYMBOLIC NAME"
+          type="slider"
+          arg="-SWITCH %"
+          _label="HEADING LABEL"
+          _low-label="LEFT LABEL"
+          _high-label="RIGHT LABEL"
+          low="MIN VALUE"
+          high="MAX VALUE"
+          default="DEFAULT VALUE"
+          [ convert="invert" ]
+          />
+
+        This creates a slider.
+
+        The _label is printed above the slider.  The _low-label and
+        _high-label are printed to the left and right, respectively.
+
+        If any of the numbers you type has a decimal point, then
+        the range is assumed to be a floating-point value; otherwise,
+        only integral values will be used.  So be careful about "1"
+        versus "1.0".
+
+        If convert="invert" is specified, then the value that the
+        user tweaks goes the other way from the value the command
+        line expects: e.g., if the slider goes from 10-20 and the
+        user picks 13, the converted value goes from 20-10 (and
+        would be 17.)  This is useful for converting between the
+        concepts of "delay" and "speed".
+
+        In the "arg" string, the first occurence of "%" is replaced
+        with the numeric value, when creating the command line.
+
+-----------------------------------------------------------------------
+
+  <number id="SYMBOLIC NAME"
+          type="spinbutton"
+          arg="-SWITCH %"
+          _label="HEADING LABEL"
+          low="MIN VALUE"
+          high="MAX VALUE"
+          default="DEFAULT VALUE"
+          [ convert="invert" ]
+          />
+
+        This creates a spinbox (a text field with a number in it,
+        and up/down arrows next to it.)
+
+        Arguments are exactly like type="slider", except that
+        _low-label and _high-label are not used.  Also, _label
+        appears to the left of the box, instead of above it.
+
+-----------------------------------------------------------------------
+
+  <select id="SYMBOLIC NAME">
+    <option id="SYMBOLIC NAME"
+            _label="USER VISIBLE STRING"
+            arg-set="-SWITCH"
+            />
+    [ ... more <options> ... ]
+  </select>
+
+        This creates a selection popup menu.
+
+        Options should have _arg-set, and never _arg-unset.
+
+        One of the menu items (the default) should have no
+        _arg-set.
+
+-----------------------------------------------------------------------
+
+  <string id="SYMBOLIC NAME"
+           _label="USER VISIBLE STRING"
+           arg="-SWITCH %"
+           />
+
+        This creates a text entry field.  Options should be obvious.
+
+-----------------------------------------------------------------------
+
+  <file id="SYMBOLIC NAME"
+        _label="USER VISIBLE STRING"
+        arg="-SWITCH %"
+        />
+
+        This creates a file entry field (a text field with a "Browse"
+        button next to it.)
+
+-----------------------------------------------------------------------
+
+  <_description>
+        FREE TEXT
+  </_description>
+
+        This is the description of the hack that appears in the right
+        part of the window.  Lines are wrapped; paragraphs are separated
+        by blank lines.  Lines that begin with whitespace will not be
+        wrapped (see "munch.xml" for an example of why.)
+
+        Make sure you use "&lt;" instead of "<", etc.  Character
+        entities are allowed; HTML (and other markup) is not.
+
+-----------------------------------------------------------------------
diff --git a/hacks/config/ant.xml b/hacks/config/ant.xml
new file mode 100644 (file)
index 0000000..84609d0
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ant" _label="Ant">
+
+  <command arg="-root"/>
+
+  <boolean id="sharpturn" _label="Sharp Turns" arg-set="-sharpturns"/>
+
+  <boolean id="truchet" _label="Truchet Lines" arg-set="-truchet"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="1000"
+          convert="invert"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="40000"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Ants Count" low="-20" high="20" default="-3"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Ant Size" low="-18" high="18" default="-12"/>
+
+  <select id="neighbors">
+    <option id="rand" _label="Random Cell Shape"/>
+    <option id="three" _label="Three Sided Cells" 
+            arg-set="-neighbors 3"/>
+    <option id="four" _label="Four Sided Cells"
+            arg-set="-neighbors 4"/>
+    <option id="six" _label="Six Sided Cells" enable="sharpturn"
+            arg-set="-neighbors 6"/>
+    <option id="nine" _label="Nine Sided Cells"
+            arg-set="-neighbors 9"/>
+    <option id="twelve" _label="Twelve Sided Cells" enable="sharpturn"
+            arg-set="-neighbors 12"/>
+  </select>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="2" high="255" default="64"/>
+
+  <_description>
+A cellular automaton that is really a two-dimensional Turing machine:
+as the heads (``ants'') walk along the screen, they change pixel
+values in their path.  Then, as they pass over changed pixels, their
+behavior is influenced.  Written by David Bagley.
+  </_description>
+</screensaver>
diff --git a/hacks/config/atlantis.xml b/hacks/config/atlantis.xml
new file mode 100644 (file)
index 0000000..914fd21
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="atlantis" _label="Atlantis">
+
+  <command arg="-root"/>
+
+  <number id="whalespeed" type="slider" arg="-whalespeed %"
+           _label="Whale Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="1000" default="250"/>
+
+  <number id="sharkspeed" type="slider" arg="-delay %"
+          _label="Shark Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="500" default="100"
+          convert="invert"/>
+
+  <number id="sharkproximity" type="slider" arg="-size %"
+          _label="Shark Proximity" _low-label="Shy" _high-label="Agressive"
+          low="100" high="10000" default="6000"/>
+
+  <number id="sharkcount" type="spinbutton" arg="-count %"
+          _label="Number of Sharks" low="0" high="20" default="4"/>
+
+  <select id="water">
+    <option id="shimmer" _label="Shimmering Water"/>
+    <option id="clear"   _label="Clear Water" arg-set="-no-texture"/>
+  </select>
+
+  <select id="bg">
+    <option id="flat"     _label="Flat Background"/>
+    <option id="gradient" _label="Gradient Background" arg-set="-gradient"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+This is xfishtank writ large: a GL animation of a number of sharks,
+dolphins, and whales.  The swimming motions are great. Originally
+written by Mark Kilgard.
+  </_description>
+</screensaver>
diff --git a/hacks/config/attraction.xml b/hacks/config/attraction.xml
new file mode 100644 (file)
index 0000000..cc815f0
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="attraction" _label="Attraction">
+
+  <command arg="-root"/>
+
+  <select id="mode">
+    <option id="balls"    _label="Balls"    arg-set="-mode balls"/>
+    <option id="lines"    _label="Lines"    arg-set="-mode lines"/>
+    <option id="tails"    _label="Tails"    arg-set="-mode tails"/>
+    <option id="polygons" _label="Polygons" arg-set="-mode polygons"/>
+    <option id="splines"  _label="Splines"  arg-set="-mode splines"/>
+    <option id="fsplines" _label="Filled Splines"
+                                           arg-set="-mode filled-splines"/>
+  </select>
+
+  <select id="wallmode">
+    <option id="walls"   _label="Bounce Off Walls"/>
+    <option id="nowalls" _label="Ignore Screen Edges" arg-set="-nowalls"/>
+  </select>
+
+  <hgroup>
+    <number id="points" type="spinbutton" arg="-points %"
+              _label="Ball Count" low="0" high="200" default="0"/>
+    <number id="points" type="slider" arg="-size %"
+              _low-label="Ball Mass" _high-label="High"
+              low="0" high="100" default="0"/>
+  </hgroup>
+
+  <number id="viscosity" type="slider" arg="-viscosity %"
+          _label="Environmental Viscosity"
+          _low-label="Low" _high-label="High"
+          low="0.0" high="1.0" default="1.0"
+          convert="invert"/>
+
+  <number id="threshold" type="slider" arg="-threshold %"
+          _label="Repulsion Threshold"
+          _low-label="Small" _high-label="Large"
+          low="0" high="500" default="100"/>
+
+  <number id="segments" type="slider" arg="-segments %"
+          _label="Trail Length" _low-label="Short" _high-label="Long"
+          low="2" high="1000" default="500"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <number id="color_contrast" type="slider" arg="-color-shift %"
+          _label="Color Contrast" _low-label="Low" _high-label="High"
+           low="0" high="25" default="3"/>
+
+  <boolean id="orbit" _label="Orbital Mode" arg-set="-orbit"/>
+  <hgroup>
+    <number id="radius" type="spinbutton" arg="-radius %"
+              _label="Radius" low="0" high="1000" default="0"/>
+    <number id="vmult" type="slider" arg="-vmult %"
+            _low-label="Outward" _high-label="Inward"
+             low="-5.0" high="5.0" default="0.9"/>
+  </hgroup>
+
+  <!-- #### -vx [?] -->
+  <!-- #### -vy [?] -->
+  <!-- #### -glow -->
+  <!-- #### -nomaxspeed -->
+  <!-- #### -correct-bounce -->
+  <!-- #### -graphmode [none] -->
+
+  <_description>
+Like qix, this uses a simple simple motion model to generate many
+different display modes.  The control points attract each other up to
+a certain distance, and then begin to repel each other.  The
+attraction/repulsion is proportional to the distance between any two
+particles, similar to the strong and weak nuclear forces.
+
+One of the most interesting ways to watch this hack is simply as
+bouncing balls, because their motions and interactions with each
+other are so odd.  Sometimes two balls will get into a tight orbit
+around each other, to be interrupted later by a third, or by the edge
+of the screen.  It looks quite chaotic.
+
+Written by Jamie Zawinski, based on Lisp code by John Pezaris.
+  </_description>
+</screensaver>
diff --git a/hacks/config/blaster.xml b/hacks/config/blaster.xml
new file mode 100644 (file)
index 0000000..39d8734
--- /dev/null
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="blaster" _label="Blaster">
+
+  <command arg="-root"/>
+
+  <number id="num_robots" type="spinbutton" arg="-num_robots %"
+          _label="Robots" low="2" high="50" default="5"/>
+
+  <number id="num_lasers" type="spinbutton" arg="-num_lasers %"
+          _label="Lasers" low="1" high="100" default="3"/>
+
+  <number id="num_stars" type="slider" arg="-num_stars %"
+          _label="Stars" _low-label="Few" _high-label="Many"
+          low="5" high="200" default="50"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <!-- #### -move_stars_x [2] -->
+  <!-- #### -move_stars_y [1] -->
+  <!-- #### -move_stars_random [0] -->
+  <!-- #### -star_color [white] -->
+
+  <!-- #### -explode_size_1 [27] -->
+  <!-- #### -explode_size_2 [19] -->
+  <!-- #### -explode_size_3 [7] -->
+  <!-- #### -explode_color_1 [yellow] -->
+  <!-- #### -explode_color_2 [orange] -->
+
+  <!-- #### -r_color0 [magenta] -->
+  <!-- #### -r_color1 [orange] -->
+  <!-- #### -r_color2 [yellow] -->
+  <!-- #### -r_color3 [white] -->
+  <!-- #### -r_color4 [blue] -->
+  <!-- #### -r_color5 [cyan] -->
+  <!-- #### -l_color0 [green] -->
+  <!-- #### -l_color1 [red] -->
+
+  <!-- #### -mother_ship -->
+  <!-- #### -mother_ship_width [25] -->
+  <!-- #### -mother_ship_height [7] -->
+  <!-- #### -mother_ship_laser [15] -->
+  <!-- #### -mother_ship_period [150] -->
+  <!-- #### -mother_ship_hits [10] -->
+  <!-- #### -mother_ship_color0 [darkblue] -->
+  <!-- #### -mother_ship_color1 [white] -->
+
+  <_description>
+Draws a simulation of flying space-combat robots (cleverly disguised
+as colored circles) doing battle in front of a moving star field.
+Written by Jonathan Lin.
+  </_description>
+</screensaver>
diff --git a/hacks/config/blitspin.xml b/hacks/config/blitspin.xml
new file mode 100644 (file)
index 0000000..d7e73b2
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="blitspin" _label="BlitSpin">
+
+  <command arg="-root"/>
+
+  <number id="delay" type="slider" arg="-delay %"
+          _label="Fuzzy Rotation Speed" _low-label="Slow" _high-label="Fast"
+          low="1" high="800000" default="500000"
+          convert="invert"/>
+
+  <number id="delay2" type="slider" arg="-delay2 %"
+          _label="90° Rotation Speed" _low-label="Slow" _high-label="Fast"
+          low="1" high="800000" default="500000"
+          convert="invert"/>
+
+  <boolean id="grab" _label="Grab Screen" arg-set="-grab"/>
+
+  <file id="bitmap" _label="Bitmap to rotate" arg="-bitmap %"/>
+
+  <_description>
+The ``blitspin'' hack repeatedly rotates a bitmap by 90 degrees by
+using logical operations: the bitmap is divided into quadrants, and
+the quadrants are shifted clockwise.  Then the same thing is done
+again with progressively smaller quadrants, except that all
+sub-quadrants of a given size are rotated in parallel.  Written by
+Jamie Zawinski based on some cool SmallTalk code seen in in Byte
+Magazine in 1981.
+
+As you watch it, the image appears to dissolve into static and then
+reconstitute itself, but rotated. You can provide the image to use,
+as an XBM or XPM file, or tell it to grab a screen image and rotate
+that.
+  </_description>
+</screensaver>
diff --git a/hacks/config/bouboule.xml b/hacks/config/bouboule.xml
new file mode 100644 (file)
index 0000000..7931eec
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bouboule" _label="Bouboule">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="5000"
+          convert="invert"/>
+
+  <number id="count" type="slider" arg="-count %"
+          _label="Number of Spots" _low-label="Few" _high-label="Many"
+          low="1" high="400" default="100"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <boolean id="3d" _label="Do Red/Blue 3D seperation" arg-set="-3d"/>
+
+  <_description>
+This draws what looks like a spinning, deforming baloon with
+varying-sized spots painted on its invisible surface.  Written by
+Jeremie Petit.
+  </_description>
+</screensaver>
diff --git a/hacks/config/braid.xml b/hacks/config/braid.xml
new file mode 100644 (file)
index 0000000..cb9d9ef
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="braid" _label="Braid">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Max Rings" low="3" high="15" default="15"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Line Thickness" low="-20" high="20" default="-7"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Duration" _low-label="Short" _high-label="Long"
+          low="0" high="500" default="100"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="1000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Draws random color-cycling inter-braided concentric circles.  Written
+by John Neil.
+  </_description>
+</screensaver>
diff --git a/hacks/config/bsod.xml b/hacks/config/bsod.xml
new file mode 100644 (file)
index 0000000..69debf0
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bsod" _label="BSOD">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="5 seconds" _high-label="2 minutes"
+          low="5" high="120" default="30"/>
+
+  <hgroup>
+   <vgroup>
+     <boolean id="windows"    _label="Windows"     arg-unset="-no-windows"/>
+     <boolean id="mac"        _label="MacOS"       arg-unset="-no-mac"/>
+     <boolean id="amiga"      _label="AmigaDOS"    arg-unset="-no-amiga"/>
+     <boolean id="bsd"        _label="BSD"         arg-set="-bsd"/>
+     <boolean id="sparclinux" _label="Sparc Linux" arg-set="-sparclinux"/>
+   </vgroup>
+   <vgroup>
+     <boolean id="nt"         _label="Windows NT"  arg-unset="-no-nt"/>
+     <boolean id="macsbug"    _label="MacsBug"     arg-unset="-no-macsbug"/>
+     <boolean id="atari"      _label="Atari"       arg-set="-atari"/>
+     <boolean id="sco"        _label="SCO"         arg-unset="-no-sco"/>
+     <boolean id="solaris"    _label="Solaris"     arg-unset="-no-solaris"/>
+   </vgroup>
+  </hgroup>
+  <boolean id="blitdamage" _label="NCD X Terminal" arg-unset="-no-blitdamage"/>
+
+  <_description>
+BSOD stands for ``Blue Screen of Death.''  The finest in personal
+computer emulation, this hack simulates popular screen savers from a
+number of less robust operating systems.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/bubble3d.xml b/hacks/config/bubble3d.xml
new file mode 100644 (file)
index 0000000..331e04a
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bubble3d" _label="Bubble3D">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws a stream of rising, undulating 3D bubbles, rising toward the
+top of the screen, with nice specular reflections. Written by Richard
+Jones.
+  </_description>
+</screensaver>
diff --git a/hacks/config/bubbles.xml b/hacks/config/bubbles.xml
new file mode 100644 (file)
index 0000000..172cb69
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bubbles" _label="Bubbles">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="800"
+          convert="invert"/>
+
+  <boolean id="simple" _label="Draw circles instead of pixmap bubbles"
+           arg-set="-simple"/>
+
+  <boolean id="broken" _label="Don't hide bubbles when they pop"
+           arg-set="-broken"/>
+
+  <boolean id="3d" _label="Bubbles exist in three dimensions"
+           arg-set="-3D"/>
+
+  <select id="gravity">
+    <option id="rise"     _label="Bubbles Rise"  arg-set="-rise"/>
+    <option id="float"    _label="Bubbles Float"/>
+    <option id="drop"     _label="Bubbles Fall"  arg-set="-drop"/>
+  </select>
+
+  <boolean id="trails" _label="Leave Trails" arg-set="-trails"/>
+
+  <_description>
+This simulates the kind of bubble formation that happens when water
+boils:small bubbles appear, and as they get closer to each other,
+they combine to form larger bubbles, which eventually pop.  Written
+by James Macnicol.
+  </_description>
+</screensaver>
diff --git a/hacks/config/bumps.xml b/hacks/config/bumps.xml
new file mode 100644 (file)
index 0000000..aaf8075
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="bumps" _label="Bumps">
+
+  <command arg="-root"/>
+
+  <!-- #### -degrees [360] -->
+  <!-- #### -color [random] -->
+  <!-- #### -colorcount [64] -->
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="100000" default="50000"
+          convert="invert"/>
+
+  <!-- #### -soften [1] -->
+  <!-- #### -invert -->
+
+  <_description>
+A bit like `Spotlight', except that instead of merely exposing part
+of your desktop, it creates a bump map from it.  Basically, it
+3D-izes a roaming section of your desktop, based on color intensity.
+Written by Shane Smit.
+  </_description>
+</screensaver>
diff --git a/hacks/config/cage.xml b/hacks/config/cage.xml
new file mode 100644 (file)
index 0000000..51e2520
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cage" _label="Cage">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="30000" default="25000"
+          convert="invert"/>
+
+<!--
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+-->
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius
+strip, and rotates it in three dimensions.  Written by Marcelo
+Vianna.
+  </_description>
+</screensaver>
diff --git a/hacks/config/ccurve.xml b/hacks/config/ccurve.xml
new file mode 100644 (file)
index 0000000..86e70c0
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ccurve" _label="C Curve">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Delay" _low-label="0 seconds" _high-label="1 minute"
+          low="0" high="60" default="1"/>
+
+  <number id="speed" type="slider" arg="-pause %"
+          _label="Duration" _low-label="1 second" _high-label="1 minute"
+          low="1" high="60" default="3"/>
+
+  <number id="limit" type="slider" arg="-limit %"
+          _label="Density" _low-label="Low" _high-label="High"
+          low="3" high="300000" default="200000"/>
+
+  <_description>
+Generates self-similar linear fractals, including the classic ``C
+Curve.''  Written by Rick Campbell.
+  </_description>
+</screensaver>
diff --git a/hacks/config/circuit.xml b/hacks/config/circuit.xml
new file mode 100644 (file)
index 0000000..a1f3cd3
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="circuit" _label="Circuit">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="30000"
+          convert="invert"/>
+
+  <number id="count" type="spinbutton" arg="-parts %"
+          _label="Parts" low="1" high="50" default="10"/>
+
+  <boolean id="rotate" _label="Spin" arg-unset="-no-spin"/>
+
+  <boolean id="rotate" _label="Rotate" arg-set="-rotate"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Rotation Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="100" default="1"/>
+
+  <select id="render">
+    <option id="flat"  _label="Flat Coloring" arg-set="-no-light"/>
+    <option id="light" _label="Directional Lighting"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Animates a number of 3D electronic components.  Written by Ben Buxton.
+  </_description>
+</screensaver>
diff --git a/hacks/config/compass.xml b/hacks/config/compass.xml
new file mode 100644 (file)
index 0000000..9a7c0d2
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="compass" _label="Compass">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <boolean id="db" _label="Double Buffer" arg-unset="-no-db"/>
+
+  <_description>
+This draws a compass, with all elements spinning about randomly, for
+that ``lost and nauseous'' feeling. Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/coral.xml b/hacks/config/coral.xml
new file mode 100644 (file)
index 0000000..31a330d
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="coral" _label="Coral">
+
+  <command arg="-root"/>
+
+  <number id="delay2" type="slider" arg="-delay2 %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="1" high="500000" default="1000"
+          convert="invert"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <number id="density" type="slider" arg="-density %"
+          _label="Density" _low-label="Sparse" _high-label="Dense"
+          low="1" high="90" default="25"
+          convert="invert"/>
+
+  <number id="seeds" type="slider" arg="-seeds %"
+          _label="Seeds" _low-label="Few" _high-label="Many"
+          low="1" high="100" default="25"/>
+
+  <_description>
+Simulates coral growth, albeit somewhat slowly.  This image doesn't
+really do it justice.  Written by Frederick Roeber.
+  </_description>
+</screensaver>
diff --git a/hacks/config/cosmos.xml b/hacks/config/cosmos.xml
new file mode 100644 (file)
index 0000000..e70dd32
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<screensaver name="cosmos" _label="Cosmos">
+
+  <fullcommand arg="-root"/>
+
+  <_description>
+Draws fireworks and zooming, fading flares.  By Tom Campbell. 
+You can find it at &lt;http://www.mindspring.com/~campbell/cosmos/&gt;
+  </_description>
+</screensaver>
\ No newline at end of file
diff --git a/hacks/config/critical.xml b/hacks/config/critical.xml
new file mode 100644 (file)
index 0000000..0b4ef39
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="critical" _label="Critical">
+
+  <command arg="-root"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="2" high="255" default="64"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <!-- #### -restart [8] -->
+  <!-- #### -cellsize [?] -->
+  <!-- #### -batchcount [1500] -->
+  <!-- #### -trail [50] -->
+
+  <_description>
+Draws a system of self-organizing lines.  It starts out as random
+squiggles, but after a few iterations, order begins to appear.
+Written by Martin Pool.
+  </_description>
+</screensaver>
diff --git a/hacks/config/crystal.xml b/hacks/config/crystal.xml
new file mode 100644 (file)
index 0000000..1bc1fe9
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="crystal" _label="Crystal">
+
+  <command arg="-root"/>
+
+  <!-- #### -maxsize -->
+  <!-- #### -shift (color cycling) -->
+
+  <boolean id="grid" _label="Draw Grid" arg-set="-grid"/>
+
+  <boolean id="cells" _label="Draw Cell" arg-unset="-no-cell"/>
+
+  <boolean id="centre" _label="Center on Screen" arg-set="-centre"/>
+
+  <number id="nx" type="spinbutton" arg="-nx %"
+          _label="Horizontal Symmetries" low="-10" high="10" default="-3"/>
+
+  <number id="ny" type="spinbutton" arg="-ny %"
+          _label="Vertical Symmetries" low="-10" high="10" default="-2"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="-5000" high="5000" default="-500"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="60000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <_description>
+Moving polygons, similar to a kaleidescope (more like a kaleidescope
+than the hack called `kaleid,' actually.) This one by Jouk Jansen.
+  </_description>
+</screensaver>
diff --git a/hacks/config/cynosure.xml b/hacks/config/cynosure.xml
new file mode 100644 (file)
index 0000000..19560e7
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="cynosure" _label="Cynosure">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="800000" default="500000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="128"/>
+
+  <number id="iterations" type="slider" arg="-iterations %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="2" high="200" default="100"/>
+
+
+  <_description>
+A hack similar to `greynetic', but less frenetic.  The first
+implementation was by Stephen Linhart; then Ozymandias G. Desiderata
+wrote a Java applet clone.  That clone was discovered by Jamie
+Zawinski, and ported to C for inclusion here.
+  </_description>
+</screensaver>
diff --git a/hacks/config/dangerball.xml b/hacks/config/dangerball.xml
new file mode 100644 (file)
index 0000000..e07ff23
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="dangerball" _label="DangerBall">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="30000"
+          convert="invert"/>
+
+  <number id="spikespeed" type="slider" arg="-speed %"
+          _label="Spike Growth" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="0.25" default="0.05"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Spike Count" low="1" high="200" default="30"/>
+
+  <hgroup>
+   <boolean id="wander" _label="Wander"    arg-unset="-no-wander"/>
+   <boolean id="spin"   _label="Spin"      arg-unset="-no-spin"/>
+   <boolean id="wire"   _label="Wireframe" arg-set="-wireframe"/>
+  </hgroup>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws a ball that periodically extrudes many random spikes.  Ouch!
+Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/decayscreen.xml b/hacks/config/decayscreen.xml
new file mode 100644 (file)
index 0000000..2a9afe7
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="decayscreen" _label="DecayScreen">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <select id="mode">
+    <option id="random" _label="Random Melt Style"/>
+    <option id="random" _label="Shuffle Melt" arg-set="-mode shuffle"/>
+    <option id="random" _label="Melt Up"    arg-set="-mode up"/>
+    <option id="random" _label="Melt Down"  arg-set="-mode down"/>
+    <option id="random" _label="Melt Left"  arg-set="-mode left"/>
+    <option id="random" _label="Melt Right" arg-set="-mode right"/>
+    <option id="random" _label="Melt Up, Left"    arg-set="-mode upleft"/>
+    <option id="random" _label="Melt Up, Right"   arg-set="-mode upright"/>
+    <option id="random" _label="Melt Down, Left"  arg-set="-mode downleft"/>
+    <option id="random" _label="Melt Down, Right" arg-set="-mode downright"/>
+    <option id="random" _label="Melt Towards Center" arg-set="-mode in"/>
+    <option id="random" _label="Melt Away From Center" arg-set="-mode out"/>
+    <option id="random" _label="Melty Melt" arg-set="-mode melt"/>
+    <option id="random" _label="Stretchy Melt" arg-set="-mode stretch"/>
+    <option id="random" _label="Fuzzy Melt" arg-set="-mode fuzz"/>
+  </select>
+
+  <_description>
+This takes an image and makes it melt.  You've no doubt seen this
+effect before, but no screensaver would really be complete without it.
+It works best if there's something colorful visible.  Warning, if the
+effect continues after the screen saver is off, seek medical attention.
+Written by David Wald and Vivek Khera.
+  </_description>
+</screensaver>
diff --git a/hacks/config/deco.xml b/hacks/config/deco.xml
new file mode 100644 (file)
index 0000000..b449539
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="deco" _label="Deco">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="maxdepth" type="spinbutton" arg="-max-depth %"
+            _label="Max Depth" low="1" high="40" default="12"/>
+
+  <hgroup>
+  <number id="minwidth" type="spinbutton" arg="-min-width %"
+            _label="Min Size" low="1" high="100" default="20"/>
+
+  <number id="minheight" type="spinbutton" arg="-min-height %"
+            _label="x" low="1" high="100" default="20"/>
+  </hgroup>
+
+  <!-- #### -cycle -->
+  <!-- #### -cycle-delay [1000000] -->
+
+  <_description>
+This one subdivides and colors rectangles randomly.  It looks kind of
+like Brady-Bunch-era rec-room wall paneling.  (Raven says: ``this
+screensaver is ugly enough to peel paint.'')  Written by Jamie
+Zawinski, inspired by Java code by Michael Bayne.
+  </_description>
+</screensaver>
diff --git a/hacks/config/deluxe.xml b/hacks/config/deluxe.xml
new file mode 100644 (file)
index 0000000..67f4cef
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="deluxe" _label="Deluxe">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="5000"
+          convert="invert"/>
+
+  <number id="thickness" type="slider" arg="-thickness %"
+          _label="Lines" _low-label="Thin" _high-label="Thick"
+          low="1" high="150" default="50"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="1" high="20" default="5"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="20"/>
+
+  <!-- #### -speed [15] -->
+
+  <boolean id="transparent" _label="Transparency" arg-set="-transparent"/>
+
+  <boolean id="db" _label="Double Buffer" arg-unset="-no-db"/>
+
+  <_description>
+This draws a pulsing sequence of stars, circles, and lines.  It would
+look better if it was faster, but as far as I can tell, there is no
+way to make this be both: fast, and flicker-free.  Yet another reason
+X sucks.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/demon.xml b/hacks/config/demon.xml
new file mode 100644 (file)
index 0000000..93c0150
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="demon" _label="Demon">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="States" low="0" high="20" default="0"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="1000"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="100000" default="50000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Cell Size" low="-20" high="20" default="-7"/>
+
+  <_description>
+A cellular automaton that starts with a random field, and organizes
+it into stripes and spirals.  Written by David Bagley.
+  </_description>
+</screensaver>
diff --git a/hacks/config/discrete.xml b/hacks/config/discrete.xml
new file mode 100644 (file)
index 0000000..9af1865
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="discrete" _label="Discrete">
+
+  <command arg="-root"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="100" high="10000" default="2500"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="1000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <_description>
+More ``discrete map'' systems, including new variants of Hopalong and
+Julia, and a few others.  Written by Tim Auckland.
+  </_description>
+</screensaver>
diff --git a/hacks/config/distort.xml b/hacks/config/distort.xml
new file mode 100644 (file)
index 0000000..e4e96ce
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="distort" _label="Distort">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="200000" default="1000"
+          convert="invert"/>
+
+  <!-- #### -speed [0] -->
+  <!-- #### -slow -->
+
+  <number id="radius" type="slider" arg="-radius %"
+          _label="Lens Size" _low-label="Small" _high-label="Large"
+          low="0" high="1000" default="0"/>
+
+  <number id="count" type="spinbutton" arg="-number %"
+          _label="Lens Count" low="0" high="10" default="0"/>
+
+  <select id="effect">
+   <option id="normal" _label="Normal"/>
+   <option id="swamp"  _label="Swamp Thing" arg-set="-swamp"/>
+   <option id="bounce" _label="Bounce"      arg-set="-bounce"/>
+  </select>
+
+  <hgroup>
+   <vgroup>
+    <boolean id="reflect" _label="Reflect"      arg-set="-reflect"/>
+    <boolean id="magnify" _label="Magnify"      arg-set="-magnify"/>
+   </vgroup>
+   <vgroup>
+    <boolean id="blackhole" _label="Black Hole" arg-set="-blackhole"/>
+    <boolean id="vortex" _label="Vortex"        arg-set="-vortex"/>
+   </vgroup>
+  </hgroup>
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+This hack grabs an image of the screen, and then lets a transparent
+lens wander around the screen, magnifying whatever is underneath.
+Written by Jonas Munsin.
+  </_description>
+</screensaver>
diff --git a/hacks/config/drift.xml b/hacks/config/drift.xml
new file mode 100644 (file)
index 0000000..038dc63
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="drift" _label="Drift">
+
+  <command arg="-root"/>
+
+  <number id="count" type="slider" arg="-count %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="1" high="200" default="30"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <select id="mode">
+    <option id="normal" _label="High Dimensional Sphere"/>
+    <option id="liss"   _label="Lissojous Figures" arg-set="-liss"/>
+    <option id="grow"   _label="Fractal Growth" arg-set="-grow"/>
+  </select>
+
+  <_description>
+How could one possibly describe this except as ``drifting recursive
+fractal cosmic flames?''  Another fine hack from the Scott Draves
+collection of fine hacks.
+  </_description>
+</screensaver>
diff --git a/hacks/config/electricsheep.xml b/hacks/config/electricsheep.xml
new file mode 100644 (file)
index 0000000..00372fd
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="electricsheep" _label="ElectricSheep">
+
+  <_description>
+
+ElectricSheep is an xscreensaver module that displays mpeg video of an
+animated fractal flame.  In the background, it contributes render
+cycles to the next animation.  Periodically it uploades completed
+frames to the server, where they are compressed for distribution to all
+clients.
+
+This program is recommended only if you have a high bandwidth
+connection to the Internet.
+
+By Scott Draves.  You can find it at &lt;http://www.electricsheep.org/&gt;.
+See that web site for configuration information.
+  </_description>
+</screensaver>
diff --git a/hacks/config/engine.xml b/hacks/config/engine.xml
new file mode 100644 (file)
index 0000000..8ad4abd
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="engine" _label="Engine">
+
+  <command arg="-root"/>
+
+  <!-- #### -rotate-speed [1] -->
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <boolean id="wander" _label="Wander" arg-unset="-no-move"/>
+
+  <boolean id="spin" _label="Spin" arg-unset="-no-spin"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws a simple four-stroke engine that floats around the screen.
+Written by Ben Buxton.
+  </_description>
+</screensaver>
diff --git a/hacks/config/epicycle.xml b/hacks/config/epicycle.xml
new file mode 100644 (file)
index 0000000..389c712
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="epicycle" _label="Epicycle">
+
+  <command arg="-root"/>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="200000" default="1000"
+          convert="invert"/>
+
+  <number id="holdtime" type="slider" arg="-holdtime %"
+          _label="Duration" _low-label="1 second" _high-label="1 minute"
+          low="1" high="60" default="2"/>
+
+  <number id="linewidth" type="spinbutton" arg="-linewidth %"
+          _label="Line Thickness" low="1" high="50" default="4"/>
+
+  <number id="harmonics" type="spinbutton" arg="-harmonics %"
+          _label="Harmonics" low="1" high="20" default="8"/>
+
+  <!-- #### -color0 [red] -->
+  <!-- #### -colours [100] -->
+  <!-- #### -foreground [white] -->
+  <!-- #### -min_circles [2] -->
+  <!-- #### -max_circles [10] -->
+  <!-- #### -min_speed [0.003] -->
+  <!-- #### -max_speed [0.005] -->
+  <!-- #### -timestep [1.0] -->
+  <!-- #### -divisor_poisson [0.4] -->
+  <!-- #### -size_factor_min [1.05] -->
+  <!-- #### -size_factor_max [2.05] -->
+
+  <_description>
+This program draws the path traced out by a point on the edge of a
+circle.  That circle rotates around a point on the rim of another
+circle, and so on, several times. These were the basis for the
+pre-heliocentric model of planetary motion.  Written by James
+Youngman.
+  </_description>
+</screensaver>
diff --git a/hacks/config/extrusion.xml b/hacks/config/extrusion.xml
new file mode 100644 (file)
index 0000000..a09ee74
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="extrusion" _label="Extrusion">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <select id="mode">
+    <option id="random"  _label="Random Object"/>
+    <option id="helix2" _label="Helix 2" arg-set="-name helix2"/>
+    <option id="helix3" _label="Helix 3" arg-set="-name helix3"/>
+    <option id="helix4" _label="Helix 4" arg-set="-name helix4"/>
+    <option id="joinoffset" _label="Join Offset" arg-set="-name joinoffset"/>
+    <option id="screw" _label="Screw" arg-set="-name screw"/>
+    <option id="taper" _label="Taper" arg-set="-name taper"/>
+    <option id="twist" _label="Twistoid" arg-set="-name twistoid"/>
+  </select>
+
+  <select id="render">
+    <option id="flat"  _label="Use Flat Coloring" arg-set="-no-light"/>
+    <option id="light" _label="Use Lighting"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wire"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <!-- #### -texture -->
+  <!-- #### -texture_quality -->
+  <!-- #### -mipmap -->
+
+  <file id="bitmap" _label="Texture Image" arg="-bitmap %"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws various rotating extruded shapes that twist around, lengthen,
+and turn inside out.  Created by David Konerding from the samples
+that come with the GL Extrusion library by Linas Vepstas.
+  </_description>
+</screensaver>
diff --git a/hacks/config/fadeplot.xml b/hacks/config/fadeplot.xml
new file mode 100644 (file)
index 0000000..def36c7
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fadeplot" _label="FadePlot">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="10"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="1500"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="30000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Draws what looks like a waving ribbon following a sinusoidal path.
+Written by Bas van Gaalen and Charles Vidal.
+  </_description>
+</screensaver>
diff --git a/hacks/config/flag.xml b/hacks/config/flag.xml
new file mode 100644 (file)
index 0000000..d06af92
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flag" _label="Flag">
+
+  <command arg="-root"/>
+
+  <string id="text" _label="Text for Flag" arg="-text %"/>
+
+  <file id="bitmap" _label="Bitmap for Flag" arg="-bitmap %"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="60000" default="50000"
+          convert="invert"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="1000"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <!-- #### -size [-7] -->
+
+  <_description>
+This draws a waving colored flag, that undulates its way around the
+screen.  The trick is the flag can contain arbitrary text and images.
+By default, it displays either the current system name and OS
+type, or a picture of ``Bob,'' but you can replace the text or the
+image with a command-line option.  Written by Charles Vidal and Jamie
+Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/flame.xml b/hacks/config/flame.xml
new file mode 100644 (file)
index 0000000..85c0e80
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flame" _label="Flame">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="delay2" type="slider" arg="-delay2 %"
+          _label="Duration" _low-label="0 Seconds" _high-label="10 Seconds"
+          low="1000" high="10000000" default="2000000"/>
+
+  <number id="iterations" type="slider" arg="-iterations %"
+          _label="Number of Fractals" _low-label="Few" _high-label="Many"
+          low="1" high="250" default="25"/>
+
+  <number id="points" type="slider" arg="-points %"
+          _label="Complexity" _low-label="Few" _high-label="High"
+          low="100" high="80000" default="10000"/>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Another iterative fractal generator.  Written by Scott Draves.
+  </_description>
+</screensaver>
diff --git a/hacks/config/flipscreen3d.xml b/hacks/config/flipscreen3d.xml
new file mode 100644 (file)
index 0000000..b8a1d33
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flipscreen3d" _label="Flipscreen3d">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+
+  </_description>
+</screensaver>
diff --git a/hacks/config/flow.xml b/hacks/config/flow.xml
new file mode 100644 (file)
index 0000000..9cbde82
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flow" _label="Flow">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="1000" default="500"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="3000"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="1000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <boolean id="rotate" _label="Rotate Around Attractor" arg-unset="-rotate false"/>
+  <boolean id="ride"   _label="Ride a Trained Bee" arg-unset="-ride false"/>
+  <boolean id="zoom"   _label="Zoom In and Out" arg-unset="-zoom false"/>
+  <boolean id="box"    _label="Show Bounding Box"  arg-unset="-box false"/>
+  <boolean id="freeze" _label="Freeze Some Bees" arg-unset="-freeze false"/>
+  <boolean id="allow2d" _label="Allow 2D Attractors" arg-unset="-allow2d false"/>
+  <boolean id="slow"   _label="Slow Bees with Antifreeze" arg-unset="-slow false"/>
+
+  <!-- #### -slow [True] -->
+
+
+  <_description>
+Another series of strange attractors: a flowing series of points,
+making strange rotational shapes.  Written by Jeff Butterworth.
+  </_description>
+</screensaver>
diff --git a/hacks/config/forest.xml b/hacks/config/forest.xml
new file mode 100644 (file)
index 0000000..3fb05d8
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="forest" _label="Forest">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="800000" default="500000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="20"/>
+
+  <_description>
+This draws fractal trees.  Written by Peter Baumung.  Everybody loves
+fractals, right?
+  </_description>
+</screensaver>
diff --git a/hacks/config/galaxy.xml b/hacks/config/galaxy.xml
new file mode 100644 (file)
index 0000000..80b3564
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="galaxy" _label="Galaxy">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="-20" high="20" default="-5"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Duration" _low-label="Short" _high-label="Long"
+          low="10" high="1000" default="250"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="100"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-20" high="20" default="-3"/>
+
+  <_description>
+This draws spinning galaxies, which then collide and scatter their
+stars to the, uh, four winds or something.  Originally an Amiga
+program by Uli Siegmund.
+  </_description>
+</screensaver>
diff --git a/hacks/config/gears.xml b/hacks/config/gears.xml
new file mode 100644 (file)
index 0000000..83b6a2a
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gears" _label="Gears">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="1"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Rotational Speed" _low-label="Slow" _high-label="Fast"
+          low="1" high="30" default="2"/>
+
+  <select id="style">
+   <option id="three"     _label="Three Gear System"/>
+   <option id="planetary" _label="Planetary Gear System" arg-set="-planetary"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+This draws sets of turning, interlocking gears, rotating in three
+dimensions.  Another GL hack, by Danny Sung, Brian Paul, Ed Mackey,
+and Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/gflux.xml b/hacks/config/gflux.xml
new file mode 100644 (file)
index 0000000..df1ef8d
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gflux" _label="GFlux">
+
+  <command arg="-root"/>
+
+  <select id="mode">
+   <option id="wire"    _label="Wire Mesh"           arg-set="-mode wire"/>
+   <option id="solid"   _label="Flat Lighting"       arg-set="-mode solid"/>
+   <option id="light"   _label="Directional Lighting"/>
+   <option id="checker" _label="Checkerboard"        arg-set="-mode checker"/>
+   <option id="grab"    _label="Screen Image"        arg-set="-mode grab"/>
+  </select>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="20000"
+          convert="invert"/>
+
+  <number id="wave" type="slider" arg="-speed %"
+          _label="Wave Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="0.50" default="0.05"
+          convert="invert"/>
+
+  <number id="squares" type="slider" arg="-squares %"
+           _label="Mesh Density" _low-label="Sparse" _high-label="Dense"
+          low="2" high="40" default="19"/>
+
+  <number id="waves" type="spinbutton" arg="-waves %"
+          _label="Waves" low="1" high="10" default="3"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <!-- #### -resolution [4] -->
+  <!-- #### -flat [0] -->
+  <!-- #### -rotationx [0.01] -->
+  <!-- #### -rotationy [0.0] -->
+  <!-- #### -rotationz [0.1] -->
+  <!-- #### -waveChange [50] -->
+  <!-- #### -waveHeight [1.0] -->
+  <!-- #### -waveFreq [3.0] -->
+  <!-- #### -zoom [1.0] -->
+
+  <_description>
+Draws a rippling waves on a rotating wireframe grid, using GL.
+Written by Josiah Pease.
+  </_description>
+</screensaver>
diff --git a/hacks/config/glplanet.xml b/hacks/config/glplanet.xml
new file mode 100644 (file)
index 0000000..42a75f2
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="glplanet" _label="GLPlanet">
+
+  <command arg="-root"/>
+
+  <!-- #### -no-rotate -->
+  <!-- #### -no-roll -->
+  <!-- #### -no-bounce -->
+  <!-- #### -no-texture -->
+  <!-- #### -no-stars -->
+
+  <select id="render">
+    <option id="flat"  _label="Use Flat Coloring" arg-set="-no-light"/>
+    <option id="light" _label="Use Lighting"/>
+  </select>
+
+  <file id="bitmap" _label="Image File" arg="-bitmap %"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="15000"
+          convert="invert"/>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws a planet bouncing around in space.  Written by David Konerding.
+The built-in image is a map of the earth (extracted from `xearth'),
+but you can wrap any texture around the sphere, e.g., the planetary
+textures that come with `ssystem'.
+  </_description>
+</screensaver>
diff --git a/hacks/config/gltext.xml b/hacks/config/gltext.xml
new file mode 100644 (file)
index 0000000..de0c973
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gltext" _label="GLText">
+
+  <command arg="-root"/>
+
+  <string id="text" _label="Text" arg="-text %"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+
+  <select id="rotation">
+    <option id="no"  _label="Don't Rotate" arg-set="-no-spin"/>
+    <option id="x"   _label="Rotate around X axis" arg-set="-spin X"/>
+    <option id="y"   _label="Rotate around Y axis" arg-set="-spin Y"/>
+    <option id="z"   _label="Rotate around Z axis" arg-set="-spin Z"/>
+    <option id="xy"  _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+    <option id="xz"  _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+    <option id="yz"  _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+    <option id="xyz" _label="Rotate around all three axes"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Displays a few lines of text spinning around in a solid 3D font.
+Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/goban.xml b/hacks/config/goban.xml
new file mode 100644 (file)
index 0000000..c43279b
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="goban" _label="Goban">
+
+  <command arg="-root"/>
+
+  <!-- #### write me -->
+
+  <_description>
+
+Replays historical games of go (aka wei-chi and baduk) on the screen.
+By Scott Draves.  You can find it at &lt;http://www.draves.org/goban/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/goop.xml b/hacks/config/goop.xml
new file mode 100644 (file)
index 0000000..2af7c0a
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="goop" _label="Goop">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="12000"
+          convert="invert"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Blob Count" low="0" high="100" default="12"/>
+
+  <select id="mode">
+    <option id="transparent" _label="Transparent Blobs"/>
+    <option id="opaque"      _label="Opaque Blobs" arg-set="-non-transparent"/>
+    <option id="xor"         _label="XOR Blobs" arg-set="-xor"/>
+  </select>
+
+  <select id="color-mode">
+    <option id="additive" _label="Additive Colors (reflected light)"/>
+    <option id="subtractive" _label="Subtractive Colors (transmitted light)"
+            arg-set="-subtractive"/>
+  </select>
+
+  <number id="torque" type="slider" arg="-torque %"
+          _label="Rotational Speed" _low-label="Slow" _high-label="Fast"
+          low="0.0002" high="0.0500" default="0.0075"/>
+
+  <number id="elasticity" type="slider" arg="-elasticity %"
+          _label="Elasticity" _low-label="Low" _high-label="High"
+          low="0.1" high="5.0" default="1.8"/>
+
+  <number id="maxv" type="slider" arg="-max-velocity %"
+          _label="Speed Limit" _low-label="Slow" _high-label="Fast"
+          low="0.1" high="3.0" default="1.2"/>
+
+  <_description>
+This draws set of animating, transparent, amoeba-like blobs.  The
+blobs change shape as they wander around the screen, and they are
+translucent, so you can see the lower blobs through the higher ones,
+and when one passes over another, their colors merge.  Written by
+Jamie Zawinski.  I got the idea for this from a cool mouse pad I
+have, which achieves the same kind of effect in real life by having
+several layers plastic with colored oil between them.  Written by
+Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/grav.xml b/hacks/config/grav.xml
new file mode 100644 (file)
index 0000000..860fe39
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="grav" _label="Grav">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="12"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <boolean id="decay" _label="Orbital Decay" arg-set="-decay"/>
+  <boolean id="decay" _label="Object Trails" arg-set="-trail"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+This program draws a simple orbital simulation.  If you turn on
+trails, it looks kind of like a cloud-chamber photograph.  Written
+by Greg Bowering.
+  </_description>
+</screensaver>
diff --git a/hacks/config/greynetic.xml b/hacks/config/greynetic.xml
new file mode 100644 (file)
index 0000000..dd01785
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="greynetic" _label="Greynetic">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="250000" default="0"
+          convert="invert"/>
+
+  <_description>
+This draws random colored and stippled rectangles.  Written by Jamie
+Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/halo.xml b/hacks/config/halo.xml
new file mode 100644 (file)
index 0000000..0684637
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="halo" _label="Halo">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Number of Circles" low="0" high="20" default="0"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="120000" default="100000"
+          convert="invert"/>
+
+  <boolean id="animate" _label="Animate Circles" arg-set="-animate"/>
+
+  <select id="mode">
+    <option id="random"   _label="Random Mode"/>
+    <option id="seuss"    _label="Seuss Mode" arg-set="-mode seuss"/>
+    <option id="gradient" _label="Seuss Mode" arg-set="-mode gradient"/>
+  </select>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <!-- #### -cycle-delay [100000] -->
+  <!-- #### -no-cycle -->
+
+  <_description>
+This draws trippy psychedelic circular patterns that hurt to look at.
+It can also animate the control-points, but that takes a lot of CPU
+and bandwidth.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/helix.xml b/hacks/config/helix.xml
new file mode 100644 (file)
index 0000000..07870e4
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="helix" _label="Helix">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <_description>
+This repeatedly generates spirally string-art-ish patterns.  Written
+by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/hopalong.xml b/hacks/config/hopalong.xml
new file mode 100644 (file)
index 0000000..3674e0f
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hopalong" _label="Hopalong">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Duration" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="2500"/>
+
+  <number id="count" type="slider" arg="-count %"
+          _label="Color Contrast" _low-label="Low" _high-label="High"
+          low="100" high="10000" default="1000"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <hgroup>
+    <vgroup>
+      <boolean id="sine"    _label="Sine"    arg-set="-sine"/>
+      <boolean id="martin"  _label="Martin"  arg-set="-martin"/>
+      <boolean id="popcorn" _label="Popcorn" arg-set="-popcorn"/>
+      <boolean id="jong"    _label="Jong"    arg-set="-jong"/>
+    </vgroup>
+    <vgroup>
+      <boolean id="rr"      _label="RR"      arg-set="-rr"/>
+      <boolean id="ejk1"    _label="EJK1"    arg-set="-ejk1"/>
+      <boolean id="ejk2"    _label="EJK2"    arg-set="-ejk2"/>
+      <boolean id="ejk3"    _label="EJK3"    arg-set="-ejk3"/>
+    </vgroup>
+    <vgroup>
+      <boolean id="ejk4"    _label="EJK4"    arg-set="-ejk4"/>
+      <boolean id="ejk5"    _label="EJK5"    arg-set="-ejk5"/>
+      <boolean id="ejk6"    _label="EJK6"    arg-set="-ejk6"/>
+    </vgroup>
+  </hgroup>
+
+  <_description>
+This draws lacy fractal patterns, based on iteration in the imaginary
+plane, from a 1986 Scientific American article.  Mostly written by
+Patrick Naughton.
+  </_description>
+</screensaver>
diff --git a/hacks/config/hyperball.xml b/hacks/config/hyperball.xml
new file mode 100644 (file)
index 0000000..de2bf6b
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hyperball" _label="Hyperball">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <number id="z" type="slider" arg="-observer-z %"
+          _label="Zoom" _low-label="Near" _high-label="Far"
+          low="1.125" high="10.0" default="3.0"/>
+
+  <hgroup>
+    <vgroup>
+      <number id="xw" type="slider" arg="-xw %"
+              _label="XW Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="0"/>
+      <number id="xy" type="slider" arg="-xy %"
+              _label="XY Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="3"/>
+      <number id="xz" type="slider" arg="-xz %"
+              _label="XZ Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="5"/>
+    </vgroup>
+    <vgroup>
+      <number id="yw" type="slider" arg="-yw %"
+              _label="YW Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="10"/>
+      <number id="yz" type="slider" arg="-yz %"
+              _label="YZ Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="0"/>
+      <number id="zw" type="slider" arg="-zw %"
+              _label="ZW Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="0"/>
+    </vgroup>
+  </hgroup>
+
+  <_description>
+Hyperball is to hypercube as dodecahedron is to cube: this displays
+a 2D projection of the sequence of 3D objects which are the projections
+of the 4D analog to the dodecahedron.  Written by Joe Keane.
+  </_description>
+</screensaver>
diff --git a/hacks/config/hypercube.xml b/hacks/config/hypercube.xml
new file mode 100644 (file)
index 0000000..c9c19de
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hypercube" _label="Hypercube">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="z" type="slider" arg="-observer-z %"
+          _label="Zoom" _low-label="Near" _high-label="Far"
+          low="1.125" high="10.0" default="3.0"/>
+
+  <hgroup>
+    <vgroup>
+      <number id="xw" type="slider" arg="-xw %"
+              _label="XW Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="0"/>
+      <number id="xy" type="slider" arg="-xy %"
+              _label="XY Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="3"/>
+      <number id="xz" type="slider" arg="-xz %"
+              _label="XZ Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="5"/>
+    </vgroup>
+    <vgroup>
+      <number id="yw" type="slider" arg="-yw %"
+              _label="YW Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="10"/>
+      <number id="yz" type="slider" arg="-yz %"
+              _label="YZ Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="0"/>
+      <number id="zw" type="slider" arg="-zw %"
+              _label="ZW Rotation" _low-label="Low" _high-label="High"
+              low="0" high="20" value="0"/>
+    </vgroup>
+  </hgroup>
+
+  <!-- #### -color0 [magenta] -->
+  <!-- #### -color1 [yellow] -->
+  <!-- #### -color2 [#FF9300] -->
+  <!-- #### -color3 [#FF0093] -->
+  <!-- #### -color4 [green] -->
+  <!-- #### -color5 [#8080FF] -->
+  <!-- #### -color6 [#00D0FF] -->
+  <!-- #### -color7 [#00FFD0] -->
+
+  <_description>
+This displays 2D projections of the sequence of 3D objects which are
+the projections of the 4D analog to the cube: as a square is composed
+of four lines, each touching two others; and a cube is composed of
+six squares, each touching four others; a hypercube is composed of
+eight cubes, each touching six others.  To make it easier to
+visualize the rotation, it uses a different color for the edges of
+each face.  Don't think about it too long, or your brain will melt.
+Written by Joe Keane, Fritz Mueller, and Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/ifs.xml b/hacks/config/ifs.xml
new file mode 100644 (file)
index 0000000..f0e71c8
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ifs" _label="IFS">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <_description>
+This one draws spinning, colliding iterated-function-system images.
+Written by Massimino Pascal.
+  </_description>
+</screensaver>
diff --git a/hacks/config/imsmap.xml b/hacks/config/imsmap.xml
new file mode 100644 (file)
index 0000000..f92f22b
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="imsmap" _label="IMSmap">
+
+  <command arg="-root"/>
+
+  <select id="mode">
+    <option id="random" _label="Random Mode"/>
+    <option id="h"      _label="Hue Gradients" arg-set="-mode h"/>
+    <option id="s"      _label="Saturation Gradients" arg-set="-mode s"/>
+    <option id="v"      _label="Brightness Gradients" arg-set="-mode v"/>
+  </select>
+
+  <number id="iterations" type="slider" arg="-iterations %"
+          _label="Density" _low-label="Sparse" _high-label="Dense"
+          low="1" high="7" default="7"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="10"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="50"/>
+
+  <_description>
+This generates random cloud-like patterns.  It looks quite different
+in monochrome and color.  The basic idea is to take four points on
+the edge of the image, and assign each a random ``elevation''.  Then
+find the point between them, and give it a value which is the average
+of the other four, plus some small random offset. Then coloration is
+done based on elevation.
+
+The color selection is done by binding the elevation to either hue,
+saturation, or brightness, and assigning random values to the others.
+The ``brightness'' mode tends to yield cloudlike patterns, and the
+others tend to generate images that look like heat-maps or CAT-scans.
+Written by Juergen Nickelsen and Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/interference.xml b/hacks/config/interference.xml
new file mode 100644 (file)
index 0000000..ec268c8
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="interference" _label="Interference">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Number of Waves" low="0" high="20" default="3"/>
+
+  <number id="gridsize" type="spinbutton" arg="-gridsize %"
+          _label="Magnification" low="1" high="20" default="4"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Anim Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="30000"
+          convert="invert"/>
+
+  <number id="wspeed" type="slider" arg="-speed %"
+            _label="Wave Speed" _low-label="Slow" _high-label="Fast"
+            low="1" high="100" default="30"/>
+
+  <number id="radius" type="slider" arg="-radius %"
+            _label="Wave Size" _low-label="Small" _high-label="Large"
+            low="50" high="1500" default="800"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="128"/>
+
+  <hgroup>
+  <number id="color_contrast" type="slider" arg="-color-shift %"
+          _label="Color Contrast" _low-label="Low" _high-label="High"
+           low="0" high="100" default="60"/>
+  </hgroup>
+
+  <!-- #### -gray -->
+
+  <boolean id="db" _label="Double Buffer" arg-unset="-no-db"/>
+
+  <_description>
+Another color-field hack, this one works by computing decaying
+sinusoidal waves, and allowing them to interfere with each other as
+their origins move.  Written by Hannu Mallat.
+  </_description>
+</screensaver>
diff --git a/hacks/config/jigsaw.xml b/hacks/config/jigsaw.xml
new file mode 100644 (file)
index 0000000..3e92af7
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="jigsaw" _label="Jigsaw">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="70000"
+          convert="invert"/>
+
+  <number id="delay2" type="slider" arg="-delay2 %"
+          _label="Solved Duration"
+          _low-label="0 Seconds" _high-label="1 Minute"
+          low="0" high="60" default="5"/>
+
+  <_description>
+This grabs a screen image, carves it up into a jigsaw puzzle,
+shuffles it, and then solves the puzzle.  This works especially well
+when you feed it an external video signal instead of letting it grab
+the screen image (actually, I guess this is generally true...)  When
+it is grabbing a video image, it is sometimes pretty hard to guess
+what the image is going to look like once the puzzle is solved.
+Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/julia.xml b/hacks/config/julia.xml
new file mode 100644 (file)
index 0000000..ebef623
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="julia" _label="Julia">
+
+  <command arg="-root"/>
+
+  <!-- #### -mouse -->
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20000" default="1000"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Iterations" _low-label="Small" _high-label="Large"
+          low="1" high="100" default="20"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <_description>
+This one draws spinning, animating (are you detecting a pattern here
+yet?)  explorations of the Julia set. You've probably seen static
+images of this fractal form before, but it's a lot of fun to watch in
+motion as well.  One interesting thing is that there is a small
+swinging dot passing in front of the image, which indicates the
+control point from which the rest of the image was generated.
+Written by Sean McCullough.
+  </_description>
+</screensaver>
diff --git a/hacks/config/kaleidescope.xml b/hacks/config/kaleidescope.xml
new file mode 100644 (file)
index 0000000..482a570
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="kaleidescope" _label="Kaleidescope">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <number id="nsegments" type="spinbutton" arg="-nsegments %"
+          _label="Segments" low="1" high="100" default="7"/>
+
+  <number id="symmetry" type="spinbutton" arg="-symmetry %"
+          _label="Symmetry" low="3" high="32" default="11"/>
+
+  <number id="ntrails" type="slider" arg="-ntrails %"
+          _label="Trails" _low-label="Few" _high-label="Many"
+          low="1" high="1000" default="100"
+          convert="invert"/>
+
+  <!-- #### -local_rotation [-59] -->
+  <!-- #### -global_rotation [1] -->
+  <!-- #### -spring_constant [5] -->
+
+  <_description>
+Another clone of an ancient meme, consisting largely of frenetic
+rotational motion of colored lines.  This one is by Ron Tapia.  The
+motion is nice, but I think it needs more solids, or perhaps just
+brighter colors.  More variations in the rotational speed might help,
+too.
+  </_description>
+</screensaver>
diff --git a/hacks/config/kumppa.xml b/hacks/config/kumppa.xml
new file mode 100644 (file)
index 0000000..3b7382b
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="kumppa" _label="Kumppa">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="density" type="slider" arg="-speed %"
+          _label="Density" _low-label="Low" _high-label="High"
+          low="0.0001" high="0.2" default="0.1"
+          convert="invert"/>
+
+  <boolean id="random" _label="Randomize" arg-unset="-random"/>
+  <boolean id="db" _label="Double Buffer" arg-unset="-dbuf"/>
+
+
+  <_description>
+Spiraling, spinning, and very, very fast splashes of color rush
+toward the screen.  Written by Teemu Suutari.
+  </_description>
+</screensaver>
diff --git a/hacks/config/lament.xml b/hacks/config/lament.xml
new file mode 100644 (file)
index 0000000..69ba062
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lament" _label="Lament">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <select id="render">
+    <option id="solid" _label="Normal"/>
+    <option id="solid" _label="Untextured" arg-set="-no-texture"/>
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Animates a simulation of Lemarchand's Box, repeatedly solving itself.
+Requires OpenGL, and a machine with fast hardware support for texture
+maps.  Warning: occasionally opens doors.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/laser.xml b/hacks/config/laser.xml
new file mode 100644 (file)
index 0000000..fb9327d
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="laser" _label="Laser">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="10"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Duration" _low-label="Short" _high-label="Long"
+          low="0" high="2000" default="200"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="60000" default="40000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Moving radiating lines, that look vaguely like scanning laser beams.
+Written by Pascal Pensa.  (Frankie say: relax.)
+  </_description>
+</screensaver>
diff --git a/hacks/config/lightning.xml b/hacks/config/lightning.xml
new file mode 100644 (file)
index 0000000..6c9b576
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lightning" _label="Lightning">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <_description>
+This one draws crackling fractal lightning bolts.  It's simple,
+direct, and to the point.  If only it had sound... Written by Keith
+Romberg.
+  </_description>
+</screensaver>
diff --git a/hacks/config/lisa.xml b/hacks/config/lisa.xml
new file mode 100644 (file)
index 0000000..47eaff4
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lisa" _label="Lisa">
+
+  <command arg="-root"/>
+
+  <!-- #### -no-additive -->
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="1"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Steps" _low-label="Few" _high-label="Many"
+          low="1" high="1000" default="256"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="25000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-10" high="10" default="-1"/>
+
+  <_description>
+This draws Lisajous loops, by Caleb Cullen.  Remember that device
+they had the Phantom Zone prisoners in during their trial in
+Superman?  I think that was one of these.
+  </_description>
+</screensaver>
diff --git a/hacks/config/lissie.xml b/hacks/config/lissie.xml
new file mode 100644 (file)
index 0000000..58c0349
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lissie" _label="Lissie">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="1"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="800000" default="2000"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-500" high="500" default="-200"/>
+
+  <_description>
+Another Lissajous figure.  This one draws the progress of circular
+shapes along a path.  Written by Alexander Jolk.
+  </_description>
+</screensaver>
diff --git a/hacks/config/lmorph.xml b/hacks/config/lmorph.xml
new file mode 100644 (file)
index 0000000..6acba87
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="lmorph" _label="LMorph">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+        _label="Speed" _low-label="Slow" _high-label="Fast"
+        low="0" high="90000" default="70000"
+        convert="invert"/>
+
+  <number id="points" type="spinbutton" arg="-points %"
+          _label="Control Points"
+          low="10" high="1000" default="200"/>
+
+  <number id="steps" type="slider" arg="-steps %"
+          _label="Interpolation Steps" _low-label="Less" _high-label="More"
+          low="100" high="500" default="150"/>
+
+  <number id="thickness" type="slider" arg="-thickness %"
+          _label="Lines" _low-label="Thin" _high-label="Thick"
+          low="1" high="50" default="5"/>
+
+  <select id="type">
+    <option id="random" _label="Open and Closed Figures"/>
+    <option id="open" _label="Open Figures" arg-set="-figtype open"/>
+    <option id="closed" _label="Closed Figures" arg-set="-figtype closed"/>
+  </select>
+
+  <_description>
+This generates random spline-ish line drawings and morphs between
+them.  Written by Sverre H.  Huseby and Glenn T.  Lines.
+  </_description>
+</screensaver>
diff --git a/hacks/config/loop.xml b/hacks/config/loop.xml
new file mode 100644 (file)
index 0000000..ba4d104
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="loop" _label="Loop">
+
+  <command arg="-root"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="8000" default="1600"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="150000" default="100000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="15"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-50" high="50" default="-12"/>
+
+  <_description>
+This one produces loop-shaped colonies that spawn, age, and
+eventually die.  Written by David Bagley.
+  </_description>
+</screensaver>
diff --git a/hacks/config/maze.xml b/hacks/config/maze.xml
new file mode 100644 (file)
index 0000000..78705fe
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="maze" _label="Maze">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-solve-delay %"
+          _label="Solve Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="10000" default="5000"
+          convert="invert"/>
+
+  <number id="pre-delay" type="slider" arg="-pre-delay %"
+          _label="Pre-Solve Delay"
+          _low-label="0 Seconds" _high-label="10 Seconds"
+          low="0" high="10000000" default="2000000"/>
+
+  <number id="post-delay" type="slider" arg="-post-delay %"
+          _label="Post-Solve Delay"
+          _low-label="0 Seconds" _high-label="10 Seconds"
+          low="0" high="10000000" default="4000000"/>
+
+  <number id="grid-size" type="spinbutton" arg="-grid-size %"
+          _label="Grid Size" low="0" high="100" default="0"/>
+
+  <select id="generator">
+    <option id="mrandom" _label="Random Generator"/>
+    <option id="m0"      _label="Backtracking Generator"
+                         arg-set="-generator 0"/>
+    <option id="m1"      _label="Seeding Generator"
+                         arg-set="-generator 1"/>
+    <option id="m2"      _label="Joining Generator"
+                         arg-set="-generator 2"/>
+  </select>
+
+  <select id="ignorance">
+    <option id="smart" _label="Head Toward Exit"/>
+    <option id="dumb"  _label="Ignorant of Exit Direction"
+            arg-set="-ignorant"/>
+  </select>
+
+  <!-- #### -max-length [5] -->
+  <!-- #### -bridge -->
+  <!-- #### -live-color [green] -->
+  <!-- #### -dead-color [red] -->
+  <!-- #### -skip-color [orange] -->
+  <!-- #### -surround-color [slateblue] -->
+
+  <_description>
+This is the ancient X maze demo, modified to work with xscreensaver.
+It generates a random maze, then solves it with visual feedback.
+Originally by Jim Randell; modified by a cast of thousands.
+  </_description>
+</screensaver>
diff --git a/hacks/config/menger.xml b/hacks/config/menger.xml
new file mode 100644 (file)
index 0000000..6b3984d
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="menger" _label="Menger">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="30000"
+          convert="invert"/>
+
+  <number id="descent" type="slider" arg="-speed %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="2" high="500" default="150"
+          convert="invert"/>
+
+  <number id="depth" type="spinbutton" arg="-depth %"
+          _label="Max Depth" low="1" high="6" default="3"/>
+
+  <!-- #### -no-optimize -->
+
+  <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
+
+  <select id="rotation">
+    <option id="no"  _label="Don't Rotate" arg-set="-no-spin"/>
+    <option id="x"   _label="Rotate around X axis" arg-set="-spin X"/>
+    <option id="y"   _label="Rotate around Y axis" arg-set="-spin Y"/>
+    <option id="z"   _label="Rotate around Z axis" arg-set="-spin Z"/>
+    <option id="xy"  _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+    <option id="xz"  _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+    <option id="yz"  _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+    <option id="xyz" _label="Rotate around all three axes"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+This draws the three-dimensional variant of the recursive Menger
+Gasket, a cube-based fractal object analagous to the Sierpinski
+Tetrahedron.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/moebius.xml b/hacks/config/moebius.xml
new file mode 100644 (file)
index 0000000..0eceb00
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moebius" _label="Moebius">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="20000"
+          convert="invert"/>
+
+  <hgroup>
+    <select id="strip">
+      <option id="solid" _label="Solid Floor" arg-set="-solidmoebius"/>
+      <option id="wire"  _label="Mesh Floor"/>
+    </select>
+
+    <select id="render">
+      <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+      <option id="solid" _label="Solid Objects"/>
+    </select>
+  </hgroup>
+
+  <boolean id="ants" _label="Draw Ants" arg-unset="-noants"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Another M. C. Escher hack by Marcelo Vianna, this one draws
+``Moebius Strip II,'' a GL image of ants walking along the surface of
+a moebius strip.
+  </_description>
+</screensaver>
diff --git a/hacks/config/moire.xml b/hacks/config/moire.xml
new file mode 100644 (file)
index 0000000..5421563
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moire" _label="Moire">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="offset" type="slider" arg="-offset %"
+            _label="Offset" _low-label="Small" _high-label="Large"
+            low="1" high="200" default="50"/>
+
+  <!-- #### -no-random -->
+
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+This one draws cool circular interference patterns.  Most of the
+circles you see aren't explicitly rendered, but show up as a result
+of interactions between the other pixels that were drawn.  Written by
+Jamie Zawinski, inspired by Java code by Michael Bayne.  As he
+pointed out, the beauty of this one is that the heart of the display
+algorithm can be expressed with just a pair of loops and a handful of
+arithmetic, giving it a high ``display hack metric''.
+  </_description>
+</screensaver>
diff --git a/hacks/config/moire2.xml b/hacks/config/moire2.xml
new file mode 100644 (file)
index 0000000..886d081
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="moire2" _label="Moire2">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="150"/>
+
+  <number id="thickness" type="spinbutton" arg="-thickness %"
+            _label="Thickness" low="0" high="100" default="0"/>
+
+  <_description>
+Another example of the fun you can have with moire
+interference patterns; this hack generates fields of concentric
+circles or ovals, and combines the planes with various operations.
+The planes are moving independently of one another, causing the
+interference lines to ``spray.''  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/molecule.xml b/hacks/config/molecule.xml
new file mode 100644 (file)
index 0000000..df9bb0f
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="molecule" _label="Molecule">
+
+  <command arg="-root"/>
+
+  <number id="timeout" type="slider" arg="-delay %"
+          _label="Duration" _low-label="5 seconds" _high-label="2 minutes"
+          low="5" high="120" default="20"/>
+
+  <hgroup>
+   <vgroup>
+    <boolean id="labels" _label="Label Atoms" arg-unset="-no-labels"/>
+    <boolean id="titles" _label="Describe Molecule" arg-unset="-no-titles"/>
+    <boolean id="bbox"   _label="Draw Bounding Box" arg-set="-bbox"/>
+   </vgroup>
+   <vgroup>
+    <boolean id="atoms"  _label="Draw Atoms" arg-unset="-no-atoms"/>
+    <boolean id="bonds"  _label="Draw Atomic Bonds" arg-unset="-no-bonds"/>
+    <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+   </vgroup>
+  </hgroup>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <boolean id="wander" _label="Wander" arg-set="-wander"/>
+
+  <select id="rotation">
+    <option id="no"  _label="Don't Rotate" arg-set="-no-spin"/>
+    <option id="x"   _label="Rotate around X axis" arg-set="-spin X"/>
+    <option id="y"   _label="Rotate around Y axis" arg-set="-spin Y"/>
+    <option id="z"   _label="Rotate around Z axis" arg-set="-spin Z"/>
+    <option id="xy"  _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+    <option id="xz"  _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+    <option id="yz"  _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+    <option id="xyz" _label="Rotate around all three axes"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <file id="molecule" _label="PDB File" arg="-molecule %"/>
+
+  <_description>
+Draws several different representations of molecules.  Some common
+molecules are built in, and it can also read PDB (Protein Data Base)
+files as input.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/morph3d.xml b/hacks/config/morph3d.xml
new file mode 100644 (file)
index 0000000..71607a9
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="morph3d" _label="Morph3D">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="0"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="40000"
+          convert="invert"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Another 3d shape-changing GL hack, by Marcelo Vianna.  It has the
+same shiny-plastic feel as Superquadrics, as many computer-generated
+objects do...
+  </_description>
+</screensaver>
diff --git a/hacks/config/mountain.xml b/hacks/config/mountain.xml
new file mode 100644 (file)
index 0000000..ee13d91
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="mountain" _label="Mountain">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="100" default="30"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="0"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Generates random 3d plots that look vaguely mountainous.  Written by
+Pascal Pensa.
+  </_description>
+</screensaver>
diff --git a/hacks/config/munch.xml b/hacks/config/munch.xml
new file mode 100644 (file)
index 0000000..8ca089f
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="munch" _label="Munch">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="5000"
+          convert="invert"/>
+
+  <number id="duration" type="slider" arg="-clear %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="1" high="200" default="50"/>
+
+  <select id="mode">
+    <option id="xor"   _label="XOR"/>
+    <option id="solid" _label="Solid" arg-set="-no-xor"/>
+  </select>
+
+  <!-- #### -no-shift -->
+  <!-- #### -hold [100000] -->
+  <!-- #### -logminwidth [7] -->
+
+  <_description>
+        DATAI 2
+        ADDB 1,2
+        ROTC 2,-22
+        XOR 1,2
+        JRST .-4
+
+As reported by HAKMEM, in 1962, Jackson Wright wrote the above PDP-1
+code. That code still lives on in this screenhack, some 35 years
+later.  The number of lines of enclosing code has increased
+substantially, however.  This version is by Tim Showalter.
+  </_description>
+</screensaver>
diff --git a/hacks/config/nerverot.xml b/hacks/config/nerverot.xml
new file mode 100644 (file)
index 0000000..489f657
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="nerverot" _label="NerveRot">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="iters" type="slider" arg="-max-iters %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="100" high="8000" default="1200"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Blot Count" low="0" high="1000" default="250"/>
+
+  <number id="linewidth" type="spinbutton" arg="-line-width %"
+          _label="Line Thickness" low="0" high="100" default="0"/>
+
+  <number id="event" type="slider" arg="-event-chance %"
+          _label="Changes" _low-label="Seldom" _high-label="Frequent"
+           low="0.0" high="1.0" default="0.2"/>
+
+  <number id="nervous" type="slider" arg="-nervousness %"
+          _label="Nervousness" _low-label="Calm" _high-label="Spastic"
+           low="0.0" high="1.0" default="0.3"/>
+
+  <number id="mnr" type="slider" arg="-max-nerve-radius %"
+          _label="Crunchiness" _low-label="Low" _high-label="High"
+           low="0.0" high="1.0" default="0.7"/>
+
+  <!-- #### -iter-amt [0.01] -->
+  <!-- #### -min-scale [0.6] -->
+  <!-- #### -max-scale [1.75] -->
+  <!-- #### -min-radius [3] -->
+  <!-- #### -max-radius [25] -->
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="4"/>
+
+  <boolean id="db" _label="Double Buffer" arg-unset="-db"/>
+
+  <_description>
+Draws different shapes composed of nervously vibrating squiggles,
+as if seen through a camera operated by a monkey on crack.
+By Dan Bornstein.
+  </_description>
+</screensaver>
diff --git a/hacks/config/noseguy.xml b/hacks/config/noseguy.xml
new file mode 100644 (file)
index 0000000..e5ac198
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="noseguy" _label="Noseguy">
+
+  <command arg="-root"/>
+
+  <select id="mode">
+    <option id="program" _label="Get Text from Program"/>
+    <option id="file"    _label="Get Text from File" arg-set="-mode file"/>
+    <option id="string"  _label="Use Text Below"     arg-set="-mode string"/>
+  </select>
+
+  <file   id="program" _label="Text Program" arg="-program %"/>
+  <file   id="file"    _label="Text File"    arg="-filename %"/>
+  <string id="string"  _label="Text"         arg="-text %"/>
+
+  <!-- #### -font [-*-new century schoolbook-*-r-*-*-*-180-*-*-*-*-*-*] -->
+  <!-- #### -text-foreground [?] -->
+  <!-- #### -text-background [?] -->
+
+  <_description>
+A little man with a big nose wanders around your screen saying
+things.  The things which he says can come from a file, or from an
+external program like `zippy' or `fortune'.  This was extracted from
+`xnlock' by Dan Heller.  Colorized by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/pedal.xml b/hacks/config/pedal.xml
new file mode 100644 (file)
index 0000000..0ab7692
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pedal" _label="Pedal">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <number id="lines" type="slider" arg="-maxlines %"
+          _label="Lines" _low-label="Few" _high-label="Many"
+          low="100" high="5000" default="1000"/>
+
+  <!-- #### -fadedelay [200000] -->
+  <!-- #### -foreground [white] -->
+  <!-- #### -background [black] -->
+
+  <_description>
+This is sort of a combination spirograph/string-art.  It generates a
+large, complex polygon, and lets the X server do the bulk of the work
+by giving it an even/odd winding rule.  Written by Dale Moore, based
+on some ancient PDP-11 code.
+  </_description>
+</screensaver>
diff --git a/hacks/config/penetrate.xml b/hacks/config/penetrate.xml
new file mode 100644 (file)
index 0000000..3132ce2
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="penetrate" _label="Penetrate">
+
+  <command arg="-root"/>
+
+  <number id="bgrowth" type="slider" arg="-bgrowth %"
+          _label="Explosions" _low-label="Slow" _high-label="Fast"
+          low="1" high="20" default="5"/>
+
+  <number id="lrate" type="slider" arg="-lrate %"
+          _label="Lasers" _low-label="Slow" _high-label="Fast"
+          low="10" high="200" default="80"
+          convert="invert"/>
+
+  <select id="mode">
+    <option id="dumb"  _label="Start badly, but learn"/>
+    <option id="smart" _label="Always play well" arg-set="-smart"/>
+  </select>
+
+  <_description>
+This hack simulates the classic arcade game Missile Command.  Written
+by Adam Miller.
+  </_description>
+</screensaver>
diff --git a/hacks/config/penrose.xml b/hacks/config/penrose.xml
new file mode 100644 (file)
index 0000000..51c23f9
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="penrose" _label="Penrose">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="speed" type="slider" arg="-redoDelay %"
+          _label="Duration" _low-label="1 Second" _high-label="30 Seconds"
+          low="1" high="30" default="3"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="0" high="100" default="40"/>
+
+  <boolean id="ammann" _label="Draw Ammann Lines" arg-set="-ammann"/>
+
+  <_description>
+Draws quasiperiodic tilings; think of the implications on modern
+formica technology.  Written by Timo Korvola.
+
+In April 1997, Sir Roger Penrose, a British math professor who has
+worked with Stephen Hawking on such topics as relativity, black
+holes, and whether time has a beginning, filed a
+copyright-infringement lawsuit against the Kimberly-Clark
+Corporation, which Penrose said copied a pattern he created (a
+pattern demonstrating that ``a nonrepeating pattern could exist in
+nature'') for its Kleenex quilted toilet paper.  Penrose said he
+doesn't like litigation but, ``When it comes to the population of
+Great Britain being invited by a multinational to wipe their bottoms
+on what appears to be the work of a Knight of the Realm, then a last
+stand must be taken.''
+
+As reported by News of the Weird #491, 4-jul-1997.
+  </_description>
+</screensaver>
diff --git a/hacks/config/petri.xml b/hacks/config/petri.xml
new file mode 100644 (file)
index 0000000..0a2af32
--- /dev/null
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="petri" _label="Petri">
+
+  <command arg="-root"/>
+
+  <vgroup>
+    <hgroup>
+      <number id="speed" type="slider" arg="-delay %"
+              _label="Speed" _low-label="Slow" _high-label="Fast"
+              low="0" high="20000" default="10000"
+              convert="invert"/>
+    </hgroup>
+  </vgroup>
+
+  <hgroup>
+    <number id="size" type="spinbutton" arg="-size %"
+             _label="Cell Size" low="0" high="100" default="4"/>
+
+    <number id="count" type="spinbutton" arg="-count %"
+            _label="Mold Varieties" low="0" high="20" default="8"/>
+  </hgroup>
+
+<hgroup>
+ <vgroup>
+
+  <number id="diaglim" type="slider" arg="-diaglim %"
+          _label="Colony Shape" _low-label="Square" _high-label="Diamond"
+          low="1.0" high="2.0" default="1.414"
+          convert="invert"/>
+
+  <number id="anychan" type="slider" arg="-anychan %"
+          _label="Fertility" _low-label="Low" _high-label="High"
+          low="0.0" high="0.25" default="0.0015"/>
+
+  <number id="anychan" type="slider" arg="-minorchan %"
+          _label="Offspring" _low-label="Few" _high-label="Many"
+          low="0.0" high="1.0" default="0.5"/>
+
+  <number id="instantdeathchan" type="slider" arg="-instantdeathchan %"
+          _label="Death Comes" _low-label="Slowly" _high-label="Quickly"
+          low="0.0" high="1.0" default="0.2"/>
+
+  <number id="minlifespeed" type="slider" arg="-minlifespeed %"
+          _label="Minium Rate of Growth" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="1.0" default="0.04"/>
+
+    </vgroup>
+    <vgroup>
+
+  <number id="maxlifespeed" type="slider" arg="-maxlifespeed %"
+          _label="Maxium Rate of Growth" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="1.0" default="0.13"/>
+
+  <number id="mindeathspeed" type="slider" arg="-mindeathspeed %"
+          _label="Minium Rate of Death" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="1.0" default="0.42"/>
+
+  <number id="maxdeathspeed" type="slider" arg="-maxdeathspeed %"
+          _label="Maxium Rate of Death" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="1.0" default="0.46"/>
+
+  <number id="minlifespan" type="slider" arg="-minlifespan %"
+          _label="Minium Lifespan" _low-label="Short" _high-label="Long"
+          low="0" high="3000" default="500"/>
+
+  <number id="maxlifespan" type="slider" arg="-maxlifespan %"
+          _label="Maxium Lifespan" _low-label="Short" _high-label="Long"
+          low="0" high="3000" default="1500"/>
+
+    </vgroup>
+  </hgroup>
+
+  <!-- #### -mem-throttle [22M] -->
+
+  <_description>
+This simulates colonies of mold growing in a petri dish.  Growing
+colored circles overlap and leave spiral interference in their wake.
+Written by Dan Bornstein.
+  </_description>
+</screensaver>
diff --git a/hacks/config/phosphor.xml b/hacks/config/phosphor.xml
new file mode 100644 (file)
index 0000000..2ac8044
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="phosphor" _label="Phosphor">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="scale" type="spinbutton" arg="-scale %"
+          _label="Scale" low="1" high="100" default="6"/>
+
+  <number id="fade" type="slider" arg="-ticks %"
+          _label="Fade" _low-label="Slow" _high-label="Fast"
+          low="1" high="100" default="20"
+          convert="invert"/>
+
+  <file id="program" _label="Text Program" arg="-program %"/>
+
+  <!-- #### -font [fixed] -->
+
+  <_description>
+Draws a simulation of an old terminal, with large pixels and
+long-sustain phosphor. It can run any program as a source of the text
+it displays.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/pipes.xml b/hacks/config/pipes.xml
new file mode 100644 (file)
index 0000000..c8c5662
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pipes" _label="Pipes">
+
+  <command arg="-root"/>
+
+  <select id="style">
+    <option id="curves" _label="Curved Pipes"   arg-set="-count 0"/>
+    <option id="balls"  _label="Ball Joints"    arg-set="-count 1"/>
+    <option id="fit"    _label="Pipe Fittings"/>
+  </select>
+
+  <vgroup>
+    <hgroup>
+      <number id="cycles" type="spinbutton" arg="-cycles %"
+               _label="Number of Pipe Systems" low="0" high="100" default="5"/>
+    </hgroup>
+    <hgroup>
+      <number id="size" type="spinbutton" arg="-size %"
+              _label="System Length" low="0" high="1000" default="500"/>
+    </hgroup>
+  </vgroup>
+
+  <!-- #### -factory [2] -->
+
+  <number id="factory" type="slider" arg="-factory %"
+          _label="Gadgetry" _low-label="None" _high-label="Lots"
+          low="0" high="10" default="2"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="10000" default="100"
+          convert="invert"/>
+
+  <boolean id="fisheye" _label="Fisheye Lens" arg-unset="-no-fisheye"/>
+
+  <boolean id="tight"   _label="Allow Tight Turns" arg-set="-tightturns"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <!-- #### -no-rotatepipes -->
+
+  <_description>
+If you've ever been in the same room with a Windows NT machine,
+you've probably seen this GL hack.  This version is by Marcelo
+Vianna.
+  </_description>
+</screensaver>
diff --git a/hacks/config/pulsar.xml b/hacks/config/pulsar.xml
new file mode 100644 (file)
index 0000000..0bb4777
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pulsar" _label="Pulsar">
+
+  <command arg="-root"/>
+
+  <hgroup>
+    <select id="render">
+      <option id="flat"  _label="Use Flat Coloring" arg-set="-no-light"/>
+      <option id="light" _label="Directional Lighting"/>
+    </select>
+
+    <select id="render">
+      <option id="wire"  _label="Wireframe" arg-set="-wire"/>
+      <option id="solid" _label="Solid Surface"/>
+    </select>
+  </hgroup>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="quads" type="slider" arg="-quads %"
+          _label="Quad Count" low="1" high="50" default="5"/>
+
+  <hgroup>
+   <vgroup>
+     <boolean id="light"     _label="Enable Lighting" arg-set="-light"/>
+     <boolean id="fog"       _label="Enable Fog" arg-set="-fog"/>
+     <boolean id="texture"   _label="Enable Texturing" arg-set="-texture"/>
+     <boolean id="mipmap" _label="Enable Texture Mipmaps" arg-set="-mipmap"/>
+   </vgroup>
+   <vgroup>
+     <boolean id="no-blend"  _label="Enable Blending" arg-set="-no-blend"/>
+     <boolean id="antialias" _label="Anti-alias Lines" arg-set="-antialias"/>
+     <boolean id="texture_quality" _label="Enable Texture Filtering"
+                              arg-set="-texture_quality"/>
+     <boolean id="do_depth" _label="Enable Depth Buffer" arg-set="-do_depth"/>
+   </vgroup>
+ </hgroup>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <file id="bitmap" _label="Texture PPM File" arg="-bitmap %"/>
+
+  <_description>
+Draws some intersecting planes, making use of alpha blending, fog,
+textures, and mipmaps, plus a ``frames per second'' meter so that you
+can tell how fast your graphics card is...  Requires OpenGL.  Written
+by David Konerding.
+  </_description>
+</screensaver>
diff --git a/hacks/config/pyro.xml b/hacks/config/pyro.xml
new file mode 100644 (file)
index 0000000..a811b9d
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="pyro" _label="Pyro">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="5000"
+          convert="invert"/>
+
+  <number id="count" type="slider" arg="-count %"
+          _label="Particle Density" _low-label="Sparse" _high-label="Dense"
+          low="10" high="2000" default="600"/>
+
+  <number id="launch" type="slider" arg="-frequency %"
+          _label="Launch Frequency" _low-label="Seldom" _high-label="Often"
+          low="1" high="100" default="30"
+          convert="invert"/>
+
+  <number id="scatter" type="slider" arg="-scatter %"
+          _label="Explosive Yield" _low-label="Low" _high-label="High"
+          low="1" high="400" default="100"/>
+
+  <_description>
+Pyro draws exploding fireworks.  Blah blah blah.  Written by Jamie
+Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/qix.xml b/hacks/config/qix.xml
new file mode 100644 (file)
index 0000000..b72311e
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="qix" _label="Qix">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="1"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="segments" type="slider" arg="-segments %"
+          _label="Segments" _low-label="Few" _high-label="Many"
+          low="10" high="500" default="50"
+          convert="invert"/>
+
+  <number id="spread" type="slider" arg="-spread %"
+          _label="Density" _low-label="Sparse" _high-label="Dense"
+          low="1" high="50" default="8"
+          convert="invert"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Max Size" low="0" high="1000" default="0"/>
+
+  <number id="poly" type="spinbutton" arg="-poly %"
+           _label="Corners" low="2" high="100" default="2"/>
+
+  <select id="motion">
+    <option id="linear" _label="Linear Motion" arg-set="-linear"/>
+    <option id="random" _label="Random Motion"/>
+  </select>
+
+  <hgroup>
+    <boolean id="transparent" _label="Transparent" arg-set="-transparent"/>
+
+    <select id="color-mode">
+      <option id="additive" _label="Additive Colors"/>
+      <option id="subtractive" _label="Subtractive Colors"
+              arg-set="-subtractive"/>
+    </select>
+  </hgroup>
+
+  <hgroup>
+  <number id="color_contrast" type="slider" arg="-color-shift %"
+          _label="Color Contrast" _low-label="Low" _high-label="High"
+           low="0" high="25" default="3"/>
+  </hgroup>
+
+  <select id="fill">
+    <option id="lines" _label="Line Segments"/>
+    <option id="solid" _label="Solid Objects" arg-set="-solid"/>
+  </select>
+
+  <hgroup>
+    <boolean id="xor" _label="XOR" arg-set="-xor"/>
+    <boolean id="gravity" _label="Gravity" arg-set="-gravity"/>
+  </hgroup>
+
+  <_description>
+This is the swiss army chainsaw of qix programs.  It bounces a series
+of line segments around the screen, and uses variations on this basic
+motion pattern to produce all sorts of different presentations: line
+segments, filled polygons, overlapping translucent areas...  Written
+by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/rd-bomb.xml b/hacks/config/rd-bomb.xml
new file mode 100644 (file)
index 0000000..dd06f55
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rd-bomb" _label="RD-Bomb">
+
+  <command arg="-root"/>
+
+  <number id="size" type="slider" arg="-size %"
+           _label="Fill Screen" _low-label="1%" _high-label="100%"
+           low="0.01" high="1.0" default="1.0"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="20.0" default="1.0"/>
+
+  <number id="speed" type="slider" arg="-speed %"
+           _label="Wander Speed" _low-label="Slow" _high-label="Fast"
+           low="0.0" high="10.0" default="0.0"/>
+
+  <hgroup>
+   <!-- #### defaults are wrong -->
+   <number id="width" type="spinbutton" arg="-width %"
+           _label="Tile Size" low="10" high="100" default="64"/>
+   <number id="pixheight" type="spinbutton" arg="-height %"
+           _label="x" low="10" high="100" default="64"/>
+  </hgroup>
+
+  <hgroup>
+   <number id="reaction" type="spinbutton" arg="-reaction %"
+           _label="Reaction/Difusion" low="-1" high="2" default="-1"/>
+   <number id="diffusion" type="spinbutton" arg="-diffusion %"
+           _label="/" low="-1" high="2" default="-1"/>
+  </hgroup>
+
+  <!-- #### default is wrong -->
+  <number id="radius" type="spinbutton" arg="-radius %"
+          _label="Seed Radius" low="1" high="1000" default="500"/>
+
+  <number id="epoch" type="slider" arg="-epoch %"
+           _label="Epoch" _low-label="Small" _high-label="Large"
+           low="1000" high="300000" default="40000"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="300" default="255"/>
+
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+Another variation of the `Bomb' program by Scott Draves.  This draws
+a grid of growing square-like shapes that, once they overtake each
+other, react in unpredictable ways.  ``RD'' stands for
+reaction-diffusion.
+  </_description>
+</screensaver>
diff --git a/hacks/config/ripples.xml b/hacks/config/ripples.xml
new file mode 100644 (file)
index 0000000..c26cd8d
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ripples" _label="Ripples">
+
+  <command arg="-root"/>
+
+  <!-- #### -box [0] -->
+
+  <number id="speed" type="slider" arg="-delay %"
+          _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="rate" type="slider" arg="-rate %"
+          _low-label="Drizzle" _high-label="Storm"
+          low="1" high="100" default="5"
+          convert="invert"/>
+
+  <number id="fluidity" type="slider" arg="-fluidity %"
+          _low-label="Small Drops" _high-label="Big Drops"
+          low="0" high="16" default="6"
+          convert="invert"/>
+
+  <number id="light" type="spinbutton" arg="-light %"
+          _label="Lighting Effect" low="0" high="8" default="0"/>
+
+  <boolean id="grab" _label="Grab Screen Image" arg-set="-water"/>
+
+  <boolean id="stir" _label="Moving Splashes" arg-set="-stir"/>
+
+  <boolean id="oily" _label="Psychedelic Colors" arg-set="-oily"/>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _low-label="Colors    Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+This draws rippling interference patterns like splashing water.
+With the -water option, it manipulates your desktop image to look
+like something is dripping into it.  Written by Tom Hammersley.
+  </_description>
+</screensaver>
diff --git a/hacks/config/rocks.xml b/hacks/config/rocks.xml
new file mode 100644 (file)
index 0000000..e956e2e
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rocks" _label="Rocks">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="200" default="100"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Velocity" _low-label="Slow" _high-label="Fast"
+          low="1" high="100" default="100"/>
+
+  <hgroup>
+    <boolean id="rotate" _label="Rotation" arg-unset="-norotate"/>
+    <boolean id="rotate" _label="Steering" arg-unset="-nomove"/>
+  </hgroup>
+  <boolean id="3d" _label="Do Red/Blue 3D seperation" arg-set="-3d"/>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="5"/>
+
+  <!-- #### -delta3d [1.5] -->
+  <!-- #### -left3d [Blue] -->
+  <!-- #### -right3d [Red] -->
+
+  <_description>
+This draws an animation of flight through an asteroid field, with
+changes in rotation and direction.  It can also display 3D
+separations for red/blue glasses!  Mostly written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/rorschach.xml b/hacks/config/rorschach.xml
new file mode 100644 (file)
index 0000000..f1c6f9a
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rorschach" _label="Rorschach">
+
+  <command arg="-root"/>
+
+  <number id="iterations" type="slider" arg="-iterations %"
+          _label="Iterations" _low-label="Small" _high-label="Large"
+          low="0" high="10000" default="4000"/>
+
+  <number id="offset" type="slider" arg="-offset %"
+          _label="Offset" _low-label="Small" _high-label="Large"
+          low="0" high="50" default="4"/>
+
+  <boolean id="xsymmetry" _label="With X Symmetry" arg-unset="-no-xsymmetry"/>
+  <boolean id="ysymmetry" _label="With Y Symmetry" arg-set="-ysymmetry"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <_description>
+This generates random inkblot patterns.  The algorithm is deceptively
+simple for how well it works; it merely walks a dot around the screen
+randomly, and then reflects the image horizontally, vertically, or
+both.  Any deep-seated neurotic tendencies which this program reveals
+are your own problem.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/rotor.xml b/hacks/config/rotor.xml
new file mode 100644 (file)
index 0000000..2004355
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rotor" _label="Rotor">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="4"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Length" _low-label="Short" _high-label="Long"
+          low="2" high="100" default="20"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-50" high="50" default="-6"/>
+
+  <_description>
+Another ancient xlock demo, this one by Tom Lawrence.  It draws a
+line segment moving along a complex spiraling curve.  I tweaked this
+to generate curvier lines, but still frames of it don't look like
+much.
+  </_description>
+</screensaver>
diff --git a/hacks/config/rotzoomer.xml b/hacks/config/rotzoomer.xml
new file mode 100644 (file)
index 0000000..968ae16
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rotzoomer" _label="RotZoomer">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="0 Seconds" _high-label="1 Minute"
+          low="0" high="60" default="10"/>
+
+  <number id="n" type="spinbutton" arg="-n %"
+          _label="Rectangle Count" low="1" high="20" default="2"/>
+
+  <select id="mode">
+    <option id="stationary" _label="Stationary Rectangles"/>
+    <option id="move" _label="Wandering Rectangles" arg-set="-move"/>
+    <option id="sweep" _label="Sweeping Arcs" arg-set="-sweep"/>
+  </select>
+
+  <boolean id="anim" _label="Animate" arg-unset="-no-anim"/>
+
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+Creates a collage of rotated and scaled portions of the
+screen. Written by Claudio Matsuoka.
+  </_description>
+</screensaver>
diff --git a/hacks/config/rubik.xml b/hacks/config/rubik.xml
new file mode 100644 (file)
index 0000000..1b1a080
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="rubik" _label="Rubik">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="-100" high="100" default="-30"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="60" default="5"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="40000"
+          convert="invert"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-20" high="20" default="-6"/>
+
+  <boolean id="shuffle" _label="Show Shuffling" arg-unset="-hideshuffling"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws a Rubik's Cube that rotates in three dimensions and repeatedly
+shuffles and solves itself.  Another fine GL hack by Marcelo Vianna.
+  </_description>
+</screensaver>
diff --git a/hacks/config/shadebobs.xml b/hacks/config/shadebobs.xml
new file mode 100644 (file)
index 0000000..3f80495
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="shadebobs" _label="ShadeBobs">
+
+  <command arg="-root"/>
+
+  <!-- #### -degrees [0] -->
+  <!-- #### -color [random] -->
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="4"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="5000"
+          convert="invert"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Duration" _low-label="Short" _high-label="Long"
+          low="0" high="100" default="10"/>
+
+  <_description>
+This draws smoothly-shaded oscilating oval patterns, that look
+something like vapor trails or neon tubes.  Written by Shane Smit.
+  </_description>
+</screensaver>
diff --git a/hacks/config/sierpinski.xml b/hacks/config/sierpinski.xml
new file mode 100644 (file)
index 0000000..d209eab
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sierpinski" _label="Sierpinski">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="10" high="10000" default="2000"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="1000" default="100"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="600000" default="400000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+This draws the two-dimensional variant of the recursive Sierpinski
+triangle fractal.  Written by Desmond Daignault.
+  </_description>
+</screensaver>
diff --git a/hacks/config/sierpinski3d.xml b/hacks/config/sierpinski3d.xml
new file mode 100644 (file)
index 0000000..55f1974
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sierpinski3d" _label="Sierpinski3D">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <number id="descent" type="slider" arg="-speed %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="2" high="500" default="150"
+          convert="invert"/>
+
+  <number id="depth" type="spinbutton" arg="-depth %"
+          _label="Max Depth" low="1" high="6" default="3"/>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+This draws the three-dimensional variant of the recursive Sierpinski
+triangle fractal, using GL.  Written by Tim Robinson and Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/slidescreen.xml b/hacks/config/slidescreen.xml
new file mode 100644 (file)
index 0000000..d6d705c
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="slidescreen" _label="SlideScreen">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <!-- #### -delay2 [1000000] -->
+
+  <number id="increment" type="slider" arg="-increment %"
+          _label="Slide Speed" _low-label="Slow" _high-label="Fast"
+          low="1" high="30" default="10"
+          convert="invert"/>
+
+ <number id="grid-size" type="spinbutton" arg="-grid-size %"
+         _label="Grid Size" low="2" high="500" default="70"/>
+
+ <number id="ibw" type="spinbutton" arg="-ibw %"
+         _label="Border Width" low="0" high="50" default="4"/>
+
+  <_description>
+This takes an image, divides it into a grid, and then randomly shuffles
+the squares around as if it was one of those annoying ``16-puzzle''
+games, where there is a grid of squares, one of which is missing.
+I hate trying to solve those puzzles, but watching one permute itself
+is more amusing.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/slip.xml b/hacks/config/slip.xml
new file mode 100644 (file)
index 0000000..ddf4c67
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="slip" _label="Slip">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="100" default="35"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Timeout" _low-label="Small" _high-label="Large"
+          low="0" high="100" default="50"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <_description>
+This program throws some random bits on the screen, then sucks them
+through a jet engine and spews them out the other side.  To avoid
+turning the image completely to mush, every now and then it will and
+then it interjects some splashes of color into the scene, or go into
+a spin cycle, or stretch the image like taffy, or (this is my
+addition) grab an image of your current desktop to chew on.
+Originally written by Scott Draves; whacked on by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/sonar.xml b/hacks/config/sonar.xml
new file mode 100644 (file)
index 0000000..7b5069b
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sonar" _label="Sonar">
+
+  <command arg="-root"/>
+
+  <string id="ping" _label="Ping Subnet" arg="-ping %"/>
+
+  <hgroup>
+    <number id="acount" type="spinbutton" arg="-team-a-count %"
+            _label="Simulation Team Members"
+            low="1" high="100" default="4"/>
+    <number id="bcount" type="spinbutton" arg="-team-b-count %"
+            _label="vs."
+            low="1" high="100" default="4"/>
+  </hgroup>
+
+  <string id="aname" _label="Team A Name" arg="-team-a-name %"/>
+  <string id="bname" _label="Team B Name" arg="-team-b-name %"/>
+
+  <!-- #### -ping-timeout [3000] -->
+  <!-- #### -ttl [90] -->
+
+  <!-- #### -font [fixed] -->
+  <!-- #### -background [#000000] -->
+  <!-- #### -sweep-color [#00FF00] -->
+  <!-- #### -scope-color [#003300] -->
+  <!-- #### -grid-color [#00AA00] -->
+  <!-- #### -text-color [#FFFF00] -->
+
+  <_description>
+This program draws a simulation of a sonar screen.  Written by
+default, it displays a random assortment of ``bogies'' on the screen,
+but if compiled properly, it can ping (pun intended) your local
+network, and actually plot the proximity of the other hosts on your
+network to you.  It would be easy to make it monitor other sources of
+data, too.  (Processes?  Active network connections?  CPU usage per
+user?)  Written by Stephen Martin.
+  </_description>
+</screensaver>
diff --git a/hacks/config/speedmine.xml b/hacks/config/speedmine.xml
new file mode 100644 (file)
index 0000000..9076e78
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="speedmine" _label="SpeedMine">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="30000"
+          convert="invert"/>
+
+  <boolean id="sharpturn" _label="Sharp Turns" arg-set="-sharpturns"/>
+
+  <select id="mode">
+    <option id="speedmine" _label="Mine Shaft"/>
+    <option id="speedworm" _label="Worm" arg-set="-worm"/>
+  </select>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wire"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <number id="velocity" type="slider" arg="-maxspeed %"
+          _label="Max Velocity" _low-label="Slow" _high-label="Fast"
+          low="1" high="1000" default="700"/>
+
+  <number id="thrust" type="slider" arg="-thrust %"
+          _label="Thrust" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="4.0" default="1.0"/>
+
+  <number id="gravity" type="slider" arg="-gravity %"
+          _label="Gravity" _low-label="Low" _high-label="High"
+          low="0.0" high="25.0" default="9.8"/>
+
+  <boolean id="terrain" _label="Rocky Walls" arg-unset="-noterrain"/>
+
+  <boolean id="bump"    _label="Allow Wall Collisions" arg-unset="-nobumps"/>
+
+  <boolean id="bonus"   _label="Present Bonuses" arg-unset="-nobonuses"/>
+
+  <boolean id="xhair"   _label="Display Crosshair" arg-unset="-nocrosshair"/>
+
+  <!-- #### -vertigo [1.0] -->
+  <!-- #### -darkground [#101010] -->
+  <!-- #### -lightground [#a0a0a0] -->
+  <!-- #### -tunnelend [#000000] -->
+  <!-- #### -smoothness [6] -->
+  <!-- #### -curviness [1.0] -->
+  <!-- #### -twistiness [1.0] -->
+  <!-- #### -nowidening -->
+  <!-- #### -psychedelic -->
+
+  <_description>
+Simulates speeding down a rocky mineshaft, or a funky dancing worm.
+Written by Conrad Parker.
+  </_description>
+</screensaver>
diff --git a/hacks/config/sphere.xml b/hacks/config/sphere.xml
new file mode 100644 (file)
index 0000000..8ab55cf
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sphere" _label="Sphere">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="1000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Another of the classic screenhacks of the distant past, this one
+draws shaded spheres in multiple colors.  This hack traces its
+lineage back to Tom Duff in 1982.
+  </_description>
+</screensaver>
diff --git a/hacks/config/sphereEversion.xml b/hacks/config/sphereEversion.xml
new file mode 100644 (file)
index 0000000..dfd1c5d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sphereEversion" _label="SphereEversion">
+
+  <command arg="--root"/>
+
+  <_description>
+SphereEversion draws an animation of a sphere being turned inside out.
+A sphere can be turned inside out, without any tears, sharp creases or
+discontinuities, if the surface of the sphere is allowed to intersect
+itself.  This program animates what is known as the Thurston Eversion.
+Written by Nathaniel Thurston and Michael McGuffin.  This program is
+not included with the XScreenSaver package, but if you don't have it
+already, you can find it at
+&lt;http://www.dgp.utoronto.ca/~mjmcguff/eversion/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/spiral.xml b/hacks/config/spiral.xml
new file mode 100644 (file)
index 0000000..b63ea71
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="spiral" _label="Spiral">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="100" default="40"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Cycles" _low-label="Low" _high-label="High"
+          low="10" high="800" default="350"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+Moving circular patterns, by Peter Schmitzberger.  Moving circular
+patterns means moire; interference patterns, of course.
+  </_description>
+</screensaver>
diff --git a/hacks/config/spotlight.xml b/hacks/config/spotlight.xml
new file mode 100644 (file)
index 0000000..b10adac
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="spotlight" _label="Spotlight">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="radius" type="spinbutton" arg="-radius %"
+          _label="Radius" low="5" high="1000" default="125"/>
+
+  <_description>
+Draws a spotlight scanning across a black screen, illumnating the
+underlying desktop when it passes.  Written by Rick Schultz.
+  </_description>
+</screensaver>
diff --git a/hacks/config/sproingies.xml b/hacks/config/sproingies.xml
new file mode 100644 (file)
index 0000000..8a90a54
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="sproingies" _label="Sproingies">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="5"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="40000" default="25000"
+          convert="invert"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="0" high="100" default="0"/>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Q-Bert meets Marble Madness!  Written by Ed Mackey.
+  </_description>
+</screensaver>
diff --git a/hacks/config/squiral.xml b/hacks/config/squiral.xml
new file mode 100644 (file)
index 0000000..810f4bc
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="squiral" _label="Squiral">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Seeds" low="0" high="200" default="0"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="1000"
+          convert="invert"/>
+
+  <number id="disorder" type="slider" arg="-disorder %"
+          _label="Randomness" _low-label="Low" _high-label="High"
+          low="0.0" high="0.5" default="0.005"/>
+
+  <number id="handedness" type="slider" arg="-handedness %"
+          _label="Handedness" _low-label="Left" _high-label="Right"
+          low="0.0" high="1.0" default="0.5"/>
+
+  <number id="fill" type="slider" arg="-density %"
+          _label="Density" _low-label="Sparse" _high-label="Dense"
+          low="10" high="100" default="75"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <!-- #### -cycle -->
+
+  <_description>
+Draws a set of interacting, square-spiral-producing automata.  The
+spirals grow outward until they hit something, then they go around
+it.  Written by Jeff Epler.
+  </_description>
+</screensaver>
diff --git a/hacks/config/ssystem.xml b/hacks/config/ssystem.xml
new file mode 100644 (file)
index 0000000..f5c5cac
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="ssystem" _label="SSystem">
+
+  <command arg="-fullscreen :32"/>
+
+  <_description>
+SSystem is a GL Solar System simulator.  It simulates flybys of Sun,
+the nine planets and a few major satellites, with four camera modes.
+Written by Raul Alonso.  This is not included with the XScreenSaver
+package, but if you don't have it already, you can find it at
+&lt;http://www1.las.es/~amil/ssystem/&gt;.
+
+Note: this program doesn't work as a screen saver on all systems,
+because it doesn't communicate with xscreensaver properly.  It happens
+to work with some window managers, but not with others, so your 
+mileage may vary.
+  </_description>
+</screensaver>
diff --git a/hacks/config/stairs.xml b/hacks/config/stairs.xml
new file mode 100644 (file)
index 0000000..6e77ef6
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="stairs" _label="Stairs">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="20000"
+          convert="invert"/>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+by Marcelo Vianna's third Escher GL hack, this one draws an
+``infinite'' staircase.
+  </_description>
+</screensaver>
diff --git a/hacks/config/starfish.xml b/hacks/config/starfish.xml
new file mode 100644 (file)
index 0000000..a495c4d
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="starfish" _label="Starfish">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="duration" type="spinbutton" arg="-duration %"
+          _label="Duration" low="1" high="60" default="30"/>
+
+  <number id="thickness" type="slider" arg="-thickness %"
+          _label="Lines" _low-label="Thin" _high-label="Thick"
+          low="0" high="150" default="0"/>
+
+  <select id="mode">
+    <option id="field" _label="Color Gradients"/>
+    <option id="blob"  _label="Pulsating Blob" arg-set="-blob"/>
+  </select>
+
+  <number id="ncolors" type="slider" arg="-colors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <!-- #### -delay2 [5] -->
+  <!-- #### -cycle-delay [100000] -->
+  <!-- #### -no-cycle -->
+
+  <_description>
+This generates a sequence of undulating, throbbing, star-like
+patterns which pulsate, rotate, and turn inside out.  Another display
+mode uses these shapes to lay down a field of colors, which are then
+cycled.  The motion is very organic.  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/starwars.xml b/hacks/config/starwars.xml
new file mode 100644 (file)
index 0000000..1b11277
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="starwars" _label="StarWars">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="40000"
+          convert="invert"/>
+
+  <number id="steps" type="slider" arg="-steps %"
+          _label="Scroll Speed" _low-label="Slow" _high-label="Fast"
+          low="1" high="100" default="35"
+          convert="invert"/>
+
+  <hgroup>
+    <select id="align">
+      <option id="left"   _label="Flush Left Text"  arg-set="-left"/>
+      <option id="center" _label="Centered Text"/>
+      <option id="right"  _label="Flush Right Text" arg-set="-right"/>
+    </select>
+
+    <boolean id="wrap"   _label="Wrap Long Lines" arg-unset="-no-wrap"/>
+  </hgroup>
+
+  <file id="program" _label="Text Program" arg="-program %"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Font Point Size" low="-1" high="10" default="-1"/>
+
+  <number id="columns" type="spinbutton" arg="-columns %"
+           _label="Text Columns" low="-1" high="200" default="-1"/>
+
+  <number id="lines" type="spinbutton" arg="-size %"
+           _label="Text Lines" low="4" high="1000" default="125"/>
+
+  <number id="spin" type="slider" arg="-spin %"
+          _label="Star Rotation Speed" _low-label="Slow" _high-label="Fast"
+          low="0.0" high="0.2" default="0.03"/>
+
+  <hgroup>
+    <boolean id="smooth" _label="Anti-aliased Lines" arg-unset="-no-smooth"/>
+    <boolean id="fade"   _label="Thick Lines"        arg-unset="-no-thick"/>
+  </hgroup>
+  <boolean id="fade"   _label="Fade Out"           arg-unset="-no-fade"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Draws a stream of text slowly scrolling into the distance at an
+angle, over a star field, like at the beginning of the movie of the
+same name.  Written by Jamie Zawinski and Claudio Matauoka.
+  </_description>
+</screensaver>
diff --git a/hacks/config/stonerview.xml b/hacks/config/stonerview.xml
new file mode 100644 (file)
index 0000000..19ab083
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="stonerview" _label="StonerView">
+
+  <command arg="-root"/>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <_description>
+Chains of colorful squares dance around each other in complex spiral
+patterns.  Written by Andrew Plotkin, based on SGI's `electropaint'
+screensaver.
+  </_description>
+</screensaver>
diff --git a/hacks/config/strange.xml b/hacks/config/strange.xml
new file mode 100644 (file)
index 0000000..7d805cd
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="strange" _label="Strange">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="2000"
+          convert="invert"/>
+
+  <number id="curve" type="slider" arg="-curve %"
+            _label="Curviness" _low-label="Low" _high-label="High"
+            low="1" high="50" default="10"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="100"/>
+
+  <_description>
+This draws strange attractors: it's a colorful,
+unpredictably-animating field of dots that swoops and twists around.
+The motion is very nice.  Written by Massimino Pascal.
+  </_description>
+</screensaver>
diff --git a/hacks/config/superquadrics.xml b/hacks/config/superquadrics.xml
new file mode 100644 (file)
index 0000000..20b360d
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="superquadrics" _label="Superquadrics">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="40000"
+          convert="invert"/>
+
+  <number id="spinspeed" type="slider" arg="-spinspeed %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0.1" high="15.0" default="5.0"/>
+
+  <number id="count" type="slider" arg="-count %"
+           _label="Count" _low-label="Low" _high-label="High"
+          low="0" high="100" default="25"/>
+
+  <number id="cycles" type="slider" arg="-cycles %"
+           _label="Count" _low-label="Low" _high-label="High"
+          low="0" high="100" default="40"/>
+
+  <select id="render">
+    <option id="wire"  _label="Wireframe" arg-set="-wireframe"/>
+    <option id="solid" _label="Solid"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Ed Mackey reports that he wrote the first version of this program in
+BASIC on a Commodore 64 in 1987, as a 320x200 black and white
+wireframe.  Now it is GL and has specular reflections.
+  </_description>
+</screensaver>
diff --git a/hacks/config/swirl.xml b/hacks/config/swirl.xml
new file mode 100644 (file)
index 0000000..5faaf7d
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="swirl" _label="Swirl">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="0" high="20" default="5"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="200"/>
+
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+More flowing, swirly patterns. This version is by M.  Dobie and R.
+Taylor, but you might have seen a Mac program similar to this called
+FlowFazer.  There is also a cool Java applet of a similar concept.
+  </_description>
+</screensaver>
diff --git a/hacks/config/t3d.xml b/hacks/config/t3d.xml
new file mode 100644 (file)
index 0000000..b2dc29d
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="t3d" _label="T3D">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="40000"
+          convert="invert"/>
+
+  <number id="move" type="slider" arg="-move %"
+          _label="Turn Side-to-Side" _low-label="0°" _high-label="90°"
+          low="0.0" high="3.0" default="2.0"/>
+
+  <number id="wobble" type="slider" arg="-wobble %"
+          _label="Wobbliness" _low-label="Low" _high-label="High"
+          low="0.0" high="3.0" default="2.0"/>
+
+  <number id="cycle" type="slider" arg="-cycle %"
+          _label="Cycle Seconds" _low-label="Low" _high-label="High"
+          low="0.0" high="60.0" default="10.0"/>
+
+  <number id="mag" type="slider" arg="-mag %"
+          _label="Magnification" _low-label="Smaller" _high-label="Bigger"
+          low="0.1" high="4.0" default="1.0"/>
+
+  <select id="mins">
+    <option id="min2" _label="Minute Tick Marks" arg-set="-minute"/>
+    <option id="min5" _label="5 Minute Tick Marks"/>
+  </select>
+
+  <!-- #### -fast [50] -->
+  <!-- #### -colcycle [?] -->
+  <!-- #### -hsvcycle [0.0] -->
+  <!-- #### -rgb [?] -->
+  <!-- #### -hsv [?] -->
+
+  <_description>
+This draws a working analog clock composed of floating, throbbing
+bubbles.  Written by Bernd Paysan.
+  </_description>
+</screensaver>
diff --git a/hacks/config/triangle.xml b/hacks/config/triangle.xml
new file mode 100644 (file)
index 0000000..cd0fd65
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="triangle" _label="Triangle">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="128"/>
+
+  <_description>
+Generates random mountain ranges using iterative subdivision of
+triangles.  Written by Tobias Gloth.
+  </_description>
+</screensaver>
diff --git a/hacks/config/truchet.xml b/hacks/config/truchet.xml
new file mode 100644 (file)
index 0000000..9f36efb
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="truchet" _label="Truchet">
+
+  <command arg="-root"/>
+  <command arg="-randomize"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="1000"
+          convert="invert"/>
+
+  <!-- #### -min-width [40] -->
+  <!-- #### -max-height [150] -->
+  <!-- #### -max-width [150] -->
+  <!-- #### -min-height [40] -->
+  <!-- #### -max-linewidth [25] -->
+  <!-- #### -min-linewidth [2] -->
+  <!-- #### -no-erase -->
+  <!-- #### -erase-count [25] -->
+  <!-- #### -not-square -->
+  <!-- #### -no-angles -->
+  <!-- #### -no-curves -->
+  <!-- #### -scroll -->
+  <!-- #### -scroll-overlap [400] -->
+  <!-- #### -anim-delay [100] -->
+  <!-- #### -anim-step-size [3] -->
+
+  <_description>
+This draws line- and arc-based Truchet patterns that tile the screen.
+Written by Adrian Likins.
+  </_description>
+</screensaver>
diff --git a/hacks/config/vermiculate.xml b/hacks/config/vermiculate.xml
new file mode 100644 (file)
index 0000000..e1e0d9d
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vermiculate" _label="Vermiculate">
+
+  <command arg="-root"/>
+
+  <!-- #### -speed [?] -->
+  <!-- #### -instring [?] -->
+
+  <_description>
+Draws squiggly worm-like paths.  Written by Tyler Pierce.
+  </_description>
+</screensaver>
diff --git a/hacks/config/vidwhacker.xml b/hacks/config/vidwhacker.xml
new file mode 100644 (file)
index 0000000..64cfe2e
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vidwhacker" _label="VidWhacker">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="2 seconds" _high-label="2 minutes"
+          low="2" high="120" default="5"/>
+
+  <file id="directory" _label="Image Directory" arg="-directory %"/>
+
+  <_description>
+This is actually just a shell script that grabs a frame of video from
+the system's video input, and then uses some PBM filters (chosen at
+random) to manipulate and recombine the video frame in various ways
+(edge detection, subtracting the image from a rotated version of
+itself, etc.)  Then it displays that image for a few seconds, and does
+it again.  This works really well if you just feed broadcast television
+into it.
+  </_description>
+</screensaver>
diff --git a/hacks/config/vines.xml b/hacks/config/vines.xml
new file mode 100644 (file)
index 0000000..efce30f
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="vines" _label="Vines">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="250000" default="200000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="64"/>
+
+  <_description>
+This one generates a continuous sequence of small, curvy geometric
+patterns.  It scatters them around your screen until it fills up,
+then it clears the screen and starts over.  Written by Tracy Camp and
+David Hansen.
+  </_description>
+</screensaver>
diff --git a/hacks/config/wander.xml b/hacks/config/wander.xml
new file mode 100644 (file)
index 0000000..50deba8
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="wander" _label="Wander">
+
+  <command arg="-root"/>
+
+  <number id="density" type="slider" arg="-density %"
+          _label="Density" _low-label="Low" _high-label="High"
+          low="1" high="30" default="2"
+          convert="invert"/>
+
+  <number id="reset" type="slider" arg="-reset %"
+          _label="Duration" _low-label="Short" _high-label="Long"
+          low="10000" high="3000000" default="2500000"/>
+
+  <number id="length" type="slider" arg="-length %"
+          _label="Length" _low-label="Short" _high-label="Long"
+          low="100" high="100000" default="25000"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Sustain" _low-label="0 Seconds" _high-label="1 Minute"
+          low="0" high="60" default="1"/>
+
+  <hgroup>
+    <boolean id="circles" _label="Draw Spots" arg-set="-circles"/>
+
+    <number id="size" type="spinbutton" arg="-size %"
+             _label="Size" low="0" high="100" default="1"/>
+  </hgroup>
+
+  <number id="advance" type="slider" arg="-advance %"
+          _label="Color Contrast" _low-label="Low" _high-label="High"
+          low="1" high="100" default="1"/>
+
+  <_description>
+Draws a colorful random-walk, in various forms.  Written by Rick
+Campbell.
+  </_description>
+</screensaver>
diff --git a/hacks/config/webcollage.xml b/hacks/config/webcollage.xml
new file mode 100644 (file)
index 0000000..f998fd9
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="webcollage" _label="WebCollage">
+
+  <command arg="-root"/>
+
+  <number id="timeout" type="slider" arg="-delay %"
+          _label="URL Timeout" _low-label="2 seconds" _high-label="2 minutes"
+          low="2" high="120" default="30"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="30" default="1"
+          convert="invert"/>
+
+  <string id="filter"  _label="Per-Image Filter Program" arg="-filter %"/>
+
+  <string id="filter2" _label="Overall Filter Program" arg="-filter2 %"/>
+
+  <file id="dictionary" _label="Dictionary File" arg="-dictionary %"/>
+
+  <_description>
+This program makes collages out of random images pulled off of the
+World Wide Web.  It finds these images by doing random web searches,
+and then extracting images from the returned pages.  It can also be set
+up to filter the images through the `VidWhacker' program, above, which
+looks really great.
+
+(Note that most of the images it finds are text, and not pictures.
+This is because most of the web is pictures of text.  Which is pretty
+sad.)  Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/whirlwindwarp.xml b/hacks/config/whirlwindwarp.xml
new file mode 100644 (file)
index 0000000..93e013a
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="whirlwindwarp" _label="WhirlwindWarp">
+
+  <command arg="-root"/>
+
+  <number id="points" type="slider" arg="-points %"
+          _label="Particles" _label-low="Few" _label-high="Many"
+          low="10" high="1000" default="400"/>
+
+  <number id="tails" type="slider" arg="-tails %"
+          _label="Trail Size" _label-low="Short" _label-high="Long"
+          low="1" high="200" default="10"/>
+
+  <_description>
+Floating stars are acted upon by a mixture of simple 2D
+forcefields.  The strength of each forcefield changes
+continuously, and it is also switched on and off at random.
+By Paul 'Joey' Clark.
+  </_description>
+</screensaver>
diff --git a/hacks/config/whirlygig.xml b/hacks/config/whirlygig.xml
new file mode 100644 (file)
index 0000000..ba4e588
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="whirlygig" _label="WhirlyGig">
+
+  <command arg="-root"/>
+
+  <number id="whirlies" type="spinbutton" arg="-whirlies %"
+          _label="Whirlies" low="1" high="50" default="40"/>
+
+  <number id="lines" type="spinbutton" arg="-nlines %"
+          _label="Lines" low="-1" high="50" default="-1"/>
+
+  <hgroup>
+    <number id="xspeed" type="spinbutton" arg="-xspeed %"
+            _label="Speed" low="0.0" high="10.0" default="1.0"/>
+    <number id="yspeed" type="spinbutton" arg="-yspeed %"
+            _label="x" low="0.0" high="10.0" default="1.0"/>
+  </hgroup>
+
+  <hgroup>
+    <number id="xamplitude" type="spinbutton" arg="-xamplitude %"
+            _label="Amplitude" low="0.0" high="10.0" default="1.0"/>
+    <number id="yamplitude" type="spinbutton" arg="-yamplitude %"
+            _label="x" low="0.0" high="10.0" default="1.0"/>
+  </hgroup>
+
+  <!-- #### -xmode [change] -->
+  <!-- #### -ymode [change] -->
+  <!-- #### -speed [1] -->
+  <!-- #### -trail [0] -->
+  <!-- #### -color_modifier [-1] -->
+  <!-- #### -start_time [-1] -->
+  <!-- #### -xoffset [1.0] -->
+  <!-- #### -yoffset [1.0] -->
+  <!-- #### -offset_period [1] -->
+  <!-- #### -explain [0] -->
+  <!-- #### -wrap [0] -->
+
+  <_description>
+Draws zooming chains of sinusoidal spots.  Written by Ashton Trey Belew.
+  </_description>
+</screensaver>
diff --git a/hacks/config/worm.xml b/hacks/config/worm.xml
new file mode 100644 (file)
index 0000000..b928138
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="worm" _label="Worm">
+
+  <command arg="-root"/>
+
+  <number id="count" type="spinbutton" arg="-count %"
+          _label="Count" low="-100" high="100" default="-20"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="17000"
+          convert="invert"/>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="1" high="255" default="150"/>
+
+  <number id="size" type="spinbutton" arg="-size %"
+           _label="Size" low="-20" high="20" default="-3"/>
+
+  <!-- #### -cycles [10] -->
+  <!-- #### -3d -->
+
+  <_description>
+An ancient xlock hack that draws multicolored worms that crawl around
+the screen.  Written by Brad Taylor, Dave Lemke, Boris Putanec, and
+Henrik Theiling.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xaos.xml b/hacks/config/xaos.xml
new file mode 100644 (file)
index 0000000..3410e4d
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xaos" _label="XaoS">
+
+  <command arg="-root"/>
+
+  <!-- #### write me -->
+
+  <command arg="-autopilot"/>
+  <command arg="-nogui"/>
+  <command arg="-incoloring -1"/>
+  <command arg="-outcoloring -1"/>
+
+  <_description>
+XaoS generates fast fly-through animations of the Mandelbrot and other
+fractal sets.  Written by Thomas Marsh and Jan Hubicka.  This is not
+included with the XScreenSaver package, but if you don't have it
+already, you can find it at &lt;http://limax.paru.cas.cz/~hubicka/XaoS/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xdaliclock.xml b/hacks/config/xdaliclock.xml
new file mode 100644 (file)
index 0000000..e9398ed
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xdaliclock" _label="XDaliClock">
+
+  <command arg="-root"/>
+
+  <select id="size">
+    <option id="font0" _label="Small Font"   arg-set="-builtin0"/>
+    <option id="font1" _label="Medium Font"  arg-set="-builtin1"/>
+    <option id="font2" _label="Large Font"/>
+    <option id="font2" _label="Huge Font"    arg-set="-builtin3"/>
+  </select>
+
+  <select id="style">
+    <option id="12" _label="12-Hour Time"/>
+    <option id="24" _label="24-Hour Time" arg-set="-24"/>
+  </select>
+
+  <boolean id="secs"  _label="Display Seconds" arg-unset="-noseconds"/>
+
+  <boolean id="cycle" _label="Cycle Colors" arg-set="-cycle"/>
+
+  <_description>
+XDaliClock draws a large digital clock, the numbers of which change by
+``melting'' into their new shapes.  Written by Jamie Zawinski.  This
+is not included with the XScreenSaver package, but if you don't have
+it already, you can find it at &lt;http://www.jwz.org/xdaliclock/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xearth.xml b/hacks/config/xearth.xml
new file mode 100644 (file)
index 0000000..c0c41b0
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xearth" _label="Xearth">
+
+  <command arg="-nofork"/>
+
+  <!-- #### fix this -->
+  <command arg="-pos sunrel/38/-30"/>
+
+  <number id="wait" type="slider" arg="-wait %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="600" default="300"
+          convert="invert"/>
+
+  <number id="timewarp" type="slider" arg="-timewarp %"
+          _label="Time Warp" _low-label="Real Time" _high-label="Fast"
+          low="1.0" high="800.0" default="1.0"/>
+
+  <hgroup>
+    <select id="proj">
+      <option id="mercator" _label="Mercator Projection" arg-set="-proj merc"/>
+      <option id="orthographic" _label="Orthographic Projection"/>
+    </select>
+
+    <boolean id="shade" _label="Shaded Image" arg-unset="-noshade"/>
+  </hgroup>
+
+  <hgroup>
+    <number id="rot" type="spinbutton" arg="-rot %"
+            _label="North/South Rotation" low="-90" high="90" default="0"/>
+
+    <number id="mag" type="spinbutton" arg="-mag %"
+            _label="Magnification" low="0.1" high="10.0" default="1.0"/>
+  </hgroup>
+
+  <hgroup>
+    <boolean id="label" _label="Date/Time Stamp" arg-set="-label"/>
+
+    <select id="timestamp">
+      <option id="ul" _label="Upper Left"  arg-set="-label +5+5"/>
+      <option id="ll" _label="Lower Left"  arg-set="-label +5-5"/>
+      <option id="ur" _label="Upper Right" arg-set="-label -5+5"/>
+      <option id="lr" _label="Lower Right"/>
+    </select>
+  </hgroup>
+
+    <boolean id="markers" _label="Label Cities" arg-unset="-nolabel"/>
+  <hgroup>
+    <boolean id="grid"    _label="Draw Grid" arg-set="-grid"/>
+    <number id="g1" type="spinbutton" arg="-grid1 %"
+            _label="Spacing" low="1" high="100" default="6"/>
+    <number id="g2" type="spinbutton" arg="-grid2 %"
+            _label="x" low="1" high="100" default="15"/>
+  </hgroup>
+
+  <number id="day" type="slider" arg="-day %"
+          _low-label="Day  Dim" _high-label="Bright"
+          low="1" high="100" default="100"/>
+
+  <number id="night" type="slider" arg="-night %"
+          _low-label="Night   Dim" _high-label="Bright"
+          low="1" high="100" default="5"/>
+
+  <number id="term" type="slider" arg="-term %"
+          _low-label="Terminator   Blurry" _high-label="Sharp"
+          low="1" high="100" default="100"/>
+
+  <hgroup>
+    <select id="stars">
+      <option id="stars"   _label="Display Stars"/>
+      <option id="nostars" _label="No Stars" arg-set="-nostars"/>
+    </select>
+
+    <number id="starfreq" type="slider" arg="-starfreq %"
+              _low-label="Sparse" _high-label="Dense"
+              low="0.0001" high="0.01" default="0.002"/>
+  </hgroup>
+
+  <number id="ncolors" type="slider" arg="-ncolors %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="2" high="255" default="50"/>
+
+  <_description>
+XEarth draws an image of the Earth, as seen from your favorite vantage
+point in space, correctly shaded for the current position of the Sun.
+Written by Kirk Johnson.  This is not included with the XScreenSaver
+package, but if you don't have it already, you can find it at
+&lt;http://www.cs.colorado.edu/~tuna/xearth/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xfishtank.xml b/hacks/config/xfishtank.xml
new file mode 100644 (file)
index 0000000..afe506c
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xfishtank" _label="XFishTank">
+
+  <command arg="-d"/>
+  <command arg="-s"/>
+
+  <number id="speed" type="slider" arg="-i %"
+            _label="Animation Speed" _low-label="Slow" _high-label="Fast"
+            low="0.0" high="1.0" default="0.2"/>
+
+  <number id="speed" type="slider" arg="-r %"
+            _label="Fish Speed" _low-label="Slow" _high-label="Fast"
+            low="0.0" high="1.0" default="0.2"/>
+
+  <number id="bubbles" type="slider" arg="-b %"
+            _label="Bubbles" _low-label="Few" _high-label="Many"
+            low="0" high="200" default="32"/>
+
+  <number id="fish" type="slider" arg="-f %"
+            _label="Fish" _low-label="Few" _high-label="Many"
+            low="0" high="50" default="10"/>
+
+  <number id="ncolors" type="slider" arg="-C %"
+            _label="Number of Colors" _low-label="Two" _high-label="Many"
+            low="2" high="255" default="64"/>
+
+  <_description>
+Fish!  This is not included with the XScreenSaver package, but if you
+don't have it already, you can find it at
+&lt;http://metalab.unc.edu/pub/Linux/X11/demos/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xflame.xml b/hacks/config/xflame.xml
new file mode 100644 (file)
index 0000000..bec88ec
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xflame" _label="Xflame">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <file id="bitmap" _label="Bitmap File" arg="-bitmap %"/>
+
+  <!-- #### -baseline [20] -->
+  <!-- #### -hspread [30] -->
+  <!-- #### -vspread [97] -->
+  <!-- #### -residual [99] -->
+  <!-- #### -variance [50] -->
+  <!-- #### -vartrend [20] -->
+
+  <boolean id="bloom" _label="Enable Blooming" arg-unset="-no-bloom"/>
+
+  <boolean id="shm" _label="Use Shared Memory" arg-unset="-no-shm"/>
+
+  <_description>
+Draws a simulation of pulsing fire.  It can also take an arbitrary
+image and set it on fire too.  Written by Carsten Haitzler, hacked on
+by many others.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xjack.xml b/hacks/config/xjack.xml
new file mode 100644 (file)
index 0000000..410b338
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xjack" _label="Xjack">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="80000" default="50000"
+          convert="invert"/>
+
+  <!-- #### -font [] -->
+
+  <_description>
+This program behaves schizophrenically and makes a lot of typos.
+Written by Jamie Zawinski.  If you haven't seen Stanley Kubrick's
+masterpiece, ``The Shining,'' you won't get it.  Those who have
+describe this hack as ``inspired.''
+  </_description>
+</screensaver>
diff --git a/hacks/config/xlyap.xml b/hacks/config/xlyap.xml
new file mode 100644 (file)
index 0000000..2127b4c
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xlyap" _label="Xlyap">
+
+  <command arg="-root"/>
+  <command arg="-randomize"/>
+
+  <!-- #### -builtin [-1] -->
+  <!-- #### -C [1] -->
+  <!-- #### -D [50] -->
+  <!-- #### -L -->
+  <!-- #### -M [1.0] -->
+  <!-- #### -O [0] -->
+  <!-- #### -R [] -->
+  <!-- #### -S [50] -->
+  <!-- #### -a [2.0] -->
+  <!-- #### -b [2.0] -->
+  <!-- #### -c [7] -->
+  <!-- #### -F [10101010] -->
+  <!-- #### -f [abbabaab] -->
+  <!-- #### -h [] -->
+  <!-- #### -i [0.65] -->
+  <!-- #### -m [] -->
+  <!-- #### -o [] -->
+  <!-- #### -p -->
+  <!-- #### -r [65000] -->
+  <!-- #### -s [256] -->
+  <!-- #### -v -->
+  <!-- #### -w [] -->
+
+  <_description>
+This generates pretty fractal pictures by doing funky math involving
+the ``Lyapunov exponent.''  It has a cool interactive mode, too.
+Written by Ron Record.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xmatrix.xml b/hacks/config/xmatrix.xml
new file mode 100644 (file)
index 0000000..31c346d
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xmatrix" _label="Xmatrix">
+
+  <command arg="-root"/>
+
+  <select id="size">
+    <option id="font1" _label="Small Font"  arg-set="-small"/>
+    <option id="font2" _label="Large Font"/>
+  </select>
+
+  <select id="mode">
+    <option id="matrix" _label="Matrix Encoding"/>
+    <option id="binary" _label="Binary Encoding"      arg-set="-binary"/>
+    <option id="hex"    _label="Hexadecimal Encoding" arg-set="-hexadecimal"/>
+    <option id="dna"    _label="Genetic Encoding"     arg-set="-dna"/>
+  </select>
+
+  <select id="fill">
+    <option id="both"   _label="Synergistic Algorithm"/>
+    <option id="top"    _label="Slider Algorithm"    arg-set="-top"/>
+    <option id="bottom" _label="Expansion Algorithm" arg-set="-bottom"/>
+  </select>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <number id="density" type="slider" arg="-density %"
+          _label="Speed" _low-label="Sparse" _high-label="Full"
+          low="1" high="100" default="75"/>
+
+  <boolean id="trace" _label="Run Trace Program" arg-set="-trace"/>
+
+  <string id="phone" _label="Phone Number" arg="-phone %"/>
+
+  <_description>
+A rendition of the text scrolls seen in the movie ``The Matrix.''
+Written by Jamie Zawinski.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xmountains.xml b/hacks/config/xmountains.xml
new file mode 100644 (file)
index 0000000..7b2a881
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xmountains" _label="Xmountains">
+
+  <command arg="-root"/>
+
+  <command arg="-b"/>
+  <command arg="-r 1"/>
+
+  <boolean id="reflections" _label="Reflections" arg-set="-M"/>
+
+  <number id="speed" type="slider" arg="-Z %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="10" default="10"
+          convert="invert"/>
+
+  <select id="mode">
+    <option id="side" _label="Side View"/>
+    <option id="top"  _label="Top View" arg-set="-m"/>
+  </select>
+
+  <!-- #### -r int   [20] # columns before scrolling                   -->
+  <!-- #### -B int   [80] # shades in a colour band                    -->
+  <!-- #### -n int   [245] # number of colours                         -->
+  <!-- #### -Z int   [10] time to sleep before scrolling               -->
+  <!-- #### -I float [40.000000] vertical angle of light               -->
+  <!-- #### -A float [0.000000] horizontal angle of light              -->
+  <!-- #### -S float [0.600000] vertical stretch                       -->
+  <!-- #### -T float [0.500000] vertical shift                                 -->
+  <!-- #### -W float [0.000000] sealevel                               -->
+  <!-- #### -F int   [1] reduce variation in the foreground            -->
+  <!-- #### -G float [-1.000000] average foreground height             -->
+  <!-- #### -C float [0.300000] contour parameter                      -->
+  <!-- #### -a float [2.500000] altitude of viewpoint                  -->
+  <!-- #### -p float [4.000000] distance of viewpoint                  -->
+  <!-- #### -c float [1.000000] contrast                               -->
+  <!-- #### -e float [0.300000] ambient light level                    -->
+  <!-- #### -v float [0.600000] vertical light level                   -->
+
+  <!-- Fractal options:                                                        -->
+
+  <!-- #### -f float [0.650000] fractal dimension                      -->
+  <!-- #### -l int   [10] # levels of recursion                        -->
+  <!-- #### -t int   [2] # non fractal iterations                      -->
+  <!-- #### -x       [true] cross update                               -->
+  <!-- #### -s       [1] smoothing (0-7)                               -->
+  <!-- #### -X float [0.000000] fraction of old value for rg2 & rg3    -->
+  <!-- #### -Y float [0.000000] fraction of old value for rg1          -->
+
+
+  <_description>
+XMountains generates realistic-looking fractal terrains of snow-capped
+mountains near water, with either a top view or a side view.  Written
+by Stephen Booth.  This is not included with the XScreenSaver package,
+but if you don't have it already, you can find it at
+&lt;http://www.epcc.ed.ac.uk/~spb/xmountains/&gt;.
+
+Be sure to compile it with -DVROOT or it won't work right when launched
+by the xscreensaver daemon.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xrayswarm.xml b/hacks/config/xrayswarm.xml
new file mode 100644 (file)
index 0000000..f471b70
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xrayswarm" _label="XRaySwarm">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="0"
+          convert="invert"/>
+
+  <_description>
+Draws a few swarms of critters flying around the screen, with nicely
+faded color trails behind them.  Written by Chris Leger.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xsnow.xml b/hacks/config/xsnow.xml
new file mode 100644 (file)
index 0000000..7ae5b76
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xsnow" _label="Xsnow">
+
+  <!-- #### -sc          <snowcolor>                           -->
+  <!-- #### -tc          <tree color>                          -->
+  <!-- #### -bg          <background color>                    -->
+  <!-- #### -solidbg     (Performance improvement!)            -->
+  <!-- #### -slc         <sleigh color>                                -->
+  <!-- #### -snowflakes  <numsnowflakes>                       -->
+  <!-- #### -delay       <delay in milliseconds>               -->
+  <!-- #### -unsmooth                                          -->
+  <!-- #### -whirl       <whirlfactor>                         -->
+  <!-- #### -nowind                                            -->
+  <!-- #### -windtimer   <secs between windy periods>          -->
+  <!-- #### -xspeed      <max xspeed snowflakes>               -->
+  <!-- #### -yspeed      <max yspeed snowflakes>               -->
+  <!-- #### -wsnowdepth  <max snow depth on windows>           -->
+  <!-- #### -offset      <shift snow down>                     -->
+  <!-- #### -ssnowdepth  <max snow depth at bottom of display> -->
+  <!-- #### -notrees                                           -->
+  <!-- #### -nosanta                                           -->
+  <!-- #### -norudolf                                          -->
+  <!-- #### -santa       <santa>                               -->
+  <!-- #### -santaspeed  <santa_speed>                         -->
+  <!-- #### -nokeepsnow                                                -->
+  <!-- #### -nokeepsnowonwindows                               -->
+  <!-- #### -nokeepsnowonscreen                                        -->
+  <!-- #### -nonopopup                                         -->
+
+  <_description>
+Draws falling snow and the occasional tiny Santa.  By Rick Jansen.
+You can find it at &lt;http://www.euronet.nl/~rja/Xsnow/&gt;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xspirograph.xml b/hacks/config/xspirograph.xml
new file mode 100644 (file)
index 0000000..10dbee2
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xspirograph" _label="XSpiroGraph">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Duration" _low-label="1 Second" _high-label="1 Minute"
+          low="1" high="60" default="5"/>
+
+  <number id="layers" type="spinbutton" arg="-layers %"
+          _label="Layers" low="1" high="100" default="1"/>
+
+  <_description>
+Simulates that pen-in-nested-plastic-gears toy from your childhood.
+By Rohit Singh.
+  </_description>
+</screensaver>
diff --git a/hacks/config/xteevee.xml b/hacks/config/xteevee.xml
new file mode 100644 (file)
index 0000000..1725031
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="xteevee" _label="XTeeVee">
+
+  <command arg="-root"/>
+
+  <boolean id="cycle"  _label="Cycle Through Modes" arg-unset="-no-cycle"/>
+  <boolean id="static" _label="Static Enabled"      arg-unset="-no-static"/>
+  <boolean id="roll"   _label="Rolling Enabled"     arg-unset="-no-roll"/>
+  <boolean id="bars"   _label="Color Bars Enabled"  arg-unset="-no-bars"/>
+
+
+  <_description>
+XTeeVee simulates various television problems, including static,
+loss of vertical hold, and a test pattern.  By Greg Knauss.
+  </_description>
+</screensaver>
diff --git a/hacks/config/zoom.xml b/hacks/config/zoom.xml
new file mode 100644 (file)
index 0000000..bba28bc
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="zoom" _label="Zoom">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="20000" default="10000"
+          convert="invert"/>
+
+  <boolean id="lenses" _label="Lenses" arg-set="-lenses"/>
+
+  <hgroup>
+   <number id="pixwidth" type="spinbutton" arg="-pixwidth %"
+           _label="Magnification" low="2" high="100" default="10"/>
+   <number id="pixheight" type="spinbutton" arg="-pixheight %"
+           _label="x" low="2" high="100" default="10"/>
+  </hgroup>
+
+  <hgroup>
+   <number id="pixspacex" type="spinbutton" arg="-pixspacex %"
+           _label="Border Width" low="0" high="10" default="2"/>
+   <number id="pixspacey" type="spinbutton" arg="-pixspacey %"
+           _label="x" low="0" high="10" default="2"/>
+  </hgroup>
+
+  <hgroup>
+   <number id="lensoffsetx" type="spinbutton" arg="-lensoffsetx %"
+           _label="Lens Offset" low="1" high="100" default="1"/>
+   <number id="lensoffsety" type="spinbutton" arg="-lensoffsety %"
+           _label="x" low="1" high="100" default="1"/>
+  </hgroup>
+
+  <_description>
+Zooms in on a part of the screen and then moves around.  With the
+-lenses option the result is like looking through many overlapping
+lenses rather than just a simple zoom.  Written by James Macnicol.
+  </_description>
+</screensaver>
index 7041e5c4cccee352aca085963a35f2349d73d42a..3ce26cdd38541a1f049256b36f520d9d99e1a30e 100644 (file)
@@ -588,6 +588,7 @@ draw_crystal(ModeInfo * mi)
                crystalatom *atom0;
 
                atom0 = &cryst->atom[i];
+
                if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) {
                        XSetForeground(display, cryst->gc, cryst->colors[atom0->colour].pixel);
                } else {
@@ -807,7 +808,9 @@ release_crystal(ModeInfo * mi)
                                        free_colors(display, cryst->cmap, cryst->colors, cryst->ncolors);
                                if (cryst->colors)
                                        (void) free((void *) cryst->colors);
+#if 0 /* #### wrong! -jwz */
                                XFreeColormap(display, cryst->cmap);
+#endif
                        }
                        if (cryst->gc != NULL)
                                XFreeGC(display, cryst->gc);
@@ -851,9 +854,13 @@ init_crystal(ModeInfo * mi)
 #endif
                        cryst->blackpixel = MI_BLACK_PIXEL(mi);
                        cryst->whitepixel = MI_WHITE_PIXEL(mi);
+#if 0 /* #### wrong! -jwz */
                        cryst->cmap = XCreateColormap(display, window,
                                                   MI_VISUAL(mi), AllocNone);
                        XSetWindowColormap(display, window, cryst->cmap);
+#else
+            cryst->cmap = mi->xgwa.colormap;
+#endif
                        (void) XParseColor(display, cryst->cmap, "black", &color);
                        (void) XAllocColor(display, cryst->cmap, &color);
                        MI_BLACK_PIXEL(mi) = color.pixel;
@@ -1200,7 +1207,9 @@ init_crystal(ModeInfo * mi)
                                make_smooth_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
                                                     True, &cryst->cycle_p, True);
                }
+#if 0 /* #### wrong! -jwz */
                XInstallColormap(display, cryst->cmap);
+#endif
                if (cryst->ncolors < 2) {
                        cryst->ncolors = 2;
                        cryst->no_colors = True;
index 0bbc84862aa8f856180864f932389c71772aaada..bf34b316047741eca6aab952420b394e2d24efba 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999, 2001 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -222,6 +222,7 @@ char *defaults [] = {
   "*doubleBuffer:      True",
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   "*useDBE:            True",
+  "*useDBEClear:       True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
   0
 };
@@ -246,6 +247,7 @@ screenhack (Display *dpy, Window window)
   int delay = get_integer_resource ("delay", "Integer");
   int ncolors = get_integer_resource ("ncolors", "Integer");
   Bool dbuf = get_boolean_resource ("doubleBuffer", "Boolean");
+  Bool dbeclear_p = get_boolean_resource ("useDBEClear", "Boolean");
   XColor *colors = 0;
   XGCValues gcv;
   GC erase_gc = 0;
@@ -300,7 +302,11 @@ screenhack (Display *dpy, Window window)
   if (dbuf)
     {
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
-      b = backb = xdbe_get_backbuffer (dpy, window, XdbeUndefined);
+      if (dbeclear_p)
+        b = xdbe_get_backbuffer (dpy, window, XdbeBackground);
+      else
+        b = xdbe_get_backbuffer (dpy, window, XdbeUndefined);
+      backb = b;
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
 
       if (!b)
@@ -329,7 +335,8 @@ screenhack (Display *dpy, Window window)
 
   while (1)
     {
-      XFillRectangle (dpy, b, erase_gc, 0, 0, xgwa.width, xgwa.height);
+      if (!backb || !dbeclear_p)
+        XFillRectangle (dpy, b, erase_gc, 0, 0, xgwa.width, xgwa.height);
 
       for (i = 0; i < count; i++)
         if (throb (dpy, b, throbbers[i]) < 0)
@@ -341,7 +348,7 @@ screenhack (Display *dpy, Window window)
         {
           XdbeSwapInfo info[1];
           info[0].swap_window = window;
-          info[0].swap_action = XdbeUndefined;
+          info[0].swap_action = (dbeclear_p ? XdbeBackground : XdbeUndefined);
           XdbeSwapBuffers (dpy, info, 1);
         }
       else
index 97b4ffe829b1f4d76d72756a79905d4e45e36fb6..ffaaa53e6b186539bfac5a44d77f4a5c8f76bda1 100644 (file)
@@ -113,6 +113,8 @@ static void init_distort(Display *dpy, Window window)
        if (get_boolean_resource("bounce", "Boolean"))
                effect = &move_lense;
 
+       XGetWindowAttributes (dpy, window, &xgwa);
+
        if (effect == NULL && radius == 0 && speed == 0 && number == 0
                && !blackhole && !vortex && !magnify && !reflect) {
 /* if no cmdline options are given, randomly choose one of:
@@ -201,6 +203,9 @@ static void init_distort(Display *dpy, Window window)
                 abort(); break;
                }
 
+        /* but if the window is small, reduce default radius */
+        if (xgwa.width < radius * 8)
+          radius = xgwa.width/8;
        }
 
        if (delay < 0)
@@ -222,7 +227,6 @@ static void init_distort(Display *dpy, Window window)
        if (draw == NULL)
                draw = &plain_draw;
 
-       XGetWindowAttributes (dpy, window, &xgwa);
        black_pixel = BlackPixelOfScreen( xgwa.screen );
 
        gcv.function = GXcopy;
index cc99a4181f949ff9cb35deabf19ac1a5c1d42403..a824037eefc27f2cfa438a54af207fb75c50db2e 100644 (file)
@@ -77,7 +77,8 @@ SRCS          = xscreensaver-gl-helper.c \
                  extrusion-taper.c extrusion-twistoid.c sierpinski3d.c \
                  gflux.c stonerview.c stonerview-move.c stonerview-osc.c \
                  stonerview-view.c starwars.c glut_stroke.c glut_swidth.c \
-                 gltext.c molecule.c dangerball.c sphere.c tube.c circuit.c
+                 gltext.c molecule.c dangerball.c sphere.c tube.c circuit.c \
+                 menger.c engine.c flipscreen3d.c font-ximage.c grab-ximage.c
 
 OBJS           = xscreensaver-gl-helper.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
@@ -91,15 +92,17 @@ OBJS                = xscreensaver-gl-helper.o \
                  extrusion-taper.o extrusion-twistoid.o sierpinski3d.o \
                  gflux.o stonerview.o stonerview-move.o stonerview-osc.o \
                  stonerview-view.o starwars.o glut_stroke.o glut_swidth.o \
-                 gltext.o molecule.o dangerball.o sphere.o tube.o circuit.o
+                 gltext.o molecule.o dangerball.o sphere.o tube.o circuit.o \
+                 menger.o engine.o flipscreen3d.o font-ximage.o grab-ximage.o
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
                  sierpinski3d gflux stonerview starwars gltext molecule \
-                 dangerball circuit
+                 dangerball circuit menger engine flipscreen3d
 GLE_EXES       = extrusion
 GL_UTIL_EXES   = xscreensaver-gl-helper
 HACK_EXES      = @GL_EXES@ @GLE_EXES@
+GRAB_OBJS      = $(UTILS_BIN)/grabclient.o grab-ximage.o
 EXES           = @GL_UTIL_EXES@ $(HACK_EXES)
 
 HACK_OBJS      = screenhack-gl.o xlock-gl.o fps.o $(HACK_BIN)/xlockmore.o \
@@ -109,8 +112,8 @@ HACK_OBJS   = screenhack-gl.o xlock-gl.o fps.o $(HACK_BIN)/xlockmore.o \
                  $(UTILS_BIN)/colors.o
 
 HDRS           = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \
-                 tube.h sphere.h stonerview-move.h stonerview-osc.h \
-                 glutstroke.h glut_roman.h
+                 grab-ximage.h font-ximage.h tube.h sphere.h \
+                 stonerview-move.h stonerview-osc.h glutstroke.h glut_roman.h
 GL_MEN         = gflux.man lament.man starwars.man gltext.man \
                  molecule.man xscreensaver-gl-helper.man
 MEN            = @GL_MEN@
@@ -340,8 +343,8 @@ extrusion:  $(EXTRUSION_OBJS) $(HACK_OBJS)
 sierpinski3d:  sierpinski3d.o  $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
 
-gflux:         gflux.o         $(HACK_OBJS)
-       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
+gflux:         gflux.o         $(HACK_OBJS) $(GRAB_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(GRAB_OBJS) $(HACK_LIBS)
 
 SW_OBJS=starwars.o glut_stroke.o glut_swidth.o
 starwars:      $(SW_OBJS) $(HACK_OBJS)
@@ -354,9 +357,19 @@ gltext:    $(GLT_OBJS) $(HACK_OBJS)
 dangerball:    dangerball.o    sphere.o tube.o $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   sphere.o tube.o $(HACK_OBJS) $(HACK_LIBS)
 
-circuit:       circuit.o       $(HACK_OBJS)
+circuit:       circuit.o       $(HACK_OBJS) font-ximage.o
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) font-ximage.o $(HACK_LIBS)
+
+menger:                menger.o        $(HACK_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
+
+engine:                engine.o        $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
 
+flipscreen3d:  flipscreen3d.o  $(HACK_OBJS) $(GRAB_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(GRAB_OBJS) $(HACK_LIBS)
+
+
 # This one works differently (it's not xlock-like.)
 #
 STONER_OBJS=stonerview.o stonerview-move.o stonerview-osc.o stonerview-view.o \
@@ -386,165 +399,34 @@ dnalogo: dnalogo.o       tube.o $(HACK_OBJS)
 # DO NOT DELETE: updated by make distdepend
 # $(srcdir)/DO $(srcdir)/NOT $(srcdir)/DELETE: $(srcdir)/updated $(srcdir)/by $(srcdir)/make $(srcdir)/distdepend
 
-xscreensaver-gl-helper.o: $(UTILS_SRC)/utils.h
 xscreensaver-gl-helper.o: ../../config.h
-xscreensaver-gl-helper.o: $(UTILS_SRC)/visual.h
-atlantis.o: $(HACK_SRC)/xlockmore.h
 atlantis.o: ../../config.h
-atlantis.o: $(HACK_SRC)/xlockmoreI.h
-atlantis.o: $(HACK_SRC)/screenhack.h
-atlantis.o: $(UTILS_SRC)/yarandom.h
-atlantis.o: $(UTILS_SRC)/usleep.h
-atlantis.o: $(UTILS_SRC)/resources.h
-atlantis.o: $(UTILS_SRC)/hsv.h
-atlantis.o: $(UTILS_SRC)/colors.h
-atlantis.o: $(UTILS_SRC)/grabscreen.h
-atlantis.o: $(UTILS_SRC)/visual.h
-atlantis.o: $(UTILS_SRC)/xshm.h
 atlantis.o: $(srcdir)/atlantis.h
 atlantis.o: $(srcdir)/xpm-ximage.h
 atlantis.o: $(HACK_SRC)/images/sea-texture.xpm
 b_draw.o: $(srcdir)/bubble3d.h
-b_draw.o: $(HACK_SRC)/xlockmoreI.h
-b_draw.o: $(HACK_SRC)/screenhack.h
 b_draw.o: ../../config.h
-b_draw.o: $(UTILS_SRC)/yarandom.h
-b_draw.o: $(UTILS_SRC)/usleep.h
-b_draw.o: $(UTILS_SRC)/resources.h
-b_draw.o: $(UTILS_SRC)/hsv.h
-b_draw.o: $(UTILS_SRC)/colors.h
-b_draw.o: $(UTILS_SRC)/grabscreen.h
-b_draw.o: $(UTILS_SRC)/visual.h
-b_draw.o: $(UTILS_SRC)/xshm.h
 b_lockglue.o: $(srcdir)/bubble3d.h
-b_lockglue.o: $(HACK_SRC)/xlockmoreI.h
-b_lockglue.o: $(HACK_SRC)/screenhack.h
 b_lockglue.o: ../../config.h
-b_lockglue.o: $(UTILS_SRC)/yarandom.h
-b_lockglue.o: $(UTILS_SRC)/usleep.h
-b_lockglue.o: $(UTILS_SRC)/resources.h
-b_lockglue.o: $(UTILS_SRC)/hsv.h
-b_lockglue.o: $(UTILS_SRC)/colors.h
-b_lockglue.o: $(UTILS_SRC)/grabscreen.h
-b_lockglue.o: $(UTILS_SRC)/visual.h
-b_lockglue.o: $(UTILS_SRC)/xshm.h
-b_lockglue.o: $(HACK_SRC)/xlockmore.h
 b_sphere.o: $(srcdir)/bubble3d.h
-b_sphere.o: $(HACK_SRC)/xlockmoreI.h
-b_sphere.o: $(HACK_SRC)/screenhack.h
 b_sphere.o: ../../config.h
-b_sphere.o: $(UTILS_SRC)/yarandom.h
-b_sphere.o: $(UTILS_SRC)/usleep.h
-b_sphere.o: $(UTILS_SRC)/resources.h
-b_sphere.o: $(UTILS_SRC)/hsv.h
-b_sphere.o: $(UTILS_SRC)/colors.h
-b_sphere.o: $(UTILS_SRC)/grabscreen.h
-b_sphere.o: $(UTILS_SRC)/visual.h
-b_sphere.o: $(UTILS_SRC)/xshm.h
 bubble3d.o: $(srcdir)/bubble3d.h
-bubble3d.o: $(HACK_SRC)/xlockmoreI.h
-bubble3d.o: $(HACK_SRC)/screenhack.h
 bubble3d.o: ../../config.h
-bubble3d.o: $(UTILS_SRC)/yarandom.h
-bubble3d.o: $(UTILS_SRC)/usleep.h
-bubble3d.o: $(UTILS_SRC)/resources.h
-bubble3d.o: $(UTILS_SRC)/hsv.h
-bubble3d.o: $(UTILS_SRC)/colors.h
-bubble3d.o: $(UTILS_SRC)/grabscreen.h
-bubble3d.o: $(UTILS_SRC)/visual.h
-bubble3d.o: $(UTILS_SRC)/xshm.h
 buildlwo.o: $(srcdir)/buildlwo.h
-cage.o: $(HACK_SRC)/xlockmore.h
 cage.o: ../../config.h
-cage.o: $(HACK_SRC)/xlockmoreI.h
-cage.o: $(HACK_SRC)/screenhack.h
-cage.o: $(UTILS_SRC)/yarandom.h
-cage.o: $(UTILS_SRC)/usleep.h
-cage.o: $(UTILS_SRC)/resources.h
-cage.o: $(UTILS_SRC)/hsv.h
-cage.o: $(UTILS_SRC)/colors.h
-cage.o: $(UTILS_SRC)/grabscreen.h
-cage.o: $(UTILS_SRC)/visual.h
-cage.o: $(UTILS_SRC)/xshm.h
 cage.o: $(srcdir)/e_textures.h
 dolphin.o: $(srcdir)/atlantis.h
-gears.o: $(HACK_SRC)/xlockmore.h
 gears.o: ../../config.h
-gears.o: $(HACK_SRC)/xlockmoreI.h
-gears.o: $(HACK_SRC)/screenhack.h
-gears.o: $(UTILS_SRC)/yarandom.h
-gears.o: $(UTILS_SRC)/usleep.h
-gears.o: $(UTILS_SRC)/resources.h
-gears.o: $(UTILS_SRC)/hsv.h
-gears.o: $(UTILS_SRC)/colors.h
-gears.o: $(UTILS_SRC)/grabscreen.h
-gears.o: $(UTILS_SRC)/visual.h
-gears.o: $(UTILS_SRC)/xshm.h
-lament.o: $(HACK_SRC)/xlockmore.h
 lament.o: ../../config.h
-lament.o: $(HACK_SRC)/xlockmoreI.h
-lament.o: $(HACK_SRC)/screenhack.h
-lament.o: $(UTILS_SRC)/yarandom.h
-lament.o: $(UTILS_SRC)/usleep.h
-lament.o: $(UTILS_SRC)/resources.h
-lament.o: $(UTILS_SRC)/hsv.h
-lament.o: $(UTILS_SRC)/colors.h
-lament.o: $(UTILS_SRC)/grabscreen.h
-lament.o: $(UTILS_SRC)/visual.h
-lament.o: $(UTILS_SRC)/xshm.h
 lament.o: $(srcdir)/xpm-ximage.h
 lament.o: $(HACK_SRC)/images/lament.xpm
-moebius.o: $(HACK_SRC)/xlockmore.h
 moebius.o: ../../config.h
-moebius.o: $(HACK_SRC)/xlockmoreI.h
-moebius.o: $(HACK_SRC)/screenhack.h
-moebius.o: $(UTILS_SRC)/yarandom.h
-moebius.o: $(UTILS_SRC)/usleep.h
-moebius.o: $(UTILS_SRC)/resources.h
-moebius.o: $(UTILS_SRC)/hsv.h
-moebius.o: $(UTILS_SRC)/colors.h
-moebius.o: $(UTILS_SRC)/grabscreen.h
-moebius.o: $(UTILS_SRC)/visual.h
-moebius.o: $(UTILS_SRC)/xshm.h
 moebius.o: $(srcdir)/e_textures.h
-morph3d.o: $(HACK_SRC)/xlockmore.h
 morph3d.o: ../../config.h
-morph3d.o: $(HACK_SRC)/xlockmoreI.h
-morph3d.o: $(HACK_SRC)/screenhack.h
-morph3d.o: $(UTILS_SRC)/yarandom.h
-morph3d.o: $(UTILS_SRC)/usleep.h
-morph3d.o: $(UTILS_SRC)/resources.h
-morph3d.o: $(UTILS_SRC)/hsv.h
-morph3d.o: $(UTILS_SRC)/colors.h
-morph3d.o: $(UTILS_SRC)/grabscreen.h
-morph3d.o: $(UTILS_SRC)/visual.h
-morph3d.o: $(UTILS_SRC)/xshm.h
 pipeobjs.o: $(srcdir)/buildlwo.h
-pipes.o: $(HACK_SRC)/xlockmore.h
 pipes.o: ../../config.h
-pipes.o: $(HACK_SRC)/xlockmoreI.h
-pipes.o: $(HACK_SRC)/screenhack.h
-pipes.o: $(UTILS_SRC)/yarandom.h
-pipes.o: $(UTILS_SRC)/usleep.h
-pipes.o: $(UTILS_SRC)/resources.h
-pipes.o: $(UTILS_SRC)/hsv.h
-pipes.o: $(UTILS_SRC)/colors.h
-pipes.o: $(UTILS_SRC)/grabscreen.h
-pipes.o: $(UTILS_SRC)/visual.h
-pipes.o: $(UTILS_SRC)/xshm.h
 pipes.o: $(srcdir)/buildlwo.h
-rubik.o: $(HACK_SRC)/xlockmore.h
 rubik.o: ../../config.h
-rubik.o: $(HACK_SRC)/xlockmoreI.h
-rubik.o: $(HACK_SRC)/screenhack.h
-rubik.o: $(UTILS_SRC)/yarandom.h
-rubik.o: $(UTILS_SRC)/usleep.h
-rubik.o: $(UTILS_SRC)/resources.h
-rubik.o: $(UTILS_SRC)/hsv.h
-rubik.o: $(UTILS_SRC)/colors.h
-rubik.o: $(UTILS_SRC)/grabscreen.h
-rubik.o: $(UTILS_SRC)/visual.h
-rubik.o: $(UTILS_SRC)/xshm.h
 s1_1.o: $(srcdir)/buildlwo.h
 s1_2.o: $(srcdir)/buildlwo.h
 s1_3.o: $(srcdir)/buildlwo.h
@@ -553,130 +435,24 @@ s1_5.o: $(srcdir)/buildlwo.h
 s1_6.o: $(srcdir)/buildlwo.h
 s1_b.o: $(srcdir)/buildlwo.h
 shark.o: $(srcdir)/atlantis.h
-sproingies.o: $(HACK_SRC)/xlockmoreI.h
-sproingies.o: $(HACK_SRC)/screenhack.h
 sproingies.o: ../../config.h
-sproingies.o: $(UTILS_SRC)/yarandom.h
-sproingies.o: $(UTILS_SRC)/usleep.h
-sproingies.o: $(UTILS_SRC)/resources.h
-sproingies.o: $(UTILS_SRC)/hsv.h
-sproingies.o: $(UTILS_SRC)/colors.h
-sproingies.o: $(UTILS_SRC)/grabscreen.h
-sproingies.o: $(UTILS_SRC)/visual.h
-sproingies.o: $(UTILS_SRC)/xshm.h
 sproingies.o: $(srcdir)/buildlwo.h
-sproingiewrap.o: $(HACK_SRC)/xlockmore.h
 sproingiewrap.o: ../../config.h
-sproingiewrap.o: $(HACK_SRC)/xlockmoreI.h
-sproingiewrap.o: $(HACK_SRC)/screenhack.h
-sproingiewrap.o: $(UTILS_SRC)/yarandom.h
-sproingiewrap.o: $(UTILS_SRC)/usleep.h
-sproingiewrap.o: $(UTILS_SRC)/resources.h
-sproingiewrap.o: $(UTILS_SRC)/hsv.h
-sproingiewrap.o: $(UTILS_SRC)/colors.h
-sproingiewrap.o: $(UTILS_SRC)/grabscreen.h
-sproingiewrap.o: $(UTILS_SRC)/visual.h
-sproingiewrap.o: $(UTILS_SRC)/xshm.h
-stairs.o: $(HACK_SRC)/xlockmore.h
 stairs.o: ../../config.h
-stairs.o: $(HACK_SRC)/xlockmoreI.h
-stairs.o: $(HACK_SRC)/screenhack.h
-stairs.o: $(UTILS_SRC)/yarandom.h
-stairs.o: $(UTILS_SRC)/usleep.h
-stairs.o: $(UTILS_SRC)/resources.h
-stairs.o: $(UTILS_SRC)/hsv.h
-stairs.o: $(UTILS_SRC)/colors.h
-stairs.o: $(UTILS_SRC)/grabscreen.h
-stairs.o: $(UTILS_SRC)/visual.h
-stairs.o: $(UTILS_SRC)/xshm.h
 stairs.o: $(srcdir)/e_textures.h
-superquadrics.o: $(HACK_SRC)/xlockmore.h
 superquadrics.o: ../../config.h
-superquadrics.o: $(HACK_SRC)/xlockmoreI.h
-superquadrics.o: $(HACK_SRC)/screenhack.h
-superquadrics.o: $(UTILS_SRC)/yarandom.h
-superquadrics.o: $(UTILS_SRC)/usleep.h
-superquadrics.o: $(UTILS_SRC)/resources.h
-superquadrics.o: $(UTILS_SRC)/hsv.h
-superquadrics.o: $(UTILS_SRC)/colors.h
-superquadrics.o: $(UTILS_SRC)/grabscreen.h
-superquadrics.o: $(UTILS_SRC)/visual.h
-superquadrics.o: $(UTILS_SRC)/xshm.h
-swim.o: $(HACK_SRC)/xlockmoreI.h
-swim.o: $(HACK_SRC)/screenhack.h
 swim.o: ../../config.h
-swim.o: $(UTILS_SRC)/yarandom.h
-swim.o: $(UTILS_SRC)/usleep.h
-swim.o: $(UTILS_SRC)/resources.h
-swim.o: $(UTILS_SRC)/hsv.h
-swim.o: $(UTILS_SRC)/colors.h
-swim.o: $(UTILS_SRC)/grabscreen.h
-swim.o: $(UTILS_SRC)/visual.h
-swim.o: $(UTILS_SRC)/xshm.h
 swim.o: $(srcdir)/atlantis.h
 whale.o: $(srcdir)/atlantis.h
-xlock-gl.o: $(HACK_SRC)/screenhack.h
 xlock-gl.o: ../../config.h
-xlock-gl.o: $(UTILS_SRC)/yarandom.h
-xlock-gl.o: $(UTILS_SRC)/usleep.h
-xlock-gl.o: $(UTILS_SRC)/resources.h
-xlock-gl.o: $(UTILS_SRC)/hsv.h
-xlock-gl.o: $(UTILS_SRC)/colors.h
-xlock-gl.o: $(UTILS_SRC)/grabscreen.h
-xlock-gl.o: $(UTILS_SRC)/visual.h
-xlock-gl.o: $(HACK_SRC)/xlockmoreI.h
-xlock-gl.o: $(UTILS_SRC)/xshm.h
 fps.o: ../../config.h
-fps.o: $(HACK_SRC)/screenhack.h
-fps.o: $(UTILS_SRC)/yarandom.h
-fps.o: $(UTILS_SRC)/usleep.h
-fps.o: $(UTILS_SRC)/resources.h
-fps.o: $(UTILS_SRC)/hsv.h
-fps.o: $(UTILS_SRC)/colors.h
-fps.o: $(UTILS_SRC)/grabscreen.h
-fps.o: $(UTILS_SRC)/visual.h
-fps.o: $(HACK_SRC)/xlockmoreI.h
-fps.o: $(UTILS_SRC)/xshm.h
 xpm-ximage.o: ../../config.h
-glplanet.o: $(HACK_SRC)/xlockmore.h
 glplanet.o: ../../config.h
-glplanet.o: $(HACK_SRC)/xlockmoreI.h
-glplanet.o: $(HACK_SRC)/screenhack.h
-glplanet.o: $(UTILS_SRC)/yarandom.h
-glplanet.o: $(UTILS_SRC)/usleep.h
-glplanet.o: $(UTILS_SRC)/resources.h
-glplanet.o: $(UTILS_SRC)/hsv.h
-glplanet.o: $(UTILS_SRC)/colors.h
-glplanet.o: $(UTILS_SRC)/grabscreen.h
-glplanet.o: $(UTILS_SRC)/visual.h
-glplanet.o: $(UTILS_SRC)/xshm.h
 glplanet.o: $(srcdir)/sphere.h
 glplanet.o: $(HACK_SRC)/images/earth.xbm
 glplanet.o: $(srcdir)/xpm-ximage.h
-pulsar.o: $(HACK_SRC)/xlockmore.h
 pulsar.o: ../../config.h
-pulsar.o: $(HACK_SRC)/xlockmoreI.h
-pulsar.o: $(HACK_SRC)/screenhack.h
-pulsar.o: $(UTILS_SRC)/yarandom.h
-pulsar.o: $(UTILS_SRC)/usleep.h
-pulsar.o: $(UTILS_SRC)/resources.h
-pulsar.o: $(UTILS_SRC)/hsv.h
-pulsar.o: $(UTILS_SRC)/colors.h
-pulsar.o: $(UTILS_SRC)/grabscreen.h
-pulsar.o: $(UTILS_SRC)/visual.h
-pulsar.o: $(UTILS_SRC)/xshm.h
 extrusion.o: ../../config.h
-extrusion.o: $(HACK_SRC)/xlockmore.h
-extrusion.o: $(HACK_SRC)/xlockmoreI.h
-extrusion.o: $(HACK_SRC)/screenhack.h
-extrusion.o: $(UTILS_SRC)/yarandom.h
-extrusion.o: $(UTILS_SRC)/usleep.h
-extrusion.o: $(UTILS_SRC)/resources.h
-extrusion.o: $(UTILS_SRC)/hsv.h
-extrusion.o: $(UTILS_SRC)/colors.h
-extrusion.o: $(UTILS_SRC)/grabscreen.h
-extrusion.o: $(UTILS_SRC)/visual.h
-extrusion.o: $(UTILS_SRC)/xshm.h
 extrusion-helix2.o: ../../config.h
 extrusion-helix3.o: ../../config.h
 extrusion-helix4.o: ../../config.h
@@ -684,122 +460,47 @@ extrusion-joinoffset.o: ../../config.h
 extrusion-screw.o: ../../config.h
 extrusion-taper.o: ../../config.h
 extrusion-twistoid.o: ../../config.h
-sierpinski3d.o: $(HACK_SRC)/xlockmore.h
 sierpinski3d.o: ../../config.h
-sierpinski3d.o: $(HACK_SRC)/xlockmoreI.h
-sierpinski3d.o: $(HACK_SRC)/screenhack.h
-sierpinski3d.o: $(UTILS_SRC)/yarandom.h
-sierpinski3d.o: $(UTILS_SRC)/usleep.h
-sierpinski3d.o: $(UTILS_SRC)/resources.h
-sierpinski3d.o: $(UTILS_SRC)/hsv.h
-sierpinski3d.o: $(UTILS_SRC)/colors.h
-sierpinski3d.o: $(UTILS_SRC)/grabscreen.h
-sierpinski3d.o: $(UTILS_SRC)/visual.h
-sierpinski3d.o: $(UTILS_SRC)/xshm.h
-gflux.o: $(HACK_SRC)/xlockmore.h
 gflux.o: ../../config.h
-gflux.o: $(HACK_SRC)/xlockmoreI.h
-gflux.o: $(HACK_SRC)/screenhack.h
-gflux.o: $(UTILS_SRC)/yarandom.h
-gflux.o: $(UTILS_SRC)/usleep.h
-gflux.o: $(UTILS_SRC)/resources.h
-gflux.o: $(UTILS_SRC)/hsv.h
-gflux.o: $(UTILS_SRC)/colors.h
-gflux.o: $(UTILS_SRC)/grabscreen.h
-gflux.o: $(UTILS_SRC)/visual.h
-gflux.o: $(UTILS_SRC)/xshm.h
+gflux.o: $(srcdir)/grab-ximage.h
 stonerview.o: ../../config.h
-stonerview.o: $(UTILS_SRC)/yarandom.h
 stonerview.o: $(srcdir)/stonerview-move.h
 stonerview-move.o: ../../config.h
-stonerview-move.o: $(UTILS_SRC)/yarandom.h
 stonerview-move.o: $(srcdir)/stonerview-osc.h
 stonerview-move.o: $(srcdir)/stonerview-move.h
 stonerview-osc.o: ../../config.h
-stonerview-osc.o: $(UTILS_SRC)/yarandom.h
 stonerview-osc.o: $(srcdir)/stonerview-osc.h
 stonerview-view.o: ../../config.h
-stonerview-view.o: $(UTILS_SRC)/vroot.h
-stonerview-view.o: $(UTILS_SRC)/version.h
-stonerview-view.o: $(UTILS_SRC)/yarandom.h
 stonerview-view.o: $(srcdir)/stonerview-osc.h
 stonerview-view.o: $(srcdir)/stonerview-move.h
-starwars.o: $(HACK_SRC)/xlockmore.h
 starwars.o: ../../config.h
-starwars.o: $(HACK_SRC)/xlockmoreI.h
-starwars.o: $(HACK_SRC)/screenhack.h
-starwars.o: $(UTILS_SRC)/yarandom.h
-starwars.o: $(UTILS_SRC)/usleep.h
-starwars.o: $(UTILS_SRC)/resources.h
-starwars.o: $(UTILS_SRC)/hsv.h
-starwars.o: $(UTILS_SRC)/colors.h
-starwars.o: $(UTILS_SRC)/grabscreen.h
-starwars.o: $(UTILS_SRC)/visual.h
-starwars.o: $(UTILS_SRC)/xshm.h
 starwars.o: $(srcdir)/glutstroke.h
 starwars.o: $(srcdir)/glut_roman.h
 glut_stroke.o: ../../config.h
 glut_stroke.o: $(srcdir)/glutstroke.h
 glut_swidth.o: ../../config.h
 glut_swidth.o: $(srcdir)/glutstroke.h
-gltext.o: $(HACK_SRC)/xlockmore.h
 gltext.o: ../../config.h
-gltext.o: $(HACK_SRC)/xlockmoreI.h
-gltext.o: $(HACK_SRC)/screenhack.h
-gltext.o: $(UTILS_SRC)/yarandom.h
-gltext.o: $(UTILS_SRC)/usleep.h
-gltext.o: $(UTILS_SRC)/resources.h
-gltext.o: $(UTILS_SRC)/hsv.h
-gltext.o: $(UTILS_SRC)/colors.h
-gltext.o: $(UTILS_SRC)/grabscreen.h
-gltext.o: $(UTILS_SRC)/visual.h
-gltext.o: $(UTILS_SRC)/xshm.h
 gltext.o: $(srcdir)/tube.h
 gltext.o: $(srcdir)/glutstroke.h
 gltext.o: $(srcdir)/glut_roman.h
-molecule.o: $(HACK_SRC)/xlockmore.h
 molecule.o: ../../config.h
-molecule.o: $(HACK_SRC)/xlockmoreI.h
-molecule.o: $(HACK_SRC)/screenhack.h
-molecule.o: $(UTILS_SRC)/yarandom.h
-molecule.o: $(UTILS_SRC)/usleep.h
-molecule.o: $(UTILS_SRC)/resources.h
-molecule.o: $(UTILS_SRC)/hsv.h
-molecule.o: $(UTILS_SRC)/colors.h
-molecule.o: $(UTILS_SRC)/grabscreen.h
-molecule.o: $(UTILS_SRC)/visual.h
-molecule.o: $(UTILS_SRC)/xshm.h
 molecule.o: $(srcdir)/sphere.h
 molecule.o: $(srcdir)/tube.h
 molecule.o: molecules.h
-dangerball.o: $(HACK_SRC)/xlockmore.h
 dangerball.o: ../../config.h
-dangerball.o: $(HACK_SRC)/xlockmoreI.h
-dangerball.o: $(HACK_SRC)/screenhack.h
-dangerball.o: $(UTILS_SRC)/yarandom.h
-dangerball.o: $(UTILS_SRC)/usleep.h
-dangerball.o: $(UTILS_SRC)/resources.h
-dangerball.o: $(UTILS_SRC)/hsv.h
-dangerball.o: $(UTILS_SRC)/colors.h
-dangerball.o: $(UTILS_SRC)/grabscreen.h
-dangerball.o: $(UTILS_SRC)/visual.h
-dangerball.o: $(UTILS_SRC)/xshm.h
 dangerball.o: $(srcdir)/sphere.h
 dangerball.o: $(srcdir)/tube.h
 sphere.o: ../../config.h
 sphere.o: $(srcdir)/tube.h
 tube.o: ../../config.h
 tube.o: $(srcdir)/tube.h
-circuit.o: $(HACK_SRC)/xlockmore.h
 circuit.o: ../../config.h
-circuit.o: $(HACK_SRC)/xlockmoreI.h
-circuit.o: $(HACK_SRC)/screenhack.h
-circuit.o: $(UTILS_SRC)/yarandom.h
-circuit.o: $(UTILS_SRC)/usleep.h
-circuit.o: $(UTILS_SRC)/resources.h
-circuit.o: $(UTILS_SRC)/hsv.h
-circuit.o: $(UTILS_SRC)/colors.h
-circuit.o: $(UTILS_SRC)/grabscreen.h
-circuit.o: $(UTILS_SRC)/visual.h
-circuit.o: $(UTILS_SRC)/xshm.h
+circuit.o: $(srcdir)/font-ximage.h
+menger.o: ../../config.h
+engine.o: ../../config.h
+flipscreen3d.o: ../../config.h
+flipscreen3d.o: $(srcdir)/grab-ximage.h
+font-ximage.o: ../../config.h
+grab-ximage.o: ../../config.h
 
index e3641506dae448bc23b5632fffd60a0befddbada..a2983bcd718f641990dfacf0e82ec715e945bd7b 100644 (file)
@@ -84,8 +84,7 @@ static const char sccsid[] = "@(#)cage.c      4.07 98/01/04 xlockmore";
 # define HACK_DRAW                     draw_cage
 # define HACK_RESHAPE                  reshape_cage
 # define cage_opts                     xlockmore_opts
-# define DEFAULTS                      "*cycles:               1       \n"                     \
-                                                       "*delay:                25000   \n"                     \
+# define DEFAULTS                      "*delay:                25000   \n"                     \
                                                        "*showFPS:      False   \n"                     \
                                                        "*wireframe:    False   \n"
 # include "xlockmore.h"                /* from the xscreensaver distribution */
index 867ccb9279b7958e56388e6177b6acd4885f40fa..0c28e9fb7a735097f26a22ff6606aedbfe5a87f3 100644 (file)
@@ -1,10 +1,12 @@
 /*
  * circuit - Random electronic components floating around
  *
- * version 1.3
+ * version 1.4
  *
  * Since version 1.1: added to-220 transistor, added fuse
  * Since version 1.2: random display digits, LED improvements (flickering)
+ * Since version 1.3: ICs look better, font textures, improved normals to
+ *                    eliminate segmenting on curved surfaces, speedups
  *
  * Copyright (C) 2001 Ben Buxton (bb@cactii.net)
  *
@@ -49,6 +51,7 @@
                         "*seven:      " DEF_SEVEN  "\n" \
                         "*light:      True  \n" \
                         "*rotate:      False\n" \
+                        "*font:      fixed\n" \
                         "*rotatespeed:      1\n" \
 
 # include "xlockmore.h"                         /* from the xscreensaver distribution */
 #ifdef USE_GL
 
 #include <GL/glu.h>
+#include "font-ximage.h"
 
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
 
 static int maxparts;
 static int spin;
@@ -72,6 +78,7 @@ static int seven;
 static int rotate;
 static int rotatespeed;
 static int uselight;
+static char *font;
 int def_parts = 10;
 
 #undef countof
@@ -79,6 +86,7 @@ int def_parts = 10;
 
 static XrmOptionDescRec opts[] = {
   {"-parts", ".circuit.parts", XrmoptionSepArg, "10" },
+  {"-font", ".circuit.font", XrmoptionSepArg, "fixed" },
   {"-rotate-speed", ".circuit.rotatespeed", XrmoptionSepArg, "1" },
   {"+spin", ".circuit.spin", XrmoptionNoArg, (caddr_t) "false" },
   {"-spin", ".circuit.spin", XrmoptionNoArg, (caddr_t) "true" },
@@ -92,6 +100,7 @@ static XrmOptionDescRec opts[] = {
 
 static argtype vars[] = {
   {(caddr_t *) &maxparts, "parts", "Parts", DEF_PARTS, t_Int},
+  {(caddr_t *) &font, "font", "Font", "fixed", t_String},
   {(caddr_t *) &rotatespeed, "rotatespeed", "Rotatespeed", "1", t_Int},
   {(caddr_t *) &spin, "spin", "Spin", DEF_SPIN, t_Bool},
   {(caddr_t *) &rotate, "rotate", "Rotate", "False", t_Bool},
@@ -156,6 +165,14 @@ float sin_table[720];
 float cos_table[720];
 float tan_table[720];
 
+ModeInfo *modeinfo;
+
+/* used for allocating font textures */
+typedef struct {
+  int num; /* index number */
+  int w;   /* width */
+  int h;   /* height */
+} TexNum;
 
 /* Represents a band on a resistor/diode/etc */
 typedef struct {
@@ -174,8 +191,26 @@ typedef struct {
   GLfloat r, g, b; /* body colour */
 } Diode;
 
+static const char * transistortypes[] = {
+  "TIP2955",
+  "TIP32C",
+  "LM 350T",
+  "IRF730",
+  "ULN2577",
+  "7805T",
+  "7912T",
+  "TIP120",
+  "2N6401",
+  "BD239",
+  "2SC1590",
+  "MRF485",
+  "SC141D"
+};
+
 typedef struct {
   int type; /* package type. 0 = to-92, 1 = to-220 */
+  GLfloat tw, th; /* texture dimensions */
+  int tnum; /* texture binding */
 } Transistor;
 
 typedef struct {
@@ -189,9 +224,58 @@ typedef struct {
   float length; /* length of an electro */
 } Capacitor;
 
+typedef struct {
+  int pins;
+  const char *val;
+} ICTypes;
+
+static const ICTypes ictypes[] = {
+  {8, "NE 555"},
+  {8, "LM 386N"},
+  {8, "ADC0831"},
+  {8, "LM 383T"},
+  {8, "TL071"},
+  {8, "LM 311"},
+  {8, "LM393"},
+  {8, "LM 3909"},
+
+  {14, "LM 380N"},
+  {14, "NE 556"},
+  {14, "TL074"},
+  {14, "LM324"},
+  {14, "LM339"},
+  {14, "MC1488"},
+  {14, "MC1489"},
+  {14, "LM1877-9"},
+  {14, "4011"},
+  {14, "4017"},
+  {14, "4013"},
+  {14, "4024"},
+  {14, "4066"},
+
+  {16, "4076"},
+  {16, "4049"},
+  {16, "4094"},
+  {16, "4043"},
+  {16, "4510"},
+  {16, "4511"},
+  {16, "4035"},
+  {16, "RS232"},
+  {16, "MC1800"},
+  {16, "ULN2081"},
+  {16, "UDN2953"},
+
+  {24, "ISD1416P"},
+  {24, "4515"},
+  {24, "TMS6264L"},
+  {24, "MC146818"}
+};
+
 typedef struct {
   int type; /* 0 = DIL, 1 = flat square */
   int pins; 
+  float tw, th; /* texture dimensions for markings */
+  int tnum; /* texture number */
 } IC;
 
 /* 7 segment display */
@@ -262,6 +346,7 @@ void DrawFuse(Fuse *);
 void reorder(Component *[]);
 void circle(float, int,int);
 void bandedCylinder(float, float , GLfloat, GLfloat , GLfloat,  Band **, int);
+TexNum *fonttexturealloc(const char *, float *, float *);
 Resistor *NewResistor(void);
 Diode *NewDiode(void);
 Transistor *NewTransistor(void);
@@ -292,18 +377,21 @@ float f;
 }
 
 
-void createCylinder (float length, float radius, int endcaps, int half) {
-int a; /* current angle around cylinder */
-int angle, norm;
-float z1, y1, z2, y2, ex;
-int nsegs;
+void createCylinder (float length, float radius, int endcaps, int half) 
+{
+  int a; /* current angle around cylinder */
+  int angle, norm;
+  float z1, y1, z2, y2,ex;
+  int step;
+  int nsegs;
 
   glPushMatrix();
-  nsegs = radius*MAX(win_w, win_h)/10;
-  nsegs = MAX(nsegs, 6);
+  nsegs = radius*MAX(win_w, win_h)/20;
+  nsegs = MAX(nsegs, 4);
   if (nsegs % 2)
      nsegs += 1;
   angle = (half) ? (180 - 90/nsegs) : 374;
+  step = angle/nsegs;
   z1 = radius; y1 = 0;
   glBegin(GL_QUADS);
   for (a = 0 ; a <= angle ; a+= angle/nsegs) {
@@ -312,6 +400,7 @@ int nsegs;
       glNormal3f(0, y1, z1);
       glVertex3f(0,y1,z1);
       glVertex3f(length,y1,z1);
+      glNormal3f(0, y2, z2);
       glVertex3f(length,y2,z2);
       glVertex3f(0,y2,z2);
     z1=z2;
@@ -331,27 +420,28 @@ int nsegs;
     for(ex = 0 ; ex <= length ; ex += length) {
       z1 = radius; y1 = 0;
       norm = (ex == length) ? 1 : -1;
+      glBegin(GL_TRIANGLES);
+      glNormal3f(norm, 0, 0);
       for (a = 0 ; a <= angle ; a+= angle/nsegs) {
         y2=radius*(float)sin_table[(int)a];
         z2=radius*(float)cos_table[(int)a];
-        glBegin(GL_TRIANGLES);
-          glNormal3f(norm, 0, 0);
           glVertex3f(ex,0, 0);
           glVertex3f(ex,y1,z1);
           glVertex3f(ex,y2,z2);
-        glEnd();
         z1=z2;
         y1=y2;
       }
+      glEnd();
     }
   }
   glPopMatrix();
 }
 
-void circle(float radius, int segments, int half) {
-float x1 = 0, x2 = 0;
-float y1 = 0, y2 = 0;
-int i, t, s;
+void circle(float radius, int segments, int half)
+{
+  float x1 = 0, x2 = 0;
+  float y1 = 0, y2 = 0;
+  int i, t, s;
 
   if (half) {
     t = 270; s = 90;
@@ -375,12 +465,13 @@ int i, t, s;
   glEnd();
 }
 
-void wire(float len) {
-static GLfloat col[] = {0.3, 0.3, 0.3, 1.0};
-static GLfloat spec[] = {0.9, 0.9, 0.9, 1.0};
-static GLfloat nospec[] = {0.4, 0.4, 0.4, 1.0};
-GLfloat shin = 30;
-int n;
+void wire(float len)
+{
+  static GLfloat col[] = {0.3, 0.3, 0.3, 1.0};
+  static GLfloat spec[] = {0.9, 0.9, 0.9, 1.0};
+  static GLfloat nospec[] = {0.4, 0.4, 0.4, 1.0};
+  GLfloat shin = 30;
+  int n;
 
   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
   glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
@@ -392,10 +483,11 @@ int n;
   glMaterialfv(GL_FRONT, GL_SPECULAR, nospec);
 }
 
-void ring(GLfloat inner, GLfloat outer, int nsegs) {
-GLfloat z1, z2, y1, y2;
-GLfloat Z1, Z2, Y1, Y2;
-int i;
+void ring(GLfloat inner, GLfloat outer, int nsegs)
+{
+  GLfloat z1, z2, y1, y2;
+  GLfloat Z1, Z2, Y1, Y2;
+  int i;
 
   z1 = inner; y1 = 0;
   Z1 = outer; Y1 = 0;
@@ -422,55 +514,60 @@ int i;
 
 void sphere(GLfloat r, float stacks, float slices,
              int startstack, int endstack, int startslice,
-             int endslice) {
-GLfloat d, d1, dr, dr1, Dr, Dr1, D, D1, z1, z2, y1, y2, Y1, Z1, Y2, Z2;
-int a, a1, b, b1, c, c1;
-GLfloat step, sstep;
-
-      step = 180/stacks;
-      sstep = 360/slices;
-      a1 = startstack * step;
-      b1 = startslice * sstep;
-      y1 = z1 = Y1 = Z1 = 0;
-      c = (endslice / slices) * 360;
-      c1 = (endstack/stacks)*180;
-      glBegin(GL_QUADS);
-      for (a = startstack * step ; a <= c1 ; a+= step) {
-        d=sin_table[a];
-        d1=sin_table[a1];
-        D=cos_table[a];
-        D1=cos_table[a1];
-        dr = d * r;
-        dr1 = d1 * r;
-        Dr = D * r;
-        Dr1 = D1 * r;
-        for (b = b1 ; b <= c ; b+= sstep) {
-          y2=dr*sin_table[b];
-          z2=dr*cos_table[b];
-          Y2=dr1*sin_table[b];
-          Z2=dr1*cos_table[b];
-            glNormal3f(D, y1, z1);
-            glVertex3f(Dr,y1,z1);
-            glVertex3f(Dr,y2,z2);
-            glVertex3f(Dr1,Y2,Z2);
-            glVertex3f(Dr1,Y1,Z1);
-          z1=z2;
-          y1=y2;
-          Z1=Z2;
-          Y1=Y2;
-        }
-        a1 = a;
-     }
-     glEnd();
+             int endslice)
+{
+  GLfloat d, d1, dr, dr1, Dr, Dr1, D, D1, z1, z2, y1, y2, Y1, Z1, Y2, Z2;
+  int a, a1, b, b1, c, c1;
+  GLfloat step, sstep;
+
+  step = 180/stacks;
+  sstep = 360/slices;
+  a1 = startstack * step;
+  b1 = startslice * sstep;
+  y1 = z1 = Y1 = Z1 = 0;
+  c = (endslice / slices) * 360;
+  c1 = (endstack/stacks)*180;
+  glBegin(GL_QUADS);
+  for (a = startstack * step ; a <= c1 ; a+= step) {
+    d=sin_table[a];
+    d1=sin_table[a1];
+    D=cos_table[a];
+    D1=cos_table[a1];
+    dr = d * r;
+    dr1 = d1 * r;
+    Dr = D * r;
+    Dr1 = D1 * r;
+    for (b = b1 ; b <= c ; b+= sstep) {
+      y2=dr*sin_table[b];
+      z2=dr*cos_table[b];
+      Y2=dr1*sin_table[b];
+      Z2=dr1*cos_table[b];
+        glNormal3f(Dr, y1, z1);
+        glVertex3f(Dr,y1,z1);
+        glNormal3f(Dr, y2, z2);
+        glVertex3f(Dr,y2,z2);
+        glNormal3f(Dr1, Y2, Z2);
+        glVertex3f(Dr1,Y2,Z2);
+        glNormal3f(Dr1, Y1, Z1);
+        glVertex3f(Dr1,Y1,Z1);
+      z1=z2;
+      y1=y2;
+      Z1=Z2;
+      Y1=Y2;
+    }
+    a1 = a;
+  }
+  glEnd();
 }
 
-int DrawComponent(Component *c) {
-int ret = 0; /* return 1 if component is freed */
+int DrawComponent(Component *c)
+{
+  int ret = 0; /* return 1 if component is freed */
 
    glPushMatrix();
    glTranslatef(c->x, c->y, c->z);
      if (c->angle > 0) {
-        glRotatef(c->angle, 0, 0, 1);
+        glRotatef(c->angle, c->rotx, c->roty, c->rotz);
      }
    if (spin) {
      glRotatef(c->rdeg, c->rotx, c->roty, c->rotz);
@@ -513,6 +610,8 @@ int ret = 0; /* return 1 if component is freed */
           glDisable(GL_LIGHT1);
           light = 0; lighton = 0;
         }
+        if (c->type == 1)
+          free(((Diode *)c->c)->band); /* remember to free diode band */
         free(c->c);
         ret = 1;
    }
@@ -521,13 +620,15 @@ int ret = 0; /* return 1 if component is freed */
    glDisable(GL_NORMALIZE);
    return ret;
 }
+
 /* draw a resistor */
 
-void DrawResistor(Resistor *r) {
-int i;
-GLfloat col[] = {0.74, 0.62, 0.46, 1.0};
-GLfloat spec[] = {0.8, 0.8, 0.8, 1.0};
-GLfloat shine = 30;
+void DrawResistor(Resistor *r)
+{
+  int i;
+  GLfloat col[] = {0.74, 0.62, 0.46, 1.0};
+  GLfloat spec[] = {0.8, 0.8, 0.8, 1.0};
+  GLfloat shine = 30;
 
    glTranslatef(-4, 0, 0);
    wire(3);
@@ -546,12 +647,14 @@ GLfloat shine = 30;
    wire(3);
 }
 
-void DrawFuse(Fuse *f) {
-static GLfloat col[] = {0.5, 0.5, 0.5, 1.0}; /* endcaps */
-static GLfloat glass[] = {0.4, 0.4, 0.4, 0.3}; /* glass */
-static GLfloat spec[] = {1, 1, 1, 1}; /* glass */
+void DrawFuse(Fuse *f)
+{
+  static GLfloat col[] = {0.5, 0.5, 0.5, 1.0}; /* endcaps */
+  static GLfloat glass[] = {0.4, 0.4, 0.4, 0.3}; /* glass */
+  static GLfloat spec[] = {1, 1, 1, 1}; /* glass */
 
    glPushMatrix();
+   glTranslatef(-1.8, 0, 0);
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
    glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
    glMateriali(GL_FRONT, GL_SHININESS, 40);
@@ -559,7 +662,6 @@ static GLfloat spec[] = {1, 1, 1, 1}; /* glass */
    glTranslatef(0.8, 0, 0);
    glEnable(GL_BLEND);
    glDepthMask(GL_FALSE);
-   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, glass);
    glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 40);
    createCylinder(2, 0.4, 0, 0);
@@ -578,18 +680,19 @@ static GLfloat spec[] = {1, 1, 1, 1}; /* glass */
 }
 
 
-void DrawCapacitor(Capacitor *c) {
-static GLfloat col[] = {0, 0, 0, 0};
-static GLfloat spec[] = {0.8, 0.8, 0.8, 0};
-GLfloat brown[] = {0.84, 0.5, 0};
-static GLfloat shine = 40;
+void DrawCapacitor(Capacitor *c)
+{
+  static GLfloat col[] = {0, 0, 0, 0};
+  static GLfloat spec[] = {0.8, 0.8, 0.8, 0};
+  GLfloat brown[] = {0.84, 0.5, 0};
+  static GLfloat shine = 40;
 
   glPushMatrix();
   if (c->type) {
     glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, brown);
-    sphere(c->width, 20, 20, 0, 5 ,0, 20);
-    glTranslatef(1.45*c->width, 0, 0);
-    sphere(c->width, 20, 20, 15, 20, 0, 20);
+    sphere(c->width, 15, 15, 0, 4 ,0, 15);
+    glTranslatef(1.35*c->width, 0, 0);
+    sphere(c->width, 15, 15, 11, 15, 0, 15);
     glRotatef(90, 0, 0, 1);
     glTranslatef(0, 0.7*c->width, 0.3*c->width);
     wire(3*c->width);
@@ -631,8 +734,9 @@ static GLfloat shine = 40;
   glPopMatrix();
 }
 
-void DrawLED(LED *l) {
-GLfloat col[] = {0, 0, 0, 0.6};
+void DrawLED(LED *l)
+{
+  GLfloat col[] = {0, 0, 0, 0.6};
 
   col[0] = l->r; col[1] = l->g; col[2] = l->b;
   if (l->light && light) {
@@ -663,7 +767,7 @@ GLfloat col[] = {0, 0, 0, 0.6};
     glDisable(GL_LIGHTING);
     glColor3fv(col);
   }
-  sphere(0.3, 10, 10, 5, 10, 0, 10);
+  sphere(0.3, 7, 7, 3, 7, 0, 7);
   if (l->light && light) {
     glEnable(GL_LIGHTING);
   } else {
@@ -686,13 +790,14 @@ GLfloat col[] = {0, 0, 0, 0.6};
     }
   }
 }
-   
 
 
-void DrawDiode(Diode *d) {
-GLfloat shine = 40;
-GLfloat col[] = {0.3, 0.3, 0.3, 0};
-GLfloat spec[] = {0.7, 0.7, 0.7, 0};
+
+void DrawDiode(Diode *d)
+{
+  GLfloat shine = 40;
+  GLfloat col[] = {0.3, 0.3, 0.3, 0};
+  GLfloat spec[] = {0.7, 0.7, 0.7, 0};
 
    glPushMatrix();
    glMaterialfv(GL_FRONT, GL_SHININESS, &shine);
@@ -708,10 +813,11 @@ GLfloat spec[] = {0.7, 0.7, 0.7, 0};
 }
 
 void Rect(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h,
-            GLfloat t) {
-GLfloat yh;
-GLfloat xw;
-GLfloat zt;
+            GLfloat t)
+{
+  GLfloat yh;
+  GLfloat xw;
+  GLfloat zt;
 
   yh = y+h; xw = x+w; zt = z - t;
 
@@ -756,9 +862,8 @@ GLfloat zt;
 
 /* IC pins */
 
-void ICLeg(GLfloat x, GLfloat y, GLfloat z, int dir) {
-
-
+void ICLeg(GLfloat x, GLfloat y, GLfloat z, int dir)
+{
   if (dir) {
     Rect(x-0.1, y, z, 0.1, 0.1, 0.02);
     Rect(x-0.1, y, z, 0.02, 0.1, 0.1);
@@ -772,19 +877,23 @@ void ICLeg(GLfloat x, GLfloat y, GLfloat z, int dir) {
 }
 
 
-void DrawIC(IC *c) {
-GLfloat w, h, d;
-int z;
-GLfloat col[] = {0.1, 0.1, 0.1, 0};
-GLfloat spec[] = {0.6, 0.6, 0.6, 0};
-GLfloat shine = 40;
-GLfloat lspec[] = {0.6, 0.6, 0.6, 0};
-GLfloat lcol[] = {0.4, 0.4, 0.4, 0};
-GLfloat lshine = 40;
+void DrawIC(IC *c)
+{
+  GLfloat w, h, d;
+  int z;
+  GLfloat col[] = {0.1, 0.1, 0.1, 0};
+  GLfloat col2[] = {0.2, 0.2, 0.2, 0};
+  GLfloat spec[] = {0.6, 0.6, 0.6, 0};
+  GLfloat shine = 40;
+  GLfloat lspec[] = {0.6, 0.6, 0.6, 0};
+  GLfloat lcol[] = {0.4, 0.4, 0.4, 0};
+  GLfloat lshine = 40;
+  float mult, th, size;
 
   glPushMatrix();
   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
   glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   glMaterialfv(GL_FRONT, GL_SHININESS, &shine);
   switch(c->pins) {
     case 8:
@@ -834,6 +943,31 @@ GLfloat lshine = 40;
       glVertex3f(w, h, 0.1);
       glVertex3f(-w, h, 0.1);
     glEnd();
+    glBindTexture(GL_TEXTURE_2D, c->tnum);
+    glEnable(GL_TEXTURE_2D);
+    glEnable(GL_BLEND);
+    glDepthMask(GL_FALSE);
+    if (c->pins == 8)
+      size = 0.4;
+    else
+      size = 0.6;
+    th = size/2;
+    mult = size*c->tw / c->th;
+    mult /= 2;
+    glBegin(GL_QUADS); /* text markings */
+     glNormal3f(0, 0, 1);
+     glTexCoord2f(0, 1);
+     glVertex3f(th, mult, 0.11);
+     glTexCoord2f(1, 1);
+     glVertex3f(th, -mult, 0.11);
+     glTexCoord2f(1, 0);
+     glVertex3f(-th, -mult, 0.11);
+     glTexCoord2f(0, 0);
+     glVertex3f(-th, mult, 0.11);
+    glEnd();
+    glDisable(GL_TEXTURE_2D);
+    glDisable(GL_BLEND);
+    glDepthMask(GL_TRUE);
     d = (h*2-0.1) / c->pins;
     d*=2;
     glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, lcol);
@@ -845,64 +979,65 @@ GLfloat lshine = 40;
     for (z = 0 ; z < c->pins/2 ; z++) {
       ICLeg(-w, -h + z*d + d/2, 0, 1);
     }
+    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col2);
+    glTranslatef(-w+0.3, h-0.3, 0.11);
+    glRotatef(90, 0, 1, 0);
+    circle(0.1, 7, 0);
     glPopMatrix();
 }
 
-void DrawDisp(Disp *d) {
-GLfloat col[] = {0.8, 0.8, 0.8, 1.0}; /* body colour */
-GLfloat front[] = {0.2, 0.2, 0.2, 1.0}; /* front colour */
-GLfloat on[] = {0.9, 0, 0, 1}; /* 'on' segment */
-GLfloat off[] = {0.3, 0, 0, 1}; /* 'off' segment */
-int i, j, k;
-GLfloat x, y; /* for the pins */
-GLfloat spec[] = {0.6, 0.6, 0.6, 0};
-GLfloat lcol[] = {0.4, 0.4, 0.4, 0};
-GLfloat shine = 40;
-static GLfloat vdata_h[6][2] = 
-{
-  {0, 0},
-  {0.1, 0.1},
-  {0.9, 0.1},
-  {1, 0},
-  {0.9, -0.1},
-  {0.1, -0.1}
-};
-static GLfloat vdata_v[6][2] =
-{
-  {0.27, 0},
-  {0.35, -0.1},
-  {0.2, -0.9},
-  {0.1, -1},
-  {0, -0.9},
-  {0.15, -0.15}
-};
-
-static GLfloat seg_start[7][2] = 
-{
-
-  {0.55, 2.26},
-  {1.35, 2.26},
-  {1.2, 1.27},
-  {0.25, 0.25},
-  {0.06, 1.25},
-  {0.25, 2.25},
-  {0.39, 1.24}
-};
-
-static int nums[10][7] =
+void DrawDisp(Disp *d)
 {
-  {1, 1, 1, 1, 1, 1, 0}, /* 0 */
-  {0, 1, 1, 0, 0, 0, 0}, /* 1 */
-  {1, 1, 0, 1, 1, 0, 1}, /* 2 */
-  {1, 1, 1, 1, 0, 0, 1}, /* 3 */
-  {0, 1, 1, 0, 0, 1, 1}, /* 4 */
-  {1, 0, 1, 1, 0, 1, 1}, /* 5 */
-  {1, 0, 1, 1, 1, 1, 1}, /* 6 */
-  {1, 1, 1, 0, 0, 0, 0}, /* 7 */
-  {1, 1, 1, 1, 1, 1, 1}, /* 8 */
-  {1, 1, 1, 0, 0, 1, 1}  /* 9 */
-};
-  
+  GLfloat col[] = {0.8, 0.8, 0.8, 1.0}; /* body colour */
+  GLfloat front[] = {0.2, 0.2, 0.2, 1.0}; /* front colour */
+  GLfloat on[] = {0.9, 0, 0, 1}; /* 'on' segment */
+  GLfloat off[] = {0.3, 0, 0, 1}; /* 'off' segment */
+  int i, j, k;
+  GLfloat x, y; /* for the pins */
+  GLfloat spec[] = {0.6, 0.6, 0.6, 0};
+  GLfloat lcol[] = {0.4, 0.4, 0.4, 0};
+  GLfloat shine = 40;
+  static GLfloat vdata_h[6][2] = {
+    {0, 0},
+    {0.1, 0.1},
+    {0.9, 0.1},
+    {1, 0},
+    {0.9, -0.1},
+    {0.1, -0.1}
+  };
+  static GLfloat vdata_v[6][2] = {
+    {0.27, 0},
+    {0.35, -0.1},
+    {0.2, -0.9},
+    {0.1, -1},
+    {0, -0.9},
+    {0.15, -0.15}
+  };
+
+  static GLfloat seg_start[7][2] = {
+    {0.55, 2.26},
+    {1.35, 2.26},
+    {1.2, 1.27},
+    {0.25, 0.25},
+    {0.06, 1.25},
+    {0.25, 2.25},
+    {0.39, 1.24}
+  };
+
+  static int nums[10][7] = {
+    {1, 1, 1, 1, 1, 1, 0}, /* 0 */
+    {0, 1, 1, 0, 0, 0, 0}, /* 1 */
+    {1, 1, 0, 1, 1, 0, 1}, /* 2 */
+    {1, 1, 1, 1, 0, 0, 1}, /* 3 */
+    {0, 1, 1, 0, 0, 1, 1}, /* 4 */
+    {1, 0, 1, 1, 0, 1, 1}, /* 5 */
+    {1, 0, 1, 1, 1, 1, 1}, /* 6 */
+    {1, 1, 1, 0, 0, 0, 0}, /* 7 */
+    {1, 1, 1, 1, 1, 1, 1}, /* 8 */
+    {1, 1, 1, 0, 0, 1, 1}  /* 9 */
+  };
+
+   glTranslatef(-0.9, -1.8, 0);
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
    Rect(0, 0, -0.01, 1.8, 2.6, 0.7);
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, front);
@@ -953,11 +1088,12 @@ static int nums[10][7] =
    }
 }
 
-void HoledRectangle(GLfloat w, GLfloat h, GLfloat d, GLfloat radius, int p) {
-int step, a;
-GLfloat x1, y1, x2, y2;
-GLfloat yr, yr1, xr, xr1, side, side1;
-GLfloat nx, ny;
+void HoledRectangle(GLfloat w, GLfloat h, GLfloat d, GLfloat radius, int p)
+{
+  int step, a;
+  GLfloat x1, y1, x2, y2;
+  GLfloat yr, yr1, xr, xr1, side, side1;
+  GLfloat nx, ny;
 
   step = 360 / p;
   x1 = radius; y1 = 0;
@@ -1020,16 +1156,19 @@ GLfloat nx, ny;
   glEnd();
 }
 
-void DrawTransistor(Transistor *t) {
-static GLfloat col[] = {0.3, 0.3, 0.3, 1.0};
-static GLfloat spec[] = {0.9, 0.9, 0.9, 1.0};
-static GLfloat nospec[] = {0.4, 0.4, 0.4, 1.0};
-GLfloat shin = 30;
+void DrawTransistor(Transistor *t)
+{
+  static GLfloat col[] = {0.3, 0.3, 0.3, 1.0};
+  static GLfloat spec[] = {0.9, 0.9, 0.9, 1.0};
+  static GLfloat nospec[] = {0.4, 0.4, 0.4, 1.0};
+  GLfloat shin = 30;
 
   glPushMatrix();
   glMaterialfv(GL_FRONT, GL_SHININESS, &shin);
   glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   if (t->type == 1) {
+    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col);
     glRotatef(90, 0, 1, 0);
     glRotatef(90, 0, 0, 1);
     createCylinder(1.0, 0.4, 1, 1);
@@ -1041,12 +1180,35 @@ GLfloat shin = 30;
     glTranslatef(0, 0, 0.2);
     wire(2);
   } else {
-    Rect(0, 0, 0, 1.5, 1.5, 0.75);
-    glTranslatef(0.75, 1.875, -0.5);
+    float mult, y1, y2;
+    mult = 1.5*t->th/t->tw;
+    y1 = 0.75+mult/2;
+    y2 = 0.75-mult/2;
+    Rect(0, 0, 0, 1.5, 1.5, 0.5);
+    glEnable(GL_TEXTURE_2D);
+    glBindTexture(GL_TEXTURE_2D, t->tnum);
+    glEnable(GL_BLEND);
+    glDepthMask(GL_FALSE);
+    glBegin (GL_QUADS);
+     glNormal3f(0, 0, 1);
+     glTexCoord2f(0, 1);
+     glVertex3f(0, y1, 0.01);
+     glTexCoord2f(1, 1);
+     glVertex3f(1.5, y1, 0.01);
+     glTexCoord2f(1, 0);
+     glVertex3f(1.5, y2, 0.01);
+     glTexCoord2f(0, 0);
+     glVertex3f(0, y2, 0.01);
+    glEnd();
+    glDisable(GL_TEXTURE_2D);
+    glDisable(GL_BLEND);
+    glDepthMask(GL_TRUE);
     glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
     glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
     glMaterialfv(GL_FRONT, GL_SHININESS, &shin);
-    if (glIsEnabled(GL_NORMALIZE)) glEnable(GL_NORMALIZE);
+    Rect(0, 0, -0.5, 1.5, 1.5, 0.30);
+    if (!glIsEnabled(GL_NORMALIZE)) glEnable(GL_NORMALIZE);
+    glTranslatef(0.75, 1.875, -0.55);
     HoledRectangle(1.5, 0.75, 0.25, 0.2, 8);
     glMaterialfv(GL_FRONT, GL_SPECULAR, nospec);
     glTranslatef(-0.375, -1.875, 0);
@@ -1060,9 +1222,10 @@ GLfloat shin = 30;
   glPopMatrix();
 }
 
-Component * NewComponent(void) {
-Component *c;
-float rnd;
+Component * NewComponent(void)
+{
+  Component *c;
+  float rnd;
 
   c = malloc(sizeof(Component));
   c->angle = RAND_RANGE(0,360);
@@ -1126,12 +1289,12 @@ float rnd;
     c->type = 2;
   } else if (rnd < 0.4) {
     c->c = NewCapacitor();
-    if (f_rand() < 0.4)
-      c->norm = 1; /* some capacitors shine */
+    c->norm = 1;
     c->type = 4;
   } else if (rnd < 0.6) {
     c->c = NewIC();
     c->type = 5;
+    c->norm = 1;
   } else if (rnd < 0.7) {
     c->c = NewLED();
     c->type = 3;
@@ -1149,16 +1312,33 @@ float rnd;
   return c;
 }
 
-Transistor *NewTransistor(void) {
-Transistor *t;
+Transistor *NewTransistor(void)
+{
+  Transistor *t;
+  float texfg[] = {0.7, 0.7, 0.7, 1.0};
+  float texbg[] = {0.3, 0.3, 0.3, 0.1};
+  TexNum *tn;
+  const char *val;
 
   t = malloc(sizeof(Transistor));
   t->type = (f_rand() < 0.5);
+  if (t->type == 0) {
+    val = transistortypes[random() % countof(transistortypes)];
+    tn = fonttexturealloc(val, texfg, texbg);
+    if (tn == NULL) {
+      fprintf(stderr, "Error getting a texture for a string!\n");
+    } else {
+      t->tnum = tn->num;
+      t->tw = tn->w; t->th = tn->h;
+      free(tn);
+    }
+  }
   return t;
 }
 
-Capacitor *NewCapacitor(void) {
-Capacitor *c;
+Capacitor *NewCapacitor(void)
+{
+  Capacitor *c;
 
   c = malloc(sizeof(Capacitor));
   c->type = (f_rand() < 0.5);
@@ -1166,15 +1346,16 @@ Capacitor *c;
     c->length = RAND_RANGE(0.5, 1);
     c->width = RAND_RANGE(0.5, 1);
   } else {
-    c->width = RAND_RANGE(1, 2);
+    c->width = RAND_RANGE(0.3, 1);
   }
   return c;
 }
 
 /* 7 segment display */
 
-Disp *NewDisp(void) {
-Disp *d;
+Disp *NewDisp(void)
+{
+  Disp *d;
 
   d = malloc(sizeof(Disp));
   if (seven)
@@ -1185,9 +1366,15 @@ Disp *d;
 }
 
 
-IC *NewIC(void) {
-IC *c;
-int pins;
+IC *NewIC(void)
+{
+  IC *c;
+  int pins;
+  TexNum *tn;
+  float texfg[] = {0.7, 0.7, 0.7, 1.0};
+  float texbg[] = {0.1, 0.1, 0.1, 0};
+  const char *val;
+  int types[countof(ictypes)], i, n = 0;
 
   c = malloc(sizeof(IC));
   c->type = 0;
@@ -1206,13 +1393,31 @@ int pins;
       pins = 24;
       break;
   }
+  for (i = 0 ; i < countof(ictypes) ; i++) {
+    if (ictypes[i].pins == pins) {
+       types[n] = i;
+       n++;
+    }
+  }
+
+  if (n > countof(types)) abort();
+  val = ictypes[types[random() % n]].val;
+  tn = fonttexturealloc(val, texfg, texbg);
+  if (tn == NULL) {
+    fprintf(stderr, "Error allocating font texture for '%s'\n", val);
+  } else {
+    c->tw = tn->w; c->th = tn->h;
+    c->tnum = tn->num;
+    free(tn);
+  }
   c->pins = pins;
   return c;
 }
 
-LED *NewLED(void) {
-LED *l;
-float r;
+LED *NewLED(void)
+{
+  LED *l;
+  float r;
 
   l = malloc(sizeof(LED));
   r = f_rand();
@@ -1235,16 +1440,18 @@ float r;
   return l;
 }
 
-Fuse *NewFuse(void) {
-Fuse *f;
+Fuse *NewFuse(void)
+{
+  Fuse *f;
 
   f = malloc(sizeof(Fuse));
   return f;
 }
 
-Diode *NewDiode(void) {
-Band *b;
-Diode *ret;
+Diode *NewDiode(void)
+{
+  Band *b;
+  Diode *ret;
 
   ret = malloc(sizeof(Diode));
   b = malloc(sizeof(Band));
@@ -1266,9 +1473,10 @@ Diode *ret;
 }
 
 
-Resistor  * NewResistor(void) {
-int v, m, t; /* value, multiplier, tolerance */
-Resistor *ret;
+Resistor  * NewResistor(void)
+{
+  int v, m, t; /* value, multiplier, tolerance */
+  Resistor *ret;
 
   v = RAND(9);
   m = RAND(5);
@@ -1287,11 +1495,12 @@ Resistor *ret;
   return ret;
 }
 
-void makebandlist(void) {
-int i;
-GLfloat col[] = {0,0,0,0};
-GLfloat spec[] = {0.8,0.8,0.8,0};
-GLfloat shine = 40;
+void makebandlist(void)
+{
+  int i;
+  GLfloat col[] = {0,0,0,0};
+  GLfloat spec[] = {0.8,0.8,0.8,0};
+  GLfloat shine = 40;
 
    for (i = 0 ; i < 12 ; i++) {
      band_list[i] = glGenLists(i);
@@ -1309,10 +1518,11 @@ GLfloat shine = 40;
   
 
 void bandedCylinder(float radius, float l, GLfloat r, GLfloat g, GLfloat bl, 
-                        Band **b, int nbands) {
-int n; /* band number */
-int p = 0; /* prev number + 1; */
-GLfloat col[] = {0,0,0,0};
+                        Band **b, int nbands)
+{
+  int n; /* band number */
+  int p = 0; /* prev number + 1; */
+  GLfloat col[] = {0,0,0,0};
 
    col[0] = r; col[1] = g; col[2] = bl;
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
@@ -1328,15 +1538,16 @@ GLfloat col[] = {0,0,0,0};
    }
 }
 
-void drawgrid(void) {
-GLfloat x, y;
-static GLfloat col[] = {0, 0.25, 0.05};
-static GLfloat col2[] = {0, 0.125, 0.05};
-GLfloat col3[] = {0, 0.8, 0};
-static GLfloat sx, sy; /* bright spot co-ords */
-static int sdir; /* 0 = left-right, 1 = right-left, 2 = up->dn, 3 = dn->up */
-static int s = 0; /* if spot is enabled */
-static float ds; /* speed of spot */
+void drawgrid(void)
+{
+  GLfloat x, y;
+  static GLfloat col[] = {0, 0.25, 0.05};
+  static GLfloat col2[] = {0, 0.125, 0.05};
+  GLfloat col3[] = {0, 0.8, 0};
+  static GLfloat sx, sy; /* bright spot co-ords */
+  static int sdir; /* 0 = left-right, 1 = right-left, 2 = up->dn, 3 = dn->up */
+  static int s = 0; /* if spot is enabled */
+  static float ds; /* speed of spot */
 
   if (!s) {
      if (f_rand() < ((rotate) ? 0.05 : 0.01)) {
@@ -1438,13 +1649,14 @@ static float ds; /* speed of spot */
   glEnable(GL_LIGHTING);
 }
 
-void display(void) {
-static Component *c[MAX_COMPONENTS];
-static int i = 0;
-GLfloat light_sp[] = {0.8, 0.8, 0.8, 1.0};
-GLfloat black[] = {0, 0, 0, 1.0};
-static GLfloat rotate_angle = 0; /*  when 'rotate' is enabled */
-int j;
+void display(void)
+{
+  static Component *c[MAX_COMPONENTS];
+  static int i = 0;
+  GLfloat light_sp[] = {0.8, 0.8, 0.8, 1.0};
+  GLfloat black[] = {0, 0, 0, 1.0};
+  static GLfloat rotate_angle = 0; /*  when 'rotate' is enabled */
+  int j;
 
   if (i == 0) {
     for (i = 0 ; i < maxparts ; i++) {
@@ -1492,11 +1704,61 @@ int j;
   glFlush();
 }
 
+TexNum * fonttexturealloc (const char *str, float *fg, float *bg)
+{
+  static char *strings[50]; /* max of 40 textures */
+  static int w[50], h[50];
+  int i;
+  static int init;
+  XImage *ximage;
+  char *c;
+  TexNum *t;
+
+  if (init == 0) {
+    for (i = 1 ; i < 50 ; i++) {
+      strings[i] = NULL;
+      w[i] = 0; h[i] = 0;
+    }
+    init++;
+  }
+  for (i = 1 ; i < 50 ; i++) {
+    if (strings[i] && !strcmp(str, strings[i])) { /* if one matches */
+      t = malloc(sizeof(TexNum));
+      t->w = w[i]; t->h = h[i];
+      t->num = i;
+      return t;
+    }
+  }
+  /* at this point we need to make the new texture */
+  ximage = text_to_ximage (modeinfo->xgwa.screen,
+                           modeinfo->xgwa.visual,
+                           font, str,
+                           fg, bg);
+  for (i = 1 ; strings[i] != NULL ; i++); /* set i to the next unused value */
+  glBindTexture(GL_TEXTURE_2D, i);
+  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+  gluBuild2DMipmaps(GL_TEXTURE_2D, 4, ximage->width, ximage->height, GL_RGBA,
+                    GL_UNSIGNED_BYTE, ximage->data);
+  t = malloc(sizeof(TexNum));
+  t->w = ximage->width;
+  t->h = ximage->height;
+  w[i] = t->w; h[i] = t->h;
+  free(ximage->data);
+  ximage->data = 0;
+  XFree (ximage);
+  c = malloc(strlen(str)+1);
+  strncpy(c, str, strlen(str)+1);
+  strings[i] = c;
+  t->num = i;
+  return t;
+}
+
 /* ensure transparent components are at the end */
-void reorder(Component *c[]) {
-int i, j, k;
-Component *c1[MAX_COMPONENTS];
-Component *c2[MAX_COMPONENTS];
+void reorder(Component *c[])
+{
+  int i, j, k;
+  Component *c1[MAX_COMPONENTS];
+  Component *c2[MAX_COMPONENTS];
 
   j = 0;
   for (i = 0 ; i < maxparts ; i++) { /* clear old matrix */
@@ -1530,7 +1792,6 @@ Component *c2[MAX_COMPONENTS];
 
 void reshape_circuit(ModeInfo *mi, int width, int height)
 {
-
  glViewport(0,0,(GLint)width, (GLint) height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
@@ -1567,18 +1828,21 @@ Circuit *c;
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  make_tables();
  makebandlist();
  
 }
 
-void draw_circuit(ModeInfo *mi) {
-Circuit *c = &circuit[MI_SCREEN(mi)];
-Window w = MI_WINDOW(mi);
-Display *disp = MI_DISPLAY(mi);
+void draw_circuit(ModeInfo *mi)
+{
+  Circuit *c = &circuit[MI_SCREEN(mi)];
+  Window w = MI_WINDOW(mi);
+  Display *disp = MI_DISPLAY(mi);
 
   if (!c->glx_context)
       return;
+ modeinfo = mi;
 
  glXMakeCurrent(disp, w, *(c->glx_context));
 
@@ -1589,8 +1853,8 @@ Display *disp = MI_DISPLAY(mi);
   glXSwapBuffers(disp, w);
 }
 
-void release_circuit(ModeInfo *mi) {
-
+void release_circuit(ModeInfo *mi)
+{
   if (circuit != NULL) {
    (void) free((void *) circuit);
    circuit = NULL;
diff --git a/hacks/glx/engine.c b/hacks/glx/engine.c
new file mode 100644 (file)
index 0000000..98f9134
--- /dev/null
@@ -0,0 +1,799 @@
+/*
+ * engine.c - GL representation of a 4 stroke engine
+ *
+ * version 1.0
+ *
+ * Copyright (C) 2001 Ben Buxton (bb@cactii.net)
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or
+ * implied warranty.
+ */
+
+
+#include <X11/Intrinsic.h>
+
+#ifdef STANDALONE
+# define PROGCLASS                                      "Engine"
+# define HACK_INIT                                      init_engine
+# define HACK_DRAW                                      draw_engine
+# define HACK_RESHAPE                           reshape_engine
+# define engine_opts                                     xlockmore_opts
+/* insert defaults here */
+
+#define DEFAULTS        "*delay:       10000       \n" \
+                        "*showFPS:       False       \n" \
+                        "*move:       True       \n" \
+                        "*spin:       True       \n" \
+                        "*rotatespeed:      1\n" \
+
+# include "xlockmore.h"                         /* from the xscreensaver distribution */
+#else  /* !STANDALONE */
+# include "xlock.h"                                     /* from the xlockmore distribution */
+#endif /* !STANDALONE */
+
+/* lifted from lament.c */
+#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
+#define RANDSIGN() ((random() & 1) ? 1 : -1)
+
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+
+
+static int rotatespeed;
+static int move;
+static int spin;
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static XrmOptionDescRec opts[] = {
+  {"-rotate-speed", ".engine.rotatespeed", XrmoptionSepArg, "1" },
+  {"-move", ".engine.move", XrmoptionNoArg, (caddr_t) "true" },
+  {"+move", ".engine.move", XrmoptionNoArg, (caddr_t) "false" },
+  {"-spin", ".engine.spin", XrmoptionNoArg, (caddr_t) "true" },
+  {"+spin", ".engine.spin", XrmoptionNoArg, (caddr_t) "false" },
+};
+
+static argtype vars[] = {
+  {(caddr_t *) &rotatespeed, "rotatespeed", "Rotatespeed", "1", t_Int},
+  {(caddr_t *) &move, "move", "Move", "True", t_Bool},
+  {(caddr_t *) &spin, "spin", "Spin", "True", t_Bool},
+};
+
+ModeSpecOpt engine_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+#ifdef USE_MODULES
+ModStruct   engine_description =
+{"engine", "init_engine", "draw_engine", "release_engine",
+ "draw_engine", "init_engine", NULL, &engine_opts,
+ 1000, 1, 2, 1, 4, 1.0, "",
+ "A four stroke engine", 0, NULL};
+
+#endif
+
+
+typedef struct {
+  GLXContext *glx_context;
+  Window window;
+  GLfloat x, y, z; /* position */
+  GLfloat dx, dy, dz; /* position */
+  GLfloat an1, an2, an3; /* internal angle */
+  GLfloat nx, ny, nz; /* spin vector */
+  GLfloat a; /* spin angle */
+  GLfloat da; /* spin speed */
+} Engine;
+
+static Engine *engine = NULL;
+
+#include <math.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+#define MOVE_MULT 0.05
+
+#define RAND_RANGE(min, max) ((min) + (max - min) * f_rand())
+
+int win_w, win_h;
+
+static GLfloat viewer[] = {0.0, 0.0, 30.0};
+static GLfloat lookat[] = {0.0, 0.0, 0.0};
+static GLfloat lightpos[] = {7.0, 7.0, 12, 1.0};
+GLfloat light_sp[] = {0.8, 0.8, 0.8, 0.5};
+static GLfloat red[] = {1.0, 0, 0, 1.0};
+static GLfloat green[] = {0.0, 1, 0, 1.0};
+static GLfloat blue[] = {0, 0, 1, 1.0};
+static GLfloat white[] = {1.0, 1, 1, 1.0};
+static GLfloat yellow_t[] = {1, 1, 0, 0.4};
+
+void circle(float, int,int);
+GLvoid normal(GLfloat [], GLfloat [], GLfloat [], 
+                  GLfloat *, GLfloat *, GLfloat *);
+
+float sin_table[720];
+float cos_table[720];
+float tan_table[720];
+
+/* we use trig tables to speed things up - 200 calls to sin()
+ in one frame can be a bit harsh..
+*/
+
+void make_tables(void) {
+int i;
+float f;
+
+  f = 360 / (M_PI * 2);
+  for (i = 0 ; i <= 720 ; i++) {
+    sin_table[i] = sin(i/f);
+  }
+  for (i = 0 ; i <= 720 ; i++) {
+    cos_table[i] = cos(i/f);
+  }
+  for (i = 0 ; i <= 720 ; i++) {
+    tan_table[i] = tan(i/f);
+  }
+}
+
+/* if inner and outer are the same, we draw a cylinder, not a tube */
+/* for a tube, endcaps is 0 (none), 1 (left), 2 (right) or 3(both) */
+/* angle is how far around the axis to go (up to 360) */
+
+void cylinder (GLfloat x, GLfloat y, GLfloat z, float length, float outer, float inner, int endcaps, int sang,
+                 int eang) {
+int a; /* current angle around cylinder */
+int b = 0; /* previous */
+int angle, norm, step, sangle;
+float z1, y1, z2, y2, ex;
+float y3, z3;
+float Z1, Y1, Z2, Y2, xl, Y3, Z3;
+GLfloat y2c[720], z2c[720];
+GLfloat ony, onz; /* previous normals */
+int nsegs, tube = 0;
+
+  glPushMatrix();
+  nsegs = outer*(MAX(win_w, win_h)/200);
+  nsegs = MAX(nsegs, 6);
+  nsegs = MAX(nsegs, 40);
+  if (nsegs % 2)
+     nsegs += 1;
+  sangle = sang;
+  angle = eang;
+  ony = onz = 0;
+  z1 = cos_table[sangle]*outer+z; y1 = sin_table[sangle] * outer+y;
+  Z1 = cos_table[sangle] * inner+z; Y1 = sin_table[sangle]*inner+y ; 
+  Z2 = z;
+  Y2 = y;
+  xl = x + length;
+  if (inner < outer && endcaps < 3) tube = 1;
+  step = 360/nsegs;
+
+  glBegin(GL_QUADS);
+  for (a = sangle ; a <= angle || b <= angle ; a+= step) {
+    y2=outer*(float)sin_table[a]+y;
+    z2=outer*(float)cos_table[a]+z;
+    y3=outer*(float)sin_table[a+step]+y;
+    z3=outer*(float)cos_table[a+step]+z;
+    if (endcaps)
+       y2c[a] = y2; z2c[a] = z2; /* cache for later */
+    if (tube) {
+      Y2=inner*(float)sin_table[a]+y;
+      Z2=inner*(float)cos_table[a]+z;
+      Y3=inner*(float)sin_table[a+step]+y;
+      Z3=inner*(float)cos_table[a+step]+z;
+    }
+    glNormal3f(0, y1, z1);
+    glVertex3f(x,y1,z1);
+    glVertex3f(xl,y1,z1);
+    glNormal3f(0, y2, z2);
+    glVertex3f(xl,y2,z2);
+    glVertex3f(x,y2,z2);
+    if (a == sangle && angle - sangle < 360) {
+      if (tube)
+        glVertex3f(x, Y1, Z1);
+      else
+        glVertex3f(x, y, z);
+      glVertex3f(x, y1, z1);
+      glVertex3f(xl, y1, z1);
+      if (tube)
+        glVertex3f(xl, Z1, Z1);
+      else
+        glVertex3f(xl, y, z);
+    }
+    if (tube) {
+      if (endcaps != 1) {
+        glNormal3f(-1, 0, 0); /* left end */
+        glVertex3f(x, y1, z1);
+        glVertex3f(x, y2, z2);
+        glVertex3f(x, Y2, Z2);
+        glVertex3f(x, Y1, Z1);
+      }
+
+      glNormal3f(0, -Y1, -Z1); /* inner surface */
+      glVertex3f(x, Y1, Z1);
+      glVertex3f(xl, Y1, Z1);
+      glNormal3f(0, -Y2, -Z2);
+      glVertex3f(xl, Y2, Z2);
+      glVertex3f(x, Y2, Z2);
+
+      if (endcaps != 2) {
+        glNormal3f(1, 0, 0); /* right end */
+        glVertex3f(xl, y1, z1);
+        glVertex3f(xl, y2, z2);
+        glVertex3f(xl, Y2, Z2);
+        glVertex3f(xl, Y1, Z1);
+      }
+    }
+
+    z1=z2; y1=y2;
+    Z1=Z2; Y1=Y2;
+    b = a;
+  }
+  glEnd();
+
+  if (angle - sangle < 360) {
+    GLfloat nx, ny, nz;
+    GLfloat v1[3], v2[3], v3[3];
+    v1[0] = x; v1[1] = y; v1[2] = z;
+    v2[0] = x; v2[1] = y1; v2[2] = z1;
+    v3[0] = xl; v3[1] = y1; v3[2] = z1;
+    normal(&v2[0], &v1[0], &v3[0], &nx, &ny, &nz);
+    glBegin(GL_QUADS);
+    glNormal3f(nx, ny, nz);
+    glVertex3f(x, y, z);
+    glVertex3f(x, y1, z1);
+    glVertex3f(xl, y1, z1);
+    glVertex3f(xl, y, z);
+    glEnd();
+  }
+  if (endcaps) {
+    GLfloat end, start;
+    if (tube) {
+      if (endcaps == 1) {
+        end = 0;
+        start = 0;
+      } else if (endcaps == 2) {
+        start = end = length+0.01;
+      } else {
+        end = length+0.02; start = -0.01;
+      }
+      norm = (ex == length+0.01) ? -1 : 1;
+    } else  {
+      end = length;
+      start = 0;
+      norm = -1;
+    }
+
+    for(ex = start ; ex <= end ; ex += length) {
+      z1 = outer*cos_table[sangle]+z;
+      y1 = y+sin_table[sangle]*outer;
+      step = 360/nsegs;
+      glBegin(GL_TRIANGLES);
+      b = 0;
+      for (a = sangle ; a <= angle || b <= angle; a+= step) {
+          glNormal3f(norm, 0, 0);
+          glVertex3f(x+ex,y, z);
+          glVertex3f(x+ex,y1,z1);
+          glVertex3f(x+ex,y2c[a],z2c[a]);
+        y1 = y2c[a]; z1 = z2c[a];
+        b = a;
+      }
+      if (!tube) norm = 1;
+      glEnd();
+    }
+  }
+  glPopMatrix();
+}
+
+GLvoid normal(GLfloat v1[], GLfloat v2[], GLfloat v3[], 
+                  GLfloat *nx, GLfloat *ny, GLfloat *nz)
+{
+   GLfloat x, y, z, X, Y, Z;
+
+   x = v2[0]-v1[0];
+   y = v2[1]-v1[1];
+   z = v2[2]-v1[2];
+   X = v3[0]-v1[0];
+   Y = v3[1]-v1[1];
+   Z = v3[2]-v1[2];
+
+   *nx = Y*z - Z*y;
+   *ny = Z*x - X*z;
+   *nz = X*y - Y*x;
+
+} 
+
+
+
+void circle(float radius, int segments, int half) {
+float x1 = 0, x2 = 0;
+float y1 = 0, y2 = 0;
+int i, t, s;
+
+  if (half) {
+    t = 270; s = 90;
+    x1 = radius, y1 = 0;
+  } else {
+    t = 360, s = 0;
+  }
+  glBegin(GL_TRIANGLES);
+  glNormal3f(1, 0, 0);
+  for(i=s;i<=t;i+=10)
+  {
+    float angle=i;
+    x2=radius*(float)cos_table[(int)angle];
+    y2=radius*(float)sin_table[(int)angle];
+    glVertex3f(0,0,0);
+    glVertex3f(x1,y1,0);
+    glVertex3f(x2,y2,0);
+    x1=x2;
+    y1=y2;
+  }
+  glEnd();
+}
+
+void ring(GLfloat inner, GLfloat outer, int nsegs) {
+GLfloat z1, z2, y1, y2;
+GLfloat Z1, Z2, Y1, Y2;
+int i;
+
+  z1 = inner; y1 = 0;
+  Z1 = outer; Y1 = 0;
+  glBegin(GL_QUADS);
+  glNormal3f(1, 0, 0);
+  for(i=0; i <=360 ; i+= 360/nsegs)
+  {
+    float angle=i;
+    z2=inner*(float)sin_table[(int)angle];
+    y2=inner*(float)cos_table[(int)angle];
+    Z2=outer*(float)sin_table[(int)angle];
+    Y2=outer*(float)cos_table[(int)angle];
+    glVertex3f(0, Y1, Z1);
+    glVertex3f(0, y1, z1);
+    glVertex3f(0, y2, z2);
+    glVertex3f(0, Y2, Z2);
+    z1=z2;
+    y1=y2;
+    Z1=Z2;
+    Y1=Y2;
+  }
+  glEnd();
+}
+
+void Rect(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h,
+            GLfloat t) {
+GLfloat yh;
+GLfloat xw;
+GLfloat zt;
+
+  yh = y+h; xw = x+w; zt = z - t;
+
+  glBegin(GL_QUADS); /* front */
+    glNormal3f(0, 0, 1);
+    glVertex3f(x, y, z);
+    glVertex3f(x, yh, z);
+    glVertex3f(xw, yh, z);
+    glVertex3f(xw, y, z);
+  /* back */
+    glNormal3f(0, 0, -1);
+    glVertex3f(x, y, zt);
+    glVertex3f(x, yh, zt);
+    glVertex3f(xw, yh, zt);
+    glVertex3f(xw, y, zt);
+  /* top */
+    glNormal3f(0, 1, 0);
+    glVertex3f(x, yh, z);
+    glVertex3f(x, yh, zt);
+    glVertex3f(xw, yh, zt);
+    glVertex3f(xw, yh, z);
+  /* bottom */
+    glNormal3f(0, -1, 0);
+    glVertex3f(x, y, z);
+    glVertex3f(x, y, zt);
+    glVertex3f(xw, y, zt);
+    glVertex3f(xw, y, z);
+  /* left */
+    glNormal3f(-1, 0, 0);
+    glVertex3f(x, y, z);
+    glVertex3f(x, y, zt);
+    glVertex3f(x, yh, zt);
+    glVertex3f(x, yh, z);
+  /* right */
+    glNormal3f(1, 0, 0);
+    glVertex3f(xw, y, z);
+    glVertex3f(xw, y, zt);
+    glVertex3f(xw, yh, zt);
+    glVertex3f(xw, yh, z);
+  glEnd();
+}
+
+void makepiston(void) {
+GLfloat colour[] = {0.6, 0.6, 0.6, 1.0};
+int i;
+  
+  i = glGenLists(1);
+  glNewList(i, GL_COMPILE);
+  glRotatef(90, 0, 0, 1);
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colour);
+  glMaterialfv(GL_FRONT, GL_SPECULAR, colour);
+  glMateriali(GL_FRONT, GL_SHININESS, 20);
+  cylinder(0, 0, 0, 2, 1, 0.7, 2, 0, 360); /* body */
+  colour[0] = colour[1] = colour[2] = 0.2;
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colour);
+  cylinder(1.6, 0, 0, 0.1, 1.05, 1.05, 0, 0, 360); /* ring */
+  cylinder(1.8, 0, 0, 0.1, 1.05, 1.05, 0, 0, 360); /* ring */
+  glEndList();
+}
+
+void CrankBit(GLfloat x, GLfloat y, GLfloat z) {
+  Rect(x, y, z, 0.2, 1.8, 1);
+}
+
+void boom(GLfloat x, GLfloat y, int s) {
+static GLfloat red[] = {0, 0, 0, 0.9};
+static GLfloat lpos[] = {0, 0, 0, 1};
+static GLfloat d = 0, wd;
+static int time = 0;
+
+  if (time == 0 && s) {
+    red[0] = red[1] = 0;
+    d = 0.05;
+    time++;
+    glEnable(GL_LIGHT1); 
+  } else if (time == 0 && !s) {
+    return;
+  } else if (time >= 8 && time < 16 && !s) {
+    time++;
+    red[0] -= 0.2; red[1] -= 0.1;
+    d-= 0.04;
+  } else if (time >= 16) {
+    time = 0;
+    glDisable(GL_LIGHT1);
+    return;
+  } else {
+    red[0] += 0.2; red[1] += 0.1;
+    d+= 0.04;
+    time++;
+  }
+  lpos[0] = x; lpos[1] = y-d;
+  glLightfv(GL_LIGHT1, GL_POSITION, lpos);
+  glLightfv(GL_LIGHT1, GL_DIFFUSE, red);
+  glLightfv(GL_LIGHT1, GL_SPECULAR, red);
+  glLighti(GL_LIGHT1, GL_LINEAR_ATTENUATION, 1.3);
+  glLighti(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0);
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
+  glPushMatrix();
+  glRotatef(90, 0, 0, 1);
+  wd = d*3;
+  if (wd > 0.7) wd = 0.7;
+  glEnable(GL_BLEND);
+  glDepthMask(GL_FALSE);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+  cylinder(y-d, -x, 0, d, wd, wd, 1, 0, 360);
+  glDepthMask(GL_TRUE);
+  glDisable(GL_BLEND);
+  glPopMatrix();
+}
+
+void display(Engine *e) {
+
+static int a = 0;
+GLfloat zb, yb;
+static GLfloat ln[730], yp[730], ang[730];
+static int ln_init = 0;
+static int spark;
+
+  glEnable(GL_LIGHTING);
+  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+  glLoadIdentity();
+  gluLookAt(viewer[0], viewer[1], viewer[2], lookat[0], lookat[1], lookat[2], 0.0, 1.0, 0.0);
+  glPushMatrix();
+  glLightfv(GL_LIGHT0, GL_POSITION, lightpos);
+  glLightfv(GL_LIGHT0, GL_SPECULAR, light_sp);
+  glLightfv(GL_LIGHT0, GL_DIFFUSE, light_sp);
+
+  if (move) {
+/* calculate position for the whole object */
+    e->x = sin(e->an1)*15;
+    e->an1 += e->dx; 
+    if (e->an1 >= 2*M_PI) e->an1 -= 2*M_PI;
+
+    e->y = sin(e->an2)*15;
+    e->an2 += e->dy; 
+    if (e->an2 >= 2*M_PI) e->an2 -= 2*M_PI;
+
+    e->z = sin(e->an3)*10-10;
+    e->an3 += e->dz; 
+    if (e->an3 >= 2*M_PI) e->an3 -= 2*M_PI;
+    glTranslatef(e->x, e->y, e->z);
+  }
+
+  if (spin) glRotatef(e->a, e->nx, e->ny, e->nz); 
+  glTranslatef(-5, 0, 0); 
+  if (spin) e->a += e->da;
+  if (spin && (e->a > 360 || e->a < -360)) {
+     e->a -= (e->a > 0) ? 360 : -360;
+     if ((random() % 5) == 4) {
+        e->da = (float)(random() % 1000);
+        e->da = e->da/125 - 4;
+     }
+     if ((random() % 5) == 4) {
+        e->nx = (float)(random() % 100) / 100;
+        e->ny = (float)(random() % 100) / 100;
+        e->nz = (float)(random() % 100) / 100;
+     }
+  }
+/* crankshaft */
+  glPushMatrix();
+  glRotatef(a, 1, 0, 0);
+  glCallList(1);
+  glPopMatrix();
+
+  /* init the ln[] matrix for speed */
+  if (ln_init == 0) {
+    for (ln_init = 0 ; ln_init < 730 ; ln_init++) {
+      zb = sin_table[ln_init];
+      yb = cos_table[ln_init];
+      yp[ln_init] = yb + sqrt(25 - (zb*zb)); /* y ordinate of piston */
+      ln[ln_init] = sqrt(zb*zb + (yb-yp[ln_init])*(yb-yp[ln_init])); /* length of rod */
+      ang[ln_init] = asin(zb/5)*57; /* angle of connecting rod */
+      ang[ln_init] *= -1;
+    }
+  }
+
+  zb = sin_table[a];
+  yb = cos_table[a];
+
+/* pistons */
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);
+  glPushMatrix();
+  glTranslatef(0, yp[a]-0.3, 0);
+  glCallList(2);
+  glPopMatrix();
+  glPushMatrix();
+  glTranslatef(3.2, yp[(a > 180 ? a-180 : a+180)]-0.3, 0);
+  glCallList(2);
+  glPopMatrix();
+  glPushMatrix();
+  glTranslatef(6.5, yp[a]-0.3, 0);
+  glCallList(2);
+  glPopMatrix();
+  glPushMatrix();
+  glTranslatef(9.8, yp[(a > 180 ? a-180 : a+180)]-0.3, 0);
+  glCallList(2);
+  glPopMatrix();
+
+/* spark plugs */
+  glPushMatrix();
+  glRotatef(90, 0, 0, 1);
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
+  cylinder(8.5, 0, 0, 0.5, 0.4, 0.3, 1, 0, 360);
+  cylinder(8.5, -3.2, 0, 0.5, 0.4, 0.3, 1, 0, 360);
+  cylinder(8.5, -6.5, 0, 0.5, 0.4, 0.3, 1, 0, 360);
+  cylinder(8.5, -9.8, 0, 0.5, 0.4, 0.3, 1, 0, 360);
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);
+  cylinder(8, 0, 0, 0.5, 0.2, 0.2, 1, 0, 360);
+  cylinder(8, -3.2, 0, 0.5, 0.2, 0.2, 1, 0, 360);
+  cylinder(8, -6.5, 0, 0.5, 0.2, 0.2, 1, 0, 360);
+  cylinder(8, -9.8, 0, 0.5, 0.2, 0.2, 1, 0, 360);
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);
+  cylinder(9, 0, 0, 1, 0.15, 0.15, 1, 0, 360);
+  cylinder(9, -3.2, 0, 1, 0.15, 0.15, 1, 0, 360);
+  cylinder(9, -6.5, 0, 1, 0.15, 0.15, 1, 0, 360);
+  cylinder(9, -9.8, 0, 1, 0.15, 0.15, 1, 0, 360);
+
+  glPopMatrix();
+
+  if (a == 0) spark = 1 - spark;
+
+  if (spark == 0) {
+    if (a == 0)
+      boom(0, 8, 1);
+    else if (a == 180) 
+      boom(3.2, 8, 1);
+    if (a < 180)
+      boom(0, 8, 0);
+    else if (a < 360)
+      boom(3.2, 8, 0);
+  } else {
+    if (a == 0)
+      boom(6.5, 8, 1);
+    else if (a == 180) 
+      boom(9.8, 8, 1);
+    if (a < 180)
+      boom(6.5, 8, 0);
+    else if (a < 360)
+      boom(9.8, 8, 0);
+  }
+
+
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
+  glPushMatrix();
+  cylinder(-0.8, yb, zb, 1.6, 0.3, 0.3, 1, 0, 365);
+  cylinder(5.7, yb, zb, 1.7, 0.3, 0.3, 1, 0, 365);
+
+  cylinder(2.4, -yb, -zb, 1.7, 0.3, 0.3, 1, 0, 365);
+  cylinder(9.0, -yb, -zb, 1.7, 0.3, 0.3, 1, 0, 365);
+  glPopMatrix();
+
+ /* rod */
+  glPushMatrix();
+  glRotatef(90, 0, 0, 1);
+  glRotatef(ang[a], 0, -1, 0);
+  cylinder(yb, 0, zb, ln[a], 0.2, 0.2, 0, 0, 365);
+  cylinder(yb, -6.4, zb, ln[a], 0.2, 0.2, 0, 0, 365);
+  glPopMatrix();
+
+  glPushMatrix();
+  glRotatef(90, 0, 0, 1);
+  glRotatef(ang[a+180], 0, -1, 0);
+  cylinder(-yb, -3.2, -zb, ln[a], 0.2, 0.2, 0, 0, 365);
+  cylinder(-yb, -9.7, -zb, ln[a], 0.2, 0.2, 0, 0, 365);
+  glPopMatrix();
+
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, yellow_t);
+  glEnable(GL_BLEND);
+  glDepthMask(GL_FALSE);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+  Rect(-1, 8.3, 1, 12, 0.2, 2);
+  Rect(-1.2, -0.5, 1, 0.2, 9, 2);
+
+  Rect(1.4, 3, 1, 0.6, 5.3, 2);
+  Rect(4.4, 3, 1, 1, 5.3, 2);
+  Rect(7.7, 3, 1, 0.8, 5.3, 2);
+  Rect(10.8, -0.5, 1, 0.2, 8.8, 2);
+
+  Rect(-1, 2.8, 1, 12, 0.2, 0.2); 
+  Rect(-1, 2.8, -1, 12, 0.2, 0.2); 
+
+  glDepthMask(GL_TRUE);
+  glDisable(GL_BLEND);
+
+
+  a+=10; if (a >= 360) a = 0;
+  glPopMatrix();
+  glFlush();
+}
+
+void makeshaft (void) {
+int i;
+  i = glGenLists(1);
+  glNewList(i, GL_COMPILE);
+  cylinder(10.4, 0, 0, 2, 0.3, 0.3, 1, 0, 365);
+  cylinder(7.1, 0, 0, 2, 0.3, 0.3, 0, 0, 365);
+  cylinder(3.8, 0, 0, 2, 0.3, 0.3, 0, 0, 365);
+  cylinder(0.5, 0, 0, 2, 0.3, 0.3, 0, 0, 365);
+  cylinder(-1.5, 0, 0, 1, 0.3, 0.3, 1, 0, 365);
+
+  cylinder(12.4, 0, 0, 1, 3, 2.5, 0, 0, 365);
+  Rect(12.4, -0.3, 2.8, 0.5, 0.6, 5.6);
+  Rect(12.4, -2.8, 0.3, 0.5, 5.6, 0.6);
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
+  CrankBit(0.5, -0.4, 0.5);
+  cylinder(0.5, 0.5, 0, 0.2, 2, 2, 1, 240, 300);
+  CrankBit(-0.7, -0.4, 0.5);
+  cylinder(-0.7, 0.5, 0, 0.2, 2, 2, 1, 240, 300);
+
+  CrankBit(2.5, -1.4, 0.5);
+  cylinder(2.5, -0.5, 0, 0.2, 2, 2, 1, 60, 120);
+  CrankBit(3.8, -1.4, 0.5);
+  cylinder(3.8, -0.5, 0, 0.2, 2, 2, 1, 60, 120);
+
+  CrankBit(5.8, -0.4, 0.5);
+  cylinder(5.8, 0.5, 0, 0.2, 2, 2, 1, 240, 300);
+  CrankBit(7.1, -0.4, 0.5);
+  cylinder(7.1, 0.5, 0, 0.2, 2, 2, 1, 240, 300);
+
+  CrankBit(9.1, -1.4, 0.5);
+  cylinder(9.1, -0.5, 0, 0.2, 2, 2, 1, 60, 120);
+  CrankBit(10.4, -1.4, 0.5);
+  cylinder(10.4, -0.5, 0, 0.2, 2, 2, 1, 60, 120);
+
+  glEndList();
+
+}
+
+void reshape_engine(ModeInfo *mi, int width, int height)
+{
+
+ glViewport(0,0,(GLint)width, (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0,1.0,-1.0,1.0,1.5,70.0);
+ glMatrixMode(GL_MODELVIEW);
+ win_h = height; win_w = width;
+}
+
+
+void init_engine(ModeInfo *mi)
+{
+int screen = MI_SCREEN(mi);
+Engine *e;
+
+ if (engine == NULL) {
+   if ((engine = (Engine *) calloc(MI_NUM_SCREENS(mi),
+                                        sizeof(Engine))) == NULL)
+          return;
+ }
+ e = &engine[screen];
+ e->window = MI_WINDOW(mi);
+
+ e->x = e->y = e->z = e->a = e->an1 = e->nx = e->ny = e->nz = 
+ e->dx = e->dy = e->dz = e->da = 0;
+
+ if (move) {
+   e->dx = (float)(random() % 1000)/30000;
+   e->dy = (float)(random() % 1000)/30000;
+   e->dz = (float)(random() % 1000)/30000;
+ } else {
+  viewer[0] = 0; viewer[1] = 6; viewer[2] = 15;
+  lookat[0] = 0; lookat[1] = 4; lookat[2] = 0; 
+ }
+ if (spin) {
+   e->da = (float)(random() % 1000)/125 - 4;
+   e->nx = (float)(random() % 100) / 100;
+   e->ny = (float)(random() % 100) / 100;
+   e->nz = (float)(random() % 100) / 100;
+ }
+
+ if ((e->glx_context = init_GL(mi)) != NULL) {
+      reshape_engine(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ } else {
+     MI_CLEARWINDOW(mi);
+ }
+ glClearColor(0.0,0.0,0.0,0.0);
+ glShadeModel(GL_SMOOTH);
+ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_NORMALIZE);
+ make_tables();
+ makeshaft();
+ makepiston();
+}
+
+void draw_engine(ModeInfo *mi) {
+Engine *e = &engine[MI_SCREEN(mi)];
+Window w = MI_WINDOW(mi);
+Display *disp = MI_DISPLAY(mi);
+
+  if (!e->glx_context)
+      return;
+
+  glXMakeCurrent(disp, w, *(e->glx_context));
+
+  display(e);
+
+  if(mi->fps_p) do_fps(mi);
+  glFinish(); 
+  glXSwapBuffers(disp, w);
+}
+
+void release_engine(ModeInfo *mi) {
+
+  if (engine != NULL) {
+   (void) free((void *) engine);
+   engine = NULL;
+  }
+  FreeAllGL(MI);
+}
+
+#endif
diff --git a/hacks/glx/flipscreen3d.c b/hacks/glx/flipscreen3d.c
new file mode 100644 (file)
index 0000000..c2bca27
--- /dev/null
@@ -0,0 +1,449 @@
+/*
+ * screenflip - takes snapshots of the screen and flips it around
+ *
+ * version 1.0 - Oct 24, 2001
+ *
+ * Copyright (C) 2001 Ben Buxton (bb@cactii.net)
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#include <X11/Intrinsic.h>
+
+
+#ifdef STANDALONE
+# define PROGCLASS                                      "Screenflip"
+# define HACK_INIT                                      init_screenflip
+# define HACK_DRAW                                      draw_screenflip
+# define HACK_RESHAPE                           reshape_screenflip
+# define screenflip_opts                                     xlockmore_opts
+/* insert defaults here */
+
+#define DEFAULTS       "*delay:       20000       \n" \
+                        "*showFPS:       False       \n" \
+                        "*rotate:       True       \n" \
+
+# include "xlockmore.h"                         /* from the xscreensaver distribution */
+#else  /* !STANDALONE */
+# include "xlock.h"                                     /* from the xlockmore distribution */
+#endif /* !STANDALONE */
+
+/* lifted from lament.c */
+#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
+#define RANDSIGN() ((random() & 1) ? 1 : -1)
+
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+
+int rotate;
+
+int winw, winh;
+int tw, th; /* texture width, height */
+int tx, ty;
+GLfloat max_tx, max_ty;
+
+#define QW 12
+#define QH 12
+GLfloat qw = QW, qh = QH; /* q? are for the quad we'll draw */
+GLfloat qx = -6 , qy = 6;
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+
+static XrmOptionDescRec opts[] = {
+  {"+rotate", ".screenflip.rotate", XrmoptionNoArg, (caddr_t) "false" },
+  {"-rotate", ".screenflip.rotate", XrmoptionNoArg, (caddr_t) "true" },
+};
+
+
+static argtype vars[] = {
+  {(caddr_t *) &rotate, "rotate", "Rotate", "True", t_Bool},
+};
+
+
+
+ModeSpecOpt screenflip_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+#ifdef USE_MODULES
+ModStruct   screenflip_description =
+{"screenflip", "init_screenflip", "draw_screenflip", "release_screenflip",
+ "draw_screenflip", "init_screenflip", NULL, &screenflip_opts,
+ 1000, 1, 2, 1, 4, 1.0, "",
+ "Screenflips", 0, NULL};
+
+#endif
+
+
+typedef struct {
+  GLXContext *glx_context;
+  Window window;
+} Screenflip;
+
+static Screenflip *screenflip = NULL;
+
+#include <math.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "grab-ximage.h"
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+static GLfloat viewer[] = {0.0, 0.0, 15.0};
+
+int regrab = 0;
+int fadetime = 0; /* fade before regrab */
+
+
+/* draw the texture mapped quad (actually two back to back)*/
+void showscreen(int frozen)
+{
+  static GLfloat r = 1, g = 1, b = 1, a = 1;
+  GLfloat qxw, qyh;
+  GLfloat x, y, w, h;
+  /* static int stretch; */
+  static GLfloat stretch_val_x = 0, stretch_val_y = 0;
+  static GLfloat stretch_val_dx = 0, stretch_val_dy = 0;
+  /* static int stretch_x = 0, stretch_y = 0; */
+
+  if (fadetime) {
+/*    r -= 0.02; g -= 0.02; b -= 0.02; */
+    a -= 0.02;
+    if (a < 0) {
+      regrab = 1;
+      fadetime = 0;
+    }
+  } else if (a < 0) {
+    r = g = b = a = 1;
+    stretch_val_x = stretch_val_y = stretch_val_dx = stretch_val_dy = 0;
+  }
+  if (stretch_val_dx == 0 && !frozen && !(random() % 25))
+    stretch_val_dx = (float)(random() % 100) / 5000;
+  if (stretch_val_dy == 0 && !frozen && !(random() % 25))
+    stretch_val_dy = (float)(random() % 100) / 5000;
+    
+  qxw = qx+qw;
+  qyh = qy-qh;
+  x = qx; y = qy;
+  w = qxw; h = qyh;
+
+  if (!frozen) {
+     w *= sin (stretch_val_x) + 1;
+     x *= sin (stretch_val_x) + 1;
+     if (!fadetime) stretch_val_x += stretch_val_dx;
+     if (stretch_val_x > 2*M_PI && !(random() % 5))
+       stretch_val_dx = (float)(random() % 100) / 5000;
+     else
+       stretch_val_x -= 2*M_PI;
+
+     if (!fadetime) stretch_val_y += stretch_val_dy;
+     h *= sin (stretch_val_y) / 2 + 1;
+     y *= sin (stretch_val_y) / 2 + 1;
+     if (stretch_val_y > 2*M_PI && !(random() % 5))
+       stretch_val_dy = (float)(random() % 100) / 5000;
+     else
+       stretch_val_y -= 2*M_PI;
+  }
+
+  glColor4f(r, g, b, a);
+
+  glEnable(GL_TEXTURE_2D);
+  glEnable(GL_BLEND);
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+  glDepthMask(GL_FALSE);
+
+  glBegin(GL_QUADS);
+
+  glNormal3f(0, 0, 1);
+
+  glTexCoord2f(0, max_ty);
+  glVertex3f(x, y, 0);
+
+  glTexCoord2f(max_tx, max_ty);
+  glVertex3f(w, y, 0);
+
+  glTexCoord2f(max_tx, 0);
+  glVertex3f(w, h, 0);
+
+  glTexCoord2f(0, 0);
+  glVertex3f(x, h, 0);
+
+  glNormal3f(0, 0, -1);
+
+  glTexCoord2f(0, max_ty);
+  glVertex3f(x, y, -0.05);
+
+  glTexCoord2f(0, 0);
+  glVertex3f(x, h, -0.05);
+
+  glTexCoord2f(max_tx, 0);
+  glVertex3f(w, h, -0.05);
+
+  glTexCoord2f(max_tx, max_ty);
+  glVertex3f(w, y, -0.05);
+
+  glEnd();
+
+
+  glDisable(GL_TEXTURE_2D);
+  glDepthMask(GL_TRUE);
+
+  glBegin(GL_LINE_LOOP);
+   glVertex3f(x, y, 0);
+   glVertex3f(x, h, 0);
+   glVertex3f(w, h, 0);
+   glVertex3f(w, y, 0);
+ glEnd();
+  glDisable(GL_BLEND);
+
+}
+
+/* This function is responsible for 'zooming back' the square after
+ * a new chunk has been grabbed with getSnapshot(), and positioning
+ * it suitably on the screen. Once positioned (where we begin to rotate),
+ * it just does a glTranslatef() and returns 1
+ */
+
+int inposition(void)
+{
+  static GLfloat curx, cury, curz = 0;
+  GLfloat wx;
+  GLfloat wy;
+  wx = 0 - (qw/2);
+  wy = (qh/2);
+
+  if (curx == 0) curx = qx;
+  if (cury == 0) cury = qy;
+  if (regrab) {
+     curz = 0;
+     curx = qx;
+     cury = qy;
+     regrab = 0;
+  }
+  if (curz > -10 || curx > wx + 0.1 || curx < wx - 0.1 ||
+         cury > wy + 0.1 || cury < wy - 0.1) {
+    if (curz > -10)
+      curz -= 0.05;
+    if (curx > wx) {
+       qx -= 0.02;
+       curx -= 0.02;
+    }
+    if (curx < wx) {
+       qx += 0.02;
+       curx += 0.02;
+    }
+    if (cury > wy) {
+       qy -= 0.02;
+       cury -= 0.02;
+    }
+    if (cury < wy) {
+       qy += 0.02;
+       cury += 0.02;
+    }
+    glTranslatef(0, 0, curz);
+    return 0;
+  }
+  glTranslatef(0, 0, curz);
+  return 1;
+
+}
+
+void drawgrid(void)
+{
+  int i;
+
+  glColor3f(0, 0.7, 0);
+  glBegin(GL_LINES);
+  for (i = 0 ; i <= 50; i+=2) {
+      glVertex3f( -25, -15, i-70);
+      glVertex3f( 25, -15, i-70);
+      glVertex3f( i-25, -15, -70);
+      glVertex3f( i-25, -15, -20);
+  }
+  glEnd();
+}
+
+void display(void)
+{
+  static GLfloat rx=1, ry=1, rz=0;
+  static GLfloat rot = 0;
+  static GLfloat drot = 0;
+  static GLfloat odrot = 1;
+  static GLfloat ddrot = 0;
+  static float theta = 0, rho = 0, dtheta = 0, drho = 0, gamma = 0, dgamma = 0;
+  static GLfloat orot;
+  int frozen;
+
+  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+  glLoadIdentity();
+  gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
+  glPushMatrix();
+
+  if (inposition()) {
+    frozen = 0;
+    glTranslatef(5 * sin(theta), 5 * sin(rho), 10 * cos(gamma) - 10);
+/* randomly change the speed */
+    if (!(random() % 300)) {
+      if (random() % 2)
+        drho = 1/60 - (float)(random() % 100)/3000;
+      if (random() % 2)
+        dtheta = 1/60 - (float)(random() % 100)/3000;
+      if (random() % 2)
+        dgamma = 1/60 - (float)(random() % 100)/3000;
+    }
+    if (rotate) glRotatef(rot, rx, ry, rz);
+/* update variables with each frame */
+    if (!fadetime) {
+      theta += dtheta;
+      rho += drho;
+      gamma += dgamma;
+      rot += drot;
+      drot += ddrot;
+    }
+/* dont let our rotation speed get too high */
+    if (drot > 5 && ddrot > 0)
+        ddrot = 0 - (GLfloat)(random() % 100) / 1000;
+    else if (drot < -5 && ddrot < 0)
+        ddrot = (GLfloat)(random() % 100) / 1000;
+  } else { /* reset some paramaters */
+    ddrot = 0.05 - (GLfloat)(random() % 100) / 1000;
+    theta = rho = gamma = 0;
+    rot = 0;
+    frozen = 1;
+  }
+  if (!fadetime && (rot >= 360 || rot <= -360) && !(random() % 7)) { /* rotate  change */
+    rx = (GLfloat)(random() % 100) / 100;
+    ry = (GLfloat)(random() % 100) / 100;
+    rz = (GLfloat)(random() % 100) / 100;
+  }
+  if (odrot * drot < 0 && tw < winw && !(random() % 10)) {
+    fadetime = 1;                /* randomly fade and get new snapshot */
+  }
+  orot = rot;
+  odrot = drot;
+  if (rot > 360 || rot < -360) /* dont overflow rotation! */
+    rot -= rot;
+  showscreen(frozen);
+  glPopMatrix();
+  glFlush();
+}
+
+void reshape_screenflip(ModeInfo *mi, int width, int height)
+{
+ glViewport(0,0,(GLint)width, (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(45, 1, 2.0, 85);
+ glMatrixMode(GL_MODELVIEW);
+ winw = width;
+ winh = height;
+}
+
+void getSnapshot (ModeInfo *modeinfo)
+{
+  XImage *ximage;
+
+ ximage = screen_to_ximage (modeinfo->xgwa.screen, modeinfo->window);
+
+  qw = QW; qh = QH;
+  tw = modeinfo->xgwa.width;
+  th = modeinfo->xgwa.height;
+
+  qx += (qw*tw/winw);
+  qy -= (qh*th/winh);
+
+  qw *= (GLfloat)tw/winw;
+  qh *= (GLfloat)th/winh;
+
+  max_tx = (GLfloat) tw / (GLfloat) ximage->width;
+  max_ty = (GLfloat) th / (GLfloat) ximage->height;
+
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+                  GL_LINEAR_MIPMAP_LINEAR);
+ if (gluBuild2DMipmaps(GL_TEXTURE_2D, 3,
+                       ximage->width, ximage->height,
+                       GL_RGBA, GL_UNSIGNED_BYTE, ximage->data)) {
+    printf("Error!\n");
+    exit(1);
+ }
+ free(ximage->data);
+ ximage->data = 0;
+ XDestroyImage (ximage);
+}
+
+void init_screenflip(ModeInfo *mi)
+{
+  int screen = MI_SCREEN(mi);
+  Screenflip *c;
+
+ if (screenflip == NULL) {
+   if ((screenflip = (Screenflip *) calloc(MI_NUM_SCREENS(mi),
+                                        sizeof(Screenflip))) == NULL)
+          return;
+ }
+ c = &screenflip[screen];
+ c->window = MI_WINDOW(mi);
+
+ if ((c->glx_context = init_GL(mi)) != NULL) {
+      reshape_screenflip(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ } else {
+     MI_CLEARWINDOW(mi);
+ }
+ winh = MI_WIN_HEIGHT(mi);
+ winw = MI_WIN_WIDTH(mi);
+ glClearColor(0.0,0.0,0.0,0.0);
+ glShadeModel(GL_SMOOTH);
+ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_FRONT);
+ glDisable(GL_LIGHTING);
+
+ getSnapshot(mi);
+}
+
+void draw_screenflip(ModeInfo *mi)
+{
+  Screenflip *c = &screenflip[MI_SCREEN(mi)];
+  Window w = MI_WINDOW(mi);
+  Display *disp = MI_DISPLAY(mi);
+
+  if (!c->glx_context)
+      return;
+
+ glXMakeCurrent(disp, w, *(c->glx_context));
+
+  if (regrab)
+    getSnapshot(mi);
+
+  display();
+
+  if(mi->fps_p) do_fps(mi);
+  glFinish(); 
+  glXSwapBuffers(disp, w);
+}
+
+void release_screenflip(ModeInfo *mi)
+{
+  if (screenflip != NULL) {
+   (void) free((void *) screenflip);
+   screenflip = NULL;
+  }
+  FreeAllGL(MI);
+}
+
+#endif
diff --git a/hacks/glx/font-ximage.c b/hacks/glx/font-ximage.c
new file mode 100644 (file)
index 0000000..1b95173
--- /dev/null
@@ -0,0 +1,242 @@
+/* font-ximage.c --- renders text to an XImage for use with OpenGL.
+ * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <GL/gl.h>     /* only for GLfloat */
+
+extern char *progname;
+
+#include <X11/Xutil.h>
+
+#undef MAX
+#define MAX(a,b) ((a)>(b)?(a):(b))
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static Bool
+bigendian (void)
+{
+  union { int i; char c[sizeof(int)]; } u;
+  u.i = 1;
+  return !u.c[0];
+}
+
+/* return the next larger power of 2. */
+static int
+to_pow2 (int i)
+{
+  static unsigned int pow2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,
+                                 2048, 4096, 8192, 16384, 32768, 65536 };
+  int j;
+  for (j = 0; j < countof(pow2); j++)
+    if (pow2[j] >= i) return pow2[j];
+  abort();  /* too big! */
+}
+
+
+/* Returns an XImage structure containing the string rendered in the font.
+   This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
+   extra byte set to 0xFF.
+
+   Foregroune and background are GL-style color specifiers: 4 floats from
+   0.0-1.0.
+ */
+XImage *
+text_to_ximage (Screen *screen, Visual *visual,
+                const char *font,
+                const char *text_lines,
+                GLfloat *texture_fg,
+                GLfloat *texture_bg)
+{
+  Display *dpy = DisplayOfScreen (screen);
+  int width, height;
+  XFontStruct *f;
+  Pixmap bitmap;
+
+  f = XLoadQueryFont(dpy, font);
+  if (!f)
+    {
+      f = XLoadQueryFont(dpy, "fixed");
+      if (f)
+        fprintf (stderr, "%s: unable to load font \"%s\"; using \"fixed\".\n",
+                 progname, font);
+      else
+        {
+          fprintf (stderr, "%s: unable to load fonts \"%s\" or \"fixed\"!\n",
+                   progname, font);
+          exit (1);
+        }
+    }
+
+  /* Parse the text, and render it to `bitmap'
+   */
+  {
+    char *text, *text2, *line, *token;
+    int lines;
+    XCharStruct overall;
+    XGCValues gcv;
+    GC gc;
+
+    int margin = 2;
+    int fg = 1;
+    int bg = 0;
+    int xoff, yoff;
+
+    text  = strdup (text_lines);
+    while (*text &&
+           (text[strlen(text)-1] == '\r' ||
+            text[strlen(text)-1] == '\n'))
+      text[strlen(text)-1] = 0;
+
+    text2 = strdup (text);
+
+    memset(&overall, 0, sizeof(overall));
+    token = text;
+    lines = 0;
+    while ((line = strtok (token, "\r\n")))
+      {
+        XCharStruct o2;
+        int ascent, descent, direction;
+        token = 0;
+        XTextExtents (f, line, strlen(line),
+                      &direction, &ascent, &descent, &o2);
+        overall.lbearing = MAX(overall.lbearing, o2.lbearing);
+        overall.rbearing = MAX(overall.rbearing, o2.rbearing);
+        lines++;
+      }
+
+    width = overall.lbearing + overall.rbearing + margin + margin + 1;
+    height = ((f->ascent + f->descent) * lines) + margin + margin;
+
+    /* GL texture sizes must be powers of two. */
+    {
+      int w2 = to_pow2(width);
+      int h2 = to_pow2(height);
+      xoff = (w2 - width)  / 2;
+      yoff = (h2 - height) / 2;
+      width  = w2;
+      height = h2;
+    }
+
+    bitmap = XCreatePixmap(dpy, RootWindowOfScreen (screen), width, height, 1);
+
+    gcv.font = f->fid;
+    gcv.foreground = bg;
+    gc = XCreateGC (dpy, bitmap, (GCFont | GCForeground), &gcv);
+    XFillRectangle(dpy, bitmap, gc, 0, 0, width, height);
+    XSetForeground(dpy, gc, fg);
+
+    token = text2;
+    lines = 0;
+    while ((line = strtok(token, "\r\n")))
+      {
+        XCharStruct o2;
+        int ascent, descent, direction, xoff2;
+        token = 0;
+
+        XTextExtents(f, line, strlen(line),
+                     &direction, &ascent, &descent, &o2);
+        xoff2 = (xoff +
+                 ((overall.lbearing + overall.rbearing) -
+                  (o2.lbearing + o2.rbearing)) / 2);
+
+        XDrawString(dpy, bitmap, gc,
+                    overall.lbearing + margin + xoff,
+                    ((f->ascent * (lines + 1)) +
+                     (f->descent * lines) +
+                     margin +
+                     yoff),
+                    line, strlen(line));
+        lines++;
+      }
+    free(text2);
+
+    XUnloadFont(dpy, f->fid);
+    XFree((XPointer) f);
+    XFreeGC(dpy, gc);
+  }
+
+  /* Convert the server-side Pixmap to a client-side GL-ordered XImage.
+   */
+  {
+    XImage *ximage1, *ximage2;
+    unsigned long fg, bg;
+    int x, y;
+
+    ximage1 = XGetImage (dpy, bitmap, 0, 0, width, height, ~0L, ZPixmap);
+    XFreePixmap(dpy, bitmap);
+    ximage2 = XCreateImage (dpy, visual, 32, ZPixmap, 0, 0,
+                            width, height, 32, 0);
+
+    ximage2->data = (char *) malloc (height * ximage2->bytes_per_line);
+
+    /* Translate the 1-bit image to a deep image:
+       first figure out what the colors are.
+     */
+    {
+      int rpos, gpos, bpos, apos;  /* bitfield positions */
+
+      /* Note that unlike X, which is endianness-agnostic (since any XImage
+         can have its own specific bit ordering, with the server reversing
+         things as necessary) OpenGL pretends everything is client-side, so
+         we need to pack things in the right order for the client machine.
+       */
+      if (bigendian())
+        rpos = 24, gpos = 16, bpos =  8, apos =  0;
+      else
+        rpos =  0, gpos =  8, bpos = 16, apos = 24;
+
+      fg = (((unsigned long) (texture_fg[0] * 255.0) << rpos) |
+            ((unsigned long) (texture_fg[1] * 255.0) << gpos) |
+            ((unsigned long) (texture_fg[2] * 255.0) << bpos) |
+            ((unsigned long) (texture_fg[3] * 255.0) << apos));
+      bg = (((unsigned long) (texture_bg[0] * 255.0) << rpos) |
+            ((unsigned long) (texture_bg[1] * 255.0) << gpos) |
+            ((unsigned long) (texture_bg[2] * 255.0) << bpos) |
+            ((unsigned long) (texture_bg[3] * 255.0) << apos));
+    }
+
+    for (y = 0; y < height; y++)
+      {
+       int y2 = (height-1-y); /* Texture maps are upside down. */
+       for (x = 0; x < width; x++)
+          XPutPixel (ximage2, x, y, 
+                     XGetPixel (ximage1, x, y2) ? fg : bg);
+      }
+
+    free (ximage1->data);
+    ximage1->data = 0;
+    XDestroyImage (ximage1);
+
+#if 0
+    for (y = 0; y < height; y++)
+      {
+       int y2 = (height-1-y); /* Texture maps are upside down. */
+       for (x = 0; x < width; x++)
+          fputc ((XGetPixel (ximage2, x, y2) == fg ? '#' : ' '), stdout);
+        fputc ('\n', stdout);
+      }
+    fputc ('\n', stdout);
+#endif /* 0 */
+
+    return ximage2;
+  }
+}
diff --git a/hacks/glx/font-ximage.h b/hacks/glx/font-ximage.h
new file mode 100644 (file)
index 0000000..cd9d56e
--- /dev/null
@@ -0,0 +1,30 @@
+/* font-ximage.c --- renders text to an XImage for use with OpenGL.
+ * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#ifndef __FONT_XIMAGE_H__
+# define __FONT_XIMAGE_H__
+
+/* Returns an XImage structure containing the string rendered in the font.
+   This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
+   extra byte set to 0xFF.
+
+   Foregroune and background are GL-style color specifiers: 4 floats from
+   0.0-1.0.
+ */
+XImage *text_to_ximage (Screen *screen, Visual *visual,
+                        const char *font,
+                        const char *text_lines,
+                        GLfloat *texture_fg,
+                        GLfloat *texture_bg);
+
+
+#endif /* __FONT_XIMAGE_H__ */
index b254397eab2381c0a82a1996512e2b997d880334..16ee1b0827fb7b852eaf8ab6a60c1f0ef1a7cba4 100644 (file)
@@ -72,7 +72,6 @@ fps_init (ModeInfo *mi)
 static void
 fps_print_string (ModeInfo *mi, GLfloat x, GLfloat y, const char *string)
 {
-  int i;
   /* save the current state */
   /* note: could be expensive! */
 
index c1245f0ba62fd9410c2d1321f7e77d5a3b377ba1..2e9f067037b0564e01beff16234688a488073f46 100644 (file)
@@ -54,9 +54,9 @@
 # define gflux_opts                                            xlockmore_opts
 #define DEFAULTS                        "*delay:               20000   \n" \
                                                                                "*showFPS:      False   \n" \
+                                        "*mode:         light" "\n" \
                                         "*squares:      19      \n" \
                                                                                "*resolution:   0       \n" \
-                                        "*draw:         2       \n" \
                                         "*flat:         0       \n" \
                                         "*speed:        0.05    \n" \
                                         "*rotationx:    0.01    \n" \
@@ -64,9 +64,9 @@
                                         "*rotationz:    0.1     \n" \
                                         "*waves:        3       \n" \
                                         "*waveChange:   50      \n" \
-                                        "*waveHeight:   1.0     \n" \
-                                        "*waveFreq:    3.0     \n" \
-                                        "*zoom:         1.0     \n" 
+                                        "*waveHeight:  0.8      \n" \
+                                        "*waveFreq:    3.0      \n" \
+                                        "*zoom:        1.0      \n" 
 
 
 # include "xlockmore.h"                                /* from the xscreensaver distribution */
 
 #include <math.h>
 
-static enum {wire=0,solid,light,checker,textured} _draw; /* draw style */
+#include "grab-ximage.h"
+
+
+static enum {wire=0,solid,light,checker,textured,grab} _draw; /* draw style */
 static int _squares = 19;                                 /* grid size */
 static int _resolution = 4;                    /* wireframe resolution */
 static int _flat = 0;
@@ -129,7 +132,8 @@ static float _waveFreq = 3.0;
 static XrmOptionDescRec opts[] = {
     {"-squares", ".gflux.squares", XrmoptionSepArg, (caddr_t) NULL},
     {"-resolution", ".gflux.resolution", XrmoptionSepArg, (caddr_t) NULL},
-    {"-draw", ".gflux.draw", XrmoptionSepArg, (caddr_t) NULL},
+/*    {"-draw", ".gflux.draw", XrmoptionSepArg, (caddr_t) NULL},*/
+    {"-mode", ".gflux.mode", XrmoptionSepArg, (caddr_t) NULL},
     {"-flat", ".gflux.flat", XrmoptionSepArg, (caddr_t) NULL},
     {"-speed", ".gflux.speed", XrmoptionSepArg, (caddr_t) NULL},
     {"-rotationx", ".gflux.rotationx", XrmoptionSepArg, (caddr_t) NULL},
@@ -146,7 +150,7 @@ static XrmOptionDescRec opts[] = {
 static argtype vars[] = {
     {(caddr_t *) & _squares, "squares", "Squares", "19", t_Int},
     {(caddr_t *) & _resolution, "resolution", "Resolution", "4", t_Int},
-    {(caddr_t *) & _draw, "draw", "Draw", "2", t_Int},
+/*    {(caddr_t *) & _draw, "draw", "Draw", "2", t_Int},*/
     {(caddr_t *) & _flat, "flat", "Flat", "0", t_Int},
     {(caddr_t *) & _speed, "speed", "Speed", "0.05", t_Float},
     {(caddr_t *) & _rotationx, "rotationx", "Rotationx", "0.01", t_Float},
@@ -164,7 +168,7 @@ static OptionStruct desc[] =
 {
     {"-squares num", "size of grid in squares (19)"},
     {"-resolution num", "detail of lines making grid, wireframe only (4)"},
-    {"-draw num", "draw method to use: 0=wireframe 1=solid 2=lit (0)"},
+/*    {"-draw num", "draw method to use: 0=wireframe 1=solid 2=lit (0)"},*/
     {"-flat num", "shading method, not wireframe: 0=smooth 1=flat (0)"},
     {"-speed num", "speed of waves (0.05)"},
     {"-rotationx num", "speed of xrotation (0.01)"},
@@ -189,6 +193,7 @@ ModStruct   gflux_description =
 
 /* structure for holding the gflux data */
 typedef struct {
+    ModeInfo *modeinfo;
     int screen_width, screen_height;
     GLXContext *glx_context;
     Window window;
@@ -209,6 +214,8 @@ typedef struct {
        GLubyte *image;
 #endif
     GLint texName;
+    GLfloat tex_xscale;
+    GLfloat tex_yscale;
     void (*drawFunc)(void);
 } gfluxstruct;
 static gfluxstruct *gflux = NULL;
@@ -217,6 +224,7 @@ static gfluxstruct *gflux = NULL;
 void initLighting(void);
 void initTexture(void);
 void loadTexture(void);
+void grabTexture(void);
 void createTexture(void);
 void displaySolid(void);            /* drawFunc implementations */
 void displayLight(void);
@@ -280,6 +288,10 @@ void initializeGL(ModeInfo *mi, GLsizei width, GLsizei height)
 {
   reshape_gflux(mi, width, height);
   glViewport( 0, 0, width, height ); 
+
+  gflux->tex_xscale = 1.0;  /* maybe changed later */
+  gflux->tex_yscale = 1.0;
+
   switch(_draw) {
     case solid :
       gflux->drawFunc = (displaySolid);
@@ -303,6 +315,13 @@ void initializeGL(ModeInfo *mi, GLsizei width, GLsizei height)
       loadTexture();
       initTexture();
       initLighting();
+    break;
+       case grab :
+      gflux->drawFunc = (displayTexture);
+      glEnable(GL_DEPTH_TEST);
+      grabTexture();
+      initTexture();
+      initLighting();
     break;
     case wire :
        default :
@@ -330,6 +349,26 @@ void init_gflux(ModeInfo * mi)
     }
     gp = &gflux[screen];
 
+    {
+      char *s = get_string_resource ("mode", "Mode");
+      if (!s || !*s)                       _draw = wire;
+      else if (!strcasecmp (s, "wire"))    _draw = wire;
+      else if (!strcasecmp (s, "solid"))   _draw = solid;
+      else if (!strcasecmp (s, "light"))   _draw = light;
+      else if (!strcasecmp (s, "checker")) _draw = checker;
+      else if (!strcasecmp (s, "stdin"))   _draw = textured;
+      else if (!strcasecmp (s, "grab"))    _draw = grab;
+      else
+        {
+          fprintf (stderr,
+                   "%s: mode must be one of: wire, solid, "
+                   "light, checker, or grab; not \"%s\"\n",
+                   progname, s);
+          exit (1);
+        }
+    }
+
+    gp->modeinfo = mi;
     gp->window = MI_WINDOW(mi);
     if ((gp->glx_context = init_GL(mi)) != NULL) {
         reshape_gflux(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
@@ -498,6 +537,7 @@ void createTexture(void)
 /* specifies image as texture */
 void initTexture(void)
 {
+    clear_gl_error();
     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
     glGenTextures(1, &gflux->texName);
     glBindTexture(GL_TEXTURE_2D, gflux->texName);
@@ -505,14 +545,105 @@ void initTexture(void)
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    check_gl_error("texture parameter");
+
+    /* Bail out if the texture is too large. */
+    {
+      GLint width;
+      glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA, gflux->imageWidth,
+                   gflux->imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+      glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0,
+                                GL_TEXTURE_WIDTH, &width);
+      if (width <= 0)
+        {
+          glGetIntegerv (GL_MAX_TEXTURE_SIZE, &width);
+          fprintf (stderr,
+                   "%s: texture too large (%dx%d -- probable max %dx%d)\n",
+                   progname, gflux->imageWidth, gflux->imageHeight,
+                   width, width);
+          return;
+        }
+    }
+
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, gflux->imageWidth,
             gflux->imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, gflux->image);
-
+    check_gl_error("texture creation");
 }
 
 #undef presult
 #endif
 
+
+void
+grabTexture(void)
+{
+  int real_width  = gflux->modeinfo->xgwa.width;
+  int real_height = gflux->modeinfo->xgwa.height;
+  XImage *ximage = screen_to_ximage (gflux->modeinfo->xgwa.screen,
+                                     gflux->window);
+
+  if (ximage->width > 1280 ||   /* that's too damned big... */
+      ximage->height > 1280)
+    {
+      Display *dpy = gflux->modeinfo->dpy;
+      Visual *v = gflux->modeinfo->xgwa.visual;
+      int size = (ximage->width < ximage->height ?
+                  ximage->width : ximage->height);
+      int real_size = (ximage->width < ximage->height ?
+                       real_width : real_height);
+      XImage *x2;
+      int x, y, xoff, yoff;
+
+      if (size > 1024) size = 1024;
+
+      x2 = XCreateImage (dpy, v, 32, ZPixmap, 0, 0, size, size, 32, 0);
+      xoff = (real_width  > size ? (random() % (real_width  - size)) : 0);
+      yoff = (real_height > size ? (random() % (real_height - size)) : 0);
+
+# if 0
+      fprintf(stderr, "%s: cropping texture from %dx%d to %dx%d @ %d,%d\n",
+              progname, ximage->width, ximage->height, x2->width, x2->height,
+              xoff, yoff);
+# endif
+      x2->data = ximage->data;  /* we can reuse the same array */
+      for (y = 0; y < x2->height; y++)
+        for (x = 0; x < x2->width; x++)
+          XPutPixel (x2, x, y, XGetPixel (ximage, x+xoff, y+yoff));
+
+      real_width = real_height = real_size;
+      ximage->data = 0;
+      XDestroyImage (ximage);
+      ximage = x2;
+    }
+
+  /* Add a border. */
+  {
+    unsigned long gray = 0xAAAAAAAAL;  /* so shoot me */
+    int i;
+    for (i = 0; i < real_height; i++)
+      {
+        XPutPixel (ximage, 0, i, gray);
+        XPutPixel (ximage, real_width-1, i, gray);
+      }
+    for (i = 0; i < real_width; i++)
+      {
+        XPutPixel (ximage, i, 0, gray);
+        XPutPixel (ximage, i, real_height-1, gray);
+      }
+  }
+
+  gflux->imageWidth  = ximage->width;
+  gflux->imageHeight = ximage->height;
+  gflux->image = ximage->data;
+
+  gflux->tex_xscale = ((GLfloat) real_width  / (GLfloat) ximage->width);
+  gflux->tex_yscale = ((GLfloat) real_height / (GLfloat) ximage->height);
+
+  ximage->data = 0;
+  XDestroyImage (ximage);
+}
+
+
 void initLighting(void)
 {
     static float ambientA[] = {0.0, 0.0, 0.0, 1.0};
@@ -564,6 +695,9 @@ void displayTexture(void)
     double du = 2.0/((double)_squares);
     double dv = 2.0/((double)_squares);
 
+    double xs = gflux->tex_xscale;
+    double ys = gflux->tex_yscale;
+
        glMatrixMode (GL_TEXTURE);
        glLoadIdentity ();
        glTranslatef(-1,-1,0);
@@ -577,8 +711,12 @@ void displayTexture(void)
     glScalef(1,1,(GLfloat)_waveHeight);
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glEnable(GL_TEXTURE_2D);
+
+    clear_gl_error();
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
        glBindTexture(GL_TEXTURE_2D, gflux->texName);
+    check_gl_error("texture binding");
+
        glColor3f(0.5,0.5,0.5);
  
     for(x=-1,u= 0;x<0.9999;x+=dx,u+=du) {
@@ -587,7 +725,7 @@ void displayTexture(void)
             z = getGrid(x,y,time);
         /*  genColour(z);
             glColor3fv(gflux->colour);
-        */  glTexCoord2f(u,v);
+        */  glTexCoord2f(u*xs,v*ys);
             glNormal3f(
                 getGrid(x+dx,y,time)-getGrid(x-dx,y,time),
                 getGrid(x,y+dy,time)-getGrid(x,y-dy,time),
@@ -598,7 +736,7 @@ void displayTexture(void)
             z = getGrid(x+dx,y,time);
         /*  genColour(z);
             glColor3fv(gflux->colour);
-        */  glTexCoord2f(u+du,v);
+        */  glTexCoord2f((u+du)*xs,v*ys);
             glNormal3f(
                 getGrid(x+dx+dx,y,time)-getGrid(x,y,time),
                 getGrid(x+dx,y+dy,time)-getGrid(x+dx,y-dy,time),
index d6c1cf01206cabd8a5ea6804eb680f36c0049c40..43f100335933a6e205bcdc50a7c01992ced7e2c0 100644 (file)
@@ -5,7 +5,7 @@ gflux \- rippling surface graphics hack
 .B gflux
 [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install]
 [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps]
-[\-squares \fInum\fP] [\-resolution \fInum\fP] [\-draw \fInum\fP]
+[\-squares \fInum\fP] [\-resolution \fInum\fP] [\-mode \fImode\fP]
 [\-flat \fInum\fP] [\-speed \fInum\fP]
 [\-rotationx \fInum\fP] [\-rotationy \fInum\fP] [\-rotationz \fInum\fP]
 [\-waves \fInum\fP] [\-waveChange \fInum\fP] [\-waveHeight \fInum\fP]
@@ -35,8 +35,20 @@ Specifies the size of the grid in squares. default 19
 .B \-resolution \fInum\fP\fP
 Specifies the wireframe detail of the squares. default 4
 .TP 8
-.B \-draw \fInum\fP\fP
-Specifies the draw method. 0 = wireframe, 1 = solid, 2 = light (default), 3 = checker texture mapped, 4 = PNM image is read from stdin and mapped to the surface
+.B \-mode \fImode\fP\fP
+Specifies the draw method: wireframe; solid (meaning a solid colored
+surface); light (same as solid, but with lighting effects);
+checker (a texture-mapped checkerboard pattern); or grab (meaning
+grab an image to manipulate.)
+
+When grabbing images, the image will be grabbed from the portion of
+the screen underlying the window, or from the system's video input,
+or from a random file on disk, as indicated by
+the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP,
+and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP
+file; see
+.BR xscreensaver-demo (1)
+for more details.
 .TP 8
 .B \-flat \fInum\fP\fP
 0 for smooth shading 1 for flat. default 0
@@ -83,6 +95,8 @@ It's not unknown for this and other OpenGL hacks to fail under hardware accelara
 .SH SEE ALSO
 .BR X (1),
 .BR xscreensaver (1)
+.BR xscreensaver\-demo (1),
+.BR xscreensaver\-getimage (1)
 .SH COPYRIGHT
 Copyright \(co 2000 by Josiah Pease.  Permission to use, copy, modify,
 distribute, and sell this software and its documentation for any purpose is
index f1190281ba3b870dbdb35a0429cfa9c89adea4f9..047abbf6c5ba61daa61fc9eef9b95c56d26c1ef7 100644 (file)
@@ -456,9 +456,9 @@ static void
 init_sun (ModeInfo * mi)
 {
   GLfloat light[4];
-  light[0] = -1;
-  light[1] = (int) (((random() % 3) & 0xFF) - 1);
-  light[2] = (int) (((random() % 3) & 0xFF) - 1);
+  light[0] = frand(2.0) - 1.0;
+  light[1] = frand(2.0) - 1.0;
+  light[2] = 1.0;
   light[3] = 0;
 
   glLightfv(GL_LIGHT0, GL_POSITION, light);
index 9970c53d4d63aee918ba45a1290e2e296911ebed..0ea82fc0497fa94d47f0488996553b2fd9baf611 100644 (file)
@@ -89,7 +89,7 @@ static Bool do_wander;
 static XrmOptionDescRec opts[] = {
   { "-text",   ".text",   XrmoptionSepArg, 0 },
   { "-spin",   ".spin",   XrmoptionSepArg, 0 },
-  { "+spin",   ".spin",   XrmoptionNoArg, "" },
+  { "+spin",   ".spin",   XrmoptionNoArg, "False" },
   { "-wander", ".wander", XrmoptionNoArg, "True" },
   { "+wander", ".wander", XrmoptionNoArg, "False" }
 };
diff --git a/hacks/glx/grab-ximage.c b/hacks/glx/grab-ximage.c
new file mode 100644 (file)
index 0000000..3ca543f
--- /dev/null
@@ -0,0 +1,156 @@
+/* grab-ximage.c --- grab the screen to an XImage for use with OpenGL.
+ * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <GL/gl.h>     /* only for GLfloat */
+
+#include "grabscreen.h"
+
+extern char *progname;
+
+#include <X11/Xutil.h>
+
+#undef MAX
+#define MAX(a,b) ((a)>(b)?(a):(b))
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static Bool
+bigendian (void)
+{
+  union { int i; char c[sizeof(int)]; } u;
+  u.i = 1;
+  return !u.c[0];
+}
+
+/* return the next larger power of 2. */
+static int
+to_pow2 (int i)
+{
+  static unsigned int pow2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,
+                                 2048, 4096, 8192, 16384, 32768, 65536 };
+  int j;
+  for (j = 0; j < countof(pow2); j++)
+    if (pow2[j] >= i) return pow2[j];
+  abort();  /* too big! */
+}
+
+
+/* Returns an XImage structure containing an image of the desktop.
+   (As a side-effect, that image will be painted onto the given Window.)
+   This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
+   extra byte set to 0xFF.
+ */
+XImage *
+screen_to_ximage (Screen *screen, Window window)
+{
+  Display *dpy = DisplayOfScreen (screen);
+  XWindowAttributes xgwa;
+  int win_width, win_height;
+  int tex_width, tex_height;
+
+  grab_screen_image (screen, window);
+
+  XGetWindowAttributes (dpy, window, &xgwa);
+  win_width = xgwa.width;
+  win_height = xgwa.height;
+
+  /* GL texture sizes must be powers of two. */
+  tex_width  = to_pow2(win_width);
+  tex_height = to_pow2(win_height);
+
+  /* Convert the server-side Drawable to a client-side GL-ordered XImage.
+   */
+  {
+    XImage *ximage1, *ximage2;
+
+    ximage1 = XGetImage (dpy, window, 0, 0, win_width, win_height, ~0L,
+                         ZPixmap);
+    ximage2 = XCreateImage (dpy, xgwa.visual, 32, ZPixmap, 0, 0,
+                            tex_width, tex_height, 32, 0);
+
+    ximage2->data = (char *) calloc (tex_height, ximage2->bytes_per_line);
+
+    /* Translate the server-ordered image to a client-ordered image.
+     */
+    {
+      int x, y;
+      int crpos, cgpos, cbpos, capos;  /* bitfield positions */
+      int srpos, sgpos, sbpos;
+      int srmsk, sgmsk, sbmsk;
+      int sdepth = ximage1->depth;
+
+      srmsk = ximage1->red_mask;
+      sgmsk = ximage1->green_mask;
+      sbmsk = ximage1->blue_mask;
+      if (sdepth == 32 || sdepth == 24)
+        srpos = 16, sgpos = 8, sbpos = 0;
+      else /* 15 or 16 */
+        srpos = 10, sgpos = 5, sbpos = 0;
+
+      /* Note that unlike X, which is endianness-agnostic (since any XImage
+         can have its own specific bit ordering, with the server reversing
+         things as necessary) OpenGL pretends everything is client-side, so
+         we need to pack things in the right order for the client machine.
+       */
+      if (bigendian())
+        crpos = 24, cgpos = 16, cbpos =  8, capos =  0;
+      else
+        crpos =  0, cgpos =  8, cbpos = 16, capos = 24;
+
+      for (y = 0; y < win_height; y++)
+        {
+          int y2 = (win_height-1-y); /* Texture maps are upside down. */
+          for (x = 0; x < win_width; x++)
+            {
+              unsigned long sp = XGetPixel (ximage1, x, y2);
+              unsigned char sr = (sp & srmsk) >> srpos;
+              unsigned char sg = (sp & sgmsk) >> sgpos;
+              unsigned char sb = (sp & sbmsk) >> sbpos;
+              unsigned long cp;
+
+              if (sdepth < 24)   /* spread 5 bits to 8 */
+                {
+                  sr = (sr << 3) | (sr >> 2);
+                  sg = (sg << 3) | (sg >> 2);
+                  sb = (sb << 3) | (sb >> 2);
+                }
+              cp = ((sr << crpos) |
+                    (sg << cgpos) |
+                    (sb << cbpos) |
+                    (0xFF << capos));
+              XPutPixel (ximage2, x, y, cp);
+            }
+        }
+    }
+
+    free (ximage1->data);
+    ximage1->data = 0;
+    XDestroyImage (ximage1);
+
+#if 0
+    fprintf(stderr, "%s: grabbed %dx%d window 0x%lx to %dx%d texture\n",
+            progname, win_width, win_height, (unsigned long) window,
+            tex_width, tex_height);
+#endif
+
+    return ximage2;
+  }
+}
diff --git a/hacks/glx/grab-ximage.h b/hacks/glx/grab-ximage.h
new file mode 100644 (file)
index 0000000..4f1deff
--- /dev/null
@@ -0,0 +1,23 @@
+/* grab-ximage.c --- grab the screen to an XImage for use with OpenGL.
+ * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ */
+
+#ifndef __GRAB_XIMAGE_H__
+#define __GRAB_XIMAGE_H__
+
+/* Returns an XImage structure containing an image of the desktop.
+   (As a side-effect, that image will be painted onto the given Window.)
+   This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
+   extra byte set to 0xFF.
+ */
+XImage * screen_to_ximage (Screen *screen, Window window);
+
+#endif /* __GRAB_XIMAGE_H__ */
diff --git a/hacks/glx/menger.c b/hacks/glx/menger.c
new file mode 100644 (file)
index 0000000..96ddacc
--- /dev/null
@@ -0,0 +1,713 @@
+/* menger, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * Generates a 3D Menger Sponge gasket:
+ *
+ *                                ___+._______
+ *                           __-""   --     __"""----._____
+ *                    __.--"" -- ___--+---_____.     __  .+'|
+ *              _.-'""  __    +:"__   | ._..+"" __    .+'   F
+ *            J"--.____         __ """""+"         .+'  .J  F
+ *            J        """""---.___       --   .+'"     F'  F
+ *             L                   """""--...+'    .J       F
+ *             L   F"9      --.            |   .   F'      J
+ *             L   -_J      L_J      F"9   | ;'J    .+J .J J
+ *             |                     L_J   | F.'  .'| J F' J
+ *             |        |"""--.__          | '   |""  J    J
+ *             J   ._   J ;;; |  "L        |   . |-___J    |
+ *             J   L J  J ;-' |   L        | .'J |_  .'  . |
+ *             J    ""  J    .---_L  F"9   | F.' | .'   FJ |
+ *              L       J .-'  __ |  L_J   | '   :'     ' .+
+ *              L       '--.___   |        |       .J   .'
+ *              |  F"9         """'        |   .   F' .'
+ *              |  -_J      F"9            | .'J    .'
+ *              +__         -_J      F"9   | F.'  .'
+ *                 """--___          L_J   | '  .'
+ *                         """---___       |  .'
+ *                                  ""---._|.'
+ *
+ *  The straightforward way to generate this object creates way more polygons
+ *  than are needed, since there end up being many buried, interior faces.
+ *  So first we go through and generate the list of all the squares; then we
+ *  sort the list and delete any squares that have a duplicate: if there are
+ *  two of them, then they will be interior and facing each other, so we
+ *  don't need either.  Doing this reduces the polygon count by 20% - 33%.
+ *
+ *  Another optimization we could do to reduce the polygon count would be to
+ *  merge adjascent coplanar squares together into rectangles.  This would
+ *  result in the outer faces being composed of 1xN strips.  It's tricky to
+ *  to find these adjascent faces in non-exponential time, though.
+ *
+ *  We could take advantage of the object's triple symmetry to reduce the
+ *  size of the `squares' array, though that wouldn't actually reduce the
+ *  number of polygons in the scene.
+ *
+ *  We could actually simulate large depths with a texture map -- if the
+ *  depth is such that the smallest holes are only a few pixels across,
+ *  just draw them as spots on the surface!  It would look the same.
+ */
+
+#include <X11/Intrinsic.h>
+
+extern XtAppContext app;
+
+#define PROGCLASS      "Menger"
+#define HACK_INIT      init_sponge
+#define HACK_DRAW      draw_sponge
+#define HACK_RESHAPE   reshape_sponge
+#define sws_opts       xlockmore_opts
+
+#define DEF_SPIN        "True"
+#define DEF_WANDER      "True"
+#define DEF_SPEED       "150"
+#define DEF_MAX_DEPTH   "3"
+#define DEF_OPTIMIZE    "True"
+
+#define DEFAULTS       "*delay:         30000          \n" \
+                       "*showFPS:       False          \n" \
+                       "*wireframe:     False          \n" \
+                       "*maxDepth:    " DEF_MAX_DEPTH "\n" \
+                       "*speed:"        DEF_SPEED     "\n" \
+                       "*optimize:"     DEF_OPTIMIZE  "\n" \
+                       "*spin:        " DEF_SPIN      "\n" \
+                       "*wander:      " DEF_WANDER    "\n" \
+
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#include "xlockmore.h"
+#include "colors.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+#include <GL/glu.h>
+
+typedef struct {
+  unsigned int x0 : 8;     /* 8     bottom left */
+  unsigned int y0 : 8;     /* 16                */
+  unsigned int z0 : 8;     /* 24                */
+
+  unsigned int x1 : 8;     /* 32    top right   */
+  unsigned int y1 : 8;     /* 40                */
+  unsigned int z1 : 8;     /* 48                */
+  
+  int          nx : 2;     /* 50    normal      */
+  int          ny : 2;     /* 52                */
+  int          nz : 2;     /* 54                */
+
+                           /* 2 bits left over; 56 bits / 7 bytes total, */
+                           /* which is surely rounded up to 8 bytes.     */
+} square;
+
+
+typedef struct {
+  GLXContext *glx_context;
+
+  GLfloat rotx, roty, rotz;       /* current object rotation */
+  GLfloat dx, dy, dz;             /* current rotational velocity */
+  GLfloat ddx, ddy, ddz;          /* current rotational acceleration */
+  GLfloat d_max;                  /* max velocity */
+
+  GLuint sponge_list0;            /* we store X, Y, and Z-facing surfaces */
+  GLuint sponge_list1;            /* in their own lists, to make it easy  */
+  GLuint sponge_list2;            /* to color them differently.           */
+
+  square *squares;
+  unsigned long squares_size;
+  unsigned long squares_fp;
+
+  int current_depth;
+
+  int ncolors;
+  XColor *colors;
+  int ccolor0;
+  int ccolor1;
+  int ccolor2;
+
+} sponge_configuration;
+
+static sponge_configuration *sps = NULL;
+
+static char *do_spin;
+static Bool do_wander;
+static int speed;
+static Bool do_optimize;
+static int max_depth;
+
+static XrmOptionDescRec opts[] = {
+  { "-spin",   ".spin",   XrmoptionNoArg, "True" },
+  { "+spin",   ".spin",   XrmoptionNoArg, "False" },
+  { "-wander", ".wander", XrmoptionNoArg, "True" },
+  { "+wander", ".wander", XrmoptionNoArg, "False" },
+  { "-speed",  ".speed",  XrmoptionSepArg, 0 },
+  { "-optimize", ".optimize", XrmoptionNoArg, "True" },
+  { "+optimize", ".optimize", XrmoptionNoArg, "False" },
+  {"-depth",   ".maxDepth", XrmoptionSepArg, (caddr_t) 0 },
+};
+
+static argtype vars[] = {
+  {(caddr_t *) &do_spin,   "spin",   "Spin",   DEF_SPIN,   t_Bool},
+  {(caddr_t *) &do_wander, "wander", "Wander", DEF_WANDER, t_Bool},
+  {(caddr_t *) &speed,     "speed",  "Speed",  DEF_SPEED,  t_Int},
+  {(caddr_t *) &do_optimize, "optimize", "Optimize", DEF_OPTIMIZE, t_Bool},
+  {(caddr_t *) &max_depth, "maxDepth", "MaxDepth", DEF_MAX_DEPTH, t_Int},
+};
+
+ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+/* Window management, etc
+ */
+void
+reshape_sponge (ModeInfo *mi, int width, int height)
+{
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+
+  gluPerspective( 30.0, 1/h, 1.0, 100.0 );
+  gluLookAt( 0.0, 0.0, 15.0,
+             0.0, 0.0, 0.0,
+             0.0, 1.0, 0.0);
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  glTranslatef(0.0, 0.0, -15.0);
+
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+static void
+gl_init (ModeInfo *mi)
+{
+/*  sponge_configuration *sp = &sps[MI_SCREEN(mi)]; */
+  int wire = MI_IS_WIREFRAME(mi);
+
+  static GLfloat pos[4] = {-4.0, 3.0, 10.0, 1.0};
+
+  if (!wire)
+    {
+      glLightfv(GL_LIGHT0, GL_POSITION, pos);
+      glEnable(GL_CULL_FACE);
+      glEnable(GL_LIGHTING);
+      glEnable(GL_LIGHT0);
+      glEnable(GL_DEPTH_TEST);
+    }
+}
+
+
+/* lifted from lament.c */
+#define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n))))
+#define RANDSIGN() ((random() & 1) ? 1 : -1)
+
+static void
+rotate(GLfloat *pos, GLfloat *v, GLfloat *dv, GLfloat max_v)
+{
+  double ppos = *pos;
+
+  /* tick position */
+  if (ppos < 0)
+    ppos = -(ppos + *v);
+  else
+    ppos += *v;
+
+  if (ppos > 1.0)
+    ppos -= 1.0;
+  else if (ppos < 0)
+    ppos += 1.0;
+
+  if (ppos < 0) abort();
+  if (ppos > 1.0) abort();
+  *pos = (*pos > 0 ? ppos : -ppos);
+
+  /* accelerate */
+  *v += *dv;
+
+  /* clamp velocity */
+  if (*v > max_v || *v < -max_v)
+    {
+      *dv = -*dv;
+    }
+  /* If it stops, start it going in the other direction. */
+  else if (*v < 0)
+    {
+      if (random() % 4)
+       {
+         *v = 0;
+
+         /* keep going in the same direction */
+         if (random() % 2)
+           *dv = 0;
+         else if (*dv < 0)
+           *dv = -*dv;
+       }
+      else
+       {
+         /* reverse gears */
+         *v = -*v;
+         *dv = -*dv;
+         *pos = -*pos;
+       }
+    }
+
+  /* Alter direction of rotational acceleration randomly. */
+  if (! (random() % 120))
+    *dv = -*dv;
+
+  /* Change acceleration very occasionally. */
+  if (! (random() % 200))
+    {
+      if (*dv == 0)
+       *dv = 0.00001;
+      else if (random() & 1)
+       *dv *= 1.2;
+      else
+       *dv *= 0.8;
+    }
+}
+
+
+/* Pushes a 1x1x1 cube at XYZ into the sp->squares list.
+ */
+static void
+cube (sponge_configuration *sp, Bool wireframe_p,
+      int x, int y, int z, int s)
+{
+  square *sq;
+
+# define PP(NX, NY, NZ, X0, Y0, Z0, X1, Y1, Z1) \
+         (sq = &sp->squares[sp->squares_fp++], \
+          sq->nx = (NX), \
+          sq->ny = (NY), \
+          sq->nz = (NZ), \
+          sq->x0 = x+((X0)*s), \
+          sq->y0 = y+((Y0)*s), \
+          sq->z0 = z+((Z0)*s), \
+          sq->x1 = x+((X1)*s), \
+          sq->y1 = y+((Y1)*s), \
+          sq->z1 = z+((Z1)*s))
+
+  PP (0,  0, -1,   0, 1, 0,   1, 0, 0);
+  PP (0,  0,  1,   0, 0, 1,   1, 1, 1);
+  PP (0, -1,  0,   0, 0, 0,   1, 0, 1);
+  PP (0,  1,  0,   0, 1, 1,   1, 1, 0);
+
+  if (wireframe_p) return;  /* don't need the rest */
+
+  PP (-1, 0,  0,   0, 0, 1,   0, 1, 0);
+  PP ( 1, 0,  0,   1, 0, 0,   1, 1, 1);
+# undef PP
+
+  if (sp->squares_fp >= sp->squares_size) abort();
+}
+
+
+static int
+iexp (int i, int n)
+{
+  int ii = 1;
+  while (n-- > 0) ii *= i;
+  return ii;
+}
+
+
+static void
+descend_cubes (sponge_configuration *sp, Bool wireframe_p, int countdown,
+               int x, int y, int z)
+{
+  int descend_p = (countdown > 0);
+  int facet_size = iexp (3, countdown);
+  int s = facet_size;
+
+  if (wireframe_p)
+    {
+      cube (sp, wireframe_p, x+1*s, y+1*s, z,     1);
+      cube (sp, wireframe_p, x+1*s, y+1*s, z+2*s, 1);
+      cube (sp, wireframe_p, x,     y+1*s, z+1*s, 1);
+      cube (sp, wireframe_p, x+2*s, y+1*s, z+1*s, 1);
+      cube (sp, wireframe_p, x+1*s, y,     z+1*s, 1);
+      cube (sp, wireframe_p, x+1*s, y+2*s, z+1*s, 1);
+
+      if (!descend_p) return;
+    }
+
+# define CUBE(xx,yy,zz) \
+         (descend_p \
+          ? descend_cubes (sp, wireframe_p, countdown-1, \
+                           x+(xx)*s, y+(yy)*s, z+(zz)*s) \
+          : cube (sp, wireframe_p, x+(xx)*s, y+(yy)*s, z+(zz)*s, 1))
+
+  CUBE(0, 2, 0); CUBE(1, 2, 0); CUBE(2, 2, 0);   /* top front row */
+  CUBE(0, 1, 0);                CUBE(2, 1, 0);   /* middle front row */
+  CUBE(0, 0, 0); CUBE(1, 0, 0); CUBE(2, 0, 0);   /* bottom front row */
+  CUBE(0, 2, 1);                CUBE(2, 2, 1);   /* top middle row */
+  CUBE(0, 0, 1);                CUBE(2, 0, 1);   /* bottom middle row */
+  CUBE(0, 2, 2); CUBE(1, 2, 2); CUBE(2, 2, 2);   /* top back row */
+  CUBE(0, 1, 2);                CUBE(2, 1, 2);   /* middle back row */
+  CUBE(0, 0, 2); CUBE(1, 0, 2); CUBE(2, 0, 2);   /* bottom back row */
+# undef CUBE
+}
+
+
+static int cmp_squares (const void *a, const void *b);
+static void delete_redundant_faces (sponge_configuration *);
+
+static void
+build_sponge (sponge_configuration *sp, Bool wireframe_p, int countdown)
+{
+  sp->squares_fp = 0;
+
+  if (countdown <= 0)
+    {
+      cube (sp, wireframe_p, 0, 0, 0, 1);
+    }
+  else
+    {
+      if (wireframe_p)
+        {
+          int facet_size = iexp(3, countdown);
+          cube (sp, wireframe_p, 0, 0, 0, facet_size);
+        }
+      descend_cubes (sp, wireframe_p, countdown - 1,
+                     0, 0, 0);
+    }
+
+  if (!wireframe_p && do_optimize)
+    {
+      qsort (sp->squares, sp->squares_fp, sizeof(*sp->squares),
+             cmp_squares);
+      delete_redundant_faces (sp);
+    }
+
+  {
+    int i, j;
+    square *sq;
+    GLfloat s = 1.0 / iexp (3, countdown);
+    s *= 3;
+
+    glDeleteLists (sp->sponge_list0, 1);
+    glDeleteLists (sp->sponge_list1, 1);
+    glDeleteLists (sp->sponge_list2, 1);
+
+    for (j = 0; j < 3; j++)
+      {
+        sq = sp->squares;
+        glNewList ((j == 0 ? sp->sponge_list0 :
+                    j == 1 ? sp->sponge_list1 :
+                    sp->sponge_list2),
+                   GL_COMPILE);
+        glPushMatrix();
+        glTranslatef (-1.5, -1.5, -1.5);
+        glScalef(s, s, s);
+
+        for (i = 0; i < sp->squares_fp; i++)
+          {
+            if ((j == 0 && sq->nx != 0) ||
+                (j == 1 && sq->ny != 0) ||
+                (j == 2 && sq->nz != 0))
+              {
+                glBegin (wireframe_p ? GL_LINE_LOOP : GL_QUADS);
+                glNormal3i (sq->nx, sq->ny, sq->nz);
+                if (sq->nz)
+                  {
+                    glVertex3i (sq->x1, sq->y0, sq->z0);
+                    glVertex3i (sq->x1, sq->y1, sq->z0);
+                    glVertex3i (sq->x0, sq->y1, sq->z0);
+                    glVertex3i (sq->x0, sq->y0, sq->z0);
+                  }
+                else if (sq->ny)
+                  {
+                    glVertex3i (sq->x1, sq->y0, sq->z0);
+                    glVertex3i (sq->x1, sq->y0, sq->z1);
+                    glVertex3i (sq->x0, sq->y0, sq->z1);
+                    glVertex3i (sq->x0, sq->y0, sq->z0);
+                  }
+                else
+                  {
+                    glVertex3i (sq->x0, sq->y1, sq->z0);
+                    glVertex3i (sq->x0, sq->y1, sq->z1);
+                    glVertex3i (sq->x0, sq->y0, sq->z1);
+                    glVertex3i (sq->x0, sq->y0, sq->z0);
+                  }
+                glEnd();
+              }
+            sq++;
+          }
+        glPopMatrix();
+        glEndList();
+      }
+  }
+}
+
+
+static int
+cmp_squares (const void *aa, const void *bb)
+{
+  square *a = (square *) aa;
+  square *b = (square *) bb;
+  int i, p0, p1;
+
+  p0 = (a->x0 < a->x1 ? a->x0 : a->x1);
+  p1 = (b->x0 < b->x1 ? b->x0 : b->x1);
+  if ((i = (p0 - p1))) return i;
+
+  p0 = (a->y0 < a->y1 ? a->y0 : a->y1);
+  p1 = (b->y0 < b->y1 ? b->y0 : b->y1);
+  if ((i = (p0 - p1))) return i;
+
+  p0 = (a->z0 < a->z1 ? a->z0 : a->z1);
+  p1 = (b->z0 < b->z1 ? b->z0 : b->z1);
+  if ((i = (p0 - p1))) return i;
+
+
+  p0 = (a->x0 > a->x1 ? a->x0 : a->x1);
+  p1 = (b->x0 > b->x1 ? b->x0 : b->x1);
+  if ((i = (p0 - p1))) return i;
+
+  p0 = (a->y0 > a->y1 ? a->y0 : a->y1);
+  p1 = (b->y0 > b->y1 ? b->y0 : b->y1);
+  if ((i = (p0 - p1))) return i;
+
+  p0 = (a->z0 > a->z1 ? a->z0 : a->z1);
+  p1 = (b->z0 > b->z1 ? b->z0 : b->z1);
+  if ((i = (p0 - p1))) return i;
+
+  return 0;
+
+}
+
+
+static void
+delete_redundant_faces (sponge_configuration *sp)
+{
+  square *sq = sp->squares;
+  square *end = sq + sp->squares_fp;
+  square *out = sq;
+  int i = 0;
+
+  while (sq < end)
+    {
+      if (cmp_squares (sq, sq+1)) /* they differ - keep this one */
+        {
+          if (sq != out)
+            *out = *sq;
+          out++;
+          i++;
+        }
+      sq++;
+    }
+
+# if 0
+  fprintf (stderr, "%s: optimized away %d polygons (%d%%)\n",
+           progname,
+           sp->squares_fp - i,
+           100 - ((i * 100) / sp->squares_fp));
+# endif
+
+  sp->squares_fp = i;
+}
+
+
+void 
+init_sponge (ModeInfo *mi)
+{
+  sponge_configuration *sp;
+
+  if (!sps) {
+    sps = (sponge_configuration *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (sponge_configuration));
+    if (!sps) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+
+    sp = &sps[MI_SCREEN(mi)];
+  }
+
+  sp = &sps[MI_SCREEN(mi)];
+
+  if ((sp->glx_context = init_GL(mi)) != NULL) {
+    gl_init(mi);
+    reshape_sponge (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+  }
+
+  sp->rotx = frand(1.0) * RANDSIGN();
+  sp->roty = frand(1.0) * RANDSIGN();
+  sp->rotz = frand(1.0) * RANDSIGN();
+
+  /* bell curve from 0-3 degrees, avg 1.5 */
+  sp->dx = (frand(1) + frand(1) + frand(1)) / (360/2);
+  sp->dy = (frand(1) + frand(1) + frand(1)) / (360/2);
+  sp->dz = (frand(1) + frand(1) + frand(1)) / (360/2);
+
+  sp->d_max = sp->dx * 2;
+
+  sp->ddx = 0.00006 + frand(0.00003);
+  sp->ddy = 0.00006 + frand(0.00003);
+  sp->ddz = 0.00006 + frand(0.00003);
+
+  sp->ncolors = 128;
+  sp->colors = (XColor *) calloc(sp->ncolors, sizeof(XColor));
+  make_smooth_colormap (0, 0, 0,
+                        sp->colors, &sp->ncolors,
+                        False, 0, False);
+  sp->ccolor0 = 0;
+  sp->ccolor1 = sp->ncolors / 3;
+  sp->ccolor2 = sp->ccolor1 * 2;
+
+  {
+    int d = max_depth < 1 ? 1 : max_depth;
+    unsigned long facet_size = iexp(3, d);
+    unsigned long bytes;
+    float be_miserly = 0.741;
+    sp->squares_size = iexp(facet_size, 3) * 6 * be_miserly;
+    bytes = sp->squares_size * sizeof (*sp->squares);
+
+    sp->squares_fp = 0;
+    sp->squares = calloc (1, bytes);
+
+    if (!sp->squares)
+      {
+        fprintf (stderr, "%s: out of memory", progname);
+        if ((sp->squares_size >> 20) > 1)
+          fprintf (stderr, " (%luMB for %luM polygons)\n",
+                   bytes >> 20, sp->squares_size >> 20);
+        else
+          fprintf (stderr, " (%luKB for %luK polygons)\n",
+                   bytes >> 10, sp->squares_size >> 10);
+        exit (1);
+      }
+  }
+
+  sp->sponge_list0 = glGenLists (1);
+  sp->sponge_list1 = glGenLists (1);
+  sp->sponge_list2 = glGenLists (1);
+}
+
+
+void
+draw_sponge (ModeInfo *mi)
+{
+  sponge_configuration *sp = &sps[MI_SCREEN(mi)];
+  Display *dpy = MI_DISPLAY(mi);
+  Window window = MI_WINDOW(mi);
+
+  static GLfloat color0[4] = {0.0, 0.0, 0.0, 1.0};
+  static GLfloat color1[4] = {0.0, 0.0, 0.0, 1.0};
+  static GLfloat color2[4] = {0.0, 0.0, 0.0, 1.0};
+
+  static int tick = 99999;
+
+  if (!sp->glx_context)
+    return;
+
+  glShadeModel(GL_SMOOTH);
+
+  glEnable(GL_DEPTH_TEST);
+  glEnable(GL_NORMALIZE);
+  glEnable(GL_CULL_FACE);
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  glPushMatrix ();
+
+  glScalef(1.1, 1.1, 1.1);
+
+  {
+    GLfloat x, y, z;
+
+    if (do_wander)
+      {
+        static int frame = 0;
+
+#       define SINOID(SCALE,SIZE) \
+        ((((1 + sin((frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2)
+
+        x = SINOID(0.0071, 8.0);
+        y = SINOID(0.0053, 6.0);
+        z = SINOID(0.0037, 15.0);
+        frame++;
+        glTranslatef(x, y, z);
+      }
+
+    if (do_spin)
+      {
+        x = sp->rotx;
+        y = sp->roty;
+        z = sp->rotz;
+        if (x < 0) x = 1 - (x + 1);
+        if (y < 0) y = 1 - (y + 1);
+        if (z < 0) z = 1 - (z + 1);
+
+        glRotatef(x * 360, 1.0, 0.0, 0.0);
+        glRotatef(y * 360, 0.0, 1.0, 0.0);
+        glRotatef(z * 360, 0.0, 0.0, 1.0);
+
+        rotate(&sp->rotx, &sp->dx, &sp->ddx, sp->d_max);
+        rotate(&sp->roty, &sp->dy, &sp->ddy, sp->d_max);
+        rotate(&sp->rotz, &sp->dz, &sp->ddz, sp->d_max);
+      }
+  }
+
+  color0[0] = sp->colors[sp->ccolor0].red   / 65536.0;
+  color0[1] = sp->colors[sp->ccolor0].green / 65536.0;
+  color0[2] = sp->colors[sp->ccolor0].blue  / 65536.0;
+
+  color1[0] = sp->colors[sp->ccolor1].red   / 65536.0;
+  color1[1] = sp->colors[sp->ccolor1].green / 65536.0;
+  color1[2] = sp->colors[sp->ccolor1].blue  / 65536.0;
+
+  color2[0] = sp->colors[sp->ccolor2].red   / 65536.0;
+  color2[1] = sp->colors[sp->ccolor2].green / 65536.0;
+  color2[2] = sp->colors[sp->ccolor2].blue  / 65536.0;
+
+
+  sp->ccolor0++;
+  sp->ccolor1++;
+  sp->ccolor2++;
+  if (sp->ccolor0 >= sp->ncolors) sp->ccolor0 = 0;
+  if (sp->ccolor1 >= sp->ncolors) sp->ccolor1 = 0;
+  if (sp->ccolor2 >= sp->ncolors) sp->ccolor2 = 0;
+
+  if (tick++ >= speed)
+    {
+      tick = 0;
+      if (sp->current_depth >= max_depth)
+        sp->current_depth = -max_depth;
+      sp->current_depth++;
+      build_sponge (sp,
+                    MI_IS_WIREFRAME(mi),
+                    (sp->current_depth < 0
+                     ? -sp->current_depth : sp->current_depth));
+    }
+
+  glScalef (2.0, 2.0, 2.0);
+
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color0);
+  glCallList (sp->sponge_list0);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color1);
+  glCallList (sp->sponge_list1);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color2);
+  glCallList (sp->sponge_list2);
+
+  glPopMatrix ();
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+  glXSwapBuffers(dpy, window);
+}
+
+#endif /* USE_GL */
index 3f4dc35115f093e0901fbf51e00e074f125cbca8..15e3732ee84e41b8743e19bda92df9137a3dd32e 100644 (file)
@@ -84,8 +84,7 @@ static const char sccsid[] = "@(#)moebius.c   4.08 97/01/04 xlockmore";
 # define HACK_DRAW                     draw_moebius
 # define HACK_RESHAPE          reshape_moebius
 # define moebius_opts          xlockmore_opts
-# define DEFAULTS                      "*cycles:               1       \n"                     \
-                                                       "*delay:                20000   \n"                     \
+# define DEFAULTS                      "*delay:                20000   \n"                     \
                                                        "*showFPS:      False   \n"                     \
                                                        "*wireframe:    False   \n"
 # include "xlockmore.h"                /* from the xscreensaver distribution */
index 069d74752941308ebd95c56b6cd8a5cb96ef3320..cb2932eb7168c232dec3fe8cc102371f3c069191 100644 (file)
@@ -229,7 +229,7 @@ static XrmOptionDescRec opts[] = {
   { "-molecule", ".molecule", XrmoptionSepArg, 0 },
   { "-timeout",".timeout",XrmoptionSepArg, 0 },
   { "-spin",   ".spin",   XrmoptionSepArg, 0 },
-  { "+spin",   ".spin",   XrmoptionNoArg, "" },
+  { "+spin",   ".spin",   XrmoptionNoArg, "False" },
   { "-wander", ".wander", XrmoptionNoArg, "True" },
   { "+wander", ".wander", XrmoptionNoArg, "False" },
   { "-labels", ".labels", XrmoptionNoArg, "True" },
index eb4e50a19d5d2bfe635028ad326c075e025d2cbd..dace838601b7f783a061f62dbacc70a1f6641a70 100644 (file)
@@ -40,9 +40,7 @@ static const char sccsid[] = "@(#)sierpinski3D.c      00.01 99/11/04 xlockmore";
 # define HACK_DRAW                                     draw_gasket
 # define HACK_RESHAPE                          reshape_gasket
 # define gasket_opts                           xlockmore_opts
-# define DEFAULTS                                      "*count:                1       \n"                     \
-                                                                       "*cycles:               9999    \n"                     \
-                                                                       "*delay:                20000   \n"                     \
+# define DEFAULTS                                      "*delay:                20000   \n"                     \
                                                                        "*maxDepth:             5       \n"                     \
                                                                        "*speed:                150     \n"                     \
                                                                        "*showFPS:      False   \n"                     \
@@ -94,7 +92,7 @@ typedef struct {
   GLfloat d_max;                          /* max velocity */
 
   GLfloat     angle;
-  GLuint      gasket1;
+  GLuint      gasket0, gasket1, gasket2, gasket3;
   GLXContext *glx_context;
   Window      window;
 
@@ -102,7 +100,10 @@ typedef struct {
 
   int ncolors;
   XColor *colors;
-  int ccolor;
+  int ccolor0;
+  int ccolor1;
+  int ccolor2;
+  int ccolor3;
 
 } gasketstruct;
 
@@ -110,93 +111,7 @@ static gasketstruct *gasket = NULL;
 
 #include <GL/glu.h>
 
-/* static GLuint limit; */
-
-\f
-/* Computing normal vectors (thanks to Nat Friedman <ndf@mit.edu>)
- */
-
-typedef struct vector {
-  GLfloat x, y, z;
-} vector;
-
-typedef struct plane {
-  vector p1, p2, p3;
-} plane;
-
-static void
-vector_set(vector *v, GLfloat x, GLfloat y, GLfloat z)
-{
-  v->x = x;
-  v->y = y;
-  v->z = z;
-}
-
-static void
-vector_cross(vector v1, vector v2, vector *v3)
-{
-  v3->x = (v1.y * v2.z) - (v1.z * v2.y);
-  v3->y = (v1.z * v2.x) - (v1.x * v2.z);
-  v3->z = (v1.x * v2.y) - (v1.y * v2.x);
-}
-
-static void
-vector_subtract(vector v1, vector v2, vector *res)
-{
-  res->x = v1.x - v2.x;
-  res->y = v1.y - v2.y;
-  res->z = v1.z - v2.z;
-}
-
-static void
-plane_normal(plane p, vector *n)
-{
-  vector v1, v2;
-  vector_subtract(p.p1, p.p2, &v1);
-  vector_subtract(p.p1, p.p3, &v2);
-  vector_cross(v2, v1, n);
-}
-
-static void
-do_normal(GLfloat x1, GLfloat y1, GLfloat z1,
-         GLfloat x2, GLfloat y2, GLfloat z2,
-         GLfloat x3, GLfloat y3, GLfloat z3)
-{
-  plane plane;
-  vector n;
-  vector_set(&plane.p1, x1, y1, z1);
-  vector_set(&plane.p2, x2, y2, z2);
-  vector_set(&plane.p3, x3, y3, z3);
-  plane_normal(plane, &n);
-  n.x = -n.x; n.y = -n.y; n.z = -n.z;
-
-  glNormal3f(n.x, n.y, n.z);
-
-#ifdef DEBUG
-  /* Draw a line in the direction of this face's normal. */
-  {
-    GLfloat ax = n.x > 0 ? n.x : -n.x;
-    GLfloat ay = n.y > 0 ? n.y : -n.y;
-    GLfloat az = n.z > 0 ? n.z : -n.z;
-    GLfloat mx = (x1 + x2 + x3) / 3;
-    GLfloat my = (y1 + y2 + y3) / 3;
-    GLfloat mz = (z1 + z2 + z3) / 3;
-    GLfloat xx, yy, zz;
-
-    GLfloat max = ax > ay ? ax : ay;
-    if (az > max) max = az;
-    max *= 2;
-    xx = n.x / max;
-    yy = n.y / max;
-    zz = n.z / max;
-
-    glBegin(GL_LINE_LOOP);
-    glVertex3f(mx, my, mz);
-    glVertex3f(mx+xx, my+yy, mz+zz);
-    glEnd();
-  }
-#endif /* DEBUG */
-}
+static GLfloat normals[4][3];
 
 \f
 
@@ -209,10 +124,7 @@ triangle (GLfloat x1, GLfloat y1, GLfloat z1,
   if (wireframe_p)
     glBegin (GL_LINE_LOOP);
   else
-    {
-      do_normal (x1, y1, z1,  x2, y2, z2,  x3, y3, z3);
-      glBegin (GL_TRIANGLES);
-    }
+    glBegin (GL_TRIANGLES);
   glVertex3f (x1, y1, z1);
   glVertex3f (x2, y2, z2);
   glVertex3f (x3, y3, z3);
@@ -220,26 +132,42 @@ triangle (GLfloat x1, GLfloat y1, GLfloat z1,
 }
 
 static void
-four_tetras (GL_VECTOR *outer, Bool wireframe_p, int countdown)
+four_tetras (GL_VECTOR *outer, Bool wireframe_p, int countdown, int which)
 {
   if (countdown <= 0)
     {
-      triangle (outer[0].x, outer[0].y, outer[0].z,
-                outer[1].x, outer[1].y, outer[1].z,
-                outer[2].x, outer[2].y, outer[2].z,
-                wireframe_p);
-      triangle (outer[0].x, outer[0].y, outer[0].z,
-                outer[3].x, outer[3].y, outer[3].z,
-                outer[1].x, outer[1].y, outer[1].z,
-                wireframe_p);
-      triangle (outer[0].x, outer[0].y, outer[0].z,
-                outer[2].x, outer[2].y, outer[2].z,
-                outer[3].x, outer[3].y, outer[3].z,
-                wireframe_p);
-      triangle (outer[1].x, outer[1].y, outer[1].z,
-                outer[3].x, outer[3].y, outer[3].z,
-                outer[2].x, outer[2].y, outer[2].z,
-                wireframe_p);
+      if (which == 0)
+        {
+          glNormal3f (normals[0][0], normals[0][1], normals[0][2]);
+          triangle (outer[0].x, outer[0].y, outer[0].z,
+                    outer[1].x, outer[1].y, outer[1].z,
+                    outer[2].x, outer[2].y, outer[2].z,
+                    wireframe_p);
+        }
+      else if (which == 1)
+        {
+          glNormal3f (normals[1][0], normals[1][1], normals[1][2]);
+          triangle (outer[0].x, outer[0].y, outer[0].z,
+                    outer[3].x, outer[3].y, outer[3].z,
+                    outer[1].x, outer[1].y, outer[1].z,
+                    wireframe_p);
+        }
+      else if (which == 2)
+        {
+          glNormal3f (normals[2][0], normals[2][1], normals[2][2]);
+          triangle (outer[0].x, outer[0].y, outer[0].z,
+                    outer[2].x, outer[2].y, outer[2].z,
+                    outer[3].x, outer[3].y, outer[3].z,
+                    wireframe_p);
+        }
+      else
+        {
+          glNormal3f (normals[3][0], normals[3][1], normals[3][2]);
+          triangle (outer[1].x, outer[1].y, outer[1].z,
+                    outer[3].x, outer[3].y, outer[3].z,
+                    outer[2].x, outer[2].y, outer[2].z,
+                    wireframe_p);
+        }
     }
   else
     {
@@ -282,37 +210,54 @@ four_tetras (GL_VECTOR *outer, Bool wireframe_p, int countdown)
       corner[1] = inner[M01];
       corner[2] = inner[M02];
       corner[3] = inner[M03];
-      four_tetras (corner, wireframe_p, countdown);
+      four_tetras (corner, wireframe_p, countdown, which);
 
       corner[0] = inner[M01];
       corner[1] = outer[1];
       corner[2] = inner[M12];
       corner[3] = inner[M13];
-      four_tetras (corner, wireframe_p, countdown);
+      four_tetras (corner, wireframe_p, countdown, which);
 
       corner[0] = inner[M02];
       corner[1] = inner[M12];
       corner[2] = outer[2];
       corner[3] = inner[M23];
-      four_tetras (corner, wireframe_p, countdown);
+      four_tetras (corner, wireframe_p, countdown, which);
 
       corner[0] = inner[M03];
       corner[1] = inner[M13];
       corner[2] = inner[M23];
       corner[3] = outer[3];
-      four_tetras (corner, wireframe_p, countdown);
+      four_tetras (corner, wireframe_p, countdown, which);
     }
 }
 
 
 static void
-compile_gasket(ModeInfo *mi)
+compile_gasket(ModeInfo *mi, int which)
 {
   Bool wireframe_p = MI_IS_WIREFRAME(mi);
   gasketstruct *gp = &gasket[MI_SCREEN(mi)];
 
   GL_VECTOR   vertex[5];
 
+  normals[0][0] =  0;
+  normals[0][1] =  0;
+  normals[0][2] = -sqrt(2.0 / 3.0);
+
+  normals[1][0] =  0;
+  normals[1][1] = -sqrt(0.75);
+  normals[1][2] =  sqrt(2.0 / 3.0) / 3.0;
+
+  normals[2][0] =  sqrt (0.5);
+  normals[2][1] =  sqrt(0.75) / 2.0;
+  normals[2][2] =  normals[1][2];
+
+  normals[3][0] = -normals[2][0];
+  normals[3][1] =  normals[2][1];
+  normals[3][2] =  normals[1][2];
+
+
   /* define verticies */
   vertex[0].x =  0.5; 
   vertex[0].y = -(1.0/3.0)*sqrt((2.0/3.0));
@@ -336,7 +281,8 @@ compile_gasket(ModeInfo *mi)
   
   four_tetras (vertex, wireframe_p,
                (gp->current_depth < 0
-                ? -gp->current_depth : gp->current_depth));
+                ? -gp->current_depth : gp->current_depth),
+               which);
 }
 
 static void
@@ -344,11 +290,14 @@ draw(ModeInfo *mi)
 {
   Bool wireframe_p = MI_IS_WIREFRAME(mi);
   gasketstruct *gp = &gasket[MI_SCREEN(mi)];
-  static int tick = 0;
+  static int tick = 999999;
   
   static GLfloat pos[4] = {-4.0, 3.0, 10.0, 1.0};
   static float white[]  = {1.0, 1.0, 1.0, 1.0};
-  static float color[]  = {0.0, 0.0, 0.0, 1.0};
+  static float color0[] = {0.0, 0.0, 0.0, 1.0};
+  static float color1[] = {0.0, 0.0, 0.0, 1.0};
+  static float color2[] = {0.0, 0.0, 0.0, 1.0};
+  static float color3[] = {0.0, 0.0, 0.0, 1.0};
 
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
@@ -358,13 +307,30 @@ draw(ModeInfo *mi)
 
       glLightfv(GL_LIGHT0, GL_POSITION,  pos);
 
-      color[0] = gp->colors[gp->ccolor].red   / 65536.0;
-      color[1] = gp->colors[gp->ccolor].green / 65536.0;
-      color[2] = gp->colors[gp->ccolor].blue  / 65536.0;
-      gp->ccolor++;
-      if (gp->ccolor >= gp->ncolors) gp->ccolor = 0;
+      color0[0] = gp->colors[gp->ccolor0].red   / 65536.0;
+      color0[1] = gp->colors[gp->ccolor0].green / 65536.0;
+      color0[2] = gp->colors[gp->ccolor0].blue  / 65536.0;
 
-      glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color);
+      color1[0] = gp->colors[gp->ccolor1].red   / 65536.0;
+      color1[1] = gp->colors[gp->ccolor1].green / 65536.0;
+      color1[2] = gp->colors[gp->ccolor1].blue  / 65536.0;
+
+      color2[0] = gp->colors[gp->ccolor2].red   / 65536.0;
+      color2[1] = gp->colors[gp->ccolor2].green / 65536.0;
+      color2[2] = gp->colors[gp->ccolor2].blue  / 65536.0;
+
+      color3[0] = gp->colors[gp->ccolor3].red   / 65536.0;
+      color3[1] = gp->colors[gp->ccolor3].green / 65536.0;
+      color3[2] = gp->colors[gp->ccolor3].blue  / 65536.0;
+
+      gp->ccolor0++;
+      gp->ccolor1++;
+      gp->ccolor2++;
+      gp->ccolor3++;
+      if (gp->ccolor0 >= gp->ncolors) gp->ccolor0 = 0;
+      if (gp->ccolor1 >= gp->ncolors) gp->ccolor1 = 0;
+      if (gp->ccolor2 >= gp->ncolors) gp->ccolor2 = 0;
+      if (gp->ccolor3 >= gp->ncolors) gp->ccolor3 = 0;
 
       glShadeModel(GL_SMOOTH);
 
@@ -402,7 +368,15 @@ draw(ModeInfo *mi)
   }
 
   glScalef( 8.0, 8.0, 8.0 );
+
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color0);
+  glCallList(gp->gasket0);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color1);
   glCallList(gp->gasket1);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color2);
+  glCallList(gp->gasket2);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color3);
+  glCallList(gp->gasket3);
 
   glPopMatrix();
 
@@ -414,10 +388,19 @@ draw(ModeInfo *mi)
         gp->current_depth = -max_depth;
       gp->current_depth++;
 
+      /* We make four different lists so that each face of the tetrahedrons
+         can have a different color (all triangles facing in the same
+         direction have the same color, which is different from all
+         triangles facing in other directions.)
+       */
+      glDeleteLists (gp->gasket0, 1);
       glDeleteLists (gp->gasket1, 1);
-      glNewList (gp->gasket1, GL_COMPILE);
-      compile_gasket (mi);
-      glEndList();
+      glDeleteLists (gp->gasket2, 1);
+      glDeleteLists (gp->gasket3, 1);
+      glNewList (gp->gasket0, GL_COMPILE); compile_gasket (mi, 0); glEndList();
+      glNewList (gp->gasket1, GL_COMPILE); compile_gasket (mi, 1); glEndList();
+      glNewList (gp->gasket2, GL_COMPILE); compile_gasket (mi, 2); glEndList();
+      glNewList (gp->gasket3, GL_COMPILE); compile_gasket (mi, 3); glEndList();
 
     }
 }
@@ -450,11 +433,11 @@ pinit(ModeInfo *mi)
   gasketstruct *gp = &gasket[MI_SCREEN(mi)];
 
   /* draw the gasket */
+  gp->gasket0 = glGenLists(1);
   gp->gasket1 = glGenLists(1);
+  gp->gasket2 = glGenLists(1);
+  gp->gasket3 = glGenLists(1);
   gp->current_depth = 1;       /* start out at level 1, not 0 */
-  glNewList(gp->gasket1, GL_COMPILE);
-    compile_gasket(mi);
-  glEndList();
 }
 
 
@@ -566,6 +549,10 @@ init_gasket(ModeInfo *mi)
   make_smooth_colormap (0, 0, 0,
                         gp->colors, &gp->ncolors,
                         False, 0, False);
+  gp->ccolor0 = 0;
+  gp->ccolor1 = gp->ncolors * 0.25;
+  gp->ccolor2 = gp->ncolors * 0.5;
+  gp->ccolor3 = gp->ncolors * 0.75;
 
   if ((gp->glx_context = init_GL(mi)) != NULL)
   {
@@ -624,7 +611,10 @@ release_gasket(ModeInfo * mi)
        /* Display lists MUST be freed while their glXContext is current. */
         glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context));
 
+        if (glIsList(gp->gasket0)) glDeleteLists(gp->gasket0, 1);
         if (glIsList(gp->gasket1)) glDeleteLists(gp->gasket1, 1);
+        if (glIsList(gp->gasket2)) glDeleteLists(gp->gasket2, 1);
+        if (glIsList(gp->gasket3)) glDeleteLists(gp->gasket3, 1);
       }
     }
     (void) free((void *) gasket);
index 809325f3c410000ca6d509393cb2ec3ac2aa25be..e905cae4a76c51f85be59de8d2c96979ed2e320d 100644 (file)
@@ -66,8 +66,7 @@ static const char sccsid[] = "@(#)stairs.c    4.07 97/11/24 xlockmore";
 # define HACK_DRAW                     draw_stairs
 # define HACK_RESHAPE          reshape_stairs
 # define stairs_opts           xlockmore_opts
-# define DEFAULTS                      "*cycles:               1       \n"                     \
-                                                       "*delay:                20000   \n"                     \
+# define DEFAULTS                      "*delay:                20000   \n"                     \
                                                        "*showFPS:      False   \n"                     \
                                                        "*wireframe:    False   \n"
 # include "xlockmore.h"                /* from the xscreensaver distribution */
index fb58e4c525d90596f820f2f7a285352bb3381fe7..96c77753bac124bf705f30c92287e06a24ae2c79 100644 (file)
@@ -266,7 +266,7 @@ launch_text_generator (sws_configuration *sc)
         oprogram = cmd;
       else
 #endif
-        oprogram = ZIPPY_PROGRAM;
+        oprogram = FORTUNE_PROGRAM;
     }
 
  program = (char *) malloc (strlen (oprogram) + 10);
@@ -721,6 +721,9 @@ init_sws (ModeInfo *mi)
     }
 
   launch_text_generator (sc);
+
+  /* one more reshape, after line_height has been computed */
+  reshape_sws (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
 }
 
 
index 6964d07425e9b9b66865cee86c55ed85afade31c..1905c273adf0be3d0e19c0e6871beb8d735e937a 100644 (file)
@@ -64,8 +64,7 @@ static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW;
 static void
 usage (void)
 {
-  fprintf (stderr,
-           "usage: %s [--geom =WxH+X+Y | --fullscreen | --root] [--wire]\n",
+  fprintf (stderr, "usage: %s [--wire] [--geom G | --root | --window-id ID]\n",
            progname);
   exit (1);
 }
@@ -111,6 +110,7 @@ int init_view(int *argc, char *argv[])
   int ix;
   int fullscreen = 0;
   int on_root = 0;
+  Window on_window = 0;
 
   int undef = -65536;
   int x = undef, y = undef;
@@ -149,6 +149,17 @@ int init_view(int *argc, char *argv[])
           if (geom || fullscreen) usage();
           on_root = 1;
         }
+      else if (!strcmp(argv[ix], "-window-id") &&
+               *argc > ix+1)
+        {
+          unsigned long id;
+          char c;
+          if (1 != sscanf (argv[ix+1], "%lu %c", &id, &c) &&
+              1 != sscanf (argv[ix+1], "0x%lx %c", &id, &c))
+            usage();
+          ix++;
+          on_window = (Window) id;
+        }
       else if (!strcmp(argv[ix], "-fullscreen") ||
                !strcmp(argv[ix], "-full"))
         {
@@ -174,9 +185,9 @@ int init_view(int *argc, char *argv[])
   XA_WM_PROTOCOLS = XInternAtom (dpy, "WM_PROTOCOLS", False);
   XA_WM_DELETE_WINDOW = XInternAtom (dpy, "WM_DELETE_WINDOW", False);
 
-  if (on_root)
+  if (on_root || on_window)
     {
-      window = RootWindow (dpy, screen);
+      window = (on_window ? on_window : RootWindow (dpy, screen));
       XGetWindowAttributes (dpy, window, &xgwa);
       visual = xgwa.visual;
       w = xgwa.width;
@@ -346,7 +357,7 @@ int init_view(int *argc, char *argv[])
   return 1;
 }
 
-static void setup_window()
+static void setup_window(void)
 {
   glEnable(GL_CULL_FACE);
   glEnable(GL_LIGHTING);
index ded8bbb5567d19bc7d5c210fd34026533aaae9c4..615e0cd1672b4ce36d792a520df4a9e34542ca94 100644 (file)
@@ -1,5 +1,5 @@
 /* xpm-ximage.c --- converts XPM data to an XImage for use with OpenGL.
- * xscreensaver, Copyright (c) 1998 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1998, 2001 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -8,6 +8,8 @@
  * documentation.  No representations are made about the suitability of this
  * software for any purpose.  It is provided "as is" without express or 
  * implied warranty.
+ *
+ * Alpha channel support by Eric Lassauge <lassauge@mail.dotcom.fr>.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -25,6 +27,9 @@ extern char *progname;
 #include <X11/Xutil.h>
 #include <X11/xpm.h>
 
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
 static Bool
 bigendian (void)
 {
@@ -36,7 +41,7 @@ bigendian (void)
 
 /* Returns an XImage structure containing the bits of the given XPM image.
    This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
-   extra byte set to 0xFF.
+   extra byte set to either 0xFF or 0x00 (based on the XPM file's mask.)
 
    The Display and Visual arguments are used only for creating the XImage;
    no bits are pushed to the server.
@@ -54,15 +59,16 @@ xpm_to_ximage (Display *dpy, Visual *visual, Colormap cmap, char **xpm_data)
      out the RGB values of the pixels ourselves; and construct an XImage
      by hand.  Regardless of the depth of the visual we're using, this
      XImage will have 32 bits per pixel, 8 each per R, G, and B.  We put
-     0xFF in the fourth slot, as GL will interpret that as "alpha".
+     0xFF or 0x00 in the fourth (alpha) slot, depending on the file's mask.
    */
   XImage *ximage = 0;
   XpmImage xpm_image;
   XpmInfo xpm_info;
   int result;
+  int transparent_color_index = -1;
   int x, y, i;
   int bpl, wpl;
-  XColor colors[255];
+  XColor colors[256];
 
   memset (&xpm_image, 0, sizeof(xpm_image));
   memset (&xpm_info, 0, sizeof(xpm_info));
@@ -74,6 +80,13 @@ xpm_to_ximage (Display *dpy, Visual *visual, Colormap cmap, char **xpm_data)
       exit (1);
     }
 
+  if (xpm_image.ncolors > countof(colors))
+    {
+      fprintf (stderr, "%s: too many colors (%d) in XPM.\n",
+               progname, xpm_image.ncolors);
+      exit (1);
+    }
+
   ximage = XCreateImage (dpy, visual, 32, ZPixmap, 0, 0,
                         xpm_image.width, xpm_image.height, 32, 0);
 
@@ -84,12 +97,26 @@ xpm_to_ximage (Display *dpy, Visual *visual, Colormap cmap, char **xpm_data)
 
   /* Parse the colors in the XPM into RGB values. */
   for (i = 0; i < xpm_image.ncolors; i++)
-    if (!XParseColor(dpy, cmap, xpm_image.colorTable[i].c_color, &colors[i]))
-      {
-       fprintf(stderr, "%s: unparsable color: %s\n", progname,
-               xpm_image.colorTable[i].c_color);
-       exit(1);
-      }
+    {
+      const char *c = xpm_image.colorTable[i].c_color;
+      if (!c)
+        {
+          fprintf(stderr, "%s: bogus color table?  ($d)\n", progname, i);
+          exit (1);
+        }
+      else if (!strncasecmp (c, "None", 4))
+        {
+          transparent_color_index = i;
+          colors[transparent_color_index].red   = 0xFF;
+          colors[transparent_color_index].green = 0xFF;
+          colors[transparent_color_index].blue  = 0xFF;
+        }
+      else if (!XParseColor (dpy, cmap, c, &colors[i]))
+        {
+          fprintf(stderr, "%s: unparsable color: %s\n", progname, c);
+          exit (1);
+        }
+    }
 
   /* Translate the XpmImage to an RGB XImage. */
   {
@@ -115,11 +142,11 @@ xpm_to_ximage (Display *dpy, Visual *visual, Colormap cmap, char **xpm_data)
        for (x = 0; x < xpm_image.width; x++)
          {
            XColor *c = &colors[iline[x]];
-           /* pack it as RGBA */
-           oline[x] = (((c->red   >> 8) << rpos) |
-                       ((c->green >> 8) << gpos) |
-                       ((c->blue  >> 8) << bpos) |
-                       (0xFF            << apos));
+            int alpha = ((iline[x] == transparent_color_index) ? 0x00 : 0xFF);
+            oline[x] = (((c->red   >> 8) << rpos) |
+                        ((c->green >> 8) << gpos) |
+                        ((c->blue  >> 8) << bpos) |
+                        (alpha           << apos));
          }
       }
   }
diff --git a/hacks/images/matrix.xbm b/hacks/images/matrix.xbm
deleted file mode 100644 (file)
index 25d6400..0000000
+++ /dev/null
@@ -1,516 +0,0 @@
-#define matrix_width 77
-#define matrix_height 768
-static char matrix_bits[] = {
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0xf7,0xfe,0xff,0x17,0xf0,0xff,0xff,0xff,0xff,0xff,0x9b,
- 0xfa,0xff,0x07,0xc0,0xff,0xff,0xff,0xff,0xff,0x6b,0xfb,0xff,0x83,0xe0,0xff,
- 0xff,0xff,0xff,0xff,0xf5,0xf6,0xff,0x83,0x86,0xff,0xff,0xff,0xff,0xff,0xfb,
- 0xf5,0xff,0x82,0xc3,0xff,0xff,0xff,0xff,0xff,0xea,0xe7,0xff,0xc1,0x86,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xf7,0xff,0xa0,0x07,0xff,0xff,0xff,0xff,0xbf,0xfa,
- 0xf7,0xff,0xc0,0x85,0xff,0xff,0xff,0xff,0xff,0xf6,0xeb,0xff,0x40,0x07,0xff,
- 0xff,0xff,0xff,0xff,0xfa,0xeb,0xff,0xc0,0x87,0xfe,0xff,0xff,0xff,0x7f,0xed,
- 0xef,0xff,0x60,0x03,0xff,0xff,0xff,0xff,0xff,0xbb,0xf3,0xff,0x80,0x87,0xff,
- 0xff,0xff,0xff,0xff,0xfa,0xed,0xff,0xc1,0x85,0xff,0xff,0xff,0xff,0xff,0xf5,
- 0xf7,0xff,0x40,0x87,0xff,0xff,0xff,0xff,0xff,0xfb,0xeb,0xff,0xa3,0x85,0xff,
- 0xff,0xff,0xff,0xff,0xe9,0xf5,0xff,0x82,0xc3,0xff,0xff,0xff,0xff,0xff,0xb7,
- 0xf7,0xff,0x43,0x85,0xff,0xff,0xff,0xff,0xff,0x7b,0xfd,0xff,0x8f,0xe0,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xfe,0xff,0x2f,0xf8,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,
- 0xfe,0xff,0x3f,0xe8,0xff,0xff,0xff,0xff,0xff,0x4f,0xfb,0xff,0x1f,0xd0,0xff,
- 0xff,0xff,0xff,0xff,0x97,0xfe,0xff,0x1f,0xf4,0xff,0xff,0xff,0xff,0xff,0x9f,
- 0xff,0xff,0x3f,0xf8,0xff,0xff,0xff,0xff,0xff,0x8f,0xff,0xff,0x1f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0x4f,
- 0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x1f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0x8f,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xd7,
- 0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x1f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0x8f,0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0x97,0xff,0xff,0x1f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0xcf,
- 0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0x4f,0xff,0xff,0x1f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0x5b,0xff,0xff,0x17,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x47,0xe9,0xff,
- 0xff,0xff,0xff,0xff,0x53,0xf5,0xff,0x83,0xc2,0xff,0xff,0xff,0xff,0xff,0xf5,
- 0xf7,0xff,0x03,0xc0,0xff,0xff,0xff,0xff,0xff,0xab,0xfa,0xff,0x83,0x86,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xf7,0xff,0x83,0xc5,0xff,0xff,0xff,0xff,0xff,0xf2,
- 0xff,0xff,0x81,0xef,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xc3,0xf6,0xff,
- 0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0x82,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,
- 0xff,0xff,0x83,0xfe,0xff,0xff,0xff,0xff,0xff,0xb7,0xff,0xff,0x87,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x07,0xfd,0xff,0xff,0xff,0xff,0xff,0x6d,
- 0xff,0xff,0x17,0xfd,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0x1f,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0x57,0xfd,0xff,0x37,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x5d,0xf0,0xff,0xff,0xff,0xff,0xff,0xaf,0xfa,0xff,0x57,0xd1,0xff,
- 0xff,0xff,0xff,0xff,0x7b,0xf5,0xff,0xaa,0xc0,0xff,0xff,0xff,0xff,0xff,0xad,
- 0xfa,0xff,0x05,0xc0,0xff,0xff,0xff,0xff,0xff,0xd7,0xf6,0xff,0x03,0xc0,0xff,
- 0xff,0xff,0xff,0xff,0x5b,0xfb,0xff,0x07,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xbf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xab,0xfe,0xff,0x47,0xf1,0xff,0xff,0xff,0xff,0xff,0x75,
- 0xfb,0xff,0x83,0xd0,0xff,0xff,0xff,0xff,0xff,0xab,0xfd,0xff,0x03,0xe0,0xff,
- 0xff,0xff,0xff,0xff,0xf5,0xfe,0xff,0x83,0xeb,0xff,0xff,0xff,0xff,0xff,0xf3,
- 0xfb,0xff,0x83,0xda,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x81,0xeb,0xff,
- 0xff,0xff,0xff,0xff,0x6b,0xff,0xff,0x03,0xfd,0xff,0xff,0xff,0xff,0xff,0xd5,
- 0xff,0xff,0x87,0xfe,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0x03,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0x55,0xff,0xff,0x05,0xfe,0xff,0xff,0xff,0xff,0xff,0xeb,
- 0xff,0xff,0x03,0xfc,0xff,0xff,0xff,0xff,0xff,0xb7,0xff,0xff,0x41,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xfa,0xff,0x7f,0x81,0xfd,0xff,0xff,0xff,0xff,0xff,0xfa,
- 0xff,0xff,0xc0,0xff,0xff,0xff,0xff,0xff,0x7f,0xef,0xff,0xff,0xa1,0xee,0xff,
- 0xff,0xff,0xff,0xff,0xf9,0xfb,0xff,0xc1,0xc5,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xf6,0xff,0x42,0xc3,0xff,0xff,0xff,0xff,0xff,0xbb,0xfb,0xff,0x87,0xc5,0xff,
- 0xff,0xff,0xff,0xff,0xef,0xf6,0xff,0x6b,0xd2,0xff,0xff,0xff,0xff,0xff,0x7b,
- 0xff,0xff,0x2f,0xe8,0xff,0xff,0xff,0xff,0xff,0xdf,0xfd,0xff,0xdf,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x5f,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x1f,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x0b,0xfe,0xff,0xff,0xff,0xff,0xff,0x97,
- 0xff,0xff,0x17,0xfc,0xff,0xff,0xff,0xff,0xff,0xdb,0xfe,0xff,0x0f,0xf8,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xfe,0xff,0x17,0xf0,0xff,0xff,0xff,0xff,0xff,0x57,
- 0xfb,0xff,0x0b,0xe8,0xff,0xff,0xff,0xff,0xff,0x5b,0xfd,0xff,0x17,0xc0,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xf5,0xff,0x17,0xc0,0xff,0xff,0xff,0xff,0xff,0xb7,
- 0xf6,0xff,0x0b,0x80,0xff,0xff,0xff,0xff,0xff,0xd5,0xf5,0xff,0x07,0x40,0xff,
- 0xff,0xff,0xff,0xff,0x2b,0xeb,0xff,0x05,0x80,0xff,0xff,0xff,0xff,0xff,0xcb,
- 0xf5,0xff,0x03,0x80,0xfe,0xff,0xff,0xff,0xff,0x55,0xea,0xff,0x01,0x40,0xff,
- 0xff,0xff,0xff,0xff,0x23,0xf7,0xff,0x02,0x00,0xff,0xff,0xff,0xff,0xff,0xdd,
- 0xfd,0xff,0x07,0xf4,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x2b,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0x5f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x5f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xaf,0xfa,0xff,0xff,0xff,0xff,0xff,0xaf,0xfe,0xff,0x97,0xf0,0xff,
- 0xff,0xff,0xff,0xff,0xf5,0xfa,0xff,0x0b,0xe8,0xff,0xff,0xff,0xff,0xff,0x1b,
- 0xfd,0xff,0x07,0xe0,0xff,0xff,0xff,0xff,0xff,0xef,0xfa,0xff,0xaf,0xd0,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xbb,0xe8,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfb,0xff,0x6f,0xe3,0xff,0xff,0xff,0xff,0xff,0xb7,0xfc,0xff,0xbf,0xd8,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xf6,0xff,0x0b,0xe0,0xff,0xff,0xff,0xff,0xff,0x2b,
- 0xfd,0xff,0x0f,0xe0,0xff,0xff,0xff,0xff,0xff,0xd7,0xfa,0xff,0x03,0xf0,0xff,
- 0xff,0xff,0xff,0xff,0xb9,0xff,0xff,0x82,0xfa,0xff,0xff,0xff,0xff,0x7f,0xeb,
- 0xff,0xff,0x41,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x81,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xed,
- 0xff,0xff,0xa1,0xfd,0xff,0xff,0xff,0xff,0x7f,0xbb,0xff,0xff,0xa5,0xeb,0xff,
- 0xff,0xff,0xff,0xff,0xfd,0xfa,0xff,0x83,0xc5,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xf7,0xff,0xc7,0xe2,0xff,0xff,0xff,0xff,0xff,0xdf,0xfe,0xff,0x57,0xd1,0xff,
- 0xff,0xff,0xff,0xff,0xbb,0xfd,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x57,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x8f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x37,0xfd,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0x5f,0xfa,0xff,0xff,0xff,0xff,0xff,0xb7,0xfd,0xff,0x7f,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xbf,0xf8,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xf5,0xff,0xef,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xbf,0x82,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xf2,0xff,0x57,0xc1,0xff,0xff,0xff,0xff,0xff,0x75,
- 0xe9,0xff,0x07,0x80,0xff,0xff,0xff,0xff,0xff,0x53,0xe5,0xff,0x03,0x80,0xff,
- 0xff,0xff,0xff,0xff,0xbb,0xf3,0xff,0x43,0x81,0xff,0xff,0xff,0xff,0xff,0xed,
- 0xf5,0xff,0x81,0x82,0xff,0xff,0xff,0xff,0xff,0xf6,0xf7,0xff,0xa0,0xc7,0xff,
- 0xff,0xff,0xff,0x7f,0xfb,0xeb,0xff,0xc1,0x82,0xff,0xff,0xff,0xff,0xff,0x7a,
- 0xf7,0xff,0xa0,0x87,0xff,0xff,0xff,0xff,0xff,0xfd,0xf5,0xff,0xa0,0xc5,0xff,
- 0xff,0xff,0xff,0xff,0xeb,0xf7,0xff,0x81,0x83,0xff,0xff,0xff,0xff,0xff,0xfb,
- 0xf5,0xff,0xc7,0xc2,0xff,0xff,0xff,0xff,0xff,0xed,0xf6,0xff,0x43,0x85,0xff,
- 0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0xaf,0xf2,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xfd,0xff,0xb7,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe8,0xff,0xff,0xff,0xff,0xff,0xab,
- 0xfa,0xff,0x87,0xd6,0xff,0xff,0xff,0xff,0xff,0xeb,0xf7,0xff,0x03,0x80,0xff,
- 0xff,0xff,0xff,0xff,0x53,0xf5,0xff,0x03,0x41,0xff,0xff,0xff,0xff,0xff,0x69,
- 0xf7,0xff,0x03,0x80,0xff,0xff,0xff,0xff,0xff,0xd7,0xfd,0xff,0x87,0xd6,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x83,0xfa,0xff,0xff,0xff,0xff,0xff,0xab,
- 0xff,0xff,0x07,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0x97,0xff,0xff,0x2f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xff,0xff,0x3f,0xfa,0xff,0xff,0xff,0xff,0xff,0xef,0xfe,0xff,0x3f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0x5f,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfe,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xfc,0xff,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xea,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0xff,0xff,0xe7,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfd,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0x5f,0xf5,0xff,0xff,0xff,0xff,0xff,0xd7,0xfb,0xff,0x4f,0xc5,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xf5,0xff,0x83,0x82,0xff,0xff,0xff,0xff,0xff,0x6b,
- 0xf7,0xff,0x87,0xc5,0xff,0xff,0xff,0xff,0xff,0xf3,0xeb,0xff,0x43,0x85,0xff,
- 0xff,0xff,0xff,0xff,0xdb,0xf5,0xff,0x43,0x83,0xff,0xff,0xff,0xff,0xff,0x75,
- 0xeb,0xff,0x87,0xc2,0xff,0xff,0xff,0xff,0xff,0x57,0xf5,0xff,0x03,0x80,0xff,
- 0xff,0xff,0xff,0xff,0x2b,0xf1,0xff,0x0f,0x80,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xf4,0xff,0x07,0x80,0xff,0xff,0xff,0xff,0xff,0x53,0xeb,0xff,0x03,0x80,0xff,
- 0xff,0xff,0xff,0xff,0x4b,0xf5,0xff,0x07,0x80,0xff,0xff,0xff,0xff,0xff,0xb7,
- 0xeb,0xff,0x03,0x40,0xff,0xff,0xff,0xff,0xff,0xeb,0xf6,0xff,0x87,0x86,0xff,
- 0xff,0xff,0xff,0xff,0xf5,0xef,0xff,0x83,0x8b,0xfe,0xff,0xff,0xff,0xff,0xf3,
- 0xf7,0xff,0x87,0x46,0xff,0xff,0xff,0xff,0xff,0xbb,0xeb,0xff,0x43,0x87,0xff,
- 0xff,0xff,0xff,0xff,0xeb,0xeb,0xff,0x87,0x05,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xf7,0xff,0x4b,0xc5,0xff,0xff,0xff,0xff,0xff,0xdb,0xfe,0xff,0x6f,0xd5,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0x5f,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0x3f,0xf5,0xff,
- 0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x57,0xd5,0xff,0xff,0xff,0xff,0xff,0xbb,
- 0xf5,0xff,0x4f,0xc5,0xff,0xff,0xff,0xff,0xff,0xeb,0xf7,0xff,0x03,0x83,0xff,
- 0xff,0xff,0xff,0xff,0xf7,0xf7,0xff,0xc7,0x46,0xff,0xff,0xff,0xff,0xff,0x7b,
- 0xeb,0xff,0x03,0x87,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xc7,0x8b,0xfe,
- 0xff,0xff,0xff,0xff,0xfb,0xeb,0xff,0x83,0x46,0xff,0xff,0xff,0xff,0xff,0xeb,
- 0xf7,0xff,0x87,0x8b,0xfe,0xff,0xff,0xff,0xff,0xf3,0xd6,0xff,0x83,0x84,0xff,
- 0xff,0xff,0xff,0xff,0x95,0xf5,0xff,0x03,0x42,0xff,0xff,0xff,0xff,0xff,0x6b,
- 0xf5,0xff,0x07,0x80,0xff,0xff,0xff,0xff,0xff,0x45,0xf5,0xff,0x03,0xc0,0xff,
- 0xff,0xff,0xff,0xff,0xb7,0xff,0xff,0x07,0xd0,0xff,0xff,0xff,0xff,0xff,0xd7,
- 0xfe,0xff,0x0f,0xfc,0xff,0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x17,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xfe,0xff,0x5f,0xf4,0xff,0xff,0xff,0xff,0xff,0x6f,
- 0xff,0xff,0x3f,0xf8,0xff,0xff,0xff,0xff,0xff,0xbf,0xfd,0xff,0x5f,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfa,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xf9,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0xbf,
- 0xfe,0xff,0x7f,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,0xfd,0xff,0xff,0xf8,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xfd,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xe9,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfe,0xff,0xff,0xda,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xaf,0xc5,0xff,
- 0xff,0xff,0xff,0xff,0xdb,0xf7,0xff,0x57,0x87,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfb,0xff,0xa9,0xcd,0xff,0xff,0xff,0xff,0xff,0xf5,0xf7,0xff,0xca,0xc7,0xff,
- 0xff,0xff,0xff,0xff,0xde,0xed,0xff,0x60,0x05,0xff,0xff,0xff,0xff,0xbf,0x7a,
- 0xab,0xff,0x90,0x02,0xf8,0xff,0xff,0xff,0x7f,0xdd,0x52,0x7f,0xa0,0x00,0xf4,
- 0xff,0xff,0xff,0xff,0xb6,0xad,0xff,0x50,0x01,0xf8,0xff,0xff,0xff,0xff,0xfe,
- 0xf7,0xff,0xd8,0xab,0xfe,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xfd,0xff,0xfb,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x57,0xfe,0xff,0xff,0xff,0xff,0xff,0xeb,
- 0xff,0xff,0x0f,0xfe,0xff,0xff,0xff,0xff,0xff,0xb7,0xff,0xff,0x0f,0xfd,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0x77,0xfa,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xfd,0xff,0x5f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xbf,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0x86,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xf5,0xff,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0x87,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xf7,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xc2,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xbf,
- 0xfe,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0x57,0xff,0xff,0x3f,0xfd,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x8f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xdf,0xfa,0xff,0xff,0xff,0xff,0xff,0x6f,0xfd,0xff,0xaf,0xe8,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xfe,0xff,0x57,0xd1,0xff,0xff,0xff,0xff,0xff,0xbf,
- 0xf5,0xff,0xd2,0x50,0xff,0xff,0xff,0xff,0xff,0xfa,0xfa,0xff,0xd5,0xa1,0xfe,
- 0xff,0xff,0xff,0xff,0x7f,0xdd,0xff,0xe8,0x90,0xfe,0xff,0xff,0xff,0x7f,0xfd,
- 0xed,0xff,0xb4,0xa9,0xfe,0xff,0xff,0xff,0x7f,0xbf,0xbc,0xff,0xf8,0x70,0xfa,
- 0xff,0xff,0xff,0xff,0x7e,0xff,0x7f,0xf4,0x91,0xfa,0xff,0xff,0xff,0xff,0xfe,
- 0xd5,0xfe,0xf8,0xaa,0xf5,0xff,0xff,0xff,0xbf,0xfe,0x7f,0x7f,0xf4,0x47,0xf1,
- 0xff,0xff,0xff,0xff,0xfe,0xeb,0xfd,0xd8,0x85,0xf2,0xff,0xff,0xff,0xff,0xfe,
- 0x77,0x7f,0xf0,0x47,0xf5,0xff,0xff,0xff,0x7f,0xfd,0xd7,0xff,0xf8,0x07,0xf5,
- 0xff,0xff,0xff,0xff,0xef,0xff,0xfe,0x55,0x17,0xfa,0xff,0xff,0xff,0xff,0x7f,
- 0xaf,0xff,0x6f,0x5f,0xfc,0xff,0xff,0xff,0xff,0xf7,0xdf,0xff,0x97,0x3d,0xfe,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xfd,0xff,
- 0xff,0xff,0xff,0xdf,0x56,0xff,0xff,0x2a,0xea,0xff,0xff,0xff,0xff,0xff,0xad,
- 0xfb,0x3f,0x09,0xd4,0xff,0xff,0xff,0xff,0xbf,0xd7,0xfe,0xff,0x15,0xe8,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0xbf,
- 0xff,0xbf,0x2a,0xfc,0xff,0xff,0xff,0xff,0xdf,0x4b,0xff,0x7f,0x1f,0xd4,0xff,
- 0xff,0xff,0xff,0x6f,0xdf,0xfd,0x1f,0x12,0xfa,0xff,0xff,0xff,0xff,0xff,0x4d,
- 0xff,0x7f,0x17,0xac,0xff,0xff,0xff,0xff,0xdf,0xaf,0xfb,0xbf,0x15,0xf4,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x1e,0xba,0xff,0xff,0xff,0xff,0xff,0xad,
- 0xff,0xff,0x17,0xfc,0xff,0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x1d,0xf6,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfc,0xff,0xff,0xff,0xff,0xff,0x5f,
- 0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x3f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xff,0xff,0x3f,0xfc,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0x1f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x3f,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0xd7,
- 0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xbf,
- 0xff,0xff,0x3f,0xfd,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x7f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0x7f,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfe,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xf3,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xaa,0xff,
- 0xff,0xff,0xff,0xff,0x57,0xf5,0xff,0x2b,0xa5,0xfe,0xff,0xff,0xff,0xff,0xfb,
- 0xdf,0xff,0x47,0x55,0xfe,0xff,0xff,0xff,0xff,0x6b,0xb7,0xff,0x47,0x15,0xfe,
- 0xff,0xff,0xff,0xff,0xf7,0xdd,0xff,0x03,0x2b,0xfc,0xff,0xff,0xff,0xff,0xab,
- 0xaf,0xff,0x87,0x14,0xfe,0xff,0xff,0xff,0xff,0xdb,0xd4,0xff,0x03,0x01,0xfc,
- 0xff,0xff,0xff,0xff,0x6b,0x57,0xff,0x06,0x00,0xfc,0xff,0xff,0xff,0xff,0x5a,
- 0xd5,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0xff,0xad,0xb5,0xff,0x00,0x00,0xfa,
- 0xff,0xff,0xff,0xbf,0x6a,0xd5,0xff,0x00,0x00,0xfd,0xff,0xff,0xff,0xff,0xdf,
- 0xb6,0xff,0x22,0x81,0xfe,0xff,0xff,0xff,0xff,0x6b,0xe3,0xff,0x0b,0x01,0xfd,
- 0xff,0xff,0xff,0xff,0xf7,0xf5,0xff,0xa7,0x82,0xff,0xff,0xff,0xff,0xff,0x5b,
- 0xdf,0xff,0x47,0x85,0xfe,0xff,0xff,0xff,0xff,0xf5,0xf5,0xff,0x83,0xaa,0xfe,
- 0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x47,0x6d,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xff,0xff,0x87,0xfa,0xff,0xff,0xff,0xff,0xff,0xf7,0xfd,0xff,0xaf,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0x5f,0xff,0xff,0x17,0xfc,0xff,0xff,0xff,0xff,0xff,0xd7,
- 0xff,0xff,0x3f,0xfa,0xff,0xff,0xff,0xff,0xff,0xaf,0xfe,0xff,0x1f,0xf8,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xeb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xfd,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0xff,0x5b,0xc9,0xff,
- 0xff,0xff,0xff,0xff,0xaa,0xfb,0xff,0xa0,0x82,0xff,0xff,0xff,0xff,0x7f,0x75,
- 0xf5,0xff,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xab,0xeb,0xff,0x00,0x80,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xfe,0xff,0x07,0xad,0xfe,0xff,0xff,0xff,0xff,0xab,
- 0xef,0xff,0x0b,0x52,0xff,0xff,0xff,0xff,0xff,0xdf,0xfb,0xff,0x17,0xac,0xfe,
- 0xff,0xff,0xff,0xff,0x57,0xbf,0xff,0x3f,0xbe,0xfe,0xff,0xff,0xff,0xff,0xdf,
- 0xff,0xff,0x1f,0xfc,0xfe,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0x7f,0xba,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfe,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xef,0xf9,0xff,
- 0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0xaf,0xf9,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xfd,0xff,0xc7,0xf0,0xff,0xff,0xff,0xff,0xff,0x7b,0xfe,0xff,0x43,0xf9,0xff,
- 0xff,0xff,0xff,0xff,0x6b,0xfd,0xff,0x87,0xf0,0xff,0xff,0xff,0xff,0xff,0xfb,
- 0xfa,0xff,0x43,0xe9,0xff,0xff,0xff,0xff,0xff,0xab,0xfe,0xff,0xa7,0xf0,0xff,
- 0xff,0xff,0xff,0xff,0xbb,0xfa,0xbf,0x82,0xa8,0xff,0xff,0xff,0xff,0xbf,0x69,
- 0xfa,0x7f,0x01,0x50,0xff,0xff,0xff,0xff,0xdf,0xaa,0xd4,0x3f,0x00,0xa0,0xfe,
- 0xff,0xff,0xff,0xf7,0xb5,0xfa,0xbf,0x02,0x40,0xff,0xff,0xff,0xff,0xff,0x77,
- 0xfd,0xff,0xc3,0xb0,0xff,0xff,0xff,0xff,0xff,0xeb,0xf6,0xff,0x03,0xe9,0xff,
- 0xff,0xff,0xff,0xff,0xbb,0xfd,0xff,0xc7,0xd1,0xff,0xff,0xff,0xff,0xff,0xfb,
- 0xf7,0xff,0xa3,0xca,0xff,0xff,0xff,0xff,0xff,0xf7,0xfd,0xff,0x87,0xc7,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xf7,0xff,0xc7,0xa5,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xfb,0xff,0xa7,0xcf,0xff,0xff,0xff,0xff,0xff,0xfb,0xef,0xff,0xc7,0x87,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,
- 0xff,0xff,0xcf,0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x5f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x3f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xff,0xff,0x2f,0xfa,0xff,0xff,0xff,0xff,0xff,0xde,0xfe,0xff,0x10,0xd4,0xff,
- 0xff,0xff,0xff,0xbf,0x8a,0xf5,0xff,0x08,0x84,0xff,0xff,0xff,0xff,0xff,0x56,
- 0xeb,0x7f,0x00,0x40,0xff,0xff,0xff,0xff,0x7f,0xad,0xff,0xff,0x18,0x04,0xff,
- 0xff,0xff,0xff,0xbf,0xae,0xeb,0xff,0x28,0xa4,0xff,0xff,0xff,0xff,0xff,0xd6,
- 0xf6,0x7f,0x10,0x84,0xfe,0xff,0xff,0xff,0x7f,0x4d,0xeb,0xff,0x00,0x40,0xff,
- 0xff,0xff,0xff,0x7f,0x55,0xf7,0xff,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x9e,
- 0xed,0xff,0x18,0x84,0xff,0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0x15,0xea,0xff,
- 0xff,0xff,0xff,0xff,0xd6,0xf7,0xff,0x3d,0x5c,0xff,0xff,0xff,0xff,0xff,0x5f,
- 0xff,0xff,0x1f,0xf6,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfc,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xef,
- 0xff,0xff,0x5f,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x7f,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xfd,0xff,0xff,0xd1,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfa,0xff,0xff,0x69,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xff,0xff,0xa1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xc2,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xf5,0xff,0xff,0x83,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xc2,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xf5,0xff,0xff,0x81,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfa,0xff,0x7f,0xc0,0xff,0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x40,0xff,
- 0xff,0xff,0xff,0xff,0x7f,0xfd,0xff,0x7f,0xa1,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xf5,0xff,0xff,0xa1,0xfe,0xff,0xff,0xff,0xff,0xbf,0xec,0xff,0xbf,0x41,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xd6,0xff,0xff,0x82,0xfe,0xff,0xff,0xff,0xff,0xff,
- 0xf5,0xff,0xff,0x81,0xfe,0xff,0xff,0xff,0xff,0xbf,0xda,0xff,0x57,0x00,0xff,
- 0xff,0xff,0xff,0xff,0x6b,0xf7,0xff,0x2a,0x80,0xff,0xff,0xff,0xff,0xff,0xae,
- 0xfa,0xff,0x05,0xc0,0xff,0xff,0xff,0xff,0xff,0xf7,0xef,0xff,0x94,0x5a,0xff,
- 0xff,0xff,0xff,0xbf,0xdd,0xff,0xff,0x6b,0xdf,0xfe,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xf6,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x7f,0xfc,0xff,0xff,0xff,0xff,0xff,0x97,0xff,0xff,0x1f,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x3f,0xfc,0xff,0xff,0xff,0xff,0xff,0x4f,
- 0xff,0xff,0x09,0xf4,0xff,0xff,0xff,0xff,0x7f,0x55,0xfd,0xff,0x10,0xa8,0xff,
- 0xff,0xff,0xff,0x7f,0x8d,0xf6,0x7f,0x00,0x40,0xff,0xff,0xff,0xff,0xff,0x76,
- 0xfb,0xff,0x10,0xd0,0xff,0xff,0xff,0xff,0x7f,0xbe,0xfd,0xff,0xb0,0xec,0xff,
- 0xff,0xff,0xff,0xff,0xdd,0xfe,0xff,0x58,0xd2,0xff,0xff,0xff,0xff,0x7f,0x7e,
- 0xfb,0xff,0xa8,0xf9,0xff,0xff,0xff,0xff,0xff,0xfb,0xfe,0xff,0xf0,0xf0,0xff,
- 0xff,0xff,0xff,0xbf,0xbe,0xfd,0xff,0x58,0xf9,0xff,0xff,0xff,0xff,0xff,0xfb,
- 0xfe,0xff,0x54,0xe9,0xff,0xff,0xff,0xff,0xff,0xae,0xfd,0xff,0x52,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0x45,0xf5,0xff,0xff,0xff,0xff,0xff,0xef,
- 0xfb,0xff,0x83,0xaa,0xff,0xff,0xff,0xff,0xff,0xf3,0xf7,0xff,0x07,0xcf,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xd4,0xab,0xff,0xff,0xff,0xff,0xff,0xfe,
- 0xf7,0xff,0xf4,0x8f,0xff,0xff,0xff,0xff,0xbf,0xfd,0xff,0xff,0x58,0x47,0xff,
- 0xff,0xff,0xff,0xff,0xfe,0xeb,0xff,0xf0,0x4f,0xff,0xff,0xff,0xff,0x7f,0xfb,
- 0xff,0xff,0xb4,0x4b,0xff,0xff,0xff,0xff,0xff,0xfe,0xd7,0xff,0xf0,0x8f,0xfe,
- 0xff,0xff,0xff,0x7f,0xdf,0xff,0xff,0xd8,0x56,0xff,0xff,0xff,0xff,0xff,0xfd,
- 0xeb,0xff,0xf4,0x4b,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xff,0xd4,0x8f,0xfe,
- 0xff,0xff,0xff,0xbf,0xfe,0xdf,0xff,0xf0,0x4b,0xff,0xff,0xff,0xff,0xff,0xfe,
- 0xf7,0xff,0x58,0x47,0xff,0xff,0xff,0xff,0x7f,0xdb,0xea,0xff,0xa8,0x85,0xfe,
- 0xff,0xff,0xff,0xff,0xf6,0xf7,0xff,0x40,0x42,0xff,0xff,0xff,0xff,0xff,0x5d,
- 0xdb,0xff,0xb0,0x02,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xff,0xd0,0x8b,0xff,
- 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xfc,0xcf,0xfe,0xff,0xff,0xff,0xff,0xfe,
- 0xef,0xff,0xf5,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb6,0xfd,0xff,0xff,0xff,0xff,0xff,0xb5,
- 0xfb,0xff,0x51,0x55,0xff,0xff,0xff,0xff,0xff,0xee,0xd6,0xff,0x40,0x01,0xfe,
- 0xff,0xff,0xff,0xbf,0x52,0xb5,0xff,0x00,0x00,0xfd,0xff,0xff,0xff,0xff,0xbd,
- 0xfe,0xff,0x03,0x68,0xff,0xff,0xff,0xff,0xff,0xd7,0xfa,0xff,0x17,0xf0,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0x6f,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xfd,0xff,0xff,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xbf,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xfd,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xfa,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfd,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xf5,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xf7,0xff,0xff,0xa7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xef,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xf7,0xff,0x3f,0x05,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xef,0xff,0x1f,0xce,0xff,0xff,0xff,0xff,0xff,0x5f,0xf7,0xff,0x3f,0x84,0xfe,
- 0xff,0xff,0xff,0xff,0xd7,0xed,0xff,0x17,0x46,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xdb,0xff,0x1f,0x8a,0xfe,0xff,0xff,0xff,0xff,0x5f,0xef,0xff,0x0b,0x00,0xfe,
- 0xff,0xff,0xff,0xff,0xa5,0xaa,0xff,0x0b,0x04,0xfa,0xff,0xff,0xff,0xff,0x9f,
- 0xd5,0xff,0x0a,0x00,0xfc,0xff,0xff,0xff,0xff,0xd7,0xb7,0xff,0x17,0x04,0xff,
- 0xff,0xff,0xff,0xff,0x5f,0xef,0xff,0x1f,0x8a,0xfe,0xff,0xff,0xff,0xff,0xd7,
- 0xf5,0xff,0x3f,0xa4,0xfe,0xff,0xff,0xff,0xff,0xaf,0xdf,0xff,0x1f,0x4c,0xff,
- 0xff,0xff,0xff,0xff,0xdf,0xf7,0xff,0x3f,0x86,0xfe,0xff,0xff,0xff,0xff,0x5f,
- 0xdb,0xff,0x1f,0x4a,0xff,0xff,0xff,0xff,0xff,0xdf,0xf7,0xff,0x3f,0x8c,0xfe,
- 0xff,0xff,0xff,0xff,0xaf,0xef,0xff,0x1f,0x46,0xff,0xff,0xff,0xff,0xff,0x5f,
- 0xf7,0xff,0x3f,0x44,0xff,0xff,0xff,0xff,0xff,0xdf,0xdb,0xff,0x3f,0x00,0xff,
- 0xff,0xff,0xff,0xff,0x57,0xf5,0xff,0x1f,0x40,0xff,0xff,0xff,0xff,0xff,0xdf,
- 0xf7,0xff,0x7f,0x8e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xeb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,
- 0xff,0xff,0xe5,0xff,0xff,0xff,0xff,0xff,0x7f,0xfb,0xff,0x7f,0xb0,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0xbd,0xfd,0xff,0xa8,0xaa,0xff,0xff,0xff,0xff,0xff,0xef,
- 0xd6,0xff,0x55,0x01,0xfc,0xff,0xff,0xff,0x7f,0x5b,0x6b,0xff,0x15,0x00,0xf4,
- 0xff,0xff,0xff,0xff,0xdf,0xd5,0xff,0x17,0x02,0xfe,0xff,0xff,0xff,0xff,0xeb,
- 0xff,0xff,0x0b,0x8d,0xff,0xff,0xff,0xff,0xff,0xb7,0xd7,0xff,0x27,0x6e,0xfd,
- 0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0x85,0xad,0xfe,0xff,0xff,0xff,0xff,0xed,
- 0xdf,0xff,0x03,0x7e,0xfe,0xff,0xff,0xff,0x7f,0xb7,0xff,0xff,0x24,0x3b,0xff,
- 0xff,0xff,0xff,0xff,0xfd,0xaf,0xff,0xa9,0x5e,0xfc,0xff,0xff,0xff,0xff,0xd6,
- 0xdf,0xff,0xb0,0x3e,0xfe,0xff,0xff,0xff,0xbf,0xfe,0xbf,0xff,0x58,0x3e,0xfc,
- 0xff,0xff,0xff,0xff,0xaf,0xdf,0xff,0x5d,0x5e,0xfe,0xff,0xff,0xff,0xff,0xdf,
- 0xbf,0xff,0x3f,0x3d,0xfc,0xff,0xff,0xff,0xff,0x7f,0xdf,0xff,0x3f,0x16,0xfe,
- 0xff,0xff,0xff,0xff,0xdf,0xea,0xff,0x5f,0x00,0xff,0xff,0xff,0xff,0xff,0x7f,
- 0xf5,0xff,0x7f,0x80,0xfe,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xcb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x97,0xbe,0xfe,0xff,0xff,0xff,0xff,0xaf,0xaf,0xff,0x97,0x56,0xfe,
- 0xff,0xff,0xff,0xff,0xfb,0xdf,0xff,0x2f,0x1e,0xfc,0xff,0xff,0xff,0xff,0xaf,
- 0xf7,0xff,0x1f,0x05,0xff,0xff,0xff,0xff,0xff,0xdf,0xdf,0xff,0x3f,0x8e,0xfe,
- 0xff,0xff,0xff,0xff,0xaf,0xf5,0xff,0x1f,0x44,0xff,0xff,0xff,0xff,0xff,0x5f,
- 0xf7,0xff,0x3f,0xca,0xff,0xff,0xff,0xff,0xff,0xb7,0xfd,0xff,0x1f,0xa8,0xff,
- 0xff,0xff,0xff,0xff,0xbf,0xf6,0xff,0x3f,0xe0,0xff,0xff,0xff,0xff,0xff,0xaf,
- 0xfc,0xff,0x5f,0xf0,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0x3f,0xd0,0xff,
- 0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x57,0xe0,0xff,0xff,0xff,0xff,0xff,0xeb,
- 0xf6,0xff,0x05,0x80,0xff,0xff,0xff,0xff,0xff,0xb5,0xeb,0xff,0x02,0xc6,0xff,
- 0xff,0xff,0xff,0xff,0xd5,0xf7,0xff,0x01,0x85,0xff,0xff,0xff,0xff,0xff,0xfe,
- 0xff,0xff,0xc4,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xbf,0xfe,
- 0xff,0xff,0xff,0xbf,0xfd,0xdf,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xef,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xf0,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xfd,0xff,0x5f,0xd4,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,
- 0xff,0xff,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,
- 0xff,0xff,0x82,0xbf,0xfe,0xff,0xff,0xff,0xff,0xfb,0xdf,0xff,0xc3,0x5f,0xfe,
- 0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0x83,0x2f,0xfe,0xff,0xff,0xff,0xff,0xf7,
- 0xd7,0xff,0xc5,0x56,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x43,0xaf,0xff,
- 0xff,0xff,0xff,0xff,0xd7,0xf7,0xff,0x87,0xc6,0xff,0xff,0xff,0xff,0xff,0xdb,
- 0xff,0xff,0x2f,0xfe,0xff,0xff,0xff,0xff,0xff,0x6f,0xff,0xff,0x1f,0xda,0xff,
- 0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0x3f,0xf8,0xff,0xff,0xff,0xff,0xff,0x7f,0xfd,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xfb,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xc7,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
- };
diff --git a/hacks/images/matrix.xpm b/hacks/images/matrix.xpm
deleted file mode 100644 (file)
index 6fe3bc8..0000000
+++ /dev/null
@@ -1,905 +0,0 @@
-/* XPM */
-static char * matrix_xpm[] = {
-"84 837 65 1",
-"      c None",
-".     c #000000",
-"+     c #020E04",
-"@     c #021804",
-"#     c #062604",
-"$     c #0B3008",
-"%     c #021E04",
-"&     c #0C360E",
-"*     c #114410",
-"=     c #1F561E",
-"-     c #145417",
-";     c #136314",
-">     c #1D5E1D",
-",     c #0E4E0C",
-"'     c #1C4E1C",
-")     c #246624",
-"!     c #2F832F",
-"~     c #2B7729",
-"{     c #368B34",
-"]     c #3B9439",
-"^     c #298B27",
-"/     c #4CB34A",
-"(     c #44AB42",
-"_     c #42A244",
-":     c #0D3E0E",
-"<     c #26C227",
-"[     c #52BB54",
-"}     c #3E9C3C",
-"|     c #127410",
-"1     c #40CC44",
-"2     c #5AC254",
-"3     c #286E26",
-"4     c #178618",
-"5     c #269624",
-"6     c #62DA61",
-"7     c #5ACA5C",
-"8     c #5ED05C",
-"9     c #2AA62C",
-"0     c #3AC237",
-"a     c #FFFFFF",
-"b     c #166E14",
-"c     c #62DE64",
-"d     c #1E751C",
-"e     c #26B529",
-"f     c #88E688",
-"g     c #42D73C",
-"h     c #36B634",
-"i     c #2E9A34",
-"j     c #66E561",
-"k     c #7AF67C",
-"l     c #92F294",
-"m     c #76EE74",
-"n     c #1AA614",
-"o     c #169614",
-"p     c #32D634",
-"q     c #32CB34",
-"r     c #3EDE3C",
-"s     c #D9F9D8",
-"t     c #26CB24",
-"u     c #9DD89F",
-"v     c #E8FEEA",
-"w     c #D8F3D8",
-"x     c #73E774",
-"y     c #66E264",
-"z     c #D7F2D8",
-"....................................................................................",
-".......................................++++++......................++++++...........",
-"...........+.+......................++++@++++++.................+@+@#@@@@++.........",
-"........++.++++++++................+@@@###$#%@@++..............+@@#$$$*$#%@@+.......",
-"........+++.+++++.+...............+@####&#&&$%%@+.............@@$$$:,:,,*$#@@.......",
-"......+++@@@@@@@@@+++............+@$*=---;;>,'*$#++..........@%,|5noonneo4|,$@+.....",
-"......++%##%#####%%+++..........+@#')!!~~~{]!)>*&@+.........+#$^0g6p0fff60nd,@+.....",
-"....+++%#$$$#$$$$##%@.+........+%%$)]/(_]_//_{~):#@+.......+#%:<aaaaaaaaaf1e;$%+....",
-".....+@##&$###$$###%@+.........+##,~][_]{{}_}]{~=#@+.......@$*|1aaaaffaaaafg5*%@....",
-"...++++#$&$#@@%##$$$@+++......+@$,=!/2_!)3~!{_/]>&#@+.....+%,456aaag<q0gfaaae,$%+...",
-"...++@%#$&##@@@+#$&&%++......++%:=3](7}~----!_8/~:#++....++#;90aaaaqoooogaaa1;$@+...",
-"....@%%$&&$@@+@@%$:$#+++......+@*)~}[7]b,,,,~(c/~*##+.....@#de0aaaa<44440aaa1|:$@...",
-"..++@###$&#@@+@+%$&$#@+++....+%#=~{}([{3,*,*3_7/!-&$@....+%:51faaaf<4444qaaa6o,:@...",
-"...++##$$$##+@@+%#&$#@++.....+@$=!]__(!b,,,*~]7(!>*#@+...+%:9gaaaar<444|0aaa69d*#+..",
-"..++@#$$$$%@++@+##&$#%+++....+%$){_(((!>:*,*3]2/!)'&@+...@%*efaaaage||4|0aaa6e4,%+..",
-"...+%##$#$#%@@++##&&#%@++....+@$){___}!;,,::~][/{)=&%+...+#*hfaaaape44||qaaafe5,#+..",
-"..++%$$$$##@+@++%$&$#%@+.....+@&3]/__}!-:**:3_2/])>:@+...+%,0aaaaapn||||0aaaa09;#+..",
-"...+@#$$#$%@@@@+##&$$%@@+....@@$)](_}}~;,,**~]2/]3=:@+...@#*haaasatn44||0aaaa05;#+..",
-".+.+@##$$$#@+@++##&$#@++.+...@@&={}(_({;,,**~]2/!='&@+...@%,9faaaafe44||qaaaf94,#+..",
-"..++@%#$$&#%@@@+##&$#@@+.....+@$>~{_/[{),,,,3}[(!=:#@+...+%:91faaar<44440aaa65;:@+..",
-"...+@%#$$$$@+@@+%#&$@+++.....++$=3{_/[i),,*,3]2_~'&#+....+%:50faaaf<4444<aaa14-$@...",
-"...++@@#$&$#@@@@%$&$#@+++....++#*=3]/7_d,---~_2/~*$#@....+@$|90aaajt4oooqaaap|,$%...",
-"....+@@$&*#%@+%%#$&$%++.......+@&,=}2c(~-->)!(7_~:#++.....+#,49jaaapooee6aaa1;$@+...",
-"...++++#&&&%@%@@#$&$%+.+......+@$&'!28(d-;;3{(8/~$#@+.....+@:;46aaatoee<faaa0,$@+...",
-"....+++@$&$%%#####$#@+.........+#&*3_[}!b~~!{]_~>$@+.......@$,|1aasg<<tg6aa69:#@....",
-".....++@%#########@@+++........+@%$>~{{!^!{]{~3>*@@+.......+@$:91ff6gfjafgu9|%@+....",
-"......++@@##$#$##%+++...........+%#:>3!{}}_}{)*&$@+.........+#$;90gfaaaa6e|-:#+.....",
-"....+..++@@@%%%#%+@+.+..........++@&*==)33~~)':#@++.........+@@-|59h0001h4;:#++.....",
-"......++++++@@++@++..............++@$&**'''':&#@+............++#:,||^^4^|,$@%.......",
-"...........++.++...+...............+@@@##%%#%@+@...............+@#%$$$$$#%@%........",
-".........+..+..++...................+++@@%+@@++.................++%@%#@@%++.........",
-"....................................................................................",
-"........................................+.+.........................+.+.............",
-"...........+.+.+......................++@@+@++....................+@#%@@@+..........",
-"...........++++.+....................+@%#$#%@++..................+%%$*:#%@+.........",
-".........+++++++++..................+@#&:$&$#%++................+#$,;,,:$#@+........",
-"..........+##%%@@@@+...............+@@'3{33)='*$+..............+@#40fq0e54d,@.......",
-"........++%#&$$##%@@+..............+@#)]2/]!~3)'$..............@#$haaaa6g0h^*.......",
-"........+.#&'&&$###%+..............@@#!2kc2_{{~):..............@%:6avaaaa60h;.......",
-"......+.++#$'&$#%@@++.............+@#&~7k8_!~)=:$.............+%$*1avaa11h9d:.......",
-"........++#$'$#@@+@++.............+@#&![k2]==''$@.............+#$,6avaa9i^d:#.......",
-"......+.++#$'&#++++...............+@$${2k[~*:##@+.............+#:,6ava1|;:$#+.......",
-"........++#$'$%+++.+..............+@#&{[l/~:$$@++.............+%:,6ava1;,:%@+.......",
-".......+.+#$'$#@+.+...............+%#&{[k/!:&#%@..............+#$-6avag;,$#%........",
-".......+++#$*$%+++.+..............+@$${2k[~:$#+@..............+#:,fava1;,$@@........",
-".........+#$'&#++.+...............+@$${2k[~:##%+..............+%:,6avaq;:$#+........",
-"......+.++#&'$%++.................@@#${[k/~$$@++..............%%$,fava1,:%%+........",
-"........++#$'$#++++...............+@$&{2k/~:##@...............+#:'6ava1;:$@.........",
-"......++.+#$*$#++.+..............+@##${[l/~:$@@..............+@$:,fava0;:#@.........",
-"........++#$'&%+.+................+@$:{7k[~&##++..............%#:;6avag,:$@+........",
-"......++++#$'$#++++..............+@#$${[k[~:$#@+.............+@$:,favag;:$@+........",
-"........++#$'$#+++...............+@#$:{7k[~:$#++.............+#$,;6avat;,$@+........",
-"......++++#&'$%+++...............++#$:!2k[~&$$@+.............+@$,;fava1,,:#+........",
-"........++#$'$#++++..............+%%$:{7k/~&$#@+.............+#$:;wava1;:&%+........",
-".....+++++#&*$#+++.+.............+%$$*!2m[!&&#@+.............+#:,|favag;,$#@........",
-".......+++#$&$#@+++..............@+$*={/8_!;*:#@.............@@,|i6aaagn|;$@........",
-".......@@%#$&##%@+++.............+@:')!(2_!)-:#%+............+%;^hfaaa60o;:%+.......",
-".......+@@##$$#%@++..............++:=3{](]!3=*$@+............+@;906aaa609d*#+.......",
-".......++@@@%@+@+++...............+$:'=)~)=':$@@..............+:;^9h10i!;:#@........",
-"........++++@++++..................+%$&:*::$$@+................@$:';d;;:*#+.........",
-"..........+..+.+....................++@+@++@+...................+@@@@@@@+...........",
-".....................................++++++......................+++@++.............",
-"............+..........................+++++.......................+++++............",
-"..........+.+.+.+...................+++@%++@++..................++@%#%%@@+..........",
-"........+.+++++++.+................+@%#$&$#$#@++...............+##$:,:*:$%@+........",
-".......++++++++++++..............++@#$$:::::$$%++............+@#$,,;;;;;,:#@+.......",
-"......+.++@@@@@+++++.............+@#**''*',,*:&#@+...........+@:;|444444|;,:%+......",
-"....+.+@#$#%%@@%%%#@@...........+%#=~{!33)))))~>:+..........+#$51f6<0<ee<019-@......",
-".....++%#&$#######$#@+.........++#$3]2_]!!!!{]]!'#+........+@$,0aaaagg6g6aa6^$+.....",
-"....+++#&&&$#####$&#@+.........+%$:![82}{!{{]_[]=#+........+#:;6aaaaff6faaaa9$+.....",
-".....+@#$&$$@%@%##$#++.........+#:'![8/]~3)3!]({=#+........+:;4faaafqq<06aafi$@.....",
-"....+@@#&:##%@@@@#$#@+.........+$')][8}!;;-=){}!=#+........@,4haaaagenno0fa65$+.....",
-"...++@@$$:##@@+@@%##++........+@:=)][7]3-,,*=~]!'@+.......+%;50aaaaqo44|91a6^#+.....",
-"....+@%#&&$%@+@++@@@+.........++$')][8_d,,**'=)=$@+.......+@-4haaaa<44b|49hi-%+.....",
-"....++@#$&$%@@++@++@+.........+@$*=]/8_~,,*&****#+........+@,d9aaaaq44|;|dd;$+......",
-"....++@#&&$%+@@++++............+&*=][8_d,,*:&$#@++.........@,d9aaaato4|;,:$#%+......",
-"...+++@#$&$#%@@+++++...........@$&'!_2}^b-,:$$#%+..........@:,46aaap<n4;,&$%%.......",
-".....++##$$##%@++++.+..........+@$&~](_{!b>&:$#@++.........+%,;0aaafp<n;;:$#++......",
-"...+.++@##$$##%@+++..+........+@%$$){]__}!;*:##@@+........+%#:,efaaaapn|;:$#@+......",
-"....+.+@@##$$##+@+++...........+@#$-3!{i_!d-':##++.........+#$,o<gjfsptn4;:$@+......",
-"....+++@@@##$###@+++...........@@#$,>3!](]^~;,&$@+.........@#$,49<gasarte4,:#@......",
-"....+.+++@@#$#$##@@+++.........+%#&*,-d5}}i]~>:##@+........+%:,|4oqrasfjtn;:$@+.....",
-"....++@@@%%$#$#$#@@++.........+@$$:,->35]}}}!)-*$@+.......+%:,|4onqrjsssg<o|,%@.....",
-"....++@@%%%#%#$#$###++.........+$*=>;|!!!5i_}^!)*#@........@*|onetppgrjssfpe|$%.....",
-"...+++%%%#%#%#$$$###@++........@:'>33!ddd^}((}]~=#%+.......%;^e0<pqttraasaag5:%+....",
-"....+@@%#######$$$$#@+.........@&=>d!!^!!5}(_(_^=$++.......%-59qgfrgpraaaaaf5:%+....",
-"....+@@%####$$$$$$$#++.+.......+$*=~{}i]]_(/((_{-$++.......@:d50fajjasaaaaaf5:@+....",
-"....+++##$$#$$$$$$##@+.........+$&'~{_(_((/(/_}!=#@........+*;^1aaaaaaaaaaa65:%.....",
-"....+++@#$$$##$$####@+.........+#&:){____}__}]]3'#+........+$,|hfaaaaaaaaaa14$@.....",
-".....++@@@@#%#@%@%%++...........+#$'=)333~33)))'&@+.........@$:4ih00hq000hh^-%+.....",
-".......++++++++@+++++............+@#$&:&*:*::&&$@+...........@#$,';;|;|;;,,&%+......",
-"..........+.+++.+.................++@@######@@+++.............+@@%$$$$$$%%@%+.......",
-"..............+..+..................++.@++@+@++.................+++@@@@%%++.........",
-"..........+.+.........................++@+++......................++@+++............",
-"..........+.++++....................+@@@###@++..................@%##$$$%%+..........",
-".......++++++++++++...............+@%#$&:$$&$%++..............+@#$*,;,,,&#@+........",
-"........++++++++++..+............++@$$:*****$$@++............+%#:,;|||||,:%@+.......",
-"....+.++@@@@@%%@@+++............++%:=>===>>=':&#+...........+%%;o99599994;,$@.......",
-".....++@#$##@#%##%@++...........+%#=!}{~3~~{~)=*#+..........+#:i6sf1q1gf1h5d:+......",
-"....+.+%$&$$##$$##%@+..........+@#&~(7/}!{]_]!~=:+.........+@$,1aaaagfaaa6qi'@......",
-".....++#&&$####$###%++.........+@$*{[8/]!]]_]{~):@.........+#*|faaaapfaaafgh;@......",
-"....++@#$:$##%####%@+..........+$&'{/8({3~!{!~~=:@.........+:;!6aaa6<166610i;#......",
-"....+@@#$&$%@@@%%%%@+..........+$'=]/8_~>>33333=&+.........@,49aaaaqne<0100i-@......",
-"..+.@+@$$&$@@@@@@%%@@.........+@:')]/7]3->==)))=&+........+%;^eaaaaqo999hhh5,+......",
-"....+@+#$&$#@#@@+@+++.........++&*'{(7({)b>=''*&#+........+@,|5faaaf<<n54^d-$+......",
-"...+++@#$&$##%@@++++..........+@#$'!(7(]^~=*:$$%+.........+@$,46aaaagq9|b,:$+.......",
-"....+++#$&&$##@+++............+@#$*!_7[}{!=*$$@++.........+#:,|gaaaafq9|,:%@+.......",
-"...++++#$&$$##@@++++..........+%$:'{_7/(]!)*:$@@+.........+%:;4gaaasage|;:%%+.......",
-"....+@@#$&$$$#@@+.............+@$*-{_2/(i!)=:#++..........%#,|5faaaajg<5;:@+........",
-"...++@+#$&$$##%@@+++..........+%:,={(7/_]!3=*&%++.........+#;49faaaaa605|,#%+.......",
-"...++%##$$$#%%@+@+.+.........+@@')~]_/}{~)>,:$%@+........+@%4etaaas6q<94;:#@+.......",
-"...+@###$##%@@@++++...........+#=~{]}}{~;-':$##+++........%$i0faaafpeo4;,&$@@+......",
-"...++##$###@@@+++.+++.........@#={}}_i!;-,::&#$%@+........%$9fassjpeo4|;,::#@+......",
-"...+@%#$$$##+@@@@%@++.........+#=~{}}}!b,,,,->='$+........+$51aaaap<4444o994,@......",
-"....@%###$%%@@@@%#$%@+........+@'3!{__!)->->3!{~'@+.......@#406aaag<onnn<ga14#+.....",
-"...+++@#$&#%@@@%%$$$@+........+%:=3]}/{|--;3!_[]>#+.......+#;90faag<one06aaa9$+.....",
-"....@@@%#$#%@#%###$%@..........+:*=~{_{~;33!!{}!=@+........@,d51fsfte<<g6aa6i%+.....",
-".....++@@###%####%#@++.........+#$*>~!!!~!!!{!!):@+........+$,d91fgp1g66666h;#+.....",
-".....++@@@@######%@@+.+.........@@$*>33!{{{]{3='&++.........@#*|9006fffaf094,%+.....",
-".......+@@%%%%%%%@@++...........+@+:'=))~~~33=':#@..........+@@;49h<011009^;$@......",
-"......+.+++@@@@@++++.............+@#&:*'''==':&$++...........+@$,;d44555!;,*@+......",
-".........++.++.+++.................++@###$###@+++..............+@#$$:::$$%@++.......",
-".............+...+..................+++@+@@@@@+.................++@@%%##%%+.........",
-"...............+.......................++++++.+....................++++++.+.........",
-"..........+...........................+.+.........................+.+...............",
-"........+..++.......................+@+@@++.....................@@%%@@+.............",
-"........+++.++.+..................+@@$##$@@++.................+@#:$*:#%++...........",
-"......+.+.+++++...................+@$#&&$$#@+.................+#::,,,:$#@...........",
-".......+@@@#@@++++...............+@#*,=d3=:#@@...............+@:|4n<q5;$%@..........",
-"......+++@##$#%++................@@:'=!{_!>&$@++.............@#;491aap9,:#@+........",
-".....++@@%$&&$@++++.............+@#')3_28_3&&$@+............+@$4eqsaaaq;,:%+........",
-"......++%#$$&$$@@+.+............+@%,)!}/8({;,$%%+...........+#$4hgaaaage4,##@.......",
-"....+.+@@#$$&$$#%@++............@%#-b!_/7(}!b,#%@+..........@#:o<gaaaaag<4:#@+......",
-".....++@@##$$$$$#@+++...........@#$=)!]/[/_}!>&$@+..........%$:5egaaaaaapn,:#@......",
-".....+.@%##$&$$##@@+++..........+##=3^]([[(_{),:$@+.........@$:5qgjaaaaaf<4;:%+.....",
-"...+.++@##$$$$$$$#%@+.+........+%%&;~^i(((((}!d=&#@+.......+#$,nqrfsaaasagqo;$#+....",
-"....+++@%###$$$$$###@++........+%#&-~^i}(((_(i!~,$@+.......+#:,ntrjsssaasffq4:%@....",
-".....++@###$$$$$$$##@++........+%$:>~5]9((9/}}}!>&#@+......+%:;9qrjasasaasa69;$%+...",
-"....++@@#$$#$$#$#$$#%@++.......+#$,b!]__h(}_}_(]3-&%+......+$,4<gjssassassaj0o;$+...",
-"....+++%#$$&$$$#$$$$#@+++......+#:,)]_9//9_^_(/}!>*$@......%:;4<jssaassraaaap9|:%...",
-"....+@@%#$$$$$###$&$#%@+......+@$*;di(///(_^i/2_{)'&@+....+%*|nqfsaaassrfaaafe4,#+..",
-"..+.+@%#$&&&&$$$$#$$#@@++.....++:->{_[077h9_(_(_!)-$%.....+@;5efsaaaaasssaaa6<5,%...",
-"...++@%$$&&&*$$$$$$##@@++......@:>3_[8788[/9//h}!3=&@......@;90saaaaaaasaaaa60i-%...",
-"....+@@$$*&&&&$$$$#$#%@+......+@:=~}[78787/h__}]!3=:%.....+#;91saaaaaaaasaaa605;#...",
-"....@@@#$$&&&$####@@@+@+.......+:,>!_h[h[9]^!!33=':#+......%,4ngsaaaasjgrp0<94;:+...",
-"...+.++@#$##$##@@@@@+++........@#$*3!}}}_^!;>--,:$#@+......@$,|0gassarqenoo4;,:@+...",
-".....+++@####%@++++++.+........+@##-)!!{]d>*&&$##%@+.......+#$:o<ggffqe|;-::$#%+....",
-".....++@%@###@@++++.............@%$,)d!!!),$&##%@+..........@$:4eq1gf<4,,::%%+......",
-"......++@@@%#@+++.+.+...........+@%:=)b~~>*$#%%+++..........+@%>ih<109|:$##@++......",
-".......+@@%%%@@..+...............+@:'=))3=:@@@+..............@#;49hh05;#%@+.........",
-"......+++++@++++.................++$&**'':$@++...............+@*-dd44;:%++..........",
-"........++++++.....................+#$#$##++...................@$:::*$++............",
-".....................................@+++........................@+++...............",
-"....................................................................................",
-"....................................................................................",
-"..........+.+.+.....................++@+@+@+++..................++@@@@@@++..........",
-".......+++++++++++................+@##$$&$&$#@+...............+#$*:,,,,,:%@.........",
-".......+++++@@@@++++.............++$:*'''-'':&%@+............+@:;d44^544;,#%+.......",
-".....+.+@@%@@@@%+++..............@#&'=>>>=>)'*$@+............@$-^59e999h^d*#@.......",
-".....++@@#%######%@@+...........+%$'=33!!{{{!)'*#+..........@$*49111gffagh4;$+......",
-".....++@%####$$&$%@++...........@#:>~{{{{_([]!='$+..........@:;90fffaaaaa694,+......",
-"....+++%###$#&&&&$#@++..........%$:)!]}_}[78[]~=&@..........#:;h6asaaaaaaa1i-%......",
-".....++@%#####$&$#%@+...........+$&')~!{!]/[({~=*@+.........@:,5h0gfgaaaaf19;#+.....",
-".....+++@@%%%##$###@@+..........@%$*=>bdd^](]{~>:@+.........%$*|oe<ttrfaag09;@+.....",
-".....+++++@@%%####%@+..........+@#$&*,->;d!]{!3=*++........+@$:;|4onntgjjg19|@+.....",
-"...+..++@%%#%#$$###@++.........++##*->bd~]i(}!~>:%+........+%$:|oe<tprjaag19;#+.....",
-"....+++@%###$$$&$#%@+.+........+@#&-b!!]5_([({~=:++........+%$,o<ppfjaaaaf19;@+.....",
-".....++@%#$$$$&&$##@++.........+##&=~{_(/[77/]~=:%+........@#:,91faaaaaaaa1i;#+.....",
-"...+++@%#$#$$$$$$#@@+.........+@$&,~]___(_(/]!)'$+........+@:;4tfaassaaaage4,@......",
-"....+@@#$&$#####%@@++.........++$'>^_2(}!{{{~>':#+........+%,49faaaafgff1e4;$+......",
-"..+.+@%$$&$$@%@@@@++..........@%*>3_[7(5dd)>='$$@+........@#|nqaaaarq<<e5!,*%+......",
-"...+@%#$$&$#%@@@+++.+.........+#*3!_/7_!b;>-*:#@++........+$d06aaaap<eno|;:#@+......",
-"...+@%#$$$#@%@@@+++..+........@#-~{_/({3>--,:&$%++........@$50faaajqnoo4;,:#@+......",
-"....@##$#$#%+@++++++..........+%=!}}]_!;,**:$##%@.........%$i6saaape4||;,:$%%.......",
-"...+@%#####%@+@+++++..........+#=~{}]]!;,:**::$#+.........+$51aaafgn4|||;;,$@.......",
-"....+@%##$#@@%@%%@@@+.........++*=~!]}!b-;;))=)=&+........+@d90paap<onnee9h5-+......",
-"..+.+@@#$##@@%%#####+.........@@&*=!]}!)->3~!!!3*+........%@-|91aa6<on016660d@......",
-"....+++@#$#%@@%#####++.........+$:,3{_!)-)~{{!]~*@.........%:;40far<o<tfffa1d@......",
-"....+++@@#%%#%##%#@@+..........+@$&=3!~db3!{~!3=&+.........+#:;n061q<16f6609-+......",
-"......++@@@#%####@@@+...........@@#*-)3~~!!{~)=*$+..........@#$|5e0116661h9d:+......",
-"......++@@@%##@##@+++...........++%$*-)~!!~!~=*&@+..........+@%,|oe161660id'#+......",
-".....+..++@@+@@@++++.............+@#$:*'==)='*$#@............+%$:;do5999^d:$@.......",
-"........+.+++@++++................++@#$$::&&$$@...............+@#$:,;;'-::#+........",
-"...........+...+....................++@@+@@@+++.................+@@@%%##@++.........",
-".............+..+.....................+++++++.....................+++++++...........",
-"....................................................................................",
-"........++++++...+.................++###$%+@++.................+@$:$:$@@++..........",
-".......++++@@+@+...................$:*'==':#@++................:;d^i94;*#@+.........",
-".......@@#%%#@@++++...............+:=3~~!)':$#@++.............+;i0q16h4;:$%++.......",
-".......+@@####%@++.+..............+*=3~!{~),*$@@+.............@;9016f0e4|,##+.......",
-"......++@@@#%###@@++.............++&'=)~~!!~)-&#@+...........++-!5h16g6peo,:%+......",
-"........++@@%##$$%++++...........++%&*=)~!}_{;*&#@+..........+@$,|9eqgaafe|,$#+.....",
-"......++++@@@#$$##@++............+%#$&==){_/}~-*&@+..........+%$:,o9<6aaaqo|,%@.....",
-".......+++@@%%#$###%@++..........@@#$:,-;~^_]{{),$%+.........%#$,;4oeqraaff<4:#@....",
-"....++.++++@@@#$#$$#%++.........+@@$$:,-;)!5]}(!)&%@........+@#:,;4on<prjsafe,#@....",
-"......++++@@@%@##$&$@+++........++##$&,--bb!i([_):#@+.......+%$:,;4oo<<gjaaa0;:#+...",
-".....+++%%%#%##$$&&&%++.........@%$')3ddd^^}(28/~:$@+.......@#:4e<tttrraaaaaq;:%+...",
-"....+.+%#$$##$$$&&*&#@++.......+@#:){_}]]}(([7x[!,##+......+#:;hfaaajasaaaaap4:$@...",
-"....+++#$&$$$$$$&**&#++++.....++#$*!_7/(_(/[7ym7{,$#@.....++$,|paaaasaaaaavaf4:$@...",
-"..+.+@@#$$$#%#$#$$*&#@+.......+@&'>{(/(i4]i}h7y[!,$#++....+%,4e6aaajrjjsaaaap4,$@+..",
-"....@%%#$$$#@#%##$&$%++++.....+@*)3](/]!bdd!](8/!:&#@+....+#de1aaaagetqpfaaag|,$@+..",
-"..++@###$$#@@@@@#$&$#@++......@#=~]](_{b>--;~_2_d*&#++....%$51aaaag<nnnnpaaa<|,*%+..",
-"....@#$#$$#%@+@@##&##+++......+#=~}]__!;---;4}2_!:$#++....+$91aaaageooonpaaa1|:$@+..",
-"...++####$#@@@@@%$&$%@+.+.....+#=!]}]}!b,---~}7(d*$%@.....@$i6aaasp<4oooqaaat|,%@...",
-"...+@#$###%@@+@+#$&$%++.......+#=!}]]]3;-,,,!i7_~:$@+.....@$96aaaaqeo4o4paaa0;:#@...",
-"...++@#$#$#@@@@%%$&$#+++......+#'3{]]]!;,--;!_2_d:#%+.....+$^1ffaate4onnpaaat;:#+...",
-"....@@@#$$#%@@@@#$&#%+++......++:=3{}_{b-;;)!_2_3&#%+.....+@;50fsaf<one<gaaa0,$#+...",
-"..+.++@@$&#%@@###$$$@+........+@$&'~_[]3-;~~]_[]>$%+......+@:;41aaftneq1faaae,%@....",
-"....+++%#$#%@%%#%#$#@++........+#&*3]_{~-3d!!]_{>#@+.......@$,d0aafqn<qg6aaf9*@+....",
-".....++@@#@#%@####@@@..........+@$$'3!3d33!!!~3=:%@+.......+%:,^0g1<0qg6610i;%%+....",
-"......+++%@##%##@@+++.+.........+@#&'>)~~~!!3=*&#++.........+@$;49h1111609|,$@+.....",
-"....+..+@+@@%%@#@@+.............+++$:*>)~~3~='#@@++.........+@@&;|9h10119|:##++.....",
-"........+++@@@+@++++.............++@#&:*'''':$%@+............++#:,;|^44!;:#@+.......",
-".........+++.++.+..................+@@#$##$##@++...............+@#$:::::$@@+........",
-".............+...+...................+++@+@+++...................++@@@@@%+..........",
-".......................................+++.+.......................+++.+............",
-"....................................................................................",
-".......++++++++++++++.............+@#$#$$$&$#$##@+............+%$&*,,,,,*::$%+......",
-".......++@@@@@@@+@++++...........+@$:'===''=''':#@+..........+#,;4^55^45444;:%+.....",
-".....+++@@%%%%@%%@@@+++.........+@$*=>)333)3>)==:$@+........+#*d9ee0<0<0hh95;*#+....",
-".....++@######%#%#%@+++.........@#&=~{~!!~~!3!3)':#+........@$,i1f661111111h^;$@....",
-".....++%$&$######$#$%@++........+#:~_2(]{{{{{]]{)':#........@$;1aaaafffffaafh4;$....",
-"....++@#&*&$#$###$$#%@++........#$*{[x7(]]{{]_/]~=*$........$*dfavaaajffaaaa09d:....",
-".....++#$'&$####$##$#@++........@$*]2x7/]]]{]]}]~=*#........%:daaaaajajfaaaa1id:....",
-".....++%$&$$##%@#%%@@@++........+#&~_7/}^!~3~~~)='&#........@$'6aaasrg1<01109d-$....",
-"....+.+@#$$##%%@+@@++++.........@@&)]/}]!bb-'==**&$+........%%,haasap<<oo55d)-:@....",
-".....++@#$###@%@+++++++.........@@$>{_{!!3>*::&&$$#+........%#:9faffg<n|;;;,,:$@....",
-".......@@@##$#@+@++++...........+@@')~{i}!;:*$$$#@@.........+@#4h1ffape|b,::$#@.....",
-".....+.+@@##$#%++++.+............@@:')!]/!)::$#@@+...........@#;^e6aa6e;;,$%@+......",
-"......++@+%#&$@+++.+.............+@#:*~][];:$$#@+............+@&;41aar<;,:$#%.......",
-"........+@%#$#%@+++.+.............+#$*3{_{3,:$#@@.............+$:|06a6<4;,$@@.......",
-"........++@###%@@++...............++%$=!]{)>'$#@+.............+@$&96af<n4,$#+.......",
-".........++###%@@+++...............@@#=~]!3>':#@+..............@#$51a6094;$#+.......",
-"........+++@%%##@@.+...............+%#:=)~~!)*#%+..............+#$;900gg<|$#@.......",
-"..........++@@#$%@+.+...............+@$:'3{]~=#%@+..............+#:;406a15$#@+......",
-".........+.++@#$#@++................+@%$$>{/{=##++..............+@$:,efafn:$@+......",
-"..........+.+@#$#%+++................+@#$={_{~:&#+...............+%$:9faf0|,$+......",
-"...........++@%$##%@+................+@##=~_{~)'$+...............+%$$51aj0h^*@......",
-"............++%##%#@++................+@#'3]{~~=:@................+%$40af609;@......",
-"..........+..+@%%%#%+.................++@:=~~~!3:+................++#)i11160;@......",
-"............+++@%%#%@..................++$:')~!3'+.................+@:;^h160d@......",
-"..............+++%##++..................++#$'3]~*@..................+@$:^0agd@......",
-"...............++@%@+....................++@:=3=&+...................+@#)i09=+......",
-"................+++++......................+$&*&#......................+:'d'$.......",
-".............................................++..........................++.........",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"...............+.......................+++++++.....................+++@+++..........",
-"............+++..+...................+++@@%@+@++.................+@@%#%#@@@+........",
-".........++++++@+++................++%$&:::*$$%@+..............+@#*,;;;|,:$%@.......",
-".......+++@@@@@@@++++.............+@#$*'>>=>=*&$%++...........+@$:|^99995|,:#@+.....",
-"........++@%##%#%@@+++...........++@$:=)~~~~3>::$@+..........+@#*;5e11gq09|;:%@.....",
-"......++@%%%%%#%%#%@@.+..........+@:=)33~~~~dd~>*#@+.........+%;90011qq1tt19|$%@....",
-"......+@####%%#%##$#@++.........++#=!]{!3~d3!{}!>&%@........+@$56afg<qqqgfs69,#@....",
-".....++%#&$#%%%%#$&$#+++........+%#3]2}!3bdd{(7_d:#@+.......+#$0aaag<<<<faaaq;:#+...",
-"......+#$&$#%#%%#$&$@++.........+@$~(7_!dddd^(7_3*$@+.......+%:1aaagttttraaa0;:%@...",
-".....++#$&$#@%%%#$&&#++++.......+#$~/8(^)bbb](7/!:##@.......@$*1aaag<<<<raaap|:$%...",
-".....+.#$*$#%%%@#$&$#++.+.......@#$!/c(5bbb;^(8(!,$%@+......@$,6aaar<<<<paaap4:$@+..",
-".....++@#&$$%####&&$#@++.......++#&3(7_i~!!!}[2/!,$#@+.....+%$,0aaarptppsaaap4,$#+..",
-"...+.++%#$$$$$$&$&&$%@++.......++#&3]/(_(9(h/07_d-$#++.....+@$,0aaasssaaaaaaq4,$@+..",
-".....++@##$$&&&&&&&$#++++......+@$&=~](h[788877(~,*#%+.....+#:,91asaaaaaaaaat4;:#+..",
-".....++@##$&&&*&*&&$#+++.+.....+@#$=!{/2878887[(4*&$@+.....+#$,9qaaaaaaaaaasp4,:#+..",
-"....+++@#$$$&&$$$&&$#@+++......+%#&3!((/7[[//[7_!-&#%+.....+%:,<fsaaaaaaaaaapo;:%@..",
-".....++%$$&&&&$$$$&$#@++.......+%$$~}[0[2h(9(h7_!-*$@@.....+#:,qsaaaaasssaaspo;:%@..",
-"....+++%$&$&$$##$$&$#@+++......+%#:d}[/0[(i^}/[(!>*$@+.....+#:;qaaaaasjrsaaagn|,%+..",
-".....++%$&$$###%##$##%@++......+%$&~_7(}i^!d^i(}!;,&@+.....+#:;qaaaajrptgfaage4,#+..",
-"...+.++%$&$#%%%%%#$$#%+++......+@%:~(7(^ddb|~^_i!)=&#+.....+%$;1aasrtt<<praag<o;$@..",
-".....++#$&$#@@@@%####%@++......+%#:!/7_!--;-d^]{!);:%@.....+#$;6aaapnnnntpffg09;#@..",
-"...+.++#$&$%@@@@%#$$#@@+.......+%#$~_8}db-;-d{/_!)=&@+.....+%:,0aaatennoqjaa6eo-%+..",
-".....++@$&$#@%@@%$&$#@@++.......@%$~_7_!;>;-d}2/!='&++......@#,1aaapennotaaa694-@+..",
-"......+%$&$%@@@@%#&$#@++........@@$~_2_~;--,~}7/{>*$@.......%#:0aasteno4qaaaf9d:%...",
-"......++####@%@@##$#%@++........++%=~]!~bb;;~{_{)*$@+.......+@#51a61<<eeq6afhd,#+...",
-"....+..+@@%@#%%%%%%%+++.........++@:=)33~33)~~~3'$#@........++#;ih<0t0<0q110^,$@....",
-".......+++@@%###%%@@+.+...........+#$&=)3~~~3)='&@@+..........+$,;5h01010h94,#@+....",
-".........++@@@+@@++++.............++%#:'>====*'&#@+...........+%%:;495i95dd-$@+.....",
-"........+.++++++++++...............+@@#$:&&&&$##.+.............+%#$*;--,,::$++......",
-".............+.+.......................@+@+@++++..................+@@#@#@@++........",
-".................+......................++++++......................++++++..........",
-"............++.+......................++@@@@+++...................++@@@%+++.........",
-"..........+...+.+...................++++@@@@@+++................++%@#####%@+........",
-"........+.++@+@@@++++..............++@$:'*''*&$#++.............+@#:;dd44|,:$@+......",
-"........+++%%@@@@@+++.............+@%#*=))))>*:&%@+...........@@#$|5<hhh9d;,$@+.....",
-"......+.++@%%####@@+++...........+@@$$'3~~~~3>,:&@++.........+@#:,4<11110n4;,#@+....",
-".....+++@@%%%%%@%@#%@+++........+@%:=)33~~~333~)'&%@........+%#;5<001q1<q11e4,$@....",
-"......++#$###%%%%$##@++.........+@#'!]!!~3))~{]{>:$@+.......+%:5gffgqq<<0fafe;:#+...",
-"....+.+%#$$#%%@%#$$$%@++.......+@%&)]/_{dd;;!_/_3'&#+......+%%,haaafq<eegsaa14,:@...",
-".....++@$$##%%%@@#$##@+++......+@#&3}/]!3);>3{(]!-*$@+.....+@:,qaaap<ennqfaa15|:@+..",
-"...++++##&#%@@@@%#$#%%@+.......+%$&~}[]d;;--b{}{~)-$@+.....+#:,1saaqenoo<faf1e5,#+..",
-".....++@$&##@@@@@%###%@++......+@$&3_[]d----)~{]~)=:%+.....%#:;qaaftooooeqafg09;%@..",
-"...+.+@#$&$%@@@@%#$##@%+++....+@#&*!_7}d-;-,b!]]!3>:%@....+@$,|1aaatnnoo<gafg09;#@..",
-"....+++#$&$#@@@@@#$###@@.......@%#:!(7}4-;--b!_]!3>:#+.....@$:bgaajponno<gsag<9;$+..",
-"....+++#$&$@@@@@%##$#@@++.....+@$$:^/7_~-;>;d!_}!3=:@+....+@::|gaaspnnnntgaa609;#@..",
-"...+.++#$&$$#%#%#$$##%+++......@%$*!/8/5d|db!}/}!)'$%+.....%$,b6aaarttt<gaaage4,#+..",
-"....+++#&&&$$###$$&$%@++.......@##:^[82h}]5]}([_~=*$@+.....@$:|gaaaasjrjaaaa19|:@+..",
-".....++#$*&&$$&$$&&$#@++.......+%$:![c8[(//([[7_!'&%+......+#:;gaaaaaaaaaaaag4,$+...",
-"....+++%$&&&&$$#$$$#@+++.......+@#:~(772[//}_((]):$@+......+%:;1aaaaaaaaaaaah;*#+...",
-"......+%#$$$&$###%#@@+.........+@##){_([[(]!!!~)'$@@.......+%$:efaaaasap16104,%@....",
-"....+++@%#$$$$#+@@@+++.+........@#$-d{}(/}4--='*$#++........@$:oqfsaaapnoo4|*$%+....",
-".......+@@#$$$#@@+++++..........++#*>d]_[i!>-:&$#@@+........+@$d9qfaafgno|;::#@+....",
-"......++@@##$##%%@++.............@@&*-!5_]!d),&$#+++.........@#,|5gjaarqe4;&$@++....",
-".......+++@#$$$#%@++++...........+@#$&){(_}{d-&#%%+..........+@$,;hfaaafqo,:##+.....",
-"........+.@%#####@++..+...........+@##=~}]]]!>:$@++...........+@$:n1aaaa1n;:#%+.....",
-".......+.++@%###%@@@+..............@@#:=3~!{~>=*$@.............%#$)5016f1eod:@......",
-".........++++@@##%%@+...............+%$$:=)~~33=$+..............+%:,;5e1100i,@......",
-".............+@@@%%@++...............++@%:=3)~3=*@...............+%%$;i00109;@......",
-"...........++++@@+@++.................+@@$:'''':#+................+@#:>^!^!;$+......",
-"...............+++++...................+++@##$#@+..................++@#$&:$#+.......",
-"..........................................+++.+.......................@++++.........",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-".........................................++++........................++@+...........",
-".............++++......................++@$$#+.....................+@%*:$@..........",
-"..........++++@%@@....................@#&*=3-*++..................@:,d905;@+........",
-"..........++@%##%@+...................#&')!]~'@+..................$-4h6a1^%@........",
-"..........+@+##&#@.+.................+$:'~]/{>#@+................+*;^1aaf9$%@.......",
-"...........+@%$&$@++.................+#&'3}2]=$%@................+$'d0aaa9:#@.......",
-"..........+++%#&$@+++................+@#&3]2]3$#%+...............+%:-uaaa0,$#@......",
-"...........++@$&#@+.+...............+@@#$)}7]3:#%@..............%%#$*0aaa0;&#@......",
-"........+.+.+@#$$#@+++..............++%#&)]/]3-:#@+.............+@#:,haaaqo;:@@.....",
-"........+.+++@#$#%%+++............++%%#$$=!_{~)'&%@...........++#%$:,n6a61e4;#@.....",
-".......+.++++@@###%%++............+@@##&&>3]!!3>:%++..........+%%$:,,91af609;%@+....",
-".......++++@@@%%%#%#+++..........+@$$**''=3~~!~3'#@+.........@@*,||44n011g604$@+....",
-"....+.++@%@@@@@%#%$%@+..........@@@:=>=>>>=)~!]~-#@++.......@%%;59nn9n9eq6a15*#@+...",
-".....+++%#%%#@@+%#$#@+++.......+@%#')~3)3;-,3!_!>&#@+......+##:4egq<0eo4<ga69,$@+...",
-"...++++@%#%@@@@@%%$#@++.......+@#:*=~!d)=--*)!_{):#@++....+@:;|9110enoo4e6afe;$#@+..",
-"....@@%%%##@@@+@%%$#%++++....++%:=)3~!~;--,,b~_{>:$#@+...+%%;5e01gqeoo44<gafe;:$%@..",
-"..+++%%###@@+@@+@#$#%+++.+...+%#'3~!!!)>,,,')!_{):&#%@+..+%$400gg6<n4444egafe|,:#%+.",
-"..++@######%@@@%##$$#%@@+++..+@$=!]]{^~;>--;!]/}^)=,:$#..+#,96aafgqennnepaaag<54;,$.",
-"..++%$&$###%%%###$&&$$#%%@+..+$:~}[_]!!~)d!!]/2[_}{3)'&+.%:;1aaajfgt<<pgaaaaaaf1e4,@",
-"..+@#&&&$#####$$$&&&&&&#%%@.+@$*{[8[_!!!!{}(/28777[]~)*%+#:dfaaasg6pgfaaaaaaaaaa1hd#",
-".+++#$&###%%@###$$$&$$$##@++.@$*~/7}!!~dd!{]__////}]~=:%.#:|6aaaf1qq0g6aaaaaaaaa19;%",
-"...+@#$#@@@@@+@@@#%#@#@@@@+..+#:){_!)=>--=)>3~~~~~3)>'&+.@$;h6a6<59o59eh0011110h9^-@",
-".+++@%%@@+++++++++++@++@+++..@#$'3~=-&$$$&$&::*:*****:$+.%$:50094;,,,-,,);d;ddddd;*+",
-"...++@@++++++++++++.+++++++..+@#:=>*&$$##$#%##$#$#$&&$@..+#$>i9d,::$$:$$$:*$:&:--:#.",
-"....+++++........+.+.+..+.....+@$&:$#@@%@+@%@%@@@%@@@@@...+#*-;,$###%@#%#%%#%##%##@.",
-".....+..+.+.+.+.......+.........+@%+@@++++++++@+++@+........+#%%@@++++++++@+%+@+....",
-"...................................................+...........................+....",
-"....................................................................................",
-"....................................................................................",
-"...........+..+.......................+@@++.......................@@#@+.............",
-"..........++@+......................+@#$:$@+....................+@$,;:#+............",
-"........+.++@++.+..................++%&*=:#++..................+@#-d5;:@+...........",
-"........++@@%@@....................@&:'=)':@++.................#,;49h^-@@+..........",
-".......+@@%%#@@++.................+$'>3~!)*#@++...............+,^90g6e|$%@+.........",
-".......@###$##@.+++...............+'3!{]]~-##%++..............+d0w6aa1o:$#@+........",
-".......+@%#$#%%@++..+.............+&)~{]]~)':$@++.............+;h6faa1h4;:%@+.......",
-".......+@@@%###%@+++..............+&*=3~{{!~;*$%++............+-di01ffgge|:#@+......",
-"........++@%##$$#@++...............+#&=3~{}_!>##@+.............@$'506faa69:$@@......",
-"..........+@%%$$#%++++.............++@*=~!_({)*&#%+............+@#d916aafh|,:#@.....",
-"........++++@@%####@+++............+@@&*=)~{~!~)*$#+...........+@#,d5h0fgg1ed:$+....",
-"..........+++@@@%#$#%@.+............+@#&:'=)~{_!):#@............@@$,)49e16afe;:%....",
-"..........+++++@%#&$%+++............++@#$&*'~]/_~*&#+...........+@%$:,|^1aaa1d,$+...",
-"............++++%#&##@+.............++@%$$:*3][}~'$@+...........++%$:,;40aaa04,#+...",
-".........+++++@@%#&$%@++.............+@#$$:,3]/_~':#+............@@$:,;4<aaa1^;$+...",
-"............++++@#$$%@++.............+@@#$**)]/}~'$#+............+#%:,b|0aaa04,$+...",
-"..........+++@@#%%##+++.............++#$&'=3~~{~=:#+............++$:,4n006f1i;:@....",
-"........+.+++@###%@@+++.............+@#$,)~{!3==:#%+............+#&,4e1f6095;:#+....",
-".........++@@@#$#@+++...............@@&*'3{}!):$#@@.............@%,|40fa6h;-$@%.....",
-".........++@##@#@@++.+.............+@$')!!~!)'&#%++............@#:^h666604,$#@+.....",
-".......+++%#$#%@++++...............%$&){}{~='$$@@+.............#*;hfa619!,:%%+......",
-".......++@%$&$%+++................+#&'~_2})&$#+++.............+$;d6aaah,:$@++.......",
-".......++%###%@+.+.+..............+&')~]}~=&%%@+..............+-^h1aa1i,$#%+........",
-".......+%#%%%@@.+.................+:)!~33=:@@++...............+;h61u05;#%++.........",
-"......++##%@+++..................++'~]~=&&$@+................++^1agi;-:%%...........",
-".......+@#@+++.+...................:=~=*&#+++..................;90id-$@++...........",
-".......++@++.+.....................#&'$$@%+....................$-^,:%#+.............",
-"....................................++++++......................+@++++..............",
-"......................................+...........................+.................",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"...........+..+.+....................+++@+@+@+...................++@@@@@@+..........",
-".......+.+.++.++..+................++@+%@%#%@+@++..............+@@@###$##@@@+.......",
-".......+.++++++@@++++............++%#&&:*****&$#@+...........++#*,,;|||||;*$%+......",
-".....+.+@@@@%%%@@@+++............+@$:===>))3)=*&$+++........++@,;5599e<ue5|;*@++....",
-".....+.+@@#@###$#%@@++.........+@@#:=)33~!{{!3>':%++.......+@#$;500016ff6094;$@+....",
-"....++@@%%@#@######@@+++......++#$*=)3333!{}{!3>':&#+.....++$,|5e<000gfafg094;,$@...",
-"...++@%@%#@%@%$$$##%#@@++.....+@:=3)3~);>~}/}{!33>'&@+....@#;i00uq<en1aaafp0094,%+..",
-"...+@%###%%@+##$$###%#@@.+...+@#=3{!~3)-,~][(]!!~3)*#@+..+%$5166g0eo4qaaaafg11hd$#+.",
-".+.+@###%%@@@%$&$$%###@@++..++@$>!]!~3>-,~}2/}!!!!3'&#+.++#*96a6q<9o4qaaaagggg1^,$@.",
-"..++@#$#@@@++%#&##%%@%#@+++..@$&){]!>--*:3][}!b33~~>*&$+.%:;hfageoob|qaaag<q01<9|;:+",
-".+++%###@++@+%#&$#@%###%@@+++#$*3]]!=::**b][}!>;~!~)>*$%+$:|0aa19||||<faagneq6g<5d,#",
-".++@%$$@@@++@@#$#%@@@%%%%@+.+#$*~]_3-:::*){_]~;b3~~3)=:@%$,d1aa0o;;;;<faaqn<qq10h9;%",
-".++@@$$#+@+++@%######%%%%#@+@$:'3}(!-:&::-~]{!~!~33~~3'#@:;!qaa1o;;;;n1ffg11q<0110^$",
-".++@##$%%+++++%%####%%@#$#++.$*=!]_3;&:&&,)3!!]!d33!]{=#+*|i6aaqn-;;,4e1gfjgq<<6jfi*",
-".+++##$%@@+@+@@@%#$#%%@###@+@$*'~}(~>:&:$,->~!}]d;)!]{>&@:d51aagn;,;,4oeqfsjqe<zaf9,",
-".++@%$$#@++++++@%##$#%%%##@+.%$'~](!-*:$:&,-3{}]!33~{!'$+$:d1aa6n||,;;4oq6aa6q0g66^:",
-"..++%#$#%@++++++%#$$#%#%#%@+.+#&3}/{),*&&&:*b{(_{3~~!~'#.@$-uaafe4|,,,;|<6aa6q<161^$",
-"...+@$$#%@@@++@+@##$##@#%%++.@+$)]_!3-*:&$&:={__{!3~~3*#.%@:haa60o||,,,;9faaf11110d$",
-"...++@#%%@@@@+++@%#####%@@+..++#')!33)>--*::-3!!{{!3)'&+.+@$^h100en5o|;;o066ff60e5-@",
-"....+++@@#%@%@@++@@%%$#%@+.+..++$*'=)3)>)-*$*=>~!}{3**#@..+%:d^ih0h9ho|,|oeqfajud;$@",
-".....+++@%#@#@@++++@#$#@++.....++#$:=~~33>,$&**=!_])&#++...+@$:d9010094,;|d96aah;$%+",
-"...+..+++@+@+++++++@+@%++......+++#&*'''':&$$&&'=))*#++....++@$,d^^^4;'::,,d90hd$@+.",
-".......++++++++++++++++++........+@@$$$$$$$$###$&::$@+.......+@#&*,:,,*:$:$:';;:@+..",
-"...........+...+...+.+.............++++@+@%#@@@@++++...........++@@@@@$$%@#@@%++....",
-".............+.+......................+++++@++++++................++++@%++++++......",
-"...........................................+...........................+............",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-".....................................++.+........................++.+...............",
-".....+.+.++.+.+...............+++@+@@+@+@+@+++............++@@@%@@%@@@@+++..........",
-".+.+++++..+.++.++.+..........++###$%@%%%#%@@@@++.........+@$$::#####$###%@@+........",
-".++++++++++++++.+.+..........%#$$$:&$$##$#$##%@+++.......#$,*,;,:::::::$$#%@++......",
-"..+@+@@@@@@@@@@@@+@+++......+#*'==--,->)))-,***&#@+.....+:|^55oooone<eo4|||,:%+.....",
-"++@%@#%%@%#$$%%%%@@@+++.....@:=))~33)d!]]!33>>>':#@+....@;5h0110<qgfaf10e994;:%+....",
-".@@########$&$$%###@+++.....@*)~!!{{!!}(2(}~!~3)*$#+....#dh0666f6gaaaaa1111hd*$@....",
-".++@@%@%%%#$&$#@@@@@+++.....+&'=)3)3b3](2_!))>>':$%@....@-^ne<<qeqfaaag<e99^;:#@....",
-".+++@@%%@@#$&##@@@@+++......@$$*,-;;>;!_[}!>--,*$#@+....%:,d4onneegaasgnoo4|,:#+....",
-".++++++@@@#$&##++++++++.....+##$$&*,,;!([}d,*:&&$#@++...@$$:,;|44npsaato|;;,:$#@+...",
-"++@+@@@@@@%$&$#@@@@+++++....#$'---,->;^_7_~--,*:$$$@+...$,4ooo4onegaaapoo4|;,::@+...",
-"++#@@@@@@##$&$#@@@@+++++....&'33)--;>b^/29^;-;,,:&&@+...,^01ennne<paasrenno4|;,#+...",
-"+%#$#%@%#%#$&$##@@@@@++++...&){}!3;b|d}(8(^b;->-,*$$@...-06ap<e<<<saaap<enno4|,:%...",
-"+@%#%%@@@##$&$#%@@%@+++.....$=~!33>>)|}/8({b)>>-'*&#+...:i160<ne<<jaaaf<enno4|;$@...",
-"++@%@%@%%@$&&$#@%%+@@@++....$*=3>>>)b3]/7(^);>,=,*&#+...*d9099ne<<saaapee9o54d-$+...",
-".++@+@@@%%#$&$#@@@@@+@++....@&*'',->;3{/7_!;;=-'**&#+...#'d^4o5ne<faaageeoo4d|,$+...",
-".+++@@+@@@#$&$#%@@+++++.....+#$:*',-=;{_7_!>--**:&$++...+$,>|44o9nfaaapnood|;,*%+...",
-"..+.++++@@#$&#%+@+++++.+.....@@#$&&:,-!_2]~**:$$##@+.....@#$*-;;4opaaa0||;,:$$%+....",
-".....+++++%#&#%++++...........++@@#$$&~][]>:&##@++........+@#%$,,;1aaae;,:$#@+......",
-".......+++%$&#%++++.+...........@@%#$$3}[]>$&##@+...........@%%$:,0aafe,,$$@@.......",
-".....+.+.+@#$#@+.+...............+@##&3]/{;&##+@+............+%$:,0aafe,:$@%+.......",
-".......+++%$$#%++++..............+.###3]/{>&##@+.............++%$:<aaf9,:$@+........",
-".........+@#&#@++.................+@#$)][{>&$%++..............+#$:haage,:#%+........",
-".......+.+%#&$%++++...............++@#)]2]3:$#@+..............+@%$haaa<;,$%+........",
-"........++@$&##@++.................+%#)]2]~':#+................+#$haaaq^;$+.........",
-"..........@#&#%@++.................++@>]2]~':#+................+@#9aaa0^;:+.........",
-".........+@@#%@++...................+@'=!)'&$@+.................+@d96h^;:@+.........",
-"..........+++++++....................+$&:&$#@+...................+:');:$#+..........",
-".......................................@+@++......................+@@@@+............",
-"............+...........................++.+........................++.+............",
-"....................................................................................",
-".......................................++..........................+%...............",
-"..........++@+......................+@$&:$+.....................@%:-;*@.............",
-".......+++@+@@+....................@#$*'=*#....................%$-d!9;$.............",
-"........++@%%@+....................+$&')3=$....................@*'^h0i'.............",
-"........++@##@+....................@#$=~])&+...................@$:i1a9;+............",
-".........++#$#@....................+@$=!_~*+...................+%*i6agd+............",
-".........+@#$%@.+..................++$=]/~'++..................+@*9aa1^@+...........",
-"........++@#$#@....................+%@={/!'@+..................+##ifa6^@+...........",
-".........+@#&%@....................+%$=]/~'++..................+%*9aa1^@@...........",
-"........+.@#$#@+...................@+#={/!=%++.................@%$iaa65#++..........",
-".......+.+@$$%@.+..................@@#=]/~=@@+.................@#$9aa6i#@+..........",
-".......+.+@#&#@+...................@@$)![!'#++.................@#:9fa6^$@+..........",
-".........+@#&#@++..................@@$=]/!=#@+.................@#:9aa65$#+..........",
-".......+.+@#$#@.+..................+@$=]/{=#%+.................@#*9aaf5$%@..........",
-"........++@#$#@++..................@@$=]/!=##@+................@#:9aaf9$$@+.........",
-".........+@#&#@.++.................@@#){[!>##@+................@#$haa6n:$#+.........",
-"........+++$$#@++.+................+@#=]/!=$#@+................+#$9aa69:$#@.........",
-".........+%%$#@+.+.................+@#)~/{>$#%@+...............+#$96af9,:%@+........",
-"..........@#$#@+++.................++@={}!):&#++...............+@#9fa6e;,&@+........",
-".........+@@###%@++.................@%'3]!3)'$%+................@#!0a60e4,#@........",
-"..........@@@%%#%+++................@+*=)~~!3*$@+...............@%;i01660d:@+.......",
-"..........++@%$$#%+..................+$:'~]/!>#@+................@*;40aa69:#@.......",
-"...........++@%#%@@+.................+@$&=~]~>*$@................+#:)91a19;:%.......",
-"............++@%@@@++.................+@$*=)>=':#.................@%*;ih9i^;$.......",
-"...........+.++++@@@+..................++#$&*=='#..................+@$:-d59^:.......",
-"...............+++@++...................++@#&*=*$...................+%#$-did*.......",
-"................++++......................++@$&$+.....................+@%*-:@.......",
-".............................................++..........................+@.........",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"........................................+.+++.+.....................+.+++.+.........",
-"..........+.++.++..+................+++@+@++@@+@+++.............++@@@%@@@%@@@++.....",
-".......+..+..++.+++.++.............+++%@%####%#@%@++...........++@###$$$$#$##%@+....",
-".......++++@++++++++++++..........+#$:::*:*&*:**::$%@+........+$,;;;|;|;||||;;,$@+..",
-".......+@%%@%%%%%%%%%@@++........++:=)))>););;);>-'&@+.......+@;5eheeeeeeeeen54,#+..",
-".....+.@%############%@+++......+@@')!!!!!!!!!!!~~>*#@+.....+%#406p6gpg1p61ggqe|:%+.",
-"....+.+@###%#%#%#%%####@+.......+@#=!{{~!~!~!~!!^!!-$%+.....@#$56a6611gp1ggggfqo:#@.",
-"......+@#$$%%%%%%#%##$#@+++.....@@#)]_}!bddbddd!]]{>&#@+....@%:hfafg<<<t<ttpfsf9;$@+",
-"....+++%#$$#%%%@%%%%#$$%++.....+%#&3][5!bbbbbdddi(})*$@+...+#$,0aajp<<<<<ttpjaa<|:#+",
-".....++#$$##%#@#%%##$$$%+++....+%#:~_/}!bd;ddd4{}h}b:$@+...@#:;0aaart<<t<ttrsas<|:#@",
-"...+++@@$$$#########$$$%@+.+..+@#&*~}/_i{^^^^^^i(/(d*$%@..+@$,bpsasfprprrrrjsaa<|,#%",
-"....++@##$$$$#$$$$$$$$$#+++...+@#&,!](_}_]i}_(_9//}4,##+..+@:;4qaasssjjjssssaast4:$@",
-"..+.+@+#$$$$$$#$$$$$$$$#@++...+@&'-!_/h(9(_9(9(/(h_~,&#@..+%,4ogsaassssssssaaaap4,$%",
-"...++%###$#$#$$$#$$$$$#@@++...+#')!{}_}___(_(h///_}3;:#@..@$406asssssssssaaaaaaqn|&%",
-"....@#$#$$$#$$#$&$$$$$##%@++..+%={}___9}}9i((h/h_(id>,&@..+$96asassasssssaaassj<n4,%",
-"..++@$$$#$#$##$$$$&$$##@@++...@#)](_}_i__}_9(/[h_i!3>'&+..%$haaassjssjsssaaasjgq94,%",
-"....@@####$##$##$$&$$##%@+++..@%')!{i}i]ii}i_h7h(^!;,&$@..@#4hgffsjjfjjjsaaasrpe4;*@",
-"....+++%$#$#$##$$&&&$%@@++....++$*-35}i]]^]i([8[_d;-:#@+..+@,doqrsfjjrjjaaaasqeo;:@+",
-"...+.++@%$######$$&$$%@++.+....@%$:;!}]^5^5^(/8[i~-*$#++...%%:;egsjrrrrrsaaajto|:$@+",
-"....+++##$####%##$$$##@@+.+....+%#&3](i^{!~45_(({~>*$%+....%#:,<fajrrpppraaafqe|:#+.",
-".....++%#&$#%#%%#####%%++......++#&b][}^d4dd!^i{!~)*#@+....+@$,<sasrttttprjfg0e|:#+.",
-"....++.##&#%%#%%%##%##%@+......+%##3][]~|dbbdd!~~~3'#+.....+%$:0aafptt<<t<p1g104$+..",
-"......+@#$$#%%%@@@@@@@@+........@@$)]_i!dbbb;);>>>'&@+......%#&efajpt<<<<eee994,#+..",
-".....++@#$###%#%@@++++++........+@#>!_{!!~d3>-'**:$#+.......+#$96afgpt<<eo4||;,$+...",
-".......+@##%##%%%@+++.+..........@@'3!{!!!3b),$&#@@+.........%%^0ffgggq<e4,,*#@+....",
-"......++@%#####%@@+++............+@*)3!!]{!3>*$#%@+..........+#|916fafg1n|:$%#@.....",
-".......++@%#$##%@++.+............+@$:-~]({!3>*#@@+...........+@*;o0aaa109|$%%+......",
-"......+.++%$&$##@++...............+@$$3}2({3-&#++.............+#:-0aaaf05;$@+.......",
-".........+@%##@@++.+..............++@$=~{!)-*$@@..............++#:i1a6h5|:%@........",
-".........+++@@+++..................++%&'==:&$@+................+@#'!95d,:#+.........",
-"...........++.++.....................+@%##%@++...................@%#$$%%@+..........",
-"....................................................................................",
-"....................................................................................",
-"...........................................+.+.........................+.+..........",
-"...............+++++.....................++#%$##+....................+@$$::$@.......",
-".............+++++@++..................++##&::':#+.................+@$:,;;4;$+......",
-"...........+++++@@@@+................++@%$&:'=='$+...............+@@#:,;^i9^,@......",
-"........++.+.+@%%@%@++............+++%@##:-)))3=&@+...........++@##$:;oeeh05-@+.....",
-"....+.+...+++@#%###@@...........++@+%###&-3~!~~>*@+.........++@@#$$:,o01g109|#@.....",
-"......+++++++@####%@+++........++@%##$&::>!}{!3>*#@@.......++##$::,;;ngaf619|$%@....",
-"...+++@@@@@@%%#$####@++.......+@$*-=->-->3!}]{{~=$%+......@#,d5oononnq6aaff15:#@....",
-"..++@######%####$$$#@++......@%&=~{!!{!~~!^}}_({>&%@+....@%-i1ffffg11grjsaafe,#@+...",
-"..++#$&$$$$$#####$$$%+++.....@$*~_2///_}i]{{}/[}3&#@+....#*d1aaaaaasjffraaaa<;$#+...",
-"..++@#$$$$$$$###$$&#%++.+....@#:)](_//_(_}]^}_[}3*&@+....%$;haaaaaasssfraaaa0|,#@...",
-".+.+@@%##$$$#$#####$%%++.....@@#')~{]_(}}i^!]{}]3>*$@....%%:^h1faaaasjfprasa19d:@...",
-"....++@@##$$$##%####%#@++.....+@$:'3{]__(i!|!^{!~3>:@+....+%:;^0fassajgtggfg109;%+..",
-"..+.+++@%###&##%%%%%#%@@......+@%$:=~{}_/]!bd3~~~~=*@+....+%$:;91faaajr<qqg1109d#+..",
-".....++@@@#$$$@@%@@@%#@@+......++#$'=){9/}~>;>>)3~3'#@+....+@$:49<fsaaqnnn9e0104*%+.",
-"...+..+++@##&##@+@+@@%#@++.....+++#$:,~}[]d,,,*')~3=&#+....++@$,;40saat444|oh105-$+.",
-".......+.+%#&#%@+++@@%%@++......++%##:3]/{3,*&&*=~3'&#+.....+@#$:;0aaa<4|;,d900!-$@.",
-"......+.++@###%@@@+++@+++........+@%##=!{{3>-*&&*':&#+.......+@%$:51af0eo|,,~^;-$@..",
-".......+.++@#%##@@+++++...........+@%#')~~!~),#$$##@+.........+%#$4e111gh4:::*$#+...",
-"..........++@%%##+++...............++@$*))~!3'$#@%++...........+@%-4e01g04:$#%@+....",
-".........++++@%%%+++++..............+@$$*=3~3'*&#@+.............+@:,d90105|-$%+.....",
-"...........++@+#%@@@+................+@#$==~3==*$++..............+@$&!91095d*@+.....",
-".............@@#%%@+++................+++:=~3)=*$@+...............+%@;910h9d:@+.....",
-"............+.+@+@@@+..................++#*''=='&+.................++$;^^ii!-%......",
-"..............++++@+++..................++#$:*=*&#+.................+@$:;did'$@.....",
-"................+++@@.+....................+$&'*&@@...................++:-^d-#@.....",
-".................++++.......................+$&$#@......................@:,:$%......",
-".................+...........................@+++........................%@@+.......",
-"....................................................................................",
-"....................................................................................",
-".............+.........................++++++......................++++++...........",
-"..........+....+....................+++++++@++..................+@+@@@@#@+..........",
-".......+++++++@@@++................@$:$$#&'=*$@+...............%*;::$,4id,%+........",
-".......++@@++@@#@@.+..............+$*=*:$')!):#@+.............@*d5d;:4h6e;$#+.......",
-".......@@@@++%#$%@++.+...........+@:=)=::>!]~=$@@+...........+@;50o|;n6a15:%#+......",
-".....+++%##@+@#$#@+++...........+@@'3!3-:3{/!>$$#++.........@@#^060o|<fafn,:$@+.....",
-"......+@#$#%@%#&#%+++..........+@@#={}!),3{[]b*##@++.......+%#&9fa6e4qaaa<|:$%@+....",
-"....+++@#$#%@#$&$%+++++........+@#$)]/{d>!_[]d::$#@+.......+%$*haafqngaaa<|;:$%+....",
-"..++.++##$#%@##&$#@++++......+@%#$$~]/{d>!_7}4,:&#%@+....+##$:,qaaf<ngaast4|,:$@+...",
-"...++++%$$$#%#$&$#@@+++......+#$#$:~_/}~b5_7}!-,:$$++....@$::,;0aaap<rsajpo4;::@+...",
-".++++++##&#%%#$&$%@@++++....+@$&&$:~}/i~b^(7_4-,&$$%++..+#,,,,;qsajp<raaspn4;,:$@+..",
-"++@@@@@#$&$$%$$&$#%@@@+++...@&'>>>={(7(5~_h7/^d;;,:&%+..%,^99n9faasppsaaapten4;,#+..",
-".+%##%%$$&$$#$&:&$#%%%%+++..@*3!~33}[7(_5(2c2}~db>;&#@+.@d061qqaaaasrsaaaspt<en;:%+.",
-"+@#$###$&&$$$$&&&$#$##@@+...#={]]{]_[8[(}h787/i5!!)'$%+.$9faaffaaaaaaaaaaarrrq04*#+.",
-".@@%%#%$&&$$#$&&&$#%%%@+++..@')~~~~_/7/(^_27h_!!d)>:#@+.@^h1110saaasrsaaasgpqe9;:#+.",
-".++@@@+#$&$#%$$&$#%%@@++....+$*'==={h[}^4i/7/id);-*$%@..+:d^559faaarpjaaaj<<eo|,%@..",
-"...+.++##&##@#$$$#%@+@++.+...++##&:~}[i!b^}h}^b>*:$#++...+@$:,;1aajp<rsasg<n|;:$%+..",
-"....+++@$&#%@@$$##%@@+++.....+++##&3}[{|>di(i!b-,&#@@+...++@$*;0aaf<ntjsjp<n4,:#@+..",
-"..+..++%#$##@%#####@+++.......+@%$#3]/{d;b!]{!~),&$@+.....+@%:&0aajtntgaff0<4,:#@...",
-"...+.++@$$#@@@%#####@++++......+@@$)]/!),)d!!^{d-$#%@......+%%:haa6<4eqpggf<o,$%%...",
-"......+@#$#@@@@@%##%@+..........+@#)!/!),-;3~!{3-$#@+.......+#$hfa6e4oe<p6f1o,$#+...",
-".....+.@#$#@++@@@###@+++........+@@={/!=**--)!]!>:$%+.......+%%9fa69||o5<6a6n;:%@...",
-".......@#$#@+++@@###%++++........+%={_~=::::=!]{)&$#@+.......+#9fa19;;;;9pafe;:$@+..",
-"......+@%$%@+++++@$#@@+..........+@=!_~=$$$&'3]!)*$#++.......+%i6a15,,,,!0a6h|,$@+..",
-".......@@$@@+++++@@@@@+@+.........+'3])*####:===>=*&@+........+^0ah|$$$$;5999od,#@..",
-".......+%#@+..+.++++@%@+.+.........*)!=:#@#@#&:*=)=:#@........+dh6i;$%$#$,;d5hi;$@..",
-".......+@@@++....++++%@++..........&=3'&@+@+@@%$*)=:$++........'i0^'%@@@%%#*dh9;*@+.",
-".......++@++...+...++++++..........#&*&@@++++++#$::$@+.........$-d,#@+++++@$*;;*@+..",
-"....................++..............+@@+....+.++@#@+............@@@+....+.++#$#@....",
-"....................................................................................",
-"....................................................................................",
-"...........+...........................+++.........................+++..............",
-"...........++++.....................++@###@++...................++#$:$%++...........",
-".......+.++@@+++...................++@$')*&+++.................+@@,^hd,@@+..........",
-"........+.@##%+++..+.............++@@#=~{3'#@+@+.............+@%#$51f04$%@@+........",
-".....+++++@#$#@+++..............+@%##$=!_~=$$%@++...........+@#$$:9fag5:*##@+.......",
-"......+.++@#$#@+++++...........+@@##$:3]/!;:$$#@++.........@#%$:,;0aafe;,:$%@+......",
-"..+++++@++#$$$@++++++.........@@#$$:::~}[])&:$$$%++.......@@$:,;;bqaaa<;;,::#@+.....",
-"...+++++@@##&$%@@++++++......+@#$***,-!}2}~-,::&$%@+.....@%$,|||4ogaaaqo4||,:$@+....",
-"..++@####@#&&$#%@##@@++.....+%#:>~!!d)]/8_!bb~d>=:$@....+#$;n1ppt<faaap<<tte5;,%....",
-".++@%$$$##$$*$$###$#%@++....+#&'~(/}]!}[c[}!!]}!3=*#+...+$;4gaaafraaaaap6faf05d:+...",
-"+++@#&:&$#$&&&$##$$$#%@@....@$&>][c[}5/28[(^}}/_!)':+...#:;9faaasraaaasraaaa6h^,@...",
-".++@#$&$#%#&&$$%##$#%@@+....+$&,{/2_^!i28h}~^]_]!)=&+...@:;4faaarpsaaaaqgaaa6h5-@...",
-".+++#$$$#%$$&$#%%####%@++...@$&*{/2_!di(7(^b~{]{~)=$@...@:,46aasg<faaar<pfaf1h5,@...",
-".+++#$&#%@#$&$#@@###%@@+....+#&*!_2id;](7(!-b!]{~)=&+...@$,|gaajteraasgn<paf1h5-@...",
-".+++#$&$#%$&&$#%##$##%@++...@#$:!(7}!bi[8(^d!{_{~)=&@...@$,bgaajrtfaaapqpfafgh5-@...",
-".+++#$&$##$&&&$##$$##@@+....@#$:!(2h{!_[8[}!{}(]!)'&+...%$:|1aaafrsaaaspfaaa6h^-@...",
-".+++#$&&##$&:$$##$$$#%+++...+##&!/7/}5(7c[(!}(/_!)'&@...@$:;gaaaafaaaaafaaaafh4'@...",
-"..++@#$##%$$&$#%##$#%@@+....+%#$){_]!~}/8(]~!!_{~='$+...+#$,<aaagqsaaaaq6faf194*+...",
-".+.+@%#%@@#$&$#@@%%%@@++....+@#$=~{3);{(7(!>3~~~='&#+...+@$&5q6qen6aaagn<0619^;$+...",
-"...+++@@@+%$&#@@+%%@++++.....+@#&'>,,*3_[{),'>))''&%.....@%$;^944|0aaa<4^9h95d'$....",
-".+..++@+++##$##++@+@@++......++@$:'*&&3]/])::''*:&#%.....+@%:;4|;;0aaae;|45d;-$%....",
-"...+++++++@$&#@@+++++.........++##$&&&3}[!):$:&&$@+.......++$:,,,-0aa6e;,;'-:#%.....",
-"........++@#&#@++++.............+@@%#$){[!=$$#@++...........+@%#$&haa69:&$#@@.......",
-"......+..+@#$%+..+...............++@@#=!_!'%@%@+.............+@##$i6a6^$%#@+........",
-"........+.+%##@++..................@@@'~]3*#@++................%@%^0au|$%@+.........",
-".........++@#++...+.................++*=!=*+@+..................++d969;@@+..........",
-"..........++@@++......................&')'$+.+...................+-^h^*+.+..........",
-"..........++++........................@$:$+.......................%*;:%.............",
-".......................................+++.........................+@+..............",
-"....................................................................................",
-"....................................................................................",
-"..................+........................++++++......................++++++.......",
-"..............++++.++....................+@###@@@++..................+%::$%#%@+.....",
-".............++++++++.+.................+#&*:$&$#@@+................+$-d;,,*$%#+....",
-".............++@@++++++.................+$*==*:&&$$+................@*d95|;;,*:@....",
-"...........+.@@#%%@++++................@+*>~3>,**&$@+..............%@;9g094||;:%+...",
-"............++%$#%@@@+@+..............+@#'~}{~>-,*:#+.............+#$41a6qeo4|;$+...",
-"..........+.+@#$$#%%%@++..............@@#={(]{))>-:#+.............@%$96aag<<95;*@...",
-"...........++%#$$###@@+++............+@##){/_]!~>-:$@............+@$:efaaagq9o;:@...",
-"...........+++##$###@@+..............++#$=!}]]{!)*$#+............+%$,9paaafge|,$@...",
-"...........++@@##$$#%+++.............+%$&-3{i_({)*$@@............%%:,oqffaaf<|:#@...",
-"........++++@%%#$#$#%++++...........+@#&*;3^i}(];*$%@+..........+%:,|eqrjsafe|:$@+..",
-"..........++@%#$$$$#%@.+............++$*=~{__(({),$#++..........+@:|5qfsssaf<4,$@+..",
-"..........+@@#$$$#$#%@++............+@$-)!}h(}_^3,:$++..........+@,oegaaaasf04;:@+..",
-".........++@%##&$$###@+++...........@@:-3!_2((}!d-:$%+..........@#;ohfaaasar<o;,#+..",
-".........+++@#$$$$##@@@++..........+@@$,>!}[(_i!3-,$@+.........+@%,4npaaasfrqo4,#@..",
-"........+.+@+#$&$$###@@+.+.........+@#$:,!_[h}^^d>,:#@.........+#$:|4gsaasrgqn4;$@..",
-".......+.++++%#$$$#%#@@++.........+@@%&&,bi//_{!d>-:%@+.......+%#$,;4<jaasfpqeo;$@+.",
-".....+..++++@%$$$$$##%%+++.......@+@#$&:*~][(9_{!3>*$++......@%%$:,;|qjaassfp0n|:@+.",
-".....++.++++@%#$$#$$##%++......++@%##$&:,|^(/_(_^!)*$@+....++@#$::;|4<raaassfg<|*%+.",
-"......+++++@+%#$$$$$##%@++.....++@#%&$::,d5_((h_i!d'#@+....+%#$$,,;|4trsaaaajgq4:%+.",
-"..++++++@@@%###$$$$##%@+.+...+@#&:*,--;b3{]_(__}{~>*%@+..+#$,;|4ooe<<fjassasf09|$#+.",
-"..++@@#%%#####$###$$%%@@+....+#$'=3)3~!!}]i]}__]3),:%@+..@$,49<0<<gfasjassafqe4;%@+.",
-"..++@%#####$$$$#$###@+++.+...%&:>~!!!{]_/(_i}]]{),&$@+...%,;91666faaaaafaaaf<4;:#@..",
-"..++@%%%%%####%%%##%%%+++....@#&')~~~~!{{!~3d~!d)>*$@@...%$-^h111166661qqq1qe9|,@%..",
-"..+++@%%%%%@@@@@@@@@@@@++....+@$'>33333))=;=->->)==&%+...@#:490000<eh9n5o9o9e95;%+..",
-"....+@@@@@@+++++++++@#@+.....+@@:==>=='&$&$&$$$&>3>*+....+@#;599994;,,,,:,,;909;%...",
-"...+++@+@+++++.++.++++@+......++$*''',:&$###$%#$*''$+.....+@-;4^^4;,:$&$:$$,d^^:+...",
-".....+++++++.+...+.++++........+@#$$&&##@%@+@%@%$$#@.......+#$,:,,:$##%%##@#:,$#....",
-"........+..+..+..................+++@@@@+@+@++++.+...........++@@@@@%%+@++++.+......",
-"....................................................................................",
-"....................................................................................",
-".......................................++++........................++++.............",
-"..........++++++.....................+@#$##@++...................+%:,:$%@+..........",
-"........+.++@@++++.................+@+$*'':&#@+................+@@*d^4;,$%+.........",
-"........+.@@%@@+++................++%#*=3=':&#++..............+@#$di094;,$@+........",
-".....+.+++@%##@+++++............++@%##=~{~>:$#%@+...........+@##$:o1f19b,$#%+.......",
-".....++.++@$$#%++++.+..........+@###:$)]/{>*$$$@+@.........+@$$:,,eaafe|,,:#@@......",
-"...+.+++++%$&##++++++.........++@$$$:*~}7]~::&$$%++.......+@#:,,;|0aaaq|;,,:#@+.....",
-"...++@#%%@#&&$#%@@@++++......+@#*>3)>>{[8/{b;-,*:$#@.....+%$d90eneaaaa6<nn4|;,:%....",
-"..++%#$###$&*&$##%%%%@@+.....+$:){_{!!(2y[}!!~3)>=:$+....@:;hfaaggaaaaapgq0hn^;*+...",
-".++@#$&&$#&&'$&$####%@@+.....#$'{/7[_][8x7[9]]!!3)=$+....$,4faaaaaaaaaasaff60h5,@...",
-"+.++#&&$$#$$&&$$$##%%@@+....+@$:{[7/}](287/}}{{~3='$+...+#*dfaaaafaaaaasaff109^*+...",
-".+++%$&$#@#$&$##$%%%@@++.....@$:~(2_!d{_[__}]!33>':#+....%:;6aaagtfsaassjrq094;:+...",
-"..++%$&#%@@##$####%@@++......@#&~_2{~-|^]i{5!!)='&#@.....%$-0aaf1ntgjffrg1e94,:@....",
-"..++%$$#%%%%##$##%@@++++....+@@&~_/{d>b~!5]i!d>-:&#@....+##-1aaf<n<qgrjfgqeo;,$%....",
-".+.+@$$#%@@%%##$#%@+++.......@@$3_/{);;bd!i_!)-*$#@@.....@%,0aaf<ne<tgjs6<o|,$#%....",
-"...+@#$##@@@@##$#%@++++......@@$)]_{d-;-;~]/]b*:##@+.....@#:haaftnennpaaf<|;:$@+....",
-"..++%#$#%@%@@%#$#%+++........@@$)]_{b>;-;~{/{b*&$%@+.....@#:haag<nenntfaf<|,:##+....",
-"..+.@##%#%%#@##$##@+++.+.....+@#=~]~!~bb;!{_{3,:##++.....+@:i1a61t<<egfsf04;:$@+....",
-"..+.@@%####%%####@@++.+......+@@')~!!!!~3!{{!>-*&@%+.....+@#^h16ggptqpfapeo|,%#+....",
-"....@@%%####%###%@@@++........+@:)3~{{!!d!!{~)-'&#++......+%;901fa6gqgg600o4,$@@....",
-"..+.+@+##$##%@@@@##%@+++......+@$:'~]({{~d)>)~3)=:$%+.....+%-d!1aaa60q<he00h5;*#+...",
-".....++%$$$##%@@@@#%%@++.......+@$:3}[_{~)=,=3{3)=*#+......+#:;1aaaf1e5490f1e5d:+...",
-"....+.+@#&$#%@+++%##%@@+........@@#3]2}{~=*$'){!3=*$+.......@#$0aaaf19|,40f60id:+...",
-"......+@@#@@@++++@@@@+++........++%')!3==*&#:')==':#+.......+@#d06u95|-$;^h954;:@...",
-"........++@++++.++++++++.........++%***&&$#@%$&:::&#+........+@$;dd'-:$%$:,);;-$+...",
-".......+......+....+++++...........++@+@++@%@++@$$$%+..........@+#@@@@%%@%@@*'*#+...",
-"..........+.+..+.+...+...............++++@++++++@#@+.............++++@++++++#$%+....",
-"......................+.........................+++.........................+++.....",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"..........+...+.+.................++@+@+@+@+@+++..............+@@@@@@@@@@@++........",
-"......+++.++++..+++.............++@@%@##%#%@%@@@++..........+@@@##$$#$###%#%@+......",
-"....+++.++.+.+++.+++++.........+@%###$#####$#$##%@+........+@#:$::$:$:::$:$$#%+.....",
-"....++@@@+++++++++@++++.......++&'>-*&*$&$$#:*-'*$#@......+@,49o|;;,,:,:;|o4|,:%....",
-"...++##%@@@@++++@@#%@+++......+#'3!~;-,::$::,>~)=*:#+.....+$^06qeo4;;,;;49105d;$+...",
-"...+@#$#%@@@+@++@%###@++.....++#){}!);-,:*&&-~{!3>*#@....+%$efa6<no4;|;;nqf609|:@...",
-".+.+%#$#%@@+++@+@%##%@@+.....+@#)]_{d--,&***;3{{3='&+....+@:haaf<no4;|||nqff09^,@...",
-"..++@#$#%@@@@++@%%###%@++....+%#)]_{3-,,**::;3{{~)=&@+...+%*haaf<n44|b;|n<ff0e5-%+..",
-"...+%#$#%@+@+@++@%##%@@++....+@$)]_!);,,**:*-~!{~)=:%+...+#:haap<n44||||n1f6ph5;#+..",
-"...+%#$#%@@++@++@####%%+.....+@$)]_{b,,:****>~{!~)>:@+...+%*haa6<o4||b||nqffg<9;#+..",
-"..++@$$#%@+@++@+@%###@@@+....+@&)]({);,*::**-d]{!3=:%+...+#,0aaf<n4b;;||nqf61<9;%@..",
-"..++@#$#%@@+@++@@####@@++....@@$)]_^b,,::*:*-~{!~3=:%+...@%:haag<o4|;b;|npff109b#+..",
-".+.+@#$#%@@@+@++@%####@+.....@%$)]_{);,,:::*;d]{!3>:@+...%#,haag<n44;|;|nqjfq09;%+..",
-"...+%#$#%+@+++@+@%##%%@@+....+@$)](!b,,:::::>d{!~)>:#+...+#:0aageo4|-;|bnqff1<9;$@..",
-"..++@#$#%@@+@+++@####%%+.+...+@$)]_!),,*:&::;~]{!3>:@@...+#:haag<o4|;;;bnpjfg09;#@..",
-"...+%$$#@@%@@@@@%####@@@.....+@$)]({d;;,,,-,b!]{!)=*@+...+#:0aaf<eno44o4<pafg0n;#+..",
-"..++@##$##%%@@%@%#$##%@++....+@$)]_]!3|b;;;)~{(]!3>:%+...+@:haaapt<<neee1faa6<9;#@..",
-"...+@$$##########$$$##@++....+@#)](]]!!~!~~!{_/_{3=:%+...+#$haaaffgp1q1gfaaa605;#+..",
-"...++#$$##%%%@%@##$##@@@......+#={_}{!~~3333{]_}!3=:@+....@$9faafg1qqq0qfaaag05;%+..",
-"...+@###@@@@@@@@%#$##@@+.+....+#={]!3)>>=->;3!}{~>=&++....@$9fa6qe9n55nn<6af1e5-@+..",
-"....@%##@@@+++++@@#%%@@@......+%=~]~>,*&:$:&-){~~==&@.....+#i1a094|;;,;;o0f6195'%...",
-"...++%#@+++++++++@%%@@++.......@'3!)'&&&$#$$*=33>=*$+......@^06h4;,,:::,|90099d:+...",
-"....+++@++++.++++++@++++.......+$*'*$$##%##$&*''*'$#+......+:d^d,:$$$$$:,|!4dd,$+...",
-".....+++..++...++++++++.........+###@@@%%@@%%#$$###.........@$:$%%#%%#%%#:&*:$$+....",
-".............+.....+..............+++++++++@+@@@@+@...........+++++++++%@@#@#%@.....",
-"....................................+.+......+++................+.+......+++........",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"........+...+..+...................++++++++++..................++++@+++++...........",
-"......+..+++.+....+..............+++@@@%@@+++@+++............++@#####%@@@@@++.......",
-"......+++.++++++++.+.+..........+@#####$$#$##%@++@+.........@#$$$$$:*$:$$#%@@@+.....",
-"....++++++++++++.++++.+........+%$&$$&$$&&$&##$#%@%+.......+#:,,,,,,;,,,::*$##%@....",
-"...++++@@++@@+@+@++++++.+......@#*,,,,,,,*,**:::&$#@@+.....@:|4444444|4|||;;,,$%@+..",
-"....+%#####%@#%#%%#%%@@@.+.....@*3!!!!~dbb|dddd);)=:#@+....#|06gppt<<<tt<<q<ee5;*%+.",
-"...+%#$$$$#$%##$####$%@@++....+#){(_((]{!{{i]]]]{!3=:#@...+$hfaaaasrpgfjjaaaf61i;*@.",
-"...+@#&$$&$$##$$$$$$#$#%++....+#)][/[[(_{i_(____]]!>:$+...+$haaaaaasfjsasaaaaa69;:@.",
-"...++@##$$#$$#$$###%%%@@+++...+@')!{__}_i}_/}{!~~3)'$#@...+%^h6aaaasjasaafgq10hd*$@.",
-"....+@+@%$###$$$##@@@@@+.......+$:'3!ii}}_((i!>=='':@+.....+*>^06fjssasafpen954;#+..",
-".....++@@#$##$$&#%@+++@+.......++#$'3!]^]9//]d-***:#++.....+@$&oqgffjsaaj<o|||;$@+..",
-"....+.++@@%###$$$#+@+++.........@@#*-)d!!i_[}d,*:$$@+.......%#$;5eqqgjaaat4|;,*%+...",
-".......+++@@@#$$##+++++.+.......++@$&,--;{}[]d,&$##++.......+%#:;4onepsaaq4;,:$%+...",
-".....+.++++@+##&$%+++.+..........+@@#$&,,!i2}3&&$%%+.........+@#$:;44gaaa<;,:%#+....",
-".........++++%$$#%@++.+...........+@@$$:*)}/{b:$$@@+..........+@#:,;|<aaf<;,:#@+....",
-"........+.+++@#$#%++++.............+@@#$:>{/{)&$#%+............+@#$,;efage;::%%.....",
-"..........+++@#$#@++.+..............+@##&>!}!;$$#@+.............+%$$,96a6n,:$@+.....",
-"............+@%##@++++...............+@%#,~]!>*$$%+..............+#%:o0a6n|,:#@.....",
-"..........+.++%#%%+++.+...............+%#'3!3),:#@@...............+#$4060e4;:%@.....",
-"...........+.+@%%@@@+.................+@@:=~3==*&@+...............+@#)90099|,@@.....",
-".............+@@@%@@+++................++$'=>))=:$@+...............+@*499eh5;*%+....",
-".............+++@@#%@++.................@#&*')3)':$@................@$,d^e1h^;*#....",
-"...............++@#@@+++.................++%*)!3=*&@.................+@#dh609d'%....",
-".............+..+@%%@@+..................+@+&=3)=:&%.................+@@'50h5;-#....",
-"...............++++@++++..................+@#&*'&&$@..................+@$-dd;'*%....",
-"..................+.+++.....................++@####@....................+@#$$$$%....",
-"..............................................++@@++......................++#%@+....",
-".....................+..........................+@+.........................+%+.....",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"...........+..+.+.+.+................++@+@@+%+@@+++..............@+@@%@@%@%@@++.....",
-"........+.++@++++++++++............+@@#*'&&#&:**&#@+...........+@%*;4;,$,;d|;:%+....",
-"........++@@#@+++%%#@@++..........++#$'=~>*#*)3)>'&#+.........+@$*4919|:de1h9d;$+...",
-"......+.++@#$#@+@#$#@@++..........+@$:){_~>:=!}{3>*#+.........+#:;hfa19;n1aa19d:@...",
-".....+.+++##$#@@@#$##%@++........@@$$:3](!>*=!_]!)-&%+.......@#:,;0aafn|96aa1ho,#+..",
-".....+++++%#&#@+@####%@++.......+%#&:*3{[{)*)!]{!)=:@+......@#*,;d0aaf<|egafgh5;%@..",
-".....++++@##&##@@#$##@@@.+......%$&::'~]2{d->!]{!3=*#@+.....#:';|^1aaaqongafp09|$%+.",
-".....+@@@@#$&$%@#%##$%@@++......@&*''=!(2_~-~!}]{!)'$@+.....#,d|456aaaqnqgsffg<4,%+.",
-"....+@+@@@#$&$$%#$$$###@++......$:'=))]/7(]d!}__]!!=*$@.....:;!9e0aaaajqgaaajf19|*#.",
-"....++@%##$&&$$##$$&$$#%@++.....$*=3~{}27/_^]([/(}]3':#+....*d900faaaasgjaaaaaj0!;$+",
-"....+@@%@#$&&$###$$$#$#%@++.....$*=33!}[8[}!i_//__{3-:#....+:di01zaaaaagjaaaaaf0o;$.",
-".....+++@@#$&&#%##$$$#%@++......@$:*=){/7(]3^i_(}{~=:$@.....#:;d5hfaaajqgjaaaf19;:#.",
-"......++++#$&##@%#$##%%@+.+.....++#$&*~_2}~;~{_]{~3'$@@.....+@::;d1aaapnpgsfj104-#@.",
-".......+++@#&$%@%####%@@+........@+#$$3]2}d;b!i]!3)*#@+......@@$:,0aaaqn<gjfgqe|$#+.",
-"......+.++@$$$%@@#$###%+++.......+@@$&3}/]3,b!}{!~)*#@+......+%#:,0aaaqo<gajgqh|$@+.",
-"........++%#&#%@@####%@+.+........+@$#3]2]~,)!i]!d=*#++.......+%::0aaaq4egfagq9d$@+.",
-".......+.+%#&##+%%###%@@+.........+@%$3][{d,b~]{!3>:#@.......++%$&0aaa<o<pjfg<9;$%..",
-"........++@$&##@%#$##%@++.........++##)]2]d,;!]!!~=*@+........+%$:haaat4epafgq9|%@..",
-".......+.+@#$$@@@###%%@+.+........+@@$)][]3-;!i{~3>:%@........+@#:haaa<oepff109;#@..",
-".........+%#&$@+@##$#@@@...........@@#){[]3,;!{]!)=:@+.........@%$haaa<4ngafp<9;#+..",
-".......+.+@#&##%%#####@++..........+@#)]2]!;3{}{!3>:%+.........+#$haaapeqfsa609;#+..",
-".........+@$&$#%#$$##%@++..........++#)_2_{3!}(]!3=$@+.........+@$eaaa6qgaaa605,#+..",
-"........+.@$&$###$$$#@@+...........+@@)}7/]!{_/_!)=&@..........+%#haaaa6faaa6h5-@...",
-"..........@%##%@%%##%@++............++'~]!3)~~]!3=*$+...........+@^1a60e16f609|:@...",
-"........+.+@@@@+@@%@@+@+............++&=)=':=)3)=':#+...........++'ih9!|5h0ei4;$+...",
-"...........++++.++@+@++..............++#$$$%&:'':&#@.............+@$:*&$,;!4)-:@....",
-"...............++++++++...............++@@@@$$:$$##+..............+@#%##:,;,:$$+....",
-"...........+.+...++....................+@++++@##@++................+%++@@#$$%%+.....",
-".............................................+.+.........................+.+........",
-"....................................................................................",
-"....................................................................................",
-"....+++++++..+.+.+..+..........+@###$##@+%+@+@+++..........+%$:::$$%@%@@@@+++.......",
-"...++@@@+++++++++++...........@#:=>=**:&##$$$#@++++.......%$;o9o4|;,$:*,::#@@++.....",
-".+++@###%%@+++++++++++.+.....@#$=~!~3>,:&::*:&$$%@+@+....%$,91600n4;,;;|;,:*$%@@+...",
-"..++@#$##%@@++@@@++++++......@$:3]_{!3>,&*'=-'&&$#%+++...%*)0aaa6qe4;|4oo4;,:$#@@+..",
-"..++@%####@#@%%#%#%@@+@@++...+#&=~]!!~)d;))d3~~))='*&#@..@$-91a6gq<<e<<q0q10eo^|-:@.",
-"...++%%%%%########$$$#%@@++..+@$'3~~~~!!!^!!!](}{!~>=*#+.+#:!0101qgp6g6gfaaaf6095d*+",
-"..+++@%%#%#$$##$$&&&$$$#%@++.+@#*=)3~d!___]}([77(_]!3>&@.+#$|oh<qqgsaaaaaaaaaaa609-@",
-"..+.+@@@%###$####$$$$##%@@+...%@:'-)d!]]_]!!]_//_{{~='$+..%#;4n<qgffaaggaaaaaa619!:+",
-"...+++@@%###$#%@##$$##%@+++..+@@$*-;~!5{_{~;!]__{!3=':%+.+%%*|oeqrraagqegfaaf6u94)$+",
-"....++@@####$%%@@####@@@++....+%#$,>4{{]i~b,>!{{!3='$#@+..@#:,|epfjfjg<4egff609d,$#+",
-"..+.++@@##$##%@+@@%%#%@@++....@%$:,)!]i{]~>,>)~~~~)'##+...@%:;4<6fjffqn4n<g1qqe4:$%.",
-"...++@@##$####%+@@@@#@#++.+...@@&'>~{_]]!d>:,=)>~33'$%@+..%#;49tfsjjgqn|45ee1004:#@+",
-"...++@@##$$##@%++@+@%#%@+.+...@%:-)!]_}{!3;:**,=3!3=$@+...@#;oegaasffqnb|b49<615,#@.",
-"..+.+@#######%@@+++@%##@++....@@*)~!i]i]!b-:&&:=3!~=$%@...%%d<1gjajfg<o;;;;o0f05:%%.",
-"...+@########@@++++@%##++.....+#>!}{!~!!!)-::&&=~]!=&@+...+$96afpqggg<o;;;;o1af9,@@.",
-"...+%$$$%@@@#%@+@++@%$$%++....@#3}(]d;)3!)-::&&=~_]>$@@...%:0aaaqn<06eo;;,,56aa9,%@.",
-"...+@#$#@@%%#@@++++@#$#%+.+...+#)}/!>-;~!b,&&&:=!_])$@+...+$haa6eoe16e4;,;;o6aah,#+.",
-"....+%%@@+@###@++@+@@$$@++....++*)~='*){]~-:&::=~(}>&%+...+@dh19^|egago;,;;56as9-#+.",
-"....++++@+%#$#@++++@#$#@+......+$:'*::){(!>&:$:=!(])$++....@:;d|;;hfa6n;;,;i6aah&%+.",
-".....+++++%#$##+@+@%@$$%++......+%$##$)]_{;****)~_])$@+.....@$::&,eaafn||b|ezaah*@+.",
-"........++@%###@#%####%++.......++%%##=~]{~)~~!!]]~'#+......+@%#$:i1af1<0166aa1^:@..",
-".......+.++%###$#$$#$#@@.+........+@%#'3{]]}]__}]~3*#@........+%#$^0faaaaaaaa60d$%..",
-"..........@@###$$$&$#%@+...........++@:=~{]_//2_]3=:@+.........+@@;91faaaaaaa0i;%+..",
-"........+.++@+#%####@@++............++$:'=~~!~!!=':#+...........+@*)^91116669!;$+...",
-"...........++++@++@+++++..............%$&:'=====*&$@+.............%*,;^ii99^d-*#+...",
-"............+++++++++..................+%%$&&&&$#++................@#$*--'':$@+.....",
-".............+.+++++.+..................+@@####%@+..................+@#$$$$$@++.....",
-".........................................++@+++++....................+@@@@%++.......",
-"............................................+...........................+...........",
-"....................................................................................",
-"....................................................................................",
-"..........+..........................++++........................++++...............",
-"........++++++..+..+.+.............@$::$$#+++++@@@++...........%,;;,:$@+++@@%%@+....",
-".......+@@@@+@+..+.++++...........+$'=''*:$@@@@#$:$+..........+*^95^d;*%#%#$*-*@....",
-".......+%%%@@@++++++++@+..........+:>3)==*&%%##$$:&#+.........+;90h99|,##$:,,;-&+...",
-".......+@%%#@@+++++@%%@++.........+&)3333=*$&:*=)3>*#+........@)90u005|:,;d5h09d$+..",
-"......+@@@###%@++@@@#$#@+.........@:=3~!!)-$*'>)~]!=$+........@;i01w60o,|49h1a6i:@..",
-".......+@%%##%@+@@@##$#@++.......++:=3!!]~>:,=)~]_])$%+......+@)90gfaqn;4oegaaah,#+.",
-".......++@%$$#@+@%#####+++.......++&*=~]_!>*=3!!{{3=&@+......+%,di1aage|506zff15-%+.",
-"......++++##$#%@@%##%%@@+.........@$&'~]/{),>~{{~~>*&@+.......@:;40aaf<4etaf119d-#+.",
-".......+++##&$%@%#$#%@+@++.......++%$&~]2}d-)!_]3=':$#+......+%%*;qaaa<o<6aa09^;:$@.",
-"......+.++##$$#%####%@+++........+@%$:3]/}^d!!{!)':$#+.......+@$:;<aasrtgga6h4;,$@..",
-"......++.+@#$$#$###@@++.+........+@##$3{((]]]!!3=*&#@+.......+%$:,<faaaffrp05|,$%+..",
-".......+++@##$$$##%%+++..........+@#$:;!}_(/]{3):$#+++.......+@:,;egsaaaa6qe|:$%++..",
-"......++++%#$$$&$#%@@+++.........+%#$:3{_(/2_{3=*##@+........@%$,;<6saaaag<5|:$%+...",
-"....+..+++@##$&&$#@@++.+........+@@$&:;!]h[7/!>-*$@%+.......+%#:,;egaaaaageo|:%#+...",
-".....++++@@##$&&$$@@+++........++%##:*b!}/78/5>,$$#++......++#$:;|<psaaaafn4,:&%+...",
-"...+.++@@@##$$$&$#%+@.++.......+@$:,->~!i_/2_{3=,##@+......+#,;4oeqgjaaaafqn4:$@+...",
-"...++@@###$####$#$$#@+.+......+%:'=~{]}]}i]i}}}!>$#@+.....+#;49q6aaaafajsaa69,$#@...",
-"...+++%#$&$$###@#$$$#++.+.....+#*=~]/2__{{~3{_/_3*#%@+....%$d90aaaasff1<faaa0|:%@+..",
-"...+@%##$$$##%@@%#$##++++.....@$'3!]_/_]!~>=~{/]~*&#@+....@:^06aaaaffqe90jaaqd,&%+..",
-"...+@%####%@@@@+@@%@@@@+++....+#'3!!{{33=-,*=)33)=':##+...@$^066ff009o4|ih00h9^;*$+.",
-"...++%#@%@@+++++++@@@@@+++....+#'3!~3)=*&:$$::'==)=':$@...+$!0600h5|,;,,;;^5ih94;:%.",
-"....@@%@@@+++++++++@+@@@@+.....@*)~==*:$#####%$:'==':$@....%dh695d;,$$$$$$:;^9}4;*#.",
-"....++@++++........+++++++.....+$*=*&&$@@%@+@@@#&*:$%%+....+:d^d-,*#%##@@%#$-;;*$#+.",
-"......++.+.+..+...+.+.+.........+@%#@@++++++++@+@@@@@+......@#$$%@@+++++++@+%###@+..",
-"....................................++++.........+..............++++.........+......",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"....................................................................................",
-"....+.++.......................+@@#@+++....................+%%$%@++.................",
-"....++++++....................++#&$$#@+...................+@&,,:$@@.................",
-"..++++@++++.+................+#$:*':$$%@+................@$:;d4|,:$@+...............",
-"+++@%%@#@@++................@$*-)333>-:#++..............@*d5e0109o;:@+..............",
-".@@#####%%@++...............+*)~!{]!~3=&@++.............@dh16faggh5,#@+.............",
-".@@%#$$###@@.+..............@'>~{]_{{~>:#@++............@dh0faaaf6n;$@++............",
-".++@@#####@@+++..+..+++.....+$*=3{]{{{),##@+++++@##+@...+*di0fafffh4:$%@++++%$$@@...",
-".+++%%#$###++.++...+.++++...+@$:)~]]]{3,&#%%+++@#$##%+..+%*;h1aaaa04,$##@@@#$::$#@..",
-"..++@#%##$%@++.+++.++++++....+@$=~~]]}~-$##%%%%#$*:$#@+..@#*516fas1o,:$###%:-|;,$@+.",
-".+..+@%$$$#%+++.+++@@#@++....@@%*)~](/{):&$#$&:==~=*#+...@@$de0aaafe;,:::,;4909d$@..",
-"..+++@%#$:#%+++++@@@%##++....+@@*'3](7];:$$#&'=)~{~'$+...+@#|5<aaaae;,::,45h1f0^:+..",
-"....++@#&&$%@++++@@####@+.....+%$*=][8_)*:$&&=)3{]!=#+....@%,|9aaaj<|;,,;5h1faf5$+..",
-"...+++@%$&#%@@+++@%#%%%++.....+@$:'~}2}d-,:&,=~~~3)&@+....+@*;4gaaaqo4;,491110h;#@..",
-"....+++##$##%@++@%#%%@++........##:~]_{~;-*$=)!~)=*$@+.....+$:;0aaaqeo|,oh61hid*@+..",
-"......+@#$##@%@+@@$%@+++.......+@@#>!_]!3;,&=3{~=:$#+......+@%:n6ajgte4;o0f09;:$+...",
-".....+++@###$#@++@@@+++.........+%$')!{]}d-:*=)=*$#++.......%#:^h66aa<o;d5hid-$%+...",
-"......++@@#$$#%++@@+++.+........++%:-)!}/{;:**'*$#@+........+@%;oegaaje;||^|:$@%....",
-".......+++#$&$%@++++.+...........@@#$*!_8}3:&&#$@@@+.........%#:,dgaaa<;;,::##@+....",
-"........++@#$#@@@++++.+...........+%$:){_{3>,:$##+@+..........+#,;hfafqn4;:$$%@+....",
-".......+.++@%%##%+++.+............++@$')~~!!3*&##@++..........+@#:4h016p<4,$$@@+....",
-"........++++@%#$#@.+.+.+...........+@@#:'3!}~=#$@%++...........+##:;406a1o::##@+....",
-"..........+++@@##%@@++..............@%#$:=3!~)=*$#@+............@%$,;9061eo|,$%+....",
-"...........+.@@@@%%%+++..............+@##*=)333)*#@@.............+#$:d50000e|:#%....",
-"...........+.+++%###@+++..............+@@$:*)~]~>:#%..............+@%:;be6a19;$#....",
-".............++++%%%@++................++#$&')~3=:&@+..............+@$*;!hguo;,%+...",
-"...............+++@@@@@+................++@$&*='='*$+...............+@%&-d5^5^d*+...",
-"...............++.+++@@+..................++%#$:*='#+.................+@%$*;d54*@...",
-"...................+++++...................++++#&'*$+..................++@@*,^d:+...",
-"....................+++.....................+.++#$#+....................+.+@$:$@....",
-".................................................++..........................++.....",
-"...................................................................................."};
diff --git a/hacks/images/matrix0.xbm b/hacks/images/matrix0.xbm
new file mode 100644 (file)
index 0000000..078bb61
--- /dev/null
@@ -0,0 +1,1261 @@
+/* Created with The GIMP */
+#define matrix0_width 320
+#define matrix0_height 377
+static unsigned char matrix0_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xfe, 0xff, 0x7e, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xbf,
+   0x7d, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xb7, 0xff, 0x7f, 0xdb, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xf7, 0xfd, 0xff, 0xed, 0xff, 0xff, 0xff,
+   0x7f, 0xdf, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xff,
+   0xff, 0xdb, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0x7f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde,
+   0xff, 0xbf, 0xfd, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdf, 0xdb, 0xff, 0xfb,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xff,
+   0xdf, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7,
+   0xff, 0xdf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xfe, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xfe, 0xfb, 0xff, 0x6f, 0xff, 0xff, 0xf7, 0x7f, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f,
+   0xff, 0x7f, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xef,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xef,
+   0xff, 0xff, 0xfd, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf,
+   0xfd, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xbf, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xbd, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xbb, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f,
+   0xff, 0xff, 0xb7, 0xff, 0xf7, 0xed, 0xff, 0xbb, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0xfb, 0xff, 0xf6, 0xef, 0x7f, 0x7f, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff,
+   0xff, 0xfb, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xbf,
+   0xff, 0xff, 0xf7, 0xfd, 0xfd, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xf7, 0xfd, 0xff, 0xfe, 0xfd, 0xff, 0xef, 0xff, 0xff,
+   0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xbf, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xef, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xef, 0xff,
+   0x7f, 0xff, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xf7, 0xdf, 0x7f, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xfe, 0xef,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef,
+   0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x7f, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xb7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xff,
+   0xde, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7d, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xf7, 0xfd, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xef, 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xfd,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xb7, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xfb,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xdf,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xfb, 0xff, 0xfe, 0xff, 0xf7,
+   0xf6, 0xff, 0x7e, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xff,
+   0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xfe,
+   0xf6, 0xf7, 0xbe, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xde, 0xfe, 0xb7,
+   0xff, 0xff, 0xdb, 0xff, 0xef, 0xef, 0xff, 0xbf, 0xff, 0x6f, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0x6f, 0xff, 0xff, 0xfb, 0xdf, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xbb,
+   0xff, 0xff, 0xf7, 0x7f, 0xfb, 0xff, 0xff, 0xfe, 0xbf, 0x7f, 0xff, 0xfd,
+   0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xef, 0xf7, 0xff, 0xff, 0xfb, 0xef, 0xff,
+   0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xed, 0xff, 0xdf,
+   0xff, 0xff, 0xef, 0xff, 0xb7, 0xfb, 0xbf, 0x6d, 0xff, 0xfe, 0xfd, 0xff,
+   0xbf, 0xff, 0xfe, 0xfb, 0xdf, 0xdf, 0xff, 0xed, 0xfd, 0xbf, 0xed, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xf7, 0xb7, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0xfe, 0xfe, 0xff,
+   0xef, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbd, 0xff, 0xff, 0xfd, 0xff,
+   0x7f, 0xf7, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff,
+   0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xfd,
+   0xff, 0xff, 0xfd, 0xef, 0x7e, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xfe, 0xfe,
+   0xef, 0xf7, 0xb7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xbd, 0xdf,
+   0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xfe, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xef, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xb7, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xbd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xff,
+   0xf7, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xff,
+   0xfe, 0xff, 0xff, 0xef, 0x7f, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xbb, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xf7, 0xef, 0xff,
+   0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0x7f, 0xff, 0xbf, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xfe, 0xdb, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf6,
+   0xff, 0xf7, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xf7,
+   0xbf, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0x6f,
+   0xff, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xf7, 0xff, 0xff, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xfe, 0x7f, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xdb, 0xff,
+   0xef, 0xef, 0xff, 0x7d, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xf7, 0xf7,
+   0xff, 0xdb, 0xff, 0xf7, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7d, 0xff, 0x6f, 0xef, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xfd, 0xff, 0xef,
+   0xbf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xfe,
+   0xff, 0xf7, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xde, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0x7b, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xbf, 0xff,
+   0xff, 0xfb, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xfe, 0xfb, 0xef, 0xff, 0x7f, 0xff, 0xfe, 0xef, 0xff,
+   0xff, 0xff, 0xfd, 0xf7, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xef, 0xbf, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0x7f,
+   0xff, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xed, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0x7d, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xff, 0x7f, 0xff, 0xff, 0xfb, 0xfb, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xfe, 0xff, 0xed, 0xff, 0xdf, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xfb,
+   0xff, 0xff, 0xff, 0xdf, 0xfe, 0xef, 0xfb, 0xfe, 0xdf, 0xef, 0xff, 0x7b,
+   0xff, 0x6f, 0xfb, 0x7f, 0xf7, 0xff, 0xf7, 0xff, 0xb7, 0xff, 0xff, 0xdb,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xbf,
+   0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xff,
+   0x7f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xff, 0x6f, 0xff, 0x7f, 0xff,
+   0x7f, 0xdf, 0xfe, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x7f,
+   0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfd, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xbb,
+   0xfb, 0xff, 0xde, 0xff, 0xbf, 0xfd, 0xff, 0xdb, 0xff, 0xfb, 0xfd, 0xdf,
+   0xde, 0xfe, 0xfd, 0xf7, 0xdf, 0x6e, 0xff, 0xf6, 0xed, 0xff, 0xf7, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xef, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xbd, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfe, 0xde,
+   0xfe, 0xef, 0xfe, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xdf, 0xfe, 0x7e, 0xf7, 0xff, 0xde, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xf6, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xed,
+   0xef, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xdf, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xff,
+   0xfb, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xfe, 0xff, 0xf7, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xfd,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfb,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xef, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7e, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xfd, 0xf7, 0xff, 0xfe,
+   0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xde, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf7, 0xff, 0xff, 0x7d,
+   0xff, 0xb7, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xfe, 0xff,
+   0xff, 0x7f, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xdf, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0x7f, 0xff,
+   0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xf6, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0x76, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xbf, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x76, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xf7, 0xff, 0x6d, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xfb,
+   0xdf, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xfe, 0xff, 0x7f, 0xf7, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfd, 0xff,
+   0xfb, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xfe, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xee, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xee, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdb, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xbf, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xfd, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd,
+   0xed, 0xff, 0xef, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xbd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xf7, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xbb,
+   0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xf7, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xf7, 0xff, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xed, 0xff, 0xff, 0x7e, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xef, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xdf, 0xfe, 0xfd, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xbf, 0x6d, 0xff, 0xf7, 0xf6,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xdb, 0x7f, 0xef,
+   0xff, 0xb7, 0xbd, 0x7f, 0xdb, 0xfd, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff,
+   0xef, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0x6f, 0xff, 0xff, 0xed, 0xff,
+   0xdf, 0xff, 0xff, 0xfd, 0xff, 0x6f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef,
+   0x6f, 0x7f, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0x7f, 0xfb,
+   0xff, 0xfd, 0xfd, 0xff, 0xbe, 0xff, 0xff, 0xfe, 0xbf, 0xfd, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xf7, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xf7, 0xff,
+   0xfb, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xfd, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xfe, 0xff, 0xbf, 0xfb, 0xff, 0xf7, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf7, 0xfd, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0x7f, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xff, 0xef,
+   0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xdf,
+   0xfe, 0xff, 0xfd, 0xff, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xef, 0xf6, 0x7f, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0x7f, 0xef, 0xff, 0xf7, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf6, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xf7, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xfb,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0xdf, 0xff, 0xfe, 0xff,
+   0xff, 0xf7, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xdf,
+   0x7f, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xfd, 0xff, 0xff, 0xfb, 0xdf, 0xff,
+   0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xf7, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xfb, 0xef, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfb, 0xff,
+   0xff, 0xdf, 0xfe, 0xf7, 0xfd, 0xb7, 0xdd, 0xff, 0xf6, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xfd,
+   0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xfd, 0xed, 0xfb,
+   0xef, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xf7, 0xff,
+   0xfb, 0xff, 0xfe, 0xef, 0xed, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xbf, 0xfd, 0xff, 0xfe, 0xff, 0xb7, 0xff, 0x6e, 0xfb, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xf6, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xbf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xbf, 0xfb,
+   0xff, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xbf,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0xff,
+   0xfb, 0xfb, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xff, 0xfe,
+   0xdf, 0xfd, 0xfe, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xbf, 0x77, 0xff,
+   0xf7, 0xf6, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0x6f, 0xff, 0xfb, 0xf7,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xff, 0xff, 0xf7, 0xf7, 0x7f,
+   0x7f, 0xff, 0xf7, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0x7f,
+   0xff, 0xff, 0xbf, 0xff, 0xf7, 0xed, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfe,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb,
+   0xff, 0xb7, 0xff, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0x7e, 0xef, 0xfb, 0xdf, 0xdf, 0xff,
+   0xfd, 0xf7, 0xff, 0xf7, 0x7f, 0xff, 0xdd, 0xfb, 0x7f, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xdf,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xff, 0x7f, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xfe, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xef, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xff, 0xef,
+   0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f,
+   0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xdf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfd, 0xfd, 0xff, 0xef,
+   0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xbf, 0x7f,
+   0xff, 0xfb, 0xf7, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xdf, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xf7, 0xfe,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xf7, 0xbf, 0xff, 0xfe, 0xfd,
+   0xff, 0xff, 0x77, 0xff, 0xff, 0xf6, 0xff, 0xdf, 0xff, 0xfe, 0xf7, 0xff,
+   0x7f, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xfe,
+   0xfd, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xbf, 0xdb, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0x7f, 0xdb, 0xff, 0xf7, 0xf7, 0x7f, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xb7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xb7, 0xff, 0x7f, 0xfb, 0xff, 0xbf, 0xfd, 0xff, 0xff,
+   0xff, 0xfb, 0xfe, 0x77, 0xff, 0xbf, 0xb7, 0xfb, 0xef, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0x7f, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xed, 0xff, 0x77, 0xff, 0x7f, 0xf7, 0xff,
+   0xbf, 0xfd, 0xff, 0xfd, 0xff, 0x77, 0xff, 0xbf, 0x6d, 0xff, 0xff, 0xed,
+   0xff, 0xdf, 0xff, 0xb7, 0xff, 0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xb7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7d, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0x6f, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xdf, 0xff,
+   0xdf, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xfe,
+   0xef, 0xef, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0x77, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0x7f, 0xf7, 0xff, 0xb7, 0xfd, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x7f, 0xdb,
+   0xff, 0xdb, 0xfe, 0xbb, 0xfb, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xef, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xdf, 0xff, 0xfb, 0xef, 0xdf, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xbb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x6f, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xf6, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0x77, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb,
+   0xdf, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xdf, 0xee, 0xff, 0xff, 0xfd, 0xff, 0xee, 0xff, 0xbb, 0xfd, 0xdd,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0x7d, 0xef, 0xff, 0xfd, 0xff,
+   0xf7, 0xf7, 0xff, 0xed, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf6, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xfb, 0x7f, 0xef, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xfe, 0xfd, 0xff, 0xbb, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xef,
+   0xfb, 0xff, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x77, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff,
+   0xff, 0xfe, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfe, 0x7f, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xfb, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xbf, 0xff,
+   0xf7, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xff, 0xef, 0xff, 0x7f, 0xdf, 0xff,
+   0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff,
+   0xff, 0xfb, 0xef, 0xff, 0x7f, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xef, 0xfe, 0xff, 0xf7, 0xfe, 0x77,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0xbf, 0xff,
+   0xff, 0xed, 0xfe, 0xfd, 0xf6, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xde, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xff, 0x7f, 0xff, 0xef, 0xf6,
+   0xef, 0x7f, 0xff, 0xfb, 0xf7, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xef, 0x7f,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xfe, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xfb, 0xef, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xfd, 0xff, 0xfd, 0xfd,
+   0xdf, 0xbf, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xfb, 0xfe, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x77, 0xff, 0xff, 0xfd, 0xb7, 0xff, 0xff, 0xfd, 0xfb, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xbf, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xef, 0xff, 0xff,
+   0xfe, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xfe,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xee, 0xff, 0xfb, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff,
+   0x7f, 0xf7, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xdb,
+   0xed, 0xff, 0xf7, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xf6, 0xff,
+   0xb7, 0xed, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xdd,
+   0xff, 0xff, 0xfd, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff, 0xf7,
+   0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xfb,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xfe, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xef, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xf7, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xed, 0xff, 0xff,
+   0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfd, 0xff,
+   0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xff, 0xfb,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xdd, 0xfd, 0xef, 0x6d, 0xff, 0xdf, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0xbd, 0xff, 0xff,
+   0xef, 0xf7, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xbf,
+   0xdf, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xee, 0xf7, 0xff, 0xfb, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbb, 0xf7, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf6, 0xef, 0x7f,
+   0x6f, 0x7f, 0xff, 0xef, 0xdf, 0xfb, 0xfe, 0xff, 0xfd, 0x6f, 0x77, 0xff,
+   0xff, 0xfb, 0xff, 0xde, 0xff, 0xfd, 0xed, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xb7, 0xff, 0xbf,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xdd, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xfd, 0xff, 0xfe,
+   0xff, 0xef, 0xff, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe,
+   0xdf, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xdf, 0xdf, 0xdf, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd,
+   0xff, 0xbf, 0xfb, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xff, 0xff,
+   0xfb, 0xef, 0xff, 0xef, 0xff, 0xef, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xf7, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xfd, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xef, 0xfe, 0xfd, 0xff,
+   0xdf, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xef, 0xff, 0xef, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xbf, 0xff, 0xef, 0xbe, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xff, 0xfd, 0xff,
+   0xf7, 0xdf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xf7, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
diff --git a/hacks/images/matrix0.xpm b/hacks/images/matrix0.xpm
new file mode 100644 (file)
index 0000000..7902d7d
--- /dev/null
@@ -0,0 +1,390 @@
+/* XPM */
+static char *matrix0_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"320 377 6 1",
+/* colors */
+"  c #1B641B",
+". c #165016",
+"X c #0B2A0B",
+"o c #081E08",
+"O c #030E03",
+"+ c #000000",
+/* pixels */
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOO++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+++",
+"++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++OOOoooooOOO+++++++++++OOoooOO++++++++++++++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O++++++++++++++++O++++++++++++++++++++OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooO++",
+"+++++++++++++++++++++++++++OOOOOOO+++++++++++++OOOOOOOO++++++++++OOoooooooOO++++++++++OOOXoooOO+++++++++++OOOOO+++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++OOOOO++++++++++++OOOOO+++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO+",
+"++++++++++++++++++++++++++OOo...oOO+++++++++OOOooOOOooOOO++++++++OoooXXXXooOO++++++++OOoo...oooOO+++++++OOoooooO++++++++++++++++++++++++++++++++++++OooooO++++++++++++++OO..ooO++++++++++Ooo.XOO++++++++++++++OOO...OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOo...OO+",
+"++++++++++++++++++++++++++Ooo...ooO+++++++++OoooXoooXooOO+++++++OOoXoXoXXoooO+++++++OOooX...oooOO+++++++OOoXXXXOO++++++++++++++OOOOOOO+++++++++++++OOoXooOO++++++++++++OOO.XooOO+++++++++oOo..oOO+++++++++++++OOo...oOO+++++++++++++++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOo.X.OO+",
+"++++++++++++++++++++++++++Ooo...ooO+++++++++OoooXoooXooOO+++++++OooXXXoXXoooO++++++OOOooX...XooOO++++++OOoooooXOOO++++++++++++OOooOoOO++++++++++++OOooXXoOO++++++++++++OoO..ooO++++++++++OooX.oOO+++++++++++OOOOo...ooOO+++++++++++OOOoOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Ooo...OO+",
+"+++++++++++++++++++++++++OOoX...ooOO+++++++Oooo..ooo..oooO+++++OOOXooXXXXoooOO++++OOooXXXXXX..oooO+++++OOoXXoXoooO+++++++++++OOoo...XoOO+++++++++OOoo...ooO++++++++++OOooooXOOO+++++++++OOOoXXoooO+++++++++OOoooo...oooooO+++++++++OO...OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooooOO+",
+"+++++++++++++++++++++++++OOoX...XoOO+++++++OOoo..Xoo..ooo++++++OoOoXXXXXXoooO+++++OOXoXXXXXX..ooO+++++OooooXoXoooO++++++++++OOoXX...XoO+++++++++++Ooo...oOO+++++++++++OooXXXOOO+++++++++++OOoXoooO+++++++++Oooooo...ooooo++++++++++OO...OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OooXXXooO+",
+"++++++++++++++++++++++++++ooo. .ooo++++++++Oooo..ooX..ooOO+++++ooXXXX....XXooO++++OoXXXooooooXoOoO+++++OoooXoXoXoOO++++++++OOooXXoooooOO+++++++++OOoXoooOO+++++++++++OOXoXoooO+++++++++++OOoXoXXoOO++++++++Oooo.......oooO++++++++OOoX..oOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO..oooO++",
+"+++++++++++++++++++++++++OOoX...XoOO+++++++OooX..ooo..ooO++++O+oooXX.....XXXOO++++OOXXXXooooooooO+++++OoooXoXoXoooO+++++++++OooXXoooXoOO+++++++++OOoXoXoOO+++++++++++OOXoXXoOO+++++++++++++OoXoXXOO++++++++Oooo.......oooO++++++++OOo...oOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoX.ooOO++",
+"++++++++++++++++++++++++++ooo...ooO++++++++OOoo..ooo..oOO+++++OoooXXX....XXooOO+++OOXXXoooooXoooOO+++++OoooXoXoXoOOO+++++++OoooXXoooooO++++++++++OOXooooOO+++++++++++OOXoXooO+++++++++++++OOooXoooO++++++++OoooX......oooO+++++++OOOo.X.ooOO+++++++++++++++++++++++++++++++O+O+O+O+++++++++++++++++++++++++++++++++++OoO..oOO+++",
+"+++++++++++++++++++++++++OOoX. .Xoo++++++++OOoooooooooOOO+++++OooX..XXo..XXoo+++++OOoXX..XXXoooOO++++++OOooXXXXoXooO++++++++Ooo..oooOoOO++++++++++OooOOO+++++++++++++Oo...ooO+++++++++++++OOoo...OO+++++++++Ooooo...ooooOO+++++OOOooo...OoOOO++++++++++++++++++++++++++OOOOOOOOOOOOOO++++++++++++++++++++++++++++++OOoooXooOO+++",
+"++++++++++++++++++++++++++ooo...ooOO++++++++OOOooOOOooO++++++OOooo..XXX..oXXOO++++OOooo..XoXooooOO++++++OOXooXoXooooO++++++OOooX.ooOoOOOO++++++++++OOOO+++++++++++++OOO...oOO++++++++++++++OOo...oOO+++++++OOOooo...oooOO+++++OOOoOoo...ooooOOO+++++++++++++++++++++++OOOoooooooooooOOO+++++++++++++++++++++++++++++OooXoXOO++++",
+"++++++++++++++++++++++++++Ooo...ooO+++++++++OO+OOOOOOOO+++++++Oooo..ooo..ooOO++++++OoooooXXX..oooO+++++OOOoXXXXXooOO+++++++OOoo..XXXooooOO+++++++++O++++++++++++++++OOo..XoOO+++++++++++++++Oo...oO+++++++++Ooo..ooX..ooO+++++Oo.............oO+++++++++++++++++++++++Oo.............oO+++++++++++++++++++++++++++OOOXXXooOO++++",
+"++++++++++++++++++++++++++OOo...oOO++++++++++++++++O+++++++++OOOoo..Xoo..oooOO+++++OOOoooXXX..XXoOO++++OOoXoXXXXooOO+++++++OOoo..XXXoooooO+++++++++++++++++++++++++++OO...oO+++++++++++++++OOO..XoOO+++++++OOOo..ooo..ooOO++++Oo.............oO+++++++++++++++++++++++Oo.............oO++++++++++++++++++++++++++++OoXXXooO+++++",
+"++++++++++++++++++++++++++OOo...OOO++++++++++++++++++++++++++OOooo..ooo..oOOO++++++OOOooXoXX.XXooo+++++OOOoXXXXXoooOO++++++Oooo..XXXoooooO++++++++++++++++++++++++++OOo...OOO++++++++++++++OOo...OOO+++++++OOOo..ooo.XooO+++++Oo.. ... .. ...oO+++++++++++++++++++++++OO.............oO+++++++++++++++++++++++++++OOOXXXooO+++++",
+"+++++++++++++++++++++++++++OOX..oO+++++++++++++++++++++++++++OO...... ...XXoO+++++OOooooooooXoXXXOO++++OooooXXXXXXooO+++++OOoooXo.....XXoOO+++++++++++++++++++++++++OOO...OoO+++++++++++++OOOO...OOO++++++++OOooooooooOOO++++++OoOooo...ooooOOO+++++++++++++++++++++++OOooooooooooooOOO+++++++++++++++++++++++++++OooXXXoOO+++++",
+"+++++++++++++++++++++++++++Oo...OO+++++++++++++++++++++++++++Oo..........XXXO++++++OooXooooooXXXXOO++++OooooXXXXXXXoo+++++OooXXXo.....XooOO+++++++++++++++++++++++++OOOoXXooO++++++++++++++OooXoXOO+++++++++OOOooOOOooOOO++++++OOOooo...ooOoO+++++++++++OOOO++++++++++O+OOOOOOOoOOOOO++++++++++++OOO+++++++++++++OOooXXXOOO+++++",
+"+++++++++++++++++++++++++++OOOoOOO+++++++++++++++++++++++++++OOooXXXXXXXXoOOOO++++OoXXX..XXX..oXooO++++OOOooXXoooXooOO++++OOXXXXoooo..oooO+++++++++++++++++++++++++++OooXXooOO++++++++++++OoooXXooO++++++++++OO+O++OOOO+++++++++++OOo...oOOO++++++++++++OooooO++++++++++++OOOOO++OOO++++++++++++OOoooO+++++++++++OOoXoooOO++++++",
+"++++++++++++++++++++++++++++OOoOOO+++++++++++++++++++++++++++OOoooXXXoXoooOO++++++OOXXX..oXo..XooOO+++++OOOOoXXoooXoOO++++OOXXXoXoXX..oooOO++++++++++++++++++++++++++OOoooXXOO++++++++++++OOXXoooOO+++++++++++++++++++++++++++++++OOo..XoOOO+++++++++++OOooooOO++++++++++++++++O+++++++++++++++OoooooOO++++++++++OooXoooOO++++++",
+"+++++++++++++++++++++++++++OOOOoO+++++++++++++++++++++++++++++OoooXXXXoXXOOO++++++OOoXX..XXX..XXoO+++++++OOoXoXoooXoO+++++OooXXXoXoo..oooOO+++++++++++++++++++++++++++OoXoXooOO++++++++++OOooXXooO++++++++++++++++++++++++++++++++OOO...oO++++++++++++OOooXooo+++++++++++++++++++++++++++++++++OOooXoOO+++++++++OOoXXXooO+++++++",
+"+++++++++++++++++++++++++++OO...OO+++++++++++++++++++++++++++OOoooXXXXXoooO+++++++OOooooo...oooOOO++++++++OOXXXXXXoXOO+++++OoXo.... XX...oO++++++++++++++++++++++++++OOoooXXOOO++++++++++OOoXXoooO+++++++++++++++++++++++++++++++++OO...OOO+++++++++++Ooo...oo+++++++++++++++++++++++++++++++++Ooo...OO+++++++++OooX.oOOO+++++++",
+"++++++++++++++++++++++++++++O...O+++++++++++++++++++++++++++++OoooXXXXXooOO++++++++++OOOo...oOO++++++++++++OooXoXoooO+++++OOooX.....XX...OO++++++++++++++++++++++++++++Ooo..ooO++++++++++Ooo..ooOO++++++++++++++++++++++++++++++++OOoX..OO++++++++++++Ooo...ooO+++++++++++++++++++++++++++++++OOoo...OO++++++++OOoo.XoOO++++++++",
+"++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++OoooXXoXXXoOO++++++++++OOOO...oOO++++++++++++OOoOOoOOOO++++++OOOooooOoooooOOO+++++++++++++++++++++++++++++OO..ooo+++++++++OOooX.OO+O++++++++++++++++++++++++++++++++++OOOOO++++++++++++OOoXoooOO+++++++++++++++++++++++++++++++++OOooOoO+++++++++OoooXooO+++++++++",
+"+++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++OOooXXXoXooO+++++++++++++OooooOO++++++++++++++OOOOOOO+++++++++OOOOOOOOOOOOO++++++++++++++++++++++++++++++OOO..ooO++++++++++OOo..oOO++++++++++++++++++++++++++++++++++++OOO+++++++++++++OOXoXooOO++++++++++++++++++++++++++++++++++++OOO+++++++++OOoXoXoOO+++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooXoooooO+++++++++++++OOoXoOO++++++++++++++++++++++++++++++++++OO+O++++O+++++++++++++++++++++++++++++++OOOO+OO++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoXoooOO+++++++++++++++++++++++++++++++++++++++++++++++++OooXooOO+++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoOoooOOO+++++++++++++OOoooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+O+++++++++++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO++++++++++++++++++++++++++++++++++++++++++++++++++OOoooooO++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+OO+++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOOO++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++O++++++++++++++++++++++++++++++++++++++O+O++++++++++++++++O+O++++++++++++++++++++++++++++++++++++O+OO+O++++++++++++++++++++O++++++++++++O+OOOOOO++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++OOOOOOO++++++++++++OOOOOO++++++++++++++OOOOOOOO+++++++++++OOOOOOOO++++++++++++++++OOOO+++++++++++OOOOOOOOOOO++++++++++++++OOOOOOO++++++++OOOOOOOOOOOOO+++++++++OOOOOOOO+++++++++++++OOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++OOoooXooOOO++++++++OOOoooooO++++++++++++OOooXoXooOO++++++++OOooXoXooOO+++++++++++++OoooooO++++++++OOOoXoXoXooooO++++++++++OOOooXoooOO+++++OooooXooooXoooO+++++++OOoooXoOoOO+++++++++OOOoooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOOO++++++",
+"++++OOOoooXoooOO+++++++OOOoooXoooO+++++++++OOOoooXoXoooOOO++++OOOoooXoXoooOOO+++++++++OOOoooooOO+++++++OoooXoXoXXoooO+++++++++OOOoooXoXooO++++OOooXoXXXXoXoooOO++++OOOOoooXXooOoO++++++++OOoXXooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOooooOOOO+++++",
+"+++OOoo..XXX..oooO++++OOoXX.....OO+++++++++Oooo..XXX..oooO++++Oooo..XXX..oooO+++++++++OOo.....OO++++++Oooo..XXXXXXooO++++++++OOo.....XoXOO++++OOXXXXXXXXXXXXXOO++++Oooo..XoX..oooO++++++OO.XXXXXXXXXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOo.......oOO++++",
+"+++Oooo..XXX..ooo+++++OOXXX.....oO++++++++OOoXo..XXX..XooOO+++OoXo..XXX..XooOO++++++++Ooo.....OO++++++OOoo..XXoXXoooO++++++++Ooo.....XXooO+++++OoXXXXoXXXXXXXOO+++OOoXo..XXX..XooOO++++OOo..XXXXXXXXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO++++++++++++++++++++++++++OOOO++++++++++++++++OOo.......ooOO+++",
+"++OOooo..oXo..oooOO++++OoXX.....oOO++++++++oooX..oXX..XXoOO++OOooX..oXX..XXoOO+++++++OOoo.....oOO+++++Oooo..XXXXXXooOO+++++OOOoo.....XXoOO++++OOXXoXXXXXXXXXXOO+++OoooX..XXo..XXoOO++++OOoX.XXXXXXXXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOO+++++++++++++++++++++++OOOOOOOOO+++++++++++OOoO.......oooO+++",
+"++OOXXXoooooooXXXOO+++OOOOooo...OOO+++++++OOXXXoooooooXXXOO++OOooooooooooXXXOO+++++++OOXXXXo.XoO++++++OoooXXoooooooOO++++++OOo..oooooOooO++++++OOOoOoOoOoXoXoOO+++OOXXXoooooooXXXOO++++oooXXOoooo...oOO++++++++++OOO+++++++++++++++++OOO++++++++++++++++OOOooo...oO++++++O+OOOOOOO+O++++++O...oXOOOO++++++++++OOooXXooooXXoXOO++",
+"++OOXXXoooooooXXXOO+++++OOOoo...oO+++++++++OooXooOooooXXXoO+++OoooooOooXoXXXoO++++++OOOXoXoX..oOO+++++OoooXXoooooooOO++++++OOoX.XXooooOO+O+++++++OOOOOoooXXoXOO+++OoXXXoooooooXXXoO++++oooXXooOooX.Xoo++++++++++OOOOOO++++++++++++++OOOOOO+++++++++++++OOOOoooX.Xoo+++++OOOOOOOOOOOOO++++O+.X.XXooOOOO+++++++++ooooXoooXXXXXoO++",
+"++OOXXXooOOoooXXXOO+++++OOOOo...Oo++++++++OOOOOoOOOoXoXXXOO+++OOOOOoOoo..XooOO++++++Ooo..ooo.XoO++++++Oooo.......oooO++++++Ooo..ooXooooOO++++++++++OOOooXXoooOO+++OOoXXXooooXoXooOO++O+oooXXooOoo...oOO+++++++O+oo...OO+++++++++++O+oo...OO++++++++++OOooXXXXXoooOO+++OOooXooXoXooXooO++++OOoOoX...ooOO++++++++OoooooOoooXXoOO++",
+"+OOOXXXoooOOooXXXoO+++++++OOoX..oOO+++++++++OOOOOOOooXXXXOO+++++OOOOoOo..XXXOO+++++OOOO..ooo..oOO++++++ooo.......XooOO++++Oooo..oXoXXooOO++++++++++++OOOXXoooO++++OOXoXoXooooXXXXOO+++OoooXXoOoOo..XooO++++++++Ooo...OO++++++++++++Ooo...OO+++++++++OOOOoXXXXXoooOO+++OOoXoXXoXoXXoXoOO++++OOoXo...oooOOO+++++OOOoooOooooXXXoO++",
+"+OOoXXXooOOoooXXXOO+++++++OOo...OOO++++++++++++OOOoooXXXXOO++++++OOOoooX.oXoOO+++++Oooo..ooo.XoOO+++++Oooo.......oXoOO++++Oooo..oXoXooooOO+++++++++++OooXXooo+++++OOoXXXooooXoXoooO+++OoooXXooooo...oOO++++++++Ooo...OO++++++++++++Ooo...OO++++++++OOooooXXXXXoOOO++++OOXoXoXXXXoXoXXOO++++OOOoo...XooOOOO+++++OOooooOoooXXXOO++",
+"++OOXXXoooOOooXXXoO+++++++OOoX..oO++++++++++++OOOooo..oooOO+++++O+oo.....oooOO++++OOooooXooo..oOO++++++OOooXoooXX...oO+++++ooo.....XX...OO+++++++++++OOO..oOOO+++++oooo.......oooO+++++ooo..ooooo...oOO++++++++OoooXooO++++++++++++OoooXooO+++++++OOooX..ooooOOOO++++OOOXXXXXoXXXXXXooO++++++OoooooXX...oOO++++++OOoooo..XooOO++",
+"++OOXXXooOOOooXXooO+++++++OOo...OOO++++++++++++OOooo..oOOO+++++++Ooo.....oooOO++++OOXXXXXooo..oOOO++++OOOoooooooX..XoOO++OOooo.....XX.X.OO++++++++++OOoo.XoO++++++OOooo.......oooo+++++ooo.XoooXX...oo++++++++++oooXoOO+++++++++++++oooXoOO+++++++OOXoX..XXoooO++++++OOooXXXXXXoXXXXooO+++++++OOoooXX...ooO+++++++OOooX..oXoOO++",
+"++oOXXXooOOoooXXXOO++++++++OO...oO++++++++++++Ooo...oooOO+++++++++OOoooXXXXXoO++++OO...XXXXX..oooO++++++OOOoOOOoO...oO++++Oooo..ooooo...oOO+++++++++OoooXXOOO+++++OOXXXXXoooXXXXXOO++++OOOXX...oX...oOO+++++++++OOOOOO++++++++++++++OOOOOO++++++++OoXXX..oooOOO+++++++OoooXooXXXXooXXOO+++++++OOOooXo...ooO++++++OOo...oooOOO+++",
+"++OooXXooOOOooXXXoO+++++++OOoX..oOO++++++++++OOoo...ooOOO++++++++OOOooooXXXXOO++++OO...oXXXo..XooO+++++OOOOOOOOoo.X.ooO+++Oooo..ooooo...oOO+++++++++OoooXXOO++++++OOXXXXXoooXXXXXOO++++OOOoX...XX...ooO++++++++++O+O+++++++++++++++++O+O++++++++++OOXXX..oXooOO++++++OOoXoXXoXXXoXXoXOO+++++++OOOooXX...ooO+++++++OO...oooOO++++",
+"+OOoXXXooOoOooXXXOO++++++++Oo...Oo++++++++++OOOoo...ooO++++++++OOOOOOoooXXXXOO+++OOO...XXXXX..oooOO+++O+OOOOOOOOo...oOO+++Oooo..oooOo.X.ooO++++++++OoooXoXOO+++++OOOXXXoXoooXoXXXoO+++++OooX ..Xo..XoO++++++++++++O+O+++++++++++++++++O+O++++++++OOOXoX..oooooOO++++++OooXoXoXoXXXXoXOO++++++OOOoooXo...ooO++++++OOO...ooOO+++++",
+"++OOXXXoooOOooXXXOO++++++OOOo...oOO+++++++++Ooo..XoXoOOO++++++OOooOOOOoooXXXOO+++OOooXXoXXXX..XooOO+++OOooOOOOOoo...oOO+++Oooo..Ooooo...OOO++++++++OOoXXoooO++++++OooXXoooooooXXooO+++++OOOoooooo...oOO+++++++++++++O+++++++++++++++++++O+++++++++OOOoOoo...oXoOO+++++OooXXXXXXXoXXXXOO++++OOOoo...XooOOOO+++++++OOOoXXOOO++++++",
+"++OOXXXoooooooXXXoO++++++OOOoX..ooOO+++++++OOoo..oooooOO+++++OOoooOoOooooXXXoOO+++OOXoXXXXXX..XXoO++++OoooOoOoOoo...oo+++++ooo..oooOo...oOO++++++++OoXoXXoO+++++++OoXXXXooooXoXXXOO+++++OOOoooooo...OO+++++++++++OOOO++++++++++++++++OOOO+++++++++++OOooo...XXooOO+++OOOXXXXXoXXXXoXooO++++OOOoo...XoooOO+++++++++OooXooOO++++++",
+"++OOXXXoooooooXXoOO+++++OOooo...OoOOO+++++OOooo..XXoooOOO++++OOooooooOoooXXXOO++++OOXoXXoXXX..oXoo++++OoooooooOoo..XoOO++++ooo..oooooX..oO+++++++++OOoXoXoO+++++++OOXXXoooooooXXXOO+++++OOOoooooo.X.OO+++++++++OOOOOOO+++++++++++++OOOOOOO+++++++++++OOoo..XXXoooOO+++OOoooXXoXoXXoXoOO+++OOoooX...ooOOO++++++++++OOoXooO+++++++",
+"++OOooo..oXo..oooOO++++OOoooo...Xoooo++++++oX....oXXoooooO+++Oo...oXoXX..XooOO++++OOOOoooXXX..XooOO+++OoXo..ooXX.XXXOO+++++OOoX.XXXXX...oOO++++++++Oo...OoOO+++++++oooX..ooo..XoooO++++OOOXoXXX..XXoOOO+++++++++oo...OO++++++++++++Ooo...OO++++++++++++OOOooXo...oo++++OOoOOOoOOOOoOOO++++O.X.XXooooOOO+++++++++++OoXooOOO++++++",
+"+++Oooo..oXX..oooO+++++OoooXX...XooooO+++OOO.....XoXXoooo++++OO...XXooX..XoXO++++++OOOOooXoX..oXoOO+++OooX..XoX..XXXOO+++++OOO..XXXoX..XoO+++++++++OO...oO+++++++++OoXo..XXX..XXoOO++++OoooXoXo..ooXOO+++++++++Ooo...OO+++++++++++OOoo...O++++++++++++++OOOOoo..Xoo++++O+OOOOOOOOOOOO+++++O.X.oXOoOOO+++++++++++++OOoXoOO+++++++",
+"++++OOoooXoXoooOO+++++OOooXoXXXXXXXooO++++OoooXXXXXXXXXooO+++OOoooXXXXoXooOOO++++++++OOooXXXXXXooO++++OOOoooXXXXoOoOOO++++++OOoOXoXXXoooOOO++++++++OooooOOO+++++++OOOOoXoXXXXooOO++++++OOooXXXXoooOO+++++++++++OoooXoOO++++++++++OOO..oooOO+++++++++++++++OOOOOoOOO+++++++O++++O++++++++++OOOooOOO+O++++++++++++++OOoXoO++++++++",
+"+++++OOooXXXooOOO++++++OooXXoXoXXXoXoO++++OoXXoXXXXoXXoooO++++OooooXXXXXooOO+++++++++OOoooXoXoXooo++++OOOooXXoXoXOOO+++++++++OOooXoXooooO+++++++++++OXXoOO+++++++++OOOOoXXoXoooOO++++++OooXoXXXoooOO+++++++++++OooXXXOO+++++++++++OO..oooOO++++++++++++++++OOOOOO+++++++++++++++++++++++++OOOOOO+O++++++++++++++++OOooXOO+++++++",
+"++++++OoooXoooO+++++++OOooooXXXooXoooOO+++OOooXooXoXXoXooOO++++OoooXoXoooOO++++++++++++OoXoXXXoooO+++++++OooXXoXoOO+++++++++O+OoooXoXoOO+++++++++++OOoooO++++++++++++OooooXoXoOO+++++++OOooXooooOOO+++++++++++++OooooOO++++++++++OOO..oooO+++++++++++++++++++++++++++++++++++++++++++++++++OOO+++++++++++++++++++++OoooO++++++++",
+"++++++++OOOOOOO++++++++OOOoOOOooOOOOO+++++OOoOooOoOOoOOOO+++++++OOOOoOoOOO+++++++++++++O+OOOOOoOO+++++++OOOOOoOOOOO++++++++++++OOOoOOOOO+++++++++++++OOOO+++++++++++++OOoOoOOOOO++++++++OOOoOoOOO+++++++++++++++OOOOOO+++++++++++OoooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+O++++++++",
+"+++++++O+OOOO++++++++++++OOOOO+OOOOO+++++++++OOOOOOOOOOO+++++++++OOOOOOOO+++++++++++++++OOOOOO+O++++++++++O+OOOOO+++++++++++++++OO+OO++++++++++++++++++++++++++++++++++++OOOO++++++++++++++OOOOO++++++++++++++++++OO+++++++++++++OOoooOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++",
+"+++++++++++++++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++OOOOO++++++++++++++++O++++++++++++++++O+O+O+O+++++++++++++++++O+O+++++++++++++O+O+O+O+++++++++++++O+O+OO+O++++++++++++O+O+OO+O+O++++++++++++++O+O+++++++++++++O++++++++O++++++++++++O+O+O+O++++++++++++++O+O+O+O++++++++++O++++++++O++++++++++O+O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++OOOOOoOOO+++++++++++OOOOOOO+++++++++++OOOOOOOOOOO+++++++++++++OOOOOOOOOO++++++OOOOOOOOOOO+++++++++OOOOOOOOOOOOO+++++++OOOOOOOOOOOOOO++++++++++OOOOOOOOOO++++++OOOOOOOOOOOOOOO+++++++OOOOOOOOOOOO++++++++++OOOOOOOOOO++++++OOOOOOOOOOOOOO++++++OOOOOOOOO+++++++++++OOOOO+++++OOOOO+++++OOOOO++++OOOOO++++++++++OOOOOO+++++++",
+"++++OOooX...ooO++++++++OOooooXooOO++++++++OoooXooXoooOOO++++++++OOOoooooXooOoO+++OOoooXooXooooOO++++++OoooXoXooXooooO+++++OoooXoXooXoooooOO+++++OOOoooooXooOoO+++OOoooXooOOOoooXooO++++OooooXoXoooooo++++++++OooooXooooooO+++OOoooXooOOooooooO++++OooooXoooOO++++++++OOooooOO+++OOooooO++OOooooOOOOOoooooO++++++OOOooooooOO+++++",
+"++++OOoXX...ooOO+++++++OOoooXoooOO+++++++OOooXoXoXoXooOOO+++++++OOoooXXoooooooO+++oooXoXoXoXooOOO++++OOooXoXoXoXXoXoOO+++OOooXoXoXXoXXXoooO+++++OOoooXXoooooooO+++ooXooXooooXoXoooo+++O+oooooXoXXooooO++++++O+oooXoXXXXoooO+++ooXooXooooXoXooOO++OOoXXoXoXooOO+++++++OooooooOOOOOooXooo+++OoooooOOOoooXoooO+++++OOooXoXooOOO++++",
+"++OOooooX...oooO+++++++OoooXoXXooOO++++++OooXoXXoXoXoooOOO++++OOOOooXoXXooooooO+OOoooXoXXoXoXooOoO+++OooXoXXoXXoXXoXOO+++OooXoXoXoXXooXoooO+++OOOOooXoXXooooooO+OOoooXoXoooooXoXooo+++OOooXXoXoXXXoooO++++++OOooXoXoXoXooo++OOoooXXoXooooXXooOO++OOooXoXoXooOO+++++++OooXXoooOOOoooXooo+OOooXooooOOooXoXooO+++OOOOooXoXoXoOOOO++",
+"+++OoooXXooo..oOO++++++Oooo.....ooO++++++OOXXX..XXXXX...OO++++OoXo..XXXXX...XoO++Ooo...XXXXXXX..XOO++OOXXX..XXXXX...oOO++OOXXX..XXXXX...XoO+++OoXo..XXXXX...XoO++Ooo...XXoooXX...oo++++OoooXX...oXXooO+++++++OooXXX..XXXooO++Ooo...XXooo..XXXoO++OooXX..XXXoo++++++++Ooo...oooOooo...oo++Oo.....ooooX...ooO+++OooXX.XXXXo...OO++",
+"++OOoXoXXooo..oOO++++++OoXo.... ooOO+++++OOXXX..XXXXX.X.OO+++OOooX..oXoXX...XXO++Ooo...XXXXXXX...oO++OOXXX..XXoXX...oOO++OOXXX..XXoXX...XXO++OOooX..oXXXX...XXO++Ooo...XXoooXX...oo++++OooXXX...XoXooO++++++OOooXoX..XXXoo+++Ooo...XXooo..XXoOO++OOXoX..XoooO++++++++Ooo...XoooooX.. oo++Oo.....oooXo...ooO++OOoXo..oXXXX.X.OOO+",
+"++OoXXXooXXo..oooO+++++OOooXXXXXXXOO++++OOOoooXXooooo...oOO+OOO...oooooooXooXoO++OOoXXXooOoOooX..oo+OOOoooXXooooo...oo++OOOoooXXoooooooooXO+OOO...oooOoOoXooXoO++OOoXXXoooooooXXXoO+++++OOOOo...ooOOO++++++++OOOoooXXoooOOO++OOoXXXooXXXXXoOoO++++OOoo..oooOOO++++++OOoo. .XXoooXX...oo+OOOXXX..ooooo...ooO+OOo...oooOooo...ooO+",
+"+OOoXXXooXoo..oooOO+++++OOoXXXXXXXOO+++++OOoooXXooooo...oOO++OoX..ooOOOOOoXoXXO++OOoXXXooooOOo...oo++OOoooXXooooo.X.OOO++OOoooXXoooooXoXXoO++OoX..oooOoOooXoXXO++OOoXXXooooooXXXXoO+++++OOOoo...oOOOO+++++++++OOOOoXXoooOO+++OOoXXXoXXXXXXoOOO++++OOOo..ooOO++++++++OOoo...XXoooXX...oo+OOoXXX..ooooo...oOO++OO...oooOOOo...ooO+",
+"++OOXXXXo.....ooo+++++++OOooXXXXXooOO+++++OoooXXooooo...ooO+OOo...oooOOOooooooO+++OOXXXooOOOooX..oo+++OoooXXooooo..XoO++++OoooXXoooooXooXoO+OOo...ooOOOOOoXoXoO+++OoXXXXooooooXXXoO+++++++OOO...ooO+++++++++++++OOoXXXooOO++++OOXXXooXXXXXOO+++++++OOoX.ooOO+++++++++Ooo...XXoooXX...oO++OooXX..XXooo..XooO+OOO...ooOOoOoX..XoO+",
+"++OoXXXoX.....oooO++++++OOo..ooo..oOO++++OOooX..oXoXX..XoOO+OOoX..ooOO++OOOoOOO++OOoXXXXoOOOOooXXXo+++OoooXXooo..oooOO+++OOooXXXoooX.ooOOOO+OOoX..ooOOOOoOoooOO+++OOXXXXoXoXXXXXXOO+++++++Ooo.X.OOO+++++++++++++OOoXXoooO+++++OoXXX.....ooOO+++++++OOo..OoOO+++++++++Ooo.....ooo.....oo++OoXXXoXXXXoo...oOO+OooX..ooOOOOooXoXoo+",
+"++OOXXXXXXXXXXoooO+++++OOoo..ooo..ooOO++++Oooo..oXXoX...ooO++oo...oOO+++++OOO+++++OOXXXooOOO+ooooXo++OOoooXXooo..ooOO+++++OoooXXooo.XoOOOO+++oo...oOOOOOOooOoOO++OOoXXXXXXXoXXXXXoO++++++++OO...oOO++++++++++++++OOXXoooO++++OOOXXX.....ooOO+++++++OOoX.oOO++++++++++OOo.....ooo.....oo+OOOXXXXoXXXoo...oOO+OOo...oOO++OOoXoXoO+",
+"++OOXXXXXXXXXXoooO+++++OoooXXoooXXooo+++++Oooo..XXXXX...ooO+OOo..XoOO++++++++++++OOOXXXooO+OOOoXoXX+++OooX......XooOO+++++Oooo.......oOO++++OOo...oOOOOooooooo++++OOXXXXXoXXXXXXXOO+++++++OOo...oO++++++++++++++OOOXXoooO++++OOoXXX....XooOO++++++++Oo..oOO++++++++++OOo.X.oX...Xo...Oo++OOXXXoo...oo.X.oOO+OOo..XoOOO+OoooXXXO+",
+"++OOXXXXo.....XXoOO+++OOoooXXoooXXoooO++++Oooo..oXXoX...ooO+OoO...oOO++++++++++++OOOXXXooOO+OooooXX++OOooo.......oOOO+++++Oooo......XoOO++++OOo.X.ooOOOXoXXXooO++OOOXXXXXXXXXXXXXoO++++++++OO..XoOO+++++++++O+O+OOoXXoooO+++++OOXXX.....ooOO++++++++OoX.ooOO++++++++OOOo...oX...Xo...oO+OOoXXXoo...oo...ooO+OOo...oOO++OOoXooXO+",
+"+OOooXXoX.....oooOO++++OooXXXoooXXoooOO+++Oooo..XXXXX...ooO+OOo...oOO++++++++++++OOooXXooOO+OOoXoXo+++Oooo.......oOOOO++++OooX.......oO+++++Ooo...OOOOOoXooXooO++OOooXXXXXXoXXXXooO+++++++OOo...oO+++++++OOOOOOOOOOXXoooO++++OOOXXX.....ooOOO++++++OOo.XooOOOOO++++++OooX..Xo...XX.X.oO++OOXXXoo...oo..XoOO+OOo...oOOO+OOooXXXO+",
+"++OoXXXXooXoXXXXoO++++OoXXX.......XXXOO+++OoooXXooooooXoXXO+OOo.X.ooOO++++OOO+++++OoXXXooOOOOooXoXX+++OooXXXooo..ooooO++++OoooXXXoo.XOOO+++++Oo...ooOooXX...XoO+++OoXXXoooooooXXXoO++++++O+OO...oOO++++++OooXXOOOOoXXoooO+++++OoXXXooXoX..oOO+++++++OO..ooOOOoooO++++OOo...ooXXXoo...oo+OOoXXXoXoooXX...ooO+OooX..oOO+OOoXXoXoO+",
+"++OOXXXoXoXoXXoXoo+++OOOXXX.......XXXOO+++OooXXXoOoOoXoXXoO+OOo...OoOO+OOOOOOO++++OoXXXooOOOOoooXoX+++OoooXXooo..oooooO+++OoooXXooo..OO+++++OOoX..ooOOOXX..XXoo+++OoXXXoooooooXXXOO+++++++OoO..XoOO++++++OoXXXOoOOoXXoooO+++++OOXXXXoXXo..ooOO+++++OOo.XooOOOoooOO+++OOo...ooXoXoo..XoO++OOXXXXoXXoXX.X.OOO++Oo...ooOOOOOoXXXXO+",
+"+OOOXXXXoXXXoXXooOO+++Oo...XoXooXo...oO++OOoooXXoooooXXoXXO+OOOXXXXoOOOOOoooooO++OOOXXXooOOOOo...oo++OOooXXXooooooXoXoO++OOoooXXoooooO+++++++OoXXXooooooooXXXXO++OOOXXXXoOooXoXXXoO++++++OOOo...oOOO++++OOoX..oOooo..oooO++++OOoXXXoooooXXXooOO++++OoO..ooooo.X.oO+++OooX..ooOooOo...oo++OoXXXooooo.....ooO+OOOXXXoooOOoo...ooO+",
+"++OOooXoXoooooooo+++OOOo...oXoooXo...oo++OOoooXXooOoooXXXoO+OOOXXXoXooOoooXXooO++OoOXXXooooooo...oo+++OoooXXoooooXooXXO++OOooXXXooooOO+++++++OOXXXXoooOooXoXoXO++OooXXXooooOooXXXoO+++++OOOoo...oOOO++++OOo...oooOo..ooOO++++OOoXXXXooooXXoXoo+++OOOoo..ooooo..Xoo+++OOo...ooOOoOo.X.oo++OoXXXooooo.....oOO+OOOXXXXoooOoo...ooO+",
+"++OOXoXXooooXoooOO+++Ooo...Xoooooo...oo++OOoXoXXoooooXXoXXO++OooXXXooooooXoXXoO++OOoXXXXooOoooX.Xoo++OoooXXXooooooXoXoO++OooooXXooOooOO+++++O+ooXXXoooooooXXXoO++OOOXXXXoOooXoXXXoO+++++OOOoO...oooOO++++oO...ooooo..ooo+++++OoOXXXoooooXXXXooO+++OOOO..ooooo...oOO+OOooX.XoooOOoo...oo+OOOXXXXooooX....ooO+++ooXXXoooooo...oOO+",
+"++OOooo.......ooOO+++Ooo.....ooX.....oo++Oo.............oOO+++OoooXX.....XXXoOO++Ooo..........XXoOO++Oo....... .....XXO++Oo........oo+++++++++Oooo.......XXoooO++OoX.....ooo.....oo++++OoXo.......XooO+++OOoXo.....XXOOO+++++Ooo.....oOooo...oo++Oo.............oO+++OoX...XoOoOoX...oo+OOo.....oOooX...oO++++Oooo.......oooOOO+",
+"+++OOoo.....X.ooO+++OOoX.....ooo.....Xo+OOO.............oOO++O+OOoXo.....XXooOO+OOoX..........XoXOO++OO.............XoO++OO........oOO+++++++OOOOo.X.....XXXoOO+OOoo.....ooo.....Xo+++OOooX.......XXoO+++OOXoX.....XooO++++++Ooo ....ooOoo...Xo++OO.............oOO+OOoo ..oXOOOXo...Xo++Oo.....OoOXo...oOO+++OOOo.X.X...XooOO++",
+"+++OOOoX.....XoOO++++OOoooooooOOooooooO++OOoooooooooOoOOOO++++OOOOoOooOooOoOO++++OOoooooooooooOoOO+++OOoooooooooooooOoO++OOooooooooOO++++++++++OOOOOoooooOOOO+O++OooooooOOOOooooooO++++OoOooooooooOoOO+++OOOOooooooOoOO++++++OooooooOOOOOooooOO++OOoooooooooooooOO++OOoOooooOOOOOoooooO++OOoooooOOOOooooOO++++OOOOOooooOoOoOO+++",
+"+++++OOOOooooOOOO++++OOOOoOoOOOOOOooOOO+++OOOoOoOOOOoOoOO+++++++++OOOOoOOOOOO++++++OOoOoooOoOOOOO+++++OOOooooOooooOOOOO+++OOOooooOOO+++++++++++++OOOOOoOoOOOO+++++OOOooOoOOOOOoOOOO+++++OOOOoooOooOOO++++++OOOOOoOoOO+++++++++OOoOOoOOOOOOOOOOO+++OOoOoOoOoOooOOO+++++OoOOoOOOOOOOOOOOO+++OOooOOOOOOOOOOO+++++++++OOOOoOOOO+++++",
+"+++++OOOOOOOOOO+++++++OOOOOOOOOOOOOOOOO+++OOOOOOOOoOOOOO++++++++++OOOOOOOO+++++++++OOOOOOOOOOOO+++++++OOOOOOoOOOOOOOOO++++OOOOOOOOOO++++++++++++++OOOOOOOO++++++++OOOOOOOOOOOOOOOOO+++++OOOOOOOOOOOOO++++++++OOOOOO+O++++++++++OOOOOO++++OOOOOO++++OOOOOOOOOOOOO++++++OOOOOOO++OOOOOOOO++++OOOOO++++OOOO++++++++++OOOOOOO+O+++++",
+"+++++++++OOO+++++++++++++O+O++++O+++O++++++++O+OO+++++++++++++++++++++OOO+++++++++++++O++O++O++++++++++++++O++++++O+++++++++++++OO++++++++++++++++++++O+O+++++++++++++++++++++OOO+++++++++O+++OOOO++++++++++++O+OOO++++++++++++++O+O+++++++O+++++++++OO+OOOOO+O++++++++++O+++++++++O++++++++++O++++++++++++++++++++++++O++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++OOOOO++++++++++++++++++++OOOOOO+++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoooooOO+++++++OoXoOoO++++++++++++++++OOOoooooO++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++O+++++++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++++++++++O++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++OOOooXoooOO++++++OoXXoOO++++++++++++++++OOooXoooOO++++++++++++++OO+++++++++++++++++++++++++++++",
+"+++OOOOOOOOOOOO+++++++++++OOOOOOOO+++++++++OOOOOOOOOOO+++++++++++++OOOOOOOOOO+++++++OOOOOOOOOOOOO++++++OOOOO+O+OOOOOOO+++++OOOOOO+++OOOOOOO++++OOOOOO+++OOOOOOO++++OOOOOOOOOOOOOOOO++++OOOOOOOOOOOOOOOO+++++OOOOOOOOOOOO++++++++++Oo...XXoOO+++++OOoooXoOO+++++++++++++++OooXX...OO+++++++++++++OoooO+++++++++++++++++++++++++++",
+"+OOOooooooooOOOOO+++++++OOOoooOoOOO++++++OOOoooooooOOOO++++++++++OOOooooooOOOO++++OOOoooooooooOOoO+++OOOoOoOOOOOOoOOOO+++OOOoOOOOOOOOOoOOOO++OOOoOoOOOOOOOoOOOO++OOOoooOOOOOoooOOOO++OOOoooOOOOOoooOOOO++OOOOooooooooOoOOO++++++++OO...XXoOO+++++OOoooXXOO+++++++++++++++OOoXX...oO+++++++++++OOOoooOO++++++++++++++++++++++++++",
+"+OO.X..X.....XooO++++++OOoooX....oooO+++OOoo.X..X...XooOO+++++++OOO.X...X....OO+++OO.X..X..X.....oO++OO.....oooXX...ooO+OOoo...XXOOOXo...oo+OOoo...XooOOXo...oo++OoXX....oooX....oo++OoXX....oooX....oo+++OoXo.X........OO+++++++OOo...XooOO++++++OoooXooOO++++++++++++++OoOXX...oOO++++++++++OOo...oOO+++++++++++++++++++++++++",
+"+Oo......X...XXooO++++OOOoXX...X.oooO++++OoX........XXoOOO+++++OOoo...X....X.oO++OOo............XoO++Oo.....oOooo...XoO++OoX...oXOOOXX...Xo++OoX...XXoooXX...Xo++OoX.....ooo.....Xo++OoX.....ooo.....Xo++OOXXX....X.....oOO++++++OOo...ooOO+++++++OOoo..oOO+++++++++++++++OOoO..XoO+++++++++++Ooo...ooO+++++++++++++++++++++++++",
+"OOO..........oXooOO+++OOooXX.....oooOO+++ooo........oXoooO++++OOOooX.........Oo++OOo.............oo+OOoX..X.oooXX...oXO+Oooo...XooOooo...Xo+OOXoX..XoooooX...oX+OOoo.....ooo.....Xo+OOoo.....ooo.....Xo++OoooX..........oO++++++++OO...oOO++++++++++OoX.ooOO++++++++++++++OOOo...oOO+++++++++OOoo...ooOO++++++++++++++++++++++++",
+"OOOoooXXoooooXXXXoO+OOOXXXoXooooo...oOO++Ooo...oooooXXXXoOO++++OoXXXXooooo...oO++OooX..oo...oo...Oo+OOo...oooOOoo...ooO++Ooo...oooOooo...oo+OOoo...ooooXoo...oo+OOoo...oXoooXo...oo+OOoo...oXoooXo...oo++OOXXXoooooXo..XoOO++++++OOo...oOO++++++++++OOooXooO+++++++++++++++OOo..XoO++++++++++OOoXXXXXoOO++++++++++++++++++++++++",
+"+OoooXXXoooooXXXXoO++OooXXXoooooo...ooO+OOOoX..XoXooXoXXXOO+++OoXoXXXXooXo...oo++OOo...oo...ooX..oO++OoX..oooOoOo...ooO+OOoo.X.ooOOOooX..oo++Ooo...oooXooo...oo++OOO...XXoooXX...oO++OOO...XXoooXX...oO++OoXXXXoXooXX...oO++++++++OO.X.oOO+++++++++OOooXoXooO++++++++++++++OOO...oOO++++++++OOoXoXXXXXoO++++++++++++++++++++++++",
+"++OoooXXooooooooXXO+OOo...oooooooXXXooO++OOoXXXoooooooXXXOO+++OOXXXoooooooXoXOO++OOo...oo...oo...oO++OoXXXooOOOOoX..ooO++OOoXXXooOOOooXXXOO++Ooo...oX...oo...oo++OOOooo..XXX..oooOO++OOOoooXXooo..oooOO++OOooXooooo..oooOO+++++++OOo...OOO+++++++++++OoXoXoOO++++++++++++++OOo...OOO++++++++OOo..oooX.Oo++++++++++++++++++++++++",
+"+OOoooXXooOoooXoXXO+OOo...ooOOOOOXXXXXO++OOOXXXXooooXoXXXoO+++OOXXXXooooooXXooO+++OoX..oo...oo..Xoo+OOOXXXooOOOOo..XooO+++OOXXXoooOOooXXXoO++OOoX..oo...oo..Xoo+++OOooo..XoX..oooO++++OOoooXXooo..oooO+++OOoXoooooo..oooOO+++++++OOO...oO+++++++++++OOoo...oOO++++++++++++++OoX..oO+++++++++OOO..ooo..oOO+++++++++++++++++++++++",
+"++OooXXXooOoooXoXoO+OOo...ooOOOOooXXooO++OOoXXXoooooooXXoOO+++OOXoXoXoooOooXooO++OOoX..oo...oo...OO++OoXXXoooOOOO...oOO++OOoXXXooOoOooXXXoO++Ooo...oX...Xo...oO++++Oooo..XXX..oooO+++++OoooXXooo..oooO++++Ooooooooo..oooO++++++++OOoX..oOO+++++++++++OOo...OOO+++++++++++++OOo..XoOO++++++++OooX.oooX.oOO+++++++++++++++++++++++",
+"+OOoooXXooOoooXXXXo+OOoX..oOOOOOOXooXXo+++OOXXXXXXoo..XXooO+++OOooo.....XooooOO++++OoOooo...oOooOOO+OOOXXXooOOOOo.X.oOO+++OOooXoooOooooXoOO++OOo...XX...XX..XoO+++++Ooooo...oooOO+++++++OOoXX...XXoOO++++++OooooXXXXXooO++++++++++Oo.X.oO+++++++++++++OOoXXooO++++++++++++++OO...oO++++++++OOOoooOOoooOoO+++++++++++++++++++++++",
+"++OoooXXoooooXoXooO+Ooo..XoOO++OOoXoXoO++OOOXXXoXoXo..oXoOO+++OOooo.....oXooooO+++++OOooo...ooOOOO+++OoXXXooOOOOO...oOO+++OOXoXXooOooXXXooO++OOoX..oX...Xo...oo++++++OooX...XooOOO++++++OOOXX...XooOO+++++++OOooXXXXXOOO+++++++++OOo.X.oOO+++++++++++++Oooo..OO++++++++++++OOo...OOO++++++++OOooooOOooOOO+++++++++++++++++++++++",
+"++Oooo.......XXXooO++oo..XoOOOOOoooXoXO+++OoXXX.....XXoooO+++++OOooooooX.....OO+++++OOOOo...ooOOO+++OOOXXXooOOOOoX..ooO++++OoooXXoooXXoooO+++Ooo.....oXo.....oO+++++OOooXXXXXooO+++++++++OOoo...ooO+++++++++OOoo..XooOO+O++++++++OOO...oO+++++++++++++++OOoX.oOO+++++++++++OOO...oO++++++++++++OOO+OOOOO++++++++++++++++++++++++",
+"++Oooo.......XXXoOO+OOo...ooOOOOoXXXooo++OOOXXX.....XXoOOO+++++OOOoooXoX..X..OO+++++++OOo..XoOO++++++OOXXXooOOOOo..XoOO+++OOoooXXoooXXoooO+++OOo.....oXo...X.oO+++++OOooXXXXXXoOO++++++++OOoo...OoOO++++++++OOoo...ooOOO+++++++++OOo...oOO+++++++++++++OOOoXXooOO++++++++++OOo...oOO++++++++++++++++++++++++++++++++++++++++++++",
+"++Oooo.......XXooOO++OO...oooooooXXXXoO++OOoXXX.....XXooOO++++OOOoooooXo...X.oO++++++OOOO...oOOO++++OOoXXXooOOoOoX..ooO+++++oooXXoooXXoooO++++OoX....Xoo....Xoo+++OOOoooXXXXXoooOO++++++++OoO...oOO+++++++OOOoXo...ooooOO+++++++++OoX..oO+++++++++++++++OOOXXoooO++++++++++OOO.X.oO+++++++++++++++++++++++++++++++++++++++++++++",
+"++OooXXXoooooooOO+++OOOoXX..ooooX...ooO+++OOXXXooooo..oooOO+++OOXoXooooooo...oO+++++++OoO...oOO++++++OOXXXooOOoOo...OOO+++++OoO..ooo..oOO++++OOoXXX..ooo..XXXOO+++OOooX..ooo..oooOO+++++++Ooo...OOO++++++++OoO..ooooooXooO+++++++OOo..XoOO+++++++++++++++OOXXoooO++++++++++OOo...Oo+++++++++++++++++++++++++++++++++++++++++++++",
+"+OOoooXXoooooOOOO++++OOXoo..oXoXX...ooO++OOoXXXooooo..oooOO++OOoXXXooooooo..Xoo++++++OOOo...ooO+++++O+ooXXooooooo.X.oo+++++++OoX.ooo..oOO+++++OOXXX..Xoo..XXXoO+++Ooooo..ooo..oXoOO++++++OOOoX..ooOO++++++OOoo..oXoooXXXoOO++++++OOO...ooO+++++++++++++++OOooXoXOO+++++++++OoO...oOO++++++++++++++++++++++++++++++++++++++++++++",
+"+OoXXX..XXoooOO++++++OOoXX..oXoXo...oOO++Ooo...XXooooX...oO++OOo...XooXoXo...oO++++++Oooo...oooO++++++OooXXXoooXoXXXOOO++++++OooX...oooO+++++OOoXXXXXoooXXXXXOO++Ooo. .XXoooXX...oo++++++OOoX...ooOOO++++OOoXX..XXoXo...OOO++++++OOo...OOOO++++++++++++++OOooXXXOO++++++++OOoo..XoO+++++++++++++++++++++++++++++++++++++++++++++",
+"+OOXoX..XoXooO+++++++OOOOoXX...XXoooooO+OOoo...XoOooXX..Xoo++OOo...XXXooXX...oO+++++OOooX...ooOOO+++++ooooXXXXXoXXXXoO+++++++OOXo...XoOOO+++++OOoXXXXoooXXXXXoO+O+oo...XXoooXX...oo+++++OOoXo...XooO+++++OOXoX..oXXoX...oo++++++++OoX..XoOO+++++++++++++++OOo...oOO++++++OOOoo...oOO++++++++++++++++++++++++++++++++++++++++++++",
+"+OOXXXX.XoooOOO+++++++OoooXX...XXoooooO++OooX..oXoOOoo...oO++OOo...XoXoXoX..XoO+++++OOooo...XooOO+++++OooXXXoXoXoXXoOO+++++++OOoo...XoOO++++++OoXXXXXoooXXXXooO+OOoo...XXoooXX...oo+++++OOooX...oooOO++++OOoXX..XoXoo...oO++++++++Oo...oXoOO++++++++++++++OOO.X.OO+++++++OOooX...OOO++++++++++++++++++++++++++++++++++++++++++++",
+"+OOoXXXXXXXooO+++++++++Ooo..XXX.....ooO+++ooXXXXXOooooXXXoo+++OoXoXXXXXXXXoooOO+++++OOoXXXXXXXoOO++++++OOooXXXXXXoooOO++++++++OooXXXooO+++++++OOoooooOOOoooooOO++OooXXXXXoooXXXXXoo+++++OOoXXXXXXXOoO+++++ooooXXXXXXXXXooOO++++++OOoX..XooOO++++++++++++++++oX.XoO+++++++OOooo...oO++++++++++++++++++++++++++++++++O+O+O+O+O++++",
+"+OooXXoXXXooO+++++++++OOoo..XXX.....ooO++OoooXXoXOOOOooXooo++OOOoooXoXXXXXoooO+++++++OOXXXXXoXoOO++++++OOOoXoXXXXoooO+++++++++OoooXXooO++++++++OooXoooOOoXoXoO+++OooXXXoXoOooXXXooo+++++OOooXXXXXXOOO+++++OoooXXXXXXXXXooO++++++++OOXXoXXooO+++++++++++++++OOooOOO+++++++OooXXXXooO++++++++++++++++++++++++++++OOOOOOOOOOOOOOO++",
+"++OOOOOOOoOOO++++++++++ooo..XXX...X.ooO+++OOOOOoOO++OOOOOOO++++OOoOoOoOOOOOOO++++++++OOOOOOoOOOO+++++++++OOoOoOOOOO++++++++++++OOOOOOO+++++++++OOOOOOOOOOOOOO+++++OOOOOoOOOOoOOoOOO++++++OOOOOOOOOOO++++++OOoOOOoOOOOOoOO++++++++++ooXXXXoOO+++++++++++++++++OOOO++++++++OOoXXXXXOOO++++++++++++++++++++++++++OOooooooooooooooo+",
+"++OOOOOOOO++O+++++++++++OoooooOoooooOO++++OOOOOO+O+++OOOO++++++O+OOOOOOOOOO+O++++++++++OOOOOO+++++++++++++OOOOOOOO+++++++++++++OOOO+O+++++++++++O+OO++O+OO++O++++++OOOOOOOO+OOOOO+O+++++++OOOOOOOO++++++++++OOOOOOOOOOO+O+++++++++OOoXoXooOO+++++++++++++++++OOO+++++++++OOooXoXoOO++++++++++++++++++++++++++OoOooXoXoXooXXXooo+",
+"+++++O++++++++++++++++++OOOOOOOoooOOO+++++++O++++++++++++++++++++++++++O++++++++++++++++++O++O++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OO+++++++++++++++++OOOO++++++++++++++OOOOOOOOO++++++++++++++++++++++++++++O+OOOoOoOO++++++++++++++++++++++++++++oooXoXoXoXooXoXoo+",
+"+++++++++++++++++++++++++OOOOOOOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++O+OOOO+++++++++++++++++++++++++++OOooXXXXXXXXXXXXXXX+",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++OOOOOOOO++++++++++++++++++++++++++OOOO+++++++++++++++++++++OOO+++++++++++++++++++OOO++++++++++OOOO+++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++OOO+++++++++++++++++++++++++++++++OOOOOOO++++++++++++++++++++++++++++++++++++++++++OOOOOOO++++++++++++++++++++++++++++++OOOOoooOOO++++++++++++++++++++++++OOOOOOO++++++++++++++++++OOOOOO++++++++++++++++OOOOOO+++++++OOOOOOO++++++++++++++++OOOOoOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++OOOoooO++++++++++++++++++++++++++++OOoo...oOO+++++++++++++++++++++++++++++++++++++++OOO..XooOO++++++++++++++++++++++++++++OOXoXX....OO+++++++++++++++++++++OOoo...oOO++++++++++++++++OOo...OO++++++++++++++OO...oo++++++OO...ooO+++++++++++++++OOo.....OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++OOooooOO++++++++++++++++++++++++++++OXo...ooO++++++++++++++++++++++++++++++++++++++++Oo..XXXOO+++++++++++++++++++++++++++OOooXX.....oO++++++++++++++++++++++OXo...ooO++++++++++++++++OooX.XOO++++++++++++++OO.X.ooO+++++Oo...XooO++++++++++++++Ooo.X.X.OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++Ooo...oOO+++++++++++++++++++++++++++OooXXXooO++++++++++++++++++++++++++++++++++++++O+OOooXXXOO++++++++++++++++++++++++++OOoo...ooooOO+++++++++++++++++++++++OooXXXooO++++++++++++++++OooXXXOO+++++++++++++OOOXXXooO+++++OOoooXXOO+++++++++++++++OOoo...OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++OOo...ooO+++++++++++++++++++++++++++OOOXXXooOOO++++++++++++++++++O+O+++++++++++++++OOOoXoXXXoO++++++++++++++++++++++++++OOoo...oooooOO+++++++++++O+O++++++++OOOXXXooOOO+++++++++++++OoooXXXoOO+++++++++++OOOoXXXooOO++++OOooXXXoOOO+++++++++++++OOoo...oOO++++++++++++O+O+O++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++Ooo...oOO+++++++++++OOOOOOOO++++++++OooXXXoooOOOO++++++++++++OOOOOOOOOOO+++++++++OOOOoOoXXXXOO+++++++OOOOOOOO+++++++++OOOooo...oooooO+++++++OOOOOOOOOOOO++++OooXXXoooOOOO+++++++++++OOooXXXOO++++++++++++OOooXXXooO+++++OOoooXXoOOOOOO++++++++++OOoo...oO++++++++OOOOOOOOOOOOOO+++++++OOOOOOOOOOO++++++++++++OOOOOOOO++++++",
+"++++++OOoXoXoOO+++++++++OOOoooooOoO+++++++OOXXXoXoooooOOO+++++++OOOooooooooooO+++++++OOooooXooXXXoO+++++OOOoooooooOOO++++++OOooXXXXXXXoooO+++++OOOoooooooooooO++++OOXXXoXoooooOO++++++++OOoXoXooOO++++++++++OOooooXooooOO+++++ooooXXooooooOo++++++++++OOo.X.oOO++++++OOoooooooooooooOO++++OoooooooooooOO++++++++OOOoooooooOOO+++",
+"++++++OOoXoXoOO+++++++OOOoooXooooOOO++++++OoXXXXoXXooooOOO+++++OOOooooXoXooooOO++++OOOoooXoXoXXXooO++++OOOoooXoooooOOO+++++OoooXXXXXooXooO++++OOOooooXoooXoooo++++OoXXXXoXXoooOOO+++++++OOOooXoXOOO+++++++++OoooooXoXooOO+++++OoooXXOoooooooO+++++++++OOo...OOO+++++OoooooXoXoXooooooOO+OOOoooooooooooOOO++++++OOOoooXoooooOOO++",
+"++++++OOOOoooO+++++++++OoXo.......oOO++++OOOXXX.......oXoO++++OOoXo..XXX.....oO+++OOoXo.......XXXOO+++OOooX..XXX..XXoO+++++OoXo.....XXXooOO++OOooX..XXX.....ooO++OOOXXX.......oooO++++++OooXX...oO++++++++++OooXXX.....OO++++OOoooXXooo..XooO++++++++++OO...oO++++++Ooo.............ooO++Ooo...XXXXX..oooO++++OOooX..XXX..XXoO++",
+"+++++++OOOOooO++++++++OOXXX......XoOO++++OOoXXX.......XXooO+++OooXX..XXX.....oO+++OooXX.......XXXoO+++OoXXo..XXX..oXXOO+++OOoXo.....XXXooO+++OoXXo..XXX.....XoO++OOoXXX.......XooO++++++OooXX...oOO+++++++++OoXoXX.....OO+++++OoooXXXoo..Xooo+++++++++OOoX..Oo++++++Ooo.............Xoo+OOoX...XXXXX..oooO++++OoXXo..XXX..oXXOO+",
+"+++++++++OOooO++++++++OOooXX..X...ooOO++++OOXXX.......XXXOO+++OOXXX..XXX.....oo+++OOXoX..X....XXXoO+++OOoXX..XXX..XoXoO++++OoXo.....XXXXoOO++OOoXX..XXX.....ooO+++OOXXX.......oooOO+++++OOoXX...oO+++++++++OOooXXXX.X..oOO++++OoooXXXoX..oXoO++++++++O+Oo...oOO+++++ooX.............XoO++ooo...XXXXX..XooOO+++OOoXX..XXX..XXooO+",
+"++++++++++++++++++++++OOoooXoXoo..ooo+++++OoXXXXXOoooo...oO++OOoX..ooooooo...oO++Ooo...oooooXXXXooO++OOo...oXooooX...OO++++OOOoooXXXoOOOOO++OOo...oooooXXXXXoOO+++OoXXXXoooooXXXXOO++++++OOoo...OOO+++++++++OOOOooooo.XoO+++++OooX.....oXoOOO+++++++++OOO..XoO++++++OOoXXXooXXXXXoooXXO++OooXXXXXoooooXXXOO++OOo...ooooooo...oO+",
+"++++++++++++++++++++++OoooooXoXo..oooO+++OOOXXXoXoOooo...oo+++oo...ooOOooo...oO+++OO...oooOooXXXXOO++OOo...XooooXo...oo+++++OOoXoXXoooOO++++OOo...oooooXXXXXoOO++OOOXXXXXoOoXoXXXoO+++++O+OOO...oO++++++++++++OOOOooo..oOO+++OOooo.....oooOO++++++++++OOo...oOO+++++OOoXXXoXoXoXoXXoXoo+++OoXXXXXoooXXXXXoO++OOo...oooOooo...oO+",
+"++++++++++++++++++++++OOXXX..XXX..ooOO++++OOXXXooooooo.X.Oo++OOo...oooOOoooooOO++Ooo...oooOoooXXXoO++Ooo.............oO+++++OOOoXoXXOOOO++++OooX..ooOOOooXXXoOO+++OOXXXooooOooXXXOO+++++++OoO...oOO+++++++++++++OOOoo.XoO+++++Oooo.....ooOO++++++++++++OoX..OOO+++++OOOXXXoXXXXXXooXXoo++OOOXXXoooOoooXXXOO++OooX..oooOOoo.X.oO+",
+"++++++++++++++++++++++OoXXX..XXX..oooO+++OOoXXXXoOOOOo...oo+++oO...oOOOOOOoooOO++OOO...ooOooooXXXoO++OOo.............oO++++++OOXoXXooOO+++++OOo...ooOooooXXXoO+++OOOXXXooOOoooXXXoO+++++++OOo.X.oO++++++++++++++++OOo..oO+++++Oooo.....oooOO++++++++++OOo...oO+++++++OoXXXooXoXoXoXoXXO+++OoXXXooOoOooXXXoO++OOo...oOOOoOo...oo+",
+"+++++++++++++++++++++OOOXXX..XXX..oooO++++OOXXXoooooOo...Oo++OooX..oOOOOOOoOoOO++OooX..OoOOoooXXXOO++OOo.............oO++++++OOoXoXooO++++++Ooo...ooOOoooXXXOO+++OOooXXoooOoooXXooO+++++++OOo...oOO++++++++++++++OOoo.XoOO++++Oooo.....ooOO+++++++++++OOo...oOO+++++OOoXXXXoXXXoXoXoXoO+++OooXXooOoOooXXooO++Ooo...ooOOOooX.XoO+",
+"+++++++++++++++++++++OOo...ooooo..oooOO++OOoXXXXXoOooo...oO+++Oo...ooOOOOOoooOO++OOo...oooooXXXXXoO++Ooo...XXoooooXXXoO+++++OOoXoXXooOO++++++OO...oooooXXXXXoOO+++OoXXXooOOOooXXXoO++++++OOoO...oOOO+++++++++++++OOoo..OO++++OOoooXXXXX..oOOO++++++++OOOoX..ooOO+++++OoXXXooXXXXXoXoXXo++OOoXXXoooOoooXXXoO+++OO...oooOooo...oo+",
+"+++++++++++++++++++++OOoX..ooooo..XooO+++OOoXXXXXooooX..XoO++OOo...oXoOOoOooooO++OOo...XooooXXXXXoO+++Oo...XXoXoXoXoooO+++++OOooXoXXoOOOO+++OooX..oXoooXXXXXOO+++OOoXXXoooooooXXXOO+++++OOOoo...oOOO++++++++++++OOoOo..oOO++++OooXXXXoX..ooOO++++++++OOoo...OOOO++++OOoXXXXoXXoXooXoXoo++OOoXXXoooOoooXXXOO++OooX..ooooooX...OO+",
+"+++++++++++++++++++++OOo...ooooo..oooOO++OOoXXXXXooooo...oo+++OO...oooooooooooo+++OO...XooooXXXXXoO++OoO...oXoooooXXXOO++++OOoooXXXooooOO++++Oo...oooooXXXXXoOO++OOoXXXoooOoooXXXoO+++++OOOooX..oooOOO+++++++OOOOOooo.XoO++++OooooXXXXo..oooOO++++++OOooo...oooOOO++OOoXXXooXXXoXXoXXXo++OOoXXXXoOooXoXXXoO+++Oo...Xoooooo...oo+",
+"+++++++++++++++++++++OOoX............oO++Ooo..........oXoOO++OOOoXX..........oo++OOOooX..........oo+++OOooX..........oO++++OooX.......oooO+++OOoXX.......XXooO+++Ooo.....ooo.....oo+++OOoXo.......oXoO+++++++OooooXoXXXOO++++Oo...Xoooo.....ooO+++OOooXX......oXoO++Ooo...XXoXX..XoX..o++Ooo.....ooo.....oo+++OOoXo.......oooOO+",
+"++++++++++++++++++++++OO.............OO++Ooo..........oXoOO++++oooo...X......oo+++OOXoo..........oo++++ooXo.........XOO++++OoXo.......XXoO++++oooo.......XXXOO++OOoo.....ooo.....oo++++OooX.......XooO+++++OOoooooXXXXXOO++++OO...XXooo.....ooO++++OooX.......XooO++Ooo...XXXXo..XXo..o++Ooo.....oOo.....oo++++oooX.......XXoOO+",
+"++++++++++++++++++++++OOoOoooooooooooOO++OoooooooooooooOOO+++++OOooooooooooooOO++++OOoOoooooooooooo++++OOooooooooooooO+++++OooooooooooooOO++++OooooooooooXXXoO+++OoooooooOOOooooooO++++OooooooooooooOO++++++OooXXXXXoooOO++++OOooooOoOoooooooOO+++OOooooooooooooOO++Ooooooooooooooooooo++OooooooooOOooooooO++++OOoOoooooooOoOO++",
+"+++++++++++++++++++++++OOoOoooooooooOO++++OOoooOooooooOOO+++++++OOOOoooooooOOOO+++++OOOoOoooOooooOO++++++OOoooooooOOO+O++++OOOooooooooOOO++++++OOOooXoXoXXXXOOO+++OOoooOoOOOooooooO+++++OOOoooooooOOO+++++++OoXoXXXXXoOO++++++OOooOoOOOoooooOO++++++OOOoooooooOOO++++OOooooOoOoooOooooO+++OOoooooOOOooooooO+++++OOOoOoooooOOO+++",
+"+++++++++++++++++++++++OOOOOOOOoOOOOOO++++OOOOoOOOOOOOO+++++++++++OOOOOOOOOOO++++++++O+OOOOOOOOOoOO+++++++OOOOoOOOOOO++++++OOOOoooooOOOOO++++++OOOoooooXoXXXOO++++OOoooOOOOOOOOOOOO+++++OOOOOoOOOOoOO++++++OOooXXXXXoOO+++++++OOOoOOO++OOoOoOO++++++OOOOOOoOOOoOO++++OOooOOOOOOOoOOOoOO+++OOOOOOOOOOOoOOOOO++++++O+OOOOOOO++++++",
+"++++++++++++++++++++++++++OOOOO+OOO+O++++++++O+OOOOOO+++++++++++++++OOOO+OOO+++++++++++OOOOOOOOO++++++++++++OO+OOOO+++++++++++O++O+OOOOO+++++++OOoooXXoXXXoXOO+++++O+O+OOO++OOOOOO+++++++++OOOOOOO++++++++++OOOOOOOoOOO++++++++O++++++O+OOO++++++++++O+OOO+OOO++++++++++OOO+OO+OOO+O+O++++++OOOOOO++O+OOOO+++++++++OOOOO+O++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++OOooXooXXXXXoOO++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOo+++++++++++++++OOOO+++++++++++++OOOo+++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOooOO+++++++++++++OoooO+++++++++++++OooOOO++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOooOO++++++++++++OOoooOO++++++++++OOOoooOOO+++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOooO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoXXooOO++++++++++++OO...OO+++++++++++OOoooXoOO++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OooooXOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OooXXooOO++++++++++++OO...OO++++++++++++OoXXXoo+++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++oooXXoOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OO...ooO++++++++++++OOoX..oOO+++++++++++OOO...OOO+++++++++++++++++++++++++++++++++++++++++++++",
+"+++OOOOOOOOOOO+++++++++++OOOOOOOOOOOO++++++++OOOOOOOOOOO++++++++++OOOOOOOOO+++++++OOoooXXoOOOO+++++++++OOOO+++++OOOO+++++++OOOOOOO+OOOOOOO+++++OOOOO++++OOOOO+++++++OOOOOO+OOOOOO++++++OOOOO++++OOOOO+++++++OOOOOOOOOOOO+++++++++OOo...OOO++++++++++++OOo...OO++++++++++++Ooo...oO++++++++++++++++++++++++++++++++++++++++++++++",
+"++OOOoooooooOOOOO++++++OOOOOoooooooOOO+++++OOOOOoOOOoOOOOO++++++OOOOooooOOOOO++++OOOoooXXooooOOO++++++OOOOOOO+OOOOOOOO++++OOOoOoOOOOOOooOOO+++OOOOOOOOOOOOOOOOO++++OOOoOOOoOOoOOOO++++OOOOOOOOOOOOOOOOO++++OOOOoooooooOOOO++++++++OoX..oO+++++++++++++OOO...oOO++++++++++++OO...oOO+++++++++++++++++++++++++++++++++++++++++++++",
+"OOoo.X.oo.X.XXooO+++++OOooXXX.XXo..XooO++++OoXXX.ooo..XXoOO++++OOoXo.X.XoXooO+++++Oo.......X..OoO+++OOoo...ooOOO..oXoOO+OOoo.....ooo..X..oo+OOoo...oXOOooX...oo++OOO.....ooo....XoO+OOoo...ooOOOoX...oo++++OoXo.X.X.X.XooO+++++++OOo...oOO++++++++++++OOoX..oO++++++++++++OOoX..OO++++++++++++++++++++++++++++++++++++++++++++++",
+"+Ooo...XX...XXoooO++++OoooXX...XX...XoO+++OOXoX..XoXX.XXXOO++++OOoXX...XXXXXOO+++OOo..........oOO++++Ooo.X.OoOOoX.XoXOO++Ooo..X..ooo.....oo++Ooo...XoooOXo...Xo+++OO.X.X.ooo.X...OO++Ooo...Xoooooo...Xo+++OooXX.......XXXOO++++++OOO.X.oO++++++++++++++Oo.X.oOO++++++++++++Oo...oOO+++++++++++OOOOOOOOO+O+++++++++++++++++++++++",
+"OOoo...XX...XXoooOO++OOoooXX..XXX...ooO++++OoXX..oXo..XXXOO++OOOooXX...oXXoXOO++++Oo........X.oOO+++OOoX...ooOOo..XXoOO+OOoo.....ooo...X.Xo+OOoX.X.XooooXo..XXo++OOO.....ooo...X.oO+OOoXX..XooOoXo..Xoo+++OOoXX.......oXoOO++++++OOo...Oo+++++++++++++OOo...OOO+++++++++++OOO...oOO++++++++OOOOOOOOOOOOOOO++++++++++++++++++++++",
+"+OooX....oooXX...oO++OO...XXooo..X..ooO+++OOooo.....ooXXooO+++OoXo..oooXXXXXOO++++OOoXoXXoooooOOO++++OooX..oooOoooXXXoO++OooX..ooooooo...oo+OOoo...ooXXXoo...oo+++OOooo..ooo..XooOO++Ooo...XooooXo...oo+++OoXXXooXoo..oooO+++++++Ooo...oOO++++++++++++OOO...oO++++++++++++OOo.X.ooO++++++++Oooo..oXoooXXoOO+++++++++++++++++++++",
+"OOoo..X..oooXX..XOO++OO...XXoXo....Xoo+++++OOoo.....oooXoOO++OOoXX..oXoXXXXXOO++++OOoXoXXoooooO++++++OOo..XoooOooXXXXOO++OOo...XooooXX..XoO++Ooo...ooXXXoo...oo+++OOooo..ooo.XoooOO+++OoX..oXooOXo...oO++++OoXXXXoXX..oooO++++++OOoo...OOO++++++++++++OOo...oOO+++++++++++OOo...ooO+++++++OOooo..XXoooXXXOO+++++++++++++++++++++",
+"++OOXXXoXooooO...oO+OOo.X.oooooXoXXXoOO+++++OOo..ooooooOOO+++OOooo.....oooooOO++++OOoooXXoooOO+++++++OOoXXXooOOoooXXXoO++OOOoooXXooooXoXoOO+OOOoXXXoX...XoXXXoO++++OOoooo...oXooO++++OOoooo..ooo..oooOO+++OOooooo...XooOO++++++++OOo...oO++++++++++++++OO.X.oO++++++++++++OOO...oOOO+++++OOo...oo.....XXooO+++++++++++++++++++++",
+"+OOoXXXXooOooo...oo++OO...ooOooXoXXXOOO+++++OOo..oooOOOOOO+++OOooo.....XooooO+++++OOooXXXoOO+OO++++++OOOXXXooOOOooXXooO+++OOooXXXoooXXoooOO++OOoXXXXo...oXXXXOO+++++OOooX...oooOO+++++OOoXo..ooo..XooOO++++OOoooo...oooOOO+++++++OOo.X.oOO++++++++++++OOo...Oo+++++++++++++OoX..oOO+++++++Oo...Xo.....oXooO+++++++++++++++++++++",
+"++OOXXXooooooo...oO+OOoX..XXooo..XXXoO++++++OOO..oooOOO+++++++OoooX....oXoooOO+++++OoooXXoOOO+++++++++OoXXXoooOoooXXXoO+++OOooooXoooXXXooO++++OOXXXoX...ooXXXoO+++++OOooo...XoOOO+++++++OOo..oXo..ooOO+++++OOooXo...XooOO++++++++OOO...OO+++++++++++++OOO...oOO+++++++++++OOo...oO++++++++OO...Xo.....XXoOO+++++++++++++++++++++",
+"+OOoXXX..oooXX...oO++Oo.X.XXXoX..XXooO++++++OoO..oooOO+++++++OOooXooXoX..XXXOO++++OOoooXXooOOOOO++++++OOXXXoooOOooXXXoO++++Oooo..ooo.XoOOO++++OoXXXXX.....XXXOO+++++OOoXo...oXoOO+++++++OOOoX...oooO+++++++OOoo..XXoooooOO+++++++OOo...oOO++++++++++++OOo.X.OOO+++++++++++OOO...Oo++++++++OOoOoOooOoooooOO++++++++++++++++++++++",
+"+OOOXXX..oXoXX..XOO++OO...XXoXo..XXXoO+++++OOOo..oooOOO++++++OOoooooXXX..XXooO++++++oooXXoooooOOO++++OOOXXXoooooXoXXXoO+++++OOoX.ooo..OoO++++OOOXXXXX.....XXXOO++++OOOOXo...XooOOO+++++++OoXX...XXOOO+++++OOOoo..XXXoooooO+++++++OOO...oO+++++++++++++OOO...oO++++++++++++OOoX..oOO+++++++++OOoOOOoOoOOOO+++++++++++++++++++++++",
+"++OoXXXXX...XXoooOO+O+OOooXXXXXXXXXooOO++++Oooo..oooooOO+++++OOXXXXXoooXo...oO+++++Oooo..ooooXoooO++++OOoXXXXoooXX..Xoo+++++OOooX...XooO++++++OOooX..ooo..oooOO++++OooX..ooo..oooO+++++++Oooo...ooO+++++++OOoXo..ooXXoXXoo+++++++OOo.X.oOO++++++++++++OOo...OOO+++++++++++OOo...OOO++++++++OO+O+O+OOOOO+O+++++++++++++++++++++++",
+"++OOXXXXX...ooooOO++++OOooXXXXXXXXXXoO++++OOooo..XoXooOOO++++OOXXXXXXoXoX...oOO+++++OOo..XoXXXXXoOO+++OooXXXXXooXX...oo++++++OooX...XoOOO+++++OOooo..ooo..oXoO++++OOoXo..ooo..XXoOO+++++OOOXXXXXoOO++++++++ooXX..oXooXXXXOO+++++++OO...ooO+++++++++++++OooXXoO++++++++++++OOo.X.oO++++++++++++++++++++++++++++++++++++++++++++++",
+"+OOoXXXoooOoooOOO+++++++OOOOoooooXXXOOO+++OOoXo..oXooooOO++++OOXXXXXXoXoX...oO+++++OOoo..ooXXXoXoO++++OOoXoXXoXoXX..Xoo++++++OOoo...XoOO++++++OOooo..ooo..oooO++++OoooX..ooo..oXoOO++++OOoOoXXXooOO+++++++OOXoX..oXXoXXXXOO+++++++OO..XoOO+++++++++++++OOXXooO++++++++++++Ooo..XoO++++++++++++++++++++++++++++++++++++++++++++++",
+"+OOoXXXooooOOO+++++++++++OOOooooXXXXoO++++OO.....XXX..oOO+++++oooXXo.....oooOOO+++++OOOoo..XXXooOO+++++OOOoXX...Xo...oo+++++++OooXoXooO++++++++OoooXoooooXoooO++++OO..XXXoooX....OO+++OOOooXoXXXOO++++++++OOoXo.......XooOO++++++OOoX..ooOO++++++++++++OOoXoOO+++++++++++OOOo...OO++++++++++++++++++++++++++++++++++++++++++++++",
+"+OOoXXXXooOoO+O+++++++++O+OOOooooXXXoOO+++OOX.X..XXXX.OOO+++++OoooXo.X.X.oooO++++++++OOoo...ooooOO+++++OOOOXo.X.oXX.Xoo+++++++OOOXXooOO+++++++++OOoooOOooooOO+++++OOX..XXooo.X.X.OO+++OO........OO++++++++OOooXX.X.X.XXooO+++++++++OoooooOO+++++++++++++OOOOO++++++++++++OooooooOO++++++++++++++++++++++++++++++++++++++++++++++",
+"+Ooo.....XooO++++++++++++++OooX.....ooO+++OOOOoOoOoOoOOO++++++OOOoOoOoooOOOO++++++++++OOOOOOoOOO+++++++++OOOoOoOoOoOOO+++++++++OOOOOO++++++++++++OOOOOOOOOOO++++++OOOOOOOOOOOOOoOO++++OO.X......oOO++++++++OOOOoOoooOoOoOO+++++++++OOOoXoOOO++++++++++++O+OO+++++++++++++OOXoOoO++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOoo.....ooo+O+++++++++++++Oooo.....XoO++++OOOOOOOOOOO+++++++++O+OOOOOOOOO+++++++++++++OOOOOOO+O+++++++++++OOOOOOOOOOO++++++++++OOO+O+++++++++++++O+O++++++++++++++OOOOOOOOOOOOOOO+++++OooooooooO+++++++++++OOOOOOOOOOO++++++++++++OOOOOOO+++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++++",
+"+OoooooooooOO++++++++++++++OOooooooooOO+++++++O+++O+++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++O+O+O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooooooOOO++++++++++++++O++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++OOooooooOO++++++++++++++++OOOoooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++oooooooO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++OOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++OOOOOO++++++++++++++++++++++++++++++OOOOO+O+OOOOO+++++++++++OOOOO+++++++++++++OOOOooOoOOO+++++++++++++++++++++++++++++++OOOO+O+++++++++++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+O++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++OOXoXOO+++++++++++OOOooooOO+++++++++++++++++++++++++++OOoooooOOOooooOO+++++++++OOXoXOO+++++++++++OOoo.X...oXoO+++++++++++++++++++++++++++OOOOoooOOO++++++++++++OOoOoOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOoooOOO+++++++++++OOOOOOO+++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++OOOXXXOOO+++++++++OOoooooooOO++++++++++++++++++++++++++OOoooooOoOoooooOO++++++++OooXXOO++++++++++OOoXo..X..oXoOO++++++++OO+OOOO++++++++++OOOoooooooOOO+++++++++OOOooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOoooooooOOO++++++++OOOOooOOOO+++++",
+"++++++++++++++++++++++++++++++++++++++++++++++OOoo...ooOO+++++++OOOX..X...ooO+++++++OOOO+O+O+OOOO+++++Oo.....ooo.....oO++++++++Oo...OO++++++++++Ooo..oXoXXXXXOO+++++OOOooOOOoXO+++++++OOooo....X..oooO+++++++OOooooo..OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOooo....X..oooO+++++++OoXX.X..oOO++++",
+"+++++++++++++++++++++++++++++++++++++++++++++OOOoo...oooOO++++++OOo.......oOO++++++OOOoOOOOOOOOoOO+++OOo.....ooo.....oO+++++++OOoX..oOO++++++++OOoo..XooXoXXXOO+++++OOoooOOOXoOO+++++++Oooo.X.....XooOO++++++OOXXXoXX.OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Oooo.X.....XooOO+++++OOXo....XooO++++",
+"+++++++++++++++++++++++++++++++++++++++++++++OOooo...oooOO++++++OooX...X..ooO++++++OooooooooooooOO++++Oo.....ooo.....oO++++++++Oo...OO+++++++++Oooo..oXoXoXXXOO+++++OOOooOOOXoO++++++OOOoXo....X..oooOO++++++OOoXoXo..OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOoXo....X..oooOO+++++OOoX.X..XoOO++++",
+"++++++++++++++++++++++++++++O+OO++++++++++++Oooo.......ooO+++++Oooo..oooooOOO+++++OOoXo..X.X..XoXOO++OOOooX..ooo..oooOO+++++++OOO...oOO+++++++OOooo..oXooooooOO+++++OOOoOOOOOoO+++++++Oo...Xo...XX...oO+++++OooXXXXX..oOO++++++++++O+O+O+OOO++++++++OOOOOOOOOOOOO+++++++++++++++++++++++++Oo....X...XX...oO++++++OoooooooOOO++++",
+"+++++++++++++++++++++++++++OoooooO+++++++++OOooX...X...ooo+++++OOoo.XooOoOOOO+++++OooXX.......XoXOO+++OOooX..ooo..XooOO++++++++OoX..OOO+++++++OOoXX..XoXoooooO+++++++OOOOOOOOOO+++++OOOoX..XX...oX..XoO+++++OOooXXXo.XoOO++++++++OOOOOOOOOOOOO++++OOOoooooooooOOOO++++++++++++++++++++++OOOoX.......oX..XoO++++++OOooooooOOO++++",
+"+++++++++++++++++++++++++++OOooooO+++++++++OOXXXoooooXXooOO+++OOoooXXoOoOOO+++++++OOXoXXXoooXXXXoOO++++Oooo..oXo..oooO++++++++OOo...oO+++++++OOoX..oX...XXoooO++++++++++++++O++++++++OXoXXX..oooXXoXoXo+++++oooXXooo..oOO++++++++OoooXXooXXXooO++++oXX.X..X.X....OO++++++++++++++++++++++OoXoXo..ooo..oXoXo++++++++OOOOOOO++++++",
+"++++++++++++++++++++++++++O+oOoooOO++++++++OOXXXXoooooXooO+++++OooXXXooOOO++++++++OOXXXoXXooXXXXXOO+++++OOo..oXo..oOOO+++++++++OO...OO+++++++OOo...Xo...XXoooOO+++++++++++++++++++++OOooXXo..XXoXXXXoXo++++OOooXXoXo..oOO++++++OOooXXoXooXXooo+++OOo...........X.oO+++++OOOOOOOOOOO+++++OOoXoXo..XXo..XXoXo+++++++++++++++++++++",
+"++++++++++++++++++++++++++OOooXooO++++++++OOOXXXXooOoXoOoOO+++OooooXXoooOOO++++++OOooXXXXoXoXXXXooO++++OOOo..XoXX.ooO+++++++++OOoX..oOO++++++OOoX..oX...XXoooOO+++++++++++++++++++++OOXoXXX..oXoXXoXoXo+++++oooXXooo..ooOO++++OOOoXoXXXooXXXooO+++OO.X.X....X....oO++++OOOOoooooooOOO++++oooXoX..oXo..oXoXo+++++++++++++++++++++",
+"+++++++++++++++++++++++++++OXooXXOO++++++++OooXXooooOooOO+++++Oo......X.oo++++++++OOXXXoXoooooXXXOO+++++OOOXX...XXOoO++++++++++OOoooOO+++++++OOo...XXoXoXX...oO+++++++++++++++++++++OOXXXXX..oooooXoXXo++++OOooXXXXXXXooO+++++Oooo..oooXXXXXOOO++++Ooooooooooo..Xoo+++OooXX.X.X.X...OO++OOXXXoo..XXXXXoXoXX+++++++++++++++++++++",
+"++++++++++++++++++++++++++OOoXXoooO+++++++OOoXXXXooOooOoOO++++OO.......XooO+++++++OOXXXoooooXoXXXoO+++++OOooX...XXoOO++++++++++OoooooO++++++++OO...XXoXoXX...oO+++++++++++++++++++++OOoXXoX..oooXoXooXX+++++OOoXXXXXoXooOO+++OOooo..oooXXXXXoO++++OOOooooooooo...oO+++Oooo........X.OO+++oooXoX..XXXXXoXoXo+++++++++++++++++++++",
+"+++++++++++++++++++++++++OOOXoXXXOO++++++++OOoXXXXoooXooOO++++OOooo..oXooOO+++++++OOoXXXXXooXXXXoOO+++++OOoXX...oXooO++++++++++OoXXXOO+++++++OOOoooXX...XX..XoO+++++++++++++++++++++OOoo..........XXXoo++++OoooX......ooO++++Oo...XXoXo..oooOO++++++O+OOOOoooo..XoO+++OoooooooooooooO+++OOooXXX..ooXXXXXXoo+++++++++++++++++++++",
+"++++++++++++++++++++++++++OOXoXXXOO++++++++OOXXoXXXooXXooOO+++Ooooo..XoooOO++++++OOoXXXXXooXXXoXXoO+++++OOooX...XXOoO++++++++++OOXXXoOO++++++++OOooXX...XX..XoO++++++++++++++++++++++OooX..X......XXXoo+++++Ooo.X...X.ooOO+++OO...oXoXo..ooooO+++++++O++O+OOOO...oo++++OOoooooooooooOO+++OooXXX..XooXXXXXoo+++++++++++++++++++++",
+"+++++++++++++++++++++++++OOo.....oOO+++++++OOoXXXXoooXoooO++++OOooX..oXooOOOO+++++OOoXXXXXoXXXXXoOO++++OOOoXX...oXoOO++++++++++OOXXooO++++++++O+OOoooooo..XXXOO+++++++++++++++++++++OOoo......X...XXXoo+++++OOo...X..XooO++++OO...XoXoX..oooOO+++++++++++++OOOX.XoO+++OOOOooooooooOO++++OOooXXX..oXoXXXXXoo+++++++++++++++++++++",
+"++++++++++++++++++++++++++OO.....oO+++++++++OOoOXX ..XXoOO++++OooXo..oooooooOO+++OOOXoXX......XoXOO+++++OOooo...ooooOO++++++++OOo...OO+++++++++OOOoOooXo..XXXOO+++++++++++++++++++++++OooXXXXXXoXXXXoOO+++++OOOoooXoooOOO++++OOooo..oooXXXXXoOO+++++++++++++OOoooOO+++++OO+OOOO+O+OO+++++OOooXo..XoX..XXXOO+++++++++++++++++++++",
+"+++++++++++++++++++++++++OOoX....oOO++++++++OOOoXX...XXOOO++++OOooX..oooooooOOO+++OOoXX..X.X..XoXOO++++OOOooX...oooOO+++++++++OOO...oOO+++++++OOooXooooo..oooOO+++++++++++++++++++++++OOoXoXXXXXXXXXXOO+++++OOOoooooooOO+++++OOooo..XoXXXXXXOO++++++++++++++O+oOoOO+++++++++++O+O+++++++++OOXXX..ooo..XoXOO+++++++++++++++++++++",
+"++++++++++++++++++++++++++Oo.....OOO+++++++++OOOOo...ooOO+++++Oo.........X...oO++++OooooooooOoooOO+++++OOoo... ...ooO+++++++++OOo...oO++++++++OOXoXooooo..oooOO+++++++++++++++++++++++OOooooo.X.XooOoO+++++++O+OOOOOOOO+++++++OOooXoXXXooXXXooO++++++++++++++++O+++++++++++++++++++++++++++OOOooX...XoooOO++++++++++++++++++++++",
+"++++++++++++++++++++++++++Oo.....oOO+++++++++++OOo...OOO+++++OOo......X......OO++++OOOOOOOOOOOooOO+++++OOooX......ooO++++++++++OO.X.oOO++++++++ooXXooooo..oooO+++++++++++++++++++++++++OOOoXo...oXoOOO+++++++++++OO++++++++++++OOOoXoXoooXXXooO++++++++++++++++++++++++++++++++++++++++++++OOoooo...oXooOO++++++++++++++++++++++",
+"+++++++++++++++++++++++++OOO.....oO++++++++++++OOoX..oOO++++++Oo..........X..oO+++++OOOOOO+O+OOOO+++++++OOo......XooOO++++++++OOo...OO++++++++OOXXX.......oOO+++++++++++++++++++++++++++OOOoo.X.ooOOO+++++++++++++++++++++++++++OOooXoXoOXoXoOO+++++++++++++++++++++++++++++++++++++++++++++OOOXoX..ooOOO+++++++++++++++++++++++",
+"++++++++++++++++++++++++++OO.....OOO++++++++++++OOooOOO+++++++OOooooooooooooOO+++++++OO+++++++++++++++++OOOoooooooOOO++++++++++OO...oO++++++++OOoXX...X.X.OoO++++++++++++++++++++++++++++OOOOoOoOoO++++++++++++++++++++++++++++++OOOOoOOOoOOOO+++++++++++++++++++++++++++++++++++++++++++++++O+OoOOooOO+++++++++++++++++++++++++",
+"+++++++++++++++++++++++++OOOoXoXooO++++++++++++++OOooO+++++++++OoooooooooooOoOO+++++++++++++++++++++++++OOOoooooooOO++++++++++OOO...OOO+++++++OOooooooooooOO+++++++++++++++++++++++++++++++OOOOOOO++++++++++++++++++++++++++++++++OOO+OOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+OO++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++OOooXooOO++++++++++++++++++++++++++++++OOOOOOOoOOO++++++++++++++++++++++++++++++OOOOOOOOO++++++++++++OOoooO++++++++++OOoooXoooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++OOoooXoO++++++++++++++++O++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++OO+++++++++++++++++OOoOOO++++++++++OOooooooOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++++++OOoOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoO+++++++++++++++OOOO+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+O+++++++++++++++++O+O++++++++++++++++OOOO+++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++OOOOO++++++++++++++OOOOOOOO++++++++++++++++++++++++++++++",
+"+++++++OOoOOOO++++++++++++++++++++++++++++++++OOoOoOO+++++++++++++OOoOoOO+++++++++++++++++++++++++++++++++++++++++++++++++++++OOoOoooOooOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+++++++++++++++++++++++++++++++++++++++++++++++++OOoooooO++++++++++++OOoooooO++++++++++++OooXXoXOOO+++++++++++++++++++++++++++++",
+"+++++++OOoooOO++++++++++++++++++++++++++++++++OOooooOO++++++++++++OOooooOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOooooooooooO+++++++++++++++++++++++++++++++++++++++++++++++++OOOoOO++++++++++++++++O+O++++++++++++++++++++++++++++++ooXXXooO++++++++++++ooXXXooO++++++++++OOoXoXXXooOO++++++++++++++++++++++++++++",
+"+++++OOOoooooOOO+++++++++++++++++++++++++++++OOooooooOO++++++++++OOooooooOO+++++++++++++++OOO++++++++++++++++++++++++++++++OOOoooooooooooO++++++++++++++++++++++++++++++++++++++++++++++++OOooooOO++++++++++++OOOOOOOO++++++++++++++++++++++++++OOooXoXoOO++++++++++OOooXoXoOO+++++OOO++OooXXoXXoooO+++OOO++++++++++++++++++++++",
+"+++++OOXXoooXXOO++++++++++++OOoOO+++++++++++OOoXoooXXoOO++++++++OOoXoooXXoOO++++++++++++OOOoooO+++++++++++++++++++++++++++OOoXo... ......oO++++++++++++++++++++++++++++++++++++++++++++++OOoo...OO++++++++++++OooXoXooO+++++++++++++++++++++++++++oo...ooO++++++OOO+++oo...ooOO+++OOOoo+OooooXoXoooOOOOOooo++++++++++OOOO+++++++",
+"+++O+OOXXXoXXXOOO++++++++++OOooOO+++++++++++OOXXoXoXXooO++++++++OOXXoXoXXooO+++++++++++OOoooooO+++++++++++++++++++++++++++OooXX.........XoO++++++++++++++++++++++++++++++++++++++++++++++OooX...OO++++++++++OOOooXoXoooO++++++++++++++++++++++++OOOo.X.ooO+++OOOOOO+OOOo.X.ooOO+OOooooo+OooXoXoXXooOOOOOooO++++++++++OoXXO++++++",
+"++++oooXXoooXXooO+++++++++OOO...OOO++++++++++OoooooXooOO+++++++++OoooXo..OoO+++++++++++OOXoXoOO++++++++++++++++++++++++++Ooo...oo...XXoooOO+++++++++++++++++++++++++++++++++++++++++++++++OOo...oOO+++++++++OOoXXoooXXoOO++++++++++++++++++++++++OOoXXXooOO+++oooXo++OOoXXXooOOOOOooXoo+OOoooX..oooOooooXoo+++++++++OOXooOO+++++",
+"++++OooXXoooXXooo+++++++++OOo...oOO+++++++++OOoooXoXXoOO++++++++OOooXoo..oOO+++++++++++OOXXXoOO++++++++OOO++++++OOO++++++OOo...oo...XXoooOO+++++++++++++++++++++++++++++++++++++++++++++++OOo...oO+++++++++OOooXXoooXXooO++++++++++++++++++++++++OOoXXXooOOOOOoooXo++OOoXXXooOOOooXXXoo+OOooXo..ooooooooXXO+++++++++OOoooO++++++",
+"+++OOooXXoooXXooO+++++++OOOoO...ooOOO++++++++OoooooXXoOO+++++++++OoooXo.XooOO+++++++++OOooXoOO++++++++OOOOOOO+OOOOOOO+++++oo...Xo...XXXooO+++++++++++++++++++++++++++++++++++++++++++++++OOOO..XoOO++++++++OOooXXoooXXoooO+++++++O+O++O+++++++++++OoXXXoooOOOooooXo+++OOXXXoooOOoooXXoo+OOoooX..XoooooXoXoO+++++++++OOoooOO+++++",
+"++++OOoXXoooXXoOO++++++Oooooo...ooooo++++++++OooXXXoooOO++++++++OOoooXoXXooO+++++++++++OOoooOO+++++++OooXXXOoOOO..oXoO+++OOo. .oX...XXoooO+++++++++++O+O++++++++++++++++++++++++++++++++++OOo...oOO++++++++OOooXXoooXXooO+++++OoOoOOOOoOOOO++++++OOoXXXoooOOooXXXoO++OooXXXooooooXooooO+OoooooXoXXXooXXXoOO+++++++++OooooOO+++++",
+"++++OOooXoXoXooOO+++++OOooooo...oooooOO+++++OOooXXXooOO+++++++++OOooXoXXXooOO+++++++++O+OOOOO++++++++OooXoXooOOOX.oXoOO+++oo...Xo...XXoooOO++++++++OOOOOO+++++++++++++++++++++++++++++++++OoO...oOO+++++++++oooXXoooXXoooO++++OoooOooooooOOO+++++OOOXXXoooooooXXooO++OOOXXXoooooXXXXooO+OooXoXoXXoXooXXooOO++++++++OOOXXXoO+++++",
+"++++++OoooooooOOO+++++OO.............OO+++++OOXXXXoXXoOO++++++++OO..ooXXXooO+++++++++++++OO++++++++++Ooo...ooOoooXXXXOO++OOoXXX.....XXoooO++++++++OOoXoXO+++++++++++++++++++++++++++++++++Ooo...ooO+++++++++OooXXXooXXoOO++++OOoXXXoooo..ooOO++++OoXXXXXXooXXXoXooO++OoXXXXXXXXXXXXXXXo+OooXXXXXoXoXXoXooOO++++++++OoOXXXOO+++++",
+"+++++OOOoooooOO+++++++OoX...........XoO+++++OOoXooXXoooO++++++++OoX.XooXXooOO++++++++++++++++++++++++OooX..ooOOOXoXXXoO+++OOoXo.....XXoooO++++++++OooXXXOO++++++++++++++++++++++++++++++++Ooo...ooO++++++++OOOoXXoXoXXooO++++OOXXXXXooo..oooO+++OOooXXXXXXXoXXXoXOo+OOooXXXXoXXXXXoXXoX+OOoXXXXXXoXXXXXooo++++++++OOoo...oOO++++",
+"+++++++OOoooOO++++++++OO.X........X..OO+++++OOXXXXoXooOO+++++++++OX.oooXXOoO+++++++++++++++++++++++++Ooo..XoooOooXXXXOO+++OOoXX.....XXXooO++++++++OooXoXOO++++++++++++++++++++++++++++++++Ooo...ooO+++++++++OOoXXoXoXXoOO++++OOoXXXXoXo..ooooO++OOooXXXXoXXXXXXoXOo+OOoXXXXXXXXXXXXXXoX+OOooXXXoXoXXXoXooO++++++OOOooX.X.OO+++++",
+"+++++++++O+++++++++++++OOoOoo...oooOOOO++++++OoooooooOO+++++++++OOoooooooOO+++++++++++++++++++++++++++OOXXXooOOOooXXXoO++++OOOooo...XXoooO+++++++++oo..XoO+++++++++++++++++++++++++++++++OOoooooooOO++++++++OoOXoXXXoooOO+++++Oooo..XXXoo...oOO++OOoOooooXXXoo...oO++OOOoooXoXoXoXooo..++OOoOooo...Xo...ooO+++++OOooXo...OOO++++",
+"+++++++++++++++++++++++OOOOoo...ooOoO++++++++OOooooooOO++++++++++OOoooooOOO++++++++++++++++++++++++++OOoXXXoooOoooXXooO++++O+OOoo...XXoooO++++++++OOoX..OO++++++++++++++++++++++++++++++++OooooooOO+++++++++OOooXoXXoXoOO+++++OOoo..oXXXX...oo+++O+OOooooXXXXo...oO+++OOOooXoXXoXoooo..+++OOOooo..XXo...OOO+++++OooXXXoooOO+++++",
+"+++++++++++++++++++++++++OOOoXXXoOOO++++++++++OOOOOOO+++++++++++++++OOOOO+++++++++++++++++++++++++++++OoXXXooOoOooXXXoO+++++OOOoo...XXoooO+++++++++OOoOOO+++++++++++++++++++++++++++++++++++OO+OOO+++++++++OOoo.......ooOO+++O+oOoXXXoXoo...ooO+++OOoOoXXoooXo...oo++OOOoooXXoooooXXXoo++++OOoXXXooXo...ooO++++OOXXXXXoooOOO++++",
+"++++++++++++++++++++++++OOOOoXXXoOOO++++++++++++OO++++++++++++++++++++++++++++++++++++++++++++++++++++OOXXXXXoooXX..XoO++++++OOOo...XXoooO+++++++++++O+O++++++++++++++++OOOOO++++++++++++++++O+++++++++++++OOoo......XooO+++++OoooXXXXXoo...ooO+++++oOoXXXXoXo...Oo+++OooooXooooooXXXoo+++OOOoXXoXoXo...oOO++++OOoXXXXoooOOO++++",
+"+++++++++++++++++++++++O+OoOoXXXooOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoXXXXXoXoXo...oO+++++++OoO...XXoooOO++++++++++++++++++++++++++++OOoXoOO++++++++++++++++++++++++++++++OoO.X.....oOo+++++OOooXXXXXXo...ooO++++OOooXXoooXo...oO+++OooXoXXOOOooXXXoo++OOOOoXXXooXo...ooO+++OOoXXXoooooXoOoO++",
+"+++++++++++++++++++++++OOooooooooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOXXXXXooXXX...oO++++++OOOo...XXXooO++++++++++++++++++++++++++++OOooXooO+++++++++++++++++++++++++++++++OOOoOOOOOoO+++++OOoXXXXooo..oooOO++++OOoXXoXXXoXX...oo+++OoXXXooOoOoXoXooo+++OXoXooXXoXX...ooO++++OOXXXooooOXoooO++",
+"++++++++++++++++++++++++ooooooXooooooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOXXX.....XXX..oo+++++OOOoo...XXoXoOO+++++++++++++++++++++++++++Ooo...ooO+++++++++++++++++++++++++++++++OOOOoOOO+++++++OOXXXXXooo..XooOOO+++OOXoXXooXoXo...oo++OOoXXXOoOOoXXoXooo++OOooXXooooXo...ooO++++OOoXXXXoooXXoooO+",
+"++++++++++++++++++++++OOooooXooXooooOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOooXX....XXX.X.oo+++++OOooo...XXXoXOO+++++++++++++++++++++++++++Ooo...ooO+++++++++++++++++++++++++++++++++O+OO+O+++++++OOoXXXXooo..oooO+++++OOoXoooXoXoX...oo++OOooXXOoOOOXXoXooo++OOXoXooXooXo...ooO++++OooXXXXoooXXooO++",
+"+++++++++++++++++++++O+oX.........X..OO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoXXXooooooOooOOO+++++Ooo..........oO++++++++++++++++++++++++++OOoo...ooO++++++++++++++++++++++++++++++++++++++++++++++OOoooooooooooOO+++++++OooooOoOooo...oo+++OOoOOOOOOoX.XoX..+++OooooOOOoooX..ooO++++OOoXoXXoXoXXoooO+",
+"++++++++++++++++++++++OO...X..X....X.OO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoXXXoooOOO++OOOO++++OOoo........X.Oo++++++++++++++++++++++++++OOoo...ooO++++++++++++++++++++++++++++++++++++++++++++++OOoooOOoOoOoOOO+++++++OOoOOOOOOOoX..oo+++OOOOOO+OOoX.oXoX.+++OOOOOOOOOoo.X.ooO+++++OOoo......XoOO++",
+"+++++++++++++++++++++++OOOooOoooOoOoOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOXXXooO++++++O+++++++OOo.X..X.X...OO+++++++++++++++++++++++++++OXo...ooOO+++++++++++++++++++++++++++++++++++++++++++++++++OOO+O+OO+++++++++++++O+++++OOOOOOO++++O+O++O++OoOOOoOO+++++OOOO+++OOOOOOO++++++OOOO.X..X..OOO++",
+"++++++++++++++++++++++++OOOOOOOOOOOO+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ooXXoOOO+++++++++++++OOOOoOooooOOOOO+++++++++++++++++++++++++++OoooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++OOOOOO++++++++++++++OOOO+O+++++++OOOOOOoOOOOO+++",
+"+++++++++++++++++++++++++++O+++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO+++++++++++++++++OOOOOOOOOOO++++++++++++++++++++++++++++++OooooOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++OOOOOOOOO++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoOoOO++++++++++++++++++++++++O+++++++++++++++++++++++++++++++++OOoooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOO+++++++",
+"++++++++O+++++++++++++++++++++++O++++++++++++++++OOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++OooOOO++++++++++++++++++OOooOO+++++++++++OOoooOO+++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++O++++++++++++++OOOOO+++++++++++++++++++++++++++",
+"++++OOOooO+++++++++++++++++++OOOooO+++++++++++OOOoooO++++++++++++++OOOOOOO++++++++++++++++++++++++++++++++OOooooOO+++++++++++++++++++++++++++++++++++++++++++++++++++OooooOO++++++++++++++++OOoooOOO++++++++++OOoooOOO++++++++++++++++++++++++++++++OOOooO++++++++++++++++++++OOooOO++++++++++OOOXoooO++++++++++++++++++++++++++",
+"++++OOoooOOO++++++++++++++++OOooooO+++++++++++OOooooOO+++++++++++OOooOoOOO+++++++++++++++++++++++++++++++++ooXoXOO++++++++++++++O+O+O+O+++++++++++++++O+O+++++++++++OOooooOOO++++++++++++++OOOooXoOO+++++++++OOooXooOOO++++++++++OOOOOOOO+++++++++++OOoooOOO+++++++++++++++++OOoooOOO+++++++++OOoXXooOO+++++++++++++++++++++++++",
+"++++OOooXOOO+++++++++++++++OOoooooO+++++++++++OOooXoOO++++++++++OOOoooooooO+++++++++++OOO+O+O++++++++++++OOoooXooOO+++++++++++OOOoOoOoOoOO++++++++OOOoOoOOOOO+++++++OOooXXXoOO++++++++++++OOooXooOO+++++++++OOooXXXXXOO+++++++++OOooOOOooOoO++++++++OOooXoOOO+++++++++++++++OOOooXoOO++++++++OOoOXXXooO+++++++++++O+O+O+O+O+++++",
+"+++++OoooXooO+++++++++++++OOooXXooO++++++++++OOXXXXXooO++++++++OOoo.X...XoOO++++++++OOOooOOOooO++++++++++OOoXooooo+++++++++++OooooooooooooO+++++OOOoOooooooOoO++++++OOooXXooOOO+++++++++OOOOoXoXXOOO+++++++OOOooXXXXXoOO+++++++OOOXXoooooooOO++++++++OooooooOO+++++++++++++OOooXooOO+++++++++OOXXooXoXOO++++++++OoOooOOOooOOO+++",
+"++++OOooXoXoOO+++++++++++OOOoXXXoOO++++++++OOOoXXXXXooO++++++++Oooo....XXXOO++++++++OoooooOoooO+++++++++OOOoXoXooo++++++++++OOOoooooooooooO++++OOOoooooooooooOO+++OOooooooXooooO+++++++OOooooXXooooOO+++++OOoooXoooXooooO+++++OOoooooooXooooO+++++++OOooXXoooO++++++++++++OOOooXoXOOO+++++++OOOXXXXoXXoOO+++++++OoOoooOoooooO+++",
+"+++OOooooXoXOO++++++++++OOoooooooO+++++++++OOoooooooooO++++++++OooooooXXooOO+++++++OoOoXooooooOO+++++++OOooooXXooOO+++++++++OO.X..........O+++OoooX........XXoO+++OOoooXoXoXooooO++++OOoOoooXXoooooo++++++OoooXXoXoXooooO+++++OoooXXoXoXooooOO+++++OOooooXXooOoOO+++++++OOOooXXXoooOO++++++OOoooooooXoooOO+++++OoooXooooXooooO++",
+"++++OooooXXooO++++++++++OOooXoXooOO++++++++OoooXXoXoooO++++++++OooXoXXoXooOO+++++++OOooXooooooO+++++++++OooXoXoXoO++++++++++OO............o++OOooo..X.......oXO++OOoooooXooXooooOO++++OoooXoXXXooooooO+++OOoooXoXooXXoooOO++++OoooXoXooXXoooOO++++++OooooXXooooOO+++++++OoOooXoXooooO++++++OoooXXoooXoooo++++++OOooXooooXooooO++",
+"+++OoooXooXooOO++++++++OOooXoXoooOO++++++++OoooXoXooooOO++++++OOoXoXoXXoooO++++++++OoooXXXooooO++++++++OoooXoXXooOO+++++++++OOoX...XooooXXO++OO...ooooOoOoXXXXO++OO.............oO+++OO.............oO+++Oo.............oO++OOO.............oOO++++OoooooXXXooooOO+++++OOooooXXXooooOO+++++OooooXoXoXXoooOO+++OOooXoXXooXXoooO++",
+"+++OooX.....ooO++++++++OooX.....ooO++++++++OoXX.....ooO+++++++OOoXX.....ooOO+++++++OooX.....ooOO+++++++OooX.....ooO++++++++OOooX...oXoooXXo++OoX..XooOOoooXoXoO++Oo.............oOO+OOo.............oOO+OOO.......... ..ooO++OO.............oO+++++OoXX.......oXoO+++++OoXX.......oXoO+++++OoXX.......XooO+++++OoXX.......XooO++",
+"+++OXoX.. ..ooOO++++++OOXoX.. ..ooOO++++++OOooX.... ooOO++++++OOooX... .ooO+++++++OOoXo.....ooO+++++++OOXoX.....ooOO++++++++OooX...XooooXoO+OOo.X.oooOOOooXoXoO++OOoooXXooooo...oOO+++OoooXXooooo...oOO++OOoooXXooooo...oO++OOOoooXXooooo...oo++++OOooo.......XooO++++OOooo.......XooO++++OOXoo.......XXoO++++OOooo.......XXoOO+",
+"++++OoooX...XoOO++++++++OoooX...XoOO+++++++OoOooX...oXOO+++++++OooooX...XooO+++++++OOooXX...XooO++++++++OoooX...XoOO+++++++OOO..XXXXXXXXooO++Oo...ooOO+OOOooooO++OOooXXXooooo...Oo+++OOoooXXooooo..XoO+++OOoooXXooooo..XoOO++OOoooXXooooo..XoOO++++OOoooo...oooOOO+++++OOoooo...ooooOO++++++Ooooo...oOOoOO+++++OOoooo...oOOoOO++",
+"+++OOOoXX...oXOO+++++++OOOOXo...oXOO++++++++OOoXo...XoOO++++++++OOoXo...oXOO++++++++OOooX...oXOO+++++++OOOoXX...oXOO+++++++OOoX.XXXoXXoXooO+OOo...oOOO++OOOOOOO++OOoooXXoooXoXoooOO+++OoooXXoooXXoooOOO+++OoooXXoooXXoooOO++++OoooXXoooXXoooOOO++++++OOoo...OoOOO+++++++OOOOo...oOO+O++++++O+OOoo...ooOOO++++++++OOOo...ooOO++++",
+"++++OOOoX...XXOO++++++++OoooX...XooO++++++++OOooX...XXOO++++++++OOooX...XooO+++++++OOOooX...XooO++++++++OOooX...XooO+++++++OOo..oXXXXXXooOO+OOo...ooO++++OOOOO++++OooXXXoooXXoooO+++++OoooXXooooXoXoOO+++OOoooXXoooXXoooOO++++OoooXXooooXoooO+++++++++OOo...oOOO+++++++++OOOo...oOOO++++++++++OOo...OoO++++++++++OOOo...OoOO++++",
+"+++++oo..ooo..oOO++++++++Oo..ooo..oOO+++++++OOo..ooo..oOO++++++++Oo..ooo..oOO+++++++Ooo..Xoo..oOO+++++++OOo..ooo..OOO+++++OoooXXXXX.....oO++OOoX.XoOO++++++O++++++OoooXXoooXXXooOO+++OOoooXXoooXXoooO+++++OoooXXoooXXoooO+++++OoooXXoooXXoooOO+++++++OOOO...oOO+++++++++++OOO...ooO++++++++++OOOO...oOOO++++++++++OOO...oOO+++++",
+"+++Oooo..ooo..oooOO+++OOooo..ooo..oooOO+++OOooo..ooo..oooOO++++Oooo..ooo..oooOO+++OOooo..ooo..oooOO++++Oooo..ooo..oooOO++++oooXXXoX.....oOO+Ooo...oOO+++++++++++++Oooo..XXX..ooOO+++++Oooo..XXX..ooOO+++++Oooo..XXX..oOOO+++++Oooo..XXX..oOO+++++++++O+OO.X.oO+++++++++++++Oo...oO++++++++++++OOO...oOO++++++++++++OoX..oO++++++",
+"+OOOXXX..XXX..XXoOO+++OOXXX..XXX..XoXOO+++OOXXX..XXX..XXoOO+++OOXXX..XXX..XoXOO+++OOXXX..XXX..XoXOO+++OOXXX..XXX..XXoOO++OOoXo.....oXooooOO++ooX..oOOOOOOOOO+O++++Oooo..oXX..oOOOO++++OooX..oXo..oOOOO++++Oooo..oXo..oOOO+++++Oooo..oXo..ooOOO++++++++OOo...OOO+++++++++++OOO...oOO+++++++++++OOo...OOO+++++++++++OOo...oOO+++++",
+"++OOooX..XXX..XXXOO+++OOXoX..XXX..XXoOO+++OOooX..XXX..XXXOO+++OOoXX..XXX..XXoOO++O+oooX..XXX..XXoOO++OOOoXX..XXX..XXXOO+OOOXoX.....XoXooOO++OOO...oooOOOOooooo++++Oooo..Xoo..oooOO++++Oooo..XoX..oooOO++++Oooo..oXo..oooOO++++Oooo..XXo..ooOOO+++++++++oO...oOO+++++++++++OOo.X.oOO+++++++++++OOoX..oOO+++++++++++OOo.X.oOO+++++",
+"+OOoXXX..XXX..XoXoO++OOOXXX..XXX..XXXoO++OOoXXX..XXX..XoXoO++OOoXoX..XXX..XXXoO++OOoXXX..XXX..XXXoO+++OoXoX..XXX..XoXoO++OOXXX.....XXoXooOO++OO.X.XoooooooooooO+++Oooo..oXX..ooooOO+++Oooo..XoX..ooooOO+++Oooo..XXo..ooooOO+++Oooo..oXo..oooOOO++++++OOOo...oOO+++++++++++OOo...oOO+++++++++++OOo...oOO+++++++++++OOo...oOO+++++",
+"+OOo...XXoXoXX...oO++OOo...XXoooXX...oO++OOo...XXooXoX...oO++OOo...XXXooXX...oO++OOo...XXoooXX...oO++OOo...XXXoooX...oO+OooX..ooXXoXoooooXO+OOOoXo..XXXXX...ooO++OOoooXXooooooooooO++OOoooXXooooooooXoO++OOoooXXooooooooXoO++OOoooXXooooooooXoO++++++OOooX..ooOO++++++++OOOoo...ooOO+++++++++OOoO...ooOO+++++++++OOoO...ooOO++++",
+"+Ooo...XXoXoXX...oo++Ooo...XXXXoXo...oO++Ooo...oXXoXXX...oO++Ooo...XoXooXo...oO++OoO...oXXXoXo...oO+OOoo...XoXXXXX...oO+OOo...ooXXXXooooXoO++OOooo..XXXXX..XooO++OooooXXoooXoXXoXXO++OOoooXXoooXoXooXoO++OoooXXXoooXoXooXoO++OooooXXoooXXXXoXXO++++OOOOoo...OoOOO+++++++OOOooX..OoOOO++++++OOOOoo...OoOOO++++++OOOOoo...OoOOO+++",
+"OOoo...XXoooXX...oo+OOoo...XXoooXX...oo+OOoo...XXoooXX...Xo+OOoo...XXoXoXX...oo+OOoo...XXoooXX...oo++Ooo...XXoooXX...Xo+Ooo...XX.....XXX..o+++Oooo..XXXXX...oOO++OO.....XXXXX...XoO+OOo.....XXXXX...XXO+OOO.....XXXXX...XXO+OOO.....XXXXX...XoO+++++oooXX...XXXooO+++++OoooXX...XXXooO+++++OoooXX...XXXooO+++++OoooXX...XXXooO++",
+"OOoo...XXoooXX...Xo++Ooo...XXoooXX...Xo+OOoo...XXoooXX...oo++Ooo...XXoooXX...Xo+OOoX...XXoooXX...Xo+OOoX...XXoooXX...oo+OoX...oo.....XXX..O++++OOooo...ooooOOO++OOo.....XXXXX...XXO++Oo.....XXXXX...oXO++OoX.X..XXXXX...oXO++Oo.....XXXXX...Xoo+++OOooXXX...XXoooO+++++OooXXX...XXoooO+++++OooXXX...XXoooO+++++OooXXX...XXoooO++",
+"+OXo...XXoooXX...oo+OOXo...XXoooXX...oo++OXo...XXoooXX...Xo+OOXo...XXoooXX...oo+OOoo...XXoooXX...oo+OOoo...XXoooXX...Xo+Ooo...XX.....XXX..o++++++OooXXXXoOO++++++OO.X...XXXXX...ooO++OO.X...XXXXX...XoO+OOO.....XXXXX...XoO+OOO.X...XXXXX.X.XoO++++OoooXX...XXXooOO++++OoooXX...XXXooOO++++OoooXX...XXXooOO++++OoooXX...XXXooOO+",
+"+OooooooXooOooooooo++OoooooooooooooXooo++OoooXoooooOooooooo+OOoooooooooooooXooo++OoooooooooooooXooo++OoooooooooOooooooo+OoooooooooooXoXoooO++++++OooXXXoXOO++++++OOooooXooooooooooO+++OooooXooXoooooooO++OOoooXoXoXoooooooO++OOoooXoooooooooooO++++OoooooXoXoooooO++++OOooooXoXooooooO++++OOoooooXoooooooO+++++OoooooXoooooooO++",
+"++OooooooOOoooooooO+++OoooooooOOooooooO+++OooooooOOooooooOO+++OooooooOOOooooooO++OOoooooooOOooooooO+O+OooooooOOooooooOO+OOoooooooooooXooooO+++++OOoXX..oOO++++++++OoooXooXoXoooooOO++OOooooooooooooooOO+++OooooooooXoooooOO+++OooooXoXooXooooOO++++OOoooooooooooO+++++++OoooooooooooO+++++++OooooooXooooO++++++OOooooooXooooO+++",
+"+++OOoOOOOOOOOoOOOO++++OOOoOOOOOOOOOOOO++++OOOOOOOOOOOoOOOO++++OOoOOOOOOOOOOOOO++++OOoOOOOOOOOOOOOO++++OOOoOOOOOOOoOOOO+++OOOOOOOoOOOOoOOOO++++++Ooo.X.oOO++++++++OOOOOOOOOOOoOOO+O+++OOOoOoOoOoOoOOO++++++OOOoOoOOOOoOOO+++++OOOOOOOOOOOOOOO++++++++OOOoOOOoOOO+++++++++OOOOoOoOOOOO++++++++OOOoOOOOOOOO++++++++OOOoOOOOOOOO+++",
+"+++++++++++++O+O+++++++++O+++++++OOO+++++++++OOOO++++O+OO+++++++O+OOO++++OOO++++++++O+OO+++++OOO+++++++++O+++++++O+OO+++++++OO+OOOOOOO+OO+++++++++OOoOOOO++++++++++++OOOOOOOO+O++++++++++OO+OOO+OO++++++++++OOOO+O+OOO++++++++++OOOOOOOOOOO++++++++++++O+OOO+++++++++++++++OO+OOOO+++++++++++++O+OOOOO+++++++++++++O+OOOOO++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++O+OOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++OOooXXXoooooO+++++++++OOO++++++++++++++++++++++OO+++++++++++++++OOOO++++++++++++++++O+O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO++++++++++++++++++++++OO+++++++++++++++OOOO+++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++OOOXoXoXXoXooO++++++++OOOOOO++++++++++++++++++OOOOO++++++++++++OOOoOOO+++++++++++++OOOOOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOO++++++++++++++++++OOOOO++++++++++++OOOoOOO+++++++++++++++++++++++++++++++++++OOOXoOO+++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++OooXXXXX..oooO++++++++OoooooO++++++++++++++++OOOXoOO+++++++++++OOXoXooO+++++++++++OoooXXooooo+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OoooooO++++++++++++++++OOOXoOO+++++++++++OOXoXooO+++++++++++++++++++++++++++++++++OOooXXOOO+++++++++++++++++++++++++++++++OOOOOO+++++++",
+"++++OOOOOOOOOO++++++++OooooXXXX..oooOO+++++++OoXXooOO++++++++++++++OOooXXOOO+++++++++OOoXXXooOO+++++++++OOooXXXoooooO++++++++OOOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++OoXXooOO++++++++++++++OOooXXOOO++++++++OOOoXXXooOO++++++++++OOO+OOOO+++++++++++++OOoooXXoOO++++++++OOOOO++++++++++++++++++OOoooOO++++++",
+"+OOOOooooOoOOOOO+++++OOoooXXXXX..oooOO++++++OOooXoXOO+++++++++++++OOoooXooO+++++++++OOOoXXXXoOO+++++++++OoooXoXXoXooO++++++++OOOOOOoOOO+++++++++++++++++++++++++++++++++++++++++++++++++OooooXooOO++++++++++++OOooooXoOO+++++++++OooXXXXoOOO+++++++++OOOOOOoOOOO++++++++OOOOXoXooOOO+++++OOOOOOOOOO++++++++++++++OOoooooOOOO++++",
+"++ooXoXoXXXXXooOOO+++OOoXXXooooXoXXXooO+++++OOoOXXXoo+++++++++++++OOXoXoooO+++++++++OOoXoooXXooO+++++++OOoXXXXX..ooOO+++++++OOXoooOoXooO+++++++++++++++++++++++++++++++++++O+OOO++++++++OOooXXXoOO+++++++++++OOOoXXoooOO+++++++OOOoXoooXXooOO++++++OOOXXOoOoXooO+++++++OOOOoXXXooooOO++++OOoXXXXoooO++++++++++++OOOXo...XXOO++++",
+"+OooXXXXXXXXXXoooOO++OoXXXXXooooXXXXooO++++++OOoXXoooOO++++++++++OOOXXXooOOO++++++++OooXoXoXoooO++++++OOoooXXXX..ooOO+++++++OOXXoooXoooOO++++++++O+++++++++O++++++++++++OOOOOOOO+++++++OOOooXoXooOOOO++++++OOOOoXXXoooOOO++++++OOoXXoXoXooooO++++++OOoXXoooXooooOO+++OOOOoooXXXoooOOOO+++OOXXXXXoooOO+++++++++++OOoXX...XXOOO+++",
+"O+oo...oXoooXo...oO+OOO.....ooooo...ooO+++++OOOooXXooOOO+++++++++OooXXXoooOO+++++++OOOXXoooXXooo+++++++OooXXXXX..ooOO++++++OOooXoooXXooo++++++++oooOO+++O+ooOO+++++++OOOOoOoooooO++++OOOooooXXXoooOOOO++++OOOoooXXXooooOOO++++OOoooXoooXXoooOO+++OOOoOXXoooXXoooOO++OoooXoXXoooXXXXXooO+++oooX..XoooOOO+++++++++Ooo..ooo..ooo+++",
+"+Ooo...XXoXoXX.X.oO++OO.X...oooXo...ooO++++OOoooXXXXXooOO++++++OOOooXXXXXOoOO++++++OOooXXXXXXooOOO++++OOOoooXXXXooooOO+++++OOoXoXXXXXoooOO++++OOoooOOO+OOOoooO+++++OOOooXXXXX.X.OO++++OXoXoXooooXXXXooO++OOXXXXXoooXoXXXooO++OOoXXXXoooXoXXXooO+++OoXXXXoooooXXXooO+OooXXXXXoooXXXXXoo+++OOXoX..oXoooOOO+++++++Oooo..ooo..ooo+++",
+"+OOo...oXXoXoX...oo+OOo.....oooXo...ooO+++OOOooXXXXXoooOOO++++OOooooXXXXXooOOO++++OOOoooXXXXXoooOO++++OoooXoXXXXXooOOO+++OOOOoooXXXXXoooOO+++++OooooOOOOOooooOO+++OOooooXXXXX..XoO++OOOXXXXXooooXXXXoo+++OOXXXXXooooXXXXoo+++OoXXXXXooooXXXXooO+OOoXXXXXOooXXXXXooO+Ooo...oXoooXX...ooO+O+OXoX..XoXoooOOOO++++O+oooX.ooo..oooO++",
+"+OOoXXXoooooooXXXoo++OooXXXXXXXoo...oOO+++OoXo..oooXX...oO++++OooX..XooXo...oO+++OOoXXXXoXoXo...oO+++OOooXXXXooXo...oO++++OoXXXXXooXo...oOO+++OO...XXooooX..XOO+++Oooo..oooX....oOO++OO...XooOooo...ooO++OoX.XXoOoooo...ooO+OOO...oXOoooo...ooO++OO.X.XooOOoo...ooO+Ooo...XXooooX...ooO++OOooo.......XXXOOO++++OOooXXooo..oooO++",
+"OOOOXXXXooooOoXXXXo++OoXXXXXXXXoo...ooO+OOOoXX..XXoXo...oOO+OOOXoo..oXoXX...oOO++OooXXXXXooXX...oOO++OoXXoXXoXoXX...oOO+OOOXoXXXoXoXX...OOO+++OOX.XXooooXXX..O++OOOXXo..XXX.....oOO+OOO..XXooOooo...ooO++Oo...XXOOooo...ooO++OO...XXOOooo...ooO++OO...oXooOoo...ooO+Ooo ..XooooXX...ooO+++Oooo.......XXXooO++++OoooXXXoo..oooO++",
+"+Ooo.....ooooooooXX++OoXXXoo...oo..XooO++OoXoo..oooXo...ooO++OooXX..XooXo.X.ooO++OooXXXXoXoXo.X.ooO++OOoXXXXoooXo.X.ooO++OooXXXXXoooo...ooO+++OOooo..XXX..oooO+++OOoXX..ooo.....ooO++OO...XXOoOoo...ooO++OoX..XooOOoo...ooO+OOoX..ooooOoo...ooO+OOo...XoOOooo...ooO++OOXXXXoooooXXXXOOO+++OoooXXooooooXoXoO++++OooXXX.....oooO++",
+"OOoo.....XooOoXoXXo+OOOXXXoXX..oo...oOO+OOo...oooooooXXXooO++Oo...ooooOooXXXooO+OOo...ooooOooXXXooO+OOo...oooooooXXXooO+OOo...oooooooXXXooO++++OOoo..XXX..ooOOO+OOo...oooXoXoXXXooO+OOooXXooOOOOoX..ooO++OoXXXoooOOOo.X.oOO++OoXXXooOOOOo...oOO++OOXXXoooOOoo...oOO+OOOoXoXXoooXoXXooO+++OOoooXXooOooXoXXXO+++OOoooXX.....XooOO+",
+"OOoo.....ooooOoooXX++OOXXXXo...oo...oOO++Oo...ooOOOOooXXoXO+OoO...ooOOOOoXXXoXO+OOo...ooOOOOoXXXoXO+OOo...XoOOOOoXXXoXO+OOo...ooOOOOooXXoXO++++OOOo..XXX..oOO++++oO...oXoooXXXXXXoO++OoXXXoooOOOo...oOO+OOOXXXooOOOoO...ooO+OOOXXXooOOOOoX..ooO+OOooXXooOOOOO...ooO++OOooo..ooo..oooOO++++OooXXXoooOoXXoXoO++++OoooXX.....oooOO+",
+"+Ooo...oXoooOoXoXXo+OOoXXXooXXXoo.X.oOO+OOo..XoOO++OOoXoXXo+OoO...oOOO+OooXoXoO++oO...oOO++OooXoXXo+OOo...oOOO+OooXoXoO+Ooo...oOO+OOOoXoXXo+++++OoOXo...ooooOO++OooX..oooXXoooXooXO+OOOXXXooOOOOO.X.oOO+OOoXXXooOOOOoX..ooO+OOOXXXooOOOOo.X.oOO+OOOXXXooOOOoO..XooO+++OOOo..oXo..ooOO++++OOoooXXoooooXoXXXO++++OoooXXooooo...oO+",
+"OOoo...XooooOOoooXX++OOXXXXoXXXoo...oOO+Ooo...oOOO+OoooXXoO+Ooo.X.oOO++OOooXXXO+OooX..oOOO+OOooXoXO+OOo.X.oOO++OOooXXXO+OOo..XoOO++OoooXoXO++++OOoooX...XXOOO+++OOo...ooXXXoooXoXXO+OOooXXooOOOOo..XoOO++OOXXXooOOOOo...oOO++OOXXXooOOOOo...oOO++OOXXXooOO+Oo...oOO+++OOooX.oXo..OOO++++++OoooXXoOooooXoXoO++++OoooXXoooXX...oO+",
+"+OOOXXXoooOOoooXXXo+OOoXXXoXooXXX..XooO+OOo...ooOOOOooXoXoo++Oo...ooOOOOOXXXXoo++Oo...ooOOOOooXXXoO+OOo...ooOOOOOXXXXoo+OOo...ooOOOOooXXXoO++++OOoo..XXX..oooO++OOo...XXoooooXXXXoo++OoXXXooOOOOO...oo++OOoXXXooOOOOoX.Xoo++OOoXXXooOOOOoX..ooO+OOoXXXooOOoOO.X.oO+++++OOOXX...oooOO++++++Oooo..XXXXX...ooO++++OoooXXooooo..XoO+",
+"+OooXXXoooOOOooXoXo++OOXXXooXooXX...oOO++OoX..oOOOOOoXXXXoO+OOo...ooOOOoOXoXooO+OOo..XooOOOOoXXoXXO+OOo...oOOOOoOXoXooO+OOo...ooOOOOoXXoXXO++++Oooo..XoX..oooO++OOo...XXXoXooXXXooO++OOXXXooOOooO...oO+++OOXXXooOOoOo...oO+++OOXXXooOOoOo..XoOO++OOXXXooOOOoo...oOO+++++OOoX.. XooO+++++++Oooo..XXXoX...ooO++++OoooXXoOoOo...oO+",
+"++OOXXXXoooooooXoXo+OOoXXXoooXoXX...oOO+OOo...oooOOOoXoXoXO+OOoX..oooOoOoXXXXXO+OOO...oooOOoOXXXooO+OOO...oooOoOoXXXXXO+OOoX..oooOOoooXXooO+++OOooo..oXo..oooOO+OOoX..XXooooooXXXXO+OOOXXXooooOoo.X.OoO++OOXXXooooOoo...OoO++OOXXXooooOoO...oo+++OOXXXooooOoO..Xoo++++++OOoo...ooOO++++++OOooo..XXXXX...ooO+++OOoooXXoooooX..oo+",
+"+Ooo...ooooOoo...oo+OOO...XooooXX...oOO+OOOoXXXXooooo...ooO++OoXXXoXooooo...oOO+OOOoXXoXooooo...ooO+OOOoXXXXooooo...oOO+OOOXXoXXooooo...ooO+++Oo...oXooooX...O++OOoXXX..oXooX...oOO++OOooXXXooooo...OOO++OOooXXoooooo.X.oO+++OOooXXXooooo..XoO+++OOooXXXooooo...OO++++++OOoo...ooOO++++++OOoXo..oXoXooooOOO+++OooXoXXooooX..XoO+",
+"+OOoX..XooooXo...oO+OOo...oXoooXX...ooO++OOXoXoXooooo...oOO++OOoXXXXooooo...OoO++OOXoXXXooooo...oOO++OOXoXoXooooo..XooO++OOoXXXXooooo...oOO+++OO.X.ooOOooo.X.OO++OOXXX..ooooo...OoO+++ooXoXoooooo..XoO+++OOoXoXXooooo..XOOO++OOoXooXooooo...OOO+++ooooXoooooo.X.oOO++++OOooo...oooOO+++++OoooX..XXXoooOOO+++++OOooXXXXXoXo...oo+",
+"+OoX..........oooOO++OoX....ooooo...oOO++OOOooXX.....oooOO+++OOoooXX.....oooOOO++OOoooXX.....ooooO+++OOOooXX.....oooOOO++OOOoooX.....ooooO++++OOoooOOOOOOOooOO+++OOoXXXX.....oooOO++++OOoo.......oXooO++++OOoo.......XoXOO++++OOoo.......ooXOO++++Oooo.......Xooo++++++Ooo.......oOO+++++Oo.....ooXoOOO+++++++oo.....oXo....XoO+",
+"OOoo..........XooOO+OOo.....oooXo.X.oO+++++oOooX.....oooOO+++++OOooX.....XooO++++++OOooX.....oooOO+++++oOooX.....oooO+++++OOOoXX.....XooOO++++++OoOOOO++OOOOo+O+OOoooXXX.....XooOO+++++OOo.......XooOO++++OOOoX......oXoOO++++OOOo.......XooOO+++++OOo.......oXoOO+++++OOoX......ooOO+++OOo.....XooOOO+++++++OOO.....Xoo.....OO+",
+"+Ooo..........oooO+++OO.....OOOoo...OO+++++OOooX.....ooo+++++++OOooX...X.oooO++++++OOooX.....ooO+O+++++OOooX.....oooO+++++OOOOoX...X.oooO+++++++OOOO++++OOOOO+++++OXoXXX....XoooO++++++OOOX..X...oXoO++++++OOo.X.....oooO++++++OOOX......oXoO++++++OOOX......oooOO++++OOoo...X...ooO++++OOO.....oXoOO+++++++++Oo..X..ooo..XX.OO+",
+"+OoOOOOOOOoOoOoOO++++OOOOOOOoOOOoOOOOO++++++OOOOOOOOOOO+O+++++++OOOOOOoOoOOOO+++++++OOOOOOOOOOOO++++++++OOOOOOOOOOO+++++++++OOOOOOooOOOO+++++++++++++++++++++++++OOoooOooOoOooOO+++++++O+oOOOooOoOOO++++++++OOOoOoOOooOO+++++++OOOOOOOOOoOOO++++++++OoOOOoOoOooO+++++++OOOOOooOOOOOO++++++OOOOOoOOOO+++++++++O+OOOoOOoooOooOOO++",
+"++OOOOoOOOOOOOOO+O++++OOOOOOO+O+OOOO+++++++++OOOOOOoO+O++++++++++O+OOOOOOOO+++++++++++OOOOOOO++++++++++++OOOOOOOOOO++++++++++OOOOOOOOOO+++++++++++++++++++++++++++OoooOOOOOOOOO+O++++++++OOOOOOOOOOO+++++++++OOOOOOOOOOO++++++++OOOOOoOOOOOO+++++++++OOOOOOOOO+++++++++++OOOOOOOO+++++++++OOOOOOOO+++++++++++++OOOOOOO+OOOOOO+++",
+"+++++O+OOOO+O+++++++++++OO++++++++O++++++++++++OOO++++++++++++++++O+O+O+++++++++++++++++OOOO++++++++++++++++OOOO++++++++++++++++O++O+++++++++++++++++++++++++++++++O+OOOO+O++++++++++++++++OO+O+O++++++++++++++++OO+++++++++++++++++O+O+O++++++++++++++++O+O+++++++++++++++O++OO+++++++++++++O+O++++++++++++++++++OO++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++O++++++++++++++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++O++++++++++++++++O++++++++++++++++++++++++++++++++++++O+++++++++++++++++++++++++O+++++++++++++++O++++++++++++++++++++++++++++++",
+"+++++OOooO+++++++++++++++++++OOOoo++++++++++++++OoOoO+++++++++++++++OO+O+++++++++++++++++++++++++++++++++++OooooO++++++++++++++++++++++++++++++++++++++++++++++++++++OOooO+++++++++++++++++++++OooOO+++++++++++++oooO++++++++++++++++++++++++++++++++OOooO+++++++++++++++++++++OooOO+++++++++++OoOoO++++++++++++++++++++++++++++",
+"++++OOOooOOO++++++++++++++++OOoOooO+++++++++++OOOoooO++++++++++++OOOOOOOOOO+++++++++++++++++++++++++++++++OoooXoOO++++++++++++++++++++++++++++++++++++++++++++++++++OOOooOOO+++++++++++++++++OOOooOOO++++++++++OOoooOO++++++++++++++++++++++++++++++OOOooOOO+++++++++++++++++OOOooOOO++++++++OOOoooO++++++++++++++++++++++++++++",
+"+++++OOoooOO+++++++++++++++OOOooooO+++++++++++OOooooOO+++++++++++OOooooooOO++++++++++++O+O++O+++++++++++++OooXoXOO+++++++++++++++++++++++++++++++++++++++++++++++++++OOoooOO+++++++++++++++++OOooooO++++++++++OOOoooOOO+++++++++++++O+++O++++++++++++OOoooOO+++++++++++++++++OOOoooO+++++++++OOooooOO+++++++++++++O+O++O++++++++",
+"++++OOooooooO++++++++++++++OOXoXooO++++++++++OOoXXXXooO++++++++OOoo..X.XXooO++++++++OOOooOOOooO+++++++++++Oooooooo++++++++++++++++++++++++++++++++++++++++++++++++++OOOoXoooO+++++++++++++++OoooXoOO++++++++++OooXXXXoOO++++++++OOoooOOOooOO++++++++OOOoXoooO++++++++++++++OOoooXoOO++++++++OOoXXXXoo++++++++++OOOooOOOoo+++++++",
+"+++++OOXXoXoOO++++++++++++OOoXXXoOO++++++++++OoXXXXXooO+++++++++ooo.....XXOOO+++++++OOoooOoOooO++++++++++OOoXoooooO++++++++++++++++++++++++++++++++++++++++++++++++++OooXoXoOO+++++++++++++OOoooXooO+++++++++OOooXXXoXOO++++++++OOOooOOOooOOO++++++++OOXoXooOO+++++++++++++OOoooXoOO++++++++OoXXXXXooO+++++++++OOooooOOooO++++++",
+"+++++OOooXoXOO+++++++++++OOooooooOO++++++++OOOooooooooOO++++++OOoooooXXoooOO+++++++OOOooooooooOO+++++++++OoooXXooO+++++++++OOOOOO+OOOOOO+++++++++++OOOOOOOOOO++++++++OOooXoXoOO++++++++++OOOooXXooOO+++++++++OOoXooXoooOO+++++++OoOooooooooOO++++++++OOooXooOO++++++++++++OOooXXoOOO+++++++OOooooooooO++++++++OOOooooooooO++++++",
+"++++OOOooXXooOO+++++++++OOOoooXooOOO++++++++OOoXXoooXoOO+++++++OooXoooXXoooO+++++++OOooXooooooO++++++++OOOOXoXoXoOOO+++++++OOOoOOoOOOOoOOO+++++++OOOOooooOoOOO++++++OOOooXXoooOO+++++++++OOooXXooooOO+++++++OOoXoXooXoooOO+++++OOOoXooooooooOO++++++OOOoooXXOO+++++++++++OOooXoooOO+++++++OOOooXXooooO+++++++++OOooooooooOO+++++",
+"+++OOoooooXXoOOO+++++++OOoooXoXoooO++++++++OooooooXoXooO++++++OOooXoXXXXooOO+++++++OoOooXooooooO+++++++OOoOoXXXooOO++++++OOoooooooooooooOO+++++OOOooooooooooOOO+++O+OooooXXXoooOOO+++++OOOOoooXXoooOOO+++++OOOooXoooXoooOO+++++OooooXoooXoooOO+++++++OOooXoooO+++++++++++OOooXXooO+++++++++OOooooXoooO++++++++OOoooXooooo+++++++",
+"+++Oooo.....XXOO+++++++Oooo.....XXOO+++++++OooX.....XXOOO+++++OOXoX.....XXoOO+++++OOooX.....XXOOO++++++OooX.....XXoO+++++OO.....oXX.....ooO+++OOoooX.........oO++++Oooo.......oooO++++OOoXo.......oooO++++OOoXo.......oXoOO+++OOooo.......oXoOO+++++Ooo.....OO++++++++++OOo.....oOO++++++++ooo.....oOO+++++++++Ooo.....oOO++++++",
+"+++OoXX.....XXoOO++++++OoXX.....XXoOO+++++OOoXX.....XXoOO+++++OOoXo.....XXoOO++++++OXoX.....XXoOO++++++OoXo.....XXOo+++++OO.....XXXX....XoO+++OooXX..........oO++OOOoXo.......XoooO+++OOooX.......XXooO+++OOooX.......XoXOO+++OooXX.......oXooO+++++Ooo.....oOO+++++++++OooX....oOO++++++++Ooo.....oOO++++++++OOoo.....oOO++++++",
+"++OOoooooooo..ooo+++++Oooooooooo..ooo+++++OOoooooooo..ooOO++++OOooXooooo..ooo+++++OOoooXoXoo..ooOO++++OoooXooooo..oooO++OOOooooo...ooooo..o+++Oo...oooOooo...oo+++Oo...oooooXo...oO+++Oo...ooooooo...oO++OOo...XXooooX...oO+++Oo...oXoooXX...oO++++++OOoo...oO+++++++++++OOoo...oO++++++++O+Oooo...oO+++++++++++OOoo...oOO++++++",
+"++OOoXXoXooo..ooo++++++OoXXoXooo.Xooo+++++OOoXXoXooo..ooo+++++OOooooXooo..ooo+++++OOoXoooooo..ooo++++++OooXoXooo..ooO++++OooXXXX...oXooo..o++OOO...ooOOooo...Oo++OOO...XXoooXo...oO++OOo...XooooXo..XoO+++Oo...oXoooXo...OO++OOo...oXooooX..XoO++++++OOOo...oOO++++++++++OOOo..XoOO++++++++++Ooo...oOO++++++++++OOoo...OO+++++++",
+"++OoooXooooo..oooO++++Oooooooooo..oooO++++OoooXooooo..oooO++++OOooXooooo..oooO++++OoooXooXoo..oooO++++OoooXooooo..oooO++OOoooooo...ooooo..o++Ooo.X.ooOOOoooXoOO++OOo...XooooXX...oo++OOo...oXoooXo...oo++OOO...oXooooX...oo++OOO...XXoooXo...oo+++++++OoO...OO++++++++++++OoO...oO+++++++++++OOO..XoO++++++++++++OOO...oOO++++++",
+"++OOoXo.......oooO++++OOXXX.......oooO++++OOoXo.......oooO++++OooXo.......oooO++++OOXoX.......oooO++++OOXoX.......oooO++OOoXXX.....XXXXX..O++OOo...oOoOOOOoooOO++OOo...XXXXXoX...OO++OOo...XXXXXXX...oO++Ooo...XXXXXXX...oO++Ooo...XXXXXXX...oO+++++++OOo...oOO+++++++++++OOo...oOO++++++++++OOo...oOO+++++++++++OoO...oOO++++++",
+"+OOooXX.......oooO++++OoooX..... .oooO++++OooXX.......oooO++++OOoXX.......oooO++++OoXoX..... .oooO+++OOoXoX.......oooOO+OooXXX.....XXXXX..o++OOo...ooOOOOooooOO++OOo...XXoXXXX...oo++OOo...XXXXXXX...oo+++Oo...XXXXXXX...oo++OOo...oXXXXXX...oO+++++++OOoX..oOO+++++++++++OOO.X.oOO++++++++++OoO...oOO+++++++++++OOo.X.oOO++++++",
+"+OOo...oooooXXoooO+++OOo...oooooXXoooO+++OOo...oXoooXXXooO+++OOo...oooooXXoooO+++OOo...oooooXXoooO++++Oo...oooooXXXooO++OoXXXXoo...XXoXoXoo+++Oo...oooOOoOooOoO++OOo...XXXooXoXoXoO++Ooo...XXoXooXXoXOO++OOo...XXoXoooXXooO++OOo...XXoooXoXXooO+++++++OOo...oOO+++++++++++Ooo...OOO++++++++++OOo..XoOO+++++++++++OOo...OOO++++++",
+"+OOo...XooooXXoooOO++OOo...oXoooXXoooOO++OOo...oooooXXoooOO++OOo...oXoooXXoooOO+++Oo...oooooXXXooOO++OOo...oXoooXXoooO++OXXoXXoo...XXXXoXXO+++OOXXX..XXXXX...oo++OOo...XXoXXoXXXooo++OOo...XXoXXXoXXooo+++oo...oXXoXXoXoXoO++OOo...XXXXXoXXoXoo++++++OOoO...oOOO+++++++++OOOo...ooOO+++++++OOOoO...ooOO++++++++OOOOo...ooOO+++++",
+"+OOo...oooooXXXooOO++OOo...oooooXXXooOO++OOo...oooooXXoooOO++OOo...oooooXXXooOO++OOo...oXoooXXoooOO++OOo...oooooXXoooo++OoXXXXoo...XooXXoXO+++OOooX..oXoXX.X.Xo++OOo...XXXoXXoXXooO++OOo...XXXooXoXXooO+++Oo.. XXoXXXoXXooO++OOo...XXoXoXoXXooO++++OOOOoo...ooOOO++++++OOOoOo...ooOOO++++++OOOoo...oOoOO+++++++OOooO...ooOOO++++",
+"+OOO...XXXXX..XXXoO++OOo...XXXXX..XXXoO+++oO...XXXXX .XXXoO++OOo...XXXXX..XXXoO+++oO...XXXXX..XXXoO+++oO...XXXXX..XXXoO+OXo..........XXX..O++++OoOooX...oXoXoOO+++OoXXX..XXXXX...oO+++OoXXX..XXXXX...oO++OOOXXX..XoX.....oO+++OOXXX..XXXXX...oO+++++oooXo...XoXooO++++++oooXo...XXoooO++++OoooXo...XXoooO+++++OooooX...XXoooO+++",
+"+OOo...XXXXX..XXXOO++OOo...XXXXX..XXXOO+++Oo...XXXXX..XXXOO++OOo...XXXXX .XXXOO++OOo...XXXXX..XXXOO+++Oo...XXXXX .XXXOO+OoXX.........XoX..O++++++OOoo...XoXooO++++OOoXX..XXoXX...oO+++OOXXX..XXXXX...oO+++OOooX..XXX.....oO++OOOXXX..XXXXX...oO+++OOooXXX...XXoooO++++OOooXXX...oXXooO++++OooXXX...XXoooO+++++OooXXX...oXXooO+++",
+"++OOoooXoXXXXoXooOO+++OOoooXoXXXooXooOO++OOOoooXoXXoXoXoooO+++OOoooXoXXoooXoooO+++OOooooXoXXXoXoooO++OOOoooXoXXoooXoooO+OooXoXoXooooXoXooOO++++++OOooXXXoXoOOO+++++OoOoooooXXooooOO++++OOOooooXoXooooOO++++OOooooXooXoooOOO++++OOOooooooXooooOO++++OooooXoXoXoXooOO++++OoooXoXoXoXoooOO+++OooooXoXooXoooOO++++OoooXoXoXoXoooOO++",
+"++OOoooXoXooooXoXOO+++OOooooXooXooXooOO+++OOoooXooXoooXooOO++++OoooXoXoXoooXoOO+++OOoooXoXooooXooOO+++OOoooXoXoXooXooOO++OOooXoXooooXoXooOO++++++OOOoXXXXoOOO+++++++OOOoXXooXooOOO+++++OOOooXooXoXoOOO+++++OOOOooXooXoooOO++++++OOOoXXXoXooOOO++++++oooXoXoXooooo+++++++oooXoXoXoXooo++++++oooXoXXXoXooo+++++++ooooXXoXoXooo++++",
+"+++OoooooooXoooooO+++++OooooooXooooooO+++++OooooXooooooooO++++OOooooooXooooooO+++++OooooooXooooooO+++++OooooooXooooooO+++OoooooooOooooooOO++++++++Ooo...ooO++++++++++OOooooooooOO++++++++OOooXooooOoO++++++++OOoooXoooOOO++++++O+OOoooooooOoO++++++OOoooXoooXooooO++++++OOooXoXooooooO++++OOooooooooooooO++++++OoooooXooooooO+++",
+"++++OOOoOoOOoOoO+O++++++OOOoOOOoOOOoOO++++++OOOOOoOoOOOOO+++++++OOOoOOOOoOOOO+++++++OOOoOOOOoOOOO+++++++OOOOoOOOOOOOO+++++OOOoOOOOOOOOOO+++++++++OOoo...oOO++++++++++++OOOoOoOOOO+++++++++OOOOoOOOOO++++++++++OOOOOOoOOO+++++++++++OOOOoOOOO+++++++++OOOOooOOoOO++++++++OOOOOOOoOOOO++++++++OOoOoOoOoOO+++++++++OOoOOOoOOOO+++++",
+"++++++O+O+OO+O++O++++++++O+OOOO+OOO+++++++++++OOO+OOOOOO++++++++++O+OOOOOO++++++++++++O+OOOO+OO+++++++++++OO+OOOOOOO++++++++O+O++++OOOO+++++++++++OoOOOOOO++++++++++++++OOO+O++++++++++++++O+O+OOO+++++++++++++++OOOO++++++++++++++++OOOOO+++++++++++++OO++OOO+++++++++++++OOOOOOO+++++++++++++OOO+OO++++++++++++++OOOOOO+++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++OOOOOOOOOoOO++++++++++++++O+O++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OO++++++++++++++++O+O+++++++++++++++++++++++++++++++++++++++++++++++++OOooOOOO+++++++++++++++++++++++++++++++",
+"++OOOoooooooOoOOO++++++++++OOOOOOOO+++++++++++OOOOO+++++++++++++++++++OOOOO++++++++++++OOooOOO++++++++++++++OOOOOOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO++++++++++++++++++OOOOOO++++++++++++OOOOOO+++++++++++++++++++++++++++++++++++++OOOOO++++++OO...XoOO++++++++++++++++++++++++++++++",
+"+Ooo.X...oXX..oooO++++++OOOoooooooOO++++++++OOOXoOOO+++++++++++++++++OOoX.OO+++++++++OOoo...oo+++++++++++OOOoXoXooooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOXoOOO++++++++++++++++OoooooO+++++++++++OooXoXOO+++++++++++++++++++++++++++++++++++OOoX.OOO+++OOo...XXOO++++++++++++++++++++++++++++++",
+"+Ooo.....XXo..XooO+++++++OooXoXoooOOO+++++++OOooXooOO+++++++++++++++OOOo.XoOO+++++++++OOo...ooOO++++++++++OooXXooooooO+++++++++++++++++++++++++++++++O++++++++++++++++++++++++++++++++++OOoXXooOO+++++++++++++++OoooXXOO+++++++++O+ooXXXOOO+++++++++++++++++++++++++++++++++OOOo.XoOO++++Oo...XXoOO+++++++++++++++++++++++++++++",
+"+Ooo.....XXX..oXoO+++++OOOooXoXoXXOOO+++++++OOoXXoOOOO+++++++++++++OOooo.XoO+++++++++OOoo..XooOO++++++++OOOooXXXooooOO+++++++OOOOOOOOOO++++++++++++OOOOOO+++++++++++++++++++++++++++++++OOooXoOoOO+++++++++++OOOOooXooOO++++++++OOOooXXXoOOO++++++++OOOOOOOOOOO+++++++++++OOOooo..OOO++++OOoooXXooOOO++++++++++++OOOOOOOOOOO++++",
+"OOoooooXX...XXooOOO+++OOoXoXX...XooO+++++++++OOooXXXOO++++++++++++OOOoXXooOOO+++++++OOoXXoooXXoOO+++++++OOooXXXX..oOo+++++++OOoXooOoooOoO++++++++++OooXoO++++++++++++++++OOOOOOOO++++++OOOoooXXoOOOO+++++++++OOooXXXoooOO++++++OOooXXooooXOO+++++++OOooooOoO..OOO++++++++OOOOXoXooooOO+++OOoooXXoOOOOOO++++++++OOOO..oOOXooooO++",
+"+OooXoXXX...XXooOO++++OOoXoXX...XXOO+++++++++OOooXXXoOO+++++++++++OooXXXooOO++++++++OOoXXoooXXoOO+++++++OOoXXXXX..ooO++++++OOoOXooooXXooO+++++++++OoooXooO++++++++++++OOOOOOoOOOOOO++OOOoOoooXXXoOOOO++++OOOOOOooXXXooOOOO+++OOOoooXXXXXXXOoO++++OOooooXXOooX.oOOO++++OOOOOoOXXXooooOOO++OOoXoXXXXXXXoOo++++++OOOoO.XooooXoooOO+",
+"+OooXXXooooo..oXoOO++OooXXXooXXoXooOO+++++++OOoXoXXXXoOO+++++++++OOoXoXXXXoOO+++++++oOooXXXXXooOO+++++++OoOXoXXXXooOOO++++++OoooXXoXoooOOO++++++++Ooo...OO+++++++++++OOoXoXXooXXooo+++oooXXoooooXXoooO++++ooXoXooOoooXXooO++++ooooXoooooXXoooO++++ooXoXoooooXXoooO+++OooXoXoooooXoXoXoo++OOoooXXoXoXoooo+O++++ooXoXXooOoXoXoXoo+",
+"+OOoXXXooooo..XXoo+++OooXXXooXXXXooOO+++++++OOooXXoXoXoOO++++++OOOooXXXoXooOO+++++OOOooXXXXXXooOOO+++++OOOoXoXoXXooOO+++++OOOooXoXXXXXoOO++++++++OOoo...oOO++++++++OOOooXXoXXXoXXoo++OooXXooooOooXXooOO++OooXXooooOoXXoooOO++OooXXXooooooXXooo+++OooXXXooOoOXXXooOO++OooXXXoooOoooXXooo+++OoooXXXoXXXoooOO++OOooXXoXoooOXoXXXoo+",
+"++oOXXXoXooo..XoXOO+OOooXXXooXXoXXooOO++++OOOooXoXXXXoooOO+++++OOooXoXXXoXooOO+++++OoooXoXoXXXooOO+++++OOooXXXXXXXoooO+++++OoooXXXXXXoooOOO+++++OOOoo...OOO++++++++OOoooXXXXoXXoXoo+OOooXXXooOooXXoXoOO+OOooXXXooOoooXXXoOO+OOooXoXooOooXXXXoOO++OoooXooooooXXoXoOO++OoooXXXoOooXoXXXoo+++Oooo..XXXXX...oOO++OooXXXoXOoooXXXXoo+",
+"++OOXoX..........oO++Ooo.....XXX.XXooO++++OOoXX..XoX..XXXOO+++OOoXX..oXX..XXoOO+++OOoXX..XXo..XXoOO+++OOXoX..oXo..XXoo+++OOOoXX..oXo..XXXOO+++++OOoooooooOOOO+++++OOXoX..oXX..XXXoO++Ooo...ooOoOXXXXXOO++Ooo...oooOoXXXXXOO++Ooo...oooOooXXXXOO++Ooo...ooOOOXXXXXOO++Ooo...oXoOooX...oo+++OooX..XXXXX...ooO++Ooo...oXOoooo...oo+",
+"+OOooXX..........oO++Ooo.....oXo..XXoOO+++OoXXX..oXo..XXXOO+++OoXXX..Xoo..XXXOO+++OoXXX..XoX..XXXoO+++OOXXX..oXo..XXXOO+++OoXXXX.XXX..XXXOO+++OOOooooooooooOOO++++OOXXX..oXo..XXXoO++Ooo...ooOOooXXXXoO+++oo...ooOOooXXXXoO++Ooo...oooOoXXXXXoO+OOoo...ooooooXXXXoO+OOoo...XoOooXo...oo+++Oooo. XXXoX...ooO+++oo...XooooXo...oo+",
+"+OOoooX..........oO++Ooo...X.XXX..oXXOO++OOOXXX..oXo..XXXOO++OOOXXX.XXXo..XXXoO++OOOXXXX.oXo..XXXOO++OOOXXX..XoX..XXXoO+++OOXXX..ooX.XXXXOO+++OOoooooooooOooOO+++OOOXXX..XoX..XXXoO++Ooo.X.oooOooXXXXOO+OOooX..oooOooXXXXOO++Ooo...ooOOOoXXXXOO++Ooo...ooOOooXXXXOO++Ooo...XXooOXo...oo+++Oooo..oooooXXXXoO++OooX..oXoOoXo..Xoo+",
+"++Oo...oXooooo...oO++OOOXXXXooooooXXXOO+++Oo...ooooooo...oO+++Oo...ooooooo...oO+++Oo...ooooooo...oO++OOo...ooooOoo...oO++OOo...ooooooo...oO++Ooo.............OO++OOo...oooXoXX...oO++OOoXXXooOOoooXXXoO+++OoXXXooOOoooXXXoO++OOOXXXooOooooXXXoO++OOoXXXoooOoooXXXoO+++OooooXXoooXXoXoOO+++Oooo.XoooooXXXXoo+++OoooXXXoooXXoXooO+",
+"+OOo...ooooooo...oO++OOoXXXXooOoooXXXOO++OOo...oooOooo.X.oo++OOo...ooOOOoo.X.oO++OOo...oooOOoo...oo++OOo...ooOoOoo.X.oO++OOo...oooOooo...oo++Ooo.............OO++OOo...ooXoXXX...oO+++OoXXXoooOoooXXXOO++OOoXXXoooOOooXXooO++OOoXXXooOOOooXXooO++OOoXXXooOOoooXXXOO+++OOoXoXXoooXXXoXOO+++OoooXXooOOooooXXO+++OOXooXXoooXXXooOO+",
+"++oo...oooOoOo.X.oO+++OOXXXooOooooXXXoO+++ooX..oOOOOOo...oo+++ooX..oOoOoOo...oo++OooX..oOOoOOo.X.oO++OOo.X.oOoOoOo...oo++OooX..oOOOOOo.X.oO+++OOoOooooooooOooO+++Ooo...XoXXXoo...oo++OOoXXXooOoOooXXXoO+++OOXXXooOOoooXXXoO++OOOXXXoooOoooXXXoO+++OOXXXoooOOooXXXoO+++OOooo..ooo..ooOO++++Oooo..oXooo...ooO++++Oooo..ooo..oooO++",
+"+OOo...oOoOoOo...oO++OOoXXXoooOoooXXXOO++OOo...ooOOooo..XoO++OOo..XooOOoOo..XoO++OOo...ooOOoOo...oO++OOo...oOOOoOo..XoO++OOo...ooOoOoo...oO+++O+OOOooooooOOOOO+++OOoX..oXXXXoo.X.oO+++OOXXXoooOoooXXooO+++OoXXXoooOoooXXXOO++OOOXXXoooOOooXXXOO+++OoXXXooOoOooXXooO++++OOOo..ooo..ooO+++++Oooo..XoXoo...ooO++++OOOo..oXo..ooO+++",
+"++oO.X.oooOooo...oo+O+OOXXXXoOOoooXXXoO++OOo.X.oooOoOO...oo+++oO...oOooOoo...oo++OOo..XoooOooo..Xoo++OOoX..oooOooO...oo++OOo.X.oOoOoOo..Xoo++++OOOoOoooOoOO+++++++oo...ooXXXoo...oO+++OoXXXXoOooXoXXXoO++OOOXXXXoOooooXXXoO+++OOXXXoooooooXXXoO++OOOXXXoooooooXXXoO+++++OOooX...XooOO+++++Oooo.......XoXOO++++++OOoXX...XXOOO+++",
+"++Oo...oXooooXX.XoO++OooXXXoooooooXXXoO++OOo...oooooXo..XoO++OOo...XoooooXX..OO++OOoX..oXooooo...OO++OOo..XXoooooX..XoO++OOo...XoooooXX..OO++++++OOoo...OOO+++++++Oo.....oooXX..XoO+++OOXXXoXooooXXXXoO+++OOXXXXooooXoXXXoO++OOOXXXXooooXoXXXoO+++OOXXXXooooXoXXXoO+++++OOooo...ooOO+++++OOoooXXoooooOoOO++++++++OOoX...XooO++++",
+"+OOoX..XooooXX...oO++OOoXXXoooooXoXXXoO+++OoX..XXoooXX...OO+++OO.X.XXoooXX...OO+++Oo...XooooXX...oO++OOO...XXoooXo...OO+++OO.X.XXoooXX...oO+++++++Ooo...oO+++++++OoO.....oooXo...OO+++OOXXXXooooXoXXXoO+++OooXXoXoooXXXXXoO++++ooXXXXoooXXXXXoO+++OOoXXXXoooXXXXXoO++++++OooX...ooO++++++OooooXXooooOOOO+O++++++OOooo...ooO+++++",
+"++OOooo.......oooo++OOoX.....ooo.....Xo+++OOooo.......oooOO++OOOooo.......oooOO+++OOooo.......oooOO+++OOooo.......oooOO+++OOooo.......oooOO++++++OOoooXoOO++++++++OoXXX.......oooOO++++OOoo..........oo++++Oooo..........Xo++++Oooo..........Xo+++OOooo..........oo+++++OOOXoXXXoOO++++++OOXXX..XXooOO+++++++++OOOooXXXXoOO+++++",
+"++OOoXo.......XooOO+OOoX.....ooo.....Xo+++OOoXo.......oooOO+++OOoXo.......oooOO+++OOoXo.......oooOO+++OOoXo.......XooOO+++Ooooo.......XooOO+++++++OOooooOO+++++++OOOXXX.......XooOO+++OOOoo..........Xo++++OOoo..........Xo+++++OOO..........Xo+++++OOO..........Xo++++OXoX.....oOO+++++OOoXXX..Xooo+O+++++++++OoXX.....OO++++++",
+"+++Oooo......XoooO+++OoX... .ooo.....oo+++OOooo.......oooO++++OOooo.......oooO+++++Oooo.......oooO++++OOooo.......oooO+++++Oooo......XoooO++++++++OOooooOO+++++++OOoXXX.......oooO+++++OOOo..........Xo+++++OOo.....X....oo+++++OoO.....X....oo++++OOoO.....X....Xo+++OOoXX....XoO+++++++OOXXX..XXoOO+++++++++OOoXX....XoO++++++",
+"++O+OOOOOOoOoOoOO+++OOOOOoOoOOOOOoooooO+++++OOOOOoOoOOoOO+++++++OOOOOOoOoOoOO+++++++OOoOoOoOoOoOO+++++++OOOOOoooOOOOO+++++++OOOOoOoooOoOO+++++++++++OOOO++++++++++ooXoXoooooOOoOO++++++++OOOoOoOOooooOO++++++OOOOoOooOooooO++++++OOOOoOooOooooO++++++OOOOoOooooooOO+++OOXoX..X..OO++++++OOOoXoXooXoOO+++++++++OOXoX.....OOO+++++",
+"+++++OOOOOOOOOO+O++++OOOOOOOOOOOOOOOOO+++++++OOOOOOOOOO+O++++++++OOOOOOOOOO+O+++++++++OOOOOOOOO+O++++++++OOOOOOOOOOO++++++++OOOOOOOOOOO+O++++++++++++O++++++++++++OooXooOOOOOOO+O+++++++++OOOOOOOOOOOOO+++++++OOOOOOOOOOOO++++++++OOOOOOOOOOOO++++++++OOOOOOOOOOOOO+++OOoXoXoXooOO+++++++OOooXoXoooO++++++++++OOoXoXooooOO++++++",
+"+++++++OOOOOO++++++++++O+OOO+O+O+++++++++++++++O+OOOO++++++++++++++OOOO+O++++++++++++++++OOO+++++++++++++++O++O+OO++++++++++++++O+O+O++++++++++++++++++++++++++++OOOOOOOOO+OO++++++++++++++++OOOO+OO+++++++++++++OO+OOO++++++++++++++OOOOOO++++++++++++++OO+O+OO+++++++OoooXooooOO++++++++OOOOOoOOO++++++++++++OooXooXooO+++++++",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOoOOooOOO++++++++++++++++++++++++++++++OOOOoOOoOO+++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOOOOOOO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOO+++++++++++++++++++++++++++++++++",
+"+++++++++++++++++++++++O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOoOOOoOOOOOO+++++++++++++++++++++++++++OOOOOOOOO++++++++++++++OOOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOO++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++oOooO++++++++++++++++++++++++++++++++++++++O++O+O+O+++++++++++++++++++++++++++++OOX..oXXoXoX...OO+++++++++++++OOOO+++++++++OoooooooooO++++++++++++OoooO+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO++++OO+++++OoX...ooOOOOOO++++++++++++++++++++++++++",
+"++++++++++++++++++++OOoooooO+++++++++++++++++++++++++++++++++OOOOOOOOOOOOOOOO++++++++++++++++++++++++OOo.X.XXoXXXXX..oO++++++++++OOOooOO+++++++OOooooooooooOO++++++++++OOooooO+++++++++++++++++OOOOOOO++++++++++OOO+++++++++++++++++++++++++++++++++OOOOO+++++++++++++++OOOOOOOOOOOO++++OoX.X.ooOOOOoOOO++++++++++++++++++++++++",
+"+++++++++OO+++++++++OOoooooOO++++++++++++++++++++++++++++++++OOOOoooooooooooOOO++++++OOOOO++++++++++++OO...XXXXoXX..XoO+++++++++++OOooOOO+++++++OooooXoooXoOO+++++++++OOoXXoOOO++++++++++++++++OOOooOOO++++++++OOOOOO+++++++++++++O+O+O+O+O++++++++OOOOOOOOOOO+O++++++++OOoooooOOooOO+++OXo...oooooooOoOOOO+++++++OOO+++++OO++++",
+"++++++OOoOoOO+++++++oo.....oOO++++++++++++++OOOOOOOOO+++++++Ooo..............XO++++++oooooO++++++++++OOo...oXoXoXo...oo+++++++++OOoo..ooO+++++++OooXXXXoo..OO+++++++OOOOo...oOOOO+++++++++++++OO.....oo++++++OOoo...OO++++++++OOOOOOOOOOOOoOOO++++OOoXXoXoooOOOOOOO++++OOooXooooo..OOO++OoX...Xoooo..XoXooo++++OOOooO+OOOooo+O++",
+"++++++OOoooooO++++++OO.X...ooO+++++++O+++++OOOOoooooOOOO++++Ooo....X......X...O+++++OoooXoOO+++++++++OOoX..XXXoXXX...oO++++++O+OOooo..ooOO+++++OOoooXXoXo..oOO++++OOOOooo...oooOOO+++++++++++OOo.....Xo++++OOOOoo.X.oOO++++++OOOOooooooooOoooO+++OOooXXoXooooooooOO+++OOOXXXXXooo..ooO++oooX..XXXXo..XXoXoo++++OooooOOOOOooooO++",
+"++++++Oo...ooO++++++OOoo...ooOO+++OOOoo++OOooo.....XXooO++++OOoooOooXXXooooOOOO+++++OooXoXOO+++++++++OOoXXX.....oX...oo++OOoOoOOOooo..ooOO+++++OoooXXXooo..OOO+++OOooXooX...oXoXooO++++++++++OOoXoXoXoO++OOoOooooXXooOoOO++++OoX...........X.OO+OOoX..............X+++OoooooXXooo..oOOO+Oooooo..oooXo...Xoo++++OOo..oOOOoX.XooO+",
+"++++++oO...ooOO+++++OOoo...XoOOO+OOoOoo++OOooo.....XXoooOO++OOOOooooXXXoOoOoOOO++++++oooXoOO++++++++OOOoXXXX....XX...oo++OooooooOooo..oooO+++OOOooooXXooo..ooOO++OooXXXXo...XXXoXoo++++++++++OOooXXXooo+++ooooooXoXXooOOOO++OOoo.............oO++OoX...............+++OooXXXoXooo..oooO++OOooo..oXooX...XXo++++OOo..ooooo...ooO+",
+"+++++OOo...oooO++++++OOo...oXOOO+Oooooo+OOooXo.....XXoooOOO+OOOOOoooXXXooOOOO++++++O+ooXXoo+++++++++OoOoXXX...X.XX...oO+OOoooooooooo..oooOO++OOOooXoXXooo..ooOo+OOooXXXXX...oXXoXoo+++++++++OOooXoXXooO+OOooooXoXoXooooooOO+OOXX.............OO+OOoo.....X.......X.+OOOoooXoXXooo..oooO+OOoooo..oooXo...oXO++++OOo..oooOo...ooO+",
+"++++++OOooo..OO++++++OOooXXooOOOOoXX.oo+Ooo...ooXXXoXXXXooO+OoooooOoXXXoooOOOOO+++++OoooXoOO++++++++OO.....XXoXXXX...oX+O+............XXXOO+oOoXXXXX..XXX..oXoo+OOoo...XX...XXXXXoo++++++++OOooX.....oO+OO...............oo++Ooo...ooooooo...oO++OOoooo..XXo..ooooO+OOo..............Xo+++ooXX..ooooo...ooO++++OOoX.oooooXXX..O+",
+"++++++OOoXo..Oo+++++++OoXXXoooOOOo...oo+Ooo...ooXXXXoXXXooO+OoooooooXXXooooOOOO+++++OOoXXooO++++++++ooX....XXoXoXX...Xo+OO.X..........XXXOO+OoooXXXX..XXo..XXXo+OOXo...oX...XoXXXXo++++++++OOXXo.....oo+OO........ .....Xoo++OOo...oOoOooo..XoO++O+OoooX.XXX..oOOOO+Ooo...............o+OOoooo..oooOoX..ooO+++++OoX.oXoooXXXX.O+",
+"+++++OOOooo..oOO++++++OOooX..ooOooX..oO+O..ooooooooXXooo..O+OXoXoXXo...XXoXoXoo+++++OooXoXOO+++++++++oooXoXoXXoX..XXXoo++OOoooo..oooooXXXoO+oooXoXXX..XXX..ooXX+Oooo...oo...ooXooXo+++++++++ooXXXXooooO+OooXXoXoo...oooooOO++OooX.XooOOooo...oO++++O+OOooXXXooOoOO++++OOoXoXoXooo..oooO+OOo.....oOOooXoXooO++++OOOXo...XXooooOO+",
+"++++++OOooo..ooO++++++OooXo.XooOoo..XoO+O..XooooooXXXooo..O+OooXXoXX...XXoXoXoo+++++OOoXoXOO++++++++OOoXoXoXoXXo..XXXoo++OOOooo..oooooXXXoO+oooXXXoX.XXXX..XXoo+OOXo...oo...oooXoXo++++++++OOoXXXXXXooO+OOXoXoXoo...XXoooO+++OOo...oOOOOoo...oO++++++OOOOXXXXooO++++++OOooXoXXooo..oooO+Ooo.....ooOOOXoXooo+++++OOoo...XXoXoOO++",
+"+++OOOOOoOo..ooOO++++++Oooo..ooooo.X.OO+O..oXoOooooXXooo..o+OooooXoX...XXXXoXoo+++++OoooXooOO++++++++oooXoXXoXoX..XXXoo++++OOoo..oooooXXXoO+oooooXXX..oXX..oXoX++ooXX..oo...oooXoXo++++++++OOXoXXXoXooo+OooXoXooo...oooooOO++OooX..OoOOOoo...oO+++++++OOoXXXooOOO+++++OOOXoXXXooo..oooO+Ooo.....oOOOooXXXoO++++++ooo...XXoooOO++",
+"++OOoooXoOoXXoooO++++++OOoo..oooooOoOO++o..oXooOooo..oooXXo+OOooOoooXXXoOOoOOOO+++++OOo...OO+++++++++Ooo..........XXXoO+++++OOOXXXXXooooOXo+OOOoooooXXooo..oooO+OOoX...Xo...XXXXXoX++++++++OOooo..XXXoX+OOoXXXXooXXXXooOO++++OOo...OoOOOoo..Xoo+++++++OOOoXXXoOO+++++++OOoXoXXooo..ooOO+OooXoX.XoooOooooXoO++++OOOoo...XXoOO+O++",
+"+OOoooXoooOXXoooOO++++++OOO..oXooOOOO+++o..XoooOOOo..oooXXo++++OOOOoXXXooOOOOOO++++++ooX..oOO++++++++OOo..........XoXOO++++++OooXoXooOoOooo+++OOOoXoXXooo..ooOO++ooo...XX...XXXXXoo+++++++++OOoo..XXXXo++oooXXXooXXXXooOO+++++oo.X.oOOOOoo...oO++++++++OOooXoXOOO+++++OOooXoXXoXo..ooOO+OXooXo..oooOooXoXXO+++++OOoo...XXooOO+++",
+"OOoX..oooooooXXoOO++++++OOOoo...oOOOO+++OXXXXooOoOoXXXXoXXo+++++OOOoXXXOoOOO++++++++OOo..XoO++++++++++OOXXXoXoooooXXXOO+++++++Ooo...oooOOOO++++OOoooXXooo..oooO++OooXXXoo...oooXooo++++++++OOOoOXXX..XX++Ooo...ooXXoXXoOO++++OOo..XooOoOoo...oO++++++++OOoooXXOO+++++++OOoXoXoooo..ooO+++OoOoooXooooooXoXoo+++OOoooX.....OoO++++",
+"OOo...XooooooXXXoOO++++++OOoo...ooOO++++OXXoXXOoOOooXoXXXXo+++++++OooXXoOOO+++++++++OOO...oOO++++++++OOoXXXXooooXooXoOO++++++OOoo...ooOOOO++++++OoooXXooo..oooO+OOooXXXoo...ooXoooo+++++OOOOOOooXX...XX+OOOo...ooXXXXXoOOO++++oO...oOoOooo...oO+++++++++OOooXXoOO++++++OOXoXXXXoo..ooOO+++OOOoXXoXoooXooXoO++OOOooXX.....ooOO+++",
+"OoO..XoooooooXXoooO+++++++OooX..OoOOO+++OoXXoXooOooXXoXoXXo+++++++OoXXXoOOO++++++++++Oo...ooOO++++++++OOXXXoXoooooXXoOO++++++++Oo...ooOO+O++++++OooXXXoooX.oXoO++OOooXXoo...oOooooO++OOOOOooooooXX..XXX++OOoX..ooXoXXXoOOO+++OooX..ooooooo..XoO+++++++++OOooXXooOO+++++OOoXoooooo..ooO+++++OOOoXoXooooXoXoO+OOooooXX.....oooOO++",
+"OXX.....XXXXX...Xoo++++++++OOXooXXooOO++Ooo...XooOooo.....o++++++OOOXXXXooOO++++++++OOOoXXXoOO+++++++++oooX..XoXooOOOO++++++++OOOoooXooOO++++++O+oooXXoOoXo...o+++OOOOOoo...oooOOO+++OooXoo.X...XXXXXoo+++OoXXX..oooooXXXOO+++Oo...XoXXXXX...oo++++++++++OOOoXoooOO+++++oooXXXXXo..ooOO++++++OooXXXXX...ooO+Ooo.....ooooo..XoOO+",
+"OXX. ...XXXXX...Xoo++++++++OOoXXXXooOOO+OOO.X.XXooooo...X.O+++++++OOXXXoXoOO+++++++++OOXXoXXoOO+++++++OOoXo..XXoooOOO+++++++++++OoooXXOOO+++++++OoooXXoOOoo.X.o+++OOOOOOo.X.OOO++++++OooXXo.....XXXXXoo+++OOXXX. ooXXoXoXOO++OOo...XXXXXXX...OO+++++++++++OooXXooo+++++OOoXXXXoXo..oOO+++++++OOoXXXoX..XoOO+OoX....XoOoXo...oOO+",
+"O..XoooooooXoXoX..o+++++++++OOOOoo...oO++OOOoooo.X.ooooooOO+++++++OooXXXooOO++++++++++OOoo.XXooO+++++++Oooo..XXXoOOO+++++++++++++OOOoooooO+++++++OooooOoOOooooX++++++OOoO...oOOO++++OOoooXXXoooooooooXo++++OOoooooOoOooXoXo+++OooooOoOOoOoXXXoO+++++++++++OOooXXXoo++++OOoooXXXXX..ooO++++++++OOoooXooooOO++OooXooOoOOOOOooo..o+",
+"O.XoXooooXoXoXXo..o+++++++++OOOooo.X.oo+++OOOooX..XoOoOoOOO+++++++OOoXXXXoOO+++++++++++OOO..oooO+++++++OOoo..XXXOO+++++++++++++++OOOooXoo+++++++OOoooXOOOOOoXoX++++++++OO...OO+++++++OoooXoXoooOOOooooX++++OOOooXOOOOooooXo+++OOoXooOOOOoOXoXOO++++++++++++OOOooXoO+++++OoooXXoXo..ooO++++++++OOoooXoooOO+++OOoooooOOOOOOoooX.o+",
+"O..oooOoooXoXoXo..O+++++++++++OOoo..Xoo+++++OOooX..OOOOOO++++++++++ooooXoOO+++++++++++O+OoX.XooOO+++++++OOoX.oXoOO++++++++++++++++OOoooooO+++++++OOOooOO+OOoooo++++++++OO...OOO++++++OOooooXooOoOOOOooo+++++OOOooOOOOOooXoo+++OOoooOOOOOOoXXoOO+++++++++++++OooXooo+++++OoooXXXoX..OOO++++++++++OoooooOO++++OOooooOO++++OOOo.Xo+",
+"OOOOOOOOOOOOOOoOOoO++++++++++++OOOOoooo+++++OOOOOOOOOO+++++++++++++OOoOOOOO+++++++++++++OOOOoooO+++++++++OOOoOoOOO++++++++++++++++++OOOO+O+++++++OOOO++O+++OOOO++++++++OOOooO+++++++++OOoOoOOOOOOOOOOOO++++++OO+O+++OOOOOoO+++OOOOOO++++O+OOOO+++++++++++++++OOOOOO++++++OOOOooOooooOO+++++++++++OOOOOOO++++++OOO++++++++OOOOOO+",
+"+OOOOO++OOOOOOOOOO+++++++++++++++OOOOOO+++++++OOOOOOO++++++++++++++++OOOO+++++++++++++++++OOooOO++++++++++OOOOOO++++++++++++++++++++++++++++++++++++++++++++OOO+++++++++OOOO+O+++++++++++O+OOO+++++++O++++++++++++++++O+O+++++++++++++++++OOO++++++++++++++++O+OO+++++++++OOOOOOOooO+++++++++++++++O+O+++++++++++++++++++++++OO+",
+"+++++++++++++++++O++++++++++++++++++OO++++++++++++++++++++++++++++++++O+++++++++++++++++++OO+O+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOO++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOO+O++++++++++++++++++++++++++++++++++++++++++++"
+};
diff --git a/hacks/images/matrix0b.xbm b/hacks/images/matrix0b.xbm
new file mode 100644 (file)
index 0000000..25b376e
--- /dev/null
@@ -0,0 +1,308 @@
+/* Created with The GIMP */
+#define matrix0b_width 160
+#define matrix0b_height 182
+static unsigned char matrix0b_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xfb, 0xbf, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xb7, 0xff, 0x7d,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xf7, 0xff, 0xdf, 0x7d, 0xf7, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbb, 0xfb, 0xff, 0xff, 0xdf, 0x7f, 0x7f, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0x7b, 0xff, 0xff, 0xfd, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xfb, 0xbf, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xfe,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xfb, 0xfd, 0xff, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xbe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0x7b, 0xbf, 0xbd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xfe, 0xef, 0x6f, 0xf7, 0xff, 0xef, 0xdd, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xf7, 0xff, 0xfb, 0xde, 0xff, 0xff, 0xfb, 0xfe, 0xf6, 0x7f, 0xbf,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xdd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xbf, 0xff,
+   0xff, 0xfd, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xfd, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xdd, 0xb7, 0xdf, 0xfe,
+   0xfe, 0xfe, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xf7, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdf,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xfd, 0xee, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xbf, 0xff, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xfd, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0x7f, 0xf7, 0xfd, 0xbf, 0xdf,
+   0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe,
+   0xfb, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0x7f, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xdf, 0xfd,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdd, 0xdf, 0xdf,
+   0xfe, 0xfb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7f,
+   0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xfb, 0xbf, 0x7f, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xfd, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb,
+   0xdf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xbf, 0xff, 0xee, 0xff,
+   0x7f, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xff,
+   0xbe, 0xff, 0xfb, 0x7f, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xfd, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xef, 0xff, 0xfe,
+   0xfd, 0xff, 0xff, 0xff, 0x7e, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xdf, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xdf, 0x7f, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xbb, 0xfb, 0xff, 0xff, 0xff, 0xfd,
+   0xfd, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0x7f, 0xff,
+   0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xff, 0xfd, 0xff,
+   0xef, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xfe,
+   0xf7, 0xdd, 0xbf, 0xef, 0xff, 0xf7, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xfb,
+   0xff, 0xfe, 0xff, 0x7f, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7f, 0xff, 0xdf,
+   0xff, 0xfb, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0x7f, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xbb, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xfb,
+   0xf7, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xb7, 0xdf, 0xff, 0xfe, 0xf7, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xf7, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdd, 0xff,
+   0xbf, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f,
+   0xf7, 0xee, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xfd, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xff, 0xfd, 0xff,
+   0x7f, 0xff, 0xfd, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xfb, 0x7f, 0xff,
+   0xfd, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xf7, 0xff,
+   0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0x7f, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0x7f, 0x7f, 0xff, 0xff, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xfb, 0xff, 0xef, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xf7, 0xff, 0xfb,
+   0xef, 0xfb, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xfe, 0xbf, 0xff, 0xdf, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff,
+   0x77, 0xff, 0xff, 0xef, 0xbf, 0x7f, 0xef, 0xfd, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff,
+   0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xfb, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xfb, 0x7f, 0xff, 0xff, 0xfd, 0xdf, 0x7f, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0x7f, 0xff, 0xf6, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfe, 0xfd, 0xfe, 0xdb,
+   0xbf, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xdd, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xdf, 0xfd, 0xf7,
+   0xf7, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff };
diff --git a/hacks/images/matrix0b.xpm b/hacks/images/matrix0b.xpm
new file mode 100644 (file)
index 0000000..3b5e1de
--- /dev/null
@@ -0,0 +1,192 @@
+/* XPM */
+static char * matrix0b_xpm[] = {
+"160 182 7 1",
+".     c #000000",
+"+     c #030E03",
+"@     c #061406",
+"#     c #0B2A0B",
+"$     c #081E08",
+"%     c #0F390F",
+"&     c #165016",
+"...............+.................++@+......++++.............................................................................................................++..",
+".............+@@@+....+++@+++...+@@$$@+...++$$@++...+++++.......+.+......++++.......+@@+....+@@++......+@@++...............................................++@@+",
+".+..+..+..+..@##$++...@@$@@@+.+.+$$$$@++.++$##$@+.+.+@@++..+..+.@+++.+...+@@@+.+..++@$@++...+@$@+..+.++@##$+.+..+++@+.+..+..+..+..+..+..+..+..+..+..+..+...+$#$@",
+"...........+.$%%$@.+.+@#$##$+..+@$###$@..+@$###$@..+@$$$++....+@$$@+.....+$$@+.....+$$$+.+..+$$$++....+$%%#@+....+@$++..................................+..@$#$+",
+"..+..+...+..+@%%$@...+$####$@+.+$#%%#$@+.@$####$++.+$$$$@+....@$##$++..++@$$@+..+.+$$$@+.....@$$@+..++@#%%%$@+...@##$+..+..+..+..+..+..+..+..+..+...+.....+@$$@+",
+"...+...+.....$%%#++..+@####$+.+@$#%%%$@.+@$##$$$++.+@###@++.+.$$#$@++....+$@++....+$#$+...+..@$#$++..+$#%&%$@..++$%%#@++.+..+..+...+++++++++..+...+...+...+$$$+.",
+".....+...+..+$#%#+.+.++@@@@+...@#%%%#$@..@$####$+..+@$##$+...+$###$@+....+++...+..@##$++.....@$##@....$#%%%$@+.+$#%%%$@...........++$$#$#$@+....+...+..+.+@$$@+.",
+".+...........@#%$+......+++.+.+$#%%%%$++.+@$####@+.+@$#$$@+..+@#%#$$++.......+...+@#%$+.....+.$%#@+...+####$+.+@#%%&%%$@.+..+..+...@#%%%%#$++............+@$$+..",
+"...+.+..+.+.+@##@+............+$%%%%#$+.+@$$####@+.@@$##$@++.+$#%%%#@.+........+..@$#$+.+.+..+$$$+.+.++$$$$@+..+$#%%%#@+....+.+....+$$$$#$@+..+.++.+..+..$$$@+..",
+".............+@$$...+....+....+$##%##@+..+$##%%#$++.+@$$$$+.++$##%%#@+.+.+.+......+$$$++....++$#$@.....++++...+.+$%%$++..+.+@@++..+.++@@+++....++@@+...++@$$++..",
+".+....+...+..+@$@+....+....+...@$##$$++..+$#%##$+...+@$$$$+..@$##%##$+.......+.+..+@$$@+.....@$$++..........+....@##$+.....+$$@+............+..+@$@++..++$$@+...",
+"...+..........@@+..+.........+.@$$#$$+...++$#%$@.+...+$$@+++.+@$###$@+.+.+.........+@#@++.+.+$$@+..+......+...+..+$$@.+...+@$#@+..+..+.+.......+@$@+...+$$$@.+..",
+"......+.+.+.+.+.+...+.+.+.+....+$$$@@+.....+$$@+......+++.....++@@@@++.....+..+.+...@$@+....++$++...+...+......+..+++......@$@@..........+..+..++@+...+.$$@+....",
+".+.+...........+.+..............++@++.+....++@+...+.....+..+...+..+.......+......+...++..+....+..+....+...+.+....+....+.+.+++@.+...+................+..+@@++.+..",
+"...++++.....+.+.......+.+++..+..+++++...+....++.....++++.+...+..+.+.+.+.+.@+@+....+++.+...+.+.++.+..+..............+........+........+...+.......+.......++.....",
+"...+@@@+++.++@@@++.+..+@@@@@+..++@$@+++....+@@@++..++@$@@++....+@$@@++.+@@@@@@++..++@@@@+....++@+++.....+....+.+...............+.+....+.....+.+.......+.+@@$@+..",
+".@@$$##@+..+@###@...++@$###$++.+$$##$@+....+$##+..++$##$$@+..+.$#%#$+..+$$$#$$@++++$##$$++.+@$$$$@++.+....+......+.+.+.+....+..+..+......+....+.+.+.+..+@###$@+.",
+".+@####$@+++@#%%$+...+@####$@+++$#%##$@.+.+$#%%$+..+$###$$++..@$%##$@+.+$$$$##@+++$###%$@+++@$###$@+.....+.+.......+.....+..++@@@+...+.++.+.++@@++.....+$#%%#$@.",
+".@$#$$#$@+.++$%#$+...@@$$###@+++$$###$@...+$#%#$+.+@$%%##$+.++$#%#$@+..++@$$$$@++@$#$##$@+.@$$$##%@+.+.+@@@+.+...++@@+....++@@$$@++++@@@@++.+@$$$@@+.+.+$####$@+",
+"+@$#$$$$@@..+@#%$+..+.++@$$$$+..+@$###@+.+@###%$+..@$#%%#$++.@$%###$++...++$$$+..@$##$##$+++$#$$%%$+...+@#@+...+.+@#@@.+..@@$#$@@+.+@$$$$@@+.@@$##$@+..+@$$##$@.",
+".@$#@@$$$++.++##$+....++@##$++.++$#%#$++.@$###%$++.+$$#%%#@+.@#%%###@+....+$$$++.+$####$@+++$###%%$+...+@$@@.....+@$@@..++$###$@+..@$#####@+.+@@####$+..+@$##$@.",
+"+@$$$$$#@@..+@#%$+...+.@##$@+...+@$##$@.+@##%#%$@.+.@@$$#%$++@##%#%%@+.+.++$$++.+@$#####@+.+@###%%$++...+@++.+....@@++...@$###@++.+@$#####@++.+@$#%#$+..+@###@+.",
+".@$#$$$$$++.+@#%$+...++$##$@+.+.@@$$#$@.+@###%%#@..+@@@$#%$.++#%###%$+...+@$$+...@$##$##$+.++$%%%%$...+.++.+...+..+.+..+.+$###$@+..@$$#$##@+.++@####@+..+@$#@+..",
+"+@$#$$$$@+..+@#%$@++.+$#%#$++.+@$@$$#$@+.@$###%#$+++$@$$%#$+.@$%##%%$+..++$$$++.+@#$#$#$@++.@$##%#@+....+@++......@@++....@$###@@+++$$$#$$@+++$$##$@+....@$$@...",
+".+$####$@+.+@$#%$@+..@#%##$@+.+$#$###$+..+@$##%#@.++$$#$##@+.+$#####@+...@$#@+...+$#####@++.+$####@.+..+@$@@..+.++$#@+.+...@@$#$@+.+@@@@@@++.@$$$$++.+..+@$@+.+.",
+"+.+$$#$@+..+@$###@+++@$###$$@.+@$#$$$++.+.+@$$#$@+.+@#$#$@+..++$$$#$@....+$$@+.+..+$$#$$+..+@$$$$++....+@#@++...+@##@+...+..++@@++...+..+...+@@@++.......+@++...",
+"...@@$@++..+@@$$$@+..+@$$$$@+...@$$@+......+@$$@+...+@@$@+.+..++$@@@+.....+++...+.++@$@+.+.++@$@@.+.+..++@+.....+@$@@.........+..............++.+...+.+..++.+...",
+"+.+.+++..+..+++++++...++++++.+...+++++...+..+++++.+..+++.+......+++..+.+.+.+........++.+.....++++........+.+...+.+@+++.+..+.....+..+.+..+.+.....................",
+".....+........+....+....+.+....+..+....+....+.........++.+..+.+...+........+.+..+.+..+.+..+..+..+......+.+.+....+.+........+.+...............+.+.+.+..+..+.+..+.",
+"+.++@@@+.+..++@@+....+@@@@+++....++@@@+..+@@@@++.+.+@++++++...+@@@+@+.+..+++@++..++@@+@+++..++@@+++.+..++@@+++.++@@@@@.+.++@+++..+.++@+.++@.+.+++.@+.+...++++...",
+".++$$#$@..+++@$@@+.+.+@$$$@@+.+++@$$$@@++@$$$$@@++.+$$$$$@@+++@$$$$$@+.+@@@$$@@+++$$$@$$@@++@@$$$@@..+++@$$@@.+@@$$@@$++.@$$$@+...+@$@@@@@$++@@$@@@$@+.+@@@$$@+.",
+".+@$###@+..+@###@++.+@#####$++.@$#$$##$++$###$##@++@$#####@++@###$##@@+@$$#$##$++$##$$$#$@.+@####@++..+@####@++$#####$@++@###@++.++$##$@$#$@@$##$$##$++@$##$##@+",
+".@$###%$@+.+@#%#$++.+@$###%%$++$##$$$#$++$##$$###@@@$###%#@++@$###$#$@@$##$$$#$@+$##$$$#$@.++#%%#@+...+@@##$@++$#####$@.+@$##@+...+$%####%#@@#%%##%%$@@$##$$##$+",
+"+@$#%%%#++..$$###@+..@$###%%$@@#%#$@@@@++@$#$@$##@+@$#####@.+@$#$##$@@@#%$$@$$@++@#$#$##$++.+@#%$+.+...+@$#@+.+@##%##@+..@$##++..++#%%##%%%$+$#%##%%#@@#%$$$#%$@",
+".@$##%%$@+.+@####$++.$$%##%%$$@#%$+++++.+@$$$@$$$@+@$#%%##++.@$%###@++@#%$@@@$@+++$###$$$+..+@#%$+...+.++$$$@.+@##&%$@+..+$#$@....+$%%%%%%%$@$$##%%%$@@#%$@@$#$@",
+"+@##%%%$@.++$#%%%$@.+@$%###%#@$#%$@..+.+.@$#@@@$$@+@$%%%%@@.+@$%%%#@.+$#%#@@$$@.+@$#$##$$++..$#%@@...+++@@#@++.@$%%%#@+..+@#$@++.++#%%%%%%#@@$###%%%$@$#%$@@$#$@",
+".@$###%$@+.@##%%%#$+.@$#####$@$#%$@+.++.+@$#@@$##@+@$#%%#$@+.@$%##$@..@###$$##$++@$#$$#$$++.+@#%$+.++@@@$$#@@.+@$##%#$+..@$##@@$+.@#%%##%%%$+$$##%%%#+$#%$@@$#$@",
+"++$####$@++$%%#%%%#$+$$##$##$@@$#$@@@@@++$##$$$##@@@######@@+@$###@+.++$##$###$++@####$#@@..+$%%$@+.@$##$##$+.+@#####$@++@$%####@++#%%#$#%#$@$##$%%%$++$#$$$#%$@",
+".@$#%##$@.+$%%##%%#@+$######$++@$##$#$@++@#%####$+@$###%##$@@$###$@+..+@$###$#$+@$##$###$@+.@$#%#@++@$####$@+.@@###$##$++@#%##%#$++$##$$#%#$@$####%%$++@$#####$+",
+".+@$#%#@+++@##$$##$@@$######@+.+@$$#$@+.+$$###$$+++$######$+@$###$++...+$$$#$$+++@##$$$#$+++@$###@+.+@$$##@@..+$##$@@#@+@@#####$@++$#$@@@#$@@$#$$$##$..+$$#$#$@.",
+"..+@$$@@..++@@@+@$@+.@@$@@@@+..+.@@@@++..@@$@$@+...+$@$$@@++++$@@++..+..++@@@+..++@$@@@@@+..@@@$@@+..+@@@@++..++@@@@@@+++@@@$@$@+..@@@+++@++++@@+++++....@@@@+..",
+"..+.++++........+.....+..++........++.....+..+..+...+..+.+...+.+++.....+...+.+....+.+.+++.....++++.....++.......+.++.+...++@+++...+.++.++......+..+...+...+.....",
+"..+.......+.+.+..+..+..+...+....+...+.+....+.++..+..++.+.+........+.+...+.+..++...+.+....+.+.+..+.+...+.+++.+...+.@@++...+++.........+@@@+...+..+...........+...",
+"++@@$@@++....@@@++...+@@$$++.+...@@$@@.+.+@@@@@@+.++++++++++++@@+++@+++++++++++++++@@@@@@+.+@@@@@@@+.++@@@@@.+..+@##@++.+@@@@.+.+..++@$#$++....++@++...+.....+..",
+"+@####$@++.++$##$@++.$####$@+..++$##%#$+.@##%#%#$++@#$@$$$@++@$$@@@$$++@$$@@$#$++@##$$##$@+@###$##$@++$#####@+..+@##$+...@@$@+......+$#%#@+..+.+$$@+.....+......",
+"@$%%%%#$++++$##%##@+@$%%%%$$@+.+@$#%%%#@+$%%&%%%#@@#%#$$#%$++$%#$$$%#@@$%%$$#%#$@$%%%#%%#@@$%%##%%#@@@#%%%%#@+..+$%%@+...+@$$++.+..+.+$%#@.+...$#%$++...........",
+"@$$###$#$++$$#$###$+@$%%###$@++@$####%#@@$%%%&%%#@@$%#$$#%$@+$##$$$##@@$%%###%#$@$#%%#%%#@@$#%##%%#@+@$##%%#@+..+$%#@+...+@$$@+......+$##@...++$###@+..+...+.+..",
+".@$#$$$$$@@#%$$$$#$++@$##$#$$@.@$#####$@+$#%%%%%#@@$#$@$#%#@+$$#$@$#$@@#%%%%%%#@++##%###@.+@$#####@++@$$###$@...+$%#@.+...+@##@.+..+.+$%#@+...+$$##@++...+......",
+".@$###$#$@$#%$@@$$$@+@$#%###@+.@$#####$+.@$#%%#$$+@$$$@$#%$++@$$$$$$$@+$%%%%%%#@++@#%%#$@..+@$#%#$+..+@$###@++..+@%#@+....+@$$$+.....+$##@+.+.+@$$$++..+...+....",
+"+@$#%###@@@##$@@$#$++$$%%%%$@+++$##%#%$@+.+$#%#@+.+$$$@@#%$+.+@#$$$$@++#%&%%&%#@.+@$###@++..+$#%#@+..+@###$@+...+$%#@..+...+@$@@++...+$%#@.....+++++.........+..",
+"+@##%##$@+@$%#$$##$++@##%#%$@..@$$$##%#@.++$#%$@.++$$$$$#%$+++@####$+.+$#%%%%%#@++@#####+.+.+$#%$@...@@###$@@...+$%#@+......@$#@+..+.+$%#$+.+......+.+.+..+.....",
+"+@$###$@..+$######$++$######$@+@###$#%#@...@#%#@..+@$$$$##@+..@$###@+..@#%####$++@######$@..+$#%$++.+@$%%###@+..+$%#@+.+..+.+@$$@+..++#%#@...+..+............+..",
+"@$###$++...@#%%%%%$++$%#$$##$@+$######$@+.@$#%$@+.+@$$$#$$@+..@$###+.++@$#$#$$$+@$%######@+.+$#%$@+.+@######@+..+@%%$+......+@$#@...++$%#@+............+.+.+.+..",
+"+@$#$@+..+.+$#%#%#$++@$$$$$$$+.@$#$$$$@+..+@#$$@...+@$$$$@++...@$$$+...+@$$@$$+++$$#$$$#$+..+@$#$++..@$##$##@+...@##$@.+.....+@@@+..+@##$++...+...+.+...++++++++",
+"+++@@++....+$$####@.++@@++++++.@+@@@@@+...++@@@++...+@@@@+...+.+@+++....++++++.+.++@@@@@+++.++@@++.+.++@@@@++..+.@$$@@...+...+++.+..+@$$$+.+..........++@@@@@@@+",
+"....+.....+.+@@@$@@...............+..................................+.......+...+.++.........+.+......+.+.......++@+++............+.+@@++......+....+.@@@$$$$@+",
+".....+.......+.....+.++...+.....+...+..+....+.+.+..+..+.+.+..+.+.+++..+...+......+....+.......+..........++.+..+.........+.++.+........+...+.+....+....+++++.++.",
+".+.++++...+.....+....+@$+....+...........+...+@@++..+..........++@@@++..+......+.@@@+....+.+.++@++.+.+..++@+..+@@@+.+.+...+@@@++.+.+............................",
+"..+@$@++......+....++$$$@+.......+...+.+...+.@$$@+....+....+..++@###@++...+.+...+$$#@+.......@@$+......++$$@..@@#@@.......@$##@......+.+....+.+.+.+.+......+....",
+"..+$##@...+.+.+.++...$##$++.+.+...++++....+.@$##$+++.+.+++....+$###$@+..+.+.++.++@##@@++....+@#$@+...+.+@#$@@.+@$#@@@.+.+.+$%#$+..+.++.++++....+.+....+.+++..+..",
+"...@#$@+....@@$$@+..+@$##$$++..+@@@@@@@++.+@$$$$$+.++@@@@@+.+++$%%#$@+.+@@@@@$+.+@##$$@@+..++$#$@+...++@$#$@+.@@$$$@@@....+@#%$+..+@@$$@@@@++@@@@@@@+..++@@$@@+.",
+".+.+@$++.+.+@####@+..@#####$++.+$#####$+++$###%#$+++$###$$@+.+$#%%#$++.@$###%#@++@##%##@@+..+$##@+....+@##%$++.@$####@@+...@##@+.+@$###%##@++$#####@++.+$####$@+",
+"....+++....@$#%%%$++.@#%#%##$@+@#%##%%#++@#%%#%#$++@#%#%%#$@++$#%%#$+++$###%%#$+.@$###%$@+..@$#%@+....@@$###+.+@$#%##@+..+.@#%$+..@#%%%%%##@@$#####$@++@$%####$@",
+"+.+..+.+.+.@$##%%#@.+@$####%#@+$#%#$$#$@+$#####$$++@%%%%%%#++.+###$@.+@#%##$##$++@####$#@++.+@%%$+..+..@@##$@+.@#%%%#@+...+@##$+.+@$###%##$@@@##$$$#@+@$#%#$#%#@",
+"..........+@#%##%#@.+@$$$$#%#@+$%#$@@$$++$%%$$#$$@@$%%%%%%#@+.+$#$@+.+@#%#$$#$@+.@$#$$$$$+..+@#%$@.....++@##+.+@$%%%$@+...+@%%$+.+@$######$@+@##$$$$$@+$%##$#%#@",
+"...+.....+.$#%#%%#$.+@#####%#@+$%%#$$$$@+$#%####$++$%%%%%%#@.++$##$@.+@#%#####@++@##$$$#$++.+$#%$@+.+...@$#$@.+@##%%#@++..+@#%$++.@$$#####$@+@$#$$$#$++$%%#$#%#@",
+".....+...+.$#%#%%#$++$######$++@####$#$@+$####%#$@+$#%%%##$@+.@$##$@+.@$#%###$@++@######$@.+@$%%#@@...@@@$#$@.+$######++.++$#%#@++@$##$####@@$######$@+@##%###$@",
+".+....+...+@##%###$++@###%#$@+.+@#####$+.+$#####$+++$$####@+.+@####@+++$$##%##+++$##$$##$@.+@$###@@+..+@$$#@+++@$$$##$@+.+@$###$++@$##$$$$$@@@##$$##$@.+@####$@+",
+"...+.......+@@$$$@++++@$$$@@...++@@$@@@+..+@$$$$++..+@$$$@++..@@$$$++..+@$###$@..@@@@@@@@+..+@$$@@+..+@@$$@@..+@@@@@$@@...@@$$@@.++@@$@@@@@+++@@@@@$@+.++@$$$+..",
+".......+....++++.+....+.++.+......++++.....+.+.++..+.+.+++...+.++++++.++@@@$@@+..+.+.+++++.+..++@.....++@@++....+...++.+.+..+++.+..++++++++...+++++.++.....+.+..",
+".+.+....+....................+...............+..........................++.@++.+..................+.....+........+.+........+.........+............+..+....+....",
+".....+...........+........+.+........+..+.+.+..+.+....+....+.+.....................+........+.+.....+......+..+...@+++.....+@@++....++@++...+...........+....+..",
+".......+.+....+....+..+.......++.+....+...++++.....+....+......+.+.+.....+....+.+....+.+.+......+.......+.......++@@@+.+...@@$@.+...++@@@+....+..+..+.+.........",
+".++++++...+.+.++++.+..+.+++.+...+.++++..++@$@@+.+...+++.+.+.+.+.+.++.++.++.++.+...++@.++....++.+.+@.+.+++++++...+@##@+....+@##@+....+@$#@+..............+....+..",
+".@@$$@@@+.+.@@$$$$++.++@@@$@++..+@$@+++..@$##$$@.+++@@@@@@+.+@$$@@$$@+++@@@+@$@@.+@$@@$$@@+@$@@@@$@+.+@@$$$@@...+@%#@+.+...@#%$+.+...@##@+.+..+.+.+.+.....+.....",
+"@$%%#%$$+++@$###%#$+++$#%##$@+++$###$$+.+@#%%%#@+.+$##@$#$@@+$#%###%#@@$##$$###@+@#%##%#$+@$##$$$##@.@$#%%%$@+..+$%%@.....+@#%@+....+@#%$+....+@+@@++.+.+....+..",
+"+$%%%###$+@$###%%#$+.+$#%%#$@+++$%%%#$@.+@#%##$@+.@$%#$$$$$+@$%%###%$@@#%####%#@+@$%%%%#@@+$%##$#%#@+@@#%%##@..+@$%#@+.+..+@#%$+.+...@#%$++.++@$#$$@@+....+.....",
+"+$#####%#$@#%#####@.+.@#%#$$+.+@#%%##$+.++$##$@+..+$##$$$#@++@$##$##$@+$#%#%%#$@.+@##%%$@+.@##%#%#@@.@$$#%#@@+..+$%%@+.....@%%@+....+@#%$+..+@##%%##@++......+..",
+".@#####%#$@#%##%##@+.+@###@++.++$%%%#$@+.+@$#@@+..+@#$$$$#$@+@@$#$#$@++@$%%%%#$@++@#%%#@@..@@#%%##@.++$#%%#@@...@$%#@...+.+@#%$+.+...@##$+..+@##$##$@...+.+.....",
+"+@$%####$+@$####%$@.+.$#%$+++.+@$###%#@+.+$##$@@++.@$#$$##$@.+@####@+..@###%%#@+..@##%#$@@..@$#%$@+..@$#%#$$@@..+$%#@@....+@##@+....+@#%@+....@@@$@@++.......+..",
+"+@$###$@+.++@$$###@+.+$#%$$++.+@$###%#@+..@$%#$$++.@$####%$@+.+$###@...+@#####@+++$##%##@@.+@$##@@...@$%%%#$@+..+@%#@+.....@$#@..+...@##@+.....+.+.+......+.....",
+"+$###$+++...+@$###@+++####$++++@$$###$+..++$$#$@+.+++$$$##$+..+@$$@+.+.+@$$$#@+..@$$#$##@@.@$#%#@+...+@##%#$@+...@$$@++.+..++@++....+@$$@+.+.+.........+.....+..",
+"+$#%$$+.....++$###$+.+@$@@@+..+++@@@@++....@@@@++...++$@$$++...+@@++....++@+@+..+.@@@@@@@..@$##$@+.+.++@@@@@+....@@@+........+...+..++@@.......+..+.+.....+.....",
+".@$$$+.+.+....+$$$++....+.+.......++.+.+.....+.........++.+.+.................+..+.......+.+@$@@@.....+.++....+...+.+.+.................+..............+.....+..",
+"..+.++....+....+++.+.+..+.+...+.+..+.....+.+....+.+.++.........+.+.+....+.+++......+.+......++@...........+.............+..+.+.....+.+....+.+...+...+.....+.....",
+".......+...+.+...........++++....+++++.......+......+@++@@+.+...+++..+..+@@@@@@.+......+......@@@++.+..+.++.+.+.+.+.+...........+..............++@++...+.+.+.+..",
+".+...............+.+.+.+@$$+....++$$$@+...+.+.+.+.+@$$$$$$@+..++@$@.....+$###$@...+++@+.+.++@@$$@@....++@@@@..........+.+....+.......+.+....++@@$$$@+....@@$++..",
+"...+.+...+.+.+.+......+@$%#$@+.+@##%#@++.++@@@@@+.+@#%##%%#++..@##@+.+.+@#####@@+..@.@@@...@$#%%%#@@..+@$$#@+.......+.....+.+.+.+.+......+...+$%%%%$@+.+@$##$++.",
+".............+.++....++$#%%$@..+@####@+..+@####$@.+@#%#%%#$+..++##$+...@$%%##@@...@+++@.+.+@#%%%%#$@..@@##%$+.+.+++++++..+@@@@@@@...........+@#%&%%#$@..+$$$$+..",
+".+...+.+.....+@@+.+..+@$###$@+++$###@@.+.@$####$@@.+$#%#%#@.+..@##@+.++@#%%###@@.......+..+@#%%%%#$@.+@$###$@...@@@@$@@+.@$#####$@+.++@+@+.++@#%%%%##@+..+@@++..",
+".........+...+@$@+..++$$#$#$+..@$###@+...@$##$##$+.+@$%##$@+..++$#@+..+@#%%%##$@....+....+@$#%####$@+.@$#%%$@.+@@#$#$$@@.@$#%#%%#@.@@@@@@@+.@$#%%%%#$@+...+.....",
+"..+.+.......+@$$$++..+$$#$$@+++@#%%#@+..+@$#$##$@++.@$%%#@+....@$$@+..+@#%##%%$@++........@$%%%%%##@.@@##%%$@+.$$%###$@+.@@@$$#%#@+@@$###$@++@######$@+.........",
+"......+..+...$#%$@...+@$###$+..@#%%#@@+..@$#####$+.+@$%%%@@+..++$$@+..++@###%##+....+.....@$%%%%%#$@..@#%%#@@.@$%##%#$@...+.@@@#$@.@@@$$$@+.@@#%%###$@...+.+..+.",
+"+...........+$%%#@+..++$###$+++@$%%#$$@++@$$####@+..@$%%#$+....@##@+...+@$##%%@@.+.....+..+@$%#%#$@+@.@@#$$@+.+$#%####@@......@@@+..+@@++++.+@$##%%#@++.........",
+"..+.+.+..+..+@%&#@+...++$%#@+.+$#%%%%#$+.+@$$$$$++.+@#%%%$@+..+@#%$+...@$###%$@+....+......@@$###@@....+@@+....@@$$$$$@@....+..+............++@####$@.+...+.+...",
+"............+$%%#@+....+@$$@...@##%###@++.++++++..+.@$#%#@+....@##@+..++$##%#@@..+.....+....+@$$@@.+............@@@$@@@+.+........+.....+.....@@$#$++...........",
+"+......+.....@$#$++.....+@++.+.+@$@$$@@.............+@@@@++.+..@$#@+...+@$#$$@......+....+..++@@++........+..+..+++@@+.......+.+....+..........++@+...+.+..+.+..",
+"..+.+.....+..+$@@...+.+..........++.++.+..+.+..+...+..+++.....+.+@++....+@@+@.+..+.................+.+.+.................+.+......+...+...+.+.+.+..+............",
+"....+.+.......+.+......+++.+.+.+..+...........................+.@++++.+....+........+.+..+...+.+..........+.........+.+..@+@...+...@@++.....++@+++......+....+..",
+"+..++@+++..+.+.+..+....+@@@.....+@@@@+.+.....++.+.+..+.....+.++@$$$@@+..+.....+..+.........+..@@++.....++@.+.+.+.+......+@@$@+....+@@@@.+.+.+@$@@++.++....+.+...",
+".++@@@@+.....++@+...+.+@@$@@....+@$$@+...+.++++........+.....@@###%#@+.....+..........+.....+@$$@..+..+@@@@.............@@#$@.+++.@@#$@+++++@@##@@@+++....+.+.+.",
+"..@@#$$@++...@$$@++..++@$$@@.+..@@$#$@+....+@@@++...+.+.+++.+$#%%%%#$++.+......+.+.+.....+...@##$@....@@$$$@@....+.+.+..+@#$@@.@@@+$$#@+@@@@@$###@@@@+.+..+@+...",
+".+@@#$$@++.+@$#%$@+...@@$#$@...++$$#$@+....+@@@..+++@@++@++.+$%%%%#$@....+.+...+.+....+....+.$%%$+.+.+@$$$$$@.++.@.@.+..+@$#$@@@@@+@$#@@@$$@@@$##$$@@@...++@@+..",
+"..+@$$$@+..@$#%%%#@@..@$#$@++...@$##$@+.+.+.++++..+@$$@@$@@++@%%&%%$@@...+@@@.+.++.@........+@#%$@....$$##$@@..+$@$@$@@.+$$$$$$#@@@@$##$##$@@$######@++..+@$$++.",
+"..++@@@++.++#%%&%#$@.++@#$$@..+.@$$$$+............@$##$$#$@++@##&%#$@...+@@$@..+.++..+.+.....$##$@..+.@$#$$$@.@@$$###$@.@@#$#$##$@@@#$##$#$$@$$#####@+..++$#$+..",
+"....+++....+$#%%#$@+..+@$@@++...+@$@@++...+..+....+$##$@$#@@.+@#%%%$@@...@$@@++.++.+......+..@$#@++..+@##%$$++.@$###%#$++@$$###%#@@@$$#$##$$@@$##%%#$+.++@$#$@+.",
+"..+........++@###@+...+++++...+..+@+...........+...@###$###@.++$%%#$@....+@@..++.+++.@.+.....+@@+.....@#%%#@@.+@$###%%@+.@@$#$%%#@+@$#$$$#$@@@@###%%$@.+@$$$$++.",
+"........+..++$$#@@.+.................+..+.+.......+@$######@..+@%%%$@@+......+.++..@@$@+..+.....+....+@$##$@+.+@$###%#@+.@$$$##%%@+@$$$$$$$@+@$$##%%#+++@##$$@++",
+".+.+.+.....+@$##$$@+..+..+.+...+..+.........+..+..+@#######@+.@$%%%#$.....+.++.++.@@$#$@..........+....@$$@+..+@$$$##$@..@@$$##%%@+@@$@$$$$@+@$$$#%%$+.@@$#$#$@.",
+"........+.++$#####@+.................+.............@$##$@@@+..@#%%%#$@++..++.++.+..$#%$@+...+.+................@@@$$@@+..+@@@@$##+++@++@$$$@+@@@@@##$+.+@$###$@+",
+".....+.....++@$@$@@+...+...+.+..+.+....+.+..+..+.+.@$$@@+..+.++@###$$+...+.++.++.++@$#@+........+.+.+....+..+..+.@..+....+.++++@@+....++@@@+.+.++++@++..+@$#$@+.",
+".+.+..........++++..+....+..........+..............+@@@+.+.....@@@@@+..+.++.++.++..@$$@+..@...@.+......+.+..........................+...++....+..+.+......@@@+..",
+".+.@++.+...+..+++.....+++@.+..+.++@@+....+..+....+..++@++.......+...+..+.++.++.+.++@@@...+.+.++@@.@.+.+@@@@.+..+.@.++.+..+++++...+....++++.+..++@@++.+.+....+...",
+"..+@@@+.......+@@++....@@@++....+@@@@@+....+++@+.....@@@@+..+.++@@@@@+.++.@@@@++..@$$@@++.++.+@@@@....@@$$@@....+@@@+@+...+@@+++....+.+@@++....@$@@+.....++++++.",
+".++@$@++...+++@$@+..+++@$$@@..++@###$+..++@@@@@+.+.++@$$@+....@@####$@.@@$$$$$@.@+@$#$$@.+.@@@$$$$+.+@@$##$@@.+@@$$$$@@..+@@$$@+.+..++@$@@+..++@$$$@+.++++@@@++.",
+".+@$#$@.+...@@#$@+...+@$##@++..@@###$@+..+@$$$@@...+@$##@@...+@#%%%%#@@$$##%##$+@@##%##$@@.@###%#$@+.$###%#$@++@#####$@+..@$##$@+..++$$#$@@.++@$###@++..$$$$$$++",
+".+@#%##+...+@###$@...@$###$@...@$#%#$@...@$#%#$@...+@###$++...@#%%###@@$%#$$#$$@@$#%%%%%@+@@#%%%%#$++$#%%%%%@++$#%%%%%@+.@@####@@+.+@##%#$@..+$$#%#$+.++$#%%#$+.",
+".+@#%%#@.+.+@#%%$@++.+@#%%$@+.++@#%%$@+..@@$%%$@+..+@#%%$@+..@$#%#%$$@$#%#@@@$@+@@####%%@.+$####%#@.+@####%#$.@$####%#@+.+@$%%#@+..+@$%%#@++.+@$%%#@++..@$#%#@@.",
+".+@##%#@+..+@##%#@.+.+@##%#@+..+@#%##$+..+@#%%#@+..+@##%#@+..@@%#%##@+@#%$@++++..@$####$@.@+$####$@+.@$####$@.+@$####$@...@@%%#++...@@#%#@....+$#%#@..+.+$#%#+.+",
+"++$##%##@+.@$##%##@.++$#%#%#@+.+$#%%#$@@.@$#%#%$@+++$#%#%$@++@$%%%##@@@#%$@.+.@.@@$#%##$@..@##%##$@.+@##%##$@+.@##%##@@+..+@#%$+....+$#%$++...+@#%$++....@#%$+..",
+".@#%#%%#$@+@#%#%##$@+@##%#%#$@+@#%##%#$@.@##%#%#$++@##%#%#$@@@%%%%#$@+@#%#$@$$@.+@#%#%#$@+.@##%##$@.+@$%#%#$@.+@##%#%$@+..+@#%$@+...+@#%$+....+@#%$@..+.+$#%$+..",
+"@##%##%%#@@$#%##%%#@@$%%##%%#@@$#%##%%#@@$%%##%%#@@$#%%#%%#@@##%%%#$$@+$#%##$#@+@@#%####@@@@#%####$@+$######@@@@#%####@++.@$#%#++..+@$#%#@++.++$%%$@+...+$%%#@+.",
+"+$%%###%#@@$%%#$#%#@@$%%###%#@@#%%#$#%#@@$%##$#%#@@#%##$#%#@$#%#%%%##@+@$####$@+@$%###%#$@@$%%##%#$@@$#%##%#$@@$%####%$@++@##%#@@.+.@#%%$@+..+@$#%#@@++.$$%%#$+.",
+"@$##$$##$@@@##$$###@@@##$$###@@@$#$@###@@@##$$$##@+@##$$###@@$######$@..@$##$@+.@$#%####$@@$###$##$+@$###$##@@@$#%####@+.+@$###@++.@@$###$++.+@$#%$$+..+@$##$$++",
+".+@@@@@@@+++@@@@@@@+++@@@@@@@++@@@@@@@@+++@@@@@@+++@@@@@@@@@@@@@$$$$@@+.@$$$@....@@$@@$@@.+@$$$$@@@..@@$$$@$@.+@@@@@@@@...@@@@$+....+@$$@@+..+@@@$@+++..+@$$@+..",
+".++.+.++....++@+@++....+.+.+....+.+.+.....++++.+....+++++++..+.+++.+.....@@@+.....+.+.+.....+++@++.....+++@+....+@@@++.+....+++.+..+..++@.+.....++.+......+.++..",
+"..+.+..+..+.@@$$@@@.+.++++........++@+.....++@.+.....++@+.+......+............+.........+...+++.....+...+++......+@@.....+..........+.@@@+...+.+.....+..+.+.....",
+"..+@++++.+.@$$###$++..+@@+++..+..++@@++.+.+@$@@+.+.+@@$$$@+..+.+@++@.+.+........+...+.......+@@@++......@@@@+.+.@@$$@+....+++++.+....@@$@++.+.++++.......+@@@+..",
+"+@@$@$@@@++@######@+..@@$@+.....++@$@+....+@#$$@....@$###@@..++@@@@@....+.+.+.+...+.++@++..+@$$@@+.+.++@@@@@...++@#$$@+.+.+@@@@@+.++@@$$$@+.++@@@++..+.++$$#$@+.",
+"+$###$##$@@$######@@.+@$$#@@++..@@$#$@@..+@$$#$@+.+@@$#%#$@+..@$$$$@@..+@@.+.@@.++.@@@$@++.+$$$$$@@+.@@@$#$@@.+@@#$#$$+++@@$$$$@++@@$$$#$$+++@##$@@++...@$###@+.",
+"@$%%##$##@@$#%##%%#@++$##$#$@.@@@####$@.++$#$###@.+@$#####@.@@$$$##$@+.@@$@@$$@.++@$$###@@+$$#$$##@@+@##$$##$@+$##$$##@++$#$$$##$@@$##$###$++@#%##$+++++$##%%$@+",
+"@$#%##$$$@@$###%%%$+@@######@++$######@++@$#####@+@@#$$###$.@@##$###$++@$##$##@++$####%%@@@###$$#%$@@$##$##%$@@$##$####@@$##$$#%$@@#%#####@++@$%###$@+.+$$%#%#@.",
+"@#%%#$$$#@@$##%%%%#@@###$$##$@@#%#$$##$@@###@$##$@@###$$##$@@###$$##$@.@$#%#%$@+@$%###%#$@@$#$$$#%$@@$#$@$%%$@@$#$@$%%$@@##$@$#%#@@$######@+.@$##$##$@++$#%%%#$+",
+"@$%%#$$$$$@$$###%%$@@#%#@@$#$@@#%#@@$$$@@#%#@@$#$@@#%#@@$$$@$#%$$@$#$@.+$$%%%$@+@#%%#$##$@@$$$@@##$@@$#$@@#%$@@$#$@$#%#@@@#$@$%%$++@$#%##@+.+@$#$$##$@.+$$###%$@",
+"+$##$$$$$$@$$###%%#@@###@@$#$@$#%$@@##$@@###@@$#$@$#%$@@##@@@#%$@@$#$@++$#%##$@.@#%#$$$#$@@$$$$$#%$@+@$$@$#%$@+@#@@$#%$@@@$$@$#%$+.+$#%%$@+..@$%####$@.@$####%#@",
+"+$###$$#$@@#####%##@@###$$##$@@###$$##$@@###$$##$@@$##$$##$@@###$$##$@.@$#####@@@##%###$$@@@#$$#%%@++$$#$#%#$++$$###%#$+@$#$##%#$+.+@#%%$++.+$#%%###@++@$####%#@",
+"+$%%%%%#$@@#%#$#%%$@+@$#####@++@$##%##@@+@$#####@+@@$##%##@@@@$##%##@+.@$$$@$$@@+$#%#%%#@.@@$#%%##@+.@$##%%#@+.@$##%%#@+.@$#%%%#@+.+@%%%$@+.@$%%##$@+..@####%%#@",
+"@$#%#%##$+@$%#$$##@+.+@##%#$@..@@$%##$@+.+@##%#$@.++@$#%#$@..@$$%##$@...@@@.@+@.@$$##%#$@..@@#%%#$@.++@#%##$++.+$#%##$@.+@$##%#$@..+$#%%#++.+$###@+...+@#%####$@",
+"+@@$$$@@+.+@$@@@@@++..+@@$@@.+.++@@$@@....+@@@@++..++@@@@++...+@@$@+..+..........@@$$@@@...++@@$@@...++@$@@+....@@$$@@...++$$@@@.+.++@$@@+..+@$@@+..+..+@@@@$@++",
+"..+++++..+...+.+.+......++........++.+.+.....++.......++.........+.+...............+.+..+.....+.+.+....+.++.+.....+.+......+.++......+.+..+.+..+.+.......++.+...",
+"...........+...+...+.+.....+....+........+.........+...+..+...+.......+.+.+.+...+..+.......+............+.....+.+.....+....+...........+.....+....+...+.......+.",
+"+.++++.+.......+++.....++++..+...+++.+.....+.+..+....+@@+..+.......+..............+.@++.+....+.+@@+..+..+++........+.....+.+++.+.+.+...++++....+++.+.......+....",
+"..++@+...+.+.++@@@....++@@@....++@@$@+.+..+++++....+.+@@@.....+.+...++.+.++.@.....@@@+........@@@+....++@@@+....+++++.+...++@+......+.++@+...+++@@+.+..+++++....",
+"..+@$@@+.....@@$@@.+..+@$$@++..+@###$++...+@@@@++...+@@$@++..+.+.+.+.++.++..+.++..+@$$@+.+.+.+@@@@++...@$$@+++..+++@@++...+@$@++.....+@@@++..+@$$@+.....++@@++..",
+".++$$$@+..+++@$$$@..+.@$##$@...+@###$@+.++@$$$@@..+.@$##@@..+@@@@@@@@.+++@@$$@@.+.@$##$@...++@$#$@..++@$##$@+.+.@$$$$@@.+.+@#@@+..+.+@$$@+...+@$#$@+.+.+$$$$+.+.",
+"++@##%#@+..+@###$@+..@@####@+.++$#%%#@+..+@####@@..@@$%##@++.$$####$$@.@@#$###$@+@$##%#$$@.@@##%##@+.+$#####@++@$#####@+.+@$##@+....+$##@++..+@##$++...+@###@...",
+".+$##%#$@.++$####$@.++$###%$@..@$##%##+.+@$###%$@.++$##%#$@+@$#%%%###@@@#%#$###@+@#%##%%$@@@#%#%#%$@+@#%###%#++@%%##%%#+..+$#%@+..+.+$#%$....+@#%#@+.+.+@#%#@+..",
+"+@$###%#++.@$##%%$@+.@$###%$@.+@$#%#%$++.@$##%%$@+.@$##%%$@.@$$%%%###@@$%##$$#$@@$%%###%#@@$#%##%%#@+$#%##%##@@$%%###%#@+.+$#%$+....+$#%$+.+.+@$%#@.....+$%%$...",
+"+@#%%##$@++@###%##@.+@#%#%#$@+.@###%##++.@#%##%$@+.@#%###$$+@$#%%%###$+@%##$$$$@@$%%###%#@@#%%#####@+$%%#####@@$%%#####@..+@#%$@....+@%%$@....@$%#$.+.+.@$%#$+..",
+"+$#%###$@.+@%%###$@++$#%####@+@$%%###$@+@$#%#%##@.@$#%###$@@@##%%%%##@.@####$#$@@$#%####$@+$#%####$@@$#%%####@+$#%%###$@+.@$#%#@++.++$#%$@+..++#%#$+...+@$%#$++.",
+"+$#%##%#$+@@#%##%#@++$#%####@++@#%####@+.$######@@.@%%##%$$@@#%%%%%##@+.$$%%#$$..@#####%$@+@#######++@####%#$@+@#######+++@$%##@+..+@#%%#@@+.+@#%#$$++.+$#%%$@+.",
+"++$#$##$@++@$#$#$$@+.@$#$##$@++@$#$##$@++@$#$##$@++@$$#$#$@@+$###$#$$@..@@###@+@.+@$#$$$@+.+@$$##$@+.+@$####@+..@$$#$$@+.+@$###@++.+@$$#$$+.++$$##$@+..+@$##$$+.",
+".++$@@$@@..++@@@@@++.++@@@@@+.++@@@@@@+..++@@@@@@...@@$@@@+..@@@@@@@+....@##$@....++@@@@+...+@@@@@....++@@@+.....@@@@@....+@@@@@+...@@@$@@+.+.@@@$@++..++@@$@++.",
+"...++++.+....+++++......++++....+.+++.+...+.++++...+...+..+...+.+....+.+.+@@@+......+.++......+.+..+......+.+..+..+++..+....++++.....++++....+.+++.+.....++.+...",
+".+.+.++..............+..............+................+.+..........+............+.........+....+......+.+..+.........+............+......+..+.+++.+...+..........",
+"+@$$$@@@+.+.+++@+++...++@+..+.+.+.+++++.+.++@@@@.+....@@@@@.+.+....+...+.+........+.+.......++++.+......++++.+.+.+@++...+.+........+.+.++++.+$$$+...........+...",
+"+@#%#%#$@..++@@$@+....+@@@+......++@@@.....@##@@...++@@$$@+...++++.@......@+.+.+.....+.+.+..+@@@.+....+++@@+....+@@@@+....++++++.....++@@@+++###@+++..++.+++.++.",
+"+$#%%##$@+.+@$##$@++..@@$@++.....+@$$@+..+@@###@++..@@#$#$@+...@@@@@++...+@@@.......++@@+..+@@$@@+++.++@@$@@+..+@$$#@+++.+@@@@@+++..+@@$$@+++@#$$@+++...@@@@@+++",
+"+$$##%##@+.@#####@..+.@$#$$@+.+.+@##$@+..+@$##$@+..+@$###$@.++@$$$$@+..+.@$$$+.+.+@@@$@@@@+@@$$$@@+.++@$$#$@@+++@#$#$@@.+@@$$$$$++++@@$$$$@++@$##$$@+.++$$$$$$@+",
+"+@##%%%#@@@$##%##$@+.@@####@@+.+@####$@+.@@###%$@+.+@####$@+.+$$###$@@..@$##@@+..+@$####$@+$##$$#$@++$##$$#$@+@@##$$$#@+@$##$@#$@+@$$#$$###++@$%####@++$##$$###@",
+".@#%%%%&#@@$%%####@.+@####%#@@+@######$++@####%#$@+@##%#%#$++@####%#$@+@$$###$@.+@###%%##@@$##$@$#@@+$##$$$#@@@$##$$$$$@+$###@$#@@+$###$###++@$%###%$++$%##$###@",
+"+$##%#%%#@@$######@++$#%#####@+$#######@+@%%###%#@@$%#####$@+$%%#$#%#@+@#%%%#$$++$%%##%%#@+@##$$$#@++@##$$$$@@@$##$$$#@@@$##$$$$@@+@######$@.@######$++@######$@",
+"+$%%#$#%#@@@###$$#@@+$%##$#%#@+$%#$$#%#@@#%##$#%#@@$%#$$#%#@@$%%#$#%#@.@$####$@.@$%%##%%#@@@$#$@$#@@+@$#$$$#$@+@$#$@$#@@+@##$$$#$+++$####$@+++#####%$+.+$####$@+",
+"+$%%###%#@@$###$##$+@$%%#####@+$#%###%#@+@%##$#%#@+$%%#$#%#@@$#%###%#@+.@$##$@+.+$%%%##%#@+@$#####$++@$#$##$$++@$###$#$++@$$###$$+.+@$%%#@+.+@$%###$++.+@$%%#$..",
+".@#%#%%#$@+$#######@+@#%%#%#$++@#%#%###@+@#%%%%#$@.@#%%%%#$@.$#%%#%#$@...@$$@...+@%%%%%#$@.@@###%##@.+@##%%#$@++@##%%##+.+$###%%$@+.@#%%$+..+@###$@@....$$%%$@..",
+"++$#%%##@+@$%####%$@.@@#%%##@+.@$#%%##@+.@$###%$@+++$##%#$@+.@@#%%%$@@...@@@@+..+@##%%##@.++@#%%%#$@++@#%#%%$+.+@$#%%#$@+.@##%%##+++$#%%$++.+$$%$$++..++$#%%$+..",
+".++@@$@@+.++$$@@@$@+.++@@$@@+...+@@$@@+...@@$$@@+...@@$$@@....@@@$@@+.....++....+@$$$$@@@...++@$$$@+..+@@$$$@+..+@@$$$@+..+@@$$$@+++$###@...+@$$$+..+..+$###@+..",
+"....+.+.....+.+.++......+++..+.+..+.+..+...++.+......++++++.....+.+....+...+.....++@+++.......+.++.+....++.+......++.+......++.+...+@$$@+.+..+@@+.+....+@$$@+...",
+".+......+..+..........+.........................+.++@@+@+++.......+.+...+.+.+.......+...+.+.........................................+++.+..+++@+..+.+.....+.+...",
+"...+.+....+@@++....+......+....++++++++..+..+......+$$$$$#@@+.+..+.@...+.@@@@@@.+..++@+.....+.+.++.+..+.++..+.+.+..+.+.+.+.+.+.+.+....++.+..+$$$@++.+...+....+..",
+"...++++...@@#@++.....+++++.+.++@@$$$$$@+..@+++....@@#%$##%#@....+@$@+..+@@$$$$@..+.@@$@++.....++@$@+..+++@+.....++++++...++@@@+++.+++@@@@@++@#%$$$$@++..++++.@+.",
+"+..@$@@+.+@###@+.++++.@$$@@++.@$%#%%##@@..+@@@.+..+$#%%#%%#@++@@@$#$@+..@$$$#$@+++@$#%#@+++...+@##$+++@@#$@++.+@$$$$$#@++@$###$$@@.+$$$$#$@+@#%#$###$+++@$@@$$@+",
+"..+@##@+..@#%#@@++@++@$#%#$@@+@@$##%#$@+.+@@$@...+@$#%%%%%%$@@@$$#%$@.@@$$##%#@@+@##%%#$@+....@@#%#@+@$####@@++$#%%%%%#@+$#%%%%%#$+@$#%#%%$@@$#%###%$+.+@#$$##$@",
+"...@###@+.+@##$@@$$@@###%###@@@$$###$@@+..@$$@+...@#%%#%%%#$@$####%#@@@$$#%%#%$@@#%%%%%#$@.+.+@####@@###%%##@@@#%%##%%#@@@##%%%%$@+$#%#%%%#$@$#%#$#%$@+.$####%$@",
+".+.@$##@..+@###$###$####$###$@@@$###$@@+.+@$$@+..+@$#%#%%%#@@$$%%###$@@$$%%#%#$@@#%%%%##$@+..+@###$@@$##%%##$+@#%#$$#%#@++@$###$+++@$###%%$@$#%%#$$#$+.++#%###@+",
+"++@@$##@@..+$###$#$@##$$@#$##@@$@$%##@@@..@##@+...@$#%#%%#$@.+@####$@@@@$###%##@@#%%&%##$@+...@####@@####%#$@++$%#$@#%%@..+@$$$@...+$####%$@@##%#$$$$++.@$%%#$@.",
+"+$$$$##$@..++$##$@@@$##$$##$#@++@@#$@@+..+@##$+...+@#%#%##$@..+$##$$@+.@@$###%$@@$#%%%##@@.+++@$###@@$#%###@+.@$%#$@#%#@+..+@$$@++.@$#####$++$$#$$$$$@+.$#%%#$+.",
+"$#%#$###@+..+$###@++@##$@$##$@+.+@$$@@.+..@$%$@+..+@$####$@++.+@##$@@.+.@$$$##$@@@##%%#$@++.@@$##%#$@$#%#$#@+++$%%#$#%#@+..++@$@.+.+@$##%#$.++$$#$#$$@@$$#%%#$++",
+"$#%%###%#@+..+$#$$@@@$##$####+..+@$$@@....@$$$@+...@$##$$@+....@$$$@@..+@@$$$#$@++@$%%#@+++@$#####$@@@$##$$$@++$##$$#%#@....+@$$@+.+@$##%#$...@@$##$$+@#######@+",
+"####$$###@+.+.+@$#$@+@@$$#$$@++..@$#@@+..+.@$#@@+..+$##$@++.....@@@@@+..+$@@@$$++.+@##$+..+@$$#$$$@++@$$$$@@@++@#$$@$$@@.+...+@$@+..@$$###@+...+$$$$+++$#$$@$$$@",
+"$@@@@@@$$@....++@$$+.++@@@@@+....+@@@.......@$@@...++$$$+...+....+@+....++++++++...+@$@+..++@@@@+@++..+++@+@@+.+@+@+@@@+......+@+++.++@$$$@.+..+++++..+++++.+@@@",
+"+++.++++++......++++...+++......+..@.++......@@.+....+.+.+....+.....+..............+@@+.....++.+................+....+.....+.+..+.....++@++.......+.+......+..+."};
diff --git a/hacks/images/matrix1.xbm b/hacks/images/matrix1.xbm
new file mode 100644 (file)
index 0000000..b0d1974
--- /dev/null
@@ -0,0 +1,1261 @@
+/* Created with The GIMP */
+#define matrix1_width 320
+#define matrix1_height 377
+static unsigned char matrix1_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xb7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xde, 0xff,
+   0xb7, 0xf6, 0x7f, 0xe9, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xf9, 0xff, 0x9f, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0x5f,
+   0xfe, 0xdf, 0xfb, 0xff, 0xdf, 0xfd, 0xff, 0xd1, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xeb, 0xff, 0xbf, 0xfe, 0xff, 0xf3, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
+   0xff, 0xff, 0xff, 0x17, 0xff, 0x7f, 0xad, 0xff, 0x37, 0xed, 0xbf, 0xea,
+   0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x7f, 0xfb, 0xff, 0xdf,
+   0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0x7f, 0x8d, 0xff,
+   0x6f, 0xfd, 0xdf, 0x4a, 0x7f, 0x57, 0xff, 0xff, 0xe0, 0xff, 0x1f, 0xff,
+   0xff, 0xf6, 0xff, 0x5f, 0xfd, 0xdf, 0xa1, 0xff, 0x1f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0x87,
+   0xfe, 0x6f, 0xd6, 0xff, 0xb7, 0xf5, 0xaf, 0xcd, 0xff, 0xdd, 0xff, 0x7f,
+   0xd9, 0xff, 0x97, 0xfe, 0x7f, 0xfb, 0xff, 0x7f, 0xff, 0x7f, 0xf5, 0xfe,
+   0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd,
+   0xff, 0xff, 0xff, 0x5f, 0xfe, 0x6f, 0x4e, 0xff, 0x2d, 0xec, 0x6f, 0x7b,
+   0xff, 0xb5, 0xfe, 0x6f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0x7f,
+   0xfd, 0x6f, 0xc1, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0x0f, 0xff, 0x7f, 0xca, 0xff,
+   0x4b, 0xf5, 0xdf, 0xed, 0xff, 0xd7, 0xfe, 0xff, 0xde, 0xff, 0x57, 0xff,
+   0x7f, 0xfc, 0xff, 0x5f, 0xfc, 0xbf, 0x54, 0xff, 0x5f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x3f,
+   0xfd, 0xef, 0xde, 0xff, 0x5b, 0xe8, 0x5f, 0x5f, 0xff, 0xbe, 0xff, 0xdf,
+   0xfa, 0xff, 0xef, 0xff, 0xff, 0xfc, 0xff, 0x7f, 0xfd, 0x7f, 0xc2, 0xff,
+   0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc,
+   0xff, 0xff, 0xff, 0x17, 0xff, 0xbf, 0xeb, 0xff, 0xa6, 0xf6, 0x57, 0xf4,
+   0xff, 0x6b, 0xfd, 0x7f, 0xee, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0xff, 0x7f,
+   0xfc, 0xff, 0xb9, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0x7f, 0xdf, 0xff,
+   0xa7, 0xd4, 0x7f, 0xd5, 0xff, 0xab, 0xfd, 0x6f, 0xfe, 0xff, 0xf7, 0xff,
+   0x7f, 0xf8, 0xff, 0x7f, 0xf9, 0xbf, 0xf1, 0xff, 0x1f, 0xfb, 0xff, 0xff,
+   0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0x4f,
+   0xff, 0xff, 0xff, 0xff, 0xf5, 0xfc, 0xdf, 0x4d, 0xff, 0x6f, 0xff, 0x7f,
+   0xa9, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0x7f, 0xfe, 0x7f, 0x4e, 0xff,
+   0x20, 0xe0, 0xff, 0xff, 0xff, 0x00, 0xe2, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xfc, 0x7f, 0xcb,
+   0xfe, 0x57, 0xfd, 0x7f, 0x7a, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x7f,
+   0xfc, 0xff, 0xcc, 0xff, 0x22, 0xe5, 0xff, 0xff, 0xff, 0x48, 0xe0, 0xff,
+   0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff,
+   0xe5, 0xf4, 0xff, 0x4d, 0xff, 0xad, 0xf7, 0x6f, 0xd5, 0xff, 0xff, 0xff,
+   0x7f, 0xfa, 0xff, 0x7f, 0xfd, 0x6f, 0xce, 0xff, 0x88, 0xe0, 0xff, 0xff,
+   0xff, 0x12, 0xe5, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0x1f,
+   0xfe, 0xff, 0xff, 0xff, 0x89, 0xec, 0xaf, 0x7d, 0xfd, 0x6d, 0xfd, 0x5f,
+   0x89, 0xfe, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0x7f, 0xf8, 0xff, 0x7d, 0xff,
+   0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff,
+   0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xbf, 0x00, 0xf4, 0x7f, 0x57,
+   0xff, 0x57, 0xfb, 0xff, 0x62, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdf,
+   0xff, 0x7f, 0xef, 0xff, 0x97, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x5f, 0xcc, 0xfe, 0xaf, 0xf6, 0xaf, 0xce, 0xfe, 0xff, 0xff,
+   0x7f, 0xf5, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x55, 0xfd, 0x6f, 0xab, 0xff, 0xbf, 0xfd, 0xaf,
+   0xcb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff,
+   0x5f, 0xff, 0xff, 0xeb, 0xff, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xd9, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xfa, 0x6f, 0x61,
+   0xff, 0xef, 0xf5, 0xbf, 0x8e, 0xfe, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xbf,
+   0xfd, 0xff, 0xff, 0xff, 0x1f, 0xff, 0x7f, 0xf3, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff,
+   0xdd, 0xff, 0xbf, 0xf5, 0xff, 0xaf, 0xfe, 0x57, 0x30, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xe9,
+   0xff, 0xff, 0xff, 0xff, 0xe2, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
+   0xff, 0xff, 0xff, 0xff, 0xab, 0xfa, 0xff, 0xe5, 0xff, 0xbf, 0xf5, 0xff,
+   0x32, 0xfc, 0xff, 0xff, 0xff, 0xd3, 0xff, 0x9f, 0xfe, 0xff, 0xff, 0xff,
+   0x5f, 0xfe, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xea, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x9f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xde, 0xfe, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xb3, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xef, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xef, 0xfe,
+   0xff, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0xab,
+   0xff, 0x7f, 0xed, 0xff, 0xbf, 0xfe, 0xff, 0xfb, 0xff, 0x6b, 0xfb, 0xff,
+   0x75, 0x7f, 0xb5, 0xf5, 0xff, 0xeb, 0xff, 0x77, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdd, 0xff, 0x7f, 0xff, 0xff, 0x5b, 0xff, 0xb7, 0xf5, 0xff, 0x5b,
+   0xff, 0xdb, 0xf6, 0xff, 0x6f, 0xff, 0x6f, 0xff, 0x7f, 0x7b, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xb7, 0xff, 0x5f, 0xca, 0xfe, 0x02, 0xff, 0x2f, 0xca, 0xff,
+   0xaa, 0xfc, 0xff, 0xc3, 0x7f, 0x53, 0xfb, 0xbf, 0xa0, 0x7f, 0xaa, 0xf2,
+   0xaf, 0xca, 0xff, 0x53, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x42, 0xfe, 0xff, 0xca, 0xff, 0x46,
+   0xfe, 0x7f, 0x96, 0xfe, 0x67, 0xe9, 0xff, 0x13, 0xff, 0x67, 0xfb, 0xff,
+   0xaa, 0xfe, 0xda, 0xf6, 0x7f, 0x8a, 0xfe, 0xd3, 0xf6, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfc,
+   0x2f, 0x56, 0xff, 0x95, 0xff, 0xaf, 0xcc, 0xfe, 0x52, 0xf6, 0xff, 0xc2,
+   0x7f, 0x59, 0xfd, 0xff, 0xe0, 0xff, 0x56, 0xfd, 0xaf, 0xd6, 0xff, 0xab,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0x53, 0xf7, 0xef, 0x6f, 0xfd, 0x1f, 0xff, 0xbf, 0xbd, 0xfe,
+   0xff, 0xed, 0xff, 0x1f, 0xff, 0xf7, 0xfb, 0x3f, 0xbf, 0xff, 0xff, 0xea,
+   0xaf, 0x3e, 0x7d, 0xbb, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
+   0xfe, 0xff, 0xff, 0x47, 0xfd, 0xff, 0x77, 0xfd, 0x5f, 0x5d, 0xff, 0x57,
+   0xff, 0xef, 0xd7, 0xfe, 0xea, 0xea, 0xff, 0xaa, 0xff, 0x5a, 0xff, 0xaf,
+   0xfa, 0xff, 0x5f, 0xfb, 0xdf, 0x6b, 0xff, 0xf5, 0xf9, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0x8a, 0xff, 0xed, 0xfe, 0x57, 0xf7, 0x7f, 0xdd, 0xea,
+   0xaf, 0xff, 0xfe, 0x1f, 0xfe, 0xdf, 0xdf, 0xfe, 0xff, 0xec, 0xff, 0x9c,
+   0xff, 0x43, 0xf4, 0x3f, 0x6b, 0xff, 0xff, 0xfa, 0xbf, 0xae, 0xfe, 0xb7,
+   0xd3, 0xff, 0xf1, 0xff, 0x5f, 0xfc, 0xff, 0xfb, 0xfe, 0xaf, 0xeb, 0xff,
+   0xe8, 0xff, 0xf7, 0xfb, 0xdf, 0x56, 0xff, 0x5f, 0xff, 0xff, 0xaf, 0xff,
+   0xdf, 0xfa, 0xdf, 0x5a, 0xff, 0x0a, 0xff, 0x5f, 0xf5, 0xff, 0x7f, 0xff,
+   0xaf, 0xbb, 0x7f, 0xfd, 0xf8, 0x7f, 0xf5, 0xff, 0x7f, 0xfc, 0x5f, 0xd5,
+   0xff, 0xba, 0xf6, 0x5f, 0xbd, 0xff, 0xbd, 0xfa, 0xaf, 0x5f, 0xfd, 0x5f,
+   0xfd, 0xff, 0x7d, 0xfe, 0xff, 0xe8, 0xff, 0x9a, 0xff, 0x53, 0xea, 0x3f,
+   0x57, 0xff, 0x7f, 0xf5, 0xbf, 0xb6, 0xfe, 0xd3, 0xe3, 0xff, 0xe1, 0xff,
+   0x7f, 0xfd, 0xff, 0xed, 0xff, 0x6a, 0xed, 0xff, 0xf0, 0xff, 0xf7, 0xf5,
+   0xdf, 0xbe, 0xfe, 0x1f, 0xff, 0xff, 0xc7, 0xff, 0x0f, 0xfe, 0x5f, 0xad,
+   0xff, 0xbf, 0xf1, 0x37, 0x98, 0xff, 0x7f, 0xfe, 0x6f, 0xc8, 0xff, 0x7a,
+   0xf9, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x17, 0xfb, 0xff, 0xd5, 0xfa, 0xff,
+   0x0f, 0xfd, 0x5f, 0xfe, 0xaf, 0xff, 0xfe, 0x5f, 0xff, 0xff, 0x4f, 0xff,
+   0x9f, 0xd4, 0xff, 0x9d, 0xfe, 0x73, 0xf5, 0x77, 0x29, 0xfe, 0xef, 0xfe,
+   0x7f, 0x49, 0xfd, 0xe3, 0xe1, 0xff, 0xfa, 0xff, 0xff, 0xfd, 0x37, 0xee,
+   0xff, 0xad, 0xd5, 0xff, 0x36, 0xff, 0xff, 0xf4, 0xdf, 0x56, 0xff, 0x1f,
+   0xff, 0x7f, 0xf1, 0xff, 0xff, 0xfa, 0x1f, 0x4b, 0x7f, 0xff, 0xf1, 0x1f,
+   0x9f, 0xff, 0xbf, 0xfe, 0xcf, 0xb6, 0xff, 0x0f, 0xf5, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xaf, 0xfd, 0x7f, 0x5b, 0xeb, 0xff, 0x97, 0xfe, 0x87, 0xff,
+   0xaf, 0xbf, 0xfe, 0x5f, 0xfe, 0xff, 0xd3, 0xff, 0xff, 0xe7, 0x3f, 0x5a,
+   0xfd, 0xff, 0xd5, 0x7f, 0x1b, 0xfd, 0xef, 0xfe, 0xbf, 0x6e, 0xfe, 0x4b,
+   0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0xfb, 0xff, 0x76, 0xfb, 0xff,
+   0x97, 0xfe, 0x8f, 0xfe, 0xdf, 0x5e, 0xff, 0x9f, 0xff, 0x7f, 0xf9, 0xff,
+   0xdf, 0xec, 0x97, 0x8d, 0xff, 0xbf, 0xf1, 0x17, 0x5f, 0xff, 0x5f, 0xff,
+   0xd7, 0xdb, 0xff, 0x8f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xed,
+   0xff, 0xad, 0xd6, 0x7f, 0x2f, 0xff, 0xaf, 0xff, 0xaf, 0x7b, 0xfd, 0x1f,
+   0xfd, 0x7f, 0xd6, 0xff, 0xfb, 0xdb, 0x5f, 0x3b, 0xfd, 0xfd, 0xf3, 0x7f,
+   0x1a, 0xff, 0xdf, 0xfa, 0x2f, 0x3f, 0xfd, 0xff, 0xf2, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xa9, 0xff, 0x55, 0xf5, 0xff, 0xf0, 0xfe, 0x6f, 0xff,
+   0xdf, 0xae, 0xfe, 0x5f, 0xff, 0x6f, 0xfa, 0xff, 0xbe, 0xea, 0xbf, 0x8a,
+   0x7f, 0x7f, 0xe9, 0x9f, 0x5f, 0xfd, 0x6f, 0xff, 0xdf, 0xaa, 0xfe, 0x5d,
+   0xf5, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0x76, 0xdb, 0x5f,
+   0xd9, 0xff, 0xdf, 0xff, 0x5f, 0xff, 0xfe, 0x1b, 0xfd, 0x7f, 0xb6, 0xff,
+   0xf5, 0xef, 0xff, 0x2a, 0xfd, 0xea, 0xf3, 0x3f, 0x1b, 0xff, 0x5f, 0xff,
+   0xbf, 0xef, 0xfe, 0xfb, 0xf1, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xd4,
+   0xfe, 0xd6, 0xf6, 0xff, 0xf2, 0xff, 0xbf, 0xff, 0x6f, 0x4a, 0xff, 0x4e,
+   0xeb, 0x8f, 0xda, 0xff, 0x54, 0xf8, 0xbf, 0x9b, 0xfd, 0x33, 0xfc, 0x3f,
+   0x55, 0xff, 0xcf, 0xff, 0x57, 0x4a, 0xff, 0x57, 0xee, 0xff, 0xf1, 0xff,
+   0x5f, 0xfc, 0xff, 0x2f, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xd7, 0xff,
+   0x7f, 0xca, 0xff, 0x1d, 0xfe, 0x2f, 0xb6, 0xfe, 0xe9, 0xea, 0xff, 0x2b,
+   0xff, 0x66, 0xea, 0x3f, 0x55, 0xfe, 0x9f, 0xff, 0x7f, 0xce, 0xfe, 0x5f,
+   0xfa, 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0x2f, 0xfd, 0xff, 0xff, 0xaf,
+   0xfe, 0xff, 0x7f, 0xff, 0xff, 0x7d, 0xff, 0xeb, 0xf5, 0xdf, 0x6a, 0xff,
+   0xaf, 0xfe, 0xff, 0xb6, 0xfd, 0xdb, 0xff, 0xff, 0xed, 0xff, 0x6f, 0xff,
+   0xdf, 0xf5, 0x7f, 0xd5, 0xff, 0x7f, 0xfd, 0xff, 0x9f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xeb, 0xff, 0x5b,
+   0xed, 0xbf, 0xda, 0xfe, 0xb6, 0xfd, 0xff, 0x6f, 0xff, 0x5b, 0xfd, 0xff,
+   0xdb, 0xff, 0xdf, 0xff, 0x7f, 0xd5, 0xff, 0xb7, 0xfe, 0xff, 0xeb, 0xff,
+   0x9f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xf5, 0xff, 0xae, 0xfb, 0xeb, 0xeb, 0xff, 0x6f, 0xff, 0xff, 0xb5,
+   0xfd, 0xb7, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdb,
+   0xff, 0xff, 0xfe, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0x7f, 0xff, 0xdf, 0xfd, 0xff,
+   0x7f, 0xff, 0xbf, 0xfd, 0xff, 0xbe, 0xfd, 0xbf, 0xbd, 0xff, 0xff, 0xfe,
+   0xbf, 0xbf, 0xff, 0xdd, 0xfe, 0xff, 0xb7, 0xff, 0xdf, 0xfb, 0xbf, 0xfd,
+   0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf2, 0xff, 0xd6,
+   0xff, 0x77, 0xeb, 0xff, 0xeb, 0xda, 0x75, 0xeb, 0xff, 0x6b, 0xfb, 0xf7,
+   0x76, 0xfd, 0xab, 0xdb, 0x77, 0x75, 0x7d, 0xb7, 0xfb, 0xbf, 0xdd, 0xbe,
+   0x7a, 0xf7, 0xef, 0xf6, 0xbf, 0xfe, 0xef, 0xd7, 0x57, 0xff, 0xd7, 0xff,
+   0xff, 0xd1, 0xff, 0xbf, 0xfe, 0xdf, 0xb6, 0xff, 0xaf, 0xfb, 0xd7, 0xee,
+   0xff, 0x6e, 0xeb, 0xd7, 0xd6, 0xff, 0x6f, 0xfb, 0xdf, 0xaf, 0xff, 0xb6,
+   0xf6, 0xff, 0xb5, 0xff, 0xeb, 0xed, 0xbf, 0xed, 0xff, 0xd5, 0xad, 0xbf,
+   0x7e, 0xfd, 0xbf, 0xfe, 0x5f, 0xf5, 0xff, 0xd5, 0xff, 0xb7, 0xed, 0xff,
+   0xdb, 0xee, 0xaf, 0xb5, 0xbf, 0xb5, 0xfd, 0xaf, 0xad, 0xfe, 0xdf, 0xee,
+   0xab, 0x7e, 0xfd, 0xeb, 0xfe, 0xbf, 0xdb, 0x7e, 0x6d, 0xbb, 0x6f, 0xfb,
+   0x7f, 0xfb, 0xfb, 0xd7, 0xd7, 0xff, 0xad, 0xff, 0x7f, 0x4d, 0xff, 0x0b,
+   0xfd, 0x2f, 0x1a, 0x7e, 0x53, 0xd1, 0x55, 0x2d, 0x7e, 0x63, 0xe1, 0x3f,
+   0x9a, 0x7a, 0x51, 0xd1, 0x9f, 0x2a, 0xfd, 0x8d, 0xf5, 0xbf, 0x46, 0xfd,
+   0xd8, 0xf4, 0x5f, 0xd4, 0xff, 0x68, 0xc3, 0x17, 0x1f, 0x7e, 0xb3, 0xf0,
+   0xaf, 0xcb, 0xff, 0x26, 0xff, 0x57, 0x4b, 0xff, 0x6a, 0xf5, 0xc7, 0x9a,
+   0xff, 0x5a, 0xf5, 0xab, 0x55, 0xfd, 0x6a, 0xf5, 0x47, 0x2f, 0x7e, 0x8b,
+   0xfe, 0xff, 0x6a, 0xff, 0x6a, 0xf4, 0x6f, 0xfb, 0xbf, 0xfa, 0xea, 0x45,
+   0x95, 0xff, 0x52, 0xf5, 0xaf, 0xce, 0xfe, 0xaf, 0xfa, 0xdf, 0x5e, 0xfd,
+   0xfc, 0xd5, 0xbf, 0x37, 0xfd, 0xf5, 0xe5, 0x5f, 0x5f, 0xff, 0xfa, 0xcb,
+   0x6f, 0xed, 0xfd, 0xaf, 0xfd, 0xff, 0xdb, 0xff, 0xda, 0xed, 0x7f, 0xfe,
+   0xff, 0xe0, 0xc2, 0x3f, 0x3f, 0xfd, 0xfc, 0xe1, 0xdf, 0xad, 0xff, 0x77,
+   0xff, 0xaf, 0x1b, 0x5f, 0xea, 0xf7, 0xcb, 0x9f, 0x7e, 0xb3, 0xf9, 0xb7,
+   0xfb, 0x3e, 0xec, 0xfe, 0xdf, 0x5f, 0xff, 0x8f, 0xff, 0xff, 0xb7, 0xbf,
+   0x35, 0xff, 0xbf, 0xfa, 0xff, 0xda, 0xe9, 0x27, 0x15, 0x3f, 0xf5, 0xf5,
+   0xaf, 0x4d, 0xff, 0x4f, 0xf5, 0x7f, 0x5b, 0xff, 0xfc, 0xd7, 0x5f, 0x3d,
+   0xff, 0xef, 0xe1, 0x6f, 0xaf, 0x7d, 0xfd, 0xcb, 0xaf, 0x3a, 0xfd, 0x9f,
+   0xff, 0xff, 0x6f, 0xff, 0xd5, 0xfc, 0x7f, 0xfe, 0xff, 0x70, 0xe3, 0x2f,
+   0x5f, 0x7f, 0xec, 0xe5, 0x5f, 0xd1, 0xff, 0xe5, 0xfc, 0x17, 0x17, 0x3f,
+   0xfd, 0xff, 0xeb, 0xef, 0x7a, 0x35, 0xfe, 0xbf, 0xe6, 0x7f, 0xfc, 0xfd,
+   0xaf, 0xad, 0xfe, 0xcb, 0xfe, 0xff, 0xeb, 0xff, 0x26, 0xff, 0x7f, 0xfb,
+   0xbf, 0xaa, 0xe4, 0xd7, 0x14, 0x7f, 0xfd, 0xdb, 0x6f, 0x93, 0xfe, 0xcf,
+   0xfc, 0x3f, 0x55, 0x7e, 0xe9, 0xff, 0xaf, 0xbf, 0xfe, 0xf7, 0xfe, 0xdf,
+   0xd6, 0x7f, 0xe9, 0xff, 0x5f, 0xeb, 0xfe, 0x8f, 0xff, 0xff, 0x5f, 0xff,
+   0x4a, 0xfd, 0x7f, 0xfe, 0xff, 0xe1, 0xc9, 0xb7, 0x3d, 0xfd, 0xfc, 0xf7,
+   0x5f, 0xf5, 0xff, 0xf5, 0xf5, 0x3f, 0x8d, 0x7f, 0xfc, 0xff, 0xd7, 0xdf,
+   0xfd, 0x02, 0xfe, 0x37, 0xe8, 0x7f, 0x7e, 0xd5, 0xaf, 0x9a, 0xfe, 0xaf,
+   0xff, 0xff, 0xe7, 0xff, 0x25, 0xff, 0x7f, 0xfe, 0xff, 0x1c, 0xf2, 0x6f,
+   0x48, 0x5f, 0x7e, 0xeb, 0xaf, 0x96, 0xfe, 0xaf, 0xed, 0x37, 0x1b, 0x7d,
+   0xfd, 0xff, 0x5f, 0xbf, 0xfd, 0x4b, 0xfa, 0xb7, 0xc2, 0x7f, 0xfc, 0xfb,
+   0xbf, 0xd6, 0xfe, 0x8f, 0xfe, 0xff, 0x6f, 0xff, 0x45, 0xfd, 0xff, 0xf4,
+   0xff, 0x50, 0xa3, 0xd7, 0x1a, 0x7f, 0xf4, 0xdf, 0xdf, 0xe0, 0xff, 0xea,
+   0xf6, 0x3f, 0x2d, 0x7f, 0xfc, 0xff, 0xeb, 0xbf, 0x7e, 0x25, 0xff, 0x1f,
+   0xe8, 0x5f, 0x7d, 0xd5, 0x57, 0x55, 0xff, 0xaf, 0xff, 0xef, 0xb7, 0x7f,
+   0x15, 0xff, 0x7f, 0xfe, 0xff, 0x1a, 0xe5, 0xd7, 0x58, 0x7d, 0xfe, 0xf5,
+   0xaf, 0x85, 0xfe, 0x05, 0xec, 0xef, 0xdd, 0xfa, 0xf4, 0xff, 0x57, 0xff,
+   0xfd, 0x6d, 0xea, 0xff, 0xe7, 0x7f, 0x74, 0xd5, 0xaf, 0x7f, 0xfd, 0x8f,
+   0xff, 0x5f, 0xef, 0xff, 0xf5, 0xf4, 0xff, 0xbe, 0xfe, 0xb0, 0xeb, 0xb7,
+   0x17, 0x7f, 0xfc, 0xd5, 0xdf, 0x7e, 0xff, 0x56, 0xf4, 0x5f, 0xbf, 0x5e,
+   0xfe, 0xfb, 0xef, 0xaf, 0xfe, 0xbb, 0xfe, 0xb7, 0xf6, 0x7f, 0xfd, 0xf8,
+   0x5f, 0xad, 0xfe, 0xaf, 0xff, 0xf5, 0xab, 0xff, 0xaa, 0xfc, 0x5f, 0xfa,
+   0xbf, 0x5d, 0xe3, 0x6f, 0xad, 0x7f, 0xfa, 0xeb, 0xdf, 0x4a, 0xfd, 0xe8,
+   0xa3, 0xbf, 0xb6, 0xfd, 0xd5, 0xd7, 0x57, 0x9d, 0xfe, 0xf5, 0xd5, 0x5f,
+   0xd7, 0x7f, 0xd5, 0xcb, 0xdf, 0xdd, 0xfe, 0x8f, 0xfe, 0x47, 0x6f, 0xff,
+   0xed, 0xeb, 0x7f, 0x36, 0xfc, 0xf8, 0xcb, 0xd7, 0x0d, 0xfe, 0xd6, 0xf5,
+   0x57, 0xfb, 0xbf, 0xda, 0xea, 0x6b, 0x5f, 0x7f, 0x7e, 0xed, 0xef, 0x5f,
+   0x7f, 0x53, 0xdb, 0xb7, 0xfd, 0xff, 0xf6, 0xf5, 0xab, 0xb7, 0xfd, 0xaf,
+   0xff, 0xd7, 0xe5, 0xbf, 0xb6, 0xfa, 0x7f, 0x5f, 0xff, 0x7a, 0xf3, 0x57,
+   0xa7, 0x7f, 0x7d, 0xf1, 0xdf, 0x56, 0xff, 0xb0, 0xe3, 0x6f, 0x7b, 0xfd,
+   0xe9, 0xed, 0x56, 0x1b, 0x7d, 0x7b, 0xdb, 0x77, 0xff, 0x7f, 0xbd, 0xd7,
+   0xbf, 0xbe, 0xfe, 0x2d, 0xfb, 0x87, 0xa7, 0xff, 0xfa, 0xd6, 0x7f, 0x3a,
+   0xfc, 0xe8, 0xa3, 0xef, 0x0e, 0xfd, 0xea, 0xe5, 0xbf, 0xfb, 0x7f, 0xe5,
+   0xa8, 0x07, 0x00, 0x7f, 0x17, 0xfa, 0x83, 0xe0, 0x7f, 0x84, 0xf0, 0x07,
+   0xe8, 0xff, 0x03, 0xfc, 0x87, 0x06, 0x7a, 0x83, 0xf6, 0x3f, 0xf8, 0xff,
+   0xe0, 0xe1, 0x07, 0x40, 0xbf, 0xfa, 0xe2, 0x03, 0x1b, 0xff, 0x13, 0xfe,
+   0x7f, 0xc2, 0xfe, 0xa8, 0xe1, 0x57, 0x55, 0xff, 0x4b, 0xf5, 0x17, 0x45,
+   0xff, 0x90, 0xd2, 0x4f, 0xf9, 0xff, 0xab, 0xea, 0x1f, 0xae, 0x7e, 0x15,
+   0xfc, 0x6f, 0xe9, 0x7f, 0xa5, 0xa7, 0x4f, 0x15, 0xfc, 0xe8, 0xa6, 0x4f,
+   0x37, 0xff, 0x46, 0xfa, 0x5f, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xeb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
+   0xdb, 0x5f, 0xb5, 0xff, 0x7f, 0xff, 0x77, 0xfd, 0xff, 0xef, 0xf7, 0xdf,
+   0xfe, 0xff, 0xb7, 0xfe, 0xff, 0x6f, 0xfd, 0xed, 0xfb, 0xff, 0xfb, 0x7f,
+   0xfb, 0xef, 0xbf, 0xed, 0xff, 0xf7, 0xfb, 0x7f, 0x7f, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x7f,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xbb,
+   0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xee, 0xff, 0xd7, 0xff, 0x57, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xf5, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xdf, 0xfe, 0x6f, 0xed, 0xff,
+   0xff, 0xf6, 0xef, 0xf7, 0xff, 0xed, 0xed, 0xbf, 0x5d, 0xfd, 0xf6, 0xed,
+   0xb7, 0xed, 0x7e, 0xdb, 0xde, 0xff, 0xdd, 0xfe, 0x97, 0xfe, 0xef, 0xff,
+   0xff, 0x3b, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x70, 0xff, 0x26,
+   0xf6, 0x8b, 0xd0, 0xff, 0x02, 0xf8, 0x13, 0x08, 0x3f, 0x72, 0xf1, 0xa5,
+   0xae, 0xbe, 0xd8, 0xd2, 0x0f, 0x0e, 0xfd, 0xe4, 0xe0, 0x2f, 0x22, 0xff,
+   0xc7, 0xff, 0x5f, 0xff, 0xff, 0xaf, 0xfe, 0x7f, 0xd1, 0xff, 0xff, 0xff,
+   0x57, 0x62, 0xff, 0x8f, 0xfe, 0x1f, 0x55, 0xff, 0x53, 0xd1, 0x97, 0x22,
+   0x7d, 0xe4, 0xd3, 0x8f, 0x3e, 0xfa, 0xea, 0xa5, 0xab, 0x2c, 0xfa, 0xc8,
+   0xaa, 0xef, 0x24, 0xfc, 0x4f, 0xfd, 0xdf, 0xfe, 0xff, 0x2f, 0xfe, 0xff,
+   0xf1, 0xff, 0xff, 0xff, 0x87, 0xa8, 0xff, 0x2a, 0xfa, 0x4b, 0xf0, 0xff,
+   0x8b, 0xf2, 0x27, 0x88, 0x7f, 0xb9, 0xe8, 0xab, 0xaf, 0xba, 0xb8, 0xd2,
+   0x4f, 0x4e, 0xbd, 0xf2, 0xe0, 0x1f, 0x82, 0xfe, 0xa5, 0xff, 0xb7, 0xff,
+   0xff, 0xbf, 0xfe, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xbf, 0x5b, 0xfd, 0xf5,
+   0xe3, 0x9f, 0x57, 0x7e, 0xf5, 0xf2, 0xc7, 0x3a, 0x7e, 0xf4, 0xe9, 0x8f,
+   0x3d, 0xfe, 0xe9, 0xe7, 0x8f, 0x3d, 0xfe, 0xa8, 0xa7, 0xff, 0x3e, 0xfd,
+   0xcf, 0xff, 0x3f, 0xfd, 0xff, 0x3f, 0xfc, 0xff, 0xaa, 0xff, 0xff, 0xff,
+   0x6f, 0xaf, 0xbe, 0xae, 0xf8, 0xa7, 0xae, 0xff, 0x56, 0xd9, 0xd7, 0x88,
+   0x7f, 0xfd, 0xf5, 0xaf, 0xaf, 0x7e, 0x5a, 0xb1, 0xaf, 0x56, 0xfb, 0xea,
+   0xf2, 0x57, 0xab, 0xfe, 0xe7, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xfe, 0xbf,
+   0xd5, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0x7a, 0xfc, 0xd5, 0xdf, 0xbe, 0xfc,
+   0xfd, 0xf7, 0xc7, 0x1a, 0x7e, 0xeb, 0xe1, 0xaf, 0xbe, 0xfd, 0x18, 0xe7,
+   0x7f, 0x4a, 0xff, 0xdb, 0xec, 0x7f, 0xcf, 0xfe, 0x87, 0xff, 0xbf, 0xfa,
+   0xff, 0x7f, 0xfe, 0x7f, 0xce, 0xff, 0xff, 0xff, 0x6f, 0xaf, 0x7d, 0xfa,
+   0xeb, 0xaf, 0x5b, 0x3f, 0xb5, 0xfd, 0xd7, 0x58, 0xff, 0xfe, 0xf5, 0xdf,
+   0xbf, 0xfe, 0x5a, 0xb1, 0xaf, 0xd6, 0xff, 0x76, 0xfd, 0xaf, 0xcd, 0xff,
+   0xd7, 0xff, 0x7f, 0xfb, 0xff, 0x2f, 0xfd, 0x7f, 0xae, 0xff, 0xff, 0xff,
+   0xdf, 0x7d, 0xff, 0xf4, 0xdb, 0x3f, 0xfb, 0xfe, 0xf6, 0xeb, 0xc7, 0x39,
+   0xff, 0xea, 0xe5, 0xaf, 0xf6, 0xfe, 0x10, 0xe3, 0x7f, 0x8c, 0xfe, 0xef,
+   0xe8, 0xff, 0x9f, 0xfe, 0xc7, 0xff, 0xff, 0xf6, 0xff, 0x7f, 0xfe, 0xff,
+   0x4c, 0xff, 0xff, 0xff, 0x3f, 0xaf, 0x3a, 0xfd, 0xd6, 0xd7, 0x86, 0xff,
+   0x03, 0xfd, 0x7f, 0xea, 0xbf, 0xfe, 0xf9, 0xdf, 0x9f, 0xff, 0x9a, 0xea,
+   0xff, 0xf1, 0xff, 0x15, 0xff, 0xbf, 0xd2, 0xff, 0xd7, 0xff, 0xff, 0xfd,
+   0xff, 0x3f, 0xfd, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdd, 0x7e, 0xfc,
+   0xdd, 0xbf, 0xae, 0x7e, 0x2b, 0xf7, 0xff, 0x78, 0xff, 0xfa, 0xd1, 0xbf,
+   0x7a, 0xfd, 0x12, 0xca, 0x7f, 0xd3, 0xff, 0x17, 0xfd, 0xff, 0xed, 0xff,
+   0x87, 0xff, 0xff, 0xd3, 0xff, 0x7f, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0x1f, 0xa2, 0x7f, 0xfd, 0xeb, 0x57, 0xd0, 0xff, 0x6f, 0xf8, 0xff, 0xfa,
+   0xbf, 0xee, 0xf5, 0x6f, 0xcf, 0xbf, 0xf4, 0xe2, 0xff, 0xfa, 0xff, 0x5f,
+   0xff, 0xff, 0xf1, 0xff, 0xd7, 0xff, 0xff, 0xe6, 0xff, 0x2f, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x3f, 0xa8, 0x7e, 0xe8, 0xdb, 0xdf, 0xb2, 0xff,
+   0x6d, 0xe1, 0xff, 0xf0, 0x7f, 0xfd, 0xf1, 0x7f, 0x5d, 0xff, 0xc1, 0xd4,
+   0xdf, 0x4a, 0xff, 0x5f, 0xfe, 0xbf, 0xb5, 0xff, 0x4f, 0xff, 0xff, 0xd7,
+   0xff, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x62, 0x7f, 0xbd,
+   0xf5, 0x2f, 0xe9, 0xfe, 0xb7, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xd5, 0x6f,
+   0xd7, 0xff, 0x74, 0xe1, 0x7f, 0xf5, 0xff, 0x1f, 0xff, 0xff, 0xf2, 0xff,
+   0xd3, 0xff, 0xff, 0x6f, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x6f, 0xef, 0x7f, 0xb3, 0xd2, 0x6f, 0x8f, 0x7f, 0xbd, 0xd1, 0xff, 0xf4,
+   0xff, 0xd6, 0xf1, 0x7f, 0x5c, 0xff, 0x65, 0xed, 0x7f, 0x8e, 0xfe, 0x5f,
+   0xfd, 0x7f, 0x2c, 0xfd, 0xc7, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xd2, 0xf1, 0xaf, 0xd5, 0xde,
+   0xf6, 0xfa, 0xbf, 0xfa, 0x7f, 0x7d, 0xf5, 0x7f, 0xc7, 0x7f, 0xe3, 0xf4,
+   0x57, 0xed, 0xff, 0x1b, 0xff, 0x5f, 0x7b, 0xff, 0xd7, 0xff, 0xff, 0xdb,
+   0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0xeb, 0xff, 0x0f,
+   0xef, 0x2f, 0xbf, 0x7c, 0xac, 0xe1, 0xff, 0xd0, 0xff, 0xd5, 0xf6, 0x7f,
+   0xf1, 0xff, 0xda, 0xd5, 0x0f, 0x1b, 0xfc, 0x57, 0xfd, 0x7f, 0x2a, 0xfa,
+   0x87, 0xfe, 0xff, 0xbf, 0xfe, 0x37, 0xfe, 0xff, 0xff, 0x7f, 0x55, 0xf5,
+   0xaf, 0xfe, 0xff, 0xa5, 0xfe, 0x8b, 0x16, 0x7f, 0x74, 0xf5, 0xbf, 0xfa,
+   0xff, 0x76, 0xf5, 0xff, 0xaa, 0xff, 0x6b, 0xf5, 0xaf, 0x2e, 0xff, 0x1f,
+   0xff, 0x57, 0xb6, 0xfe, 0xd7, 0xff, 0xff, 0x57, 0xff, 0xaf, 0xfe, 0xff,
+   0xff, 0xff, 0xfb, 0xef, 0x2f, 0xea, 0xff, 0x55, 0xd0, 0xaf, 0x7e, 0xfc,
+   0x54, 0xf1, 0xbf, 0xd2, 0xff, 0xd6, 0xf7, 0xff, 0xe1, 0xff, 0xea, 0xeb,
+   0x8d, 0x3a, 0xfa, 0x37, 0xf5, 0xdf, 0x2c, 0xfe, 0x47, 0xfd, 0xff, 0x1f,
+   0xff, 0x3f, 0xfe, 0xff, 0xff, 0x5f, 0xab, 0xfa, 0xf7, 0xfd, 0xff, 0xb3,
+   0xf4, 0x6f, 0x57, 0xbf, 0x6b, 0xff, 0x6f, 0xfd, 0xff, 0x2b, 0xfd, 0xff,
+   0xfe, 0xff, 0xef, 0xf6, 0x7f, 0xef, 0xfe, 0xab, 0xfe, 0xbf, 0xf6, 0xfe,
+   0xbf, 0xff, 0xff, 0x5f, 0xff, 0xd7, 0xff, 0xff, 0xff, 0x7f, 0xad, 0xca,
+   0x4f, 0xf5, 0x7f, 0x53, 0xd1, 0xdf, 0xfe, 0xfa, 0xde, 0xee, 0xff, 0xaa,
+   0xff, 0xef, 0xf6, 0xff, 0xd5, 0xff, 0xfa, 0xee, 0xcb, 0xae, 0xfe, 0xb7,
+   0xfd, 0xef, 0xaa, 0xfe, 0x57, 0xfd, 0xff, 0x5f, 0xfe, 0xaf, 0xfc, 0xff,
+   0xff, 0xff, 0xd9, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0x5f, 0xff, 0xff, 0xff, 0x5f, 0xab, 0xea, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff,
+   0xad, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xf7, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfa, 0xff, 0xff, 0xff, 0xcf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x67,
+   0xff, 0xff, 0xff, 0xff, 0x12, 0xff, 0xff, 0xff, 0xcb, 0xfe, 0xff, 0x17,
+   0xff, 0xff, 0xe8, 0x7f, 0xf8, 0xff, 0x5f, 0xf8, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff, 0x27, 0xff, 0xff, 0xff,
+   0x8f, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xd3, 0xff, 0xd2, 0xff, 0x7f, 0xe1,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff,
+   0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf,
+   0xf8, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xfd, 0xff,
+   0xef, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xe9, 0xff, 0xff, 0xff, 0x6f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x97,
+   0xfe, 0xff, 0xff, 0xff, 0x55, 0xff, 0xff, 0xff, 0x57, 0xfd, 0xff, 0x5f,
+   0xff, 0xff, 0xd3, 0xff, 0xea, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xbe, 0xff, 0xdf, 0xff, 0xbf, 0xf8, 0xff, 0xdf, 0xff,
+   0x6f, 0xf7, 0xff, 0xaf, 0xff, 0xbf, 0xfd, 0xff, 0xb7, 0xff, 0x7f, 0xf1,
+   0xff, 0xbb, 0xfd, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xd7, 0xff, 0x57,
+   0xfd, 0x5f, 0xd5, 0xff, 0x77, 0xf5, 0xef, 0xaa, 0xfe, 0x7b, 0xfd, 0x6f,
+   0x57, 0xff, 0xbb, 0xea, 0xdf, 0xde, 0xff, 0xbf, 0xfe, 0x7f, 0xab, 0xff,
+   0xed, 0xea, 0xff, 0xf5, 0x7f, 0xb7, 0xf7, 0x57, 0xd5, 0xff, 0xbb, 0xfe,
+   0xff, 0xfb, 0xff, 0xbe, 0xff, 0xb7, 0x7d, 0xff, 0x6e, 0xff, 0xbf, 0x5b,
+   0x7f, 0xaf, 0xff, 0xbf, 0xec, 0x7f, 0xef, 0xff, 0xaf, 0x75, 0xff, 0xd5,
+   0xff, 0xef, 0xf6, 0xff, 0xb7, 0xff, 0xff, 0xf1, 0xff, 0xed, 0xfa, 0xff,
+   0x77, 0xff, 0xef, 0xff, 0xff, 0xd7, 0xff, 0x45, 0xf8, 0x2f, 0xc1, 0xfe,
+   0x51, 0xd0, 0x37, 0x62, 0xff, 0x62, 0xf4, 0xaf, 0x58, 0x7f, 0x29, 0xd0,
+   0x2f, 0xc1, 0xfe, 0x1f, 0xfe, 0xdf, 0xc4, 0xff, 0xb6, 0xe8, 0xff, 0xd3,
+   0x7f, 0x09, 0xd2, 0x87, 0xcc, 0x7e, 0x29, 0xf4, 0xff, 0xff, 0xff, 0x92,
+   0xfe, 0x5f, 0xa4, 0xbf, 0xb2, 0xf4, 0x2f, 0xa9, 0x7f, 0x55, 0xf5, 0x1b,
+   0xea, 0xff, 0x52, 0xf4, 0x5f, 0xd4, 0xff, 0xab, 0xff, 0x5f, 0xc9, 0xff,
+   0xeb, 0xfc, 0xff, 0xf9, 0xbf, 0xa4, 0xe8, 0x8b, 0xcb, 0xff, 0x52, 0xfd,
+   0xff, 0xdf, 0xff, 0x27, 0xec, 0x6f, 0x09, 0xfd, 0xa6, 0xe0, 0x6f, 0xa2,
+   0xfe, 0x53, 0xed, 0xbf, 0x50, 0xff, 0x63, 0xd1, 0x5f, 0x45, 0xfd, 0x17,
+   0xfd, 0x7f, 0x93, 0xff, 0xaf, 0xe9, 0xff, 0xf1, 0xff, 0x11, 0xa9, 0x1f,
+   0x4a, 0xdd, 0x53, 0xf5, 0xff, 0xff, 0xff, 0xde, 0xfa, 0x9f, 0xbe, 0x7e,
+   0xfc, 0xf5, 0xc5, 0xaf, 0x3f, 0xbc, 0xf1, 0x7f, 0xff, 0x5f, 0xbc, 0xf6,
+   0x6b, 0xbb, 0xff, 0x5f, 0xff, 0xff, 0xed, 0xff, 0x22, 0xff, 0xff, 0xe9,
+   0xbf, 0xee, 0xf6, 0xf7, 0xbe, 0x7f, 0xfc, 0xf8, 0xff, 0xff, 0xff, 0xdb,
+   0xfa, 0xbf, 0x3b, 0xfc, 0xb4, 0xe9, 0x4f, 0xad, 0xfe, 0x74, 0xeb, 0x7f,
+   0xf5, 0xff, 0x7a, 0xf5, 0xaf, 0xb6, 0xfe, 0x1f, 0xff, 0xff, 0xcf, 0xff,
+   0x0f, 0xfd, 0xff, 0xd3, 0xff, 0xaa, 0xd5, 0x97, 0x6d, 0x7e, 0xd9, 0xe1,
+   0xff, 0xff, 0xff, 0xa2, 0xec, 0xd7, 0xae, 0x5e, 0xfe, 0xff, 0xe7, 0x5f,
+   0x7f, 0x08, 0xf0, 0xef, 0xfa, 0x3f, 0xf4, 0xfa, 0xdf, 0x5f, 0xff, 0x5f,
+   0xff, 0xff, 0xcb, 0xff, 0x25, 0xff, 0xff, 0xf4, 0xff, 0x5d, 0xf7, 0xdf,
+   0xde, 0x7f, 0xfe, 0xf5, 0xff, 0xff, 0xff, 0xae, 0xf8, 0xaf, 0x3f, 0x7d,
+   0xf4, 0xf5, 0x47, 0x77, 0x7f, 0xa1, 0xe2, 0xbf, 0xfb, 0x7f, 0xd5, 0xea,
+   0xaf, 0x7e, 0xfd, 0x1f, 0xfd, 0xff, 0x9f, 0xff, 0x4b, 0xfa, 0xff, 0xf1,
+   0x7f, 0x75, 0xcd, 0xbf, 0x3d, 0x7d, 0xf4, 0xf1, 0xff, 0xff, 0xff, 0xa2,
+   0xee, 0x9f, 0xbe, 0x7e, 0xfd, 0xff, 0xd5, 0x9d, 0x5f, 0x0a, 0xf9, 0x7f,
+   0xfd, 0xff, 0x0a, 0xfa, 0xdf, 0x5b, 0xff, 0x5f, 0xff, 0xff, 0xcf, 0xff,
+   0x87, 0xff, 0xff, 0xf5, 0xff, 0xad, 0xf6, 0xab, 0xb7, 0x7e, 0xbd, 0xf5,
+   0xff, 0xff, 0xff, 0xf8, 0xf8, 0xfb, 0x36, 0x7e, 0xe8, 0xef, 0x87, 0xb7,
+   0x7e, 0x7a, 0xeb, 0x7f, 0xeb, 0xff, 0x53, 0xea, 0x2f, 0x7f, 0xfd, 0x1f,
+   0xff, 0xff, 0xcf, 0xff, 0xbd, 0xf4, 0xff, 0xd1, 0xff, 0xba, 0xcd, 0x6f,
+   0xef, 0x7e, 0xf4, 0xe5, 0xff, 0xff, 0xff, 0xaa, 0xee, 0x4f, 0xaf, 0x7e,
+   0xbd, 0xfd, 0xd7, 0x56, 0x7f, 0xec, 0xfd, 0xdf, 0xfa, 0xff, 0xfe, 0xf5,
+   0xef, 0xad, 0xfe, 0x5d, 0xfb, 0xff, 0xad, 0xff, 0xa6, 0xfc, 0xff, 0xf5,
+   0xff, 0x6a, 0xfb, 0x9f, 0xbf, 0x5e, 0x5d, 0xf9, 0xff, 0xff, 0xff, 0xf9,
+   0xec, 0xaf, 0x3c, 0x7a, 0xf5, 0xeb, 0x97, 0xd7, 0x7e, 0x59, 0xeb, 0xbf,
+   0xbb, 0xff, 0x57, 0xf7, 0x5f, 0xdf, 0xfe, 0x1f, 0xf7, 0xff, 0xcf, 0xff,
+   0xdd, 0xda, 0xbf, 0x65, 0xff, 0xaa, 0xca, 0x77, 0xad, 0x7d, 0xf4, 0xf1,
+   0xff, 0xff, 0xbf, 0x04, 0xf2, 0x0b, 0xc1, 0x7f, 0x05, 0xd8, 0x2f, 0x08,
+   0xff, 0x82, 0xf0, 0x57, 0x64, 0xff, 0xdb, 0xfc, 0x0b, 0x2a, 0xfa, 0x22,
+   0xfc, 0xaf, 0xda, 0xff, 0xe8, 0xe0, 0x6f, 0xd0, 0x7e, 0xd9, 0xcc, 0x0f,
+   0x0e, 0xfe, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xa8, 0xc0, 0x2f, 0x95, 0xfe,
+   0x53, 0xf1, 0x7f, 0x21, 0xfd, 0x2b, 0xf5, 0xaf, 0xc0, 0xff, 0xb7, 0xf5,
+   0xaf, 0x4e, 0xfe, 0x47, 0xe9, 0xff, 0xb5, 0xff, 0xd9, 0xaa, 0x5f, 0x85,
+   0xff, 0xb2, 0x99, 0x4f, 0x5d, 0xfc, 0xaa, 0xf4, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xed, 0xff, 0xbe, 0xff, 0xef, 0xff, 0xff, 0xdf, 0xff, 0x7f,
+   0x7f, 0x7f, 0xad, 0xfe, 0x7b, 0xff, 0xfb, 0x7d, 0xff, 0xaf, 0xfa, 0xff,
+   0xef, 0xf7, 0xff, 0xfd, 0xbe, 0x7d, 0xef, 0xfb, 0xee, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0x5f, 0xff, 0xb7, 0xff, 0xff, 0x77, 0xf7, 0xbf, 0x6e,
+   0xff, 0xfb, 0xf6, 0xef, 0xfd, 0xff, 0xab, 0xfe, 0xef, 0x5d, 0xff, 0xef,
+   0xf6, 0x7f, 0xeb, 0xff, 0xfd, 0xfe, 0xbf, 0xf7, 0xff, 0xef, 0xfd, 0xdf,
+   0xbf, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xda, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfa, 0xff, 0xff, 0xfb, 0xff, 0xdf,
+   0xff, 0xfd, 0xdf, 0xff, 0xfe, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf5,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xf1, 0xff, 0x77, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xf3,
+   0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xcf, 0xff, 0xff, 0xf4, 0xff, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xed,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xbb, 0xff, 0x1f, 0xff, 0xff, 0xd1, 0xff, 0x5f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xb7, 0xdb, 0xff, 0x5b, 0xed, 0xaf, 0xb6, 0xff,
+   0x57, 0xfb, 0xf7, 0xfe, 0x7f, 0xff, 0xfe, 0xd7, 0xb6, 0xfd, 0xfa, 0xed,
+   0x5b, 0xdb, 0xbf, 0x7d, 0xfb, 0xff, 0xee, 0xff, 0xc7, 0xff, 0xff, 0xf5,
+   0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x52, 0x7f, 0x97,
+   0xd1, 0xbf, 0x66, 0xff, 0x5f, 0xea, 0x0f, 0x40, 0x7f, 0xd8, 0xf4, 0x1f,
+   0x2e, 0xbe, 0xa9, 0xa3, 0x27, 0x17, 0x7e, 0xe9, 0xd1, 0xaf, 0x48, 0xfd,
+   0x1f, 0xff, 0xff, 0xf1, 0xff, 0x3f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x8b, 0xf4, 0xff, 0xa5, 0xfa, 0x17, 0xab, 0xff, 0x96, 0xed, 0xaf, 0xca,
+   0x5f, 0x7d, 0xfa, 0x4b, 0x4d, 0x7d, 0xfa, 0xea, 0x97, 0x45, 0x5f, 0x7c,
+   0xf5, 0x5f, 0x52, 0xff, 0xcf, 0xff, 0xff, 0xf5, 0xff, 0x4f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xaf, 0xa1, 0xfe, 0x8f, 0xd1, 0x77, 0xa6, 0xfe,
+   0x17, 0xeb, 0x2f, 0xc8, 0x7f, 0xf4, 0xea, 0x4f, 0x1a, 0xfa, 0xd0, 0xc5,
+   0x17, 0x2f, 0x7f, 0xe9, 0xd1, 0xdf, 0xc4, 0xfe, 0x0f, 0xff, 0xff, 0xe1,
+   0xff, 0x9f, 0xfe, 0x7f, 0xbb, 0xff, 0xff, 0xff, 0x0f, 0x1e, 0x3f, 0x78,
+   0xf4, 0x9f, 0xd8, 0xff, 0xea, 0xfa, 0xef, 0xff, 0x7f, 0xdd, 0xf6, 0xaf,
+   0xaf, 0xfe, 0x5a, 0xf3, 0x2f, 0xe5, 0x7f, 0xbe, 0xf2, 0xaf, 0xcb, 0xff,
+   0xab, 0xff, 0xff, 0xf5, 0xff, 0x1f, 0xfd, 0x6f, 0x76, 0xff, 0xff, 0xff,
+   0xff, 0x7e, 0x7c, 0xed, 0xf5, 0x3f, 0x59, 0xff, 0xa5, 0xd6, 0x5f, 0xb5,
+   0x7f, 0xf9, 0xf5, 0x8f, 0x3a, 0xfe, 0x58, 0xa3, 0x7f, 0x4f, 0xff, 0x71,
+   0xfe, 0x5f, 0x9d, 0xfe, 0xaf, 0xfe, 0xff, 0xe9, 0xff, 0x5f, 0xfd, 0xdf,
+   0x6c, 0xfe, 0xff, 0xff, 0x57, 0x1b, 0x7f, 0xbc, 0xed, 0xbf, 0xfe, 0xff,
+   0x27, 0xfb, 0xbf, 0xfe, 0x7f, 0x5f, 0xfb, 0x7f, 0xef, 0xff, 0x17, 0xef,
+   0x5f, 0xf8, 0x7f, 0x73, 0xfa, 0xff, 0xd1, 0xff, 0x8b, 0xff, 0xff, 0xf5,
+   0xff, 0x9f, 0xfe, 0x8f, 0xc1, 0xff, 0xff, 0xff, 0x6f, 0x7f, 0xfc, 0xf4,
+   0xfa, 0x3f, 0xfb, 0xff, 0x4d, 0xf6, 0xbf, 0xfd, 0xff, 0xfa, 0xeb, 0x6f,
+   0x5d, 0xbd, 0x3a, 0xea, 0xff, 0xe9, 0xff, 0xd3, 0xf6, 0x5f, 0xf3, 0xff,
+   0xaf, 0xff, 0xff, 0xe1, 0xff, 0x3f, 0xff, 0x2f, 0x0b, 0xfd, 0xff, 0xff,
+   0x5f, 0x2a, 0x5f, 0x2d, 0xea, 0xbf, 0xfe, 0xff, 0x93, 0xfd, 0x6f, 0xff,
+   0xbf, 0x7e, 0xf5, 0xbf, 0xd6, 0xff, 0x4a, 0xfb, 0xbf, 0xb8, 0xff, 0x8f,
+   0xfe, 0xff, 0xa8, 0xff, 0x8f, 0xff, 0xff, 0xf5, 0xff, 0x9f, 0xfd, 0xcf,
+   0xe8, 0xfe, 0xff, 0xff, 0x5f, 0x2c, 0x7e, 0x74, 0xfa, 0x3f, 0xfb, 0xff,
+   0x77, 0xd1, 0xff, 0xf6, 0xff, 0xea, 0xed, 0x7f, 0x9e, 0xff, 0x1a, 0xd4,
+   0xbf, 0xf2, 0xff, 0x8b, 0xff, 0xdf, 0x76, 0xff, 0x2f, 0xff, 0xff, 0xe9,
+   0xff, 0x1f, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xb7, 0xf1, 0xff, 0xab,
+   0xeb, 0xbf, 0xff, 0xff, 0xae, 0xee, 0xaf, 0xde, 0x7f, 0xbd, 0xf5, 0x7f,
+   0xe5, 0xff, 0x55, 0xf5, 0xff, 0xd8, 0xff, 0xaf, 0xfe, 0x7f, 0xfa, 0xff,
+   0xcf, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
+   0x2f, 0x53, 0xff, 0xb7, 0xfa, 0x2f, 0xd5, 0xff, 0xda, 0xe2, 0x7f, 0xaa,
+   0xfe, 0x75, 0xd1, 0xff, 0xd2, 0xff, 0xe7, 0xec, 0x2f, 0x57, 0xff, 0xd7,
+   0xff, 0x57, 0x2a, 0xfd, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0x1f, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xf5, 0x37, 0xff, 0xff,
+   0x65, 0xe9, 0x5f, 0x5d, 0x7f, 0xd5, 0xfa, 0x7f, 0xe9, 0xff, 0x52, 0xf5,
+   0x5b, 0xe3, 0xff, 0xda, 0xff, 0x5f, 0xd7, 0xfe, 0xcf, 0xff, 0xff, 0xf7,
+   0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xf6, 0xff, 0xef,
+   0xd7, 0x6f, 0xb4, 0xff, 0xad, 0xc3, 0x7f, 0xd5, 0xfe, 0xb5, 0xd1, 0x7f,
+   0xd3, 0xff, 0xe7, 0xec, 0x37, 0xa7, 0xfe, 0x57, 0xff, 0x7f, 0xba, 0xfe,
+   0x1f, 0xfd, 0xff, 0xed, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xaf, 0xfd, 0xff, 0xbf, 0xfc, 0x07, 0xe3, 0xff, 0x1a, 0xfe, 0xff, 0xf2,
+   0xff, 0x47, 0xf5, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0x47, 0x17, 0x7f, 0x90,
+   0xff, 0x2f, 0xc4, 0xff, 0xa7, 0xff, 0xff, 0xfb, 0xff, 0x4f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x0f, 0xf6, 0xff, 0xff, 0xd0, 0x57, 0xee, 0xff,
+   0x5b, 0xfc, 0xff, 0xd2, 0xfe, 0x9f, 0xe1, 0xff, 0xd5, 0xff, 0xf6, 0xfa,
+   0xcf, 0x46, 0xff, 0x82, 0xff, 0x7f, 0x91, 0xfe, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0x2f,
+   0xf1, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff,
+   0xd7, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf5, 0xff, 0xf4, 0xff, 0x8b, 0xf6,
+   0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xd7, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xfa, 0xef, 0xff,
+   0xfd, 0xff, 0x2f, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xd7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0x87, 0xfc, 0xff, 0xff,
+   0xff, 0xa4, 0xb0, 0xff, 0xf8, 0x7f, 0xb3, 0xfd, 0x7f, 0xad, 0xff, 0x06,
+   0xfe, 0x7f, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f,
+   0x42, 0xff, 0x0b, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb5, 0xff,
+   0x97, 0xf4, 0x6f, 0xbb, 0xfe, 0xe0, 0xe2, 0xff, 0xfa, 0xff, 0xe6, 0xf2,
+   0xff, 0xbf, 0xff, 0x55, 0xe8, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0x48, 0xff, 0x4b, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xf1, 0xff, 0x26, 0xfe, 0xff, 0xef, 0xff, 0xaa, 0xf0, 0xff,
+   0xf8, 0xff, 0xb3, 0xfd, 0xff, 0xde, 0xff, 0x87, 0xf6, 0x7f, 0xcd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe5, 0xfe, 0x2f, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x82, 0xfe, 0xe7, 0xfd, 0x2f, 0x88,
+   0xfe, 0xe6, 0xed, 0xff, 0xf2, 0xff, 0xa6, 0xeb, 0xff, 0xfd, 0xbf, 0x38,
+   0xa5, 0x7f, 0x4b, 0xff, 0xef, 0xfd, 0xef, 0xf6, 0xff, 0xff, 0xff, 0x4f,
+   0x24, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xca, 0xff,
+   0x75, 0xff, 0x5f, 0xd1, 0xff, 0xab, 0xf4, 0xff, 0xfc, 0x7f, 0xb1, 0xfd,
+   0xff, 0xbf, 0xff, 0x8a, 0xf2, 0xdf, 0xea, 0xff, 0x7f, 0xef, 0xbf, 0xdf,
+   0xff, 0xff, 0xff, 0x2b, 0x59, 0xfd, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x5f,
+   0xff, 0xdf, 0x7e, 0xff, 0xe7, 0xff, 0x7f, 0x37, 0xfd, 0xa7, 0xfd, 0xff,
+   0xf0, 0xff, 0x96, 0xfe, 0xff, 0xff, 0x7f, 0xd5, 0xaa, 0xff, 0x8e, 0xff,
+   0xd7, 0xdb, 0x27, 0x10, 0xfe, 0xff, 0xff, 0x6f, 0x8a, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xeb, 0xff, 0xde, 0xff, 0x57, 0x6f,
+   0xff, 0x75, 0xfc, 0xff, 0xfa, 0x3f, 0x8c, 0xf5, 0xff, 0xff, 0xff, 0x62,
+   0xf7, 0x5f, 0xeb, 0xff, 0xad, 0xfa, 0x47, 0x45, 0xff, 0xbf, 0xff, 0x5b,
+   0xd7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0x5f, 0x5f, 0xff,
+   0x75, 0xfd, 0xaf, 0xaa, 0xfe, 0xc7, 0xe9, 0xff, 0xf8, 0x7f, 0x99, 0xfe,
+   0xff, 0xff, 0xbf, 0x67, 0xad, 0xff, 0x4e, 0xff, 0xdb, 0xd5, 0x4f, 0x90,
+   0xfe, 0x77, 0xfb, 0x5b, 0xcc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xef, 0xf6, 0xff, 0x80, 0xff, 0xdf, 0xde, 0xfe, 0x1f, 0xfd, 0xff,
+   0xff, 0x7f, 0x74, 0xf1, 0xff, 0xff, 0x7f, 0xd5, 0xd5, 0x5f, 0xf5, 0x7f,
+   0x73, 0xfb, 0xff, 0x5f, 0x7f, 0x89, 0xf0, 0x77, 0x5a, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xfe, 0xaf, 0xfe, 0xff, 0x15, 0xfd, 0xbf, 0xbb,
+   0xfe, 0x2f, 0xfd, 0xff, 0xf5, 0x7f, 0xd5, 0xd1, 0xff, 0xff, 0x7f, 0xa5,
+   0xbd, 0xff, 0xa5, 0xfe, 0x53, 0xf5, 0xaf, 0x1b, 0xfd, 0x93, 0xf2, 0xd7,
+   0xd2, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xd5, 0xff,
+   0xe6, 0xff, 0x57, 0xad, 0xff, 0x15, 0xff, 0xff, 0xfe, 0xff, 0x8b, 0xf4,
+   0xff, 0xff, 0xff, 0x54, 0xd2, 0x5f, 0xd4, 0x7f, 0x7c, 0xfe, 0xff, 0x5f,
+   0xff, 0x7e, 0xff, 0x2f, 0x5e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f,
+   0xfd, 0xbf, 0x5e, 0xff, 0xa7, 0xfe, 0x5f, 0x55, 0xfd, 0x37, 0xf5, 0xff,
+   0xf5, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0x41, 0xf4, 0x7f, 0x41, 0xff,
+   0x54, 0xea, 0xff, 0x1f, 0xff, 0xed, 0xf6, 0xef, 0x54, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xfe, 0x57, 0xd5, 0xff, 0xea, 0xff, 0xef, 0xae,
+   0xfe, 0x4f, 0xfd, 0x7f, 0xfd, 0xff, 0x2d, 0xf6, 0xff, 0xff, 0x5f, 0x8a,
+   0xaa, 0x7f, 0xea, 0x3f, 0x75, 0xfd, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x1b,
+   0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0x71, 0xff,
+   0xa7, 0xea, 0xaf, 0xa0, 0xff, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0xfd, 0xfc,
+   0xff, 0xff, 0xff, 0xbb, 0xf6, 0xff, 0x6f, 0x7f, 0x63, 0xf5, 0xff, 0xff,
+   0xfe, 0xdf, 0xff, 0x7f, 0x4e, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+   0xfe, 0xbf, 0xe4, 0x7f, 0xe5, 0xff, 0x5f, 0x55, 0xff, 0x95, 0xfa, 0x7f,
+   0xfa, 0xbf, 0x36, 0xf7, 0xff, 0xff, 0xff, 0x6a, 0xed, 0x7f, 0xfd, 0xff,
+   0xb5, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xaa, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xd5, 0xff, 0x08, 0xc0, 0xff, 0xff,
+   0xfe, 0x17, 0xec, 0xff, 0xf8, 0xff, 0x75, 0xfe, 0xff, 0xff, 0xff, 0x1f,
+   0xfd, 0xff, 0xff, 0xff, 0xaf, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x62, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xf1, 0xff,
+   0xa2, 0xea, 0xdf, 0xde, 0xff, 0x47, 0xfd, 0xff, 0xfa, 0x7f, 0x8b, 0xf6,
+   0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0xfa, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
+   0xfe, 0xff, 0xf5, 0xff, 0x88, 0xe4, 0xff, 0xff, 0xff, 0x17, 0xf9, 0xff,
+   0xf0, 0xff, 0x22, 0xfe, 0xff, 0xff, 0xff, 0x9f, 0xfa, 0xff, 0xff, 0xff,
+   0xb7, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff,
+   0xdb, 0xf5, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfa, 0xff, 0xaa, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xd7, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xfe,
+   0xdf, 0xf5, 0xff, 0x6d, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0x75, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xfa, 0xff, 0x3f,
+   0xfb, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xdf, 0xff, 0xbf, 0xb7, 0xff,
+   0xdb, 0xfd, 0xff, 0xea, 0xff, 0xff, 0xff, 0x17, 0x10, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x97, 0xff, 0x7f, 0xdd, 0xff, 0xff, 0xff, 0x8b, 0xff,
+   0x5f, 0xfc, 0xeb, 0xd5, 0x7e, 0xfd, 0xff, 0xff, 0x7f, 0xcb, 0xff, 0x7f,
+   0xff, 0x7f, 0xed, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x42, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xd5, 0xff,
+   0xff, 0xff, 0x5f, 0xff, 0x7d, 0xe9, 0xdf, 0xb7, 0xf5, 0xff, 0xbf, 0xfe,
+   0x5f, 0x77, 0xff, 0x1f, 0xff, 0xbf, 0xeb, 0xff, 0x3d, 0xff, 0xff, 0xea,
+   0xff, 0xff, 0xff, 0x87, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f,
+   0xff, 0x5f, 0x7f, 0xff, 0xff, 0xff, 0xaf, 0xbf, 0xfb, 0x7e, 0xf5, 0x2f,
+   0xbf, 0xfa, 0xff, 0xff, 0xff, 0xee, 0xff, 0x5f, 0xfd, 0x7f, 0xdf, 0xff,
+   0x2b, 0xfd, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0x0f, 0xa5, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xca, 0xff, 0xff, 0xff, 0x6f, 0xbd,
+   0xde, 0xfa, 0xed, 0x3f, 0xf5, 0xfe, 0x7f, 0xff, 0x97, 0xeb, 0xff, 0x1b,
+   0xff, 0xff, 0xea, 0xff, 0xbf, 0xff, 0xff, 0xfa, 0xbf, 0xbf, 0xfd, 0xaf,
+   0xf1, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x5f, 0x7f, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0x7d, 0xf7, 0xfb, 0xab, 0x5e, 0xff, 0xdf, 0xff,
+   0x7f, 0xae, 0xff, 0x37, 0xeb, 0xff, 0xda, 0xff, 0x55, 0xfd, 0xff, 0xff,
+   0x7f, 0xf5, 0xe9, 0x0f, 0xa3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
+   0xfe, 0xff, 0xca, 0xfe, 0xda, 0xfe, 0x5b, 0xad, 0xfe, 0xbc, 0xd6, 0xdf,
+   0xda, 0xfe, 0xbf, 0xfe, 0xbf, 0xeb, 0xff, 0x9e, 0xfe, 0xff, 0xfd, 0xff,
+   0xaf, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xf6, 0xaf, 0x69, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0x5f, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xbf,
+   0x7b, 0x6b, 0xfd, 0xb5, 0xad, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0x10,
+   0xa0, 0xbf, 0xaa, 0xff, 0xb9, 0xfa, 0xff, 0xf7, 0xff, 0xe8, 0xd5, 0x5f,
+   0xd2, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0xfd, 0xff, 0x94, 0x7f,
+   0x55, 0xf4, 0x57, 0x55, 0x5f, 0xad, 0xd5, 0xaf, 0xb5, 0xfe, 0xbf, 0xfe,
+   0x7f, 0xff, 0xff, 0xa2, 0xea, 0xbf, 0xf5, 0xff, 0x69, 0xff, 0xff, 0xff,
+   0xbf, 0xfa, 0xf6, 0x6f, 0x68, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xaf,
+   0xfe, 0xbf, 0xeb, 0x7f, 0x75, 0xff, 0xb7, 0xda, 0x7e, 0x75, 0xf5, 0x5b,
+   0xd7, 0xff, 0x2f, 0xfe, 0xff, 0xfb, 0xff, 0x0a, 0xe0, 0x7f, 0xef, 0xff,
+   0x6b, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xeb, 0x5f, 0xc9, 0xff, 0x7f, 0xfd,
+   0xff, 0xff, 0xff, 0x1f, 0xff, 0x7f, 0x5e, 0xff, 0x56, 0xf4, 0x6f, 0xab,
+   0xde, 0x4d, 0xd6, 0x6f, 0xad, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x5f,
+   0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xed, 0xff,
+   0x71, 0xff, 0x9f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xe9, 0xff,
+   0xb3, 0xe9, 0xff, 0x5d, 0x7e, 0xdb, 0xcb, 0xbf, 0x98, 0xff, 0x57, 0xfe,
+   0xff, 0xff, 0xff, 0x3b, 0xff, 0xff, 0xdb, 0xff, 0x57, 0xff, 0xff, 0xff,
+   0xff, 0xea, 0xdb, 0xbf, 0xd3, 0xfe, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xb7,
+   0xff, 0xbf, 0xdb, 0xff, 0x66, 0xd3, 0x5f, 0xb3, 0xfc, 0xb7, 0xde, 0xff,
+   0x12, 0xfd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xf5, 0xff, 0x64, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x44, 0xff, 0xdb, 0xf8, 0xff, 0x1a,
+   0x7f, 0xf5, 0xf5, 0x5f, 0x5f, 0xff, 0xd3, 0xfe, 0xff, 0xff, 0xff, 0x7f,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xc3, 0xff,
+   0xc9, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0x7f, 0xd1, 0xfe,
+   0xab, 0xd3, 0xdf, 0x76, 0xfc, 0xd7, 0xd5, 0x7f, 0x15, 0xff, 0xb7, 0xff,
+   0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x6d, 0xf5, 0xff, 0xb1, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0x7f, 0xc4, 0x7f, 0xdb, 0xf8, 0x7f, 0x2d, 0x7f, 0x7d, 0xf5, 0xdf,
+   0x2e, 0xfd, 0xea, 0xfa, 0xff, 0xff, 0xff, 0x6d, 0xed, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xc5, 0xff, 0xc5, 0xfd, 0xff, 0xff,
+   0xff, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xf6, 0xaf, 0x2d,
+   0x7a, 0xf5, 0xdd, 0xd7, 0x2a, 0xff, 0xdb, 0xf7, 0xff, 0xff, 0xff, 0xb7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0xe9, 0xbf,
+   0xb9, 0xfe, 0xff, 0xff, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0x75, 0xfa, 0xdf, 0x5a, 0xfe, 0xbe, 0xf6, 0x5f, 0xaf, 0xfe, 0x55, 0xfd,
+   0xff, 0xff, 0xff, 0xbe, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x25, 0xa3, 0x7f, 0x21, 0xfe, 0xff, 0xff, 0xff, 0xea, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x6d, 0xf6, 0xbf, 0xb7, 0xdc, 0xfd, 0xd6, 0xf7,
+   0x1a, 0xfd, 0xef, 0xeb, 0xff, 0xff, 0xff, 0x40, 0xf2, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x6f, 0x44, 0xff, 0xff, 0xff,
+   0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0xef, 0x3d,
+   0x7f, 0x7f, 0xea, 0xdf, 0x5f, 0xff, 0x55, 0xfd, 0xff, 0xff, 0xff, 0x4a,
+   0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff,
+   0x14, 0xfc, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xde, 0xff, 0xff, 0x3f, 0xfc, 0x7f, 0xce, 0xff, 0x5f, 0xfe, 0x2f, 0xf0,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x4f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f,
+   0xfd, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xe9, 0xff, 0xff, 0xff,
+   0x5f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xfe, 0xff, 0xff,
+   0xff, 0xdb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x5f,
+   0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xbf,
+   0xf7, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x5f, 0xfd, 0xff, 0xea, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0x6d, 0xff, 0xbf, 0xfd,
+   0x7f, 0xfb, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xeb, 0xfa, 0x7f, 0xfd,
+   0xff, 0xff, 0xf5, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xbf,
+   0xff, 0xbf, 0xfd, 0xff, 0x05, 0xff, 0x5f, 0xeb, 0xff, 0xaf, 0xff, 0xff,
+   0xf7, 0xfd, 0xf7, 0xf7, 0xff, 0xee, 0xff, 0xdf, 0xff, 0xbf, 0xf5, 0xff,
+   0xf7, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0x7f, 0xf5, 0xff, 0x7d, 0xfd,
+   0x7f, 0xfd, 0xff, 0x7f, 0xfd, 0xff, 0xd2, 0xff, 0x2f, 0xfa, 0x7f, 0xdf,
+   0xff, 0xfb, 0xfe, 0xbf, 0xae, 0xff, 0xaf, 0xde, 0xff, 0xf9, 0xff, 0xbf,
+   0xfe, 0x7f, 0xab, 0xff, 0x5e, 0xf5, 0x7f, 0xff, 0xff, 0x7f, 0xfd, 0xff,
+   0x96, 0xff, 0xf7, 0xfb, 0xdf, 0xf5, 0xff, 0xab, 0xff, 0x5f, 0xff, 0xff,
+   0xea, 0xff, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0x3f, 0x11, 0x7c, 0x91, 0xf0,
+   0x57, 0xd7, 0x7f, 0xd5, 0xfb, 0xb7, 0xed, 0xff, 0x75, 0xff, 0xdf, 0xe9,
+   0xff, 0xab, 0xff, 0xdf, 0xf6, 0xfe, 0xed, 0xfe, 0xbf, 0xed, 0xff, 0xbf,
+   0xff, 0x7f, 0xd5, 0xff, 0x9f, 0xfe, 0xdf, 0xde, 0xff, 0xaf, 0xff, 0x3f,
+   0xa1, 0xfc, 0x27, 0xa2, 0x7f, 0xbd, 0xfe, 0xaf, 0xf6, 0xbf, 0x5d, 0xff,
+   0xd7, 0xea, 0x7f, 0x5b, 0xff, 0x7f, 0xf5, 0xdf, 0xd6, 0xff, 0xad, 0xf5,
+   0xff, 0xfa, 0xff, 0xd6, 0xfe, 0xef, 0xfe, 0xff, 0x6a, 0xff, 0x7f, 0xfb,
+   0xff, 0xda, 0xfe, 0xff, 0xfc, 0x7e, 0xfc, 0xdb, 0x07, 0x01, 0x7f, 0x10,
+   0xf1, 0x47, 0x02, 0x3f, 0x20, 0xf4, 0xdf, 0xed, 0xff, 0xcd, 0xff, 0x7f,
+   0x5b, 0xff, 0xf7, 0xfe, 0x5f, 0xd1, 0xff, 0x15, 0xfd, 0xaf, 0xd0, 0xff,
+   0x26, 0xfa, 0x5f, 0xa0, 0x7f, 0x83, 0xff, 0xbf, 0xd0, 0xfa, 0xe8, 0xf7,
+   0x2f, 0x52, 0xfd, 0x22, 0xd2, 0x0f, 0x54, 0x7d, 0x45, 0xd1, 0x5f, 0x90,
+   0xfe, 0x0b, 0xd4, 0x5f, 0xc2, 0xfe, 0x05, 0xe8, 0x2f, 0xf2, 0xff, 0x45,
+   0xff, 0x3f, 0xe8, 0xff, 0x85, 0xff, 0x6f, 0xf9, 0xff, 0x4a, 0xff, 0xff,
+   0xea, 0x3e, 0xfd, 0xea, 0xf7, 0x1f, 0xbf, 0xfb, 0xf9, 0xf7, 0x1f, 0xff,
+   0xfd, 0xf5, 0x7f, 0x61, 0xff, 0x26, 0xfc, 0x6f, 0x54, 0xff, 0x96, 0xf6,
+   0xff, 0xa2, 0xff, 0x1f, 0xfa, 0xff, 0xb3, 0xff, 0x1f, 0xfd, 0xff, 0xd1,
+   0xff, 0x0f, 0xfd, 0x3f, 0x5a, 0x7f, 0xf5, 0xdf, 0x2f, 0x5d, 0x7f, 0xd7,
+   0xf1, 0x3f, 0x5b, 0xff, 0xb3, 0xf1, 0xff, 0xeb, 0xff, 0x5f, 0xf7, 0xff,
+   0xf1, 0xff, 0x5f, 0xfe, 0xff, 0xf4, 0xff, 0x57, 0xff, 0x7f, 0xd1, 0xff,
+   0x57, 0xf7, 0x5f, 0xe9, 0xff, 0xd5, 0xff, 0xaf, 0xd5, 0x7d, 0xfc, 0xff,
+   0xbf, 0xb7, 0xff, 0x75, 0xff, 0xd7, 0xb6, 0x7f, 0xdb, 0xfe, 0x6f, 0xf1,
+   0xff, 0x9f, 0xfd, 0xff, 0xb5, 0xff, 0x97, 0xff, 0xdf, 0x4e, 0xff, 0xe7,
+   0xf4, 0x7f, 0xce, 0xff, 0xd7, 0xfc, 0x7f, 0x4e, 0xff, 0x53, 0xfa, 0x3f,
+   0x5b, 0x7f, 0xfd, 0xff, 0xb7, 0x6e, 0x7f, 0xef, 0xea, 0x7f, 0x6f, 0x7f,
+   0xf7, 0xf6, 0xff, 0xd5, 0xff, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0x1f, 0xfd,
+   0x7f, 0xca, 0xff, 0xa6, 0xfc, 0x6f, 0xab, 0xfe, 0x66, 0xfa, 0x7f, 0xcd,
+   0xff, 0x7b, 0xfe, 0x7f, 0x05, 0x7f, 0xfc, 0xff, 0xdf, 0xb5, 0xff, 0xb9,
+   0xfe, 0xaf, 0xf5, 0xff, 0x55, 0xff, 0xff, 0xf1, 0xff, 0x5f, 0xff, 0xff,
+   0xf5, 0xff, 0x5f, 0xff, 0x6f, 0xae, 0xfe, 0xed, 0xe9, 0x7f, 0xce, 0xff,
+   0xe7, 0xea, 0x5f, 0x9d, 0xfe, 0xd2, 0xf4, 0xaf, 0x55, 0xfe, 0xec, 0xfd,
+   0x3f, 0xe5, 0xff, 0xa3, 0xfc, 0x3f, 0xc6, 0xff, 0x65, 0xfa, 0xff, 0xf3,
+   0xff, 0x5f, 0xfe, 0xff, 0xe1, 0xff, 0x1f, 0xff, 0x5f, 0xc5, 0xfe, 0xa5,
+   0xfc, 0x4f, 0x4a, 0xfd, 0xaa, 0xec, 0x37, 0xca, 0xbf, 0x55, 0xde, 0x37,
+   0xea, 0x5f, 0xfa, 0xf7, 0x2f, 0xeb, 0x7f, 0x5b, 0xf6, 0xb7, 0x75, 0x7f,
+   0x5b, 0xfe, 0xff, 0xd9, 0xff, 0x1f, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff,
+   0x6f, 0x9c, 0xfe, 0x45, 0xd1, 0xbf, 0x4c, 0xff, 0x45, 0xe9, 0xef, 0x14,
+   0xfd, 0xa2, 0xf8, 0x6f, 0x58, 0xff, 0xd4, 0xd6, 0x7f, 0x46, 0xff, 0x72,
+   0xfe, 0x2f, 0xe5, 0xff, 0x63, 0xed, 0xff, 0xf1, 0xff, 0xbb, 0xfe, 0xff,
+   0xd5, 0xff, 0x1f, 0xfe, 0x5f, 0xc3, 0x7f, 0xab, 0xee, 0x6f, 0xca, 0xfe,
+   0xb6, 0xec, 0x5f, 0xca, 0x7e, 0x5b, 0xf6, 0x97, 0xea, 0x7d, 0xab, 0xf9,
+   0x97, 0xf5, 0xfd, 0x53, 0xed, 0x3f, 0xab, 0xfd, 0x5a, 0xfe, 0xff, 0xf5,
+   0xff, 0x0f, 0xff, 0xff, 0xf1, 0xff, 0x5f, 0xff, 0x8f, 0x3e, 0xfa, 0x68,
+   0xc9, 0x4f, 0xbb, 0xfc, 0x50, 0xcb, 0x4f, 0xbb, 0x7e, 0xd4, 0xe5, 0xa7,
+   0xb5, 0xff, 0x53, 0xd1, 0x7f, 0x57, 0xff, 0x76, 0xdb, 0x6f, 0x77, 0xff,
+   0xf7, 0xd5, 0xff, 0xd1, 0xff, 0x5f, 0xfd, 0xbf, 0xf3, 0xff, 0x9f, 0xfe,
+   0x4f, 0x15, 0xff, 0xda, 0xf2, 0x8b, 0x16, 0xff, 0xfa, 0xe2, 0x8b, 0x16,
+   0x5e, 0xb5, 0xf8, 0xd7, 0xee, 0xfe, 0xaa, 0xf2, 0x57, 0xdf, 0xfe, 0xed,
+   0xed, 0x5f, 0xad, 0xbd, 0x5a, 0xdb, 0xdf, 0x79, 0xff, 0x1f, 0xf7, 0xff,
+   0xd4, 0xff, 0x5d, 0xfb, 0x8f, 0x3e, 0xfa, 0xb0, 0xa3, 0x9f, 0x36, 0xda,
+   0xa0, 0xa5, 0x9f, 0x76, 0x7a, 0xf4, 0xd1, 0x87, 0x88, 0xfc, 0x4f, 0xff,
+   0x0f, 0x14, 0x7d, 0x50, 0xd1, 0x27, 0x2b, 0x7d, 0xb0, 0xe2, 0x5f, 0xd1,
+   0xfe, 0x2a, 0xfd, 0xbf, 0xb1, 0xfe, 0x15, 0xfd, 0xab, 0x55, 0xbe, 0xea,
+   0xe2, 0x4b, 0x2f, 0x7e, 0x7a, 0xe9, 0x4b, 0x0f, 0xbd, 0xac, 0xf4, 0xea,
+   0xa0, 0xfc, 0xdf, 0xfe, 0x53, 0x55, 0x5d, 0x55, 0xd5, 0x8b, 0x94, 0x7e,
+   0x45, 0xd9, 0x7f, 0xd1, 0xff, 0x97, 0xea, 0x77, 0xd1, 0xff, 0x97, 0xea,
+   0x0f, 0x2f, 0xfa, 0xd8, 0xc6, 0x17, 0xad, 0xfc, 0xe2, 0xc3, 0x0f, 0x3d,
+   0xbe, 0xf4, 0xd1, 0x87, 0xaa, 0xfc, 0x9b, 0xff, 0x17, 0x15, 0x7f, 0x51,
+   0xd1, 0x2f, 0x2d, 0x7d, 0x71, 0xd1, 0xdf, 0xa5, 0xfe, 0x1d, 0xed, 0x5f,
+   0xa3, 0xfe, 0x15, 0xfd, 0xff, 0xfe, 0xff, 0xf7, 0xfd, 0xff, 0x7f, 0xff,
+   0xbd, 0xfe, 0xff, 0xf7, 0xfd, 0x5b, 0xff, 0xfb, 0xfb, 0xff, 0xa7, 0xfe,
+   0xef, 0xef, 0xfd, 0xee, 0xff, 0xf7, 0xdb, 0xff, 0xae, 0xff, 0xbf, 0xfe,
+   0xff, 0xeb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf6, 0xdb, 0xb6, 0xfe, 0xb6,
+   0xed, 0xaf, 0xee, 0xbf, 0xf7, 0xdb, 0xdb, 0xbe, 0x7f, 0xff, 0xf5, 0x6f,
+   0x57, 0xfd, 0x8f, 0xff, 0x7f, 0xbd, 0xff, 0xbb, 0xf6, 0x5f, 0x7b, 0xff,
+   0xfb, 0xf6, 0xff, 0x55, 0xff, 0xbf, 0xfa, 0xdf, 0x55, 0xff, 0xd7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xfa, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f,
+   0xf5, 0xbf, 0xfa, 0xff, 0xff, 0xfe, 0xff, 0xeb, 0xff, 0x5f, 0xf5, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0xff, 0xd7, 0xff,
+   0xbf, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbb, 0xff, 0x7f, 0xff, 0xff, 0x6f, 0xff, 0x7f, 0xfd,
+   0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xef,
+   0xff, 0xff, 0xee, 0xff, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0x5f, 0xff, 0xbf, 0xed, 0xff, 0x6b, 0xf5, 0xff, 0xfa, 0xff,
+   0x7f, 0xfd, 0xff, 0xaa, 0xff, 0x2f, 0xf5, 0xff, 0xee, 0xff, 0xff, 0xff,
+   0xff, 0x7b, 0xff, 0x5b, 0xff, 0xff, 0xed, 0xff, 0x6f, 0xfd, 0xff, 0xee,
+   0xff, 0xff, 0xf5, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0x57, 0x5b, 0x7f, 0x57,
+   0xfe, 0x7f, 0xed, 0xff, 0xaf, 0xff, 0xbf, 0xf7, 0xff, 0x5b, 0xfe, 0x5f,
+   0xbb, 0xff, 0xff, 0xff, 0xdf, 0x96, 0xff, 0xef, 0xff, 0xff, 0xf6, 0xff,
+   0xdb, 0xf6, 0x5f, 0xb7, 0xff, 0xaf, 0xfe, 0x57, 0xfd, 0xff, 0x0f, 0xfe,
+   0xbf, 0xea, 0xfe, 0x56, 0xf6, 0xff, 0xfb, 0xff, 0xdf, 0xfe, 0x7f, 0x6d,
+   0x7f, 0xd7, 0xfe, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xbf, 0x15, 0xfe, 0x5f,
+   0xfd, 0xff, 0x5d, 0xff, 0xdb, 0xfe, 0xff, 0x6e, 0x7f, 0x5f, 0xff, 0x6f,
+   0xfb, 0xff, 0xb7, 0xfc, 0x4b, 0x1b, 0xfb, 0xab, 0xfe, 0x7f, 0xed, 0xff,
+   0xb7, 0xff, 0xbf, 0xeb, 0xff, 0x55, 0xfa, 0xbf, 0xb5, 0xff, 0xfd, 0xfb,
+   0x37, 0x4b, 0x7f, 0xab, 0xf7, 0xb7, 0xea, 0xff, 0xbb, 0xdb, 0xb7, 0xbb,
+   0xff, 0xbd, 0xfa, 0x97, 0xee, 0xff, 0xe5, 0xfa, 0x8f, 0x36, 0xfe, 0x7a,
+   0xd5, 0xff, 0xb5, 0xff, 0xaf, 0xfa, 0x7f, 0xad, 0xff, 0x5f, 0xfb, 0x7f,
+   0x6b, 0xff, 0xf7, 0xef, 0x2f, 0x4b, 0xfd, 0x76, 0xd5, 0xaf, 0x5f, 0xfd,
+   0x72, 0xf5, 0x57, 0x6b, 0xfd, 0xeb, 0xa5, 0xbf, 0xfa, 0xff, 0xcf, 0xf4,
+   0xaf, 0x5d, 0xbf, 0xd6, 0xfa, 0x57, 0xed, 0x7f, 0xab, 0xfe, 0xaf, 0xf5,
+   0xfe, 0xaa, 0xfe, 0xdf, 0xfa, 0xff, 0xde, 0xf5, 0x37, 0x15, 0x7f, 0xfd,
+   0xfe, 0xb7, 0xb6, 0x5f, 0x77, 0xdb, 0xaf, 0xaf, 0xbf, 0xaa, 0xf6, 0x17,
+   0xd7, 0xff, 0x65, 0xfd, 0x5f, 0x7b, 0xfa, 0xd4, 0xd1, 0x3f, 0x15, 0xfe,
+   0xd2, 0xe1, 0xbf, 0x16, 0xff, 0xeb, 0xe1, 0x5b, 0x0b, 0xfe, 0xb0, 0xe5,
+   0xc7, 0xb7, 0x7d, 0xd1, 0xd1, 0xa7, 0x2f, 0x7e, 0xec, 0xf1, 0xa7, 0x1e,
+   0xfd, 0xf2, 0xc2, 0x7f, 0xa4, 0xfe, 0xef, 0xf4, 0xd7, 0xae, 0x7d, 0x72,
+   0xe9, 0x57, 0xaf, 0x7f, 0xbb, 0xfa, 0xab, 0xad, 0xbe, 0x5a, 0xf5, 0xaf,
+   0x5d, 0xff, 0xfa, 0xf2, 0x57, 0x4d, 0x7f, 0x7e, 0xf1, 0x47, 0x9b, 0x7f,
+   0x75, 0xd5, 0x57, 0x57, 0x7f, 0xd8, 0xf5, 0x2f, 0x52, 0xff, 0x5a, 0xfd,
+   0x8f, 0xbc, 0x7d, 0xd2, 0xf3, 0x5f, 0x1a, 0xfd, 0x62, 0xd1, 0x5f, 0x1b,
+   0x7f, 0x75, 0xd1, 0x6f, 0x15, 0xfd, 0x47, 0xed, 0xc7, 0xfa, 0x7c, 0xf4,
+   0xe5, 0x57, 0x1f, 0x7d, 0xf4, 0xf1, 0x47, 0x1f, 0xfe, 0xdb, 0xd5, 0x7f,
+   0x7f, 0xfd, 0x4b, 0xf4, 0x2b, 0x7b, 0xfb, 0xb6, 0xd8, 0xc3, 0x6f, 0x7f,
+   0xfe, 0xfb, 0xa3, 0xef, 0x7e, 0xdd, 0xff, 0xd3, 0xff, 0xff, 0x65, 0xfc,
+   0xd7, 0xad, 0xff, 0xfd, 0xf9, 0xef, 0x5f, 0xff, 0xff, 0xf5, 0xff, 0x5f,
+   0xff, 0x76, 0xeb, 0xd7, 0xd5, 0xfe, 0x97, 0xfc, 0x0f, 0x76, 0x7d, 0xd5,
+   0xf1, 0x97, 0x5f, 0x7d, 0xf4, 0xd5, 0xc7, 0x5e, 0x7d, 0xf8, 0xd2, 0x47,
+   0x2f, 0xfd, 0xcf, 0xec, 0xc7, 0xba, 0xba, 0xea, 0xd1, 0xaf, 0x1e, 0x7f,
+   0xea, 0xd1, 0x4b, 0x5d, 0xfd, 0xc7, 0xfc, 0x3f, 0xbf, 0xfd, 0x36, 0xe9,
+   0xaf, 0xfb, 0xfd, 0x8e, 0xf5, 0xe7, 0xff, 0x7e, 0xfd, 0xeb, 0xd7, 0xbf,
+   0x7e, 0xfd, 0xef, 0xd7, 0xff, 0xfe, 0x17, 0xff, 0xd7, 0x6d, 0x7d, 0xff,
+   0xf5, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xf7, 0x1f, 0xff, 0x75, 0xfd, 0xef,
+   0x6d, 0xfd, 0xeb, 0xf2, 0x8f, 0x5e, 0xfb, 0xba, 0xe1, 0x47, 0xdf, 0x7a,
+   0xdc, 0xdf, 0xc7, 0xff, 0x7a, 0xfc, 0xda, 0xc7, 0x5f, 0xfd, 0x5f, 0xfa,
+   0x87, 0x5a, 0x7f, 0xf9, 0xf1, 0xaf, 0x1f, 0xfd, 0xf6, 0xf1, 0xaf, 0x5f,
+   0xff, 0xc7, 0xf4, 0x3f, 0xbf, 0xfd, 0xdf, 0xe3, 0xbf, 0xf7, 0xbe, 0x56,
+   0xf5, 0xd7, 0x5f, 0x7f, 0xf5, 0xd2, 0x57, 0xaf, 0x7d, 0xf5, 0xeb, 0x57,
+   0xbf, 0xfd, 0xa2, 0xec, 0xd7, 0xdf, 0xfe, 0xee, 0xf5, 0xd7, 0x5e, 0x7f,
+   0xfd, 0xd5, 0xd7, 0x1f, 0xff, 0x1f, 0xff, 0x57, 0x09, 0xff, 0xf2, 0xea,
+   0xaf, 0xbe, 0xfa, 0xec, 0xd4, 0xc7, 0x7e, 0x7d, 0xfc, 0xf7, 0xc7, 0x5f,
+   0x7f, 0xfc, 0xab, 0xc7, 0xb7, 0xfd, 0xe7, 0xfc, 0x47, 0x5a, 0x7d, 0xfd,
+   0xd1, 0xdf, 0x1f, 0xff, 0xb5, 0xf1, 0x57, 0x5d, 0xfe, 0x37, 0xfd, 0x3f,
+   0x5b, 0xfe, 0xd7, 0xe3, 0xdb, 0x7f, 0x7f, 0x5b, 0xf1, 0xd7, 0x5b, 0x5f,
+   0xdd, 0xaa, 0x57, 0xbf, 0x7e, 0xb5, 0xdd, 0x57, 0x5f, 0xff, 0x55, 0xf5,
+   0xd5, 0xbd, 0xfd, 0xda, 0xf5, 0x6b, 0x5d, 0x7f, 0xff, 0xf5, 0xef, 0x9f,
+   0xff, 0x1f, 0xff, 0x2f, 0xaa, 0xff, 0xed, 0xeb, 0x1f, 0x55, 0x7c, 0x7a,
+   0xf3, 0x2f, 0x57, 0x7e, 0xf5, 0xf5, 0xd7, 0x2a, 0xfd, 0xb6, 0xf1, 0xd7,
+   0x5a, 0xfe, 0xea, 0xc5, 0x17, 0x17, 0xff, 0xb7, 0xf1, 0xaf, 0x1b, 0xfd,
+   0xb2, 0xe5, 0x5f, 0x35, 0xfe, 0x5f, 0xfb, 0x6f, 0x6d, 0xff, 0xad, 0xe2,
+   0xc7, 0x3e, 0x7f, 0x74, 0xf1, 0xf7, 0x1e, 0xff, 0x5a, 0xf1, 0x5f, 0x9f,
+   0x7f, 0xfb, 0xf2, 0x5f, 0x8f, 0xff, 0xf8, 0xf2, 0x2f, 0x5d, 0x7f, 0xf5,
+   0xfa, 0x5f, 0x57, 0x7f, 0xdb, 0xf8, 0xb7, 0x4f, 0xff, 0x1b, 0xff, 0x1f,
+   0xfb, 0xff, 0x6b, 0xeb, 0x8f, 0x40, 0x7d, 0xe5, 0xd5, 0xaf, 0xe0, 0xff,
+   0x4b, 0xfe, 0xff, 0x60, 0xff, 0x07, 0xfe, 0xff, 0xb0, 0xfe, 0xff, 0xff,
+   0xef, 0xc0, 0xfe, 0x07, 0xea, 0x7f, 0xa4, 0xff, 0x93, 0xf6, 0x3f, 0x68,
+   0xff, 0x27, 0xec, 0x25, 0xeb, 0xbf, 0xc8, 0xe0, 0x17, 0xe5, 0x7f, 0xb8,
+   0xf2, 0xff, 0xd4, 0xfe, 0x17, 0xf5, 0xaf, 0xea, 0xff, 0xaa, 0xfa, 0xaf,
+   0xea, 0xff, 0xf7, 0xef, 0xb7, 0xea, 0xff, 0x52, 0xfd, 0x1f, 0xe9, 0xff,
+   0x43, 0xfa, 0xbf, 0xa4, 0xff, 0x46, 0xfc, 0x97, 0xfe, 0xff, 0x62, 0xf5,
+   0x57, 0x44, 0x7f, 0xf1, 0xf2, 0xbf, 0xe1, 0xff, 0x4f, 0xfe, 0xbf, 0x40,
+   0xff, 0x2f, 0xf6, 0xbf, 0xa0, 0xff, 0xff, 0xff, 0xaf, 0xa4, 0xff, 0x07,
+   0xf5, 0x3f, 0x41, 0xff, 0x4b, 0xf6, 0x3f, 0x61, 0xff, 0x4f, 0xf9, 0x27,
+   0xfd, 0xff, 0x6a, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff,
+   0xfe, 0xff, 0xfa, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xf5, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff,
+   0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xfe, 0xbf, 0xf5, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfa, 0xff, 0xff, 0xfb, 0xff, 0xeb, 0xff, 0xff, 0xff, 0x7f, 0xfb,
+   0xff, 0xff, 0xfa, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xaf,
+   0xff, 0x7f, 0xfb, 0xff, 0x06, 0xfd, 0xbf, 0xf7, 0xff, 0xd7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0x5f, 0xfd, 0x7f, 0xed, 0xff,
+   0x75, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0x7f, 0xdb, 0xff, 0xfb, 0xfe,
+   0xff, 0xf5, 0xff, 0xaf, 0xff, 0xbf, 0xea, 0xff, 0x57, 0xfa, 0x7f, 0xef,
+   0xff, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff,
+   0xfd, 0xff, 0xab, 0xff, 0x77, 0xfd, 0xff, 0xf5, 0xff, 0x7f, 0xfd, 0xff,
+   0xf6, 0xff, 0xd7, 0xff, 0xbf, 0xfb, 0xff, 0xfb, 0xfe, 0x7f, 0xff, 0xff,
+   0xda, 0xff, 0xef, 0xfd, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdd, 0xff, 0x5f, 0xff, 0x7f, 0xfd, 0xff, 0xdf, 0xff, 0x7f, 0xfb,
+   0xff, 0xd7, 0xff, 0x5f, 0xdb, 0xff, 0x7f, 0xfd, 0x7f, 0xd7, 0xff, 0xd7,
+   0xff, 0xef, 0xd5, 0xff, 0x5b, 0xfd, 0x5f, 0xeb, 0xff, 0x6f, 0xff, 0x6f,
+   0x6b, 0xff, 0xb7, 0xfd, 0xbf, 0xf5, 0xff, 0x77, 0xfb, 0xff, 0xab, 0x7e,
+   0x7b, 0xf5, 0xff, 0xeb, 0xff, 0x5f, 0xfd, 0x7f, 0xfb, 0xff, 0xeb, 0xff,
+   0xff, 0xfa, 0xff, 0xaf, 0xff, 0xbf, 0xee, 0xff, 0xb7, 0xff, 0xff, 0xfd,
+   0xff, 0x5d, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xf7, 0xff, 0xdb, 0xff, 0x5d,
+   0xff, 0x5f, 0xdd, 0xff, 0xeb, 0xff, 0x7f, 0xfd, 0xff, 0xbf, 0xff, 0xff,
+   0xee, 0xff, 0x5f, 0xff, 0x5f, 0xa0, 0xff, 0x22, 0xfd, 0x2f, 0xe8, 0xff,
+   0x06, 0xfa, 0x17, 0xd1, 0xff, 0x45, 0xfa, 0x07, 0x04, 0xfd, 0x03, 0xf0,
+   0x5f, 0x90, 0xfe, 0x27, 0xe8, 0x7f, 0xa1, 0xfe, 0x0a, 0xf4, 0x6f, 0xf1,
+   0xff, 0x07, 0xff, 0xbf, 0xe8, 0xff, 0x25, 0xfe, 0x6f, 0xf5, 0x5f, 0x85,
+   0xfe, 0xb7, 0xba, 0xff, 0x2a, 0xfd, 0x5f, 0xf4, 0xff, 0x13, 0xfd, 0xa7,
+   0x2b, 0xbf, 0x22, 0xf5, 0xb7, 0x62, 0x7f, 0x85, 0xf6, 0x57, 0xc4, 0x7f,
+   0x23, 0xf7, 0x7f, 0xe8, 0xff, 0x56, 0xff, 0x7f, 0xf2, 0xff, 0x87, 0xff,
+   0xbf, 0x8f, 0xfe, 0x7f, 0xf5, 0xef, 0xe6, 0xff, 0xfb, 0xea, 0xdf, 0x47,
+   0xff, 0xfe, 0xec, 0xaf, 0xf8, 0x7c, 0xfc, 0xd1, 0x0f, 0x5f, 0xfc, 0xf8,
+   0xc5, 0x8f, 0x3f, 0x7a, 0xfc, 0xd4, 0xff, 0xf3, 0xff, 0x1f, 0xfd, 0xff,
+   0xe5, 0xff, 0x3f, 0xff, 0x6f, 0xd5, 0x7f, 0x6d, 0xfe, 0xdf, 0xa5, 0xff,
+   0xd7, 0xfc, 0xbb, 0xf6, 0xff, 0xeb, 0xfa, 0xdf, 0xa8, 0x7c, 0xb5, 0xf2,
+   0xaf, 0x95, 0xfe, 0xaa, 0xf2, 0xaf, 0x2a, 0x7e, 0x55, 0xf1, 0xff, 0xe9,
+   0xff, 0x9f, 0xff, 0xff, 0xf2, 0xff, 0x1f, 0xff, 0xbf, 0x4f, 0xff, 0x6d,
+   0xf6, 0x5f, 0x6f, 0xff, 0xbd, 0xf5, 0xef, 0xa6, 0xff, 0xae, 0xfa, 0xbb,
+   0xf9, 0xfc, 0xfc, 0xff, 0x1f, 0x3f, 0xfd, 0xf8, 0xc3, 0x8f, 0xbe, 0x7e,
+   0xf4, 0xf5, 0xff, 0xd3, 0xff, 0x3f, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xfe,
+   0x6f, 0xe0, 0x7f, 0x23, 0xfe, 0x35, 0xe0, 0x7f, 0x03, 0xfc, 0x37, 0xe0,
+   0xff, 0x45, 0xec, 0x17, 0x52, 0x3a, 0xfd, 0xfa, 0xc7, 0x2a, 0xfe, 0x92,
+   0xea, 0xaf, 0x25, 0x7e, 0x55, 0xf1, 0x7f, 0xf9, 0xff, 0x17, 0xff, 0xff,
+   0xf1, 0xff, 0x9f, 0xff, 0xaf, 0x84, 0xfe, 0x86, 0xf4, 0xaf, 0x44, 0xff,
+   0x56, 0xe9, 0xaf, 0x4a, 0xff, 0x8d, 0xf8, 0x77, 0xd4, 0x7c, 0xd4, 0xd7,
+   0x8f, 0xaa, 0xfc, 0xb2, 0xd2, 0x8f, 0x5a, 0x7a, 0xac, 0xe2, 0xff, 0xf1,
+   0xff, 0x3f, 0xfd, 0xff, 0xd3, 0xff, 0x1f, 0xff, 0x8f, 0xff, 0x3f, 0xfc,
+   0xfe, 0xc7, 0xff, 0xff, 0xb8, 0xfe, 0xd3, 0xf7, 0xbf, 0xf8, 0xef, 0xcd,
+   0x58, 0xff, 0x59, 0xf9, 0xaf, 0xde, 0xbf, 0xa8, 0xfb, 0x4f, 0xb7, 0x5f,
+   0xd9, 0xfd, 0xff, 0xf5, 0xff, 0x9f, 0xff, 0x7f, 0xf9, 0xff, 0x57, 0xff,
+   0xaf, 0xaa, 0xfe, 0xb8, 0xf5, 0xd7, 0x52, 0xff, 0xf2, 0xea, 0x87, 0x56,
+   0xff, 0xb2, 0xfa, 0xdb, 0x71, 0xfd, 0x63, 0xd1, 0x8f, 0x32, 0xfd, 0x69,
+   0xab, 0x8f, 0xaa, 0x7e, 0x54, 0xeb, 0xff, 0xa1, 0xff, 0x1f, 0xfd, 0xff,
+   0xd1, 0xff, 0x1f, 0xfe, 0x8f, 0xaf, 0x7f, 0x6d, 0xff, 0x47, 0xef, 0xff,
+   0xdc, 0xfd, 0xd7, 0xeb, 0xff, 0xd8, 0xf6, 0x6d, 0xaa, 0xfd, 0x8e, 0xff,
+   0x8f, 0xed, 0x7e, 0x5a, 0xf5, 0x4f, 0x77, 0x7b, 0xb5, 0xfd, 0xbf, 0xf5,
+   0xff, 0x9b, 0xef, 0xff, 0xf9, 0xff, 0x5f, 0xff, 0x2f, 0xa9, 0x7e, 0x54,
+   0xe8, 0x57, 0xa5, 0xfe, 0xa8, 0xd4, 0x97, 0x86, 0xfe, 0xb2, 0xd4, 0x8b,
+   0xa4, 0xfc, 0x2f, 0xf5, 0x7f, 0x2a, 0xfe, 0x52, 0xe3, 0x5f, 0x0c, 0x7e,
+   0x65, 0xd1, 0xff, 0xa2, 0xfe, 0x1b, 0xfa, 0x5f, 0x91, 0xfe, 0x15, 0xf4,
+   0xcf, 0x4a, 0x7f, 0x2d, 0xf7, 0xc7, 0xa4, 0xff, 0xb4, 0xf4, 0x47, 0x75,
+   0xff, 0xac, 0xf4, 0x55, 0x68, 0xfd, 0x4b, 0xff, 0x4f, 0xad, 0xfe, 0x65,
+   0xe5, 0x3f, 0xa5, 0xfe, 0x52, 0xf1, 0xaf, 0x74, 0xff, 0x96, 0xed, 0xb7,
+   0x69, 0xff, 0xae, 0xfb, 0x5f, 0x77, 0xfd, 0x75, 0xfd, 0xbf, 0x6f, 0xff,
+   0xad, 0xed, 0xff, 0xd5, 0xff, 0xab, 0xed, 0xdf, 0x6f, 0xff, 0x5f, 0xfd,
+   0xff, 0xdb, 0xfe, 0xdf, 0xfd, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xd7,
+   0xff, 0x77, 0xfb, 0x7f, 0xef, 0xfe, 0xb7, 0xf6, 0xff, 0xaa, 0x7f, 0xaf,
+   0xfb, 0x6f, 0xb5, 0xff, 0x77, 0xfb, 0x57, 0x5f, 0xff, 0x7e, 0xf7, 0x6b,
+   0xdb, 0xff, 0xaf, 0xff, 0xbf, 0xf6, 0xff, 0xb7, 0xee, 0x7f, 0x75, 0xff,
+   0xab, 0xff, 0xaf, 0x6c, 0xff, 0xad, 0xee, 0xdf, 0xda, 0xff, 0xed, 0xfd,
+   0xaf, 0x7f, 0xff, 0x7a, 0xeb, 0xef, 0x7e, 0xff, 0xae, 0xef, 0xdf, 0xfa,
+   0xff, 0xd5, 0xfe, 0x6f, 0x77, 0xff, 0xab, 0xfe, 0xff, 0xad, 0xff, 0xef,
+   0xfd, 0xff, 0xed, 0xff, 0xef, 0xfa, 0xff, 0xed, 0xfe, 0xef, 0xfd, 0xff,
+   0xdb, 0xfe, 0x5f, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0x6f, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xff, 0x7f, 0xfb, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x4a, 0xff, 0x77,
+   0xfd, 0x3f, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xe8, 0xff, 0xaf, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xdd, 0xff,
+   0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x87, 0xfe, 0xff, 0xff, 0xff,
+   0xaf, 0xaa, 0xff, 0xaf, 0xff, 0xef, 0xfe, 0xff, 0x7f, 0xff, 0x7f, 0xfd,
+   0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed,
+   0xff, 0xff, 0xf7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5,
+   0xff, 0xff, 0xff, 0xff, 0x2f, 0xaa, 0xfe, 0xbd, 0xfa, 0xbf, 0xfb, 0xff,
+   0x6f, 0xfe, 0xff, 0xe8, 0xff, 0xb5, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xad, 0xff, 0xaf, 0xfe, 0xff, 0xff,
+   0xff, 0xdf, 0xf4, 0x4f, 0xff, 0xff, 0xf7, 0xff, 0xeb, 0xd4, 0xff, 0x46,
+   0xfd, 0xff, 0xfa, 0xff, 0xdf, 0xfd, 0x5f, 0xb7, 0xff, 0x57, 0xfe, 0xaf,
+   0xaa, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x7f, 0xfb, 0x7f,
+   0xdb, 0xff, 0xaf, 0xca, 0xff, 0xbf, 0xff, 0xb7, 0xfd, 0xff, 0x67, 0xfd,
+   0xaf, 0x61, 0xff, 0x1d, 0xfd, 0xdf, 0xf6, 0xff, 0xaf, 0xff, 0xff, 0xee,
+   0xff, 0x57, 0xfc, 0xbf, 0xf7, 0xff, 0x5f, 0xff, 0xff, 0x6d, 0xff, 0x6f,
+   0xfb, 0xef, 0x6b, 0xff, 0x57, 0xfa, 0x7f, 0x4f, 0xff, 0x5b, 0xed, 0x7f,
+   0xef, 0xff, 0xe7, 0xf5, 0xdf, 0xce, 0xbe, 0xf5, 0xf6, 0x7f, 0xed, 0xff,
+   0x55, 0xff, 0xaf, 0xfa, 0xff, 0xad, 0xff, 0x7f, 0xed, 0xff, 0x2f, 0xff,
+   0x7f, 0xdb, 0xba, 0xba, 0xed, 0x5b, 0xaf, 0x5f, 0xfd, 0xfd, 0xab, 0xbb,
+   0xbf, 0xf6, 0xbb, 0x57, 0x75, 0xbf, 0xba, 0xeb, 0xaf, 0x9d, 0x7e, 0xdb,
+   0xfe, 0xff, 0xba, 0xff, 0xbf, 0xfa, 0xff, 0xaa, 0xff, 0xb7, 0xfa, 0xef,
+   0xaa, 0xff, 0x3f, 0xff, 0xff, 0x56, 0xff, 0xf5, 0xed, 0xdf, 0xbd, 0xfe,
+   0x5a, 0xf5, 0x6f, 0xaf, 0xfe, 0x6d, 0xeb, 0x6f, 0xed, 0xff, 0x76, 0xdb,
+   0xef, 0xc6, 0xff, 0x56, 0xfb, 0xaf, 0xf5, 0x7f, 0x53, 0xff, 0xaf, 0xf5,
+   0x7f, 0x6b, 0xff, 0x5f, 0xfb, 0xff, 0x47, 0xff, 0x6f, 0xb5, 0x7e, 0xbb,
+   0xfa, 0xb7, 0xd7, 0xbe, 0xfe, 0xf6, 0xaf, 0x7b, 0x7f, 0xf5, 0xb6, 0x5f,
+   0x6b, 0x7f, 0xf5, 0xf6, 0x9f, 0x14, 0xfc, 0xd0, 0xea, 0x2f, 0xa6, 0xfe,
+   0x66, 0xf2, 0x3f, 0x46, 0xff, 0x6a, 0xea, 0x5b, 0x26, 0xff, 0xdf, 0xfd,
+   0x5f, 0x4e, 0xfd, 0xf2, 0xd5, 0x8f, 0xde, 0x7e, 0xd4, 0xf5, 0x2f, 0x57,
+   0xfd, 0xd9, 0xe2, 0x3f, 0x15, 0xfd, 0xe9, 0xe2, 0x6f, 0x42, 0xbf, 0xaa,
+   0xec, 0xb7, 0xa5, 0x7f, 0x59, 0xee, 0x53, 0xab, 0x7f, 0x51, 0xfa, 0x97,
+   0x65, 0xff, 0xbe, 0xf7, 0x6f, 0xd5, 0xbe, 0xfc, 0xf6, 0xab, 0xaf, 0x7f,
+   0x7d, 0xfd, 0xcb, 0xdf, 0x7e, 0xf7, 0xfd, 0x37, 0x7f, 0xff, 0xb6, 0xdd,
+   0x6f, 0x08, 0xfc, 0xa1, 0xec, 0x2f, 0x4d, 0x7f, 0xd3, 0xf8, 0x57, 0xa6,
+   0xfe, 0x73, 0xf5, 0x37, 0xcb, 0xfe, 0xb7, 0xfe, 0x5f, 0x8c, 0xfe, 0xe8,
+   0xea, 0x0f, 0x3d, 0x7d, 0xf4, 0xe5, 0x0f, 0xbd, 0xfe, 0xaa, 0xeb, 0x3f,
+   0x5b, 0xfd, 0xed, 0xf5, 0x8f, 0xbf, 0x7e, 0xff, 0xfb, 0xc5, 0x57, 0x7d,
+   0x7c, 0xd5, 0xc7, 0x1f, 0x5f, 0xdc, 0xf1, 0xc7, 0x1d, 0xbf, 0x40, 0xe0,
+   0x8b, 0xab, 0xfe, 0xfb, 0xeb, 0xff, 0xef, 0xde, 0xbb, 0xfa, 0xff, 0xd7,
+   0xfe, 0x67, 0xfc, 0xef, 0xfe, 0xfe, 0xa7, 0xfc, 0xaf, 0x3e, 0xfe, 0x68,
+   0xd3, 0x4f, 0x1f, 0x7f, 0xf9, 0xf1, 0x57, 0x3b, 0xfd, 0xbc, 0xe5, 0x97,
+   0x5f, 0xfd, 0x14, 0xc5, 0xaf, 0x3b, 0xfc, 0x6a, 0xef, 0xaf, 0xae, 0x7e,
+   0xfd, 0xf7, 0xaf, 0xbe, 0xfe, 0x1f, 0xfd, 0x2f, 0x15, 0xfd, 0x2f, 0xfd,
+   0x8f, 0xbb, 0xfe, 0xfb, 0xed, 0xe7, 0x5f, 0x7f, 0xee, 0xf5, 0xc7, 0x4f,
+   0x3f, 0xfd, 0xf9, 0xe7, 0x1d, 0xff, 0xff, 0xff, 0x8f, 0x56, 0x7f, 0xfb,
+   0xe9, 0xd7, 0xbf, 0x7f, 0x7b, 0xf5, 0xd7, 0x6f, 0xff, 0x57, 0xff, 0x3f,
+   0x9b, 0xff, 0x97, 0xff, 0xaf, 0x3f, 0xfc, 0xaa, 0xeb, 0x47, 0x1b, 0x7d,
+   0xfc, 0xd1, 0x57, 0x1f, 0x7f, 0xf4, 0xd1, 0x8f, 0x5b, 0xff, 0xef, 0xfe,
+   0x9f, 0x35, 0xfa, 0xd6, 0xdb, 0xbf, 0x76, 0xfd, 0xea, 0xed, 0xaf, 0x6e,
+   0xfd, 0x1f, 0xfa, 0x6f, 0xa2, 0xfe, 0x1f, 0xfd, 0x8f, 0xad, 0xfe, 0xfe,
+   0xf6, 0xd7, 0x5f, 0x7f, 0xad, 0xf5, 0xe7, 0x5d, 0x7f, 0xdd, 0xf5, 0xe5,
+   0x1f, 0xff, 0xbb, 0xff, 0xa7, 0xba, 0xfe, 0x7d, 0xf7, 0xcf, 0x5f, 0x7f,
+   0xbf, 0xfa, 0xdf, 0xdf, 0xfe, 0x5b, 0xff, 0x3f, 0x64, 0xff, 0x57, 0xff,
+   0x2f, 0x3f, 0xfd, 0xe9, 0xad, 0x97, 0x16, 0x7f, 0xf8, 0xf1, 0x47, 0x2f,
+   0x7e, 0x74, 0xf1, 0x8f, 0x56, 0xfd, 0x1f, 0xff, 0x0f, 0x2e, 0xfe, 0x69,
+   0xd5, 0x5f, 0x5a, 0xfd, 0xf4, 0xeb, 0x5f, 0xba, 0xfe, 0x57, 0xff, 0xd7,
+   0xff, 0xff, 0x5f, 0xff, 0xcf, 0xaa, 0xbe, 0xb6, 0xf3, 0xc7, 0x5b, 0x7f,
+   0x55, 0xf5, 0xd7, 0x9a, 0x7f, 0xd5, 0xf2, 0xd3, 0x2f, 0xff, 0x97, 0xfe,
+   0xaf, 0x5a, 0xff, 0xf6, 0xea, 0xaf, 0xb7, 0x7e, 0x5b, 0xf5, 0xaf, 0xaf,
+   0xfd, 0xdf, 0xff, 0xbf, 0xf6, 0xff, 0x55, 0xff, 0x5f, 0xc0, 0xfe, 0xe0,
+   0xa4, 0x3f, 0xc2, 0xfe, 0x13, 0xed, 0x9f, 0xa0, 0xff, 0x15, 0xfe, 0x37,
+   0xe0, 0xff, 0xbf, 0xff, 0x5f, 0x41, 0xfd, 0x07, 0xa2, 0x7f, 0x04, 0xfa,
+   0x13, 0xd0, 0x7f, 0x00, 0xfa, 0x02, 0xfe, 0x2b, 0xfd, 0xff, 0x47, 0xfe,
+   0x7f, 0x55, 0xbf, 0xaa, 0xe0, 0x97, 0xe8, 0x7f, 0x4b, 0xfe, 0x37, 0x75,
+   0x7f, 0x43, 0xf5, 0x9f, 0xa4, 0xff, 0xff, 0xff, 0x37, 0xd4, 0xff, 0x55,
+   0xe9, 0x7f, 0x50, 0xfe, 0x42, 0xf5, 0x7f, 0x2a, 0xff, 0xad, 0xff, 0x97,
+   0xfa, 0x7f, 0x95, 0xff, 0x6f, 0xc2, 0xff, 0xe0, 0xa5, 0x3f, 0xa9, 0xff,
+   0x4b, 0xfa, 0x7f, 0xe0, 0xff, 0x2b, 0xfe, 0x3f, 0x64, 0xff, 0x5f, 0xff,
+   0x6f, 0x42, 0xff, 0x07, 0xa2, 0x7f, 0x45, 0xfa, 0x97, 0xd0, 0xff, 0x20,
+   0xfa, 0x05, 0xff, 0x3f, 0xfb, 0xff, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xd7, 0xfe, 0xff, 0xf6, 0xff,
+   0xff, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xbf,
+   0xfb, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0x79, 0xe5, 0xff, 0xdf, 0xff, 0x55, 0xfd, 0xff, 0xf5, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x47,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xfe, 0xff, 0xff, 0x7f, 0xa4, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0x77, 0xff, 0xd5, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xdb, 0xeb, 0xff, 0xfd, 0xff, 0x69, 0xc3, 0xff,
+   0xb7, 0xff, 0xab, 0xfa, 0xff, 0xeb, 0xff, 0xff, 0xf7, 0x7f, 0xfb, 0xff,
+   0xff, 0xff, 0xdf, 0xf6, 0xff, 0xf7, 0xfa, 0x47, 0x5f, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0x5f, 0xd0, 0xff, 0xff, 0xfe, 0x5f, 0x24, 0xc4, 0x5f, 0xff,
+   0xff, 0xd4, 0xea, 0xff, 0xcd, 0xff, 0x6f, 0xfe, 0xdf, 0xf2, 0xff, 0x7f,
+   0xd0, 0xff, 0xf1, 0xff, 0xdb, 0xf6, 0xb7, 0xbf, 0xff, 0xed, 0xf9, 0xd5,
+   0xe2, 0xfe, 0xfb, 0xff, 0xff, 0xeb, 0xff, 0xf2, 0xff, 0xff, 0xeb, 0x7f,
+   0x81, 0xd4, 0x7f, 0xfd, 0xff, 0xd9, 0xca, 0xff, 0xcf, 0xfe, 0xd5, 0xf8,
+   0xff, 0x6b, 0xff, 0xff, 0xf4, 0x7f, 0xd3, 0x7f, 0xff, 0xef, 0x6f, 0xf5,
+   0xfe, 0x55, 0xeb, 0x87, 0xa7, 0xfd, 0xeb, 0xf5, 0xff, 0xf9, 0xff, 0xe9,
+   0xef, 0x2f, 0xb4, 0xff, 0x7e, 0xff, 0xff, 0xfd, 0xbf, 0x06, 0xf1, 0xdb,
+   0xab, 0xff, 0xef, 0xfe, 0xab, 0xd0, 0xfe, 0x5f, 0xdb, 0xdb, 0xfd, 0xff,
+   0x00, 0xb0, 0x05, 0x09, 0xfd, 0xef, 0xf9, 0x3f, 0x1d, 0xfd, 0x73, 0xf5,
+   0xff, 0xeb, 0xff, 0xa9, 0xbf, 0xff, 0xe8, 0xff, 0xd7, 0xfb, 0xbf, 0xfd,
+   0xff, 0x55, 0xa3, 0xbf, 0xaf, 0xff, 0xdb, 0xec, 0x5f, 0xb3, 0xfd, 0xff,
+   0xf6, 0x7f, 0x6b, 0xbf, 0x44, 0xe4, 0x4d, 0x22, 0xfc, 0xaa, 0xd9, 0x3e,
+   0x2b, 0xfd, 0xf7, 0xe1, 0x7f, 0xf9, 0x7f, 0xf5, 0xef, 0x2f, 0xaa, 0xff,
+   0x4d, 0xff, 0x7f, 0xff, 0x7f, 0x05, 0xe5, 0xeb, 0xc6, 0xbe, 0xae, 0xfc,
+   0xb7, 0xa8, 0xfe, 0xbf, 0xfa, 0x6b, 0xfd, 0xfd, 0x28, 0xf1, 0x93, 0x88,
+   0xbc, 0x6d, 0xf5, 0xb7, 0x9e, 0x7e, 0xd3, 0xf5, 0xff, 0xc7, 0xff, 0xab,
+   0xcf, 0xaf, 0xb5, 0xbe, 0xdf, 0xf6, 0x7f, 0xf5, 0x6f, 0xf8, 0xca, 0x0b,
+   0x94, 0xfe, 0xca, 0xa8, 0x8f, 0xd1, 0xfa, 0x6f, 0xd1, 0x87, 0x00, 0xfe,
+   0xf9, 0xe3, 0x3f, 0xeb, 0x7f, 0x89, 0xc0, 0x2f, 0x3b, 0xfd, 0xb3, 0xcd,
+   0xff, 0xf5, 0xff, 0xf5, 0xe5, 0xcd, 0xda, 0xef, 0xb6, 0xff, 0xdf, 0xfe,
+   0x3f, 0xa9, 0xb1, 0xa3, 0xd0, 0xde, 0x4a, 0xf5, 0xab, 0xb2, 0xfd, 0x5f,
+   0xf4, 0x13, 0x51, 0xbd, 0xb4, 0xeb, 0xbf, 0xe6, 0x7f, 0x50, 0xaa, 0x37,
+   0x4f, 0xff, 0x6b, 0xcb, 0xff, 0xc7, 0xff, 0x8f, 0xd7, 0xb3, 0x57, 0xbe,
+   0x8d, 0xaa, 0xff, 0xfd, 0xff, 0xb7, 0xea, 0x7f, 0xb7, 0xbd, 0xd5, 0xac,
+   0x8f, 0xb3, 0xfd, 0xdf, 0xf6, 0xf7, 0xa5, 0xff, 0x79, 0xc3, 0xff, 0xdd,
+   0xff, 0xd7, 0xf9, 0x47, 0xbe, 0xfd, 0x4f, 0xfd, 0xff, 0xeb, 0xff, 0xd5,
+   0xe5, 0xd3, 0x7a, 0xde, 0x2a, 0xdb, 0xbf, 0xfe, 0xbf, 0xaa, 0xb4, 0x5f,
+   0x5e, 0x7f, 0x4b, 0xf5, 0xab, 0x69, 0xff, 0xaf, 0xdd, 0x5b, 0x79, 0x7f,
+   0xfa, 0xf5, 0xbf, 0xea, 0xff, 0xdd, 0xe9, 0x17, 0x5f, 0xff, 0xab, 0xf6,
+   0xff, 0xe7, 0xff, 0xcf, 0xef, 0xd7, 0x67, 0xbe, 0x8b, 0xf6, 0xff, 0xfd,
+   0x7f, 0x7b, 0xed, 0xff, 0x74, 0x6d, 0xcd, 0xac, 0x0f, 0xd3, 0xfa, 0x5f,
+   0xf5, 0xd7, 0xe1, 0xfe, 0xf8, 0xe3, 0xff, 0xfa, 0xff, 0xb5, 0xf9, 0x57,
+   0x7d, 0xfd, 0x8f, 0xfe, 0x5f, 0xaf, 0xff, 0xab, 0xfe, 0x73, 0xd7, 0xfe,
+   0xff, 0xff, 0x3f, 0xfc, 0xff, 0x04, 0xf4, 0xbf, 0xde, 0xff, 0xb7, 0xfc,
+   0xab, 0x59, 0xfd, 0x7f, 0xd6, 0x5b, 0xdf, 0xff, 0xea, 0xe5, 0xff, 0xeb,
+   0xff, 0x6b, 0xd5, 0x95, 0xdf, 0xff, 0x97, 0xfe, 0x7f, 0xed, 0xff, 0xaf,
+   0xfb, 0xd3, 0xa6, 0x7d, 0x4f, 0xfd, 0x7f, 0xf9, 0xff, 0x48, 0xe9, 0xff,
+   0x75, 0xfd, 0xed, 0xf4, 0x2f, 0x61, 0xfb, 0x7f, 0xda, 0xdb, 0xd5, 0xff,
+   0xf8, 0xa7, 0xff, 0xdb, 0xff, 0xdf, 0xf9, 0x3f, 0xba, 0xfc, 0x9f, 0xfd,
+   0x87, 0xb7, 0xff, 0x5f, 0xfe, 0xb7, 0x7f, 0xfd, 0xbb, 0xff, 0x7f, 0xfe,
+   0xff, 0xfb, 0xf7, 0x7f, 0xf1, 0xff, 0xd7, 0xfe, 0xab, 0xb5, 0xff, 0xef,
+   0xf1, 0x8f, 0xfa, 0xff, 0x7a, 0xe9, 0xff, 0xf6, 0xff, 0xd5, 0xf5, 0xf7,
+   0xef, 0xff, 0x42, 0xfe, 0xaf, 0xb6, 0xfe, 0x3f, 0xf6, 0xb7, 0x57, 0xfd,
+   0xaf, 0xff, 0xff, 0xf4, 0xff, 0xaa, 0xea, 0xff, 0xd5, 0xff, 0xdf, 0xe8,
+   0xbf, 0x71, 0xfd, 0x5f, 0xc5, 0x9f, 0x4b, 0xff, 0xe9, 0xe3, 0xff, 0xaf,
+   0xff, 0xb5, 0xe9, 0x5f, 0xad, 0xfc, 0x1f, 0xfa, 0x8f, 0xef, 0xff, 0xbf,
+   0xfe, 0xeb, 0xb6, 0xff, 0xef, 0xfe, 0x7f, 0xfc, 0xff, 0xf6, 0xf7, 0xff,
+   0xf1, 0xff, 0xd5, 0xfe, 0xd7, 0xb5, 0x7f, 0x7f, 0xf9, 0x4b, 0xf5, 0xbf,
+   0xbc, 0xb5, 0xff, 0xf5, 0xff, 0x6f, 0xfd, 0x7f, 0xbb, 0x7f, 0xa3, 0xfe,
+   0x1b, 0x14, 0xfd, 0xbf, 0xfa, 0x0f, 0x2f, 0xfc, 0x9f, 0xfb, 0xff, 0xf7,
+   0xff, 0xa5, 0xfe, 0xff, 0xdf, 0xff, 0xdf, 0xc2, 0xff, 0xf1, 0x7f, 0x41,
+   0xd5, 0x5f, 0x56, 0xfd, 0x68, 0xe3, 0xff, 0x57, 0xff, 0xd5, 0xe9, 0xff,
+   0x16, 0x7d, 0xf4, 0xf1, 0x4b, 0xcd, 0xfe, 0xff, 0xed, 0xaf, 0x9d, 0xfe,
+   0x6f, 0xff, 0xbf, 0xec, 0xff, 0xa6, 0xff, 0xff, 0x6b, 0xff, 0xeb, 0xf3,
+   0x7f, 0xf5, 0xdf, 0x8a, 0xf5, 0x5f, 0xae, 0xff, 0xaa, 0xea, 0xff, 0x6f,
+   0xff, 0xaf, 0xf8, 0xff, 0x5a, 0x5f, 0x51, 0xe9, 0xb3, 0xbb, 0xfc, 0xff,
+   0xcb, 0xff, 0xf8, 0xff, 0x5f, 0xfe, 0xff, 0xab, 0xff, 0x67, 0xfd, 0xff,
+   0xdf, 0xff, 0x5f, 0xaf, 0xff, 0xe5, 0xdf, 0xbb, 0xdf, 0xff, 0xbe, 0xfa,
+   0xfa, 0xeb, 0xff, 0x7f, 0xfd, 0xb5, 0xfb, 0xff, 0xeb, 0x7f, 0xff, 0xcf,
+   0xeb, 0x56, 0xfe, 0xff, 0xe6, 0x7f, 0xd9, 0xff, 0xef, 0xfe, 0xff, 0xf3,
+   0xff, 0x57, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0xdb, 0xff, 0xf9, 0x7f, 0xfd,
+   0xf5, 0xff, 0x7f, 0xfb, 0x7f, 0xfb, 0xff, 0xaf, 0xff, 0xaf, 0xf8, 0xff,
+   0x6f, 0xff, 0xfe, 0xeb, 0xd3, 0x6d, 0xfd, 0xff, 0xd7, 0xff, 0xfa, 0xff,
+   0xaf, 0xfd, 0xff, 0xa7, 0xff, 0xc7, 0xff, 0xff, 0xef, 0xfe, 0xef, 0xbf,
+   0xff, 0xf1, 0xff, 0xd5, 0xdf, 0xdf, 0x7e, 0xff, 0xfa, 0xe7, 0xff, 0xbf,
+   0xfe, 0xed, 0xe9, 0xff, 0xed, 0xdf, 0xfd, 0xcf, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
diff --git a/hacks/images/matrix1.xpm b/hacks/images/matrix1.xpm
new file mode 100644 (file)
index 0000000..703cd03
--- /dev/null
@@ -0,0 +1,395 @@
+/* XPM */
+static char *matrix1_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"320 377 11 1",
+/* colors */
+"  c #81DD81",
+". c #5AD25A",
+"X c #2BA02B",
+"o c #279027",
+"O c #217A21",
+"+ c #1B641B",
+"@ c #165016",
+"# c #0B2A0B",
+"$ c #081E08",
+"% c #030E03",
+"& c #000000",
+/* pixels */
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%&&&&&&&&&&&&%&%&%&%&%&&&&&&&&&&%%%%$$$$$%%%%&&&&&&&&%%$$$$$%%&&&&&&&&&&%&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%&&&&&&&&&&&&&&%%%$$$$$%%%&&&&&&&&%%$$$$$%%&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$%%%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$%%%%&&&&&&&&&%%%%%%%%%%&%&&&&&&&&%%$$#$###$$%%&&&&&&&%%$$###$$%%%&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&&&%%$##@##$%%&&&&&%&%%$#####$%%%&&&&&&&&&&&%%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$#$$%%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%&%$$###$$%%&&&&&&%%%%$$$$$$$$$%%%&&&&&%&$$#@+++++@##%%&&&&%&%$##OO+##$%%%&&&&&%%%$$$$$%%%&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&%%$$$$%%%&&&&&&&&&&%$##..+@@$%%&&&&&&%$@@+..##$%%&&&&&&&&&%%%$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+O+#$%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%$###@@#$$%%&&&&&&%%$$#$#$#$#$$%%%&&&&&%%#@+++OOO@@#$%&&&&%%$##@Ooo@@#$%%%&&&%%%$#####$$%&&&&&&&&&&&%&%%%%%%%&%&&&&&&&&%&%$$####$%%&&&&&&&&%%$$#@..++@$%%&&&&&%%$@+O..@#$$%&&&&&&&&%&$$##@##$$%&&&&&&&&&&&&%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@OOO@$$&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%$$@+.. +@$$%&&&&%%%$#@OO@@@OO@#$%%&&&&%%$#OOoXoXXO+@$%&&%&%$$@Oo...O+@##%%&&&%%$#+OoOO#$$%&&&&&&&&&&%%%$$$$$$%%&&&&&&&&%&%$#OOO@@$%%&&&&&&&%%$#@+..++@$%&&&&&&%%$@++..+@#$%%&&&&&%&%%$#@...@#$%%%&&&&&&&&%%%%$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$@@...@#$&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#+O ..++#$%%&&&&%$#@+Oo+++oO+@#$%&&&&%$$#OoXoXXXO++#$&&&%$##@oo.  oO+@#$%&%%%$##OoooO@$$%%&&&&&&&&%%$$#####$$%%&&&&&&&&%$#@Ooo+@$%%&&&&&&%%$#+OOXo+#$$%%&&&&&&%%$@@XXOO+#$%%&&&&%%$$#@@...+##$$%%&&&&&&&%%$#$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...@#$&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#++. .O+#$%%&&%%%$@@+oo+++oo+@#$$&&%&%$#@oooXXXXo++#$&%%$$#@+oo ..oo+@#$%&&%$$#@oooXo@#$%%&&&&&&%%%$##@@@@@#$$%%&&&&&%%%$#@ooo+@#$%%&&&&&&$$#+OoXo@#$%&%&&&&&&%$$#@oXOO+#$%%&&&&%$$##@+...+@@#$$%&&&&&&%%$##@##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...@#$&",
+"&&&&&&&&&&&&&&&&&&&&&&&&$$#Oo   oO#$%%&&&%$$++O. oOO  O++$%&&&%$$#@ooXoXXXOO+#$&&%$#OooXXXXX .O+@$$&%%$@++ooooOO+#$%%&&&&%&%$#@oo . oO#$%&&&&&&&%$#+O. .++$%%&&&&&&&$$@ooooo@#$%%&&&&&&&&%$#@OoXoo@$$%%&%%%$++O+O. .O+O+@$%&&&&%&%$$@...@$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$#OoooO@$%&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%$@oo. .oo@$%%&&&%$$++O .OOO. O+@$$&&%%$#@@ooXoXXXoO+@$&%$#@OoXXXXXX .O+@$$&%%$@+OoooooO+#$%%&&&&%%$$#@oX  .Xo#$$%&&&&&&%$#++. .O+$$%&&&&&%%$#@ooXoO@$$%&&&&&&&&&%$$@OooXo@#$&&&&%$$++OOO...O+OO+#$&&&&&&%$#@...@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@ooXoo##%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&$##OO . oO##%%&&&%$#+OO..OOO .++@$%&&%$$++oXX.....XXo@#&%$$@XXXOo+++oo++@$%&%$$@+OooooooO@$$%%&&&&%$@+OXX+++oO@$%%&&&&&%$$#oXooO@#$%%&&&&&&&$#@oXooO#$%&&&&&&&&&&&$$#Ooooo@#$%%&%%$#+Oo..   ..OO+#$&&&&&%$$#+...@@$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%%&%%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@..++@#$%&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%$@Oo . OO@$$&&&&%%$++O..OOO. +@@$%&&%$#+OoXX. ...XXX@#&%$#@XXXoOO+OOo++@$%&%%$@+Oooooooo@#$%%&&&%%$@+OXXO++OO#$$%&&&&&&$$@ooOO+@$$%&&&&&&%%$#@...+@#$%%&&&&&&&&&&%$#@+...@#$%%&&%$$+OO.... ..oO+$$&&&%%%$#@+. .+@#$%%%&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@@..O+@$$%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&$$#OO  .oO@$%%&&%%$$++O..O+O..+@#$%&&%$#+OoXX.. ..XXo@#&%$$@XXXOo+O+oO+@@$$&%$$@++ooooooo@#$$%%&&%%#@+OXX+++O+#$%%%&&&&%%$#OoO++#$%&%&&&&&&%$#+...+@$$%&&&&&&&&&&%&$#@@ ..+#$%&&&%$$++o... ...OO+$$&&%%%$$#@+...+@##$$%&&&&&&&&&&&&&&&&&&&&&&%%%$$#$$#$#$#$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%$#@+..+@#$%&&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%$@Oo.  oO##%%&&&%$$@++O++++OO@#$%%&&%$#+Oo  XXX .XXo@#&%$$@ooX..XoXOO+@#$%&&%$$@@oooXooOO+@$%%&&%%$@+O..+++@@#$$%%&&&&%%$#@+###$$%&&&&&&&%%$#+...@@$%%&&&&&&&&&&&&%$@@...@@$%%&&%%$#@+OO . OO+@#$%&&%$$#@@++. .++@##$$&&&&&&&&&&&&&&&&&&&&&&%$$###@@#@#@#@##$$&&&&&&&&&&&&&&&&&&&&&&&&&%%$#+OOXo@@$$%&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&$$#Oo. .oO#$%&&&&&%$@@@++#@@O+#$$%&&%&$#+Oo..XXX. oXo@$&%%$#Ooo..oXoOO+@##$&&%%$#@oooXoooO+@$%%&%&$$@++..+++@@@#$$%&&&&&%%$@@#$$%%&&&&&&&&&$$#@. .+@$$&&&&&&&&&&&&%%##+. .+#$%&&&&$$#@+OO. .OO+@#$%&%$$#@@+++. .++++@#$&&&&&&&&&&&&&&&&&&&&&%$$#@@@+@+@+@+@@@#$&&&&&&&&&&&&&&&&&&&&&&&&&%%##OOOXo@#$%&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...+@#$%%&&&&%%$$$#$#$$#$$$%%&&%%$#@++..OoO..++@#$&%%$#@@+ooXXX..oo+#$&&%$$#@ooXXXoo+@#$%%&%%%$@++ .XXX+++++$$&&&&&&%%%$$%%%&&&&&&&&&&%##+...@#$$&&&&&&&&&&&&%%$@@...+##%%&&&%$#@+. OOO..++@$%&%$#@  .   .  . . @#&&&&&&&&&&&&&&&&&&&&&%$#@  . .  . .  .@#&&&&&&&&&&&&&&&&&&&&&&&&&%$#@XXXOO#$$%%&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$##+. .+@#$%&&&&&&%%$$$$$$$$$%%&&&&&%$#@+O..OOO .++@#$&&%$$#@+OOXXX..ooO#$&%&$$#@oXX.Xoo+@#$%%&&%$#@+O  XXXO+OO+$$&&&&&%&%%%%%&&%&&&&&&&&%%##@...+##%%&&&&&&&&&&&%$$#+...+#$%&&&%%$#@+..OOO .+@@$%&%$@@.  . .  .   .+#&&&&&&&&&%%%%%%&&&&&&%$@@.  .  .   .  +#&&&&&&&&&&%&%&%&&&&&&&&&%$#@OXXX@@$%%%&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%$@@...@#$%%&&&&&&&&%&&%&%&%%%&&%&&%$$#@++. OOO..++@#$&&%$$#@+OOXXX..ooo@#&%&$$#@ooXXXXo+@@#$&&&%$#@+O..X.XOOoO+#$&&&&&&&&&&&%&&&&&&&&&&&%%$@@. .+##$%&&&&&&&&&&&%$#@+...+#$$&&&&%$#@+..OO+..++#$%&%$#@ .   . . ..  @#&&&&&&&%%%$$$$%%%&&&&%$#@ .  .  ..  . @#&&&&&&&&&%%%%%%&&&&&&&%&$$#+OXXX@#$%&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$$#@...+#$%&&&&&&&&&&&%&%&%&&&&&&&&%$#@.   . .   XXo#$&%%$#+Oo+O+O+ooXXX@#&&%$@+OOO.XXXXooO#$%&%%$#OOoXX... .ooo#$&&&&&&&&%&&&&&&&&&&&&&&%%$#@...+@$$%%&&&&&&&&&%&$##+ ..@#$%%&&%%$#@@OO@@+OO@@#$%&%$$#@+@++.. +++@@#$&&&&&&&%%$$#$$$%%%&&&&$$#@@@@+@@++@+@@#$&&&&&&&%%%%$$$%%%&&&&&&%$#@oXoOO@#$%%&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%$#@...@#$%%&&&&&&&&&&&&&&&&&&&&&&&%$#+ . .  . . XXo#$&%%$#OOOOO+O+OoXXX##&%%%@@+OOXXXXXooO##%&%$#@Ooooo...  Xoo##&&&&&&&&&&&&&&&&&&&&&&&%%$#@oXXOO#$%%&&&&&&&&&%%$#OOXXo+#$%%&&&%%#@@++###++##$%%&&%$$##@++ ..++@@##$&&&&&%%%$#+OO@#$%&&&&&%$$##@#@@#@#####$$&&&&&&&%%$$#$$$%%&&&&&&%$#@oXOOO#$%%&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%%##@+@#$$%&&&&&&&&&&&&&&&&&&&&&&&&%$##OOoXXXXXoo+@##$&%$#@oXX..oXX..Xoo@$&&%%$#@@+XXXOOooO@$%&%%#@XXXooooo..O++#$&&&&&&&&&&&&&&&&&&&&&&&&%$#@ooXoO##%%&&&&&&&&&&$$#OOXXo@#$%&&&&&%$$$$$##$#$$$$%&&&%%$$##@+. .+@##$%%&&&&&&%$##OOO+@$$&%&&&%%$$$$$$#$$###$$$%&&&&&&%%$@@OO+#$%%&&&%%$$#@oXOO+#$%&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@@@#$$&&&&&&&&&&&&&&&&&&&&&&&&&&%$#OOOXXXoXoo+@#$%&%$##XXX. oXX..ooO#$&&%%%$##@ooX+Oooo##%&%$#@XXXoOOOo. O++@$&&&&&&&&&&&&&&&&&&&&&&&%%%#@OoOoo@#$%%&&&&&&&%%$#@oXOo+@$%%&&&&&&%%$$$%%%$$%%%&&&&&&%%$#@@...+@#$%%&&&&&&%$$#@ooo+@$$%&&&&&&%%$%$%$%$%%%%%&%&&&&&&%$$@+OOO#$$%&&&%%$@@O..@@#$%%%&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@@@#$%%&&&&&&&&&&&&&&&&&&&&&&&&%$$#+OO.XoXXoo@#$%%&&%$#OOooo. .oo+@#$$&&&&%$$@@oXo+OooO@$%&%$$@XXXOoOoO .OO+@$&&&&&&&&&&&&&&&&&&&&&&&&&%$#+OoXX@#$%%&&&&&%&%%$#@oXoO+#$%%&&&&&%&%&%%%%&%%%&&&&&&&&&%$$@@ ..@#$%%&&&&&&&%$#++...O+$$%&&&&&&&&&%&%&%&&&%%&&&&&&&&&%$#@+ooO@#%%&&&%$#@++..@@$$%&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%%##...##%%&&&&&&&&&&&&&&&&&&&&&&&&&%$#+OOXXXXXOO@#$%%&%%$#++OOo.  oO@##$%&&&&&%$##XXXXXooO##%&%$$@OXo .  .XX. .@#&&&&&&&&&&&&&&&&&&&&&&&&%%$#+OOXo+@#%%%&&&&&&%$#@+oXOO+#$%%&&&&&&&&&&&&%&&&%&&%&&&&&&&%$#@...@#$%%&&&&&&%%$#+O  .++$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#OO.. ##$%%&&%$$OOooo@#$%%&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%$#...#$%%&&&&&&&&&&&&&&&&&&&&&&&&%%$#@OOXXXXXOO@$$%&&&&%$$$$#@...+#$%%&%&&&&&%%$#ooXooooO#$%&&%$#Ooo  .  Xo.  @#&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+..++@$%&&&&&&%%$#+O..+@#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$@...@#$%&&&&&&&%%$#oooOO@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%&&$$+O ..@$%%&&&%$#Ooooo@#$%&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&%$#@OOXXXoXoO#$%%&&%%%&%$$#@ooo@#$%%&&&&&&&%%$##@@@@###$%%&%%$$#@@@@+@@@+@@##$&&&&&&&&&&&&&&&&&&&&&&&&&%%$$#@..++@$%%&&&&&%%$@++..@@$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@##$%%&%&&&&&%%##oooOO##$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@@@##$%%&&&%$#OoooO#$%%&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&%&$$@+OXXXooOO#$%&&&&&&%&%$##oOO@#$%&&&&&&&&&%%$$#$###$$%%%&&&%$$$#####@#####$$&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@..+@@$%&&&&&&&%$@@+..@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$#$$%%&&&&&&&&%%$#ooO++#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$###$$%&&&&$$#+OO+@#$%&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$@@+oXoooO+#$%%&&&&&&&&%$#OO+#$%%%&&&&&&&&&%%%$$$%$%$%&&&&&&%$$$$#$$$#$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$##@##$%%%&&&&&&%%$#####$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$%$%&&&&&&&&&&$$#@+@##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$%%%&&&&&%$#@++@#$$%%&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$###@@@###$%%&&&&&&&&%%%$##$$$&&&&&&&&&&&&&&%%&%%%%&&&&&&&&&&%%%%%$%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$$$%%%&&&&&&&&%%$$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%&&%&&&&&&&&&%$$@@#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&%%%%&&&&&&%%#@@+##$%&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$#$##$$$$%&&&&&&&&&&&%%$$$%%%&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&%%%&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$%%%&&&&&&&&&%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$#$$%%&&&&&&&&&&",
+"&&&&&%%%%%%%%%%&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&%%%%%%$%%%%&&&&&&&&%&%%%%$%%%%%%&&&&&&&&&&&%%%%%%%%%&&&&&&&%%%%%$$%%%%%%&&&&&&&&&&%%%%%%%%%%%&&&&%%%%%$%$%$%$%%%&&&&&&&&&%%%%%%%%%%&&&&&&&&&%%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%&%&&&&&&&&&",
+"&&&%&%%$$#$$$$%%%%&&&&&%%%%$$$$$%%%%&&&&&&&%%%$$$$#$$$$%%%&&&&&&%%$$$$$#$$%%%&&&&&&&&&&%&%$$$$$%%%&&&&%%%$$$#$#$#$$$%%%&&&&&&&&&%$$$$#$$%%%&%%%$$$$#$#$#$$$$%%%&&&&&%%%$$$$$$$%%%%&&&&&&%&%$$$$$$$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&%&&&&",
+"&&&%%%$$##@##$$$%%&&&&%%$$$#####$$&%&&&&&&&%%$$##@@###$$%%%&&%%%%$$#@@@###$$$%%&&&&&&&&%%$$###$$%%&&%&%$$##@@#@#@##$$%&&&&&&%%%$$$###@##$$%&%%$##@#@@@#@@###$%%&&&%%%$$##@@###$$%%%&&&&&%%$$##@##$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$$%%&&&&",
+"&&%%$$#@+oOo+@#$$%%&&%%$$#@++OOO#$%%&&&&&%%$$##O+oooO+##$$%&&&&$$##+OOooOO##$$%&&&&&&%%$$#+++++#$%%&&%$#@@OOoOooOO++$$%&&&&&%%$$#@@ooOO+@$%&%$$++OooOoOooO++#$%&&%%%$##@+OOo+@##$%%&&&%%$$#@OOOO+@#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&%&%$$###@###$$%%%&&",
+"&&%$$#@++ooo++@#$$%&&%$##@@OOooO@#%%%&&&&%%$#@@OoooooO@@#$%&%%%$#@@OOoooOO@@#$$&&&&&&&%$#@++OO+@$$%&%%$#@+oooooooOO+#$%&&&&&%$##@++ooooO@#$&%$#OOOoooooooOO+#$%&&%%$#@@+Oooo++@@#$$&&&&%$#@@oooOO+@##$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&%&&&&&&&&&&&&&&&&&&&&&&%%&%%%%%&&&&&&&&&&&&%%$$#@@+@+@@##$%%&&",
+"%%$$@+O..XXX..++@$%&%$$#oXX. ...@#$%&&&&%%$#+Oo..XXX..oOO#$&&%$#OOo..XXX..oO+#$&&&&&&%$#@+ . ..@#$%&%%$@+O..XXXXXoOO#$%&&&%%$$@+.....XXo@#$&$$@oXXXXXXXXXXXX@#$&%%$#+Oo..XXX..oO+#$&&%%$#@..oXXXXXXX#$%&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&%%%%$%$%%%&&&&&&&&&&&&&&&&&&&&&%&%%$%$%%%&%&&&&&&&&&%%#@+.......+@#$%%&",
+"&%$#++O..XXX..OO+#$&&%$@oXX .  .+#$%%&&&%%$#oOo..XXX..ooO#$&&%$#Ooo. XXX .ooO#$&&&&&&%$#++  ...@#$%&%$#++O. XXXXXoo+#$%&&&%%$#++  ...Xoo@#$&$$@oXXXXXXXXXXXX##$&%%$@Ooo..XXX..ooO#$&&%%$#@..XXXXXXXX@#$&&&&&&&&%&%%%%&%&&&&&&&&&&&&&&%&%%%%&&&&&&&&&&%&%%%$$$###$$%&&&&%%%%%%%%%%%%%%&&&%%$$###$$$%%%&&&&&&&&%$#@+.  . ..++@$$%&",
+"%$$#+OO..XXX..OO+#$&%$$#ooX  . .@@$%&&&&%$$@Ooo .XXX. ooo@$&%%$#Ooo..XXX..ooo@#&&&%&%$$#+O.  ..+#$%&%$$+OO..XXXXXoOO#$%&&&%$#@+O.  ..XXo@#%&%$#oXXXXXXXX.XXX@$$&%$$@Ooo..XXX..ooO@#&%%$#@+..XXXXXXXX@#$&&&&&&%%%$$%$%%&&&&&&&&&&&&%&%%$$%$%%%&&&&&&&%&%%$$##@@#@#$$&&&&%%%$%$%$$%$%%%%&&%$###@@@##$$%%%%&&&&%$$#++.. . ..+++#$%&",
+"%$#@XXXoO+++oOXXX@#&&%$##@+++...@@$$%&&&&$$#XXXOO+++OoXXX@#&%%$#+oo+++++ooXXX##&&&&&%$#@oXooo..@#$$&%$#+OOXXO+++O++##$%&%&%$#@..ooo+++@##$%&%$##@@@@+++ooXoo@#%&%$#@XXXoO++OooXXX@$&%%$@+OXX++++O...+@$&&&&&&%%$$##$$$%%&&&&&&&&&&%&%$$##$$%%%&&&&&&%%$$##@+O...+@$&&%%%$$$#$#$#$#$$$$%&%$#...oo@@##$$%%&%&&&$$@+OXX+++XXXXo@$$&",
+"&$#@XXXOO+@+OoXXX@#&&%%$##@@+. .+#$%&&&&&$$#ooX++@@+OoXXX@#&&%$$++O++@++OoXXX@#&&&%%%$#@oXXoX..+#$%&%$#@OoXX+O+O++@@#$%&&%$#@+..ooo+++@@$$%&%%$$####@@+ooXoo#$$&%$$@XXXoo+++OoXXX@#&%$$++OXX+++++...+@#&&&&&%%$##@@##$%%&&&&&&&&&&&$$###@@#$%%&&%&%%$$$#@@+OO...++$&%&$$#@#@@@@@@@@##$%&%$#...Xo++@@#$$%%&&&%%#@+OXX+++oXXXX@#$&",
+"%$#@XXXOO@@@+OXXX@#&&&%%$$#@+...+##%%&&&&%$$#@#@@@@+ooXXX@#&&%%$###@@@++..Xoo@#&&&&%$#@+..OOO..+#$%&%%#++O. . ...oO+#$%&%%$@+O..ooooo+@@$$%&%&%%$$$##@+XXOO+#$$&%$#@oXooo+++ooXoo@#&%$$++OXX++@++...+@$&&&&&%$$++...##%%%&&&&&&&&%%$$+O...##$%&&%&%$$#++oXXXXO++@$$&%%$#OOoOOoooOOoOO#$&%$$#@@oo...O+##$$%%&%%$@@+Oo+++OOXXX@#$&",
+"%$#@XXXO+@@@+OXXX@#&&&&&%$#@@ ..+#$$&&&&%%%$$$####@@oXXXX@#&&&%%$$##@@++..Xoo@$&&&%$$#++..OOO..@@$$&%$#@Oo.. .  .oOO#$%&&$#@+O..oooXo++@#$%&&%%%%%%$#@@XXOO+#$%&%%##ooXoX+O+XoXoo@$&%$$+OoXX++@++...+@#&&&&&%$#+O...@#$%&&&&&&&&&&%$#+O...@$$%%&%%$$##+OXXXXXO++#$%&%$$#Ooooooooooooo#$&&$$#@+oo  .oO@@#$$%&%%$#@++O+@+OoXXX@#$&",
+"%$#+XXXo+##@+OXXX@#&&&&%%%$@+...@@$%%&&&&%%%$$$$#@@+ooXXo#$&&%%%%$$#@+++..Xoo##&&&%$#@++..OOO..+##%&%%$@+O... ...ooO@#$&%%#++O..oooooO++##%&&&&&%%%$$@+XXO+@$$&&%%$@ooXooO++ooXoo##&%$#@+OXX+++++...+@#&&&&&%$#+O...@#$%&&&&&&&&&&%$#+O...@#$&%&%$$@@@OOXXXXX+@@$$%&%$#@ooXoXoXXoXooo@#&&%%$##oo.. oO+@@##$&%%$#@@+++@+OOXXX@#%&",
+"%$#+XXXO+@#@+OXXX+#&&&&&&$$#@. .+#$$&&&&&&&%%%$##+OO..OO+#$&&&&&%$$++.   .OO+@$&&%%$#OooooOOO..+@#$&%%$@@+oXO+OoX...@#$&%$$+OO.....XX...@#$&&&&&&&%$#@+..+@#$%%&&$##++O . .  .OO+@$&&$$++o..+++oo . +@$&&&&%%$#+OoXo@$$%%&&&&&&&&%&$#+OoXo@#$%&&$$#ooX..ooo+@##$$%&&%$#+oXXXXXXXXXXXo@#&&&%%$##@++OXX...+@$&&&%$$##@+OO..XoO@$$&",
+"%$#@XXXO+@#@+OXXX@#&&&&&&%$@@...+#$$&&&&&&&&%%$#@+OO..++@#$&&&&%%$$++  ...O++@#&%%$#@OooXoO+O..+@#$&%%$##+oo+++oo...@#$&%$#+OO. ...XX...@#$&&&&&%%$$@@+..@@$$%&&%%#@+OO.. ....O++@$&&%$@+O..++Ooo   +@#&&&&&%%$@+ooO##%&%&&&&&&&&%%%$@+ooO#$%%&&$#@oXX. ooO@@#$$%%&&%$#@XXXXXXXXXXXXX@#&&&%%%$#@+++XX...O+#&&&%%$$@@OOO..ooO#$%&",
+"%$#+XXXO+##@+oXXX+#&&&&&%$$#+. .@@$%%&&&&&&%%$#++ . OO+#$$%&&&%&%$$#@++OoXXXo@#&&%$#@. .XXXXo .OO+#&&%%$###@#@@++...+@#&%$$+OO..OOOOO...+@$&&&&&&%$#+OoXX@#$%%&&%$$@XXXoXOOOXXXXX@#&%%$#@@XX . XX...+@$&&&&&%%$$####$$%%&&&&&&&&&&&%$$#####$%&&&$#@XXX..oOO@##$%%&&&%$#+OooooXoXooXoo@#&&&&%%$$#@+OXX ..O+#&&&&%%$#@...oO+@#$$%&",
+"%$#@XXXOO@#@+OXXX@#&&&&&&$$@@...+#$$%&&&&&&%$$#++. .OO##$%%&&&%%$$$##@++oXXXX@#&&%$#@...XXoXX..oO+#&&%%$$#####@@+...+@#&%$#++o. ++O++...+@#&&&&&&%$#+OOXo@#$%%&&%$#@XXXXoO+OoXXXX@#&%&%$#@oX  .XX...+@#&&&&&%%%$$##$$%&&&&&&&&&&&&%&%$$#$$$%%%&&$#@XXX..oOO+@#$%%&%&%$@@oooXoXoXooXoo@#&&&&%%$##@++XX. .O+#&&&&%%$#@. .O+@##$%%&",
+"%$#+XXXO+@@@+oXXX@#&&&&&%%##+...+@$%%%&&&&%%$#@OO. .O+@$$%%&&%%$$$###@@+oXXXX@#&%%$@@. .XXoXo .oOO#&%%$$#$##$#@@+...+@$&%$$+OO..O++++...+@$&&&&&%%$@OoOXo@#$%&&&%$#@XXXXoO++oXXXX@#&&%%$#@oo.  XX...+@$&&&&&&&%%$$$$%%%&&&&&&&&&&&&%%%$$$$%%&&&&$#@oXX..oOO@@#$$%%&&%$#+ooooXoXXXoXXo@#&&&%%$$#@@++XX...O+$&&&&&$$#@...O+#$$%&&&",
+"%$#@XXXo+@@@+OXXX+#&&&%%%$#@+. .+@#$%%&&%%%$@@+..ooo+@#$$%&&&%$$+++##@@+OoXXX@#&%%$@+oXXXXXXX .ooO@&%$$@++####@++ . +@#&%$#@OO..+++++. .+@#&&&&&%$$@OoXoo##%%%&&%$#@XXXoO+++OoXXX@#&&%%%$#@++OOOO...+@$&&&&&&%%%$$$$%%%&&&&&&&&&&&&%%%$$$$$%&&&&%$#@@+OO...XX+@#$$%&%$#@oXXXXXXXXXXoX@#&%%%$##OO. .Xo++@@#$&&&&&%$#@ooo+@#$%%&&&",
+"%$#@XXXOO+@+OOXXX@#&&%&%$$#@+...+@#$$%%&&%$#@++ .ooO+@#$$%%&%%$#++O@@@@+OoXXX@#&&%$#@ooXXX.XX. ooO@&%$#+O++@@@@+O...+@$&&$$++O .+++++...+@$&&&&&%$#@ooooO@$%%&&&%$#@XXXoO+++OoXXX@#&&&%$$#@+++OOO...@#$&&&&&%&$$$$##$%%%&&&&&&&&&&&%$$$##$$%%%&&%%$##@+O...XX+@@#$%&%$#@oXoXXXoXoXXoo@#&&%$##@Oo.. oo+@#$$$&&&&&%$#@ooo@#$%&&&&&",
+"%$#@XXXoO+++OOXXX##&&%%$$#@++ . ++@#$$%&%%$#++O. ooo++@##$%&%$##OOO+@+@+OoXXX@#&&%$#@ooXXXXX...XoO@&%$#+OO++@+++O. .+@$&%%$@+O..++++O...+@$&&&&&%$#@oXooO#$%&&&&%$#@XXXoOO++ooXXX@#&&&%$##@++OOOO...@#$&&&&&%%$#@@###$%%&&&&&&&&&%%%$##@@##$%%&&&%%$$#++...XXO+@@#$&%$#@OooooooXooooo@#&%$$@@+Oo. .oo##$$%%&&&&&%$#@ooo@#$%%&&&&",
+"&%$#+OO..ooo..OO+#$&&%$$++Ooo ..ooO++$$&%$$@.....XooooO+@$$&%$#@...XXooo..Xoo@$&&&%$##@@OOXXo .ooO@&%$#Ooo..ooo..XXX@#$&&%$##+. XXXXX ..+@$&&&&&%$#@...+@#$%%&&&%$$@ooX..ooo..Xoo@$&&%%$#@ooooo..Xoo@#$&&&&&&$$++...#$%%%&&&&&&&&&%$#+O...#$%%&&&&%%$$#@@@+oo...+@$&%%$##@@@@@@@@@@@#$$&%$#...XX+++@##$$%%&&&&&%%$$@ooO@#$%&&&&&",
+"%%$$++O..oXo..O++#$&&%$#+OOoo.  oooO+#$&%$#@... .XXoooOO+#$&%$#@...XXooX..ooO#$&&&%%$##@+OoXX..oOO#&%$#Ooo..ooo .XXX##$&%%%$#@..X.XXX...@#$&&&&&%$#@...@##%%&&&&&$$#Ooo..Xoo..ooO#$&%%$#@@oooXo..ooO#$%&&&&%%$#+O...@#$%&&&&&&&&%%$##OO...@$$%&&&&%&%$$$#@@Oo...+@$&&%%$$##########$$$%&%$#...XX+@@##$%%&&&&&&&&%$$@OoO@$$%%&&&&",
+"&%%$##@OOXXXoO@@$$%&%%$#OOoXXXXXXXoOO#$&%$#@oXXXXXXXXXooO#$&%%##+O+XXXXXXo+@#$$&&&&%%$##+OoXXXXooO#&%%$#@+ooXXXoX+@@#$%&&&%$##++oXoXXOO+@#$&&&&&%$#@ooo@#$%&&&&&&%$##@+ooXXXXo+@#$$&&%$@@+XXXXXOO+@#$$%&&&&&%$$+OXXo@#$%%&&&&&&&&%$#@..oOO@$%%&&&&&&&&%$$$##@@@@##$&&&%%%%$$$$$$$$$$$%%&%$##@@@@##$$$%%&&&&&&&&&%%##Ooo#$$&&&&&&",
+"&%&%$##+OoXoOO@#$$%&&%$#OOooXXoXXooOO$$&%$#+ooXoXXXXXooO+#$&%%$#@++XoXoXoo@##$%&&&&%&%$#++XoXoXooO#&&%$$#@ooXXXoo@@$$$&&&%&%$#@+oooXo++@#$%&&&&&%%$#ooO@$$%%&&&&&&%$##@ooXXooo@##$%&&%$#@+ooXoXO+###$%%&&&&&%$$++ooo@$$&&&&&&&&&%%$#@..oO+##%%&&&&&&&%&%%$$$$###$$%&&&&%%%&%%%%%%%&%%&%&%%$#@###$$$%%&%&&&&&&&&&%%$#OoO#$$&&&&&&",
+"&&%%$$#@+ooo++#$%%&&&%$$+OOoooXooooO+#$&%$##ooooooooooOO+$$&&&$$@@+oooooOO##$%&&&&&&%%%$@+oooooOO+#&&%%$##OoooooO##$$&%&&&&%%$#@Ooooo+@@$%%&&&&&&$$#+OO#$%%&&&&&&%&%$##OoooooO##$%%&&%%#@@ooooo++#$%%%&&&&&&&$$@+ooO#$%%%&&&&&&&%$$@@..OO+#$%&&&&&&&&&&&&%%$$$$%$%%&&&&&&&%&&&&&&&&&&&&&&%%$#$$$$%%&&&&&&&&&&&&&&$$#+O+#$%%&&&&&",
+"&&&&%%$$##@###$%%&&&&&%$##@@@@@@@@###$%&%%$##@@@@@@@@@@##$%&&&%%$###@@@@@#$$%%&&&&&&&%%$$##@@@@###$&&&%%$###@@#@#$$%%&&&&&&%%%$$##@####$%%%&&&&&&%$$#$#$$%&&&&&&&&&&%$###@@@##$$%%&&&%%$$##@@###$$$%&%&&&&&&&%$$####$$%&&&&&&&&&%$#++oo@##$%%%&&&&&&&&&&&&&&%&%%&&%&&&&&&&&&%&&&&%&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&%%$$#$$%%&%&&&&",
+"&&&&&%%$$$#$$$%%&&&&&%%%$$#$#####$#$$%%&&%%$$$########$$$$%&&%&%%$$$####$$$%%&&&&&&&&&%%$$#$####$$%&&&&&%$$$$##$$$%%&&&&&&&&&%%$$$##$$$%%%&&&&&&&&%%$$$%%&&&&&&&&&&&%%%$#$#$#$$%%&&&&&&%$$#$###$$%%&&&&&&&&&%&%$$$$$$%%&&&&&&&&&%%#@@OO##$%%&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%&%&&&&&&&&&&&&&&&&&%$$$$$%&&&&&&&",
+"&&&&&%&%%$$%%%%&%&&&&&%%%%$$$%$$$$%%%%&&&&%%$$$$$$$$$$$%%&&&&&&%&%%$%$%$$%%&%&&&&&&&&&&&%%$%$%$%%%%&&&&&&%%$$%$%%%&&&&&&&&&&&%%%$%%$%%%&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&%%%%$$$%%%&&%&&&&%&%%%$$%%%%%&&&&&&&&&&&&&%%$$%%&%&&&&&&&&&%%$$$##$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%&&&&&&&&",
+"&&&&&&%%%%%%%%&&&&&&&&&&%&%%&&&%&&&&&&&&&%&%&%%%%%%&%&&&&&&&&&&&&&%%&%%&%&%&%&&&&%&%%%%&%%&&%&&%&&&&&&%&%%%%%%%%%%%&%&&&&%&%%%%%%%%&%%&%&&&&&&&&&&&&%&%&%&&%&&&&&&&&%&%%%&&%&%%%&&%&&&&%&%&%%%%%%&%&&&&&&&&&%&%%%%%%%%%&&&&&&%&%%&%%&%&%&%&%&%&&&&&&%&%%%&%&%&&%&&&&&&%&%&&&&&&&&%&%&&%&&&&%&%&%&&&%%&&%&&&&&&&&&&%&%&%%&&&&&&&&",
+"&&%&%%%%$$$%$%%%&&&&&&%&%%%%%$%%%%&&&&&&&&%%$%%%%%%%%%%%&&&&&&&&&%&%%%%%%%%%%%&&&%%%%%%$%%%%%&%&&&&&&&%%%%%%%$%%%%%%&%&&&&%%%%%$%%%$$%%%%%%&&&&&&%%%%%%$%%%%%%&&&%%%%$%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%%&%&%%%$%%%%%%%%$%%&%&%&&%%%%%%$%%%%%&&&&&&&%%%%%%&&%&%%%%%%%&&&%%%%%%%%&%%%%%%%%&&&&&&%&%%%%%%%%&&&&&",
+"&&%&%%$$####$$%%%&&&&&%%%$$$$$$$%%%&&&&&%%%$$$#$#$#$$$%%%&&&&&&&%%%$$$#$$$$$%%%&%$$$$#$$#$#$$%%&%&&&%%%$$$#$#$#$#$$$%%%&%%%$$$$#$#$$#$$$$%%&&&&%&%%$$$$$$$$$%%%&&%%$$$$$$$$$$$$#$$%&%&%%$$#$#$#$#$$%%%%&&&&%%%$$$#$#$#$$$%%&%%%$$$$$$$$$$$$$$%%&&%%%$$$#$$$$$%%&&&&&%%%$$$$$%%%%%%$$$$%&%%%$$$$%%%%%$$$$$%%&&&&%&%%$$$$$$%%%&&&&",
+"&&&%$###@@@@@#$%%%&&&&%%$$##@###$$%&&&&&%%$##@#@@@###$$%%%%&&&%%%$$####@####$$%&%$##@#@@#@##$$$%%&&&%%$##@#@#@@@#@##$%%&%%$###@#@@@@#@@##$$&&&%%%$$###@#@###$$%&%$$###@###$#######$&%%$$####@@#@###$$%%&&&&&%$$##@#@@#@##$$&&$$###@###$######$%&&%%$##@#@@##$$%%&&&&%$$$###$$%%%$$###$$&%%$$###$$$$$#####$$&&&%%%$$$#####$$%%%&&",
+"&%%%##+oo...++#$%%&&%&%$@@+OOOOO#$$%&&&&%$$+OOOOOoOOO@##$%&&&&%%$$@@OOOoO+++@@$&$@@OOOOoOOOO+#$$%%&&%$#+OOoOoOOoOOOO#$%&%$#+OOoOOOOoOOOO+@$&&&%%$$@@OOoOO+++@@$&%$@+OOOOO@@@OOoOO+@&%%$++OOoOoOoO+++$%%&&&%%%$++OOOOoOOO+@$&%$@+OOOOO@@@OOOO+#$&&%$#+OOOOoOO@#$%%&&&%$@+OOO##$$$##OOO+@&%$#+O++@#$#@+OOO@@$&&&%%$#@+OOO++#$$%%%&",
+"&&$$#@+oX ..OO#$$%&&&%$#@+OooooO@#$%%&&&%##OooooooooO+@#$$%&%%$$##++oooooOO+++$&$++ooooooooOO@##$$%&$$#OOoooooooooOO@$$&%$#Ooooooooooooo++#&%%$$##++oooooOO++@#&$$@+OoooO+@+OoooO++&%$#+OOoooooooO++#$%&&&&%$#+OoooooooO+@$&$$@+ooooO+++OoooO#$&%%$#OooooooO+@$%%&&&$$++OOo@@#$#@+OoO+@&$##OOo++@##++oOo++$&%%$$##++OooOO@##$$%&",
+"%%$#@++XX.. Oo@#$%%&&%$$++Oooooo@##%%%&&$$@OoooXooooo+++#$$&%$$#@@OOoooooOOOO+#&#++oooXoooooO+@@#$%&$#@OooooXooXoooo@#$&$#@OoooXoXooXoooO+#&%$$#@@O+oooooOOOO+#&$#+Oooooo+++ooooo++&%$#+OOooooooooO+#$%&&&%%$#+OooooooooO+#&$#++ooooo+++ooooO@#&%$$#Oooooooo+@$$%&&&$#+Oooo+@@##@+oooO+&$#@oooOO@@@OOooo++#&%$$#@@+OooooO+@@#$$&",
+"%%$#OooXooOO..+@#$%&&%$#OOo.. . O+#$%&&&$#@XXX..XXXXX...@#$&%$#OOo..XXXXX...oo@&#+O...XXXXXXX...@#$&$#@XXX .XXXXX ..+@$&$#@XXX..XXXXX...Xo@&%$#OOo..XXXXX ..oo@&$#+O...XX++OXX...O+&%$#+OoXX . XXoo+#$%&&&&%$#OoXXX. XXXO+#&$#+O.. XXOOO  XXo@#&%$#@ooX .XXo+@$%%%&&$#+O. .oo@@+Oo . O+&$@@.....++@Oo ..o+#&%$#OOo..XXXXX...@#$&",
+"%$##OooXooOO..+@#$%&&%%$OOo.. . oO@$$%&&$#@XXX .XXXXX...@#$&$##ooo..XoXXX. .Xo@&#+o. .XXXXXXX...@@$&$#@XXX..XXXXX. .+@$&%#@XXX .XXXXX...Xo@&$##ooo..XoXXX.. Xo@&$#+O. .XXO++XX . O+&%%#+OooX. .XooO+$$%&&&%%$#OOoXX..XXXO+$&$#+O...XXOOO. XXo@#&&$$@ooX. Xoo+@$%%&&&$#Oo  .oo@+@oo . OO&$@+.. ..+++oo. .O+#&$$@Ooo..XoXXX...@##&",
+"&$#@XXXOoOoo..O++$%&&%$$#@+XXXXXXo@#$%&&$$@+ooXXOOOOO...+@$&$#@...OO++@++oooXo@&$@+XXXoO+++++...O+#&%##+ooXX+++++...+@$&$##OOoXX+++++ooooo#&$#@...oO++@++oooXo@&%#@+XXXoO+++ooXXX+@&%%$##@++...++@##$%&&&&&%%$#@@+OXXoOO@#$&%#@+XXXooXXXXX++@#$&%%$#@++..O++##$%&&&&$#@+.  XX+++XX.  ++&$#@XXX..OOO+O...++#&$#@...OO+++++...O+#&",
+"%$#@XXXooOoO..O++#$&&&%$#@+XXXXXXo@#$%%&%$#+OoXXO+++O...+@#&$#@...OO@@@#@ooooo#&$@@XX.OO@@@++...oO#&%$@+OOX.+O+OO...+@$&%$#+OoXXO++++oOooo#&$#@...OO@@@@@ooooo@&%$@+XXXoo+++OoXXX@@&%%%$##++. .+@@$$$%&&&&&%%%$##@+XXoO+@#$&%$@+XX.OOX.XXX+##$%&&%%$#@+..++@#$%%&&&&$#++ . XXO++XX . ++&$@+XXX .ooo+O...+@#&$#+...OO@@@++...oO#&",
+"%$#@XXXOOoOo..OO+$$&&%%$#@@XX.XXXX@@$%%&$$#+OoXX+OOO+...+@$&##+...O+@####+OOoo#&$#+XXXOO@@#@+...OO#&%$#+OoXXO++++...+#$&%$#+OoXX+++++OoOoo#&$#+...O+@###@Ooooo#&$$#+XXXoO+++oO.XX+#&&&%$$#@+...+@#$%%&&&&&&&&%$$#@+XXOO+#$%&$$#+XXXOoXXXXX@#$$%&&&%$##+..+@@$$%&&&&&$#++.  XX+OoXX  .+@&$#+XXX .OOOO+ ..++$&$#@...O+@##@+...OO@&",
+"%$#+XXXXo.. . O++#$&&%%$#@+..OoO..+@#$%&%$#+OO. oooXX ..+@#&$@+...+@#$$$######$&$#+XXXO+@###@oooXo@&%$#+OOXXOOO..++@#$$&%$#+OOXXOO+..++@##$&$@+...++####@@++@@#&%$#+XXXXXoooXXXXX@@&&&&%%$@@. .@@#$&%&&&&&&%&&%$$#+XXoO+#$%&%$#+XXX.....O@@#$%%&&&%%$@@..++#$%%%&&&&$$++.....OOO.....O@&$#@XX.oXXXXO+...+@#&#@+...+@##$#@ooooo@&",
+"%$#+XXXoo . ..OO+#$&&%%$@@O..OOO .+@@$%&%$$+Oo..oXoXX . +@#&#@+...+@#$$%$$$#$$$&$#@XXXO+##$#@ooooo@&%$#@OoXXOOO..O+@#$%&%$$+OoXXO+O..+@##$$&#@+...+@####@+@+@##&%$#+XXXoXoXoXXXXX+#&&&&%$$#+...+#$%%&&&&&&%&%%&$$#@XXO++#$%&$$#@XX......++#$%%&&&&&$$#+..+@#$%%&&&&&$#@+.. ..OOO.. ..+@&$#+XXXXo.XX+O ..+@$&#@+...+@#$$#@ooXoo#&",
+"%$#@XXXXXXXXXXo++#$&&%$$++OXXOO+XXo++#$&%$#++O. XXXXX...O+#&#@+. .+##%%%%%%$$%%&$@@XXXO+##$##OooXo@&%$#+OO  .. ..+@##%%&%$#+OO  . ...@@#$%%&#@+. .+@###OOooo++$&%$#@XX.XXXXXXX.XX@#&&&&&%##+...+#$$&&&&&%%%%%$%$$@@XXOO+#$%&%$@@XXX. . .O+#$$&%&&&&%$#+..+@#$$%%%%&&%#@+...Xo. .Xo...+@&$#+XXXOO...oO...+@#&$++...@##$$##OOoXo@&",
+"%$#+XX.XXXXXX.OO+#$&%%$#+OoXXOOOXXOO+#$&%$#+Oo..XXXXX. .O+@&#@+...@@$$%&%%%%%%%&$#+XXXO+##$$@OOOXo@&%$#@OO . ....+@#$$%&%$$+OO . . ..+#$%%&&#@+...+@##@OooooO+#&%$@+XXXXXXXXXXXXX@#&&&&&$$#@ ..@@$%%&&&&%%$$$$$$$@@XXO++$$%&%$#+XX.. ...O+@$$%&&&&%$$#@..++#$$$$$%%&$#@O...oX . oX ..+@&$#@XXXOo...OO...+@$&#@+...+@$$$#@OOoXo@&",
+"%$#@XXXoo. ...ooO#$&%$#@+OoXXO+OXXoO+##&%$#++O .XXXXX. .o+@&#@+...+@$$%%%%%$%%%&$#@XXXO+#$###OooXo@&%$#+OO. . ...++@#$$&%$#+OO . . ..@##%%&&$++...+@##@OooooO+#&%$#@XX.XXXXXX.XXX+#&&&&&%$@@. .+#$$&&&&&$$##@#####+XXOO+#$%&%$#@XXX.. . O+@#$$%&&&&%$@@..+@@#$$$$$%&%#@+...oo . oo...+@&$#+XX.OO...oO...++$&#@+. .+##$$#@OooXo@&",
+"$$#+XXXXX.. ..ooo##&%%#@XXX. . .  XXo@$&%%#+OOXX+++++XooXo@&#@+. .+@#$%%$$$$$$%&$@+XXXO+##$#@OOoXo#&%$#+OoXXoOO..O+++@$&%$#++oXXOOO..@#$%&&&$@+...++@@@XX...oo@&%$#+XXXoo+O+OoXXX+#&&&%%$##+...+@$%%%&&&$#@ooo####+XXO++#$%&%$@+XXXoooXo..+@#$%&&&%%##+..+@@##+++#$&$#@+. .O+XXX+O...++&$#+XXXoooooXX ..+@#&$@+...+@#$$#@oooXo@&",
+"%$#@XXXOooXoXXooO#$&$$#@XXX . . . XXo+#&%$#+OOXX+++++oooXo@&$@+...++##$$##@###$&$#@XXXO+@###@Ooooo@&%$#++OXXoOo..OO+++#&%$#+OOXXoOO..@$$%&%&$@+. .++@@@XX...oo@&%$@@XXXoO+++OoXXX@@&&&&%%##+...@@#$&%&%&$@@XXX+@@@+XXoO@#$%&%$#@XX.OoooX..O+@#$&&&%$$@+..O+@@@OO+@#&%#@+...O+oXX++. .+@&$#@XXXoooooXX...+@#&#@+. .++@##@@oXoXo#&",
+"$$#@XXXooooXXXooO@$&%#@+. .ooOOOOO...+@&$$#+OoXX++@++XXoXo#&##+XXXoo@@###OooOO#&$@+XXXOO@@@++...O+#&%$#+OoXX+O+O+ooooo#&%$#+OoXXO++++#$%%&&&$@@XXXoO+@+++XXXXo@&$$@+XXXOO+@+OoXXX@@&&&%$$#@+. .+@#$$%%&&$@+...++@@+..O++$%%&$$@+XXXOo++OXXooO#$&&%%$##+..++++@...@#&$#++...+++@++O...+@&$#+XXXOO+++... .+@#&$@@XXXoO@@#++...O+@&",
+"%$#+XXXoOXooXXooO#$&$#@+...oOOOOoo. .+@&%$@+OoXXO++++oXXoo@&$#@XXXoo+@@++ooooO#&$@+XXXoO@@@++...O+#&%##OOoX.+O+OOooooo@&%$@+OoXXO+++@#$%%&&&$#@XXXXo+++++XooXo@&$$@+XXXoO+@+OoXXX+@&%%$$#@@+. .+@@#$%%&&$@+...+++++..O++#$&&$$@+XXXoOO++XXooo@#&&%$$@@+..O++++...+@&$#++...++@@@++...O@&$@@XX.Oo+++... .+@#&$#@XXXXo++@++. .++#&",
+"%$#@oXXooOO+oOO+@#$&$#@O. .oOOOOOo...++&$#@OOoXX+++++XoXXo@&$$@XXXoo+++++ooooO#&#@+XXXOo++++O...+@#&$$@OOOXXO+OO+oooXo@&$$@OOoXXO+++@#$%&&&&$$@XXXoo+++++oXooo#&$#@+XXXOO+++OO.XX+@&%%$#@@++...++@@#$$%&$@+. .OO++O..O+@$%%&$#@+XXXOO+++XXooo+#&%%$#@++..OOOO+...+@&$#+O...++@@@++...++&$#+XXXOO+++.. ..+@$&$$@XXXoo+++OO...+@$&",
+"%$$#OooXo+O+oO++@$$&$#Oo  ...OOO..   oO&$#@. .  . . ....+@#&%$#++OXX. ...XXX+@#&#Oo   .. . . Xoo@#$&$#@.. . . . ... Xo@&$#@..  . ..++$$%&&&&%$#++O.....  XXX+@#&$#Oo  ...+++.... oO&%$$Ooo     ..ooO$$%&$#@oXX. ...XX@@$$%%&$#Oo   ..+++Oo . oO&%$#@. .  .... .  @@&$#Oo  .oo@#@oX   oO&$@+. . .+++oo   +@#&%$#++O...... ooo@#$&",
+"&%$#@+O... ...+@@$%&$#Oo.  ..O+O..  .oO&$#@ ... . .. ...@@$&%$$@++XX.. ..XXX@@$&#Oo . ... . .Xoo##$&$#+. . . . .. ..oo#&$#@. ... . ++$%%%&&&%$$@++.. ....XXX+@$&$#Oo.  ..++O . ..OO&%$#Ooo... . .ooo$$%&$$#ooo .. .Xo@#$%%&&$#Oo . ..+@@++. .oO&%%#@ . . .... . .+#&$#Oo.  oo#@#oo . oO&$#+.  . @@@oo.. @@$&%$$@++... ...oOO#$$&",
+"%%%$#@+.......+@#$%&$#@@+++++@@@++++++#&$$@@+O+O+++++++@@$$&&%$$##@@+++++@@##$$&$#@++O+O+++++@@##$%&$$#++++++++O++++@@#&%$#+++O++++@#$%&&&&&&%$$##@@++O+++@##$$&%#@@O++++@@@++++++#&%$$@@++++O+O++@#$$&&%$##@@++O+O@@#$$%&&&%$@@+O+++###@@+@+@@&%%$#@+++++O++O+++##&$$@+++++@###@@+++@@&$$#+++++@#@@@+++##$&&%$$##@@+++++@###$%&",
+"&%%$$##@@+++@@##$%&&%$#@@@+@@###@@+@@@#&%$#@@+@+@+@@@@@##$%&&%%%$###@+@+@@##$$%&$$#@@+@++@+@@##$$%%&%$$@@@+++++@+@@@@#$&$$$@@+@++@##$%%%&&&&&%%$$$#@@@+@@###$$%&%$#@@+@@@###@+@+@@#&&%$#@@@++@+++@@#$%%&%%$$#@@@+++##$%%&&&&$$#@@@@@@##$$##@@##&&%$$@@@+++@++@+@@#$&%$##@@@@##$###@@@##&%$#@@@@@#$$##@@@#$%&&%%%$###@@@@@##$$%%&",
+"&&&%%$$##@@@##$$%%&&%%$###@##$#$######$&&%$####@###@###$$%%&&%%%%$$$#####$$$%%%&%$$###@#@####$$$%&%&%%$###@###@######$%&%%$###@##@#$$%&&&&&&&&&%%$$$######$$%%&&%%$###@##$$$######$&%%%$$###@#@@###$%%&&%%%$$$#@#@#$$$%%&&&&%$$##@###$$%$$###$$&%%%$#####@#@#@###$%&%%$#####$$%$$#####$&%%$#####$$$$$##$$%%&&&%%%$$$#####$$%%&&&",
+"&&&&%%$$$$#$$$%%%%&&&%%$$$$$$$%%$$$$$$%&&%%%$$$$$$$$$$$%%%&&&&&&&%%$$$$$$$%%%&&&%%$$$$$$$$$$$$%%&%&&&%%$$$$$$$$$$$$%$%%&&%%%$$$$$$$%%&&&&&&&&&&&&%%$$$$$$%%%%&&&&%%$$$$$$%$%$$$$$%%&&&%%$$$$$$$$$$$%%&&&&&%%%$$$$$$$%%&&&&&&&%%$$$$$%%%%%%%%$$%&&&%%$$$$$$$$$$$$%%%&&%%$$$$$%%%%%$%$$%%&&%%$$$$%%%%%%%%$%%&&&&&&&%%$$$$$%%%%&&&&",
+"&&&&%&%%$%%$%%%&&&&&&%&%%%%%&%%%%%%%%%&&&&%%%%%%%%%%&%%&&%&&&&&&&%&&%%%%%&&&&&&&&&&%%%%%$%%%%&&&&&&&&&&%%%%$%%%$%%%%%&%&&&%%%%%%%%&&%&&&&&&&&&&&&&&&%%%%%%&&&&&&&&%&%%%%%%%&%%%%%%%&&&%&%%%%%%$%%%%%&&&&&&&&&&%%%%%%&&&&&&&&&%&%%%%%%&&&&%%&%&&&&&&&%%%$%%%%%%%%%&%&&%&%%%%%%%&%&%%%%%&&&&&%%%%%&&&%%%%&&%&&&&&&&&%&%%&%&&&&&&&&",
+"&&&%&%&%%%%&%%&&&&&&&&&&&&&%&%&%&%&&&&&&&&&%&%&%&&%&%&&&&&&&&&&&&&&%&%%%&&%&&&&&&&&%%&%%%&%&&%&%&&&&&&&&&&%&&&&&&%&%&&&&&&%&&%&%&&%&&%&&&%&&&&&&%&%&%&&%&%&%&&&&&%&&&%&&&%&&&%%&%&&&&&&%&%&%&&&%&%&%%&%&&&&&&%&%&%&%&%%&&&&&&&&&&%%$$$$$$%%&%&&&%&%%%%%%%&&&&&&&&&&&&&&&&%%%$$$$$%%&%&&&&&&&&&&%&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&%%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%&%&&&&&&%&%%%%%%%%%%%%&&&&&&&&&&%%%%%%%%%%%%&&&&&%%%%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%%%%%&&&%%%%%%%%&%&%%%%%&&&&%%%%%%%&%&%%%%%%%&&&%%%%%%%%%%%%%%%%%&&&&%%%%%%%%%%%%%%%&&&&&&%%%%%%%%%%%%%%%&&&&%%%$#####$$%%&&&&&%%$$$$%%%%&&&&&&&&&&&%&%%$$#####$$&%&&&&&&&&&%%%$%$%%%&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%%%$$$$$$$$$$$%%%%&&&&&%%%%$$$$$$%%%%&&&&%%$$$$$#$$$$%%%&&&&&&&%%%$$$$$$$$$$%%%&%%%$$$$$$$$$$$$$%%%&&%%$$$$$%%$%$$$$$%%&%%%$$$$$%%%%$$$$$$%&%%%$$$$$%%%%%$$$$$%&&%%$$$$$$%$$$$$$$$%&&%%$$$$$$$%$$$$$$$%&&%%%%$$$$$$$$$$$$%%&&&&&%$#++OO+@#$%%%&&%$$####$$%%&&&&&&&&&&&&%%$#@OOO++#$%&&&&&&&&&&%$$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&",
+"&$$###@#@#@####$$%%&&&%%%$$#######$$%%%&%$$$#@#@######$$%%&&&%%%$$$##@#@###$$%%&&$$$###@@#@@####$%%&%$$######$$######$$&%$$$####$$$$$#####$&%$$$#####$$$$#####$&%$$#######$$######$&%$$######$#$######$&&&%$$###@#@#@####$$&&&&%$$@OOooO@#$$&&&&%$#Ooo+@$%%%&&&&&&&&&&&%$##@OoOOO##$%&&&&&&&&%%$#+++#$%%%&&&&&&&&&&&&&&&&&&&&&&&",
+"%$##@@+@+@@@@@@#$$%&%&%$$#@@@+@@@##$$%%&$$#@@@@+@+@@@##$$%%&&&%$$#@@@+@+@@@@#$$&%$#@@+@@+@+@+@@@#$%&%$##@@@@###@@@@@##$&%$#@@@@@@####@@@@@#&%$#@@@@@####@@@@@##&$$#@@+@@@@@@@@@@@@#&$$#@@@@@@@@@@@@@@@#&%%%$##@@+@+@+@@@@#$&&&%%$#@...XX+@#%%%&&%$#ooo++#$%%&&&&&&&&&&%%$#@+XX...@#$%&&&&&&&%%$#@+OO@#$%%&&&&&&&&&&&&&&&&&&&&&&&",
+"$#@..........ooO#$$&&%$#@@oo.....++@$$%&$#Oo........oo@##$%&%%$#@@..........@#$&$#@.............@#$&$#@.....+++oo...oO#&$#Oo...oo@#@oo...oO&$#Oo...oo@@@oo...oO&$#Oo.....+++.....OO&$#Oo.....+++.....oO&&$$#ooo..........@#&&&&%$#@  .XX+##%%&&&%$#+OOoo@$$%&&&&&&&&&&&%$#++XX...@#$%%&&&&&&%$#@+ ..+@$%%%&&&&&&&&&&&&&&&&&&&&&&",
+"$#+... . . ..ooo@#$&%$$#@+XX.....OO+#$%&$#Oo.. . .. Xo+@#$$&%%$#++..........@@$&$@+.. .. ... ...+@$&$@+.....++@Xo...oO#&$#Oo...oo@@@oX...oO&$#Oo...XX@+@XX...oO&$#Oo.. ..OOO.. ..oO&$#Oo.. ..O+O. ...oO&%$##oXX.. . .....+@&&&%%$@@.. XX@@#$&%&&%$#+Oooo@#$%&&&&&&&&&&%&$#@+XX ..+#$%&&&&&&&%$#++. .++#$%%&&&&&&&&&&&&&&&&&&&&&&",
+"$@@. ....... oXo@@#&%$#@++XX . ..OO+@#$&$#oo .... ..XX++@#$&%$#@++.. . .....+@$&$@+... . . ... .+@$&$#+.. ..+++XX. .oo@&##oo. .Xo@@@oo ..oo&##oo. .XX+++XX. .oo&$#oo... .+OO .. .oo&$#oo .. .OOO... .oo&&$#@oXX. .. .  ..+@&&&&%$@+...++#$$%&&&&%$#+OOXX@#$$%&&&&&&&&&%&%$##++...@@$$&&&&%&%$$#+O. .++#$%%&&&&&&&&&&&&&&&&&&&&&&",
+"$#@OooXXoOOOOXXXoO#&$#@oXXooOOOoO...+@$&$#@+...ooOOOXoXXX#$&%$#oXXXXOOOoo. .+@#&$@+...OO . Oo...+@#&$#+...oO@@@++...O+#&$#+O...++@@@++...O+&$#+O...OOooOOO...O+&$#@+ ..XX+++XX...++&$#@+...Xo+O+XX...++&%$#@XXXooOOOXo...+#&&&%$$#@. .+@#$%&%&&&%%$#@+..+@#$$&&&&&&&&&&%%%$#@+. .+#$%%&&&&&%$#@ooXXXXo@#$%&&&&&&&&&&&&&&&&&&&&&&",
+"$$#OooXXOOOOoXXXoo@&$#@XXXXoOO+Oo. .+@#&$#@+...ooOOOXXXXX@#&$#@ooXXXOOOOO. .+@$&#@+ ..oO.. OO...+@$&##@...Oo@@@++...++#&$#++...++@#@+O...++&$#+O...O+ooo+O ..++&%#@+. .oXOOOoX. .+@&$#@+.. oXO+OoX. .+@&&$$@XXXoooOOXX ..@@&&&&%$@+...+@#$%&&&&&&%$$#@..++@$$%%&&&&&&&&&%%$#@+...+#$%%&&&&%%$#@oo.XXXX@#$%%&&&&&&&&&&&&&&&&&&&&&",
+"%$#+OoXX++@@+oooXo@&$@+...O+@@@++XXXoo#&%#@+XXXoO+++OoXXX@#&$#@XXXoo++++OoXo+@$&$@+...+O ..O+ ..+@#&$@@XXXOO@##@+...++#&%$@+XXXO+@#@++XXX+#&$#@+...OO. .OO...++&%$#@+Oo..oXo. OOO@#&%$#@OOoXXOOO..OO+@#&%$$@OooOO+OO..OOO@$&&&&$$#@...@@$%%%&&&&&&$$#@ooooO#$%%&&&&&&&&&&%%$#+...@@$$&&&&&%$#@+..OOO..@@#%%&&&&&&&&&&&&&&&&&&&&&",
+"$$#+OoXX++@+@oooXo@&$@+. .O+@##@+XXXoo@&%$#+XXXOo+++OoXXX@#&$$@XXXoo+++++Xoo@#$&$@+...O+ . +O...+@$&$#+XXXO+###@+...++$&$$#+XXX++@##+OXXX@@&$#++. .oO. .oO ..+@&%$$#+OO. oXX..OO+#$&%$$#++oXXOOO..OO+#$&&$$#OOoOOO+O. OO+#$&&&%%$@+. .+#$$&&&&&&&&%$#@OoooO@#$%&&&&&&&&&&%%$@@ ..+#$$&&&&%&$#@+..+O+..+@#$%&&&&&&&&&&&&&&&&&&&&&",
+"%$#++oXX++@@+OooXo@&$@+...O+####@XXXXo#&%$#@XX.Oo+++oOXXX@#&$$@oXXooO++++Xoo@@$&$#@...++.. ++...@@$&$#@XXXo+@###+...+@#&%$#@XXXO+@@@+OXXX@#&$$@+...Oo . OO...+@&&%$#@+O..XoX .O++#$&&%$#++OXXOOO..O++#$&&%$#+OO+O+OO..O++#$&&&&%$@+. .+##%%&&&&&&&&%$#Ooooo@#$%%&&&&&&&&&&%$#+.. @@$%%&&&%%$#@+..+++..@@$$%&&&&&&&&&&&&&&&&&&&&&",
+"%$#+OoXX++@++XooXo@&#@+...+@#$$#@oooXo@&$$#+XXXXoooo..XoO@$&$$#+OO... .ooOO+@#$&$##@++++ ..++++@#$$&$#+XXXO+#$#@@...+@#&%$#@oXXoo@@@OoXXX@#&$#@+...Xo  .XX...+@&%%%$#@+oo. .oo@@#$%&&%%$#@+XX.. XX@@#$%&%%$$##@@+XXXXX@@#$%&&&&$$#@...+#$$&&&&&&&&&%%$#@oXXOO##%%%&&&&&&&%$$#@...+#$$&&&&&&$#@@Oo@+@OO+@#%%&&&&&&&&&&&&&&&&&&&&&",
+"%$$++OXXO++++oXoXo#&#@+...+##$$#@OoOXo@&%$#+XXXXXooo..Xoo#$&%$#+OO. .. oo+++@$$&%$$#@+++.. ++@@@$$%&$#+XXXO+@#$@+...+@#&%%$@ooooo+@+OoXoo@$&$#@+...Xo   XX...+@&&%%$$#@Oo . Oo@@$$%&&&%%$#@XX ..XX@#$%%&&&%$$#@@+XXXXX@#$$%&&&%$$#+...+#$%&&&&&&&&&&%$$@ooXoO@#$%&&&&&&&&&$$@+...+#$$&&&&%%%#@@++#@#O+@##%%&&&&&&&&&&&&&&&&&&&&&",
+"%$#+Oo. .....XXX++#&$@+...+@####@OooXo@&$$#+XXX.....XX++@#$&%$##@+O+Xoo.....@#$&%%$$$#@+...+@##$$%%&$#+XXXO+###@@...+@$&&$$#+OOXX+++XXOO+#$&%#@+.....OOo.. ..++&&&%$##+oXXXXXo+#$$%&&&&%$$@++.. +@@$$%&&&&&%$##OO...++@@$$%&&&%$$#+...+##$&&&&&&&&&&%%$#@++..@#$%%%&&&&&&&%$@+.. @@$%%&&&&&%%$$###$$##$$$%&&&&&&&&&&&&&&&&&&&&&&",
+"%$#+OO . . ..XXX+@#&#@+. .O+@@#@+XXXoO@&%$#@XXX... .XX+@##$&%$##@@O+ooX.....@#$&&%%$$#@+. .+@#$%%&&&$#@XXXO+####+...++$&&%$#+OOXX+++XXOO+#$&%#@+. ...ooO ....+@&&%%$#@@oXXXXXo+@#$%&&&&&$$#++ ..+@#$%%&&&%%%$#@Oo...++@##$$&&&&$$@@. .@@$%%&&&&&&&&&&%$$@++..+##$%&&&&&&&%$$#@...+#$$&&&&&%%%$%$%$$$%$$%%%&&&&%%&%%%%%&%%%%%&%&&",
+"%$#+OO. .. . XXX@#$&$@+...O++@@++XXXoO@&%##+X.X.... XX++@$$&%$#@@+OOooo.....@@$&&&&%$##+...@@#$%&%&&$#+XXXO+@##@+...+@#&%%%$@+OXXO+OXXO++$$&$$@+... .OOo.....+@&%%$$#@+Xo.XXoo+@#$$&&&&%%$#@+. .+@#$%&&&&&%$##@Oo. .+++@##$&&&&%$#+...+##%%%&&&&&&&&&&%$$@@XX++@$$%&&&&&&%$#@+...+#$$&&&&&&&&%%%%&%%%%%%&&&&%&%%%%%%%%%%%%%%%%%&",
+"%$#+OoXXoOOOO+@@#$$&$#@oXo..oOooo. .++#&%$@@XXXooOOO..o++#$&$#@XXX++++OOO...+@#&&&%%$#@+. .+@#$%&%&&$#@XXXOO@@@@+...+@$&&%%$#@+..OOO..+@#$%&%$#+XXX .OOO. XXX+#&%$$@+OO..OOO..oOO#$&&&&&%$#@+...+@#$%%&&%%%$#@+..ooo++XXo@#&&&&%##@. .+@#$%&&&&&&&&&&&%$$#@XXO+@#$%&&&&%&%$#@+ ..@@$%%&&&&&&&&&&%&&&&&&%&&&&%%%$$$$$$$#$$$#$$$%&",
+"$$#+OoXXOOOO+@##$$%&$$#ooX..ooOXo . +@#&$$@+XXXOO+OO .OOO@#&$@@XXX++O+++O...+@$&&%%%$#@+...+@#$$%&&&$#@XXXOO+++++ ..+@#&&&%%##@..OOO..@#$%%&$$#+XXX..OOO. XXX+#&%$#@Ooo .OOO .oOO@#&&&&%$$@@+. .+@#$$%&&&%$#@++ .ooo+OXXX+@&&&%%$@@...+@#$$%%&&&&&&&&&&%$#@oXO++#$%&&&&%&%$#@+.. @@$%%&&&&&&&&&&&&&&&&&&&&&&%$$###@@###@#@###$$&",
+"$#@oXX..XooO+##$%%%&%$##++XX . XXOOOO+#&$#+O.. Xo+++Xo...+@&$@+ . XooooXo ..+@$&&&%$#@Oo  .OO@#$%%&&%$#OooXXoooooXXX@#$&&&%%$#@oo. .Xo@@$%%&%$#@XX.XXO+OXX.XX@#&$#++ . XXOOOXX. .O+&&&%%$#@oo . OO@#$%%&%%$#oXX..oXooo...+@&&&%%$#+. .oo@#$%&&&&&&&&&&%&$$@+OXXX@#$&&&&&$$#@Oo...+#$%&&&&&&&&&&&&&&&&&&&&&&&$#@++OOOOOOOOOoO++$&",
+"$#@oXX..Xoo++#$%%&&&%$#@@+XX . XXOOOO+#&$#+O...oX+@+oX...++&#@+.  oXooooX ..+@$&&%$$@@oo.. oO@#$%%%&$$#+OoXXooooXXXX@#$&&&&%$#@oo. .oo@#$%&&%$#+XXXXX++OXXXXX@#&%#+O  .XX+O+XX. .O+&&%%%##+Oo ..oO@#$%%&%$$@ooX. oXooo ..+@&&&&%$#+...oo@@$$%%&&&&&&&&&&%$#+OXXX@#$&&&&%%#@@oo ..+##%%&&&&&&&&&&&&&&&&&&&&&&$@+OOOooOOOOOoooO+#&",
+"%#@oXX..ooo+@#$%%&&&%%$++o. XXX.....O+#&$#+O...Xo+@+oo...++&$@+ . XooooXo...@#$&&%$$@@oo . Oo+@#%%&&%$#+OOXXXooooXXX@#$&&&&%%$#Oo.. oo#$$%%&%$#@XXXXX+++XXXXX@#&$#+O.  XX+OOXX ..O+&&&%$#@@oo.  oO+@#%%&&$$#oXX. ooXoo...+@&&&%$$#@. .oo+@#$%&&&&&&&&&&%%$$@+...+#$&&&&%$#@+oo...@#$%&&&&&&&&&&&&&&&&&&&&&&&#@+OooooooooooooOO@&",
+"$#@oXXXXXXX++$%%&&&&%%$@+O. XX.. ...O+#&%#+OXXXXX@@@++XXXO+&$#@oooXXXXXXXOO+@#$&&&%#@@XXXXXXo+@#$%%&%$$##+XXXXXXXOO+#$%&&&&%%$#+OXXXO+#$%&&&%%$#Ooooo@@@ooooO@$&$#+OXXXXX+++XXXXXO+&&&&$#@+XXXXXXX+@#$%&%%##OOoXXXXXXXXXX@@&&&&%$#@oXXXX+@#$%%&&&&&&&&&&%%$#@...@#$&&&&%$#@+XXXXX@#$%%&&&&&&&&&&&&&&&&&&&&&&#+OXXXXXXXXXXXXXXX#&",
+"$#@oXXoXXXo+@$%%&&&&&$$@+O. XXX.....O+$&$$++XXXoo@##@@oXo++&$#@OooooXXXXX+++#$%&%%%$#@oXXXXXo@@#%%&&&&$$##ooXXXXX++@#$%&&&&%%$$@+oXo++#$%&&&%%$#OOOOO@#@OOOO+#$&%$++XXXXX@+@XXXXo++&&%%%#@@oXXXXXo@@#%%&%%$#OOoXXXXXXXXXo@#&&&&%$#@ooXXX++#$%&&&&&&&&&&&%%$##...@#$&&&%%$#@+XXXXX@#$%&&&&&&&&&&&&&&&&&&&&&&&#+OXX.XXXXXXXXXXXo@&",
+"%$##@@@@@@@#$$%&&&&&&%$$#@+++++OO+++##$&%$###@@@##$$##@#@#$&$$###@@@@@@@@@#$$%%&&&%$$##@@@@@@#$$%&%&&%&$$##@@@@@@@#$$%&&&&&&%%$##@#@#$$%%%&&&%$$##@##$#$#####$%&%$###@@@@####@@@@#$&&&&%$$#@@@@@@##$$%%&&%%$##@@@@@@@@@@@#$&&&&%%$#ooooo+@#$%%&&&&&&&&&&%&%$#@@@#$$&&&&%$#@+oXXXo##%%%&&&&&&&&&&&&&&&&&&&&&&$++XXXXXXXXXXXXXXo#&",
+"%%$$$####$$$$%%&%&&&&&%$$#@@#@#+@+@@#$%&%%$#####$$$$$$$#$$$&%%$$#########$$$%%%&&&&%$$$#####$$$%%&&&&&&%%$$######$$$%%&&&&&&%%%$$##$$$%%&&&&&&%%$$$$$$$$$$#$$$%&%%$$###$#$#$#$####$&&&&&%$$$#####$$$%&%&&&%%$$$####@####$$$&&&&&%$$#@@@##$$%&&&&&&&&&&&&&%%$$#@@$$%&&&&&%$$#@@@@##$%%&&&&&&&&&&&&&&&&&&&&&&&$$##@@@+++++++@@@#$&",
+"&%%$$$$$$$$%%%&&&&&&&&%%$$#@###@#@##$$%&&%%%$%$$$%&%%%%$$$%&&%%$%$$$$$$$$$%%%&&&&&%&%%$$$$$$$%%&&&&&&&&&%%%$$$$$%$%%%&&&&&&&&&&%%%$$$%%&&&&&&&%%%$%$%%%%%$%%%%&&&%%$%$$$%$%%$$$$$%%&&&&%%%%$$$$$$$%%&%&&&&&%%$$$$$$$$$$$$%%&&&&&%%$$$##$$$%%%&&&&&&&&&&&&&%%$$#$$%&&&&&%%%$$$#$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&$$$###############$&",
+"&&&&%%%%%%%%&&&&&&&&&&&%%%$%%%$$$$$$%%&&&&&%%%&%&%&&%%&%&%&&&&&%&%%%%%&%&%&&&&&&&&&&%&&%%%%&%%&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&&&&%%&%&&&%&&&&&&&&&&%&%&&&&&%&&&&&&&&&%%%%%%%%%%%%&%&&&&&&&&%&%&%%%%%&%&&&&&&&&&&%%%%%%%%%&%&&&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&&&%%%%%%&%&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$$$$$$$$$$%%&",
+"&&&&&&&&%&%&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&%&%%%&%&&&&&&&&&&&&%&%&%%%%&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&%&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&$%$%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$%%%&&&&&&&&&&&&&&&&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&&&%%$%$%%%&&&&&&&&&&&&&%%%$$%%%&&&&&&%%%%$$$%%%%&&&&&&&&&&&&%%%$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&%%%$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%$$#$##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$##$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$#######$%%&&&&&&&&&&&&&&&&&&&&&%$$$##$$$%%%&&&&&&&&&&&&%%%$$#$#$%%&&&&&&&&&&%%%$$#$$$$%%&&&&%%$$##$$$%&&&&&&&&&&&%%%$$###$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&%%$$$##$%%%&&&&&&&&&&&&&&&&&&&&&&&&%$##@@@#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$##@@@#$$%&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@@@+@@##$%&&&&&&&&&&&&&&&&&&&&&%$##@@@#$$%&&&&&&&&&&&&&&%$###@##$%%&&&&&&&&&&%$##@@#$$%%&&&%%$##@@@#$$%%&&&&&&&&%&%$$#@@@@@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&%$#@+++#$%%&&&&&&&&&&&&&&&&&&&&&&&&$#OO...+@$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@..ooo#$%&&&&&&&&&&&&&%&&&&&&&&&%&%$##ooX.....@#%&&&&&&&&&&&&&&&&&&&&&$#OO...+@$$%%&&&&&&&&&&%%$$+O...#$$%&&&&&&&&%%$$@...O+$$%%&&%$#@...oO#$%%%&&&&&&&%%%#@+.....##$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&",
+"&&%&%$$@@OO+@#$%%&&&&&&&&&&&&%%%%&&&&&&&$#Oo...+@#$%%&&&&&&&&&&&&&&%%&%&%%&%&&&&&&&&&%%$$@@..oXo##$&&&&&&&%&%%&%&%&&&&&&&&&%$$#+ooX.....@#$&&&&&&&&%&%&%%%&%&&&&$#Oo...+@#$%%&&&&&&&&&&&%$#+O...@#$%%&&&&&&&&%$#@...O+#$%&&&%$#@...oo@#$%%&%&&&&&&%$@@+.....@#$%&&&&&&&%&%&%&%%%&%&&%&&&&&&&%%&%&%&%&%&&&&&&&&&&&&&%&%&%&%&&&&&&",
+"&&&&%$$++. .+@$%%%&&&&%&%%%%%%%%%%&&&&&&$#@+XXXO+#$$%%%%&&&&&&&&%%%%%%%%%%%%%&&&&&&%&%%$$#+OoXXX@#$&&&&%&%%%%%%%%%&%&&&&&%%%$#+O...OOOO+#$$&&&%&%%%%%%%%%%%%%%%&$#@+XXXO+#$$%%%&&&&&&&&&%$#+OXXX@#$&&&&&&&%%%$$#@XXXO+#$%%&&%%#@OOoXX##$%%%%%%&&&&&%$#@+O...@#$%%&&&&&&%%%%%%%%%%%%%%%&&&%%%%%%%%%%%%%%&&%&&&&&%&%%%%%%%%%%&&&&&",
+"&&&&&$$+O. .+@#$%&&&&&&%%%$$$$$$$%%%%&&&%#@+XXXOO@##$$%%%%&&&&&%%%$$$$#$$$$$%%%&&&&%%%$$#@@ooXXX@#$&&%&%%%$$$$$$$$%%&&&&&%%$#@Oo. .oOO++#$%&&%&%%%$$$$$$$$$$$%%&%#@OXXXOO@#$$$%%%%&&&&&%$$#+OXXX@#$%%&&&&&&%%$#@+XXXO+#$%&&&%$$#OOoXX+##$$$$%%&&&&%%$$@+O...@@$%&&&&&%$%$$$$#$$$#$$$%%&&&%%$$$$$$$$$$$%%%&&&&&%%%%$$$$$$$$%%%%&&",
+"&&&%%$$++ . ++#$%%&&&%%%$$#######$$%%&&&%#@+XXXoO+@###$$$%%&%%%$$$####@#@##$$%%&%%%$$$##@@+OoXXX@#$&&%%$$$###@###$$$%%&&&%$##@Oo...OOO++#$%&&%%$$$###@@#@###$$$&$$@+XXXoO+@@##$$%%&&&%&%$#@+OXXX@#$%&&&&&%%$$#@@+XXXO+#$$&&&&$$#OOoXX+@####$$$%&&&&%%$#+O. .+#$$&&&&%%$$####@#@##@##$$%&%%$$##########$$%%%&%&%$$$###@###$$$%&&&",
+"&&&&%%$#@oXooo#$%&&&%&%$#@@+OOO+@@$$%%&&$$#+XXXooOOO++##$$%&&%$$##++OOOOO+++#$%&&%$$##++OOooXXXX+#$&%%$$##++OO+O+@#$$%%&%$$@+OXXXXXooOO+#$%&%%$$##++O+OO+OO+@@$&%$#+XXXooOOO++#$$%%&&&&$$#@OoooO@#$%%&&&%&$$@++OooooOO@$%%&&%%$#+OOXX++@O+++@$%&&&&&%$##+...@@$%%&&&%$@@+++OOOOOO+O+##$&%$@@+O+++OO+++#$$%%&%%$$##+++OOO+@#$$%%&",
+"&&&&%%$$#OoooO@$$&&&%%$$@@+OOOoO++#$$%%&%$@+XXXoooooOO@@#$$&%$$#@++OOOOoOOO+@#$&%$$@@+OOoOoooXXX@#$&%$$@@@OOOoOoO@@##$%&%$#++OXXX.XooOO+#$$&%$$@@@OOOoOOOoOo+@#&%$@@XXXooooOO+@@#$%&&%%$#@+OoooO@#$%%&&&%%$#++OOooooO+@#$%&&%%$#+OOXX+++OO+++#$&&&&&%%##+...+#$$&&&&$$@+OOOOoOoOOOOO@#$&$#@+OOO++OOo++@@#$%&%$$@@@OOOoOOO@@##$%&",
+"&&&&&%%$##@@OO#$%%&&&%$#ooo.......+##%%&%$#+XXX ......Xoo#$&$$#ooX..XXX.. . @@$&%$#ooo...... XXX+#$&$$#ooo..XXX..Xoo#$$&%$#ooo.... XXooO#$%&%$#ooX..XXX ....oO#&$$#+XXX ......O++$$&&&%$#@+XX ..+#$%&&&&&%$#OooXX.....@#$%&&&%$#+OoXXOoO. ooO#$&&&&&&%##+. .@@$%%&&&$#Oo............oo#&$#Oo...XXXXX..O++$$&$$#ooX..XXX..Xoo#$%&",
+"&&&&&%%%$##@++#$%%&&%$$#oXX.......+@#$%&%$#+XXX .... .XXo@#&$#@oXX. XXX . . +@$&$#@oXX. ... .X.X@#$&$#@oXX. XXX .XXo@#$&%$#OoX.. ..XXXoo#$%&$#@oXX..XXX . ..oO#&%$@@XX.. ... .oOO#$&&&%$#@+XX. .+#$$&&&&&%$#OooXX.....@#$%&&%%$#++OX.OOo. ooO#$&&&&&%%$#+...+#$%%&&&$#Oo. . ... . ..oo#&$#Oo. .XXXXX .oOO#$&$#@oXX. XXX .XXo@#$&",
+"&&&&&&&%%$$$++$$%&&&&$$@ooX.......+@@$%&%$#+XXX. .....XXX@#&$#@oXX. XXX..  .+@$&$#@oXX...... XXX+#$&$#@oXX...XX..XXo@#$&%$#Ooo...  XXoOO#$%&$#@ooX ..XX . ..oO#&%$#+XXX.......oOO@$&&&%$#@+XX . @@$%%&&&%%$#OooXX.....@#$%%&&%%#+OOXXooO .ooO#$&&&&%&%##@...@@$$&&&&$#Oo... . ... ..oo@&$#Oo. ..X.XX..oOO@$&$#@oXX..XXX..XXo@#$&",
+"&&&&&&&&%%$$$$$%%&&&%%#@+OOooooo..O++$$&%$#@XX.XX+++OO...+@&$@+...oOO++OO. .+@#&$@+...Oo++OXXXXX@#$&$@+.. Oo+OOoO...+@$&%%$#@+ooXXX++@@#$$%&$@+...oO++OXXXXX+@#&%$#+XXXXX+O+ooXXX@#&&&&$$#@@+...+#$%%&&&&%%$##@+++OO..+#$%%&%%$#+OO.....oo+@#$$&&&&&%%$@+. .+#$$&&&&$#@+XXXooXXXoXooXo@&$#@+XXXXXO+OooXXX@#&$@+...oo++OOO...+@$&",
+"&&&&&&&&&&%%%%%%&&&&&$$@++Oooooo..O++#%&%$#+XXXXX+++OO ..+@&$@+...OO@+@OO. .+#$&$@+.. OO+++XXXXX+#$&$@+...oOO+OOo. .+@$&%%$#@@OoXXX+@##$$%&&$@+...oO+@+XX.XX@#$&%$#+XXXXX+++ooXXX@#&&&&%%$#@+ ..+##%&&&&&&%%$$##@+++..@@$%&&&%$#@Oo... .oO@@#$%&&&&&&$$#@...@@$%&&&&$$#+XXXoooXoXXooXo@&$$#+XXXXX+++ooXXX@#&$@+. .OO+@+OO ..+@#&",
+"&&&&&&&&&&&%%&&&&%&&%$#@XXX..XXX  OO+$$&%$#+XXXOO+@+++...+@&$@+. .+@@##@@+O+@#$&$@+...++@@+OoXXX@@$&#@+   .... ..  .+@#&%&%$#@oooXo@@#$%%%&&#@+...oo+++XXXXX+#$&%$#@XX.OO@@++OXXX@#&&&&%%$#@+...+#$$&&&&&&%%%$$$#@++..+#$$&&&%$#+OO.  . O+@#$%%&&&&&&%$@+. .+#$$&&&&%$@@X.XoooXXooooXo@&$$@@XXXoO@@++oXXX@#&$@+...+@@@@++...+@$&",
+"&&&&&&&&&&&&&%&&&&&&%$#@XXX. X.X..OO+#$&$$#@XXXOO@@@@+...+@&#@+...+@@###@+++@$$&#@+...++@@@OoXXX@#$&#@+ . .. . ...  +@$&&%%$#@oooXo@#$%%&&&&$#+. .oo++OX.XXX@#$&%$#+XXXOO@@@OoXXX@#&&&&&%$##+...+@$%%%&&&&&&&&%%$#++..@#$%&&%%$#++o.. ..O+@#$%%&&&&&%$##@...+@$%%%&&$$#+XXXOooXoXoooXo@&%$#+XXXOO@@@OOXXX@#&#@+...+@@##@+...+@#&",
+"&&&&&&&&&&&&&&&&&&&&%$#+XX...XXX  OO+#$&%$@@XX.OO+@@++...+@&$@+...+@@####+@+##$&#@+...+@@@+OOX.X+#$&#@+ . ..... . . +@#&&%%$#@ooXoo+#$$%%&%&$#@ooo.......X.X@#$&%$#+XXXOO@@@+OXXX+#&&&&&%$#@@. .@@#$%&%&&&&&&%&$$#@+..@@$%%&&%$#+OO.. . O+@##%%&&&%&%$$@+...@@#$%&%&%$#+XXXooXoXooooXo@&%$@@XXXOO@@@OOXXX+#&$@+...+@@@@@+...+@#&",
+"&&&&&&&&&&&&&&&&&&&&$$@+...OOOOO..OO+#$&$$@+XXXXX+@+Oo. .+@&#@+. .oO@###@+++@#$&$@+. .oo+++XXXXX+##&$@+...XXoOOOooXo+#$&&%%$#@oooXo@@#$%%%&&$$#Ooo. . . .XXX+#$&$$#+XXXO+@@@+oXXX+#&%&%%%$#@+...+@#$$%&&&&&%&%%$#@@+..@#$%%&%%$#+OoXXoXo..+@#$%&&%&%$$#@+. .+@#$$%&&$$#+XXXOOXoXXoooXX@&$$@+XXXOO@@@OoXXX+#&$@+. .oO@@@Oo ..+@$&",
+"&&&&&&&&&&&&&&&&&&&&$$@+...+O+O+..OO+@$&$$@@XXXXX+++oo...+@&$@+...oO+@@@@OO++@$&$@+.. OO+++XXXXX@@$&#@+. .ooOoOoOXoo@@$&&%$##+ooXoX+@##$$%&&%$##++OOOOOooXXX@#$&$$@@XXXOO@@@OOXXX+@&&&%$$#@@+ ..+@@#$$%&&%&%$$$$#@+O..@@$%&&%$$#+OoX.oXX..++@#$&&&%$$#@@+. .+@@#$$%&$##+XX.OoXXoooooXo+&%$@@XX.OO@@@OOXXX+@&$@+.. oo+++Oo...+@$&",
+"&&&&&&&&&&&&&&&&&&&&$$@+...+O+OO..oOO##&$#@+XX.XXO++oo. .@@&$#+...oo+++++OOO++$&$@@...oo++OX.XXX+@#&$#+.. XXOOOoOXXo@#$&%$$#@+oooXo++@@#$%%&%%$$#@OOOOOooXXX@#$&$#@+XXXO+++++oXXX@@&%%$$#@@++. .++@@#$%&&%%%$##@@++O..@#$%%&&$#@OOoXXXoX..O++@#&&%%$#@@++...++@@#$%&%#@+XXXoOoXXXoooXX@&$#@+XXXOO+@+OoXXX@@&$#+...oo+++oo. .@@$&",
+"&&&&&&&&&&&&&&&&&&&&%$@+. ...... ....@#&$$Oo... . .. .ooo@#&$#@ooo..........OO#&$#@ooX........ .o+#&$#@ooo. . ......+#$&%$#OoX. . ...ooO#$%&&%%#@@OOoooXXXXo@$$&$#Oo  . .+++.. . OO&&%$$Ooo. .  ..ooO#$&&&$$@++OOoXXXX@#$%&&%$#@...XX+O+  ...O+&&%$$Ooo .   ..ooO#$&$#+o. .XXXoo .Xo. O&$#OO. ...+++..  .oO&$#@ooo.......ooo@#$&",
+"&&&&&&&&&&&&&&&&&&&&%$#@.. . . .. ...@#&$#+o . .......ooO#$&$$#Ooo ...... ..O+$&$$#Ooo. . . .. .OO#&%$#Ooo..... ....@#$&%$#OoX.. . ..ooO$$%&&%$$@+OooooXXXoo#$$&$$OO. ...+++... .OO&&%$#OoX.. . ..ooO$$&%%$#++OOoXXXXX@$$%%&%$#@...oX+++ . ..OO&%%$#OoX.. . ..ooO$$&$#Oo. .XXoXo..oX..O&$#Oo.. ..+++... .OO&$$#Ooo.. . . ooO#$%&",
+"&&&&&&&&&&&&&&&&&&&&%$$#+++OOOOO+OO++##&$$@++OOO+OOOO++@##$&%$##@@++O+OO+O++@#$&%$##@@O+OOOOOOO++#$&%$##@@O+OOOO+++@#$$&%$#@++OOOOOOO++@$$%&%$#@+XXXXXXXX+@##$%&$#@+OOOO+@@@OOOO++@&&%$$@@++OOOOOO++@$$&&%$#OooXXXXX++#$%%&&%$##O+O++@@@O+OOO@@&&%$$@@+O+OOOOO++@$$&%$@+OOO++++OOO++OO+&$$@+OOOOO@@+OOOO++@&%$##@@+O+O+O++@##$%&",
+"&&&&&&&&&&&&&&&&&&&&&$$$@@+@++++++++@#$&%$#@@++++++@++##$$%&%%$$##+++++++@@@#$$&%%$$#@@+++++@+++@#$&%%$$##+++++++@@@$$%&%%$@@+++OO+++@@#$%&&%$#@+XXXXX.oX@@#$%&&%$#@+O+++@#@+++++@#&&%%$#@@+++++++@@#$%&&%$#OooXXXXX+@#$%&&&&%$#+++@@@##+++++@#&%&$$#@@+++++++@@#$%&$$#@++++++@+++++++@&%$#@@++++@##+++++@#&%%%###+++++++##$$%%&",
+"&&&&&&&&&&&&&&&&&&&&&%%$##@@@@@@@@@@#$%&%$##@@@#@@@@@##$$%%&&%%$$$#@@@@@@@##$$%&&%%$$$@@@@@@@@@@##$&&%%$$$#@@@@@@##$$%%&%%$##@@@+++@@###$%&&%%#@+oXXXXXoO@#$%%%&%$##@@+@##$$@@@@@##&&%%$###@@@@@@@###$%&%%$$OooXXXXo@#$%%&&&%%%$@@@##$$##@+@@##&&&%$$##@@@@@@@###$%&%$$#@+@@#@#@@@##@@#&%%##@@@@@#$#@@@@###&&%%$$##@@@@@##$$%%&&",
+"&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$#$#$$$$%%&&%%$$$$#$$$$$$%%%&&&&&&%$$$$$$$$$$$$%%&&&&&%%%$$$$$$$$$$$%%&&&&%$$$$$$$$$$$$%&&&&%%$$$$$$$#$$$$%%&%&%%$$#@@@@@@@#$$%%&&&&%%$#$$$$$$$$$$$$$%&&&&%%$$$$$#$$$$$%%&&&%$$##@@@@@##$$&%&&&&&%%$$$$$%$$$$$#$$%&&&&%$$$$$$#$$$$$%%&&%%$$$$$$$$$$$#$$$$$&&%%$$$$$$$$$$$$$$$%&&&&%&$$$$$$$$$%%&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%%%$%$$%$$%%%%&&&&%%%%%$%$$%%%%&%&&&&&&&&%%%$%$$%%%%&%&&&&&%&%%%$%$$%$%%%%%&&&&&&%%%$%$%%%%&%&%&&%%%%$$$$$$$$%%%&&&&&%%$$$######$$%%&&&&&%%%%$$%%%%%$$%%%%%&&&&%&%%$%$%$%%%%%&&&&&%%$$#####$$%%%&&&&&%%%%$%%%%&%$%$%%%%&&&&&%%%$$%$$%%%%%&&&%&%%$$$%%%%$%%$$%%%&&%%%%$$%%%%%%$%$%%%&&&&%&%%%$%%%%&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&%&%%%%%%%&&&&&&&&%&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$%%&%&&&&&&&&&%%$$$%%&&&&&&&&%&%%$$$$%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$@@#$$%&&&&&&&&%%%$#@@$$%%&&&&&&%&$$$@@$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%$$$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$##++#$$%%&&&&&&&&%$#@+@#$%&&&&&&&&%$##++##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$##@@++##$&%&&&&&&%%$$@+++#$$%&&&&&&&%$$#+O@@##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&%&%&&&%&&&&&&&&&&&&&&&&%&%%&%&%&%&&&&&&%&%&&%&&&&&&&&&&&&&&&&&&&%&%&&%&&&&&&&%$#@@OO#$%%&%&&&&&&&&&%%&&&&&&%&&&&&&&&&&&%&&%&&%&&&%&&&%&&&&&&&%&&&%&&&&&%&&&&&&&%&%%&&&%&%&%&&&&&&&%&&%&&&&&%&&&&%&&&&&&&%&%&%%&%&%&%&&&&&&&%$$#ooooO#$%%&&&&&&&&%$#@...@#$%&&&&&&&%$$#Ooooo#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%%%&&&&&%%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%&%&%%$$@++Oo##$$%%%&&&&&&%%%%%%&&%&%%%%&&&&&&%%%%%%%%%%%%%%%%%&&%%%%%%%%&%&%%%%%%&&%&%%%%%%%%%%%%%%&&&&%&%%%%%%%%&%%%%%%%&&&&&%&%%%%%%%%%%%%&&&&&&&%$#@oXXOO#$%%&%&&&&&&%$#@...@#$%%&&&&&&&%$#OOXXo@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%%%$$$$$$$$$$$%%%%%&&&%%%%$$$$$$$$$%$%%&&&%%%$$$$$$$$$$%%%&&&&&%&%%%$$$$$$%$%%&&&%$#++OXX@@#$$%%%&%&%%$%$$%%%%%$$$$%%%%&%%%$$$$$$%$%$$$$$$%&&%%%$$$$%%%%%$$$$$%&&%%%$$$$%$%$$$$$%%%&%%%$$$$%%%%%$$$$$%%&&&%%%$$$$$$$$$$$%%%&&&&%%$#@...+@#$%&&&&&&&&%%$#+...+#$%&&&&&&&%%$#@+...@#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%%$$####@#####$$%%%&%&%%$$##########$$%&%%$$$##$#$#####$$%%&&&&%%$$$#######$$$%&%%$#+OOXX+@@##$$%%&&$$$#$#$$$%$$$#$$$%%&%%$$#####$#$#####$$&%$$$###$$$$$$$##$#$&%$$#####$#$####$$%%&$$$##$#$$$$$$##$$$$&&&%$$$####@####$$$%&&&&&%$#+...+##$%&&&&&&&&%%$#+. .@@$$&&&&&&&%%%##+...+#$%%&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%$#@@@+@@@+@@@##$$%&&%$$##@@@+@+@+@@@#$&%$$#@@@@@@@@@@@##$%&&&&%$$#@@@+@@@@@#$$&%$#@OOoXX+++@@#$$%%&$##@@@##$###@@@#$$%&%$#@@@@@@@#@@@@@@@#&%$##@@@@#####@@@@##&%$##@@@@@#@@@@@@#$%&$##@@@@##$##@@@@@#$&%%$$#@@@+@+@+@@@#$$&&&&%%##@...+@$%%&&&&&&&&%%##@...+#$%%&&&&&&&&$$#+...+#$%&&&&&&&&&%%&%%%%%%%&%&%&&&&&&&&&&&&&&&&&&&&&",
+"$#+O...XX...XX++@$$&%$$@++XX...Xo...OO#&%$#Ooo..OOO..XXo#$%&&%%%#@@oX...Xoooo#$&%$#@... ......+@#%%&#OO...@@##@..ooo#$%&$#+O.....+++.....O+&$#OO...oo@@@oO...OO&$#@.....+++.....@#$&#OO...oO@#@Oo...O+#&%%$#ooX.......ooo#$&&&%&$#@+. .+##%%&&&&&&&&%%$@+...+#$$&&&&&&&&&%$@@ . @@#%%&&&&&%%%%$$$$%$%%$%%%%&&&&&&&&&&&&&&&&&&&&&",
+"$#Oo...XX...XXO++#$&%$#++OXX...XX...OO#&$$#ooX..ooO..XXo@#$&&&$$#@+XX...XXXoo@$&%$@+.. . .....+@#$%&#OO...++@@@..Xoo@$$&$#Oo.....+O+.....oO&$#Oo...oo+@+oo...oO&$#@.....+O+.....@#$&#OO...oo@@@oo...oO#&&$##ooX.......Xoo#$&&&&%$#@+...+#$%&&&&&&&&&&$$#@...@@$%%&&&&&&&&$$#+...+@#$%%&&&&%%$$$#$##$##$#$$%&&&&&&&&&&&&&&&&&&&&&",
+"$#Oo...XX...XXoO+@$&$#@+OOXX...XX...oO#&%$#ooX..ooo..XXX@#$&%%$#@++XX...XXXXo@#&%$#+... ......+@#$&&#Oo...++@@@..XXo@#$&$#Oo.....OOO.....oO&$#Oo...Xo+++XX...oO&$#@.....OOO.....@#$&#Oo...oo+++oo...oO#&%%#@oXX.......Xoo#$&&&&%$#++ ..+##%%&&&&&&&&&$$@+. .+#$$&&&&&&&&&%$#+. .O+#$%%&&%%$$##@@@@@@#@@###$&&&&&&&&&&&&&&&&&&&&&",
+"$#@+... .oOoXX...@#&$#@...XXoOo. ...+@#&$$#++O.....oOXoo@#$&&%$#ooX..ooOXXXXX@$&%$#@ooXXXoOOO+##$%%&#++...O+@@@OoXXX@#$&$#@+...oo+O+Xo...+@&$#+O. .OOXXXOO...O+&$$@OOo..OOO..oOO@$$&#@+...oo+++oX...+@$&%$##XXXooXoX. OO+#$&&&%%$#oX...+#$%&&&&&&&&&%%$#@...@@$%%&&&&&&&%$$@@...Xo##%%&&&%$#+OO..ooo++XXo##&&&&&&&&&&&&&&&&&&&&&",
+"%$@+XXXoo+++++...+@&#@+...O++++ooXXX+@$&%$$@+O. . .OOooo##%&&%$#oXX..OoOXXXXo@#&%$$@OooXXoO+++#$$%&&#@+...O+@@@ooXXX@#$&%#@+...ooO+Ooo ..+@&$#+O...OOXXXoO ..++&$$#+Oo..O+O..oO+#$%&$#@Ooo..+++..ooO@#$&&%$@oXXXoooX. O++#$&&&%$$@oo...@@$%%&&&&&&&&%%$@+. .+#$%%&&&&&&&&%$#+...Xo##%%&&%$$@+OO..ooo++XXX@#&&&&&&&&&&&&&&&&&&&&&",
+"%$#@XXXoo@+@+O. .+@&$@+ . +++@+OoXXX+#$&%%$#@+..OO++@@@##$%&%%$#+OO.....OoOO+#$&%%$#+OoXX++@##$$%&%&$#+XXXO+@@@OOXXX@#$&%$#@OooXX+++XXooO@#&$##+XXXoo  .OoXXX+@&&$$#@@oo...oO+@#$$%&%$@OOo..O++..oOO##%&%$$#++OOO  .oo+@#$%&&&&$$#oX...+#$%&&&&&&&&&&$$#@...@@$$&&&&&&&&%%##@...Xo#$%%&&%$#@...oo.. ..Xoo@#&&&&&&&&&&&&&&&&&&&&&",
+"%$#+XXXoo++++O...+@&#@+...+++++oXXXX@#$&%%$#@+..OO+@##$$$%%&%%$#+Oo.. ..oOOO+@$&%%$#+OoXX+@##$$%%&%&$@@XXXO+##@+OXXX+#$&%%$@+OoXX+++XXOO+@$&%$@@XX.oo. .ooXXX@#&&%$#@@Oo. .oO+##$%%&%$$@++. oOo..O+@$$%&&%$$@++OO...oO@@#$%&&&&%$#++...+##%&%&&&&&&&&$$@+. .+#$$&&&&&&&&%%$@@...++#$%%&&%$@+...oo... .XXo@$&&&&&&&&&&&&&&&&&&&&&",
+"%$#+XXX .oOoXX...@@&$@@...XXoOo. XXX+#$&&%$$#+..O++##$$$%%&&%%$#+OO.....ooOO+##&%%$#+OOXX+@##$$$%%&&$#+XXXO+@@@OOXXX@@$&&$$#+OOXX+O+XXoO+#$&%$#+XXXoo . oO.XX@@&%%$$#+Oo...oO@@$$%&&&&%$#@oo.  oo@#$%&&&&%$#@++OO  .oO+##$%&&&&&%$#+ ..+#$%%&&&&&&&&&$$#@...@@$%&&&&&&&&&$$#+. .@@$%%&&&%$#@ ..oo ....ooo#$&&&&&&&&&&&&&&&&&&&&&",
+"%$#+XXX .oooX....@#&$#@...XXooo .XXX+#$&&%$#@+..O++##$$%%%&&%%$#++OOoXoX..XXo@#&%%$$+OOXX+@@###$$$%&$#@XXXOO@@@OOXXX+#$&&%$$@++..OO+..+@#$$&%$#@XXXXX.....XXX@#&&%$#@@oo...oo+##$%%&&%%$#@oo . oo##$%%&&&%$$@++..XoXO+O+@$$&&&&%%##+...+##%%&&&&&&&&&%$@@. .+##%%&&&&&&&&%##+...+#$%%&&&%$$#+++@@+++OO+@@#$&&&&&&&&&&&&&&&&&&&&&",
+"%$#+XXXXX...XoO++#$&%$#++OXXXXXXXXXX@@$&%$$#@+..O++@#$$%%&&&&$##+OOOOXoX..XXX@#&&%$$++oXX++@@@@##$%&$#+XXXOO+++OO.XX+@$&&&%$#@+..OOO..@@$$%&%$#@XXX.X.....XXX@#&%$$#@+oo ..oo+@#$$%&&&%$$@OO. .++#$%&&&&%%$#@+O..oXoO+O++#$&&&&%%$#@. .@@$%%&&&&&&&&%$$#+...+#$%&&&&&&&&%$$@@ ..@@$$&&&&&%$$@@@@@@@@@+@@#$%&&&&&&&&&&&&&&&&&&&&&",
+"%$#+XX.XX...Xo+@@$$&%$$@++XXXXXXXXXX+#$&%$#+OO .ooOO+##$%%&&&$$@XXXXXooooo...+#&&%$$@+O. ooOXXoOO#$&$#@XXXXXOOOXX...++$&&%%%$#@oo.. oo@#$%%&%$#@Ooo. OOO  ooO@$&%$#OOo..OOO..ooO#$%&&%$$#@ooXXX@@$%%%&&&&%$@ooX..oooooXXo@$&&&&%%$@@...+##$%&&&&&&&&&%$#+...@#$$%&&&&&&&&%$@@.. @@$%%&&&&%%$$$$$$#$##$$$$%%&&&&&&&&&&&&&&&&&&&&&",
+"%##+XXXOo+++@@@#$$%&&%$$#@@+++Ooo.XX@@$&%$#OOo..ooOOO@#$%%%&%$#@XXX.XoooXo  .+@&&%%$@+O..oooXXooO#$&$$#oXXXXOooXX...++#&&&&%$#@oo ..Xo@#$%&&&%$#OOo .OOO..oOO#$&%##Ooo..OOO..ooO#$$&%%$#@+oXXXo+##%&&&&&%$##oXX .ooooXXXX@#&&&&&$$#@...++$$%%&&&&&&&%%$#@XXX+#$%&&&&&&&%%$#@+...@#$%&&&&&&%%%$$%$%$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&",
+"%$@+XXXoo++@@#$$$%%&%%%$$$#@@++OOXXX+##&$$@OOo. oooOO@@#%%&&%%$@XXXXXooooo. .@#&&%%$#@+..oooXXooO#$&%$#ooXX.OoOXX...O@#&&&%%$$@oo...oo#$$%&&%%$#+OO..++O .OO+#$&$$@ooo .O+O..ooo@$$&%$#@++XoXXX@#$%%&&&&%%$@ooX..ooooXXXo@#&&&&&%$#+...+@#$%%&&&&&&&%%$#@oXo@#$%&&&&&&&%%$#++...@#$%%&&&&&&&&&%&%&%&%&%&&%&&&&&&&&&&&&&&&&&&&&&&",
+"$$@+XXXoO+@@#$$%%%&&&&&%%$$#@@+ooXXX+@$&$#@.....XXX..+@#$%%&%$$#ooXoX.....OO+@#&&&%$$#@OO...XXO+@$$&%$##@+XX...XX...O+$&&&&&%$#@+XXX+@#$%&&&&%$$@++oo++@oo++@$$&$#@...XXO+O.....@#$&$##... ....@#$%%&&&&%$$#ooo.......ooo#$&&&&%%$$@...++#$%%&&&&&&&&%%$#ooo#$%%%&&&&&%&$$#++...@#$%&&&&&&&%&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"$#Oo  ...oOO#$%%&&&&&&&%&%$#+oO.. . OO#&%##.....XXX..@@#%%&&&%$#OOooo.....+++#$&&&&%$$#+O...oo+@@$%&%%$##@oX...oo...++$&&&&&%%$#@Xoo@@$$%%&&&%%$#@+OO@#@OO+@@$%&%##...Xo+++.....##%&$#@...   ..@#$%&&&&&&%$#Ooo.......ooO#$&&&&&%$$#+++oo@#$%%&&&&&&&%%$##@##$%&&&&&&&%%$##ooO++#$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"$$OO.. ..oO+$$%&&&&&&&&&%%$#+Oo.. ..o+#&%$##@@@@@@@@##$$%&%&%%$$##@@@@@@@@@#$$%&&&%%%$$##@@@@###$$%&&%%$##@@@+@@@@@@##$&&&&&%%$$##@##$$%&&&&&&%$$$#########$$%%&%$##@@@@@##@@@@##$%&%$#+OOOOOO+@$$%&&&&&%%$$##@@+@+@@@@##$$&&&&&&%$$@@+OO##$%&&&&&&&&&%%$$$$$%%%&&&&&&&%$##OO+@@$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"$#@+OOOOO+@@$%%&&&&&&&&&&%%$@@+OOOOO+@$&%%$$##@#@####$$%%&&&&&%$$$$########$$$&&&&&&%%$$$####$$$%%&&&&%%%$$####@####$$%&&&&&&%%$$$#$$$%&&&&&&&&%%$$$$%$$$$$%%%%&%%$$###$#$#$###$$$%&%$#@+++O+++#$%&&&&&&&&%$$$######@###$$%&&&&&&&%$$####$$%%%&&&&&&&&%&%$%%%%&&&&&&&&&%%$$####$$%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%$#@++OO+@@#$%%%&&&&&&&&&%%$#@@O+OO+@#$&&%%$$$$$$$$$$%%&&&&&&&%%%$$$$$$$$$$%%&%&&&&&&%%%$%$$$$%%%&&&&&&&%%$$$$$$$$$$$%%&&&&&&&%%%$%$%%&%&&&&&&&&%&%%%%%&%%%%%&&&%%%$$$$$$%$$$$$$%%&&%$$@+++++@@$$%%&&&&&&&&%%$$$$$$$$$$%%%%&&&&&&%%%%$$$$$%%&&&&&&&&&&&%&&%%&&&&&&&&&&&&%%$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%$##+@+@+##$$%&&&&&&&&&&&%%%$##@+@@@@#$&&%&%%%%%%%%%%&%&&&&&&&&%&&%%%%$%%&%&%&&&&&&&&&%&%%%%%%&&%&&&&&&&%&&%%%%%%%%&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&&&%&&&%&&&&&&%&&%&%%&%&%%&%%&%&&&&$$$$#$#$$$%&&&&&&&&&&%&&%%%%%%%%%%&&&&&&&&&&%%&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%&%&%&&&&&&&&&&&&&&&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&%&%&&&&&&&&&&&%%&%%&&&&&&&&&&&&&&%&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$%%%&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&%&%%%%%&%&&&&&&&&%$%%%%%&&&&&&&&&&&%%$$$$$$$%%%&%&&&&&&&&&&&&&&&%&&&&&&&&&%&%%%%%%%%&%&&&&&&&&&&&%%&%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&%&&%&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$%%%&&&&&&&&%%%%$$$$$%%%%&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$%$%$%$$$%%&&&&&%%%$$$$$%%&&&&&&&&%%%$$$######$$$%%&&&&&&&&%&%%&%&%&&&&&&&&&%&%%$%$$%%%%&&&&&&&&%&%%%%$%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%$$$%%%%%&&&&&&&&%%%%%%%%%%&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$##@##$%%&&&&&&&%&%$$$$###$$%%&&&&&&&&%&%&&&&%&%&%&&&&%%$#####$$$$###$$%&&&&&&%$##@#$$%%&&&&&&%&%$$#@@@@@@@@#$$%&&&&&&%%%%%%%%%%%&%&&&&&%%$$$$##$#$$%%%%&&&&&&%%$$$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$#$#$#$$%%%&&&&&&%%%$$$$$$%%%%&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##ooo@#$%%&&&&&&%%$$@@+++++#$$%%&&&%%%%%%%%&&%%%%%%&&%%$#+++++@#@++++@#$&&&&%%%$#ooo@$$%&&&&&&%%$$#OO.....ooO#$%&&&&%&%%$%$%$$$$%%%&&&%%%$$#@@+++@@#$$%%&&&&%&%$#@@++##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$#@@+++@@#$$%%&&&%&%$$$#####$$%%&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&%$$@@XXX@##$%%%&&&%%%##@++OO++##$%&&&&&%%$%$%%%$%$%$%%%&%$##OoOO++@@++OO+@$&&&&&%$#@XXo@#$%&&&&&&&$$#@oo.....ooo#$$&&&%&%%$$#$$$$$#$$%&&%&%$##@+++O++@@@$$%&&&&&%$$@@++++@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$##@+++O++@@##$%&&&&%$$#@@@@@@#$$%%%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&&&&&&&&&&&%%%$#+O...O+##$%%&&&%$$@@.......+@#$%&%%%$####$$$$$####$%&%$#+... .+OO. ...@@&&&&&%$#@...@#$%%&&&&%%$@++..ooooXXXX@#%&&&%%$##@+O##@oo#$%%&%%$$++O.......O++#$&&&%%%$#OooOo..@$$%%&&&&&&&&&%&&&%&&&&&&&&&&%&%&&%&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$++O.......O++#$&&&&%$#oo.....@@#$&%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&%&&&&&&%&$$#@OO ..O+@##%%&&&%$#@+.......++#$%&&%$$@@@@@#@#@#+@@$%&%$@@ . . O+O .  .+#&&&&%$$#+...+#$%&&&&&%$$@+O..oooooXXX##$&&&&%%##@OO#@#oo#$%%&%$$#OOo.......oOO#$&&&&%$#@ooOoO..@#$%&&&&&&&%&%&%&%%%%%%%%&&&%%%%%%%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&%$$#OOo.......oO+#$&&&%$$#oo.....+@#$%&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%$%%%%&&&&&&%%$#@@OO. .OO+@#$%&%&%$#@+..... .+@#$%&&%$#@+++@+@+@+++@#$&%$#+. .. OOO. . .+#&&&&&%$@@. .@@$$&&&&&%$#@+O .oooXoXXX#$$&&&&%%#@@+O##@oo#$%%&%$#@OOo.......oOO@#&&%%%$#@ooooo..@#$%%&&&&&&%%$%$%%$%$%%%%&%%%%$$$$$$$$$$$$%%%&&&&&&&&&&&&%&&&&&&&&%$#@OOo.......ooO@#&&&&$$#oX.....+@#$%&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$##$%%%&&&&%%$#+Oo..... .O+@$%&&%$$++O..O++++@##%%&%%##ooX.......Xoo##&%$#@OOo..+O+..oOO@#&&&&%%$#+...+#$%%&&&&$$#OOo. ooo+OO++@$%&&&%%$$##@@###@@#$%&&$$@+...XX...XX...@@&&&%$#@@XXXXX..@@$%%&&&&%%%$$#$#$$#$#$$%&%%$####@#@#@###$$%%&&&&&&&&&%&%&&%&&%&&&%##+..... ..XX...+@&&&%%$#+++OOOO@##%%%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%&%$###@#$%%%&&&%%$#OOo. .... ++@$$&&%$#+OO..++++@@#$%%&%$#@oXX.......XXo@#&%%$#OOo..O+O..oOO#$&&&&%%$#+...+#$%%&&&&$#@Ooo. oooO+OO+#$%&&&&&%$$$##$$#@#$$%%&$#@+...XX. .XX...+@&&&%$#@+oXXXX..+##%%&&&&%$$##@#@@#@@###$&%$##@@+@+@+@+@@@#$%&&&%%%%%%%%%%%%%%%&&&$#@+........XX...+@&&&&%$$@++++@+##$%%&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%%$@+++@$%%&&&&%$#@oXXoo+++XXO+@$%&%%$#++oXX+@@##$$%%&&%%#@oXXXXoooXXXXo@#&&%$#@++..ooo..++@#$&&&&%%##@ ..@@$%&&&&&$#@...oo...XXO++#$%&&&&&%%$$$$$%$$$%%&&&$#OoXXX .oooXXXoooO&&%%$@+OXXOOO..+@#$%&&%%$$#+Oooo++XoX++$&$#@.............@#$&&&%%%$$$$$$$$$$$%%&&$#OoooX..ooo..ooooO&&&&&%$$$#####$$%%&%&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%%$$+++O+#%%%&&&%$#@XXXoo+++oo++@$%&&%$#OOOXXO+@##$$%&&&%$#@oXXXXOOoXXXXo@#&%&%$#++..ooo..++#$$&&&&%%$#@...@#$$%&&&&$@+...Xo . XXOO+##%&&&&&&&&%%&%%%%%%&&%&$#OoXXX..oooXXoXooO&&%$$++OXXoOo..+@#$%&&%$$#@ooXoX++XXXO+#&$#@.............@@$&%%%$$#####@####$$$%&$#Ooooo .ooo. oXooO&&&&&%%$$$$$$%%%%&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%$$+OO++#$%&&&&%$#@XXXoO+++oo+@#$%&%$##OOoXX+++@#$%%%&&%$#@XoXXXoooXXXXX@#&&%%$#@+..ooo..+@@$%&&&&&%$#@. .+#$%&&&&&$@+...oX.. XXOO+@$$&&&&&&&&&&&%&&&%&&&&&#@OoXXX .oooXXooooO&%&$$@+OXXOOO .+@#$%&%$$#@@ooXXXOOXXXO+$&$#@.............+@$&&%$##@@@+@@+@@@##$%&#@oooXo..ooo..ooooO&&&&&&&&&%%%%%%%&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%$#@@+++#$%%&&&%$#@XXXoO+@++@@#$$%&%$#@... ....++$%%&&&%$#@XXXOO+O+ooXXX@#&&%%$#@+oX   XX+@#$%&&&&%%$#@OOO@#$%%&&&&$#+.. XXoooXX...+#$&&&&&&&&%&&&&&&&&&&&&$@oXoXX..+++oooooXo&&&%$@++XXXXXXXO+@$%&%$#+OO..OOOXXXXX@@$&%$#++OOOOOOoO...+@#&%$$OOo..........##%&$#oXooo .XXXXXoooXo&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%%$#@++++#$%%&&&%$#+XXXOO+++@+@#$$%&%$#@. . ....O+$$%%&&%$#@XXXoo+O+ooXXX@#&&&&$$#@XX. .XX+@#$%&&&&&%$#@OOO@#$%&&&&&$#@...XXOoOXX ..+@$&&&&&&&&&&&&&&&&&&&&&##oXXXX..OO+OooooXo&%%$$@@+XXXXXXX++@$%&$$@Ooo .OoOXXXXX@#$&$$#@++++++OOo...+@$&%$$OOo..........@#$&#@ooooo. X.XXXoooXo&&&&&&&&&&&&%&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%$#Ooooo##%%&&&%$#@oXXXXOOOoo+@#$%&%$#@OOO. ooO@@#$%%&&%$#@XXXXXOoOXXXXo@#&&%&$#@+oo . oo+@#$%&&&&&%$#@XXX@#$%%&&&&%$$@+OXX ..Xo ..+@$&&&&&&&&&&&&&&&&&&&&&$#+O..........XXXO+&&%%$@+O.......++@$%&$#@...oXooo. OO+@#$&%%$$####@#@@+...+@#&%$$@++OOOOOOOOO+#$%&$#OOXXX .oooXXXXXO+&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$$@Ooooo@$$%%&&%%#@oXXXXOOOXX++#$%&&$$@+oo..OoO+@#$$%%&%$#@oXXXXoooXXXXX@#&&&%$#@+oX. .Xo+@#$%&&&&%%$#@XXX@#$%&&&&&%$##@+++oOo. XXX@#$&&&&&&&&&&&&&&&&&&&&&$#+O.. .. . ..XXXO+&&%%$#++.......++@$%&%#@...ooooo..OO+@$$&&%%%$$$$$##@+...+@$&&$$@@+++OOOOO++@#$%&$#+OXXX..oooX.XXXO+&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#@.. . @@$%&&&%%$#ooXXXooOXo+@#$%&%$$@+Oo. ooO+@##$$%&%$#@oXXXXOooXXXXo@#&&&%$#@+oo . oX+@#$%&&&&%%$#@XXX@#$%%&&&&%$##@+++OOo. XXX@#$&&&&&&&&&&&&&&&&&&&&&$#++......... XXXO+&&%%$#@+.......+@@$%&$#@.. oXooo .oO+@#$&&%%%%%%%%$$#@...@@$&&%$##@++@+@++@@@$$%&$#+OXX...oooXXX.XO+&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#+... .+#$$&&&&%$#@++XX . XX+@#$%&&$#@Ooo..++++@+@@$$&&$$@ooX..... .Xoo@$&&&%$#@+oO . OO+@#$%&&&&&%$@@...+#$%&&&&&%$#OooOO+O+..oOO##%&&&&&&&&&&&&&&&&&&&&&%$#+oXXXXXXo.XXXo@#&&&%$#@@+OOoOOO@@$$%&$$#OOo..oOoXXXXX@#$&&&&&&%%%%%$$#+++@$$&&%%$$$$$######$$$%&&%$#@oXX..ooo..XXo@#&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$@@... .+##%&&&%%%$#@+XX . XX@#$$%&%$#@Ooo .O+++++++#$&%%$@ooo.......Xoo#$&&&%$#@+OO. .oO+@#$%&&&&%%$#+...@@$$&%&&&%$@OooOO++O..OO+#$%&&&&&&&&&&&&&&&&&&&&&%$##oXXXXXXXXXXXo@#&&%&%$##++O+O+@##$%%&%$#+OO..oOoXXXXX@#$&&&&&&&&&&%%$$@@@#$%&&%&%%$$$$$$%$$$%%&&&%$#@ooX..ooo..Xoo@#&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%$#+. . .+#$$&&&&&%$$##++...+@@$$%&&%$@@. .. ........+#&%%$#++++++@+@++++#$&&%%$#++.. . ..++@$%&&&&&%##@...+#$%%&&&&$$@ooXOO+O+..O+@#$%&&&&&&&&&&&&&&&&&&&&&%%$#@+Ooo...XX++@#$&&&%%%$$$######$$%%&&%$$#@+ooXXXOOXXXO+#&&&&&&&&&&&%$$$$$$%%&&&%%%&%&%&%%%%%&&&&&%%$#@++oo...oX++@#$&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&$$#@... .@@$%%&&&&&%%$#@+. .+@#$%%&&%$#+. . ...... ..@#&%%$$@@+@@@#@#@@@@$$&&%%$@@O..  ...+@@$%&&&&&%$@+. .@@$%&&&&&$##XXX.......+@@$%%&&&&&&&&&&&&&&&&&&&&&%%%$#@+Oo...oo+@#$$&&&&%&%$$$$$$$$%%%&%&&%$$#@OooXoO+XXXO+#&&&&&&&&&&&&%%$$%%%&&&&&&&&%&%&&&&&&%&&&&%%$$#@+oo...Xo+@#$$&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#@. . .@#$%%&&&&&&%$$#@...@#$%%&&&%$#@.. . ........@#&&&%$#####$#$#$@##$%&&&%$#@+...  ..+@#$%&&&&%%$#@...+#$%%&&&&%$@oXX. .....@@$$%&&&&&&&&&&&&&&&&&&&&&&&%%$##@OO...oO@##$%&&&&&%%&%%%$%%%%%&&&&&%%$$#OOooo++XXX+@$&&&&&&&&&&&&&%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&%$##@Oo...oO@@#$%&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%$#@ooXoo@#$%&&&&&&&&%$$#+++##$%&&&&%$#@+OOOOOOOoOO++@$&&&%%$$$$$%$%%$$$%%%&&%%$##@+OOOOO+@@#%%&&&&%%$#@...@#$%&&&&&%$#++OooOOO++##$%%&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@@@@@##$$%&&&&&&&&&%%&%&&&&&&&&&&&&%$$##@@#@#@#@##$&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$#@@@@@##$%%%&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%%$#OOooo@$$%%&&&&&&&%%$#@+@#$%&%&&&%%$#@++++O+O+O++@#$&&&&&%%%%%%&%%&%%%&&&&&%%$##+++++++##$%%&&&&&%$#@...@#$%%&&&&%$$@++OOOO+@##$%%&&&&&&&&&&&&&&&&&&&&&&&&%&&%%$$$####$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$$#$#$#$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$####$$%%&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&$$#OOoOO#$%%&&&&&&&&%&%$$$$$%%&&&&&&%%$$##########$$$%&&&%&&&&&&%&&&&&&%&&&&&&%%$$$######$$%%&&&&&%%$$@+++@$$%&&&&&%%$#@@++++@@#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$$$$$$%$&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$%$%$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$%$$%%%%&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&&%%$#####$$%&&&&&&&&&&&%%%$%%%&&&&&&&&%%$$$$#$#$$$$$%%%&&&&&&%&&&&&&&&&&&&&&&&%&%%$$$$$$$$%%%&%&&&&&&%$#++@#$%&&&&&&&%%$$$$#$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&%%%%&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%&%%&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&&%&%%$$#$$$%&&&&&&&&&&&&&%&%%&&%&&&&&&&%&%%%%%%%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&&&&&&&&&%%%$#@@$%%%&&&&&&%&%$$$$$$%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%$%$$$%$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$$$$%&&&&&&&&&&%$$$$$$%%&&&&&&&&&&&%%$$#$#$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&%%%$$$$$%%%&&&&&&&&&&&&&&&%&&&&&&&&&&&&&%%%$$$$$$%%&&&&&&&&%%%$$$$$$%%%&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$#$#$#$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$%$%%&&&&&&&&&&&&&%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$##@##$%%%&&&&&&&&$$##@##$%%%&&&&&%&&&%$#@#@@##$$%%%&%%&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&%$$#@@@#$$%%&&&&&&&&&&&%&&%&%&&&&&&&&&&&%$$#@@@@#$$%%&&&&&&%$$#@@@@#$%%%&&&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$@@++++++@@$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$###$$%%&&&&&&&&&%&%%%$%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%$@+ooo@@$%%&&&&%&&&$@+ooo@@$%%&&%%%%%%&$@@ooooo+@#$%%%&%%%&&&&&&&&&&%&%%&&&&&&&",
+"&&%%$$#@+++@#$$%&&&&&&&&&&&%%%%%%&%&&&&&&&%%$$#@++++@$$%%&&&&%%%$#@+++@@#$%%%&&&&&&&&&&%%%$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&%&%$$##++++O+O+++#$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$@@+@$$%&&&&&&&&&%%$$$$$#$$%%%&&&&&&&&&&&&&&&&&&&&&&&$$++ooo+@$$%%%&%%%%&$++ooo+@$$%%%%%%$$%&$@+oXXXo++@$$%%%$$$&&&&&&&&&%%%%%%%%&&&&",
+"&&%%$#@@+O++@#$$%%&&&&&&&%&%$$$$$%%&&&&&&&&%$#@++OO++##$%%&&&&%$#@++OO++@#$%%&&&&&&&%%%$$$#$$$%%&%&&&&&&&&&&&&&&&&&&&&&&%%$##@++OOOOOOOO+#$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##@+++#$$%&&&&&&&&%%$##@#@##$$%%&&&&&&&&&&&&&&&&&&&&&&$#+OXXX++$$%&%%%$%$&#+OXXX++#$%%%$$#$$$&$++oXXXX++@#$$$$$$$&&&&&&&%&%$$$$$%%&&&&",
+"%%%$#@XXOoOXo@#$%&%&&&&&&&%$$@@@$$%%&&&&&&%%$#oXOOoXX+@#$%%&&&$$#oXOooXo+@#%%%&&&&&&&%$$@@@O+$$&%&&&&&%&&&%&&&&&&&&&&&&&%$$@ooX..   . ...@#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%$#@Oo. .@#$%%&&&&&%%$$#+Oooo++#$%%%&&&&&&&&&&&&&&&&&&&&&$$++...O+#$%%%$$$##&$++...O+#$$$$#@@oO$&$OoOoooXooO##$#@+O@&&&&&&&&%$$###$$%&&&&",
+"&%$$#@XXoooXX@##$%&&&&&&%%$$#+@+#$$%%&&&&&&%$#oXoooXX+@#$&&&&%%$#oXoooXX+@@$%&&&&&&&%%$#+++OO$$%&&&&&&%%%%%&%&&%%%%%&&&&%$#@oXX... . ....@#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$##Oo. .@#$%&&&&&&%%$##OOXoXOO@#$%%&&&&&&&&&&&%&&&&&&&&&$#++...O+#$$$$$#@@@&#+O...O+#$$$#@@+oO#&#+OoooXoooO@##@@OO+&&&&&&&&%$#ooo#$%%&&&",
+"%%$@+OXX++OXX++@$%%&&&&%&$$#@...@#$%%%%&&&&$$#+OOOOXX+@#$%%&&&$$#+OOoo..+@#$%%&&&&&%%$#@oXX+@#$%&&&&&%%%%$%%%%%%%%$%%%&&$$@+ . OO.. XXoOO@$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@+...@@$%%&&&&%%$#@+XX+OOXX+@#$%&&&%&%%%%&%&%%&%&&&&&%##+XXXO+#$$$#++OoO&##@XXXO+###@@ooo++#&$@@OOo..OO+@@+OOoo@&&&&&&&%%$#ooo#$%%&&&",
+"%%$@+OXXO+OXXO+@$%%&&%&%$$#@@...+@#$$%%&&&%%$#+O+OOXX+##$&%&&&%$@+Oooo..+@#$%%&&&&&&%$#@XXo+@$%%%&&&%%$$#$#$$$$$$#$#$$%&$$@+ . Oo ..XXoO+##&&&&&&&&&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@+. .+#$%%&&&&%%$@++XXOOOXX++@$%&%&%%%%%$%%%%%%%%&&&&%$@@XXXO+@#$##OOOoo&$@+XXXOO@##@+oXXO+#&$#+Ooo..OOO+@OOooo@&&&&&&&%$$@+O+##%%&&&",
+"&$$@+OXXO+OXXO+@$%&&%&$$$#@++ ..+@@#$$%&&&&%$#+OOOOXX+@#%%&&&%$$#+OOoo..++#$%%&&&&&%%$#@oXo@#$%%&&&&%$##@@##$$$##@@##$%&$#@+.  OO. ..XOO+#$&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@+...@@#%%&&&&&$$@+OXX+OOXX++@$$&%%$$$#$$$$$$$$%%%&&&$$@+XXXOO@###@OOooo&$#+XXXOO@@@++XoX++#&##@Ooo .OOO++Ooooo#&&&&&&&%$$@+O+@$%%&&&",
+"&%$#@+XXoOoXX+@#$%&&%%$#@++OO. .OOO+@#$&&&%%$#@+XXXO+@#$$%&&&&%$#++oooXXO+@$%%&&&&&&%$#@@++##$%&&&&&$$+OoXo+@##@..OoO#$&%#@+ . Oo.. XXoO+#$&&&&&&%&%$$$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$@+. .+##%%&&&%&$$@+OXXO+OXXO+@$$&%$$@+@@#@@@@@#$$%%&&$$@+XXXO++@@OOXoX+@&#@+XXXOO@+@Xoooo@@#&#+oOOoooXoooOXXX+@#&&&&&&&%$#@+OO@#$%&&&",
+"%%$$#@XXOOOXX@##$%%&%$$#+OOOO ..oOOO+#$&&&&$$#+OXXXOO@#$%%%&&%%##+OoooXX++@$$&%&&&&&%%$#@@#$$%&&&&&&$#OoXXX++@#@..ooo##&$$@+  .oo ..XXOO+#$&&&&&&&%$$#@##$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&$##+...+@$$%&&&&%%$@+OXX+OOXXO+@$%&%$#++O@@+@+++@#$$%%&$#@@.XXOO+++OOXXo@@&$@+XXXOO+++XXooo+@#&#OOOOooXoXXOooXo+##&&&&&%%$$#@XXX@$$%%&&",
+"&&%$##@+OoO+@##$%&&&%$#@.....   .....@@&&&%%##XXXXoXo+@#$%&&&%$$@..OooXXO+@$%%&&&&&&%%%$$$$$%%&&&&&&$#@+...O+@@@OoXXX@#&%$#@oXX... .XXo++#$&&&&&%%%$@+oXo#$$%&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#+O . O+#$%&&&&%%$@@+XXoOoXXO@@$%&%$#oXXXoOOO..++@$$%&$#OoXXXXXoooXXooo+@&#ooXX.XXXXXXXXXXoO#&$++XXXXXoooXXXoo+#$&&&&&&%$#@+XXX@#$%&&&",
+"&&%%$#@@O+O@@$$%%&&&%$#@....... .....@#&&&%$$@oXoooXX+@#%%%&&%$##..OOoXX++#$%%&&&&&&&&%%%%%%&&&&&&&&$#+O...O+@@@ooXXX@#&%$#@ooX.. . XXOO+#$&&&&&&%$#++XXX@#%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+O. .O+#$%%&&&%%$#@OXXoooXX+@#$%&$##XXXXXOOO..OO+#$$&$#OXXXXXXoooXXXoo+@&#OXXXXXXXXXXXXXXoo@&$@+XXXXXoooXXooo+@$&&&%%%$#@Oo...@#$%%&&",
+"&&&%%$##+++##$%%&&&&%$#@.....   .....@#&&&&$$@oXooooo+@#$&%&&&%$#..OOOXX+@#$%%&&&&&&&&&%&%&%&&&&&&&&%#@+...O+@@@ooXXX@#&%$$@ooX... ..XOO+$$&&&&&&%$#++XXo@#$%&&&&&&&&&%&%%&%&&&&&&&&&&%&%$#++. .++#$%%&&&%%$#@+XXoOoXX+@#$%&%##oXXXXooO .OOO@#$&$#OOXXXXXXoXXXXoo@@&#OoXXXXXX.X.XXXXoo@&$@+XXXXXoooX.ooo+@$&&&&%$##@oo...@#$%%&&",
+"&&&&%%$$$$$$$%%&%&&&%%$#@@+++...+++@@#$&&&%%$#++OoOOO##$%%&&&%$$#@+OOO++##$%&&&&&&&&&&&&&&&&&&&&&&&&$$@+XXXO+@@@OoXXX@#&&%$##@+Oo...XXO++#$&&&&%&%%#+O...@$$%%&&&&&&&&%%%%%%&&&&&&&&&&&%$$#+O+OOO+#$$&%&&&%$#@@ooXXXoO+@$$%&%$#@+O..XoXoo ..+@$&$$#@+++OOXXXoo...+@&$#@++OoXoXoooOOO..@&$$#@++OO...oo...+@$&&&%$##@+oo ..@#$%&&&",
+"&&&&&%%%$$$%%%&&&&&&%%$$##@++. .++@##$$&&&%%$$@++O+++#$%%%&&&&%$$#@++O+@#$$%%&&&&&&&&&&&&&&&&&&&&&&&%$#+XXXo+@@@+OXXX+#&&%%$$#@+O . XXoO+#$&&&&&&%$$++...##%%&&&&&&&%%%$$$$$%%&&&&&&&&&%$$#+++++++#$$%&&&&%$$@+OooXooo@@#$%&%$#@++..XoXoo...++#&%$$#@@+OOX.Xoo ..+@&$#@@++oXoXoooOOO..#&%$$#@++O...oo ..+@#&&%%$#oooXXOO+@#$$%&&",
+"&&&&&&&%%&%%&&&&&&&&&&%$$#@@+XXX+@##$%%&&&&%%$$#####$$%%&&&&&&&%$$$##$#$$%%&&&&&&&&&&&&&&&&&&&&&&&&&$$#+XXXOO+++OoXXX+#&&&&%$##++.. XXO++#$&&&&&&%%$##@###$%&&&&&&&&&%$$####$%%%&&&&&&&&%%$$$###$$$%%&&&&%%$@+O.......O+@$%&%$#@+OXXXXXOo. .O+#&%%$#@@+XXooooo...+@&$$@OooXX++++OXXXO+@&%$$##+XXooooo...+@#&&%$$@oXXXX+++@#$$%%&",
+"&&&&&&&&%&&&&&&&&&&&&&%$$$#@+XXX+@#$$%%&&&&%%%%$$$$$$%%%&&&&&&&&%$$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+XXXXXOOOXX...+@&&&&%%$#@+....Xo++$$&&&&&&&%%$$##$$%%%&&&&&&&%$##ooO##$%&&&&&&&&&%%%$$$$$$$%%%&&&&&%$@@O.. . ..++@$%&%$#@++XXXXXoO. .++$&%%$#@++XXooooo. .O@&$##OOOXo++@++XXXOO#&%%$#@+XXooooo. .++$&&%$#@oXXXXO++@##$$%&",
+"&&&&&&&&&&&&&&&&&&&&%&%$$##++XXX++##$%%&&&&&&%%%%%%%%%&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@X.XXXOoOXX...+@&&%&%$$#@+. .XXoO+@$&&&&&&&&%%%$%$%%&&&&&&&%&%$#@oXo@#$$&&&&&&&&&&&%%%%%%%%%&&&&&&%%$#++.......+@@$%&%$#@+OXXXXXOo...++#&&%$#@+OXXooooo...++&$#@OooXo@@@++.XXO+#&%$##++XXooooo...++#&&%$#@XXXoo++@Oo@@#$&",
+"&&&&&&&&&&&&&&&&&&&&%&%$@++OOooOO++@@$%&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+XXXXXOoOXX...+@&&&%%$#@+O. ..XooO@$&&&&&&&&&%&%%&%&&&&&&&&&%$#+O...++#$%%&&&&&&&&&&&&%%&&&&&%&&&&%%$$##@@+@@@@##$%%&%$@oXXXXoOO. ooO@#$&&%$#OXXooXooXX. .O+&$@+XXX++@@@oXoooO+#&%$#ooXoooooXX. .OO#&&%$#@XXXoO+++oo+@@$&",
+"&&&&&&&&&&&&&&&&&&&&&$$#++OOOoOoOO++@$$&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@XXX.....XX...oO&&%%$#@+OO. .XXXoo@#&&&&&&&&&&&&&&&&&&&&&&&%%$#+O. .O+#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$###@###$$%%%&$$@XXXXXOOO..oOO@$$&%$$#ooXOoooooX...oO&$@@XXX+@@@+ooooOO+#&$$#ooXOoOoOoX. .OO#&&&$#@oXXXXOOOXXO+@$&",
+"&&&&&&&&&&&&&&&&&&&&%%$#+OOOoOoOOOO++#$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#+XX.. ...XX...O+&&%%$@++..........@#&&&&&&&&&&&&&&&&&&&&&&&&%$#+O...O+#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$$$$$$%%&&&$$@oXXXXOOO..O++#$%&&$$#oooOOooooo ..OO&$@+ooo@@#@@oXooo++#&%$#oooOOOOOoo...o+#&%%%#@oXXXXOOOXXO+@$&",
+"&&&&&&&&&&&&&&&&&&&&%$#@.............@#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$#@XXXoO+++@@@@@##&&%%$@+O... ......+#&&&&&&&&&&&&&&&&&&&&&&&%$$@Oo ..O+#$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%$%%%&%&&&&$$#+oO+++++O+@##$%%&%%$#@++@@@@@++...O+&$@@@+@###@@..ooo..#&%$#+++@@#@@++...OO#&&%%$#ooXXXOOoXXO++$&",
+"&&&&&&&&&&&&&&&&&&&&%%##.............##&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$#@XXXOO@@@#@###$$&&&%$#@+..........@#&&&&&&&&&&&&&&&&&&&&&&&&%$#oo. .O+$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&%&&&&&&&%$#+++##@@@+@##$%%%&%%$$@@@##$##++...O+&%#####$$##@..ooo..#&%%$@@@#####@+...++$&&%%$#@@+.......+@#$&",
+"&&&&&&&&&&&&&&&&&&&&&%$##@@@@++@+@@@##$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$@XXX++$$%%%&%%%&&&&%$$##@@+++@+@@##$&&&&&&&&&&&&&&&&&&&&&&&&%$#@+OOO@##%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$##$#$$#$$$%%%&&&&%$$$$$$$$$###@@#$&%$$$$$$%$$##@@@@@#$&&%$$$$$%$$$###@@##$&&&%%$#@@.......@##$&",
+"&&&&&&&&&&&&&&&&&&&&%%%$$##@####@###$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#+++##$%%&&&&&&&&&&&&$$###########$$&&&&&&&&&&&&&&&&&&&&&&&%%%$@@OO+@$$%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$%$%$$%%%&&&&&&&%%$$%%%%%%$$#$#$$&&%%$%%%%%$$$###$#$$&%&%%$%%%%%$$$#$#$$$&&&%%$$##@@@+@@@#$$%&",
+"&&&&&&&&&&&&&&&&&&&&&&%%$$$$$$$$$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@@+#$$%&&&&&&&&&&&%&%%%$$$$$#$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&%%$##+++$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%&%%&%&&&&&&&&&&%%%%%%%%$$$$%&&&%&%%&&&%%$%%$$$$%&&%&&%%%&&&%%%$$%$%%&&&&&%%$$#######$$%&&",
+"&&&&&&&&&&&&&&&&&&&&&&%&%%%%$%$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$@@@$$&%&&&&&&&&&&&&&&&%%%$%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&%&&&&&&&&&&&&&&&&&&&&&%%&&%&&&&&&&&&&&&&&%%%&&&%&&&&&&&&&&&&&%&%%%&&&&&&&&%&%%$$$$$$$%%%&&",
+"&&&%%$$$$$$%&%&&&&&&&&&&&&&%%$$$$$$%%&&&&&&&&%%$$$#$$%%&&&&&&&&%%%%%$$$$$%%%&&&&&&&&%&%&&%&%&&%&&&&&&&&%&$$####$$%%%&&&&&&&&&&&%&%%&%&%%%&%&&&&&&&%&%&%&%&%%&&&&&&&%%$$$$$$%%&&&&&&&&&&&&&&&%$$$#$$%%&&&&&&&&&$$$##$$%%&&&&&&&&%%%%%%%%%%%%&&&&&&&&%%$$$$$%%%&&&&&&&&&&&&&%&%%$$$$$$%%%&&&&&&%%$####$$%%%&&&&&&&&&%&&%&&%&%%&&&&",
+"&&&%$#@+O#$$%%&&&&&&&&&&&&%%$##@O+#%%&%&&&&%&%$#@+O+#$%%&&&&&&&&%$$######$$%%&%&&&&&%&%%%%%%%%%&&&&&&&&%%$@+OOO##%%&&&&&&&&&&%%%$%%$%$%%%%%&&&&&%&%%%$%$%%%%%%&&&&&%$$+O@##$%%&&&&&&&&&&&%%%$$#++##$%%&&&&&%%%$#++O##$%%&&&&&&%&%%$$$$$$$$%%%&&&&&&%$##OO#$$%%%&&&&&&&&&&&%&%$$#O+##$%%&&&&%&%$#@ooo@#$%%%&&&&&&%&%%%%%%%%%%%&&&",
+"%&%$$#@OO@#$%%&&&&&&&&&&%%%$$@@+OO#$%%&&&&&&%$$@@OOO##$%%&&&&&%%$$#@+@@@@#$$%%&&&&%%%%$$$%$%$%%%%&&&&&%%$#@+ooO@#$%%&&&&&&&%%%$$$$$#$$$$$$%&&&&&%%%$$$$$$$$$%%%&&&%%$#OO@@@$$%%&%&&&&&&&%&%$$##oO@##%%&&&&&%%$$@OOO@@$$%%&&&&&%%$$$##$$#$$$$%%&&&%%%##@OO##$$%&%&&&&&&&&&&%%$$#@OO@#$%&&&&&&%$#@@ooo+@#$%&&&&&&%%$%$$%%$%$%%%%%&",
+"&&%%##@oo@@#$$%%&&&&&&&&&%$$#+++OO$$%&&&&&%%%$#@+ooo@#$%%%&&&&%$$#@++++++@#$%&%&&&&%$$$$#$#$$$$%%&&&&&%%$#+Oooo+#$%%&&&&&&%&%$#@@@@@@+@@@#$&&%%%%$##@@@@@@###$%&&&%%$#Oo++@#$$%%&&&&&%&&%%$$#@@oo@##%%%&&%&%$##@ooo+@#$$%&&&&%%$$#OO@@@+O@@#$%%&&&%%##@oo@@#$$%%&&&&&&&&&%%$$#@@oo@@#%%&&&%%%$#@+XXo+@#$$%&&&%&%$$$$#$$$$#$$$%%&",
+"&&&$$#@OooOO#$%&&&&&&&&%%$$@@oXX+@#$%%&&&%&$$#@XXXXoO+$$%&&&%%%$@+O.....Xo@#$%&&&%%$#@@OO##@OO$$%%&&&%%$$@OoOOOO+$$%%&&&&&%%$#@++++O+++++@#&&%%$$##@++++++@@@#$&&&%$##++XXX@@$$%%&%&&&%%%$##Ooooo@#$$%&&&%%$$#OOoXXXX@#$%%%&&%%$#@oo+++Oo+@@$%%&&&%%$#@OoooO#$$%%%&&&%&%%%$$#OOooO@#$%%&&&%%$#@XXoooXX@#$%%&&&%$#@@++##@++@@#$%&",
+"&%%$$#@ooooO#$$%&&&&&%&%$$#@+XXX+@$$&%&&&%%$$@@XXXXXO+#$%&%&&%$#@+O... .Xo@#$%&&&&%$#@+Oo@@@oO#$%&&&&%%$#@oooOO++$%%&&&&&&%%$#++OOOOOOOO++#&%%$##@++O+O+O+++@@#&%%%$#@++XXX+@##$$%&&%%$$$##@OoooO@@$$%%&&%$$#@OoXXXXX@@#$%%&%$$@++ooOOOooO++#$%&&&%$##@ooooO@#$$%%%&&%&%%$##@ooooO@#$$&&&&%$$#@XXXooXX@##$%&%%%$#++OO+@@OO+@#$%&",
+"%&%$@+++Oooo@#$%%&&&&&%%#@@OOOoO@#$%%&&&&%%$@+OooOOOO+#$%%&&%%$#+OoOooXoO+#$%%%&&%$$@++oo+++++#$%%&&%%$@@+OooXo@@$%%%&&&&&%$$@... ......  @&%$$+++..........oo#&%%$@@+OOooooO+@@$%%&%%$#@++OoooOO++@$$%&%$$@++ooOOOooO++$$%&%$#@+OoooOOooOO+#$$&%%%$#+++OXoo++@##%%&&&%%##@+OooXO++@#$%&%%$$@+OOoOOoooO+@$%&&%$$@++oo+O+ooO++$$&",
+"%%$$@++OOXoo@#$%%&&&%%$$#@+OoooO+##%%%&&&%$#++OoooOOO+#$%&&&%%$#OOoOoXoX++##%&%&&%$$@+OooOO+O@#$%%&&%$$@+OOoXoX@@$$%&&&&&&%$##...    ... .@&$$#+OO.... . ...Xo@&$$#++OoOoooooOO+@#$&$$#++OOOXoXOOOO+##$&$$@+OOXoOoOXooOO@#$&$##+OOooooOXoOOO@#$&&%$$@++OOXoXO++@#$%&%%%$#@++OXoXOO+@#$$&&%$#++OooOOOooO++#$&&%$#+OOooOOOooO++#$&",
+"&%$#@+OOOoXo@@$$%&&&&&$$@++ooooO+@$$%&&&%%$#+OOXoooOO+#$%%&&&$$#OOooOXoX++#$%%&&%%$#++OooOOOO+#$%&&&%$#@+OoooXo+@#%%%&&&&&%$#@oo ..oo+O+XX@&$#@...oo+++++XXoXo@&$#@.... ..... . @@$&$#@... ...... . +#$&$#@.... ..... . @@$&$#@... ...... . +#$&%%$#++OOOXXoOO++@$$&&%$$@++OOXoXOO++@$$&%%$#+OOooOoOXoOO+#$&%%$#+OOooOOOooOO+#$&",
+"&%$#ooX..   O+#$%&&&%%$#OoX.. . ++#$%%&&&%$#OoX.. . O+#$%%&&&$$#ooX. .  O+@$%%&&&%$#OoX. . .O+@$$&%&%$#ooX.. . O+#$%%&&&&&&$#@oo. .XoO+OXX@&$#@...oO+@@@+ooooo@&$#@. . . . ..  .+@$&$#@.... ... .  .+@$&$#@. .. ..... . +@$&$@@.... .....  .+@$&&%$$Ooo... ...ooO#$&&%$#Ooo.. . ..XoO#$&&%$#OoX.. . ..XoO#$&%%$#OoX.. . ..Xoo#$&",
+"%%$#OoX .. .O+#$%%&&&%$#Ooo . . OO#$%%&&%%$#ooX..  .O+@#%%&&%%$#ooX. . .O+@$%%&&%%$#ooX..   O+@$%%&&%$#Ooo..  .O+#$%&&&&&%%$#@oo . ooO+OXX#&$@@...OO@###@oooXo#&$#@+OOXX+++++...+@$&$#@+oOXXO++O+...+@#&$##OOoXXO+O++...+@$&%#@OOoXXO+O+O...+@#&%%$#Ooo .    .ooO$$&%%$$OoX...  ..ooO$$&%%$#Ooo.. . ..ooO#$&&%$#ooX..   ..ooO#$&",
+"&&$$#@+oX. .oo@#$%%&&%%$#@+oo.. oo@#$%&&&&$$#@+oo. .oo@#$%%&&&$$#@+oo ..oo@#$%%&&%%##@+oX. .oo@#$%%&%%$#@+oX . oO@#$%%&&&&%$#@..XXXXXXXX++#&$@+...++###$#@+@+@#&%$#+OoXXO++++...@@$&%$#+OOXXO++O+...@#$&%$#+OOX.++++O...@#$&%$#+OOX.++++O...+#$&&%%$#@+++...+++@#$%&&%$$#@@++...++@@#$%&&%%$#@+++. .+++@#$$&%%%$##+++...O+@@#$$&",
+"&&%$##+oX. .oo@#$%%&&%%$$@@oX ..Xo@#$%%&&&%$$@+oX.. Xo@#$%%&&&%$##+oo. .oo@#$%&&&%%$#@+oX. .oo@#$%%&%%%$@+oo. .oo@#$%&%&%%$$@@..XXXoXXXo+@#&$@+. .+@#$$$$#@@@@$&%$#+OoXX+++XXoOO@#$&%$#+OoXX+++XXooO@#$&%$#+OoXXO++XXOO+@#$&$$#+OOXXO++XXOO+@#$&&&$$$#@@+. .+@@#$$%&&&%$$##++. .++@#$$%&&%%$$##++...+@@#$$%&&&%$$##++. .++@#$$%&",
+"&&%$#@+..OOO .+@#$%&&%%$#@+ .OoO .+@#$%&&%%$#@+..OoO .+@#$%&%%%$#@+..OOO..+@#$%&%%$$@+O..OOO .+@#$%&%%$#@+..OoO .+@#$%%&&%$#@+..XXXXoXXX+@#&#@+...+@$%%%$$####$&%$#++OXXO++XXoOO#$%&%$#+OOXXO++XXOOO#$$&%$#++OXXO++XXOO+#$$&%$#+OOXXO++XXOO+#$$&&&&%$$#@+...+@#$$%%&&&&%$$#@+. .+@#$$%%&&%&%$$#@+ . +@#$$%%&&%&%$$#@+...+@#$$%%&",
+"%%$#++O..+O+..O++#$&&%$#++O..+O+..O++#$&&%$$++O..+O+..O++#$&&%$#++O..OOO..OO+#$&&%$#++O..OO+..O++#$&%$#++O..O+O..OO+#$%&%%$@++XXXXX. .. +@$&$@+...+@#$$%$$$$$$%&%$#+OoXXOO+XXOO+#$%&%$$+OoXX+O+XXoO+#$%&%$#+OoXX+O+XXO++#$%&%$#+OoXX+O+XXO++#$%&&&&&%$##+. .@@#$%%&&&&&&%$##+...@@#$%%&&&&%%%$##+...@@$$%&&&&&&%%$#@@ ..@@$$%&&&",
+"%%$#+OO..O+O..OO+#$&%%$#+OO..O+O..OO+#$&%$$#+OO..O+O..OO+#$&%%$#+OO..+++..OO+#$&%%$#+OO .++O..OO+#$&%$#+Oo..+O+..OO+#$%&%$#++OXXXXX . ..+@$&$@+...+@@##$#####$$&%$$+OO .XXX..++##$%&%$#+OO  XXX..+@@#$%&%$$++o. XXX .+@#$$%&%$$++o. XXX..+@#$$%&&&&&%%$@@. .@@$%%&&&&&&&%%$@@...@@$%%&&&&&&&%%##@. .+#$$&&&&&&&&%%$@@...+#$$&&&&",
+"%$$@oXX .XXX .XXo@#&%$$@oXX. XXX .Xoo@#&%$#@oXX .XXX .XXo@$&%$$@oXX .X.X .Xoo@#&%$#@oXX. XXX .XXo@#&$#@oXX. XXX .Xoo@#$&$$#ooX. ...oooOO@#$&$@@...OO@@#@@++++@$&%$#@OO..XoX..++@#$$&%$#+OO..XoX..++@#$%&%$#+OO..oXX..++@#$$&%$#+OO..oXX..++@#$$&&&&&%$$@@...+#$$%&&&&&&&%$$#+. .+#$$%&&&&&&&%%$@+...+#$$&&&&&&&&%$$#+. .+#$$%&&&",
+"%$#@ooX ..XX .XXo@#&%$#@oXX. XXX .XXo@#&&$#@oXX...XX .XXo@#&%$#@oXX. XXX..XXo@#&%$#@oXX...XX .XXo@#&$#@oXX...XX..XXo@#$&$#@ooX... .XooOO@@$&$#@...oo++@++OoOO+#&%$#+Oo..ooo..++@@#$&%$#+Oo..oXo .++@@#$&%$#+Oo..ooo..++@@#$&%$#++o..ooo..++@@#$&&&&&%%##+ ..+@#%%&%&&&&&%%#@@...+@#%%%&&&&&&%$$#+...+@$$%%&&&&&&&$##+...+@$%%%&&",
+"%$#+XXX..XXX. XXo@#&%$#+oXX. X.X..XXX@@&%$#@XoX .XXX. XXX@#&%$#+oXX..X.X .XXX@@&%$#+oXX. XX...XXo+#&$#@oXX .XX.. XXo+#$&$#@oXo . . oooOO@@#&%#@Ooo..XXXXX...++$&%$#+OO..XoX. O++@@$&%$#+OO..ooo..O++@@#&%$#+OO..XXo. +++@@$&%$#+OO..XoX. O++@@$&&&&%%$#@+...+##$$&%&&%&%%$#@+. .@@#$%%&&&&%%%$#@+ ..+@#$%%%&&&%%%$#@+. .+@#$%%%&",
+"$#@+...XXoXooX...+@&$#@+...XXoooXX...+@&$#@+...XXoXoXo...+@&$#@+.. XXoooXX...+@&$#@+...XXooooX...+@&#@+...XXooooX...+@#&#@+...OOoXoXo+O+oo#&%$#+OO..XXXXX...O+$&$$@+OoXX+O+oOooooo#&$$#+OoXXOOOooooOoo#&$$#+OoXX+O+ooooOoo#&$$@+OoXXO+OOOooOoo#&&%%%$##@+. .++##$%%&&&%%$##@+...+@##$%%&&%%%$#@@+. .+@##$%%&&&%%$##@+...+@@#$%%&",
+"$#@+. .XooooXX. .+@&$#@+ . oXooooX ..++&$#@+ . oXoooXo ..++&$#@+...XoooooX. .+@&$#@+ . oXoooXo ..+@&#++. .XooooXX. .+@#&#@+...OOXoXoX+O+Xo@&%$#+OO..XX.XX...++$&$$@+OoX.+O+oOooOXo@&$#@+OoXXO++OOooooo@&$#@+OoX.+O+oOooooo@&$$@OOoXXO+OoOooooo@&&%%$#@@++. .++@@#$%&%%%$#@@++ . ++@@#$$&&&%$##@++...++@@#$%&%&$$#@@++ . ++@@#$%&",
+"$#Oo . XXOOOXX . oO&$#Oo. .XXOOOXX. .oO&$#Oo. .XX+OOXX  .oO&$#Oo . XXOOOXX. .oO&$#Oo. .XXOOOXX.  oO&#Oo . XXOOOXX. .oO#&#Oo.  oo.. ..XXX .@&&%$##++O...XoO+@##$&$@@.....XXXXX...oo@&$#@... .X.XXX...Xo@&$#@.....XXXXX...Xo#&$#@...  XXXXX...Xo#&%%$$+OoXX . XXoO+$$&&%$$+OoXX . XXoO+$%&%%$#+OoXX   XXoO+$$&&%$$+OoXX . XXOO+$$&",
+"$#Oo. .XXO+OXX. .oO&$#Oo. .XXO+OXX  .oO&$@Oo. .XXOOOXX. .oO&$#Oo . XXO+OXX . oO&$@Oo. .XXO+OXX ..oO&#Oo. .XXO+OXX . oO#&#Oo ..Xo ... X.X. @&&&%%$#+OXXXoO@#$%%&&$#+... .X.X.X...Xo@&$@@.... XXX.X...Xo@&$#+... ..XX.X...Xo@&$@@.....X.X.X...Xo@&&%$#OOoXX   XXoOO#$&&%$#OOoXX  .XXoOO#$&&%$#+OoXX . XXooO#$&&%$#+OoXX  .XXooO#$&",
+"$#OO . XX++OXX . oO&$#Oo . XX++OXX. .oO&$#Oo.  XX++OXX. .oO&$#Oo.. XX++OXX. .oO&$#Oo . XX++OXX . oO&#Oo.. XX++OXX. .oO#&#Oo . oo. ...XXX..@&&&%%$#+OXX.oO#$$%&&&$#@... .XXXXX ..oo#&$@@.....XXXXX ..oo@&$#@.....XXXXX...oo#&$#@... .XXXXX ..oo#&%%$#+ooXX.. XXoo+#$&%%$#+ooXX.  XXoOO#$&%%$#OooXX.  XXoO+#$&%%$#OooXX.  XXoO+#$&",
+"$#@+OoOoO+++OOoOO++&$#@+OoOoO+++OOoOO++&$$@+OoOoO+++OoOoO+@&$#@+OoOoO+++OoOoO+@&$$@+OoOoO+++OOoOO++&#@+OooOo+++OoOoO++#&#@+OOOOOOooooooooO#&&&&$$#Oo...+@#$%&&&&$$@OOOoooooooOoO++#&%$@OOooXooooooOO++#&$##OOooooooooooO++#&$$@OOooooooooOoO++#&&%$$++OOooOooO+++$$&%%%#@+OooOooooO+@#$&&%$$@+OooOoOoOO++$$&&%$$@+OOoOoooOO++$$&",
+"%$@@O+OO+@@@++OO+@#&%$@@O+OO+@@@++OO+@#&$$@@O+OO+#@@+O+O+@@&%$@@+O+O+@@@+O+O+@@&$$@@+O+O+@@@+O+OO@#&$@@+O+O+#@@+++O+@@$&$@@+OO+++O+OOoOo++#&&&&%$#Oo...@@$$%%&&&%$#++OoOOOOOOO+O@@$&$$#++OOOOOO+OOO+@@$&%$#++OOoOOOOO+OO@@$&%$#++OoOOOOOOOOO@@$&&%%$@@+O+OO+OO++@$%&&&$$@@++OOO+O++@@$%&&&$$@@++OOOOO++@@$%&&&$$@@++OO+OO+++@$%&",
+"%$$######$$#######$&%$$$#####$$#######$&%$$#######$#######$&%$$######$$$######$&%$$######$$#######$&$$#######$######$$$&%$######@#@##@####$&&&%%%$##@@@#$$%&&&&&%%$###@#@####@###$$&%%$###@#@#@######$$&%%$######@#######$$&%%$####@#########$$&&%%%$$####@####$$$%&&&%$$$####@#####$$%&&&%$$$######@###$$%&&&%$$####@#####$$$%&",
+"&%%$$$$$$$$$$$$$$$$&&%%$$$$$$$$$$$$$$$$&&%%$$$$$$$$%$$#$$$%&&%%$$$$$$$$$$$$$$$%&&%%$$$$$$$$$$$$$$$%&%%$$$$$$%$$$$#$$$%%&%%$$$$$$$$$$#$#$$$%&&&&%%%$$#$#$$%%&&&&&&%%$$$$$$#$#$$$$$%%&&%%$$$$#$#$#$#$$$%%&&%%$$$##$$#$#$$$$%%&&%%$$$$#$##$#$$$$%%&&&&%$$$$#$$#$$$$%%&&&%&%%$$$$$$#$$$$%%&&%&&%%$$$#$#$$$$$%%&&&%&%%$$$$$$#$$$$%%&&",
+"&&%%%%%%%%%%%%$%%%&&&%%%%$%%%%%&%$%%%%&&&%&%%%$%%&%%%%%%%%%&&%&%%$%%%%%%%$%%%%%&&%&%%$%%%%&%%%$%%%%&%&%%$%%%%%%%%%%%%%&&&%&%%$%$%$$%$%$$%%&&&&&&&%$$$$$%%&&&&&&&&&%%%$$$%$%%$%%%%&%&&&%%%$%%%$%%$%%%%&%&&&%%%$%$$%$%$%%%%%&&&&%%%$%$%%%%%$%%%%%&&&%&&%%%%$%%$%%%%&&&&&&%%%%$$%%$%%%%&%%&&&%%&%%%%%$%$%%%&%&&&&&&%%%$$$%$$%%%%&%&",
+"&&&&%&&%&&&%%&&%&&&&&&&&%%$$$#$$$$$$%%&&&&&%%%###$$%%&&&&&&&&&&&&&&%%$$#$$%%%&&&&&&&%%%$####$%%%&&&&&&&%%%$$#$$#$$$$%%&&&&&&&%&&%&%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%&%%&%&%&&&&&%%$$##$$%%%&&&&&&&&&&&&&%%$$#$$%%%&&&&&&&%&$$####$%%%&&&&&&&&&%&%%&%&%&%&&&&&&&&&&&&&%%$$##$%%%&&&&&&%&&&&&&&&&&&&&&&&&&&&&&%%%%%%%&&&&&&",
+"&&%%%%%%%%%%%%%&&&&&&&%%%$##@@@@###$$%%&&&&%$$#@###$$%&&&&&&&&&&&&%%$$#@##$%%%&&&&&&%$$#@@@##$%%&&&&&&&%%$###@@#@##$$%%&&&&&&%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%%%$%%%&&&&&%$$#@###$%%&&&&&&&&&&&%&%$$##@$$%%&&&&&&&%%$#@@@##$%%%&&&&&&%&%%%%%%%%%%&&&&&&&&&&&%&%$$####$%%&&&&&&%%%%%&%%&&&&&&&&&&&&&%%%$$$$%%%%&&&&",
+"%&%%$$$$$$$$%%%%%%&&&%&%$$++oooO+OO+$$%&&&%%$#OOOO+#$%%&&&&&&&&&&%%$#@@oo@#$%&&&&&&%%$#@oXoO+#$%%&&&&&%%$#++oooO+OO+$$%&&&&%%%$$%$$$$%%%%&&&&&&&&&&&&&&&&&&%&&&&&&&&&%%%$$$$$##$$%%&&%&%$#OOOO+#$%%%&&&&&&&&&%%$#@@oo@#$%%&&&&&%$$#@XoXO+#$%&%&&&&&&%%$$$%$$$%%%&%&&&&&&&&%%$#@@oo@#$%%&%%%%$$$$$%%%&&&&&&&&&&&&&%$$##@#$$%%%&&&",
+"&$$$$#########$$%%%&&%%$##OOoXoOOoO+#$%&&&&%$#OoooO##%%&&&&&&&&&&%$$@@+Xo@#$$&&&&&&%$$@+XXXO+@$$%%&&&&%$$#OOXoXOOOO+#$%&&&&%$$##$$###$$%%&&&&&&&&&%&&&&&&&%&&%&&&&%%%$$#$##@#@@#$$%&&&&%$#OoooO##%%%&&&&&&%&%%$$@++Xo@#$%%&&&&&%$#@@XXXO+@$$%%%&&%%%$$##$$###$$$%%&&&&&&%&%$$@++Xo@#$%%&&%$#$#$#$$$%%%&&&&&&&&&%%$$#@@++##$%%&&&",
+"%$##@@@@@@@@@###$$%&&%$$#@OOXXXoOoOO#$%&&&%%$#Ooooo@#$%%%&&&&&%&%%$#@++XX@#$%%&&&&%%$#@+XXXoO@#$%&%&%%%$#@OOXXXOOoOO$$%&&&%%$$@@@##@@##$$%&&&&%%%&%%&&&&%&%%&%&&%&%$$$##@@@@+++@#$%&&%%$##Ooooo@#$$%%%%&&%&%%$$#@++XX+@#$%%&&%%%$#++XXXoO@#$$%&&&&&$$$@@@##@@##$$%%&&%&%%%$$#@++XX+@#$%&%$$#@@@@##$$%%%&&&&&&&&%%$@@++++@@#$$%%&",
+"%$+OoXXXXXXXoo@@@$$&%%$@@+XXXXX..O+@#$$&&&%%$#@+oXo+@#$%%&%&&&&&%$#@XXXO+@#$%%&&&&%%$@ooooOXo+@#$%%&&%$#@+XXXXX..O+@$$%&&&%%$#oo+++oo+@@$%%&&%&%%$%%%%&%%%%%%%%&&%$$#@+OXXXXX...@#$&&%%$#@@+XXo++#$$%%%&&%%$$##@XXXO+@#$$%%&&%$$#@oXOoOXX++@$$%&%%%$#@oo+@+oo++@$$%&&%%%$$##@XXXO+@##$%&%$#ooXXXO++#$%%&%&&&&%%%$#@XX...Xo@#$%%&",
+"$$+OXXXXXXXXXX++@#$&%$#@+OXo.XX..O++#$$&&&%%$#@+XXXO+#$$%%&&&&%%$$#@XXXOO@#$%%&&&%%$$@oXOOoXX++@$%%&&%$@@+oXX.X..+@@#%%&&%%$##XX+++oX++@$$%&&%%$$$$$%%%%%$$$$$%&%%$#@@OoXXXXX...@#$&%%$$#@++oXXO+@##$$%&%%$$##@+XXXOO+@@$$%&%%$#@@oXOoOXXO++#$$&%%$#@@XX+++ooO++#$%&%%$$$##@+XXXOO+@#$$&$#@XXXXXoO+@$$$%%&&&&&%$$@@XX. .XX@@$$%&",
+"$#@+...XXooooX...@@&%$#++OXXXX...O++@#$&&%%$$#@+oXX+O@#$$%%&%&%$$#@+XXXOO@@#$%%&&%%$#@oXoOOXXO+@$$%&&%$@++XXXXX..O+@$$%&&%$$#@XXOOOXXO++$$%&%&$$@++#$$$$$#++@$$&$$#Ooo..ooo.....+@$&%$#@@+++XXoO++@@##$&%$##@@++XXXOO+@@##$&%$##++XXOOOXX+O+@#$&%$#@@+XX+++XXOOO@#$&%$##@@+@+XXXoO++@##&$$#ooX..ooO+@#$$%%&&&%$$@+O..OOO..O+@$%&",
+"$#+O...XooooXo. .+@&$#@XXXXXO+OooXXXO+#&%%$##@OoXXXXo+@@$$%&&%$$#@OoXXXoX+@@$$%&%%$#@+ooXXXXX++@#$%&%$$#@+ooX.XXX++@#$%&%%$#@+OoXXXXX+++#$%&%%$#+++@#$$###+++#$&$#@ooo..ooo.. ..+@#&$$#ooXXX+++ooXXX++$&$$#oXXXX+O+ooXXXO+$&%##oXXXXO++ooXXXO+$&$##oXXXX+++ooXXXO+#&$$++ooXXXOOOXXXXXO+&$##ooX..ooOO+@##$$%&&%$$++O..OOO..O++$$&",
+"$$++...oXooooX...+@&$#@XXXoX+O+XoXXXO+#&%%$#@+OoXXXXXO+@##%&%$$@@@OoX.XXX+++##%&%$##@+OoX.XXXO++@$$&%$#@++ooXXXXXO++##$&%$##@+ooXXXXXO++@#$&&$##OOO@@@#@@+OOO#$&$#@oXX..ooo... .++#&$#@XXXXX+++ooXXXO+#&$#@XXXXX+++ooXXXO+#&$#@XXXXX+++ooXXXO+#&$#@XXXXX+++ooXXXO+#&$#+OXXXXXOOOXXXXXO+&%##ooo .oooO++@@#$$&&&$#@OO..OOO..O++#$&",
+"$#@+XXXoO+++++XXXoO&$#@.....OOOoo ..O+#&%$#Ooo..oooXo...+#$&%$#Ooo..ooooX...+#$&$$#ooXXXooooX...@@$&$$#ooXXXXoooX...+#$&$$#ooXXXooooX...@#$&%%#@...Xo+@+oX...@$&$#+...OOoOOXXXXXoO#&$#@...Xo+++Oo...O+#&$#@...Xo+@+Oo...O+#&$#@...Xo+@+Oo ..O+#&$#@...Xo+@@Oo ..O+#&$#+O.. XX+++XX ..O+&%$#+Oo. .....XXo+#$&%%$#++OXXOOO .oO+$$&",
+"$#@+X.XOo+++++.XXoo&$#@... .OOOOo. .O+#&$#@OoX..ooooX...+@#&$$@ooX..oooXo...+@#&$#@oXXXXooooX. .+@#&$#@oXXXXoooXo ..+@#&$#@oXXXXoooXo ..+@#&%$#@...XX+++oX...#$&$@+.. OOOoOXo.XXoo@&$#+...Xo@@@+O ..O+#&$#@...Xo+@@+O. .O+#&$#+...Xo+@@+O...O+#&$#+...Xo@@@OO.. O+#&$$++.  oX+++Xo . ++&$$#+OO . .. .XXX+@#&&%%#+OoXXOoO .OO+#$&",
+"$#+o.....oOO++OooXo&$#+... .OOOOo...O+#&$#@oXo..oOOXo. .+@#&$#@oXo..OOOoX. .+@#&$#@oXXXXOOooo...+@#&$#@oXXXXOOOXo...+@#&$#@oXXXXOoOoX. .+@#&&%$#@++..XXX..++@#$&$@+...OOXXXOOoooXo@&$#@...oo@@@+O. .O+#&$#+...oo@@@OO...O+#&$#@...oo@@@OO. .O+#&$#@...oo@@@+O...O+#&%$#+oXXXoO++XoXXX@#&%$#+OOXX++++OXoXoo#&&%$$+OOX......OO+#$&",
+"$#OO . ..oOO@+OooXo&$#+XXXXXXoX+O. .++$&$@+...OO@@@++XXXoO#&$@@...OO+@+@+XXXoO#&$@+...oO+@+++XXXoO#&$@+...oO+@@++XXXoO#&$@+...oo+@@++XXXoO#&%%$#@+O. XXX .O+@#$&#@+...++XXXoOoooXo@&$@+XXXoO@#@@+...++#&$#+XXXo+@##@+...+@#&$#+XXXOO@##@+...O+#&$#+XXXoO@#@@+...++#&%$#@ooXXoO++XXXXX@#&%$#++oXX+++++XoXXo@&&%$#+OoXX... .oO+@$&",
+"$#OO.. ..oOO@@OoOXo&$#+XXXXXoXXO+...+@#&$#+. .O+@@@@+XXXoo@&$@+...O+@#@@+XXXoo@&$@+. .OO@@#@+XXXoo@&$@+. .OO@@@@+XXXoo@&$@+. .O+@@#@+XXXoo@&&%%$#@+...XX .+@@$%&#@+...O+XXXOOoooXo@&$#+XXXO+@##@+...+@#&$#@XXXOO@##@+...+@#&$#+XXXO+@##@+...+@#&$#+XXXO+@##@+...+@#&&%$#+++..ooO..O+@##&%$#+OOXXO++++oXoXo@&&%$$++OXX.... OOO@#&",
+"$#+O...Xo+++@@OOoXo&$#@XXXoo...+O...+@#&#@+...+@##$#@oooXo@&$@+...+@####@oooXo@&$@+...+@####@oooXo@&$@+...+@##$#@oooXo@&$@+...+@####@OooXo@&&&$$#@+oX. .Xo+@#$$&#@+...O+XXX+OoooXo@&$#+XXXO+##$#+...+@$&$#+XXXO+####+...+@$&$#+XXXO+##$@+...+@#&$#+XXXO+#$##+...+@$&%%$#@++..oOo..++@$$&%$$+OoXX++@++oooXo@&&%$#+OoXXO++oo...+#&",
+"$#+O...XoO+@@@oooXo&$#+XXXoO.XXOo...+@$&#@+...+##$$#@OoOXo@&$@+...+@$$$#@OoOXo@&#@+...+@#$$#@OooXo@&#@+...@@#$$#@OoOXo@&#@+...+##$$#@OOoXo@&%&$$#@+oo  .oo+@#$%&#@+. .+OXXX++oooXo@&$#@XXXO+###@@...+@#&$#@XXXo+###@@...+@#&$#@XXXOO####+...+@$&$#@XXXo+@###+...+@#&&%%$#@+..OoO..+@#$%&%$#++oXXO++++XooXo@&&%$#+OOXXO++oo...+@&",
+"%##+XXXOO@@@@@Ooooo&$#+XXXooXX.Oo...++$&#@+...++#$##@oXXoo@&#@+. .++##$#@oXXoo@&$@+. .+@#$##@ooXoo@&$@+ ..+@#$##@oXXoo@&$@+...++#$##@oXXoo@&&%$#+OO..XXX..O++#$&$@+. .XXOOOO+XXXoo@&$#+XXXO+@##@+...+@$&$#+XXXO+@##@+...+@$&$#+XXXO+@##@+...++$&$#+XXXO+###@+...+@$&&&%%##@oo.  oo@#$%%&%$#+Oo. XXXXX...O+#&&%$$+OoXX+++++...+@&",
+"%##+XXXoO+@#@+ooooo&$#+XX.OOoOoX....++$&#@+ . ++@##@+oXXoo@&$@+...++#@#@+oXXoo#&$@+...O+@##@+XXXoo#&$@+.. O+@##@+oXXoo@&#@+...++@##@+oXXoo@&%%$#++O. ooX .OO+#$&#@+...XXooO++XXXoo@&$#@XXXO+@@#@+. .+@$&$#@XXXO+@#@@+...+@$&$#@XXXO+@#@@+...+@$&$#@XXXO+@@#@+...+@$&&&%%$#@oX . oo@#$%%&%$#++o..XXXXX ..O+#&&%$#+OOXX+++++...+@&",
+"$$@+XXXOO+@@@+oXooO&$#+XXXOOOooXX...+@#&$@+...O+@@@@+XXXoo#&$@+. .O+@@@@+XXXoo@&$@+ ..O+@@@@+oXXoo@&$#+...O+@@@@+XXXoo#&$@+. .O+@@@@@XXXoo#&&$$#+Oo..oXo..OO+#$&$@+. .XXOoOO+XXXoo#&$#@XXXOO@@@++...+@$&$#@XXXO++@@@+...+@$&$#@XXXOO@@@@+...+@$&$#@XXXOO@@@++...+@$&&&&%%##@+. .+@@$%%%&%$#+OO ..XXXX...++#&%$$#+OoXX+++++...+@&",
+"$##+. .oo+O+OO...++&$#+...oo+++XX  .+@#&$#@oXXXXO+OOO...+@#&$#@XXXXXO+OOO...+@#&$#@oXXXXO+OOO...+@#&$#@oXXXXO+OOO...++#&$#@oXXXXO+OOO...+@#&%$#@...oo+++oo...@$&$#@XXX. OOOOO...+@#&%#@OooXX+++OO...@@$&%#@OooXX++OOO. .@@$&%#@OooXX+O+OO...+#$&%#@OooXX+++OO...@@$&&&&%$#@+O...O+@#$%%&$#@Ooo..XXooo+++##$&%$#@OooXXooooo...+@&",
+"$#@+...ooOOOOO ..+@&##@...oo+OOXX . +@$&$#@oooXXOOOOO...+@#&$#@oXXXXOOOOO...+@$&$$#ooXoXOOOOO ..+@$&$#@oooXXOOOOO...+@$&$$@ooXXXOOOOo...+@#&&$#@...O+@@@OO...#$&$#+XXX..OoOoo ..+@#&%$#OooXXOOOOo...@#$&%$#OooXXO+OOo...@#$&%$#OooXX+OOOo...@#$&%$#OooXXOOOOo...@#$&%&%$$#@OO . O+@#$$%&$$@OOo .ooooo+@##$%&%$$@OOXXXooooo ..+@&",
+"$#Oo. ...... .ooO@#&$@+.. ..O++oo...+@#&%$#@++XX.....oO+@#$&%$#@++XX.... oOO@#$&%$#@++XX.....OOO@#$&%$#@++XX.....OO+@#$&%$#@++oX.....oOO@#$&&%$#@++@@####@++@##&$#@oXXXX.....oOO@#$&%$#@++.... ..ooo@#$&%$#@++... .. ooo@#$&%$#@++.... ..ooo@#$&%$#@++.... . ooo@#$&&&%$@@O.... ..++@%%&$@+.... oXo@@##$$%%&%$@+.. . ooO.....@@&",
+"$#oo... .... .OOO#$&$#+.....+++Oo...+@$&&$$@@+oo . ..OO+#$%&%$$@@+oX. ...oOO#$$&%$##@+oX.. ..O++#$$&%%$@@+oX. . .OO+#$$&%$$#@+oX.. ..oOO#$$&%%$#@@@#$$$$##@@@$$&$$@ooo.X. ...oOO#$%&%%$#@+..... .ooO#$$&%%$#@+.......oOO#$%&%%$#@+.. ... ooO#$$&%%$#@+.. ....ooO#$%&%&%$@++.. .. .++@$%&$#+.. ..ooO@#$$$%%&&%$#+.....Ooo ....@#&",
+"$#Oo..... ... O++#$&$#@... .+@@OO...@#$&%%$##@oo.....++@#$%&&%$##@oo.....O++#$%&&%$##@oo.....O+@#$%&%%$##@oo.....++@#$%&&%$#@@oo.....O++#$%&%%%$###$$%%%$$###$%&$$#oooXX.....O++#$%&%%$##@.......oOO#$%&%%$##+... ...oOO#$%&%%$##@.......oOO#$%&%%$##@..... .oOO#$%&&&%$#++.......+@@$%&$#@.....oOO#$$%&&&&&%$#@.....OOO.....##&",
+"$$#@@+@+@+@+@@@##$%&$##@@@@@@###@@@@#$$&&&%$$#@@@@@@@@#$$%%&&%%$$##@@+@@@@#$$%%&&&%$$##@@@+@@##$$%&&&&%$$##@@+@@@@#$$%&&&%%$$##@@+@@@@#$$%&&&&%%$$$%%%%%%%$$$%%&%$#+OO+++@+@@@#$$%%&&&%$##@@+@+@@@##$%%&&&%$$#@@@+@+@@##$$%&&&%$##@@@@+@@@##$%%&&&%$##@@@+@@@@##$$%&&&%%$##@@+@+@@@#$%%&$$#@@+@@@##$$%&%&&&&%$$#@@@+@@@@@@@@##$&",
+"%$$######@#####$$%%&%$$#####$$$$$##$$$%&&&&%$$$##@###$$$%&%&&&%%$$########$$$&&&&&&%$$#######$$$%%&&&&&%%$#######$$$%%&&&&&%$$########$$$%&&&&&%&%%%&&&&%%%%%&%&%$$+++########$$$%&&&&%%$$$#######$$$%&&&&%%$$########$$%%&&&&%%$$####@###$$$%&&&&%%%$####@###$$%%&&&&%%%$$#######$$$%%&%$$$#####$$$%%&&&&&&&%$$############$$%&",
+"&%%$$$$#$$$#$$$$%%&&&%%$$$$$$%$%$$$$%%&&&&&&%%$$$$$$$$%%&%&&&&&&%%%$$$$$$$%%&%&&&&&&%%$$$$$$$$%%&&&&&&&%%%%$$$$$$$%%&&&&&&&&%%%$$$$$$$%%&&&&&&&&%&&&&&&&&&&&&%&&%%$$$$###$$$$$%%%&&&&&&&%$$$$$$$$$$%%&&&&&&&%%$$$$$$$$$%%&&&&&&&%%$$$$$$$$$%%&&&&&&&%%$$$$$$$$$%%&&&&&&&%%$$$#$$$$$%%&&&&%$$$$$$$$%%&&&&&&&&&%%%$$$$$$$$$$$$$%%&",
+"&&&%%%%%%$%%%%&&&%&&&%&%%%%%%&%&%&%%%&&&&&&&&&%%%%%%%%&&&&&&&&&&&%&%%%%%%%%&&&&&&&&&&&&%%$%%%%&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&&%&%%%%%%%%%&&%&&&&&&&&&&&&&&&&&&&&&&&%$$$%%%$%%%%%&&&&&&&&&&&%%$%$%%%&&%&&&&&&&&%%%%$%%%%%&%&&&&&&&&%%%%%%%%%&&%&&&&&&&%&%%%%%%%%%&%&&&&&&%&%%%%%%$%%&&%&&&&&&%%%%%%%&&&&&&&&&&&&%&%%%%%%%%%%%%%&&&",
+"&&&&%%%%%%&&&&&&&&&&&&&&&&&&%&%%%%&%&&&&&&&&&&&&%%%&%&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%%%&&&&&&&&&&&&&&&&&&&%%%%%&%&&&&&&&&&&%%&%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%&&&&&&&&&&&&&&&&&&&&%%%%%&%&&&&&&&&&&%%&%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&%%%%%%%%&&&&&&&&&&&&&&&&%%%%%%%&&&&&&&&&&%%%%%%%&%&&&&&&&&&&&&%%&&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%&%&&&&&&&&&&&&&&&%&%%%%%%%&%&&&&&&&%&%$%%%%%&&&&&&&&&&&%&&&&&&&&&&&&&&&&%%%$%%%%%%&&&&&&&&&&&&&&&%&%%%%%%%&&&&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&%&%$$$$$%%%&&&&&&&&&&&&%%%%$$$$$%%%&&&&&&&&%$$$$$$%%%&&&&&&&&%%&%%$%$%%%%&&&&&&&&&&&%&%%&&%&&&&&&&&&&&&%$$####$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%$$$$$$%&&&&&&&&&&&&&&&&%%%$$$$$%%&&&&&&&&%%$$$$$%%%&&&&&&&&&&%&&%%&%&&&&&&&&&&&%%$$$$%%&&&&&&&&&&&&&&&&%%%$$$$$%%&&&&&&%%%%$$$$$%%&&&&&&&&&&%&%&%&%%&&&&&&&",
+"&&&%$##++#$$%%&&&&&&&&&&&&%%###++$%%&&&&&&&%%$$$+++$$%&&&&&&&&&&%%$$$$$$#$%%%&&&&&&%%%%%%%%%%%%&&&&&&&&%%%$@+OOO#$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$##++$$$%&&&&&&&&&&&&%&&%%$#++##$%%&&&&&&%%$#@++$$%%&&&&&&&%%%%%%%&%%%%&%&&&&&%%$##++$$$%&&&&&&&&&&&&%&&%%$#++##$%%&&&&&&&$$#+@+$$%%&&&&&&&&%&%%%%%%%%&%&&&&",
+"&%%%$#@+O##$%%%&&&&&&&&%%%$$#@@++$$%%&&&&&&%%$#@+++#$$%&&&&&&%%%$$#@@#@#@#$$%%&&&%&%%%$%%%%%%%%%&&&&&&&&%$$@+ooO##$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%$#@+O##$$%%&&&&&&&&&&&&%$$##O+@#$%%&&&&&&%$$#+++@#$%%%&&&%&%%%$%%%%%%%%%%&&&&&%%$#@OO##$$%&&&&&&&&&&&&&%$$##O+@#$%%&&&&%%%$##O++#$$%%&&&&&%&%%%$%%%%%$%%&&&&",
+"&&&$$#@OO@@#$%%&&&&&&&&&&$$#@++OO#$%&&&&&&%%$#@@OOO@#$%%%&&&&&%$$##@+@+@@@#$%%%&%&%%$$$#$$#$$$%&%&&&&&&&%$#++ooo@#$%&&&&&&&&%&%&%&&&%&%&%&&&&&&&&&&&&%&%&%&%&&&&&&%%##@OO@@#$%%%&&&&&&&&&%%%$$@@OO@##%&&&&&%%%$#@OOO@##$%&&&&&%%$$$$$$$$$$$%%&&&&&&$$#@OO@@#$%%&&&&&&&&&&%%%$##@OO@#$%%&&&&&%$#@@OOO@#$%%&&&&&&%%$$$#$$$$$$%%%&&",
+"&&&%$#@oooOO#$%%&&&&&&%%%$#@oXX+@$$%%&&&&&%$$#oXXXX++$$%&&&&&%%$@+O.....Xo@#$%&&%%%##@++###++$$%&&&&&&&%%$#OoOO+++$%%&%&&%&%%%%%%%%%%%%%&&&&&&&&%%%%%%%%%%%%&%&&&&%%$##oooOO#$%%%&&&&&&&&&%$#+OOoo@$$%&&&&&&%$#+OXXXXo#$$%&&%%%##@++###++##$%%&&&&&%$##oooOO#$%&&&&&&&&&&%%$#+OOoo@#$%%&&&%%$$#oXXXX+@$$%%&&&%%$$@@++###++$$&%&&",
+"&&%%$$#ooooO#$$%&&&&&%&%$#@+XXX++#$%&&&&%%%$#@XXXXXO+#$%%&&&&%$$++O.....XX@@$%%&&%$#@@OO@@@OO#$%%&&&&&%%$$@OoOOO++$$%%&&%&%%$%$%$%%$%$%$%%%&&&&%%%%$$$$$$%$%%%&&&&&%$##ooooO@#$%%%&&&&&&%%$##OOOXo@#$%%&&&&%$$#+oXXXoo@#$%%&&%$#@@OO@@@O+@##$%%&&&%%$$@OooOO#$$%&&&&&&&&%%$##+Oooo#$%%&&&&&%$#@XXXXXO+#$%&&&&&%$##@OO@@@OO$$%&&&",
+"&&%%$#@++ooo@#$%%&&&&%%$$#++oOO+#$$%%&&&&%$#@+OoOOOoO#$%%&&&&%$#+OoOOXXoOO@#$%%&&%$#@++O+++O+#$%%&&&&&&%$#@OOoXo@@$$&&&&%%$$#####$$#####$$%&%%%%$$#########$$%%&&&%%$#@++ooo@@#$%%&&&&%%$$$@@ooX++##$%&&&%%%$#@ooOoOoO+@#$%&%%$#@@OO+++OO+@#$%%&&&&%$$@++ooO@$$%&&&&&&&&%$$@+ooo+@#$%%&&&%%$#@+OoOOOO+$$%%&&&&%$#@++O+++++#$%%&&",
+"&%%$$#@++XXo@@$$%%&&&&$$#@+OooO+@#$%&&&&%%$@@+OoOOOoO@#$%&&&%%$#+OoOOoXXO+@#$%&&%$$@++OoOOOOO@$$%&&&&%%$##@OooXo+@#$%%&&%$$#@@@@@@@@@@@@#$$&&%$$$#@@+@++@@@@$$%&&%%$$#@++XXo++##$$%&&&%$$##++ooX++@##$%&&&%$##@ooOOOoO+@@$%&&$$#@+OO+++OO+@@$%%&&&%%$#@+OooO@#$%&&&&&&%%$$#@+oXo@@$$%&&&&&%%#@+ooOOOO+#$%&&&&%%$#@+OoOOOO+#$%&&&",
+"&%%$#@++OoXo+@#$$%&&%%$#@+OOooo+@#$$%%&&%$$@+OooOOOoo@#$%%&&%%$@OOoOooXooO@#$%%&%$#@++ooOOOOO@#$%%&&&%$$#@+ooXoX+@##%%%&%$#@++++@+@+++++@#$&%$$#@@+++++++++@##%&&%$$#@++OoXoO+@@#$$&%%$$#@@+OXoXO++@#$$&&%$$#@+oooOOoo++@#$&%$#@++ooOOOoO++@#$%&&&%%$#@+Oooo@#$%&&&&&&&%$#@++oXo@#$%%&&&&&%$#@+OoOOOO+#$%&&&&%%$#@+oOOO+O+#$%&&&",
+"%%$#Ooo .. .XX@#$%%&%$#OOo. ...XX@#$%&%&%$#Ooo. ...XX@#$%%%&%$$#ooo. . .XX@#$%%&%$#Ooo.. ..XX@#$%%&&%%$#Ooo.. ..XX@#$%%&$#@... .XXX.. ..oO#&%$#OOO.... ... .+#$&%%$#OOo.......oOO#$&&%$#OOo... ...ooO#$&%%$#Ooo.... ..ooO#$&$$#Ooo... ...ooO#$$&&%&$@@+ .. .@#$%%&&&&%%$#@+.. ..+@$$&&&&&%%$@+O. . .+@$%%%&&&%%$@++ .. .+@$$%%&&",
+"%%$#Ooo. . .XX@@$$%&%$#OoX. . .XX+##$%&&$$#ooo .  .XX+@#$%&&&$$#ooX. . .XX+@#$%&%$#ooX . . XX+@#$%&&&%$#Ooo . . XX@@#$%&$#@... .XXX... .oo@&$#@Ooo.  . .. ..+@$&%$#@Ooo.  . ..ooo@#&%$#@Ooo. . . .ooO@#&%$#@Ooo . . . ooo@#&$#@Ooo . .  .ooo@#$&&%%%#@+. . .+#$%%&&&&&%%@@+.. . @#$$&&&&&&%$#@+. . .@@#%%&&&&%%$@++. . .@@$$&%&&",
+"&$$#OOoOOOOO..O+@$%&%##OOoOOOOO..O+@$%%&$$#OOoOOOOO..O+@$%%&%%##+OOOOOOO..O+@$%&%##OOoOOOOO..O+@$%%&%%$#OooOOOOO..O+@$%&$#@Ooooo  .oOOOO..@&$#+...oo+++oo   +@#&%$#@.. ooO+OoX...+#&%$#+...oo+O+oo...+#&%$#@...oX+O+Xo...+@&$#+...oo+O+Xo ..+@$&&&&$$#@++...@@$%&&&&&&%%$#@++...+@$%%&&&&&%$$#@++...+#$%%&&&&&%%$#@++...@@$%%&&&",
+"%%##OooOoOOO..O++$$&%$@OOoOOOOO..O++$$&&%##OooOOOOO..O++$$%&%%$@+OoOOOOO..O++$$&%$@OOoOOOOO .O++$$%&%$$@OOoOOOOO..O++$$&$#@OooOo.. OOOOO .@&$@+...oO@@@OO.  +@$&%$#+...XoO+Ooo ..+@&$$@+. .oo+O+oo ..+@&%$#+.. ooO+OoX. .+@&$@+. .XoO+Ooo...+##&&&%%$$#@+. .+#$$&&&&&&%%%$#@+. .@#$%%&&&&&&%$$#@+. .+##%&&&&&&%%$$#++. .+#$$&&&&",
+"%$$@OOoOOOOO..OO+#$&$##OoooOOOO..O++#$%&$##OOoOOOOO..OO+#$%&%%##OOOoOOOO..OO+#$&$##OOooOOOO..OO+#$%&%%##OOooOOOO..O++#$&$#+OOooO  .oOOOO. @&$@+...++###@@OOO@#$&%##+. .oo+O+Xo...+@&$#@+.. ooO+Ooo ..+@&%##+...XoO+Ooo...+@&#@+.. ooO+OoX ..+@$&&&&&%$#@+...@@$%%&&&&&&%%$#@+...+@$$&&&&&&%%%$#@+...@@$%%&&&&&&&%$$@+...@@$%&&&&",
+"%$#@ooo.. .   O++$$&$#@Ooo.. .   OO+$$%&$#@OoX.. .   O++$$%&%$#@Ooo. .    O++$$&$#@ooo. ..   O++$$%&%$#@ooo.. .   OO+$$&#@+XXX. .. XXXXX .+&#@+...+@@##@@OO+@#$&$$@+. .XXXXXXX  .+@&$$@+ ..XXXXXXX. .+@&%$@+  .XXXXXXX ..+@&$@+ . XXXXXXX. .+@$&&&&%%$##+. .+##%%&&&&&&%%$$@+...@@$%%&%&&&&%%$##+. .+##%%&&&&&&%%$##+. .+##%%&&&",
+"%$#@ooX. . .. OO+#$&$#@ooo. . .. OO+#$%&$#@ooo. . .. OO+#$%&%$#@oXo.. ... OO+#$&$#@ooo.. ... OO+#$%&%$#@ooo . .. .OO+#$&#@OXXX .  .XXXXX .+&$@+. .OO++@+@++++@#&$#@+ . XXXXXXX. .+@&$#@+.  XX.XXXX. .+@&$#@+.. XXXXXXX  .+@&#@+. .XXXXXXX. .+@$&&&&&%$$@+...@@$$%%&&&&&&%$$#+. .+##$%%&&&&&&%$$@+...@@$$%%&&&&&&%$$@+...+@$$%%&&",
+"%$@+.. OO+OOXXoO+#$&$@+. .OO+O+XXo++#$%&$@+.. OO+O+XXOO+#$%&%$@+.. OO+OOXXoO+#$&$@+.. OO+OOXXoO+#$%&%$@+.. OO+O+XXo++#$&@oXXXX+O.  oXooooo@&$#@ooX..oXoXX...OO$&$$@+ . XXoooooXoo+@&%#@+ . XXoXoXoXoo+@&$#@+  .XXoooooXoo+@&#@+ . XXooooXoXo+@#&&&%%%$#@+. .+@#$%%%&&&&%%$#@@...+@#$%%&&&&%%%$#@+. .+@#$%%&&&%%%%$#@+. .@@#$%%%&",
+"$$@+...OOO+OXXOO+#$&$@+. .OO+OOXXoO+@$%&$@+...OOO+O.XOO+#$%&$$@+...OOO+OXXOO+#$&$@+...OOO+OXXOO+#$%&$$@+...OO+OOXXoO+#$&#ooXoXO+. .XXoXoXo@&%$#oXo .XXXXX...oO#&%#@+.  XXXXoXoXXo+@&%#@+. .XXXooooXXo+@&$$@+ . XXoXXoXoXo+@&$@+  .XXXoXoXoXo+@$&&&%%$##@+...+@##$%%&&&%%$#@@+ ..+@##$%%&&&%%$##@+...+@##$%%&&&%%$##@+...+@##$%%&",
+"%$@+.. +O+OOXXoOO@#&#@+...OO+O+XXoO+@#$&$@+. .OO+O+XXoOO@#%&$$@+. .O+O+OXXoOO@#&$@+. .O+O+OXXoOO@#%&%$@+.. +O+OOXXoOO@#&#oXoXoO+ . oXoooXo@&$$##@+oo...XoooO@#$&%$@+ . XXoooXooXo+@&%$@+ . XXoXoXoXoo+@&%$@@  .XXoooooXXo+@&$@@.  XXooXooXoo+@$&%&%$$@@++ ..++@##$%&%%%$$#@++. .++@##$%&&%%$$@@++. .++@##$%&&%%$$@@++ . ++@##$$&",
+"$$@+...XXXXX .XXX@#&$@+.. XXX.X  XXX@#$&#@+...XXXXX  XXX@#$&$$@+...XXXXX  XXX@#&#@+...XXXXX  XXX@#$&$#@+...XXXXX  XXX@#&@oo...... ...XXX..@&%%$##@Oo...XooOO@#$&$$#@XXX..XXXXX. .@@&%$#@XXX..XXXXX . @@&%$#@oXX. XXX... .@@&$#@XXX..XXXXX . @@$&&%$$+OooX.  XXoO+$$&&%$$+OooX . XooO+$$&&%$$+OooX . XXoO+$$&&%$$+OooX. .XXoO+$%&",
+"$$@+. .XXX.X .XXX@#&$@+...XXXXX .XXX@#$&$@+.. XXX.X. XXX@#$&%$@+. .XXX.X .XXX@#&$@+. .XXX.X. XXX@#$&%$@+. .XXX.X. XXX@#&#oo..... . ..XXX..#&&%$$#@OO...XoOO+#$%&%$$@oXX .XXXXX . @#&%$$@oXX..XXXXX ..@@&%$$#ooX..XXX.. . @#&$##oXX. XXXXX . @#$&&%$#+OoXX. .XoooO#$&&%$#+OoXX. .XXoOO#$&&%$#+OoXX. .XoooO#$&&%$#+OoXX. .XoooO#$&",
+"%$$@OoOXoooXooooO@$&$#@OOooXoXoooooO@$$&$#@OOoooooXOoooO@$$&%$$@OOooXoooooooO@$&$#@OOooXooXOoooO@$$&%$$@OoooXooXOoooO@$&#@+oooooO+Oooooo+@#&&&%%$#++XXXoo+##$$%&%%$#@@+OooooXoO++@$&&%$#@@+ooooXooO++#$&%%$##@+Ooooooo++@@$&%$#@@+OooooXo+O@@$$&&%$$++OoooooooOO+#$&&%$#++OooooooooO+#$&&%$$++OoooooooOO+#$&&%$$++OoXoooooOO+#$&",
+"%$$#+OOoooooooooO#$&%$#+OOoooooOOooO#$$&%$#+OOoooooOOoOO#$%&%$$#+OOoooooOOoOO#$&%$#OOOoooooOOoOO#$$&%$$#+OOoooooOOoOO#$&$@@ooooo+++ooooO@#$&&&&%$#@+X.XoO@#$%&&&&%%$##@OOooooo+@@#$&%%%$##@ooooooo+@@#$&%%%$##@OOooooo+@@$$&%$$##@OOooooo+@@#$%&&%$$++OoXoooooO++#$&&%%$@+OoXoooooO++$$&&%$$++OoXoooooOO+$$&&%$$@+OoooooooOO+$$&",
+"&%$#++OOOoOOO+OO+#$&%$#++OOOOOO++OO+#$%&%$#++OOOoOO++OO+#$%&&%$#++OOOOoO++OO+#$&%$$++OOOoOO++OO+#$%&%%$#++OOOoOO++OO+#$&$##OOOOO@@@OOOOO##$&&&%%$#oo...++#$%&%&&&&%%$##+OOOOOO@@#$%&&&%%$##+OOOOOO@@#$%&&&%%$$#+OOoOOO@##$%&&%%$##++OoOOO@@#$%%&&%%$@@+OoOoOoOO+@$%&%&$$@@+OoOooOOO++$$&&%%$@@+OoOoOoO+++$%&&&$$@@+OoOoooO+++$%&",
+"&%%$$###@@@#@####$$&&%$$##@@@@#@###$$%%&&%$$##@@#@@#@###$$%&%&%$$##@@#@#@####$%&%%$$###@#@@#@###$%%&&%%$$###@#@#@####$$&%$$#############$$%&&&%%$#oo...+@$$%&&&&&&&%%%$$##@###$$$%%&&&%%%$$##@@####$$%%&&&%&%$$$#######$$%%&&&%%$$########$$%%&&&&%%$$##@#@@####$$%&&&%$$###@#@#@###$$%&&&%%$$##@#@@#@##$$%&&&%%$###@@##@###$$%&",
+"&&%%$$#$$$$#$#$$$%%&%%%$$$$$$#$$$$$$%%%&%%%$$$$$#$$$$$$$%%&&&%%%$$$$$#$#$$$$$%%&&%%$$$$$#$$$$$$$%%&&&&%%$$$$$#$#$$$$$%%&%%$$$#$$$$$$$$$$%%&&&&&%$$#@@@@##$%%&&&&&&&&&%$$$$$#$$$%%%&&&&&&%%$$$$$#$$$$%%&&&&&&%%%$$#$#$$$%%&&&&&&&%%$$#$#$$$$%%&&&&%&%%$$$$#$#$#$$$%&&&%&%%$$$$#$#$$$$$%&&&%&%$$$$$#$$$$$$$%%&&%&%%$$$$#$#$$$$$%%&",
+"&&&%&%%$%$%$%%%%%&&&&&%&%%$%%$%$%$%%%&&&&%&%%$%$%$$$%%%%&%&&&&%&%%%$%%%$%$%%%&&&&%&%%$$%$%$$%%%%%%&&&&&%%%$$%%%$%$%%%&&&&&%%%%$%%%%$%%%%%&%&&&&&%$$####$$%%&&&&&&&&&&&%%%$%%$%%%&&&&&&&&&&%%%$%$%%%&&&&&&&&&&%&%%%%$%%%&%&&&&&&&&%%%%$%$%%&&&%&&&&%%%%$$%$%$%$%%%%&&&&&%&%%$%$%$%$%%%&%&&&&&%%$$%$$$$%%%&&%&&&&%&%%$%$%$$$%%%&%&",
+"&&%%%%%%%%%%%%%%%%&&&&&&&&&%&%&%&%&&%&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&%&%%&%&&%&&&&&&&&&%%%%%%%&&&&&&&&&&&&&%&%%%%&%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%&%&&&&&&&&&&&&&&&&&%&%%%%&%&&&&&&&&&%&%%%%&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%%%%$$$#$$$$$$$%%%&&&&&&&%%%%%%%%%%%&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&%&%%%%%%%&&&&&&&&%%%$$$$$%%&&&&&&&&&&&%%%%%%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%&&&&&&&&&&&&&&&&&%%%%%%%&%&&&&&&&&%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%%%%%%&&&%%$$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%%$$###@@@#@@##$$$&&&&&%&%%$$$$#$$%%%%&&&%&%%$$$$%%%&&&&&&&&&&&&&&&%%%$$$$%%%&&&&&&&%%$$###$$$%%&&&&&&&&%%$$$#$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$$$%%%&&&&&&&&&&&&&&%%$$$##$%%&&&&&&%&%$$$#$$%%%&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&%&%$$$$$%%&&&%$$#@@##$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&",
+"%$##@+@++@+@@+@##$%&&&&%%$$##@####$$%%&&&&%%$$###$$%%&&&&&&&&&&&&&%%$$###$$%%%&&&&&%%$##+@+##$%%&&&&&&&%%$$#@#@###$$%%%&&&&%&&%&&%&%%%&%&&&&&&&&&&&&%&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%$$###$$%%%&&&&&&&&&&&%%$$####$%%%&&&&&%%$$#@###$%%&&&&&&&&&%&&%&&%%&%&%&&&&&&&&&&&%%$$####$%%%&$##@+@@##$%&&&&&&&&&&&&&&&%%%%%&%%%&%&&&",
+"$$+O.....XoX..oO+$$&&&%%$$#OOOO+OO##$%%&&%%##@oo@##$%%&&&&&&&&&&%&%$##@..@#$%%&&&&&%$$++...++$$%%&&&&&&%$$@+ooo++++@$%%&&&&%%%%%%%%%%%%%&&&&&&&&&%&%%%%%%%&&&&&&&&&&&&&&&&%&%%&&&&&&&&&%##@oo@##$%%&&&&&&&&&%&%$#++OoO#$%%&&&&%%$#@+oXo##$%&&&&&&&&&%%%%%%%%%%%%&&&&&&&&&&%%$##@..@#$%%&$#@. .Xo@$$%%&&&&&&&&&&%%%%%%%%%%%%%%%&&",
+"$#+O... .XXX..oOO#$&&%%$##@ooOoOoO@##%%&&%%$@@oX+@#$$%&&&&&&&&&&&%$$@@+..@#$%&&&&%%$$#+O...O+#$%%%&&&%%%$#+OoXoO++++$%%&&%%%$$$$$$$$$$$%%%&&&&&&&&%$$$$$$%%%&&&&&&&&&&&%%%%%%%%%&%&&&%%$#@@oX+@#$$%%&%&&&&&%%%$$#+OOoo@$$%&&%%%$$#+OXXX@#$$%%&&&&%%%$$$$$$$$$$$%%%%&&%&%%%%$$#@+..@##$%&$@@ ..XX@#$%%%&&&&&&&&&%%%$$$$$$$$$$$%%&",
+"$#+O... .XXX..oo+#$&&%$$#@+oXOoooo@##%%&&%%##+oX+++#$$%%&&&&&&&%%$$#+++..@@$$&&&&&%$#@+O. .OO@#$%&&&&&%$#@+OXXXOOO++$$%&&%%$$########$$$%%&&&&&&%%%$##@#$$%&&&&&&&&&&%%%%$%$$%$$%$%&&%%$#@+XX+++##$$%%&&%%%%$$$#@Ooooo@#$%%&%%$$#@OOXXX+@#$$%%&&&%$$$##########$$%&&&%%%%$$##+@+..+@#$%&$#+. .XX@@#$$%%%&&&&%%%$$$##########$$%&",
+"$#OOoooXX . XX++@#$&%$$#OOoXX...oX@#$%&&&%%$#@+OXXX@#$%%%&&&&&%%%$#@oXXOO@#$%%%&&%%##+XXOOOXX@@$%%%&&%%##@XXXXX..++@$%%&%%$#@@oo@@@Oo+@#%%%&&&&%&$$@+ooo#$%%%&&&&&&&%%$$$##$####$$$&%%$##@@+OXXo@##$$%%&%%$$###++XXX++@#$$%&%$#@@+XXoooXo@#$$%%&%%$#@++oO@@@..@#$$%&%%$$$###@XXXOO+@#$$&$#@OOoXX+@##$$$%%%&&%%$$##@..@@@oo++@#$&",
+"$#+OoooXX . XXO+@#$&%$#@oooXX. .Xo@#$$&&&%%$#@OOXXX+@#$%%&&&&&%%$#@+XXXO+@#$%&%&&%$#@+XXO+OXX+@#%%&&&%$#@+XXXX...+@@$%&&%%$@++oo+++oo++@$%&&&&&&%$$@+ooo@#$%&&&&&&%%%$$##@@@@@@@##$&%$$#@++OOXXX+@@##$%&%$$#@@@++XXX++@@#$$&$##+++XXooOXX@@#$%%&%$#@++Ooo+++..@@#$%&%$$#@#@@@XXXOO+@@@#&%$#+OoXX++@@@##$%%&&%$##@@+..@+@ooOO+@#&",
+"%#@+XXXoOOOO .ooo@$&$#+OoXXOOXoXXo+@$$%&&%$##@ooXXXoO@#$%%&&&%%$#@OoXXXXo@#$$%&&%%$#@+oXXXXXo@@#$%%&%%$##+oXXXXXX+@#$%%&%%##++oXoXXXo@@#$%%&&&&%%$#+O...@#$%%&&&&&%%$$@Oooooooooo++&$$+OooX+++++XooO+#$&$$++ooo+++++XXoO+#$&$+OoXXOO+O+XXoOO#$%&$$+OoXX++@++oXoOO#$&$$++ooXOO+++oOXXo++&$##+OoXXoXooo+@@$$%&$$@OoXooo+@+oooXoO+&",
+"$$@+XXXoOOOO. Xoo@#&$#+OXXXOOXXooo+##$%&&%$#@+oXXXXoo@@#$$%&%%$##+ooXXXoo+@#$$%&%$#@++XoXXXoX+@#$$%&%%$#@+oXXXXoo+@@$$%&%$#@++XoXXXoX+@#$$%&&&&%$$@OO. .@#$%%%&&%%%$#@@ooXXXooXXoO+&$#+OXXX+++@+XoooO#$&$#+OXXo++@++oXooO#$&#+OoXoO++++XXooO#$$&$#+OXoXO++++XXooO##&$#+OXoXOO+++OoXXoO+&%$#+OOX.oXoXo+++#$%&$#+OoXXoo+@+ooXXoO+&",
+"%$@+XXXOOOOO..oXo@#&$#OOoXXOOoXXXo+@#$$&%$#@@+ooXXXoX+@##$%&%$#@@+XoXXXXX+@@#$%&%$#@++XoXXXXo++@#$%&%$#@++XoXXXXX++@#$%&%$#@+OoXXXXXo++@#$%&%&%%$##Oo...@@#$%%%&&%$#@@+ooXXXXXXXXO+&$#+OoXXO+@+@XXooo@#&$#+OoXXO+@@+XXooo@#&#+OXXXO++++XXooo@$$&$#+OXXX++@++oXooo@$&$#+OXXXoo@@+oOXXXO+&%$#+OoXXoXXXXO++@#$&$#+OXXXoo+@+ooXXXOO&",
+"%$#@oXX....  . ..+#&$#+O.....XoX..XoO#$&$$#XXX..ooX..XXo@$$&$$#XXX..ooo..XXo#$$&$$@oXX..Xoo..XXo##$&$$@oXX..ooo..XXo@$$&$$@oXX..oXo..XXX##%&%%$$#@@++OO++@###%%&%$$#oXX..ooo..XXX+@&$#+O...O+@@+oXXXX@#&$#+O...OO@@@oXXXX@#&#+O...OO@+@XXXXX@#$&$#+O...OO@@+XXXXX@#&$$++...oo+++oo. .++&%$#+OO  XXXXX.  ++#&$$++...oo+++oo ..O@&",
+"$$#@ooo. . .. ...+@&$#+O.. ..XoX..ooo@$&$#@XXX..Xoo..XXX@#$&$#@XXX..oXo..XXX@#$&$#@XXX..XXX..XXX@#$&$#@XXX..oXo..XXX@#$&$#@XXX..XoX..XXX@#$&%$$#@@+++OO+++@@#$$&%$#@XXX..oXo. XXX@@&$#+O...OO@@@XXXXX@#&$#+O...OO@@@XXXXX@#&#+O...OO@@+oXXXX@#$&$#+O. .OO@@@oXXXX@#&%$#@ooXXX+++XXooo@#&%$$+OO..OO+++XXXXo@&%$#@ooXXX++OXXooo@#&",
+"%$@@ooX. . . . ..+@&$#+O.....XoX..Xoo@#&$#@XXX .ooo. XXX@#$&$#@XXX..ooo..XXX@#$&$@@XXX..ooo. XXX@#$&$#@XXX .ooo..XXX@#$&$@@XXX..ooX..XXX@#$&%$##+++OO+OO++++@#$&%$@@XXX .XoX..XXX+#&$#++...O+@@@oXXXX@#&$#+O...O+@@+oXXXX@#&#++...O+@@@oXXXX@#$&$#+O...OO@@@XXXXX@#&%$##oooXXOO+XXXoO@#&%$#+OO..++@++XXXoo@&%$$@OooXXO++XXXoO@#&",
+"$$@+. .oo++++O. .+@&$$#+XXXoo+++OoXXX@#&#@+...OO+++OO...+@$&#@+...OO+++OO ..+@$&$@+. .O+++++O...+@#&#@+...OO+++OO ..+@#&$@+. .OO+++OO ..+@#&$$OO .. . . ... .@#&$$@+. .OOooo.X ..+@&$$@+XXXOO@@@OoXXX@#&$$#+XXXOO@@@+oXXX@#&$@+XXXOO@@@OoXXX+#$&$$#+XXXO+@@@+oXXX+#&&%%$#++..OOO .+@#$%&%$#@OoXX+++++OoOXo@&&&%$#@+..OoO..++#$%&",
+"%$@+...oO++++O...+@&%$@+XX.oo+++OOXXX@#&#@+. .++@@@+O. .+@#&$@+. .O+@@@+O.. +@#&#@+...O+@@++O. .+@$&$@+. .++@@@+O...+@$&$@+.. ++@@@++...+@$&$$OO. . .   . . .@#&%#@+...OOoooXX ..+@&%$#+XXXOO@@@+OXXX+#&%$@@XXXO+@@@OOXXX+#&$#+XXXO+@@@+OXXX@#$&%$@@XXXOO@@@OOXXX@#&&%%$$#+XX. .XX@@$$%&%$#+OO  oOoOO. .O+#&&&%$$@@XX...XX@#$$%&",
+"$#@+...++@@@++...+@&$$#+XXXoO@@@OoXXX@#&#@+...++@@@++...+@$&#@+...+@@@@++...+@$&#@+ ..++@@@@+...+@$&#@+...++@@@@+ ..+@$&#++...++@@@++ ..+@$&%$#@@@+++++++++@@$$&$$++. .OoXXXOO...+@&$$#+XXXO+@@@OoXXX@#&$$#+XXXO+@@@+OXXX@@&$#+XXXO+@@@+oXXX@@$&$$#+XXXO+@@@+OXXX+#&&&&%$#@oX...Xo@#$%&&%$#+OO..oooOO. .O+#&&&&%$#@oX. .Xo@#$%&&",
+"$$@+...++@@@++. .+@&%$#+XXXOO@@@OOXXX+#&#@+...++@@@@+...+@#&#@+...++@@@@+...+@#&#@+...+@@@@++...+@#&#@+...++@@@++...+@#&$@+...+@@#@++...++$&%$$##@@++++++@###$%&$$@+...ooXXXOO...++&%$#@XXXoO@@@OOXXX+@&%$#+XXXoO@@@OOXXX+#&$#@XXXO+@@@+OXXX+#$&%$#+XXXO+@@@OOXXX+#&&&%%$#@OO  .O+@$$%&&%$$+OO.. .. .XXX+@#&&&%%$#@OO. .O+@#$%%&",
+"$#@+. .+++@@++...+@&$##+XXXOO+@@OoXXX@@&$@+...++@@@++...+@$&#@+...++@@+++...+@$&$@+...++@@@++...+@$&#@+ ..++@@@++...+@$&#@+...++@@@++...+@$&&%%$$#@@++++@@#$$$%&$#@+...OoX.X++ ..+@&%$#+XXXOO+++OoXXX@@&%$#@XXXOO@+@OoXXX@@&$#+XXXOO+@+OoXXX@@#&%$#@XXXOO+@++oXXX@@&&%%%$#@OO. .++#$%&&&%$#+OO. . . .ooo@#$&&%%%$#@OO . ++#$%&&&",
+"%$@+...oo+++oX...+@&%#@+XXXoO+@+OOXXX+@&#@+...ooO++XX. .+##&$@+...oo+++oX...+#$&#@+.. ooO++oX. .+##&$@+...oo+++oX. .+#$&$@+.. oo+++oX...@@$&&%&%$$#Oo. .@#$$%&%&%$@+. .. OOOXX...+#&%$#@XXXoo+++oXXXX+@&%$#@XXXXo+O+oXXXX+@&$#@XXXXo+++oXXXX+##&%$#@XXXXo++OoXXXX+@&&&%$#@@oXXXX+@$$%%&&$$#+OoXXO+++++@##$%&&&%$#@@ooXXX@@$%%%&&",
+"$$#@...XXOOOoX...+#&$#@+XXXOO+++OO.XX+@&$#+. .XoO+Ooo...@#$&$#+...XXOOOoX...@#$&$#+...XoO+OXo...@#$&$#+...XXOOOXo...@#$&$#+...XX+++oX...@#$&&&%%%$#Oo. .@#$%&%&&$#@+.....OOOoX...@#&%%##XXXXoOOOXo.XX+@&%$$@XXXoX+OOXo.XX+@&$$#XXXoXOOOXo.XX+@#&%$$@XXXoXOO+Xo.XX+@&%%$$#@+ooXXX@@$%&&&&$#@+OoXXO+++@##$$%%&%%$$#@+oXXXX+##%%&&&",
+"%$#@Ooo.. . . oOO@#&$#oX   . ++O. . .oO&$#@OOo.. . . oOO@$$&$#@Ooo... . .ooO@#%&$#@Ooo.. . . oOO@$$&$##Ooo... .. oOO@#$&$#@OOo..   ..ooO@$$&&&&%%$#@+ooO@#$%&&&&%$@+XXX ... ..oOO@#&%%$#++O........ .oO&&%$#++O........ .oO&%$#@+O........  oO#&&%$#@+O... .... .oO&&%$#ooX  ...+#$%%&&&$#@XXX .Xoo@##$$%%&&&%$#ooX. ...+#$%&&&&",
+"&$$#+OO.. . ..oO+#$&$#OX. . .OOO. .  oo&%$#OOO . . ..oOO#$%&%$#+OO.. . ..OO+#$$&%$#+OO .. ...OOO#$%&$$#+OO.. . ..oO+#$%&%$#OOO.. . . OO+#$%&&&&&%$$@+OOO#$%&%&&&$$#+XXX.  . . Oo+#$&&%$$@++..   ...  oo&%%$$@++.. . ..   oo&%$##++. .  .. . oo#&%%$$@@+.... ..   oo&%$$@ooX.. ..@#$%%&&&$#+XXX .Xoo@#$%%&%&&%$$@ooX ....@#$$&&&&",
+"&%$#+OO... ...OO+#$&$#oo..  .+++. . .oO&%$$+OO.... ..O++#$%&%$#++O... ...OO+$$%&%$#++O.. . ..O++#$%&%$#+OO.. ....OO+#$%&%$$+OO.. . ..OO+#$%&&&&&%%$#@OO+#$$&&&&&%##+XXX ... ..O++#$&&%%$#@+....... . oO&&%%$#@+.. . ... .oO&&%$##+.... ... .oO#&&&%$#@@.. . ... .oO&&$$@ooX ....@#$%&&&&$#@XXX..Xoo#$$%&&&&&&$$@ooX. ...@#$%&&&&",
+"%%%$$#@@@@+@@@@#$$%&$##@@+@@@@@@@@+@@@#&%%$$#@@+@+@@@@#$$%%&%%$##@@@@@+@@@##$%%&%%$##@@@@+@@@@#$$%%&%%$$#@@@@@+@@@#$$%&&%%$$#@@@@+@@@@#$$%%&&&&&&%$$#$##$%%&&&&&$$++XXX+++@+@@@#$$%&&&%%$$#@@+@++@+@@@#&&&%%$$#@@@+@+@+@@@#&&%%$$#@@+@@+++@@@#$&&&%%$##@@@+@@++@@@#&%%$#oooooooO@#$%%&&&$#@OoXoooOO#$%%&&&&&%%$#oooooooO@$$%&&&&",
+"&&%%$$#####@###$$$%&%$$###@###########$&%%%$$####@####$$$&&&&%%$$###@#####$$%%&&&%%$$####@#@##$$$%&&%%%$$###@#####$$$%&&%%%$$####@####$$$&%&&&&&&&%%$$$%$&%&&&&&%$++ooo@@@#@###$$$&&&&%%%$$#######@###$&&&%%$$$######@####$&&&%%$$###@####@##$$&&&&%%$$###@#@##@##$&&$$#OOooOoO+#$%&&&&&%$#OOoooOOO#$%%&&&&&&$$#OOoooOOO#$%%&&&&",
+"&&&%%%$$$$$$$$$%%%&&&%$$$$$$$%$$$#$$$$%&&&%%%$$$$$$$$$%%&%&&&&%%%$$$$#$$$$%%%&&&&&%%%$$$$$$$$$%%%&&&&&%%%$$$$#$$$$%%%&&&&&%%%$$$$$$$$$%%&%&&&&&&&&&%%%%%&%&&&&&&%$$#######$$$$$%%&%&&&&&%$%$$$#$#$$$$$%&&&&&&%$$$#$#$$#$$$%&&&&%%%$$$$$$#$$$$%%&&&&&%%$$$$$$$$$$$$%&&%%$##@@#@##$$%&&&&&%$$#@#@@###$$&%&&&&&&%%$##@#@###$$%&&&&&",
+"&&&&%&%%$%$%%%%%&&&&&&%%%$%%%%%%%%$%%%%&&&&%&%%%$%$%%%%%&&&&&&&%&%%%%%$%%%%&%&&&&&&%&%%%$%%%%%%&%&&&&&&%&%%%%%%%%%%&&&&&&&%%&%%$%$$%%%%%&&&&&&&&&&&&&&&%&&&&&&&&&%$$$#$$$$%$%%%%%&&&&&&&&%&%%%%%%$%%%%%&&&&&&&&%%%%%$%%$%%%&&&&&%&%%$%$%%$%%%%&&&&&&&&%%%$%$$$%%%%%&&&%$$$$$#$$$$%&&&&&&%%$$$$#$#$$%%%&&&&&&&&%$$$$#$#$$%%&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&&&%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$$$$$$%%&&&&&&&&&&&&&%%&%&&&&&&&%&%%%%%%%%%%%&&&&&&&&&&&%%%%%%%&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&%&&&&&&%%$$$%%%%%&&%&&%&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%&%&%%&%&%&&&&&&&&&&&&&&&&&&&&&&&&%%$#$#####$####$$%&&&&&&&&&&&%%%%%%%%&&&&&%%%$$$$$$$$%%%&&&&&&&&&%%%$$$%%&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%&%&%%&%&%&&&$$$###$$%%%%%&%&&&&&&&&&&&&&&&&&&&&&&&&&",
+"&&&&&&&&&&&&&&&&&&&&&%$$#$$$%%%&&&&&&&&&&&&&&&&&&&&%&&&&&&&&%%%%%%%%%%%%%%%%%%%&&&&&&%&%%%&&&&&&&&&&&%$##@@@@@@@@@@@@#$&&&&&&&&&%&%%$$%%%%&&&%&%$$$#####$$$%%&&&&&&&&&%$$$##$$%%&&&&&&&&&&&&&%%%%%%%%%&&&&&&&%&%%%%%&%&&&&&&&&&&&&&&&%&&&&&&&&&&&%&%%%%%%&&%&&&&&&&&&&&%%%%$%%%%%%%%%&&&$#@@@@##$$$%$%%%%%&&&&&&&%&%&%&&&%&&&&&&",
+"&&&&&&&%&%%%&&&&&&&&%$$++@@#$%%&%&&&&&&&&&&&&&&&&%&&&&%&&&&&%%$$$$$$$#$#$$$$$$%&&&&&%%%%%%%&&&&&&&&&%$##...ooooooo...@#&&&&&&&&&%%$$#@#$$%&&&&%%$+++++++O+$$%%&&&&&&%%%$#OO+#$%%&&&&&&&&&&&&&%%$$$$$$%%&&&&&&&%%%%$%%%&&&&&&%&&%%&%&%&&&%%%%&%&&&%%%$%$%%%%%&%%&%&&&&&%%%$##$#$$$##$%%&&#oo...++##$##$$$$%%&&&&&%%%%%&%&%%%%%%&&",
+"&&&&&&&%%$%$%%%&&&&&$$#+O+++#$$%&&&&&%&&&&&%%%%%%%%%%&%&&&&&%$###@#@###@#@###$$&&&%&%$$$$$$%%&&&&&&&%$#@...XXoXoXX...+#&&&&%&%&%%$$#+@@#$$&&&&%$$++OOOO+OO#$$&&&&&%&%%$##Ooo##$%%&&&&&&&&&&%%%$######$$&&&&%%%%$$#$#$%%&%&&&&&%%%%%%%$%%%%%%%%%&%%$$#$##$$$$%%%%%%&&&&%%$##@#@###@##$%%&@oo...O+@@@@+###$$$&&%&%%$%$%%%%%$%$%%%&",
+"&&&&&%%%$$#$$%%%&&&&$#@OOO++@#$%%&&%%&%&&&%&%%$$$$$$$$%&%&&&$##@@@+@+++@+@+@@#$&&&&%$$###$$%%&&&&&&&%$#@...XXoXXXX...+@&&&%&%%%%$$#@++@##$%&&%%$#+OoooOOoo@$$%%&&&%%$$#@@ooo@##$$%%&&&&&&&&%%$#@@+@@##$&&&%%%$$#@#@##$%%&&&&%%%$$$$$$$#$#$#$$$%&%$##@@@#@###$#$$$$%&&%%$#@++@@@@@++#$$%&@oX...OO@+@+++@@@#$&&&%%$$#$$$%$$$#$$$%&",
+"&&&&&%%$#++@#$%%&&&&#@+.....+@#$%%&%%%%&&&%%$$##@####$$%%%&&$Oo. ..... .......#&&%%%$@+OOO#$%%&&&&&&%$@+...XXoooXo...+@&%%%%%%$$$@++ .+@#$%&&%%$#OOOXXoo..@#$%&&%%$$$##@+...+@##$$%&&&&&&&&%$## ....oO#&%%%%$$#+O...@#$$%&%&%$$##@@@@#@#@#@@#$$&$#@ooooo+++@@#@###$&&%$$#ooooo+OO..+##$&#oo...XooOo..oooOO@&%%%##@OO##$$#+++#$$&",
+"&&&&%%$##+++@$$%%&&&##+.. ..++#$%%%%$$$&&%%$$#@@@+@@@##%%%&&#+O .. . . . .....#&&&%$$+OooO#$%%&&&&&&$$@+. .XoXooXX . +@&%%$$$$$$#++O. ++@$$&&%$$#OOoXXoo..+#$%%&%$$#@@@++. .++@@##$&&&&&&&%%$#@.  ..oO#&%%$$##@+O...+@$$%%%&$$#@@@@+@+@+@+++@#$&$@@oXoXoOOO++@+@@##&%$$#@oXXXoOOO..+@#$&#Oo...Xoooo  oXooo+&&%$$@@oO@####+O+@#$&",
+"&&&&&%$@+..OO#$%&&&&$#@++. .oO#$$$$#@++&%%$#+OO.. .XX++#$%%&$@@+++++XXX++++@@#$&&&%$#@+ooo@#$%&&&&&&$#@@XXX.....XX  .+@&$$@@@@@@#++O..O+@$$&&%$#@+OoXXOO..+@#$$&%$@+ooXoX. .oXooo+@&&&&&&&%$$@+ooXXo+@#&$$@@+++oOooo@@@##$%&$#Oo. . .. ......@#&#Oo . ....... . ..#&%$#@+oooXoOOO..++@$&#@@OOO..OOOoo...Xo+&&%$#@+..+@@@+...O+#&",
+"&&&&%$$@+..OO##%%%&&%$#++...oO@$$$$#@O+&%$##OOo. . XXO+#$$%&$##@@++OXXX+++@@##$&&&%$$+Oooo##%%&&&&&&$#@+XXX. ...XX.  ++&$#+++++@+++O..O++#$&$$##@OOoXX+O..+@##$&$#+OoXXXo . XoXoo++&&&&&&%%$#@+oXoXo+@$&$#++++OooXXX+++@##$&$#Oo  . . .   ...@#&#oo.  .......  ...@&$$#+OoooXXO+O .O++#&$#@+OO..OOOoX...Xo+&&%$#@+..+++@@...OO#&",
+"&&&&&%$@+ .oO@#$%&&&%$#@+ . oo@####@+OO&$$@@OOo  ..XXoO@#$%&$#@@@+++X.X++@###$$&&&%$#@+Xoo@#%%%&&&&&#@++X.X... .XX . ++&$#+OOOO+++OO. OO+#$&$##@+OOOXXOO..++@@#&$#+OXXXoX. .XoXoX++&&&&&&%$$@@+oXoXo@@$&$#+OOOOoooXo++++@@#&$@oo.  . .... . .@#&#Oo . .. . .. . ..#&$#@+OoooXoOOO..O++@&$#@OOO .OOOoo. .Xo@&&%$#@+..+++++...oO#&",
+"&&&&%%$#@oo..@#$%%&&%%$#+XXXOO@###@..O+&$#+O...+XXXXoXXO+#$&#+O++++OXXXOO@@@##$&%&&$$++ooo@#$%&&&&&&@@... .XXXooXX...oo&##..... . . ..XXX@#&@++oXXXX..oX .XooOO&##oo...Xo ..XXXXXoO&&&&&%%$#ooX... .+@$&#@... ... . .....+@&$#++...+++++OO...+@&$#@++O..XXX..++@@##&#@+... ......  ...+&$#@ooo. O++++...O+@&&%%$#@..oOoOoXXX..@&",
+"&&&&%%$##Oo..@#$$%&&%%$#@XXXOO@@#@@..O+&$@OO...+XX.ooXXOO@$&#OOOO++OXXXOO+@@@@#&&&%$$++Xoo@$$%&&&&&&@+.... XXoXXX.. .oo&$#.. .  . ....XXX@#&@+OoXX.X .Xo. oXooO&##oo. .XX.. oXXXXXO&&&&&%$$@oXX.. ..+@$&#@.. .  .   . ...O+&$#@+...+++++OO...+@&$$#@++..XXX..++@##$&@@+... ...... ....O&$#@ooX..+++++...++#&&%%$#+..oOOoOXXX..#&",
+"&&&&%%$##++..+#%%%&&&%$#@ooo..+@@+O..+@&#@..ooo+OOoXXO+..@#&#OoooXoX  .XXooooO+&&%&$#@+ooo@#$%%&&&&&#@ooXooXoooo..XXXOO&$#@@++O..OOOOOXXX+@&+OOXoXXX..Xo..XoooO&$@oo...++...O+XoooO&&&&&%%##oXXXXooo+@$&#@oXooo+O...oooO+@#&$#++...+@#@@+o. .@@&%$$##@++XXXoO@@#$$$&$##++oooXXOOO. OO+#&#@+... .+@@@@oXooO#&&&%$#@Oo...XXoOO@@#&",
+"&%%%%$$#@+O..+#$%&&&&%%$#Ooo..+@@OO..@#&#@..ooo+OOOXXOO..@#&@OoooXoX.. XXooooo+&&%&$$++Xoo@#$&&&&&&&$@OooXooXoXo..XXXOO&%$#@+++ .OOOOOXXX+@&++OoXXXX..Xo. ooooO&$@Oo.. O+ ..O+ooooO&&&&&%$$@ooXXXooO+@#&#@Xoooo+O. .ooOO+#$&%$@+...+@##@OO...+#&&%%$$#@+XXXoo@#$$%&&%$#@+ooXooO+O..OO+#&#++.... +@@@@ooXOO@&&%%%$@OO...X.OOO##$&",
+"&&%$$###@++ .+@$$%%&&&$$#Ooo..++++O..##&#@..oOO++OoXXOO..+@&#OoooooX. .XXooooo+&&&%$$++oXo@#$%%&&&&&$#OoooXoXooX..XXXO+&%%$$@++..OOOOOXXX+@&@+OooXXX..Xo..oooO+&$@oo...+O. .+Oooooo&&&&&&$$#oXX.Xooo+@#&#@oXoooO+. .oOO+@#$&$#@+...@@###+O. .@@&&%%%$$#+XXXoO@#$%&%&%$$#@oooXXOOO .O++#&#+O.....+@@#+ooooO#&&&%$##Oo...XXO++#$%&",
+"%%$$@@+oo@+XXO+#$%%&&&%$$#@+..oOO+@@@#$&@@. oOO@@++..OOXXO+&$##@@+++XXX+++@@###&&&%$$@+...@#$%%&&&&&$#@+... .  .  XXo+@&%%%$$@@XXoXo+++++oO&$##@@OOoXXOO. +++@#&$@Oo . Xo. .XXXXXoO&&%&%&%$#@++..XXXXo@&$@ooXXXO+XXXoo@@#$%&$#@+...+@##@+O...+@&&&&%%$#@oXooO@#$%&&&&%$#@oooXoOO+. ++@$&#OooXX..++@@@Ooooo@&&&%%##++ . XX+@@$$%&",
+"%$$@@++XX++XXo+#$%%&&&&%$$@@..ooO@@@$$%&#+..ooo@@++..OOXXO+&%$$###@+XXX+@@####$&&&%%#@+...+#$%&&&&&&$##+.. . .. ..XXX@#&&&%%$#@oXXoX++++@OO&$$##@OOoXXOO..++@#$&$@Oo...XX . XXXXXoo&%&%%%$$#@++..XXXXo@&$#OoXXX+O.XXoO+#$$%&$$++...@@##@+O. .+@&&&&&%$$#ooXoO@#$%&&&%%$$#oooXoOOO. +@@$&#Ooooo..+++@+OooXo@&&%$$#@++ ..XX+@#$%%&",
+"%$@@...OO@+oOXo@#$$&&&%%%$#@+O...+@#$$%&#@XXXoo@@@+XXooXXoO&%%%$$#@+XXX+@#$$$$%&&&%%$@@...+@$$%&&&&&%$#+XXXoO+O+OOXoo@#&&&%%%$#++.. ++@####&%%$$#+OOXXO+..OO+##&$#+OXXX++. .O+ooo++&%%%$$$$#@++XX...XX#&$#++. .oOoXXXX+##$%&$$@+...+@@#@OO...+#&&&&&&%$#++OXX@#$$%&&&%$#@OoooXOOO..O+@$&$##@++oXoOO@+OoOoo@&%$$#@+XX. ...++@$$%&",
+"$#@+...OO++OOXo+@#$&&&&&%$$#+O...+@@$%%&#@XXoXo+@@@oXoXXXOO&&&%%$##+XXX+@#$$%%%&&&&$$#+...+@#$%%&&&&%$#@XXXOoO+OOOXXo@$&&&&&$$#@+...O+@##$$&&%$$#+OoXX++..OOO#$&$#+OXXX+O...++OOO+@&%$$$###@@+OXX...XX@&$#@O...OOXoXXX+@#$$&$#++...++@@@OO. .+@&&&&&%%$$@+OXX+@#$%%&&&$$#ooXoo+OO .++#$&$$###+ooOoO++ooooo#&%##@++XX.. ..++@#$%&",
+"$#++...oO++ooXX+@##&&&&&&%$#@+...+@@#$%&##XXXoX@@++XXooXXOO&&&&%%$#@XXX++##%%&%&&&&%$#@. .+@#$$%%&&&%$#@XXXoOO++O+ooO#$&&&&&%%$@+. .O+@#$$%&&&%$#+OOXXO+..oOO@#&$$@+XXX++  .++O+++#&$##@@@+@+++X....XX@&%#@+...OOXoXXX+@@#$&%$@+...+++++Oo...@@&&&&&%&$$@@+XX+@#$$%&&%$$@OooXoOOO..++@$&%%$$#@ooooo++ooooO#&$#@++OXX .. .O+@##$&",
+"#@XX    .XXXX..oo+@&&&&&&&$$#@oXoXX+##$&$#@+...X+@++O....+#&&&&&%$#+XXXoo@##%%&&&&%%$#@XXXoo@#$$%%&&%$#@oXX..XoXO+@@##$&&&&&%%$#@+OOoX@#$$%&&%%$$++oXX+@OO...+@&%$$#@@+++...+@@##$$&$OOooo... .XXXXX++@&%$#@XXX .oOoooXoo@#&$#@+. .XXXXXXX. .+@&&&&&&&%$$@@ooooO#$%&&&$$@OoXXXooo .++#$&%%%$$#+OXXXXX...+@#&#Oo.  ..+++oo...@##&",
+"#@XX. ...XXXX..XoO+&&&&&&&%$$#OooXX++##&$$@@...X+++OO....@#&&&&%%$#@XXXXo+##%%&&&&%%$$@oXXXo+@#$%%&&&%$#ooo..Xoo++##$$%&&&&&%%%$#++OXo+@#$$&&%%$$++OXX+@OO...+@&%%$$$##@+...+@#$$$%&#Ooooo.... XXXXXO+#&%$#@oXX  OOOooXXo@@&%$@+...XoXXXXX...+@&&&&&&&&%$#@oXooo@#$&&%%$@OooXXooo. ++#$&&%&%$$@+XXXXX...+@$&#Oo . ..+++Oo...+@#&",
+"#@..oooO+ooooXX..++&&&&&&&%%$##@+Oo..+@&%$##@@+o...+++O@@#$&&&&&%$#@XXXXX@@#%%%&&&&&%$#@@+..oO+#$%%&%%$#@+O. XXX@@#$$%%&&&&&&&%%$##@OOOO+#%&&&%%$@++oo@@#+OOOXX&&%%$$$#@+ ..+##$%%%&$+OoXXoXOOO++OOOoo#&%%$#@++Oo+@@@@ooooo&%$@@ooo++@+@+OXXX@#&&&&&&&%%%$#@+XooO+$&&&$$#OOoXXXoX..++#$&&&%%%$#@+OOooO++##$&#+OOoO+@@#@@@+OO..+&",
+"$@..OOO++ooXoXo .+@&&&&&&&%%%$$#@OO..++&&%$$#@@o...+@++##$$&&&&&%$##ooXXX@##%&%&&&&%%%$#@@..ooO#$%&&%%%$@@+..XXX@#$%%&&&&&&&&&%%%$##OOOO+$$&&&%%$#++OO###@OOOXo&&&&&%$$#@...@#$$%&%&#@+ooooo+++@@+++oo#&&%$$@@+OO@#@@@Ooooo&%$#@OOO@@#@@@+XXX@#&&&&&&&&%%$$@@oXoO+$&&&%$#+OoXXXoX..+@#$&&&&%%%$#++OooO+@#$%&$++OOO@##$$##+++..@&",
+"##..OO+@@OOoooo..+@&&&&&&&&&%%$$#+O..++&%&%$$##O...@#@@$$%%&&&&&&%$#oooXo@#$%%&&&&&&&%$$#@..oO+#$%%&&%%$#@+..XXo#$$%&&&&&&&&&&&&%%$#@+O++$%&&&&%$##@OO#$$$++Ooo&&&&%&%$#@...@#$%&&&&$@+Ooooo++@##@@+OO#&&%%$$#@++##$$#+OOOO&%%#@+OO##$$#@@ooo#$&&&&&&&&&%%$#@Ooo++$&&%&$$++OXXooo..+@#$&&&&&&%$$@++OO@@@$%%&$@@+++##$$$$$@@+..@&",
+"$##@######@#@@@@@##&&&&&&&&&%%%$$##@@++&&&&%%$$#@#@##$$$%%&&&&&&%%$$##@#@#$$%&&&&&&&&&%$$##@O++#$%&&&%%%$$#@@@@##$%%&&&&&&&&&&&%&%%$$####$%&&&&%%$$$#$$$$$#####&&&&&&%%$#++@#$%%&&&&$$###@###$#$$$###$$&&&&%%$$$$$$$$$#####&%%%$##$$$$$$$##@##$&&&&&&&&&%%%$#####$$&&&&%$$##@+@++OO@#$%&&&&&&%%$$$####$$$%%&%$$#$$$%%%%%$$###@#&",
+"$$$$#$$$$$$#$####$$&&&&&&&&&&&%%$$###+@&&&&&%%$$##$$$%%%%&&&&&&&&%%$$$##$$%%&&&&&&&&&&&%$$##++@$%%%&&&&%%$$####$$%%&&&&&&&&&&&&&&&%%$$$$$%%&&&&&%%%$$$%%%%$$#$$&&&&&%&%$$#@@#$%&&&&&%$$$#$#$$$%$$%$$$$%&&&&%%%$$$%%%%$$$#$$&&%%%%$$$%%&%$$$$$$%&&&&&&&&&&&%%$$$$$$%&&&%%%$$######O+#$%%&&&&&&&&%$$$$$$$%%&&&%$$$$$%%%&&%%%$$$$$&",
+"%%$$$%%%%$%$$$%$$$%&&&&&&&&&&&&&%%$$$$$&&&&&%&%$$$%%%%%&&&&&&&&&&&%%$$%$%%%%&&&&&&&&&&&&%%$$$#$$%&%&&&&%%%%$$$$$%%&&&&&&&&&&&&&&&&&%&%%%%&&&&&&&&%%%&%%&&%&%%%$&&&&&&%%%$$$$%%%%&&&&&%%%%$$%%%&&%&%%%%%&&&&&%&&&%&&%&%%%%%%&&&%%%%&%&%&&%%$%%%%&&&&&&&&&&&%&%$$%%%%&&&&%%%%$$$$#$#$$$%%&&&&&&&&&%%%$%%%&&&&&&&%&%%&&&&&&%%%$$%%&"
+};
diff --git a/hacks/images/matrix1b.xbm b/hacks/images/matrix1b.xbm
new file mode 100644 (file)
index 0000000..9bca70a
--- /dev/null
@@ -0,0 +1,308 @@
+/* Created with The GIMP */
+#define matrix1b_width 160
+#define matrix1b_height 182
+static unsigned char matrix1b_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0x7f, 0xff, 0xfa, 0xef, 0x9f, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7f, 0xfb,
+   0xd1, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xef, 0x7f, 0x7f, 0xfc, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0x7f, 0xff, 0xeb, 0xd7, 0x5f, 0xff,
+   0xfd, 0xff, 0xef, 0xff, 0xfe, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x3f, 0xff, 0xff, 0xeb, 0x6f, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff,
+   0xfe, 0xfc, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff,
+   0xd5, 0xbf, 0x5f, 0xff, 0xfa, 0xff, 0xef, 0xff, 0xfe, 0xfb, 0xc1, 0xff,
+   0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xd7, 0xbf, 0x7e,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xed, 0x37, 0xff, 0xff, 0xf2, 0xff, 0xef, 0xff,
+   0xfe, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xff, 0xff,
+   0xf5, 0xcf, 0xbf, 0xbe, 0xfa, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf6, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x9f, 0x7f, 0xfd,
+   0xeb, 0x5f, 0x9f, 0xfe, 0xf5, 0xea, 0xd7, 0x5f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xbf, 0x3f, 0xff, 0xf2, 0xd7, 0xbf, 0xbf, 0xff,
+   0xfc, 0xdf, 0x2f, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb,
+   0xeb, 0x7f, 0xff, 0xff, 0xfd, 0xaf, 0xdf, 0x7e, 0xff, 0xeb, 0xfb, 0xdf,
+   0xfd, 0xff, 0xff, 0x5f, 0xff, 0xbf, 0xff, 0xf6, 0x7f, 0x7f, 0xff, 0xf7,
+   0xcf, 0x6f, 0x9f, 0x7e, 0xfa, 0xff, 0x57, 0xdf, 0xfd, 0xfd, 0xef, 0xff,
+   0xdf, 0x7e, 0xfd, 0xef, 0xfb, 0x7f, 0xff, 0xf9, 0xf7, 0xbf, 0x7f, 0xfd,
+   0xfa, 0xef, 0xcf, 0xbf, 0xfe, 0xfe, 0xff, 0xf3, 0xbf, 0xff, 0xfb, 0xf7,
+   0xb7, 0x7e, 0xff, 0xfd, 0xd7, 0x67, 0xff, 0x7d, 0xf3, 0xff, 0x5f, 0xbf,
+   0xfc, 0xff, 0xff, 0xe7, 0x6f, 0xfd, 0xf3, 0xf7, 0xff, 0x7f, 0xff, 0xfe,
+   0xff, 0x97, 0xff, 0x7e, 0xf7, 0xf7, 0x7b, 0xbf, 0xfe, 0xff, 0xff, 0xdf,
+   0xbf, 0xfe, 0xfe, 0xfb, 0x6b, 0x7f, 0x7f, 0xfd, 0xaf, 0x3f, 0xfe, 0xfd,
+   0xf6, 0xff, 0xeb, 0xff, 0xfc, 0xff, 0xff, 0xbb, 0xff, 0xfd, 0xfa, 0xff,
+   0xdf, 0x5f, 0xbf, 0xf6, 0xea, 0xaf, 0xaf, 0x7e, 0xfb, 0xfb, 0xaf, 0x5e,
+   0xff, 0xfd, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0x7f, 0xfd, 0xfe,
+   0xff, 0xbf, 0xbf, 0xff, 0xfa, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xd7, 0xdf, 0xbf, 0xff, 0xfb, 0xdb, 0xaf, 0x7e, 0xfd, 0xf7, 0xf7, 0xdf,
+   0xff, 0xfa, 0xfd, 0xf7, 0xef, 0xff, 0xfb, 0xff, 0xaf, 0x3f, 0x7f, 0xf4,
+   0xab, 0x77, 0xbf, 0x7d, 0xf3, 0xd5, 0xb7, 0x3e, 0xfe, 0xf5, 0xd5, 0xcf,
+   0xdf, 0x59, 0xf7, 0xea, 0x9f, 0x5f, 0xbf, 0xf7, 0xde, 0x5d, 0x6f, 0xfd,
+   0xfe, 0xde, 0x7b, 0xbf, 0xff, 0xff, 0xee, 0xf7, 0xcf, 0xbe, 0xf5, 0xdf,
+   0xbb, 0xff, 0x7e, 0xf5, 0xfe, 0x7b, 0xef, 0xde, 0xf5, 0xfe, 0x6b, 0xbf,
+   0xff, 0xf5, 0xf5, 0xef, 0x9f, 0xb9, 0xf6, 0xdc, 0x97, 0x5f, 0x7f, 0xf3,
+   0xfe, 0xff, 0x5f, 0x7f, 0x7f, 0xdf, 0xaf, 0xbf, 0xff, 0xff, 0xf1, 0xff,
+   0x4f, 0x7c, 0x75, 0xff, 0x57, 0xff, 0xfe, 0xf6, 0xfe, 0xfb, 0x1e, 0x7e,
+   0xf8, 0xfc, 0x77, 0x3f, 0xff, 0xff, 0xe5, 0xef, 0x5f, 0xfd, 0xf2, 0xee,
+   0xaf, 0x0f, 0xbd, 0x7b, 0xff, 0x77, 0xff, 0xff, 0xff, 0xce, 0xdb, 0xff,
+   0xff, 0xfd, 0xfb, 0xf7, 0xef, 0xdd, 0xf5, 0xbe, 0x77, 0xdf, 0x7d, 0xf7,
+   0xfd, 0x7f, 0x5f, 0xbd, 0xfe, 0xdd, 0xbb, 0x3e, 0xbf, 0xfb, 0xd6, 0xaf,
+   0xae, 0xb9, 0xf3, 0xef, 0xef, 0xaf, 0x3c, 0xf5, 0xab, 0xa9, 0xef, 0x7e,
+   0xff, 0xeb, 0x77, 0xdf, 0x5f, 0xfd, 0xfe, 0x67, 0xef, 0xbd, 0xfb, 0xda,
+   0x9f, 0xef, 0xfd, 0xfd, 0xfb, 0xef, 0xaf, 0xbd, 0xfe, 0xff, 0xef, 0x5f,
+   0xfe, 0xfd, 0xad, 0x5f, 0xdf, 0x7f, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xeb, 0xbf, 0xbf, 0xfa, 0xeb, 0xab, 0xef, 0xbe,
+   0xfb, 0xde, 0xbb, 0xef, 0x7e, 0xf5, 0xf9, 0xf7, 0x7f, 0xff, 0xfd, 0xff,
+   0x87, 0x3f, 0x7d, 0xfa, 0xcb, 0x03, 0xcf, 0x7d, 0xe7, 0x9a, 0x33, 0xde,
+   0xf8, 0xf4, 0xfb, 0xff, 0x7f, 0xfe, 0xfd, 0xff, 0x7b, 0xef, 0x9e, 0xff,
+   0xee, 0x6d, 0xef, 0xbc, 0xf7, 0xda, 0x77, 0xaf, 0xbd, 0xf3, 0xfb, 0xf7,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xee, 0x7d, 0xf3, 0xdd, 0x4f, 0xff, 0x7d,
+   0xff, 0xd2, 0xaf, 0x7f, 0x7f, 0xff, 0xfb, 0xef, 0xff, 0xfe, 0xfa, 0xff,
+   0xb7, 0xf7, 0xfb, 0xfa, 0xf5, 0xeb, 0xef, 0xbd, 0xf7, 0xd4, 0xd7, 0x3f,
+   0xff, 0xf5, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x87, 0xef, 0xbf, 0xfa,
+   0xcd, 0xcf, 0xef, 0xfd, 0xfe, 0x95, 0xaf, 0x7f, 0xfe, 0xfd, 0xfb, 0xdf,
+   0x7f, 0xff, 0xff, 0xff, 0x77, 0xaf, 0x7d, 0xfd, 0xe7, 0xff, 0xff, 0xfc,
+   0xfd, 0xcc, 0xbf, 0x7f, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xef, 0x3f, 0xbd, 0xea, 0xde, 0xcf, 0xdf, 0xfd, 0xfa, 0xed, 0x67, 0x7f,
+   0xff, 0xf4, 0xfb, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xf3, 0x5f, 0xbe, 0x7b,
+   0xea, 0xef, 0xef, 0xfe, 0xfd, 0xdd, 0x3b, 0x3f, 0x7f, 0xeb, 0xfb, 0x7f,
+   0x7f, 0xff, 0xff, 0xff, 0xef, 0xdf, 0x7c, 0xf7, 0xef, 0xdf, 0xbf, 0xff,
+   0xfd, 0xff, 0x77, 0x7f, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xd4,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xfa, 0xff, 0xfb, 0xbf, 0xff, 0xfe, 0xfe, 0xe7,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0xfa, 0xff, 0xf7, 0x7f, 0xff, 0xfa, 0xfd, 0xcf, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfe, 0xf0,
+   0xc5, 0x8b, 0xaf, 0x7e, 0xf4, 0xc7, 0x85, 0x5f, 0xff, 0xf8, 0xea, 0xdf,
+   0x1f, 0xbc, 0xfa, 0xf5, 0xff, 0x1f, 0x3f, 0x7b, 0xed, 0x77, 0x4f, 0x7d,
+   0x7b, 0xd5, 0xb7, 0xbf, 0xff, 0xfd, 0xeb, 0xdf, 0x47, 0x5e, 0x7b, 0xd5,
+   0xff, 0xff, 0x7e, 0x67, 0xdd, 0xd5, 0xcf, 0xfc, 0xfe, 0xed, 0x77, 0x7f,
+   0xff, 0xfb, 0xe3, 0xdf, 0xff, 0x7a, 0xf7, 0xde, 0xff, 0x0f, 0xfe, 0xf7,
+   0xfe, 0x7b, 0x2f, 0xfe, 0x7f, 0xd6, 0xbf, 0xbf, 0xff, 0xfb, 0xf9, 0xdf,
+   0x5f, 0xff, 0xfd, 0xee, 0xff, 0xff, 0xbc, 0xf6, 0xfc, 0xdb, 0xcf, 0xfd,
+   0xfe, 0xeb, 0x77, 0x7f, 0xff, 0xfb, 0xe7, 0xdf, 0xff, 0xba, 0xeb, 0xdd,
+   0xff, 0xcf, 0x7e, 0xf5, 0xeb, 0x9b, 0x6f, 0xbe, 0xfe, 0xdd, 0xbb, 0x3f,
+   0xff, 0xff, 0xed, 0xcf, 0x4f, 0xbf, 0x77, 0xd5, 0xff, 0x9f, 0x7d, 0xfb,
+   0xd7, 0x37, 0xdf, 0xfe, 0xfa, 0xfb, 0x73, 0x7f, 0x7d, 0xfd, 0xdd, 0x9f,
+   0xff, 0xba, 0xf6, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xdf,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xbf, 0xff, 0xff, 0xff,
+   0x93, 0x3f, 0xbc, 0xf4, 0xd3, 0x87, 0x6f, 0x3d, 0xe2, 0x9a, 0x13, 0x6f,
+   0xf9, 0xf0, 0xf3, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0x73, 0xe7, 0x7e, 0xfb,
+   0xf9, 0xfb, 0xe7, 0xbf, 0xf7, 0xce, 0xf7, 0xe7, 0xbc, 0xfb, 0xfb, 0xdf,
+   0x7f, 0xff, 0xfe, 0xff, 0x6f, 0xcf, 0x7d, 0xfe, 0xd3, 0xef, 0x6f, 0xfd,
+   0xfd, 0xb5, 0x8f, 0xaf, 0x7f, 0xfd, 0xf3, 0xdf, 0x7f, 0x7e, 0xf1, 0xff,
+   0xb3, 0xbe, 0xfe, 0xff, 0xe9, 0xf7, 0xff, 0x7f, 0xfb, 0xea, 0xe7, 0xbf,
+   0xfe, 0xfa, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xd7, 0x7f, 0x7d, 0xfe,
+   0xdf, 0xef, 0x6f, 0xfd, 0xf6, 0xcb, 0xcf, 0xbf, 0xff, 0xfe, 0xf3, 0xdf,
+   0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbe, 0xff, 0xd5, 0xaf, 0xdf, 0xfc,
+   0xfd, 0xfd, 0xb7, 0xdf, 0x7f, 0xf5, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
+   0xeb, 0xff, 0x7d, 0xfa, 0xeb, 0xbf, 0xbf, 0xfd, 0xff, 0xef, 0x7b, 0x9f,
+   0x7f, 0xf9, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xfd,
+   0xfe, 0xe9, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xe7, 0xff, 0x4f, 0xfd, 0xfd, 0xeb, 0xff, 0x5f,
+   0xfe, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xff, 0xff, 0x7f, 0xfa,
+   0xfd, 0x57, 0xdf, 0xfe, 0xfe, 0xfd, 0xff, 0x8f, 0xfa, 0xfb, 0xff, 0xff,
+   0xff, 0x3f, 0xea, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xb7, 0xbf, 0xfc,
+   0xfd, 0xe9, 0xff, 0xbf, 0xfe, 0xfa, 0xf7, 0x4b, 0xff, 0x7f, 0xfa, 0xff,
+   0xff, 0xff, 0xbf, 0xfe, 0xfe, 0x6f, 0x9f, 0xfe, 0x7e, 0xea, 0xff, 0xcf,
+   0x7d, 0xfb, 0xdd, 0x97, 0xff, 0xff, 0xea, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xf1, 0x6f, 0x3f, 0xff, 0xff, 0xca, 0xff, 0x1f, 0xfb, 0xfa, 0xeb, 0x7f,
+   0x2f, 0xbd, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xfd, 0xbb, 0x3f, 0xff,
+   0xfe, 0xf7, 0xff, 0x4f, 0xfe, 0x7c, 0xea, 0xbf, 0xff, 0x7f, 0xeb, 0xff,
+   0xff, 0x3f, 0xfe, 0xf9, 0xea, 0x57, 0x7f, 0xfe, 0xfd, 0xcf, 0xff, 0xdf,
+   0xfd, 0xfb, 0xdd, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0x3f, 0xff, 0xfe,
+   0xa8, 0xff, 0x3f, 0xff, 0xfe, 0xf2, 0xff, 0x3f, 0xff, 0xff, 0xeb, 0xff,
+   0xff, 0x7f, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xeb, 0xff, 0x7f, 0xfe,
+   0xfe, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd,
+   0xfb, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7,
+   0xff, 0xff, 0xfe, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x3f,
+   0xf9, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xf7, 0xef, 0xbe, 0xff, 0xff,
+   0xf7, 0x3f, 0xff, 0xfe, 0xf3, 0xef, 0xff, 0x3f, 0xfd, 0xff, 0xff, 0x7f,
+   0x7f, 0xff, 0xff, 0xff, 0xf6, 0x7b, 0xed, 0xff, 0xdf, 0x7f, 0xfe, 0xfd,
+   0xff, 0xff, 0xdf, 0x7d, 0xf4, 0xff, 0xff, 0x7f, 0xff, 0xfa, 0xff, 0xd7,
+   0x5f, 0xff, 0xfd, 0xf7, 0xff, 0x0f, 0xfd, 0xfe, 0xfa, 0xff, 0xef, 0xfe,
+   0xfc, 0xf7, 0xff, 0x3f, 0xff, 0xff, 0xf2, 0xbd, 0x76, 0x5d, 0xfb, 0xff,
+   0xff, 0x7f, 0xfd, 0xff, 0xf7, 0xff, 0xdf, 0xfd, 0xf5, 0xf7, 0xff, 0xff,
+   0x7f, 0xf9, 0xcf, 0x77, 0xdf, 0xfb, 0xf2, 0xf7, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xef, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xca, 0x5f,
+   0x7f, 0xff, 0xf6, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xf8,
+   0xf1, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xef, 0x77, 0xee, 0xfd, 0xf5, 0xfb,
+   0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xfa, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xfa, 0x5f, 0x7f, 0xbf, 0xf3, 0xf5, 0xff, 0xbf, 0xfc, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xf3, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xf7, 0xff,
+   0xfe, 0xfa, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xbf, 0xff, 0xfb, 0xe9, 0xff, 0xff, 0xff, 0xed, 0xfb, 0xef, 0xbf,
+   0xff, 0xfb, 0xfb, 0xef, 0xff, 0xfe, 0xfa, 0xff, 0xdf, 0x7f, 0x7f, 0xff,
+   0xfb, 0xd7, 0x5f, 0xff, 0xf4, 0x85, 0xaf, 0xbf, 0xfe, 0xfa, 0xd6, 0xdf,
+   0xbf, 0xff, 0xff, 0xeb, 0xc7, 0x9f, 0xff, 0xfc, 0xf3, 0xef, 0x9f, 0x7f,
+   0x76, 0xff, 0x51, 0x4f, 0x5e, 0xf9, 0xe4, 0x57, 0x3f, 0xbd, 0xf8, 0xf5,
+   0x9f, 0x3f, 0x7e, 0xf9, 0xe7, 0x8f, 0x3f, 0xff, 0xfa, 0xfe, 0x7f, 0xff,
+   0xbd, 0xf7, 0xdd, 0xdf, 0x7f, 0xff, 0xf9, 0xe7, 0xef, 0xff, 0xff, 0xfd,
+   0xf9, 0xf7, 0x5f, 0x7f, 0x75, 0xff, 0xd7, 0xaf, 0xfe, 0xfe, 0xf7, 0xcf,
+   0xbf, 0xff, 0xfd, 0xfb, 0x2f, 0x9f, 0xbc, 0xfa, 0xcb, 0x0f, 0xdf, 0x7e,
+   0xf1, 0xfc, 0xb7, 0xbf, 0x7f, 0xfa, 0xed, 0xdf, 0x7f, 0xff, 0xfd, 0xf7,
+   0xa3, 0xaf, 0x7e, 0xea, 0xe5, 0xb3, 0x4f, 0xbd, 0xfe, 0xee, 0xd7, 0x5f,
+   0xff, 0xfd, 0xfa, 0xdf, 0x3f, 0xff, 0xfd, 0xfb, 0x6f, 0xae, 0x79, 0xf5,
+   0x9d, 0x67, 0xce, 0xbc, 0xf5, 0xdb, 0x57, 0x7f, 0x7d, 0xf7, 0xd5, 0xdf,
+   0x7f, 0xff, 0xfd, 0xf7, 0x33, 0xef, 0xbc, 0x77, 0xd4, 0x3b, 0x6f, 0x9d,
+   0xec, 0xeb, 0x3b, 0xc7, 0x9e, 0xf2, 0xac, 0xc7, 0x3f, 0x7f, 0xfc, 0xf3,
+   0x77, 0xcf, 0x3d, 0xeb, 0xdf, 0xf3, 0xee, 0xbd, 0xfb, 0xfb, 0x67, 0x5f,
+   0x7d, 0xf7, 0xed, 0xbf, 0xff, 0xfe, 0xf5, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xfe, 0xfb, 0xef, 0xdf, 0xfe,
+   0xfe, 0xff, 0xbf, 0xbf, 0xff, 0xfe, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xfb,
+   0x53, 0xbf, 0xfe, 0xfd, 0xf7, 0xaf, 0x5f, 0xff, 0xfb, 0xff, 0x2b, 0x7f,
+   0xff, 0xfa, 0xef, 0x7f, 0xff, 0x7e, 0xfe, 0xeb, 0x7b, 0xef, 0xfd, 0xfe,
+   0xed, 0xdf, 0x7f, 0x7f, 0xfd, 0xde, 0x97, 0xef, 0xbd, 0xf7, 0xda, 0xab,
+   0x4f, 0xbd, 0xfd, 0xf7, 0xe7, 0x8e, 0x7d, 0xf3, 0xdb, 0x5b, 0xdf, 0xfc,
+   0xf3, 0xfa, 0xbb, 0xce, 0x3d, 0xf7, 0xde, 0x7b, 0xee, 0x7b, 0xf5, 0xeb,
+   0x73, 0xff, 0x9c, 0x7f, 0xed, 0x7b, 0xe7, 0x9f, 0xff, 0xeb, 0xf9, 0xff,
+   0xfc, 0xfb, 0xae, 0xbf, 0xdf, 0x7e, 0xff, 0xe5, 0xe7, 0xaf, 0xbd, 0xeb,
+   0xbe, 0xfb, 0xef, 0x3a, 0xf7, 0xe3, 0xab, 0xee, 0xbd, 0xf7, 0xdf, 0x7b,
+   0xbf, 0x7e, 0xeb, 0xdf, 0x7b, 0xb7, 0xbc, 0xff, 0xde, 0xbd, 0xee, 0xbf,
+   0xff, 0xed, 0xfb, 0xff, 0xfd, 0xf3, 0xde, 0xbd, 0x3f, 0x7f, 0xfb, 0xcd,
+   0xf7, 0xee, 0x3d, 0xf7, 0xfe, 0xf7, 0xef, 0xbd, 0xeb, 0xdb, 0x53, 0xd7,
+   0xbd, 0xf7, 0xdd, 0x77, 0x7f, 0x7f, 0xf6, 0xdd, 0x53, 0xaf, 0xfe, 0xf9,
+   0xe5, 0x5b, 0x5f, 0xfd, 0xfa, 0xff, 0xb7, 0xbf, 0x7e, 0xf9, 0xeb, 0x97,
+   0x3f, 0xbf, 0xff, 0xd5, 0x97, 0xdf, 0x7c, 0xfb, 0xeb, 0xdf, 0x7f, 0xff,
+   0xfa, 0xff, 0xaf, 0xbf, 0xfe, 0xfa, 0xe5, 0xb7, 0x7f, 0x7e, 0xfe, 0xdd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xe3, 0xf7, 0xff, 0xff,
+   0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfd, 0xff, 0xef, 0x7f, 0xff, 0xfd, 0xff,
+   0xff, 0x5f, 0x7f, 0xfb, 0xfd, 0xdf, 0xbf, 0xfe, 0xff, 0xfb, 0xff, 0xbf,
+   0xff, 0xfe, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0x8f, 0xbf, 0xff, 0xfe,
+   0xe5, 0xcb, 0x3f, 0x7f, 0xe9, 0xc3, 0x4b, 0x7f, 0xfe, 0xf0, 0xe5, 0xcf,
+   0x3f, 0xff, 0xfc, 0xf7, 0xf7, 0x6f, 0xbf, 0xfc, 0xf7, 0xdf, 0xff, 0x5e,
+   0x76, 0xee, 0x37, 0xcf, 0xbd, 0x77, 0xd6, 0xcf, 0x3f, 0xff, 0xfd, 0xf3,
+   0xaf, 0x5f, 0xfe, 0xf9, 0xed, 0x97, 0xaf, 0xfe, 0xec, 0xde, 0x73, 0x4e,
+   0x39, 0xf6, 0xcc, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x4b, 0x4f, 0x3f, 0xfc,
+   0xe2, 0xd5, 0x5f, 0x3d, 0xea, 0xfe, 0xd3, 0xaf, 0xbe, 0xf5, 0xf6, 0xdf,
+   0x7f, 0xff, 0xfe, 0xf7, 0xeb, 0xaf, 0xfe, 0xfb, 0xee, 0xb3, 0xdf, 0xff,
+   0xf8, 0xd2, 0x57, 0x8f, 0x3d, 0xf5, 0xd6, 0xdf, 0x7f, 0xff, 0xf9, 0xf7,
+   0x97, 0x6f, 0x9d, 0xfa, 0xe5, 0xaf, 0x57, 0x9e, 0xf6, 0xfb, 0x33, 0x7f,
+   0xfd, 0xea, 0xec, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0x7f, 0xdf, 0xff, 0xfb,
+   0xdf, 0xbb, 0xdf, 0xfd, 0xfd, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xef, 0x5f,
+   0x7f, 0xfd, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x93, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0xff, 0x5e, 0xff, 0xff, 0x9f, 0x7f, 0xfe, 0xfe,
+   0xf7, 0xdf, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfa, 0xf7, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0x6b, 0xaf, 0x7f, 0xff, 0xfb, 0xd7, 0x7f, 0xbf,
+   0xfe, 0xfb, 0xdf, 0xef, 0xff, 0xff, 0xfe, 0x5b, 0xdf, 0xfe, 0xfe, 0xee,
+   0x2f, 0xbf, 0xfe, 0xfa, 0xeb, 0xb7, 0xdf, 0xfe, 0xf9, 0xf7, 0xb7, 0x5e,
+   0x5d, 0xf7, 0xd6, 0xfb, 0xef, 0xfa, 0xf5, 0xdd, 0x8b, 0xc7, 0xbe, 0xfd,
+   0xec, 0xab, 0x4f, 0x3d, 0xfb, 0xfd, 0x97, 0xef, 0xbf, 0xfd, 0xfe, 0xbb,
+   0xbf, 0x3f, 0xff, 0xee, 0x7b, 0xbe, 0x3d, 0xf3, 0xdd, 0x7b, 0xef, 0x3d,
+   0xf7, 0xa3, 0x77, 0xdf, 0xbd, 0xeb, 0xee, 0x77, 0xbf, 0xfe, 0xf2, 0xfb,
+   0x3b, 0xef, 0xbd, 0x77, 0xce, 0x3b, 0xef, 0xbc, 0xf3, 0xfe, 0x2b, 0x7f,
+   0xff, 0xff, 0xdb, 0xfb, 0x7f, 0x7f, 0xfb, 0xf3, 0x73, 0xdf, 0x3d, 0xf7,
+   0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xf7, 0x73, 0xee, 0x7d, 0xf7, 0xfe, 0xaf,
+   0x7e, 0x7f, 0xfa, 0xf7, 0xd7, 0x6f, 0xbd, 0xf4, 0xeb, 0xaf, 0x3f, 0xff,
+   0xfa, 0xff, 0xc7, 0x5f, 0xbc, 0xf2, 0xc5, 0x37, 0x9f, 0xbf, 0xff, 0xfb,
+   0x1f, 0xcf, 0xf9, 0xfd, 0xe5, 0xaf, 0x5f, 0x7e, 0xf9, 0xfb, 0x97, 0xdf,
+   0xf9, 0xe5, 0xd5, 0x57, 0x3e, 0xbf, 0xfe, 0xf2, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0x4f, 0xfd,
+   0xff, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0x7f, 0xa9, 0xf7, 0x5f, 0xf9, 0xfb, 0xeb, 0xdf, 0x7f,
+   0xfd, 0xfe, 0xfd, 0xf7, 0x5f, 0x3d, 0xf5, 0xff, 0xdf, 0xcf, 0xbf, 0xfc,
+   0xff, 0xff, 0x8f, 0xfd, 0xfa, 0xef, 0xcb, 0xff, 0xfd, 0xfd, 0xc4, 0x01,
+   0xbf, 0x7e, 0xf3, 0xed, 0xdf, 0xdf, 0xbd, 0xf9, 0xf5, 0xef, 0x3f, 0x59,
+   0xf2, 0xc9, 0x1b, 0xff, 0x3c, 0xf0, 0xdc, 0x5f, 0xaf, 0x78, 0xf7, 0xdd,
+   0xff, 0xbf, 0xdf, 0xee, 0xeb, 0xff, 0xd7, 0x7e, 0x7f, 0xeb, 0xe3, 0xbe,
+   0xdf, 0xfd, 0xde, 0xef, 0xdf, 0x9e, 0xf7, 0xf3, 0xbf, 0xbf, 0xdd, 0x7b,
+   0xdb, 0xef, 0x9f, 0x7c, 0x75, 0xcb, 0xcb, 0x7f, 0xbd, 0xf9, 0x9c, 0xef,
+   0xdf, 0x3d, 0xf6, 0xeb, 0xf7, 0x7f, 0xbf, 0xed, 0xff, 0xe7, 0x6f, 0xff,
+   0xff, 0xff, 0x4b, 0xff, 0x7e, 0xff, 0xde, 0xff, 0x7f, 0xfd, 0xff, 0xf3,
+   0xab, 0x7f, 0xbf, 0xfb, 0xfb, 0xef, 0x5f, 0xfd, 0xfd, 0xd5, 0xdf, 0xff,
+   0xb8, 0xfa, 0xdc, 0xbf, 0xdf, 0xff, 0xeb, 0xe7, 0xb3, 0xff, 0x7e, 0xf7,
+   0xf7, 0xff, 0xbf, 0xff, 0xff, 0xdf, 0xef, 0xaf, 0x7f, 0xff, 0xdb, 0xff,
+   0xbf, 0x7e, 0x7d, 0xfc, 0x7f, 0xff, 0xfd, 0xfe, 0xff, 0xdf, 0xbf, 0xff,
+   0xfb, 0xff, 0xdf, 0x6f, 0xff, 0xf7, 0xdf, 0xbf, 0x7f, 0xfd, 0xfb, 0xef,
+   0xdb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff };
diff --git a/hacks/images/matrix1b.xpm b/hacks/images/matrix1b.xpm
new file mode 100644 (file)
index 0000000..4340bf2
--- /dev/null
@@ -0,0 +1,200 @@
+/* XPM */
+static char * matrix1b_xpm[] = {
+"160 182 15 1",
+".     c #000000",
+"+     c #061406",
+"@     c #279027",
+"#     c #0F390F",
+"$     c #081E08",
+"%     c #217A21",
+"&     c #2BA02B",
+"*     c #1B641B",
+"=     c #165016",
+"-     c #0B2A0B",
+";     c #030E03",
+">     c #34BB34",
+",     c #5AD25A",
+"'     c #81DD81",
+")     c #A7E7A7",
+".............;+$+;.....++++;....;$--#$+....+-#$+....;++;..................;+;......+-##$;...;-##$;.....;+++................................................+--$;",
+"............+$#=-+...+$----$$...+#=**=$+.++#*%=$$..++---$.......;++......+--$$....+$=@*-+...$#%*#+....+$##-$......++......................................+$**-+",
+".;..;..;..;.$#@>*-+..+#***%=$+.+$=%@@*#+.$-*&>%=$+;$#*%=-+.;..$$##-+.;..+$*%=$+.;.+#*@*-+...+=%@=-+.;;$#@&=-+.;..;$-$+.;..;..;..;..;..;..;..;..;..;..;..;.$#@&=+",
+"...........;$*&,%-;.+-=@@@&*#+++#*&&&%=$+-*@&>&*-+;-=%@%#$...+$=%@*-+...+#%&*$;..;$*@%#$.;..+-*@%#+;;+=*&>%*-+..;-*%#+...................................;$*@@#+",
+"..;..;......$*>,%#+.;-*&&@>*#+;-=@>,>@*$+#%@@@&*#++#*@@%*-+..$=%@@%-+..+$=@@=$...;-%@%#;.....$=@@#$.;$*@,'&%#$..$#@&*$+..;..;..;..;..++.;..;..;..;...;...;#%@*-+",
+"...;..;;....$*>'%#+;.-*@@@&*-;;-*@>>,&*$$#%&@@%*#++#*@@@*#+.+$=%@%=#$+..$=*=#+...;#@&*$+.....$#@>=$.;-=@>'>%#+++$=&>*#$$..;..;..;..+$-----$;;..;...;....+$=@@=-.",
+"........;..+$=&,%-;..$#====-+;+#*&>&,%*$+#*&&&@*#+;$=%@@%#$;;-*&&%*#$+..;-#-+..;.;#@>*$+.;...+#@>=$..$=%>,&*#++#*@>'&%=$..........+#*%%%%%=$.....;...;..+#*%*-+.",
+".;.;........+=@>*-+..;$$-$$+..;#%&>&>%#++$=%@@>@=$+$=@&&%=$.;-*&>&@*#;+..;;;.....+#@>*$...;..+#@>*$..$#%@@&*#++=&>,',>%$..;.;+;..;+=>&,,>>%$.;..;;;....;-*@%#$+.",
+".....;.;.;..+-@&=+.........;..+#&,>,,%=$+-*%@@&@*$+-=%&&@*#.+-%&>>>@=+...........;#%&%-+.....$=@&=++.+#***%=$++-*%>,%%=$...+-#-+..;-**%***=$...++$$+.;.+#%%*-;..",
+"............;-=*#+.;..........+#@&&&&*-++#%&&&>@=$;+#*@@@%#++=%@&&>@=$.....;.;...;-*@%#+..;..-=@@#+..;$----$+..$$=%,*#$;;.+$**=$;;.+$----$$;...+==#+..;-*&*#+...",
+".;......;.;..-=%-+...;...;....;-%&&&%=+;;-*@>>@=-+.;$=%@@%-++#@&>>>&*$+.;.....;...$=%@=$;...;#%%*#;....+;+;;....+#@&=++...+#@&*$;....++.+..;.;;$*@*-;.+#%@*-+...",
+"...;.;.......+=%-+....;...;...+-*@&@%#+.;$-#%@*-+...;-***=-;+-=%&&@@*$...;.;......;-*@*#+..+$#@%=$..............+$*%#+...+-=@%#+....;.;........-=%*$;.$=%%#+.;..",
+"..........;..+$-+...;.......;..$=%@%*-+...;$=*#+.....$---$+.;+-#####-+.......;.;...+#%=$+...+#*=$+..;........;...+$-+;;...$=*=-+;........;.....+-#$;;.$#*=-+....",
+".;...;.;.......;;.;....;.;......$###-$.....+--$;;....+++++.....+++++;;.;..+.;...;...$$$+....++$$+;;...;..;.;..;..;.;......+$#$+...;...;....;.;...;;...;-#-+..;..",
+"..++$$$++..;+++++;..;.+$$$$++...+$--$++.....+$$++.;++$$$$$+.....+$$$+.;$$$-$-+;..;++$$$++;..;$$$++.....;...........;..;.;..;;..................;....;...++++;...",
+".+$#=*#-+..+-#*=$;...+$#**=#$+++-#**=#$+...+-==#+;;$#=**==$.;.+-#=*=-++#=****=$;.+-#**=#$;.+$#=*#-$.;....;.;...;..............;.;...;..;.;.......;.....+$-=#-$+.",
+";$=%@@@*-++-*&>&#$..+-*%@@&*#+;$*%@&&*#+.;.$=&&%$;+-*&&@@*#;.+$=@&@%#$$=%@@@@%#+;-*%@@&*#+.+#%@%%*#;.........;......;....;..++$++.;.....;..;++$$++..;.+$=%&&*#$.",
+"+#%@&&&%=$+-%&,>*$..;-%&&&>@*$+-*&&&>@*$..+#%>>@#++#%>&@@*-;.$#%>,&%#+$*%@@&&@#++#%>&&>@*$+$*&&@&@=+..;++$+....;.;++$+;...;+$#==-+.+++$$$+;;+#==#$+;..;-*>>>&*-+",
+"+#@@%%%@*$;$#*&>=$+.+-*%%%@@*$+-=**%&@*$;+$=@&>@#+$#%>&@%*-+;-*&&@%=-++$##*%@%#;+#@@%%@@*$$#%@%%&&*$..+-==-+.....+-==-+..+$-=%@@=++$#====#-+$*@%%=#$+.+#*@%@@@#+",
+"$#@@**%@*-..+#@>*$..;$-##*@@*$.+-#*%>&*$.+-*&@&@#++#%>,>&%#++-%,&@%*-+.+$-#%%*-;$#%@@%@@*$+#%@%*&,*$;.+=@@=+.;...+=@&#+++$#%%@@*-++-*%@%@%=$+-*@&&*#-+;$=%*%@@#+",
+"$=@%==%@%$;.+#@,=-;..++-=%>%=$..$#%>>@*$;$=%&@>@=++#*%@&>>#$+#%>>>&&#$..+$=@@#$.+#@&>,>@*$+#%&@%>>*$..+#%%#+...;.+#%@#+.$=%>@%=#+++=%&&@&@*$+;-=@&&&=$;+-=%&&%#$",
+"$#@@*#%@%$;.+#@>*$+...$#@>@=$;;;+#=@@@*$+#@>&@>&*$;$#==*&>*$$#%>&@>>*+..;-=@*#;+$#%&@&&@*$+-*&>>>,*$+..-##$+.....+$##-++-*@,@*=$+.+=@@&&@&%$.+$#*@>>*$.+$=&&%=-;",
+"$#@@*=%@%$;.+#@>=-...+#%&>*#+..$##=*@@*$+#%>&&,&%-$-###*&>*+$#%,*%&>*$;.+#*@*-;.+=@@%%@@%$++#%>&>>*+.;.+--+;...;.++$$+.;$=%&&%=-+++=%@&&&@*-.;-=@@&&*$..$=>&=-;.",
+"$#%@%%%@*$;+-*@,%#$;+-*&>&*#$++-**=%@@%-+-*&@>,>%#+=**=%&>*$+#*>%%&>*$..+=%@=$.;+#@&@%@@*-;+#*%@>&=$..+$##$+.....;-##$+.+-=%&&@*-+$#%%@@@@*$+#=%&&%#-;..+#%%#+..",
+"+#*@@&&%=++$=%&>@*#++=&,&&@*#;+#&&@@>%=$;+#=%&>>*#+=%&@&&@#++$*&&@,&=$..+=&@#$..+#%&&&>@=$+$#@@&&@#+..+#%@#+;...+$=@@#+..;$#*%&@=++$#=====-+$*@@%*#$;...+#%*$+..",
+";$#*%@@=-++-*@@&@%=++#@&&@@%#$+-%@@@@*-+.;$-*@&@*$+-*@&@%=-..+-*@@@%#+;.+#@*-;...$#%@@@*-++$=@@@*#$+.;+#%@#+....;#%&%#+....+$#==-+.+++$+$++++#==#$+;.;..+#*=$;..",
+".;+#=*=$;.;$==%%**-++-=%%%**#+.$#=*%=#+...++#=%*=+.+-=%*#-+;.++#=*=#$;..+$=#$;.;.;$#**=#+.;$#=*=#$+...+-==-+;...+#%%=$+;.....++$++..........;+$$+.....;.;-##+...",
+"..++$$$+...;$$---$$..+----#$$...+$---++....+$$-$++.++$--++..;.++$-$++....+++;;....++--$++..;+-$-+......+$-++..;.;-=#-+...;....................+..;;;.....+$+;;..",
+"..;;$$++....+++++.;;.++$$+++;.;..++++++.+++;++++...++++++++..++++++++....+++++;;.;+++++++;.++++++++;...++++++.+;;+$++++..++++++..;.+++.+++++.+++;;;+;.;..;++;...",
+";;$#==#++;.+--##++..+$####-++..++-##--$+$-####$++.+$##=##-+.+$##=###-++++$###-$++$-##--#-++$-###--++.;+-####$++$##--#-$+++-##-$+..+---$;$--++$-$$$#-$;;;+----$+.",
+".+#%&&%#+.+$=%%%#+..$=%@%%*=$;++#*%%%*=-#%%@%%*#$.-=%%@%@%#++=%@%@@%*$;$#*%%%*=$-=%%*=%%*-$=*@@@*=-+.+-=%@%%=$-=%@**%%=++#*@%%#$+;-=%*#-=%*#-=%*#=%%=$;$#**%=#$;",
+";#*@&&&=-+;$*@,>*-++-*&>&&@&#+$#%@&@&&%#=@&&@@@@#+-*@>&&&&=+-*@>&@&&%-$#%&&&&&%#-%&&%*@&@#+=*@>>@*-+.;#*@>&@*--*&&@@&@*$+#%&>@=-;.-%>@*=%>@##%&&%*&&%$$#%&&@&@#$",
+"+#%@@&,*-+.$=@&>%=+.-*@&&@&>=--%&&%*@&%##@&@%%&>*--*@&@@>>*$-*@&@%@&%-#%&@%%@&%#-*&&%%@&@#+-=%'&*#$..+$=*@&@=$-*&&@&&%=++-*&&%#++.-*',%%&,&=#%>>%%>>*$-%&@%%&>*$",
+"+=@@@@,%#+;+=%&&@=$+$=%&@@>,*-#@>%##=%*-#%&%*=@>%-+=%&%%&&=++=%&%@%%*-#@>%==%%%-$*@&%%&&%-++$*>@=$+...+$=%%%#+-=&&&>@#-+;-=@&=-+.++*>,&%&'&##%&>&@&,*-#@>%==@>%-",
+"$=@&>,>%=++$=@&@>*#+$#%,@&,>*-=@>*-+$-$+-%@%##*@%#$#%&&>@*#++#%&&&@*-+#&>*##**=$$=@&&@&&*-.;-*,@-+...++$#%%*-+$=@',,*#+..+#@@=++..-*,,&>>,@##%@&&&>>*-#@>*-#*@%#",
+"$#@&&,>%=++-*@@@&%=$$=%>&&&>%##@>*-+++++-%@%#-*%@#$#%,,'&=-+$#%,,,@#++#@>%#*@@*-$=@>@&&@%-..;=>@#+;.+$-$#%%*-;$=@>,'@#$..+#@@=-$++-=>>,,&,@##*&@>>>,*$=@>*-#*%@#",
+"$=@&&>>@=$$#@>>,>@*-$=%&%%@&%#=@&*#$$#$$#*@%##*@%--=%&&&@*=+$=%&&&%-;;#@>%=%&>%#$=@&%%@&*-;;$*>@#++;-*%=#%@*-+$=@@&@&*#+.+#@@*=*=+-*,&@@@>@##%@@&&>>*-#@&*-#%@%#",
+"$#@&@@&@=$$*&,@@&,@#-=%&%%@&%##%&@===**$#%&%=*@>%-$=%@@@@@%--=%&@%=$+;-%@@*%@&%#-*@@%%@&%#.$-*,&=-;;#@&%*@@*$;$*@&%@&@=$.$=@&*%&%#$*,&%%*,&##%@%%@,,*-#%&%**@>%-",
+"$#%&@@@%#$-%'>@%&,@#-%&,&@&&*--=%@@@%@*-#@>&@&&&=$-*&>&&&&@--%&>&%#$..-=@&&@&@*--*>&%%@&@#+#*@,&%=$;-%>&@&@=+.-*>&@*@&%#+#%>'@&,%##%&&*=%>&=#%>@%@>>*$-=@&@@&&=$",
+";-=@&>&*-+-*&&@*@>%#-*&&&&&@=$+-=%&@@*#$#@&&&&@*#+-*@&&&&&*--*&&&%#+..+-=@@&@%#$-*&&%*&&%#$#*@&>%=-.-=%&&@*-+.-*&&*=*@%#+#@@&&&&%$-*@@==*&%##%&@=*%@=++#=%&&%*-+",
+".;$#**=#+.+##=##==#$+#=*===#-+++$-==##$+$#*===#-+.$#==*===#++-===#$+...+-##=##+;+#==##==#$+-#==*=#+.+$#==#-+..$#==#--##$+$==*===#+$###-$###$+#==-###$;.+-##=#-;.",
+"..++$-+++.++$$+++++;.+$$$$++;...;+$$$;..++$$-$++.;.++$$-$++;.+$$++;.;....+$$++..;+$$$+$$++.++-$$$+....+$$$+.;.++$+++$++..++-$$$$++.+$$$++$$...++++++;....++++;..",
+".;+++$++.....++++....++++++.....++++++...$+++++++..;+++;++;..++++;+++..+++;+++;..++++;+++..++++++++...+++++++...+----+..++$++.......+$---+;....++++.............",
+"+$#=###-+..+$--#-$+.+-#=##-+$..;+####-$++-#=#=##+;+--#--#--++--#$$-#-$+$-#$$-#-+$$-#--##-++--#--##-+++$##=##-+..-=%*#$+;+#=#++...;.+$#*%=-..;..+#=-+;.......;...",
+"-*@&&&%*#++$#%@@*=-+-=@&&@%#$+;$#@@&@@#+-*&@&&&@#+-=@@=*%@=--*@%*#%@%#-*@%=#*@%#-*@@%*@@%#-*@@%*@@%#+-*%&&&@*-+;#@>@=$+.+=*%-+;....+-=@>%#+...$#%@=$+.;.;.....;.",
+"-%&,,,&%=$$#*@&,&%#+-%>,,>&*#+$#*>>>,>*$#@,,',,,*$#%,>*%&,%--%>&*=%>&##%>>%%@>&=-*>,@%>,&#-%@'&%>'&#$#%>>,>,@#.+#@,%#$..+#*@=-+..;.++=*,@#+..;-=@>*-+....;......",
+"-*@@%%@@%##*&@%%&&*--*>&@%@@*-$*@&@%&&*$=@&@,&>&*-#%>%=*&>*--*>&*=%>@##*,&&&@,@=-=&>@@&>%#-=>&@@&>%#$#@@@@&>%-.+#@>=-+;.+-*@*#+.....+$*,%#+..+#%@&@=+.;...;.;...",
+"$=%@**%@@##@,%==%&%-$=@@%%&&*--*@@%%%@=$#@&%>,&,=$#%@%=#@,*$-=@@*=*@%--*>,>,@>@#+#%&>&>@=$+#*@@@&@=$+#*%%@&%=+.+#@>*$....+#%@*-+.....$=>&#+;.+#@@@&=$;..........",
+"$=%&%%%@%#=@&%##*@@#-=@&@@>@*$-=%>>@@%#+-=%%,@%*-+-%@%#=@>*$$=@@*=%@*--*,>,,@'@#+$#%>,@*-+.$#%&'&=-++$#=%&&*#+.+#@'=-.;..+-=%%=-+.;..$*>@#+..+#***%=$+;...;.;...",
+"+=%>,,>@*-#@,*=#*@%#$=&&,,&%#++#*@&&,&=++$#=,@=#$+#*@%##@,*$;-*@%%@%=$$*&,>&>,@#+$#*&&@=-+.+-*&,%#$..+#=@,%=-+.+$@>*$+....+-*@%#+....+='@#+..+$-#-#-+.....;.;...",
+"$=%,>>&%#$#%>@%*@&%-$=&>>>>%#$-=%%@&,&*$.+-*>@=+;.#*@%==@,=$+$=%@@@*#+-=,,&@'>@-+-*@&&&*#+..+=&>*#+..+#%&>%*#-.+#@>=-;.....$#%%=-.;.+$*&@#+;..;;;;;.;.++++$$$$$.",
+"$=@&&%*#-+-=@&,&&,*--*&&@%>&*##%&@%%>,*$.+-*,&=-+.-*@@%%@>=$.+#@&&&=$+$#@>@%>&%-$=@'&@>&%-.+$=@'*#+;+-*&,@@&%#.+#@>%#+..;...-*%%#+..+#*,@#+..;....;..+$##=#===#+",
+"-*&,@%#$..$#%,>,,@*-#%,&%%@>@#=@'@@&,@=$;$=@,&*-+.$=%@@@&@#+.+-*&'@#+.+#@@%%@@*--*,&@%&)@#++#%>,%=+++-%>>@&>@#.+#@,%=-......+=%&#+..$=@>%#+..........;#*%%%%%%*-",
+"#*%@@*#+.;+#*&&&,>*$$=@@*#*@%#-*@@@%@%#++$#%@@*#+.+$=%@@%*-+..+#%@*-+.;#*%*=%%=$$=@@%*%@%#..#*%@%=$;+-*@@@@@*-;.-*@@=-+...;.+#%@=+;+-=@@%#+;..;.;..;.;#%&&@@@&%#",
+"+-#=##$+...$#*****#++-###$-##$$-###=#-$..+-#=##$+..+$#####+..+;$###++..+###-##$++-#####=#$..$#=##-+..+-#==###+..$#**#-+;....;+#=$+..$#**=$...........+#**%%%%*=$",
+".+++$++....++-$---+..++$+.+++..++$++++.....+$$++;...++$+++.....+++++;..+.++;.++..++$+++++;.;.++$++....+++$$+++..++$-+;.......+$$+....$--++.;....;.....+$-----#-+",
+"..;.+++;.;.;...;..;+.+$++...;.;.;...;.;.;..;+++++........;.;...;+$+++..;........++$++........++++.;....++$+..;.++$++...;.;+++++..;...........;....;....;.;;;....",
+"...+$-$+............$#=#$+..................+#=#$+;.;........;;-#===-+.......;.;+#=#$+......+-##-+..;..+#=#++.+$==-+.....+$===-+...;.....;..........;...........",
+"..+-**#+...;.+.+....-*&@#$+.....;..+.+.....+#%@%#;...++;+....;$=@&>@#+.;.;+.+...-*&@#$+;.;..+=@@#$....+-%@*-+.+#@&*-+....+#%>&=+.....;+.+..;.;++......;..;.++.;.",
+".;+#%,*-+..++$-$$+.;$*&@*#-++;.++$-$-$+.;++$#%&@#+.++$$-$+.;;$#*>>@*#+.;+$$--$$+-*@@*#$++...$=@@=+;..+$#%&%-+.+#%@*#--+;.+$*&'*$.;.$$$--$-+.;$$$$--++..;+$-$$+;.",
+"..+-%@*#;.++#=**=-++$=@&%*=#$++$#=***=#++$#**@&@=++$#=**=#+.+#*@,@%*-++$#=****#$$*@&%*=#++.+-*@@#++.+$=*@@%#+.+#*@%=*=#+..+#@>=$..$#******#++#*==*=-$+;$#=**=#+.",
+"...$#**#+.+-*@&>@=$+$=@&,,,%=$$=%,@&>'=+$=%&>,>@=+$=%&&&@*#+$=%>,>@*#+$=%&&&,&*-$=&&,>>*#+;+#%&>=$..;-*@&'&=+.+-*@@@&%=+..+#%,*$+.$%&'&,'&*--%&&@@&*#$$=%&&&@*#+",
+"...++##$+.+#@&',&*#+$=&>>&>&%-#%&,%&'&*$#%&'&>&@#+#%>,&>>@=++=@,>&@*$+#*&,@>,>*-$=@,&>,%*$.+#*>>=$..+-=%&,&=+.+-*@&>&%=+..+#@>=$;.-%,,,>,>%##%>>@@>@=-#%&>&&>@=$",
+".;...+++;.+#%@&&'%#+$=@&%%%,@##@>@**@&*$#@>@%@&@=$#%,>&&,,*$+$=@&%=#++#@&&%%,@*$$#@&%*@@*$.;$=@'*$...+-#=%>=$.+-*&,)@=-+;.+#%'*-..$=@@@&&&@#-=@&%%@@*-#@>@*%&>*$",
+"..........$=@,>>,%=+$=@@%=%,%#=@,*##**#$#@,*=*@@=$=&'>'',&*$++#@@%-+..#%,&&&>@#+$=@@**%&*-..+#@>=-+...++#*,=$.+-*>,&%=++..+#@@=-+.$=@@@&@@@#-=@@**%@%-=@>%**&>*$",
+".;.;.....;$*&>@%,@=$$*@&%*%,@##%,@*=**=-#%,@%@&@=$#%,&@&&&=$+$=@@%=-+.$=%&,>>@=+-=@@**%&%-++-=@,*#+;..+$#*&=+.+#*&@'&*#+.+-=@'*#++$*@&@&@@@#-=&@**%@%-=@>@**>>*$",
+".....;....$*,&&&,@*--*&'&&&,*##%&&@@@@*$#%&&@&,&*-#%>&&&>&=++#*&>@%=$.+-*%@@@@#+-*,&%*&&%#+$=%,'%*#+.+#=*%&=$.+#@&@@,@*-+$=%,>%*-+$*&&@&&&@=-*&>%%@>%##%&&&&&>=$",
+".......;..+#@>&&&&*$-=@>&&&%=$-#%&&&&@=$$=%&&&>&=$$#%&&&&%#++=%&&&@*$++-*%@@@*-+$=>&%*@>%#+$*%@'&*#++#*@@&%#+.+=@@%*&&%#+$*%&,&*#$-*&@%@&@@=-*&&@*&>@#$=%&&&@*#;",
+".;.;.....;+$#=****#+$#==**=-$++$#=**=#-+++#=**=*#++$#***==$++-=*%*=#+.+#*@@@*#$.$#**##**=$;+#=**=#-;;-*@@%=-+.+$==##=*=+.$#=***#-+$#**==*==-$#=*=#**=$+$-=**#-+.",
+".....;.....+$-$--$+..+$$$$$+.;..+$$-$++...+$$-$$++..++-$$++..+$$-$$-...$-###-+..++$-$+$+++.+;$$$-++..+####$+...+$$$$$$++..+$$-$++.+$$-$$$$++++$$$+$$++.++$-$$;..",
+".......;...;....;.;.;........................+.......................;...+.+..;........+...............++.;......+++$+.;..;+$++....+++++;.......................",
+".;.;..................;....;..;.......;.;.+$++....;........;............;......................;...;.........;...+-##$+....+#=-+;..;$##-++...........;.;....;...",
+".....;.;.;.;..;+........;.+.....;.;......+#=#$+;....+;.;.....;+;.;.+.;.....;..;.;.;+.;.;.;.;.........;...+;....;+#**=$+...+-*@#$...;$=**#+.;.;.;.;......;.;...;.",
+"++$---$++..++-$--$-.;+$--$$-+...+$$--$+.+-=%*#-+..+$$++$$++.++$-$$$-$++$$-++$$-.++$-$$--+.++--++--+..++--$-$+...+=&@#+.;.;+#@,=$.;..+=@@=+.........;............",
+"$#****=#$++$-=****#++-=*=*==$+.+$#=*==#++#@&@%*#+.-=*#-#=#-+$#**==**=-$#*=##=*=-$=**#=*=#+-=*###=*#++$#=***=#+..$*&@#$....+#@&*$....+#@>=-....++++++....;.;.;...",
+"-%&>&>@%=+-=*@>&>>*-$=%&&&&%#+;$#%&>@@=$+=&','&*-+=&&*=@&%#+-*>>@%&'@##*>&%*%>&##%&>%@'&#$=&&@=%&>*$+#%@'>'%=+;+-*)@#+.....#@>*-.;..;#@'*-+;.+--#-#-$+..........",
+"-*',@@@'*##%>@@&'>*$$=%)>&&%#$+#*&'&&@*-+=@&&%%=++=@'**%&@#$-*'&@%&,@##%'&@@@'@=-*&'@@&@#+#@,@%@>'=$+#@@&@,*=+.+-%,%#+;.;.+#@'=$....+#@>%#+.+-*%@%%%=+;....;....",
+";=@&@%*,@#=%'%%%&&=$+$=,&%*=-.+-%&,,&%=++#%@@*#-+.#%&%=*@@=++-%@%%@@%-$=&&&,@&@#$$*@,>%=-+$=@&@&@%#++-*@&,&*#+.+$%,&#+....+#%>*$.;..;#@,@-+.+=&>>>>@*$..;....;..",
+"$=&,&@@>%##@&@@&&&=++-*&%*-$+.+-*&,&&@*++-*@%=#$$.#%@%**@@=++#*@@%&%#+$=&&,>&>%-+-=@,&%#+.+-=&)&%#+.+-*%>&@=#+.;-*&@#+....+#@,=$....+#@&*$+.+=@@@&&%=+.....;....",
+"+=@>&,@%=$$=%@@&&@=$+#*,%*#$+.+#*@&&&>%-+-*@@**=#+#*&@*@&&*$.$#%&&&*-+$#@&>&,&*$$#*&,>@=-+.$#%,&=$..+-*&,@@*=+..$=,@#+;.;..#%&=$.;..+#@'=-.;.$==#==#$+;.;...;...",
+"$=@&@*=#$++$#=%%&@*$$=@,%%*-+.+#@&&&&)%-.$=@>@@%#$-=@&@@'>*+.+-%&,%#+.+#*&&@&%=$-*@>@&&@#++#*&&%#+;.+#%,&&@@*$..$=&@#$+...+#%%=+...++=@@=+...++++++++........;..",
+"-*>>@*#$+..+$-*@>&*$-*@,&&%#+.+#%@&&&%=$.+-*&&@*#++#=@&&&&*$..$#%%*-+.+$=%**%*#+$%&@%@>&#+-*,&,%#+..+-%&&,>%=$;.+#@%=$+.;..+==-+....$=%@#+.......;......;.;.....",
+"$*&&%*$+....+$=%&&*$+#====#$+.++##**=#$+..+-==#-$..+-#*=*=-+..+$-#-+...+$---#$+++#=###==$+$=%%*=$.;.+$#=*==#-+...$#=#++....+$$++;..++#=#-+;.;.......;........;..",
+"+#=*=-++.;...+#=*=#+.+$+$+++....++$$$++.....+$+++...+$;$$$+.;..++++.;....+++++...+$++$+++.+$###-+.....++$$$++.....++++..;.........;.;++++......;......;.........",
+".;++...........+++.....++++;......+++.;.;.......;...+.+.++.....++++.....++$+$+..............+++++.......++.+.;.;.............;..............;..++++.....;.;..;..",
+".......;...;.......;...+-#$+..;.+$---++...;.......;$---$-#$+;.+$#-+.;.;+$#=*=#$+...+++++;...+$---++;.;.$$-++..........;.;.;.....;........;....+$--$$+...;+$$+;..",
+"...;.....;...;..;....;$#*@=-+..+$=%%%#+.+++$+++++++#*%**%%=$..+#%*#....$=%,&&%#+;++$-$--+.++#=%%*#-+.++#=*=-...;.;.;.........;....;.;.;.....++#=%%*#-+.+$#=*#-+.",
+";....;........++.....+-*&,%#$+.$#@&,&*-++$#=====-+$=&,&@&)%-..$*>@#+..+#*&&@&%#+..$#=#==$++#%&>)>%=+.+-=@@&=-.....+.+++..+++++++..........;.+-%&>'>%=$.;#%&&%#+.",
+".......;.;.;.+$--+;.+-*@,>&*-++$=&&@%=$++-*@&&@%=++#@>&&'@*-;.$=,%#+;.-=@'&@%%-+.+$#####+.$=&,,>>&%-.+#%@&'=$+..$--#---++-#=#=##-.....++....-=&',,>&%-+;-*@@*#+.",
+".;.;........+$#=#+..+#%@&&&*#++-*&@*=-+.+#@&&&>&*-+-*&&@,%#$..+#>@#+..#%&>)&@*-+;.+$$+-++;#*&>,&&&@#+$=%@@>*$+.--=%***=+-*@&>&&@=+;+-$---$++-%@,>@'&%#..+###-$;.",
+".....;......+-=*#$..+#@@%%%=-++#@&&%#$+.$#@@@@&@*-++=@,&>*-+;.$=&%#+;.#@'&,&&@#+.....+...+#%&,&&&&%#+$=@@&&*-++#=@@@@@=$-*&'>',>=$+-=*%***-+#%@&>&>&%=...+++;;..",
+".......;.;.;.#*%=$+.+=@@%**=-++=@,,&=-+.+=@&@%@&%$.+#*,)&*-+..+#@*#+.+$*&&&&,'=$...;......#%>,,&&@@#+$*%>>'*#+-*@>@&&%=++#==*%@'*$$#*@&&&@#+#%&>,&&@%#+.........",
+";.;.........$#@&%-+.+#%&@@@*$++#%>&@*-+.+#@&&@&&*$.$#%,,%*#+;.$=@%-+..$#%%@>>%#+;....;....-*>,>,>&%#+$=@,>@*#+-%'@&&>%#+++$--=@&=$+-=*%%*=-+-*&>>&>&@#+...;.;...",
+".....;......$=,)@#+.+$=@&'@=$+$#@&,%%==++#%&&,>@*$.+#%&)@*-+..+=&@#+;.$=%%%@>%#+........;.$#%&&&>&*#.+#=%%%#$++=%'@&&@=+....+-=*#+++------+;+=@&>&>@*-..........",
+"..;....;.;..$=,,%#+..+-=&>*#+.$=,,,&,&%-+-=*****#++$=@,'&*#+;.$*'%#+..$*@&&>@=$+;.;..;....+-=%&,@*#+.++-##-$+;+$=%@@@@=+.....+$-+...++++;...+-=%&>&*#$;.;..;..;.",
+"............+#@,@#+...+#*@#$..+-@&&&>&*$;$-#-$--$+.+#*@'&=-.+.+#&@#+..$*%,&&*#+............+-=%@*#$+..+.++++...+#=*=**=$;.;....;.............+-=%@*#$;..........",
+"..;.;....;..+#%%=$+;...+-#-+;.+$==*===#+..+.+..+...+$#===-+.;.$#@*-+..+-**%=#+.....;.;.;....+$-#-++;............+$--$-+;........;.......;.;...+$#--$;....;.;....",
+"......;......+-#$+......+++.....+$$--++..;.....;.;..;++$$+....+$=#++;..+$-$$+...;........;....+.+.....;.;..;.;......;+....+;.;.....+.;.......;;;;+....;.....;...",
+";.++$$+..;.........;.;+$$$$.;...+$$$+.......;+..............;.+$----+........;...............++++..;....+..............;+-##++..;++##-+...;.+-##-$+..........;..",
+".+$#==#+...;.++++....+$#==#$+.;+-===-+.;.;.++$++.;.......;...$-=****#$...........;.;.;.;...;+-#=$+.....$$-$+..;.;.;.....-=%*#++.;+#*%=$+++$+#*@%*-++$+;.;.++;;..",
+";$#*%*=-+....+-#-+...+-*%%*#+..$=%%%=-+...+$#=-+...;.;......$#%@&)>&*$;.;..;.;.............++=%@=+.;.+$#**=-+.......;...-*&@=$+$-$=%&*-$-#=-=%@@%=-##-...;$#-+..",
+"+-*@%@*=$;..$#*@=-+;.+#*%@*#$..$=%@>*-+...+#**#+...+++++$-+;$=&,&,,&*$.........;.......;.;.+$=@>=$...-#*%@%=$+..++..+.;.$*&&=-$=*#=@&%##***$#%@&%*=*%-+.;;#*=$+.",
+"+-*@%@%=+.++#=&'==$+.+-*%@*#+;.$=%@'=#+;..+#%*-+;.+#=#--=#-+$*',>,&%=$...;+$+....;.;........+=@'=$+..$=@@%@*#++$----$+..-=@@*#=*%##%@%=*%@*-#%@>@%%%%-...+#*=$+.",
+"+$#%@%=#+.+-%@>'&%=$.+#*@@*#+..-=@@@*#+...+-#-+...-*@@==@@*$$=&>,'&%=$;..+-=#-.......;...;..$#%,*-+;+$=%@@@*#++=*****#$.-*&@%*%@%#=%@@%%@@*-#%@&@@@@=$+.+$=@*-+.",
+".+-=**#+;.+#&'',>>%-.+#%@@*#+..-%@@@=-+;...+++..;.-*>&**@@*$$#@&,,&%=$..+$=@*-$.............$=&,=-+..+=%@@@*-+$=@@@&@*#+#*@&@@@@%#=@@&&&&@%##%%&@&&@=++;$#%&@#+.",
+"...$--++..+-=%@'@%=$.+#***=-+;.$=%**#$............$=&@**%@%-+-=%>,&%=$;.+$*@%-+.;.;+$+.;..;+$=*%=-+..+#%&&@=-++=%&&&>&=$$=*%@@&>@##*%@@@@@&#-=%%>>>>*$.+#*@>%#+.",
+";...++..;..$-=@@*#$+..+-##$+...+$#-#++.;.;.;.;..;.-=&@%%@&%-.+-*@'@%=+...+#=#+....+-=#$+....+$-#-$+;.$=@',>*#++#%&@&,,=$+-=%@&@'@#-*%@%%@@@-$-=@&@>>*$+$*@@%*#$;",
+"..;........;#*%@*#$+...;+++......;++..............$=&&@@@'@#++-=@,>@*$....+$+.....$=@%#+..;...+.+....+#*@&@=-+$=%@@@>&=$+#*@@@%'&##*@%**@&*-$#%@@@>,*$;#*@@**=#+",
+"........;.+-*%@&@*#-.......;.;.......;........;.;.$#@',&&&@#++=%>,>&%$;......;.;.+-%'@=+...........;.++##=#$+.-*@@@&&%#++-%%%@@>&=#*%*=%@@*--=%%%@&'%$;-*@&@@%=+",
+";.;..;....+#@&,&'&*$.;.........;.......;.;.;......$#%@%*=*#$.+=%&@'>%-..;........+-*'&=$;...;.;.;.......+++..++=**=*=-+;+-====*&&#-#=##%@@@-+#=##=@&*$;$=%&&&%=+",
+"........;.+$======#$...;.........;................$#**#-$++..+$=*===#+....;......+$=**#+.................;....+$----$+;..+$$+$##=$+$++$-=##$++-$+-###+.;$=%@@*-+",
+"..+.+;.....++$-$-$+......+.;.;....;;.;......;.;.;..$##-+.......+$$$$+.;......;.;..+##-+...;.....+.;.;.;.;.;;...+.;;++.....+++++++......+$$$...+.+;+$;...;+###-+.",
+".+$##$+.;....+$##$+;.;+$#=$+...;+$-#$+.;.;++++++..;+-#=#$+;...++++++++..;+$++++..+$=#$++....;+##-$;...+$=#$+...+++$+$+;..++-#++..;..;++-#-++..+$==-$;;..;;+++++.",
+".+-=*#$+....+$#**-+..++=*%=++..+#=**=-$..+$--$-++..+-*%*-+..;++######+.++-###-$+.+-**#$+;...+$#*=-+..+$#%%#$+;.+-=#==#+..+-===$+.....+-=%=$..+$#%%*-+;.;$-$--$+;",
+".+#*%*#+;.;+$#%%=-+.++#*@@*-+.+-=@>&%#+..+#====-+.+$#%%%#+...+-%%%%%%-+$#*%%%*=-+$#*@%=-$+++#=%%*=+++-=*@@%#$++-=%%%**-+.+#*%%#-+.++$#*%%#-..+#*@@%=$;;$#===*=-+",
+"+-=%@@#$+..$#*@@=$+.;-*@@@*-+.;-%@&&*#+.+$*%%%*-+.+#*@&%#+;..+#&')&'&#-=%'&>>,%--=%@&&@%#+$=*@&&@%#+$=%&&&&%#+-=@&&&@@#++-=%@@%=-+.+#*@&%*-++-=%@@&*#+;-*@%@@*=+",
+";-*&',*$+.+$*@'&%-+.+-*&',%#+.+#%&),*#+.+-*&'&%#+.$=%',@=+...$=@'&@@%##@>%**%@*##%>'@'>&=$#%,,&'>&=$#%&'@',&=$-%>'&,>&=$+-*@>,&%#$+$*@'>&%=++-%@>,>%=+;-*&>,>%=+",
+".-=@@)@#$;+-=%,'@#+..-=@>)@=+..-=@>'@=+.+-=@,)@#+.+$*@'&*-+;.+=&,&&@*##%)%#-#*=$$=%@%%@'=+$#%@%@&>=+$=@&%%&&=+-=%&%%&>=+;+=%&'@*-+;-#%&,@*-;;$=%&,@*-;+$=%&>@*-+",
+".-=&>@>=-++$*@&@&*#+.-=&@&&*-++$=@>@&*#++-=&@&&*#++#*>&>@=+++-*,@&,&*-#@>*-$-#-$$=%&%@@*#+$=%@%%@%#+$=%@%@@%#++=%&%@@*#+.+$=&>*#+..+-=&>*#+..+$=&>*#+..+-=&,*#+.",
+";#*&>@'%=++#%&,@'%=$+-%&,@'%=++#*@,@'%=+;#%&,@'%=$$=%,@>&%-+$=*>>,'>*$=*'%#####++#*,&&@*-++=%,&&@*#+$#%,&&@=-++=*,&&@=-+..+#@>=-+...;#@>*-+...+-@>*$;...+#@>*$;.",
+"+=@,,@,@%$$#@>>&,@*-$=@,>&'@%$+=@'&>,@*-$#@>>&>@%-#%&,&,&@#$-*&,>@@%=+#%&@%%%@=-$=%>@&&*#$$=%&&&&*#$$=%&@&&*#++=%&@>@*#+..$=@,=-+;..+=@,=-+;..$#@>=-+..;+#&>*$+.",
+"$*&>&@&,@#-=,>&@&'@#-=>,&@@'@#-*&,&@&'@#-*&,&@&,@#=%,&@&,>*$#%,&&&@@%-$=%&&&&&*$-=%,@@&@%--=@&@@@@%--=%,@@@@%--*@&@&@@%-++-=@'%#-+.+#=@,%#$+.+-*@,%#-+.+#=&>%#$+",
+"#*',@%&'@=#%,&@%&'&=#%'&@%&'@=#%,,@%&'&=-%'&@%&'@==&'@@@,,*-=&,@',&&&#+-=%'&%*-+-%,>@&>,%##%'&&&'@%##%,&&&&,%-#%,'@&>>%-+$*@,,@*=++$=@,,@%#$+-=@,,@*=+;$*%,,@%#$",
+"-*&&%*%>@#-*>&%*%&@#-=,&%*@&@#-*@&%*@&@#-=,&%*%&@==@&@**@&%-=%&@&>&&@#.+$*&&*-+.$*@,&@&&*$-*&>@@&&%--*&&&@@&*$$*@,@@&&*$+-=%&&@*=++$=%@&@*=+;-=%@>@%#$.-*%@>@*=+",
+"+#==##===$$#===#=*#-$#==##===-+#==##=*=-$#===#=*=$-=*=#===#$-===*=**=+.+-*%*-+..+#=*==*=#$+#=**=*=#$$#***===#$+#=*==*=#+;+#=*===-;.$#==*==-+.$#=====-+.$#=*===-;",
+"++$$$$$$+++$$$$+$-$.++$-$$$$+++;-$+$$$++++$$$$$$+++$$$$---$.+$$$$$-$$...+$-$+....++--$-$++.+---$$$+..+$----$$..;$----$++..++$-$++..;+$---++..;++$$$+;...+$--$++.",
+".;++++++...+$####-$...$##$+......+-##++...+-##-+...+$-###-$...++$++.;.;......;...;.++++++..+$##-+......+$#-$+...+-##-+....+++++;......+-#$+;..++;;;......++-+;+.",
+"+$--#--$+..+-*@%%*-+.+-=%=-+..;.+$=**-+..+$=%%=-+..+#*%@%*-+.++---$$+........+...++$####$+.+-*%=$++;..+$=**-+;.+-=%%=-+.;++----$+;...$-**#+++---$+;;;...+-#=#$;.",
+"+=*%*%*=-$+-=@&&@*-+.+#*%*#$+...+#%@*-+;.+#*@@*#$.+$=@&&@*$+.+-*=**#+.;+-++.+++.+$#**%&@=++$#*@*=$+.++-#%@*#$+++#%@@*=-.;+#*====-+++$#=%%=-++=*%=#$+.;.$-*@@%#$;",
+"-=,&&@@&*-$=%@&>@%#+.+#*@@*#+..+#=@@*#$.++=%@@@*-++#*@&>@*$+.$=%%%%*-++$=#---#-+$=%&&&,'*+$#**@%*=-$+#=*@@%*#++#*@%@@*=++=*%%%%%#++-=*%@@*=$-*@>@*#$+;.$=@&&&*-;",
+"-*>>@@@,%##*&&%@&@*-+#*@&@@%#+$#*@@&@%#++#*@@&@%#+$#*@&&@%#+$#*@&@@%#++#%**#*%*$#*&>@>,&*$-*&@%%@@*$-*@@*%&@*--*@@%%&@*--*&@*%&&*--=@&@%&&%#-=@,&@%=-+.$*@&&>%#+",
+"-%&&@%*&@=#@>,@%&,%$-=@>@@&&=$-=@>@@&&=$-*@@@@&&*$-*@&@@>&=$-*@@@@>&*++#@&@%@@*-#%,@@@&&%##@>@**&'*-#%,@**&,%-#@>@**&,%-#@>@**&>%$-*>&%%&>@#$=*,>>&@*$+-*@&&,%=$",
+"#%,,&%*@@=#@&&@@>>*-#%,%**&&%-#@&@**&&%-#@,%**@&%-#@,%**@&%-#@,%**@&%-+-*&,&'*#$=@,*@@@@@##%&%==&>*$#@&%==&&*$#%&%==&>*$#%&%==&,=-+#@&@%&@*$$=%@%%%&%-+-*@>,>%=$",
+"-%&,@**%@=#%&&&@&,*-#%,%##%@%#=@'%##%@%##%,%#=%@%##%,%##%@%##%,%##*@%-+$#%,,&*#$#%,@@@%@@##%@%#=@,*--%@%#=@,*-#%@%##@,*$#%&%#=%'*$+-=@&&>*#++#%@%%%&%#+-*%@@&>%#",
+"-=&@%=*%@=#%&@&&,>*$=@>*##%&%##@&%##%&%#=@&%##%&%#=@>*##%&%#=@>*##%@%#+-*@>&,%#$#@,@@%%&%##%@%#=@,=$#*@%#=@,=$#*&%==@>*$-%@%==@>*+.+#%>,@=$+$=%>@@&>%-+$%%%%%,@#",
+"-*&&%*%&@##@&@%@>'*$-%,%**@&*##%,%**@&%-#%&%**@&%--%,%**@&%-#%>%**@&%-+#%&@@&@*$#%,&@@@&%--*@@**@>*$-*@%**&&*$-*@%*%@>*+-*@@**@,=$.+-*&,%#$+-=%,&&&@=$+#%@@%%>@#",
+"-%,,&@&,*##@,&%@,&*$-=%@&&>&=$-=%@&&>&=$-=%@&&&&=$-=%@&&&&=$-=%@&&>&=$+#%%*=*@=$#*&>&&>&=$$=%&&&,@#+$=%&&&,@=+$=%&&&>@=++=%&&&>@=+.+#%,,@=-+-%>,@%*=$++=@>&&>,@#",
+"#*@'&'&%=$#%&>**&>=$+-=%>&@*#++#=%>&&*#++-=%&,&*#++-=%&'@*#++-=%,&&%-++-##$$-##+$*@&>>&%-++-=&,&@%#++-*&,&&%-++-*&&,&*-++-*&>>&%-+.+#%&,&*#+#%&>%*-+;.+=@>@@&&%-",
+"$#======$+$#==#-=#$+.+$#==#-+..+-#===-+..+-#==##+..+-#=##-+..+$#==##+..+++++++++$#*====-+..$-====-+..+$#===-+..+-===##+..+$===##+.++-#===-+;$#==##+...+$===#==-+",
+"++$$-$+++.+++++++++...+$+$$+....++++++....+++$++.....$$$$+.....+++++............+$--$$++.....+$-+++...+$$$+++....++$+++...++$$+;;...+$$$+++..+$++$.....++++$+++.",
+"..++++.......;++++.;.;.++++.;....+.+.+;...;.....;....+$$+.;.........;.............++++..;......++++;...++++.;.........;...++++.........++++...+.+++.;...........",
+".+$#-$+.;....+$#-+....+-##$...;.+$$-$+.....++++....;+$=#-+...;........;.;.;.;.;..+$##$.....;..+-#-+....+##-+...;++.++...;.$-#$..;.;...+-#-+.;.;$##$+....++++++..",
+".+-=*#$...;.+-=*#$...+$=**-+...+#=**=-+;++$-$$$+;...$#%%#+;....;..;..............+-=*#$+;....+-=*#+;..+#**=-+..+$--$$$...+-==#$.....;+-#*#++..+#**#$+..++$-$-++.",
+".+$*%*#$...+-=%%#$.;+$#@@%=$;.+$=@>>%=$.+$=*=*#$...+-=%%=-+.++$$$$$$+...+$-$$++.;+-*%%#$+...+$=*%#$..;$=%@%#$;+$=*===--..+-*%*#+....+$=%*#+..+-*%@*-+..+#====-;.",
+".+#*@@=-;..$#%@%#$..+#*@@@*-..+#%@&&%#+.+#*%%%*-+;.+#%@@*-+.+#==#===#++$#=*=*#-..$#*%@*#-+++#=%&%=-.++#%@@@*#++#=%%%%=-..+-*@@#+;..+$=%@=-.;.+#%&@*$+..$#*@%*-+.",
+"+-*@&,%=$+$#%&,&*-+.+=@&'&%#+;+-%&&)@=$++=@&'&%#+.+$*@>'@#$+-*@>@@'&%--=%@,&)&=$+-*@>'&%=$+-*@&)&%=$+-%@,>'@=$$=%,&'&%#+.+#%>>=$...+-%>>*$+..+=@>>*-+.;+=@>>*-+.",
+";-%@&&>*-+$=@@@>@=-.$=%&&>@=$.+#%@@&>*#+$=@@&>@=+.+#*@@@>*#+-%&&)&@&&##%'@%@,&*+$=&,@@&,%-$*>>@@&,%-$=&>@@@,%##%'@@&>&=$.+-*&'=$.;.+-*&,=$...+-*&,=$+..+-*>>=$+.",
+"+#%@&@)%#$$*@&&)&*$+$*@&&'&*-.+#%@&&,%#$$*@&&'&*-++#%&&@)%#$-%@@,,@@)=#%'%=*%@=+$=>,@@@,@#$=,,&@@)@#$=,,@@@'@##%'&@@,)*-..$#@>*$...+$#@>*-..;;$#@,=-....+#@>*-..",
+"$=&>,,&%=$#%>,>,&*-+#%&'>,&*-+$=&,,>>%=+#%&>>,&*-+$=&'>&>%=$=%&,'>&&&##%&@%%%@=$-*',@@&>%#-*'&&&&&@--*'&&@&>%#=@'@@&&@*$..$=@,=-+;..$#@,=$+..;$=@>*$+..+$=@,=$+.",
+"-*>&@@&%=$#%>@@&&*#+#@>@@&@%#+$*>&@@&%=$#%,@%&&*#+$*&,@@&%=-*&@@''&&@#-=@&>&&&*$$=>'&&@&%#$=,'>@&&%#$#,'>&&&%##%'&@&&@*$.+-=@,*#$+.+-=@,%#$;.+-=@,%#$+.+-=@>%#$+",
+"$*&,@&,@*-#@'@@,&@#$#@>@@>>%#+-*&,@&)@*-#@>@&&,%#+-*&&&&'@*-*&,>'&>&@#+-=%'&@%#+$=@,&&&,%-$#@&&&&>%#$#@&&&'&@##*&>&&,&=$+$=@&'%*=++$=@&,%*=+;$=@&,%*=+;$=@>,%*#$",
+"$#%%@%@%*$$=%@%@@%#+$*%@@%@%-++#*@%%@%*--=@@%@@*#+$#%@%%%@=$#*%%%@@%*$.+-*>&*#$..$#%@%%%=$+$=%@@%%=$+$=*@%%%=$+#=%@%%*-++$=%@@@*=+.-=%@&%%#++$*%@@@*=+;-=%%&@%=+",
+";$==*=*=#++#=*===#$++#=*====$++$=*=*==#++#=**===$.+$==**==#+$#======-+.+-%&%=+...+-#=*=#$+.+$#=*=#$+.+$#=*=#$..$#====-+..$#==*==-+.$#==**=-;.+#=**==-;.$#=*=*#-+",
+".+$$--$$+..++--$-$+..+$--$+$....+$--$++..+$$-$$++...$$$-$$+.+$$$+$+++...+-=#$+.;...++$$++...+;-$$++...++$$$$.+..+$-$$+;...+$---++;..+$-$$++.;.+$$--++;..+$--$$+;",
+";++--$-++....+++++....+++.........++++....++$$+.;....+++++...........;...+...............;..++++...;....++++....+.+++.................++++..++$++...............",
+"+-***=*=-;.++-##-$+;.+$--++.;.;..+$#-$+;..+#=#-+..;.$-##-$+.......+......+..+;...;.........++--$+......+$-#$+.;++##-$+;.;.....+..;...++-#-+++===$+;......;++++..",
+"-*&,&&>%#$.+#=%%*#$++$=*=#+.....+$#%%-+..+#*&@=-+..+-*%%*=$;.+$$$$$++;.;.+$-++.....+;+++.;.+#**#-+.;.;+$=**#+.++#*%*#+...$+--$-++..;++#*@=++#%&@#$+;.;.$+$$$$$+.",
+"#%&&,,,%=++#=@&>@#$..$#%%*#+...+$=%@*#+.;$=%&&*#+..$=%&&@*$++$#====#+...+-**-+;.;.+$-#-#-$+$=*%%=-$.+--=*@%=$+$#=%@@*#+++-====%=$++--#=%@*#+-%@&=#-++.+$#**===#$",
+"$*@&@&&@*$-=@@&&@=-++$=%@@*--.;$#%@&*#+++-*@@&%#$++-=@&&@=$.+#*%@%%=$...-=@&=$...+-=*%***-$=*%%%%*#+$=*%*%%*#$#*@%%%%*$+$=@%**@%#+$=*%%%%@*#-=%&@**=-.$=%%%*%@*#",
+"-=@&&&'&*-#*&&&&&*-+$#*&&@@=-+$#*@&&@*$+$=%&&&@*-+$#%&&&@*-+$=%&&&@*-+++-*&&*-+.+-=@@&&@%##*&@%*@@*$#*@@*%@@=-=@&%*%&%#+-%&@%*@@=$-=&@%%@&%#$=%&&@@%#$$=&&%%@&%#",
+"$=@>,',,%##%,,&&>@=$-*&>@&>@#$-*&,@&>@#$-%&,@&>@#+-*&,@&>@#$-%&>@&>@#++#=%@@%=#++=@>&&'&%##*>&**@@*-#%>&**@@*-=@,%*%@@=+#%>&**@@*-+=@@@%@&*-$#%,%%@&%#$=@@%%@&*-",
+"$*&&%%@,@#$=&>@%@&*-=%'@%%&,=-#@&@%%&>*$#%>@%%&>*-#@>@*@&,*$#%'@%%&'*$-=&@'&)&%$$=&,@@&,@#-=&@**%@*$$*&@%=%@%-#%&%=*@%=+$*&@**%@%$+$=@&&>*#++#%>@%&&%-;$=@&&&*#+",
+"-*,@%*%,%#-=@@%*%@%-#@,***&,=-#&'*=*&,=-=@,***&'=-#@,%=*&'=-#@>***&>=$+#*%%%%=#$-*'&&&@,%#-=@@**%&%--=@@**%@%-#%&%**@@=+$=@@**%@*-.+#%&,%=+++=%,&&>&*$;+#*>>@#$.",
+"$=,&%=%,@#-*@@**%@%#=%,@*%@,=-#%,@*%@,*$#%,@%%&,=-#%,@*%&>*$=%,@*%&,*++$#=%@=#++$*>,&@%,@#$#@@%*@&%#$#@@*%@&%##*@@*@&&=$+=@@%%@&%#++#*@,%-+.$=%,,&@%#+.+-%&>*-+.",
+"$=@>&&>&%--%,&@%&,@##%,&&,&&#$#%&>&>>@#$#%&&&&,@#$#%&&&,&&#$#%&>&&,%=+.+$=@&=+..-*&,>>&&*-+#%&&&,>@#$#%&&&>,@#-=@&&>>'*$+-*&>&>'@#+-*&>&=$;.-*@&@*=#+;;-*@>&*$..",
+"+#*&&'>%=$-%&'@%@'@#$=%&&,&*#+$=*,&,&%-+$=%&'>&*#+$=%,&,&%-+$=*'&'@%-+..+-**#+..$=@,>,,%=++$=@&>&'&#+$=@&,&'@#$-*&&,&,%$+-=%&'&,@#+#%&'&=;.;-*@>@*-+..;#%>,&=$+.",
+";+##==##$+$#==#===#$+$#*==##+.+$##==#-+.+$#====-+.+$##===-+;+$##==#-++...+-$+;..$=%**=##$..+$#=*===$.+$#====#$.+-=====#+.+-#=====$+#%@%*#+..-=%@*=++..;-%%%%-;..",
+"..++$$$+...$$$+++$$+.++$$$$+...++$$$+++...++$++++..+$$$$$$....++$$++..;...++.+..+-#--$$++.;.++$$$+++..;++$$$$+...$$$$$+....+$$$+++.+-##-$.;.+-##-$+....+-#--+;..",
+".........;.+$++.............;....+.+..;.........;.++-##-##-+....+.$+...++$+$$+.....++$+........+.+.;.........;.........;....+.....;.+++++...$##-++++.....+......",
+";...;+;...+###$+...;..........+$-$-$-$++;.+++.....+#%%%*%@*$;...+$#$-..+-====$+...+$#=$++...;.++$$+....++$+.....;++.+++.++$+++.+....+-$$$-++#%@=--$$++..+;+++$+.",
+"...+$-$+..-*%%#$;.+..++--$$+;.-=**%***=$.+$-#$..;.+=,&&&&,%#.+++$#*#$+.$=*%%%#+;.+$#*%=$+;...++#==#$;++-#=-+.;++-$--$-$++#=###-$$.++#===*=$$*&>%***=#+.$$-$+$-$+",
+".;+$=*#$;+-%&'*-++$$;+#=**#$++=%&&)&,&@-.+#**#+...+=&,&&@'@#+$$-=*&*-+;$=%@@&*$++#=*@>%=#$...+#%&>*$+$#=@@*-++$#*%**%*=$#%@@%%*%=$+#*@@%&%=$=@,&@&&@%#+$=%##**#+",
+"..+#%@*$..$*&,%#-#=#$#%&)&@=$+#=%%@%**#+.+#*%#+.;.#*&,,>&'@#-***%@'%#$$#*%&@,*#$-*@&,)@%*#;..$#@&&*$-**%&&%=#$#%)'&),>%#=@',','&@#-=%@&@>&*-#*@>@@>,%#$-*&%=@>%-",
+"..+#%&%#+.+-%&%=#*%##*&&>>@%=$#**%&&**#$.$#%%#+..+=@>&>>&'&=#@&,,&'@*-#*@@,@,@*##%>&&'&&%#+.+-%&'&*$#@>,,,'&%--=,&@%@'@##*@&&'&@*$#%&,,&,,@##*@,%%@>%#+-=>@%@>@#",
+"..+-*@@#+.+-*@>=*@@#=&&%@@@@%-=%%@'&@%*-++#%@#$...#@&&&&,&@##*@,@@@@*#*%@&'@,@%#=%'>>>@@@#;.+#%&&&*$=@&&&,@@*--*,@**%,%#$-=%&@%=$+-*@&&@>>%##@,&%*%&%-.+=@>>@%*$",
+";+-=*@@#+..$#*,%*%*-#,@%%@&@@#=*%%>>%%*-.+#%&=$.;+-%&>>>,>%#+$=@&@%@*#=%%@,@,@*##%>,>,@@@#+.+-%&&@*-#%@@@,@*#$$=,@==*,@#.+-=@%*#+.+#*@@@&>*-=%>,%**@%-;+#%,>@*-+",
+"$#%%%%@=-+.+$=@@%*#$=&@**@&@%#$-#*@%=#-+.-#@,=$...$*&'&,&&%-.+-*@&%==-$#*%@@&%=-#%>&,,%@%#++$#*&,&@##%&&&&@=-;-*,%==%,%#..+#%%*-+.+-*@@@&&=$#*%&%*%%%#+$#@,,@=-+",
+"-*,>%%@%#$..+#*,@=-+=@&%*%&&@#++-=@%=$++.+#@&%-+..$#@&@%@%*$..+=@&%#-++$=%@%&@=$-=@%&'%**-$-#*%@>,@#-*,>&@@*#+$=,&*=%'@#+..$=%%=$..-=@@@&&=$-#=%@%@@%--=*@>,&*#+",
+"#@,>&&&&%-...$#%@%=$$*&&%%@>%-..$=@@%-+..+$*@@=-+.+#%&&@*=-+..+$=%%=-+.$#%@*@&@#$-=*@>*#-$=*@&,@&@%-+#@&&@%%*--*&&@@@>@-;..$#*%*#+.-*@@&>@=+++#*@@&&*-=&,&%%&&*$",
+"=&@%%@&>%#+..+$=*@%#$-*%&@**=$..+#%@*#+;..$#%&%=$.+$*@,@=-+.;..+-#**#+.+-=%==%%#++$#@>=-++#*@@%**%*-+$*%**=%%#-=@%=**@*-...+$#%%=$;+=%@&&@=+.++#*%@*#$#%%*=#*%@#",
+"#**#=**%*-;...+$#%*#++$=%=#-+;..+-=*=$+....$#%%#+.++#*%*-+......+$##-+.+$##-$==#..+-*%#+..-=**=####$.+$##--==-+-##--#*#$;..;+-==#$.+-=*%%%#+..+$#==#++-##$+$-=*-",
+"$--$$-#--+......+-#$..+$--$+.....+-$-+.;..;.$-#-++..$$--$.;.;....+$$+...++++++$+..+$-#$+;..$$-$+++$+..+++.++$+.+$$+.+-$+.....+$-$+.;+--#=#$+....$$$+..+$+;..+$-+"};
index 932147746bf84d21ec2a7dfd35484000661a5c94..5ed00843253625e32d666b91630d522182908121 100644 (file)
-#define matrix2_width 42
-#define matrix2_height 432
-static char matrix2_bits[] = {
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xe0,0xff,0xff,0xff,0xb3,0xff,0xc0,0xff,
- 0xff,0xff,0x7f,0x7f,0xcc,0xff,0xff,0xff,0x79,0x3f,0x8c,0xff,0xff,0xff,0x7b,
- 0x7f,0x8c,0xff,0xff,0xff,0xbd,0x3f,0x8e,0xff,0xff,0xff,0x7b,0x3f,0x8c,0xff,
- 0xff,0xff,0x7b,0x7f,0xcc,0xff,0xff,0xff,0x75,0xff,0xcc,0xff,0xff,0xff,0xbb,
- 0x7f,0xc4,0xff,0xff,0xff,0xef,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xcf,0xff,0xe1,0xff,
- 0xff,0xff,0xef,0xff,0xe1,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xe7,
- 0xff,0xf9,0xff,0xff,0xff,0xef,0xff,0xf1,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,
- 0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xef,
- 0xff,0xf1,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xf7,0xff,0xf1,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,
- 0xff,0xff,0xb3,0x7f,0xc4,0xff,0xff,0xff,0xfb,0xff,0xc8,0xff,0xff,0xff,0x6b,
- 0x7f,0xdc,0xff,0xff,0xff,0xfb,0x7f,0xf8,0xff,0xff,0xff,0xfb,0xff,0xfc,0xff,
- 0xff,0xff,0xf7,0xff,0xf0,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xdf,
- 0xff,0xe2,0xff,0xff,0xff,0xb7,0xff,0xc2,0xff,0xff,0xff,0xaf,0xff,0xc0,0xff,
- 0xff,0xff,0xb7,0xff,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xf2,0xff,0xff,0xff,0xab,0xff,0xc0,0xff,0xff,0xff,0xf5,
- 0x7f,0xec,0xff,0xff,0xff,0xdb,0x7f,0xf4,0xff,0xff,0xff,0xf7,0xff,0xf8,0xff,
- 0xff,0xff,0xf7,0x7f,0xf0,0xff,0xff,0xff,0xeb,0xff,0xf8,0xff,0xff,0xff,0xfb,
- 0x3f,0xfc,0xff,0xff,0xff,0xfd,0x7f,0xf6,0xff,0xff,0xff,0x77,0x7f,0xcc,0xff,
- 0xff,0xff,0xdb,0xff,0xc2,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf9,0xff,0xff,0xff,0xef,
- 0xff,0xf9,0xff,0xff,0xff,0xd7,0xff,0xf0,0xff,0xff,0xff,0xdf,0xff,0xe1,0xff,
- 0xff,0xff,0xab,0xff,0xc0,0xff,0xff,0xff,0x6f,0xff,0xc0,0xff,0xff,0xff,0x55,
- 0xff,0x80,0xff,0xff,0xff,0xab,0x7f,0x80,0xff,0xff,0xff,0xeb,0x7f,0xd0,0xff,
- 0xff,0xff,0xf7,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xd7,
- 0xff,0xe0,0xff,0xff,0xff,0xaf,0xff,0xc1,0xff,0xff,0xff,0xdf,0xff,0xe6,0xff,
- 0xff,0xff,0xb7,0xff,0xc3,0xff,0xff,0xff,0xdb,0xff,0xe0,0xff,0xff,0xff,0xd7,
- 0x7f,0xe4,0xff,0xff,0xff,0xfb,0x7f,0xf8,0xff,0xff,0xff,0xfb,0x3f,0xfe,0xff,
- 0xff,0xff,0xfd,0x7f,0xf4,0xff,0xff,0xff,0xb7,0xff,0xcc,0xff,0xff,0xff,0xdf,
- 0xff,0xe3,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
- 0xff,0xf9,0xff,0xff,0xff,0xdf,0xff,0xe5,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,
- 0xff,0xff,0x5f,0xff,0xcf,0xff,0xff,0xff,0x6f,0xff,0xc0,0xff,0xff,0xff,0x33,
- 0xff,0x80,0xff,0xff,0xff,0x7d,0x7f,0xc4,0xff,0xff,0xff,0xb7,0x3f,0xcc,0xff,
- 0xff,0xff,0x7b,0x7f,0x8e,0xff,0xff,0xff,0xbd,0x7f,0xc8,0xff,0xff,0xff,0x77,
- 0xff,0xc6,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xd1,0xff,0xff,0xff,0x53,0x7f,0xc4,0xff,
- 0xff,0xff,0xfb,0xff,0x80,0xff,0xff,0xff,0xd7,0xff,0xfc,0xff,0xff,0xff,0xff,
- 0xff,0xf8,0xff,0xff,0xff,0xef,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xef,0xff,0xf3,0xff,0xff,0xff,0xdf,0xff,0xe7,0xff,0xff,0xff,0xff,
- 0xff,0xe7,0xff,0xff,0xff,0xbf,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xab,0xff,0xc8,0xff,0xff,0xff,0x7b,
- 0xff,0xca,0xff,0xff,0xff,0x6b,0x7f,0x84,0xff,0xff,0xff,0x57,0xff,0xc0,0xff,
- 0xff,0xff,0x57,0xff,0xc0,0xff,0xff,0xff,0x57,0xff,0x80,0xff,0xff,0xff,0xf7,
- 0xff,0xc8,0xff,0xff,0xff,0x5b,0xff,0x88,0xff,0xff,0xff,0x7b,0xff,0x9c,0xff,
- 0xff,0xff,0xf7,0xff,0xc8,0xff,0xff,0xff,0xbf,0xff,0xeb,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xdf,0xff,0xeb,0xff,0xff,0xff,0x77,
- 0xff,0xc8,0xff,0xff,0xff,0xfb,0xff,0x8c,0xff,0xff,0xff,0x77,0x7f,0xda,0xff,
- 0xff,0xff,0x7b,0xff,0x8c,0xff,0xff,0xff,0x6b,0xff,0x88,0xff,0xff,0xff,0xab,
- 0x7f,0xc0,0xff,0xff,0xff,0xaf,0xff,0xc0,0xff,0xff,0xff,0xf7,0xff,0xf9,0xff,
- 0xff,0xff,0xdf,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xdf,
- 0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xdf,0xff,0xe7,0xff,
- 0xff,0xff,0xdf,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xbf,
- 0xff,0xd7,0xff,0xff,0xff,0xfb,0xff,0xca,0xff,0xff,0xff,0x7f,0x7f,0xdd,0xff,
- 0xff,0xff,0xb5,0x7f,0x8a,0xff,0xff,0xff,0xbd,0x3c,0x04,0xfe,0xff,0xff,0xee,
- 0x3f,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xef,0xff,0xf8,0xff,
- 0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xdf,0xff,0xe5,0xff,0xff,0xff,0x7f,
- 0xff,0xcf,0xff,0xff,0xff,0xbf,0xff,0x8f,0xff,0xff,0xff,0x7f,0xff,0xcf,0xff,
- 0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xdf,0xff,0xf3,0xff,0xff,0xff,0xf7,
- 0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xdf,0xff,0xe1,0xff,0xff,0xff,0xbb,0x7f,0x86,0xff,0xff,0xff,0xde,
- 0x3f,0xc5,0xff,0xff,0xff,0xbf,0x3e,0x27,0xff,0xff,0xff,0xfd,0x3f,0xd7,0xfe,
- 0xff,0xff,0x7e,0x3d,0x4e,0xfe,0xff,0xff,0xbd,0x3f,0x8f,0xfe,0xff,0xff,0xff,
- 0x7d,0x1d,0xff,0xff,0xff,0x77,0xff,0x3d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x7f,0xf5,0xff,0xff,0xff,0xd6,0xbf,0xd0,0xff,0xff,0xff,0xef,
- 0xff,0xf9,0xff,0xff,0xff,0xef,0x5f,0xf1,0xff,0xff,0xff,0xed,0xbf,0xd1,0xff,
- 0xff,0xff,0xef,0xdf,0xf0,0xff,0xff,0xff,0xaf,0xff,0xf9,0xff,0xff,0xff,0xf7,
- 0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,
- 0xff,0xff,0xef,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf9,0xff,0xff,0xff,0xff,
- 0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,
- 0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0xef,
- 0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0xf3,0xff,
- 0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xaa,0xff,0xff,0xff,0xab,0xfe,0xa8,0xff,0xff,0xff,0xff,0xff,0x14,0xff,
- 0xff,0xff,0x6b,0xfd,0x08,0xff,0xff,0xff,0xab,0x7e,0x00,0xff,0xff,0xff,0x5d,
- 0x7f,0x00,0xff,0xff,0xff,0xb7,0x7e,0x82,0xff,0xff,0xff,0x6b,0xff,0x88,0xff,
- 0xff,0xff,0x7f,0xff,0x94,0xff,0xff,0xff,0xf7,0xff,0xd4,0xff,0xff,0xff,0xdb,
- 0xff,0xf4,0xff,0xff,0xff,0xef,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,
- 0xff,0xff,0xbf,0xff,0xc7,0xff,0xff,0xff,0x55,0x3f,0xc0,0xff,0xff,0xff,0xb7,
- 0x3f,0xc8,0xff,0xff,0xff,0xeb,0xff,0x90,0xff,0xff,0xff,0x6f,0xff,0xb1,0xff,
- 0xff,0xff,0xff,0xff,0xb9,0xff,0xff,0xff,0xef,0xff,0xf7,0xff,0xff,0xff,0xff,
- 0xff,0xeb,0xff,0xff,0xff,0xdf,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf6,0xff,
- 0xff,0xff,0xdf,0xff,0xe5,0xff,0xff,0xff,0xdb,0xff,0xe4,0xff,0xff,0xff,0xdb,
- 0xff,0xe0,0xff,0xff,0xff,0xaf,0x7f,0xc0,0xff,0xff,0xff,0xb2,0x1f,0xa0,0xff,
- 0xff,0xff,0x9b,0xff,0xc4,0xff,0xff,0xff,0xfb,0xff,0xe4,0xff,0xff,0xff,0x5f,
- 0xff,0xca,0xff,0xff,0xff,0xfb,0xff,0xdc,0xff,0xff,0xff,0x7f,0xff,0xcc,0xff,
- 0xff,0xff,0xfb,0xff,0xbe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xef,
- 0xff,0xf1,0xff,0xff,0xff,0x65,0x3f,0x80,0xff,0xff,0xff,0xb5,0x3f,0xc8,0xff,
- 0xff,0xff,0x6e,0x3f,0x89,0xff,0xff,0xff,0xab,0x3f,0x80,0xff,0xff,0xff,0xed,
- 0x3e,0xc0,0xff,0xff,0xff,0xef,0xff,0xd9,0xff,0xff,0xff,0xf7,0xff,0xf9,0xff,
- 0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xdf,
- 0xff,0xc7,0xff,0xff,0xff,0xbf,0xff,0xc7,0xff,0xff,0xff,0x7f,0xff,0xcf,0xff,
- 0xff,0xff,0xbf,0xff,0xc7,0xff,0xff,0xff,0xaf,0xff,0x83,0xff,0xff,0xff,0xbf,
- 0xff,0xc7,0xff,0xff,0xff,0x5f,0xff,0x87,0xff,0xff,0xff,0xff,0xfe,0x85,0xff,
- 0xff,0xff,0x5f,0xff,0xc2,0xff,0xff,0xff,0xeb,0xbf,0x88,0xff,0xff,0xff,0xff,
- 0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,0xff,0xff,0xeb,0x7f,0xe0,0xff,
- 0xff,0xff,0x4d,0x3f,0x80,0xff,0xff,0xff,0xea,0x3f,0xe1,0xff,0xff,0xff,0xbf,
- 0x3f,0xea,0xff,0xff,0xff,0xdd,0x3f,0xe7,0xff,0xff,0xff,0xfb,0x7f,0xe2,0xff,
- 0xff,0xff,0xdf,0xff,0xf4,0xff,0xff,0xff,0xf3,0xff,0xd8,0xff,0xff,0xff,0x7f,
- 0xff,0xdc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xde,0xff,
- 0xff,0xff,0x7d,0x3f,0x9b,0xff,0xff,0xff,0xfe,0x3f,0xce,0xff,0xff,0xff,0x7d,
- 0x3f,0x9f,0xff,0xff,0xff,0xff,0x3f,0xae,0xff,0xff,0xff,0xba,0x3e,0x9f,0xff,
- 0xff,0xff,0xff,0x3f,0xca,0xff,0xff,0xff,0x5a,0x7f,0x8a,0xff,0xff,0xff,0xff,
- 0x3f,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xed,0xff,
- 0xff,0xff,0x52,0x3f,0x00,0xff,0xff,0xff,0xbf,0x7f,0xc0,0xff,0xff,0xff,0xd7,
- 0xff,0xe2,0xff,0xff,0xff,0xdf,0xff,0xe7,0xff,0xff,0xff,0xdf,0xff,0xe7,0xff,
- 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xdf,0xff,0xe7,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xff,
- 0xff,0xff,0x6f,0xff,0x99,0xff,0xff,0xff,0xb7,0xff,0x89,0xff,0xff,0xff,0xd7,
- 0x7e,0x01,0xff,0xff,0xff,0xaf,0xfe,0x88,0xff,0xff,0xff,0x77,0xff,0x29,0xff,
- 0xff,0xff,0xef,0xff,0xc9,0xff,0xff,0xff,0xff,0xfe,0x91,0xff,0xff,0xff,0x6f,
- 0xff,0x99,0xff,0xff,0xff,0xaf,0xff,0xc9,0xff,0xff,0xff,0x7f,0xff,0x81,0xff,
- 0xff,0xff,0xef,0xff,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0x3f,0xfe,0xff,0xff,0xff,0xda,0x7f,0x85,0xff,0xff,0xff,0x6f,
- 0x7e,0x01,0xff,0xff,0xff,0xb7,0xff,0x48,0xff,0xff,0xff,0xff,0xfe,0xba,0xff,
- 0xff,0xff,0xf5,0x7f,0x58,0xff,0xff,0xff,0xfb,0x7e,0x3a,0xff,0xff,0xff,0xef,
- 0x3f,0x3b,0xff,0xff,0xff,0xff,0xfe,0x39,0xff,0xff,0xff,0xef,0xff,0x93,0xff,
- 0xff,0xff,0xbf,0xfe,0x83,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf7,
- 0xff,0xba,0xff,0xff,0xff,0xef,0xfe,0x19,0xff,0xff,0xff,0x7f,0xff,0xc9,0xff,
- 0xff,0xff,0xd7,0xff,0x91,0xff,0xff,0xff,0xaf,0xff,0xe3,0xff,0xff,0xff,0xdf,
- 0xff,0xe1,0xff,0xff,0xff,0xaf,0xff,0xc1,0xff,0xff,0xff,0x75,0x7f,0xc0,0xff,
- 0xff,0xff,0xff,0x7f,0x9c,0xff,0xff,0xff,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xfd,0x1f,0xfe,0xff,0xff,0xff,0xfb,0x3f,0xfe,0xff,
- 0xff,0xff,0xfd,0x7f,0xfc,0xff,0xff,0xff,0xfb,0x7f,0x3c,0xff,0xff,0xff,0x77,
- 0xff,0xac,0xff,0xff,0xff,0xfb,0xff,0xda,0xff,0xff,0xff,0xef,0xff,0xf9,0xff,
- 0xff,0xff,0xf7,0xff,0xf1,0xff,0xff,0xff,0xdf,0xff,0xf7,0xff,0xff,0xff,0xff,
- 0xff,0xd7,0xff,0xff,0xff,0x7f,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
+/* Created with The GIMP */
+#define matrix2_width 320
+#define matrix2_height 377
+static unsigned char matrix2_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xb7, 0xfa, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xd5, 0xff, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xaf,
+   0xfe, 0xff, 0xf7, 0xff, 0x2f, 0xed, 0x7f, 0xd9, 0xff, 0x6f, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xa2, 0xff, 0xca, 0xfe, 0xff, 0xfa, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea,
+   0xff, 0xff, 0xff, 0xdf, 0xfe, 0xbf, 0xae, 0xff, 0xab, 0xe8, 0xff, 0xb1,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xa2, 0xff, 0x83,
+   0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0x0b, 0xfa, 0xaf, 0x54, 0xff,
+   0x07, 0xf4, 0x2f, 0x40, 0xff, 0x05, 0xfd, 0xff, 0xf7, 0xff, 0x97, 0xfa,
+   0xbf, 0xd1, 0xff, 0x45, 0xfd, 0xbf, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf1, 0xff, 0xff, 0xff, 0x17,
+   0xfd, 0x5f, 0x84, 0xfe, 0x96, 0xd0, 0x7f, 0x81, 0xfe, 0x17, 0xff, 0x7f,
+   0xed, 0xff, 0x37, 0xfe, 0x7f, 0x52, 0xff, 0x8f, 0xfe, 0xff, 0xa1, 0xff,
+   0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
+   0xff, 0xff, 0xff, 0x05, 0xfa, 0x37, 0x55, 0xff, 0x03, 0xe4, 0x17, 0x50,
+   0xff, 0x42, 0xfa, 0xdf, 0xda, 0xff, 0x8f, 0xfa, 0xbf, 0xf0, 0xff, 0x05,
+   0xfd, 0x2f, 0x50, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0xf4, 0x2f, 0x00, 0xfd,
+   0x57, 0xa8, 0x4f, 0x00, 0xfd, 0x8a, 0xfc, 0x7f, 0x80, 0xff, 0x17, 0xfc,
+   0x7f, 0xc2, 0xff, 0x2f, 0xfa, 0x5f, 0x51, 0xfe, 0x0f, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe2, 0xff, 0xff, 0xff, 0x05,
+   0xfd, 0x17, 0x4a, 0x7f, 0x05, 0xe0, 0x0b, 0x40, 0xff, 0x02, 0xf5, 0x2f,
+   0xa1, 0xff, 0x05, 0xfb, 0x5f, 0xf8, 0xff, 0x0b, 0xfe, 0x4b, 0x80, 0xfe,
+   0x17, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xd8,
+   0xff, 0xff, 0xff, 0x17, 0xf4, 0x5f, 0x00, 0xfd, 0x00, 0xa2, 0x0f, 0x0d,
+   0xed, 0x2a, 0xfc, 0x2f, 0x4a, 0xff, 0x27, 0xfe, 0xbf, 0xd0, 0xff, 0x5f,
+   0xf4, 0x4f, 0x80, 0xfc, 0x17, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x5f, 0xf2, 0xff, 0xff, 0xff, 0x05, 0xfa, 0x2b, 0x4a, 0xbf,
+   0x02, 0xa0, 0x95, 0x50, 0xff, 0x82, 0xf4, 0x2f, 0xe4, 0xff, 0x45, 0xfb,
+   0x6f, 0xf4, 0xff, 0x2b, 0xfe, 0x2f, 0x08, 0xff, 0x0f, 0xf6, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0xec, 0xff, 0xff, 0xff, 0x17,
+   0xf4, 0x57, 0x84, 0xfe, 0x25, 0xe0, 0x0f, 0x8a, 0xfe, 0x15, 0xe8, 0x5f,
+   0x48, 0xff, 0x2f, 0xff, 0x5f, 0xd4, 0xff, 0x1f, 0xf4, 0x4f, 0x00, 0xfc,
+   0x15, 0xfc, 0xff, 0xff, 0xff, 0x6d, 0xfb, 0xff, 0xff, 0xff, 0x6f, 0xf8,
+   0xff, 0xff, 0xff, 0x05, 0xfd, 0x8f, 0x52, 0x7f, 0x00, 0xa4, 0x0b, 0x50,
+   0xff, 0x42, 0xf5, 0x2b, 0xaa, 0xff, 0xe5, 0xfe, 0x5f, 0xf4, 0xff, 0x37,
+   0xfa, 0xbb, 0xd0, 0xbf, 0x0a, 0xd3, 0xff, 0xff, 0x7f, 0x5b, 0xed, 0xff,
+   0xff, 0xff, 0x17, 0xff, 0xff, 0xff, 0xff, 0x17, 0xf4, 0x7f, 0xce, 0xff,
+   0x05, 0xe0, 0x5b, 0x42, 0xfd, 0x0f, 0xd0, 0x5f, 0x6a, 0xfd, 0xd7, 0xff,
+   0x5f, 0xf4, 0xff, 0x2f, 0xf6, 0x57, 0x41, 0xfd, 0x15, 0xea, 0xff, 0xff,
+   0xff, 0x55, 0xd5, 0xff, 0xff, 0xff, 0x0f, 0xfa, 0xff, 0xff, 0xff, 0x05,
+   0xfd, 0xdf, 0x75, 0x7f, 0xa1, 0xd4, 0x2f, 0x01, 0xfe, 0x02, 0xed, 0x17,
+   0x80, 0xfe, 0xff, 0xff, 0x3f, 0xf4, 0xff, 0x17, 0xfc, 0x1f, 0x84, 0x5e,
+   0x00, 0xa0, 0xff, 0xff, 0x5f, 0x00, 0xa0, 0xff, 0xff, 0xff, 0x8a, 0xfe,
+   0xff, 0xff, 0xff, 0x1f, 0xf5, 0xff, 0xff, 0x7f, 0x07, 0xd4, 0x6f, 0x40,
+   0xfa, 0x17, 0xd8, 0x5f, 0x30, 0xfd, 0xff, 0xff, 0x6f, 0xec, 0xff, 0x3f,
+   0xf4, 0x7f, 0x88, 0xfe, 0x00, 0xc0, 0xff, 0xff, 0xbf, 0x00, 0xe0, 0xff,
+   0xff, 0xff, 0x0b, 0xfa, 0xff, 0xff, 0xff, 0x17, 0xfd, 0xff, 0xff, 0xff,
+   0xa0, 0xe8, 0x97, 0x08, 0xfe, 0x02, 0xf4, 0x2b, 0x40, 0xfe, 0xef, 0xff,
+   0x5f, 0xf8, 0xff, 0x17, 0xfe, 0x17, 0x42, 0x5f, 0x00, 0xe0, 0xff, 0xff,
+   0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x83, 0xfd, 0xff, 0xff, 0xff, 0x17,
+   0xfe, 0xff, 0xff, 0xbf, 0x00, 0xa0, 0xaf, 0x22, 0xfa, 0x15, 0xa0, 0x0f,
+   0x01, 0xfa, 0xff, 0xff, 0x5f, 0xd0, 0xff, 0x3f, 0xf4, 0xff, 0xce, 0xfe,
+   0x9b, 0xda, 0xff, 0xfb, 0xff, 0xdf, 0xdd, 0xff, 0xfd, 0xff, 0x26, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xfb, 0xff, 0xff, 0xdf, 0x00, 0xe0, 0x0b, 0x0a,
+   0xfa, 0x82, 0xe0, 0x2b, 0x40, 0xfe, 0xff, 0xff, 0x3f, 0xec, 0xff, 0x07,
+   0xfa, 0x0f, 0xaa, 0x7f, 0x05, 0xf6, 0xff, 0xef, 0x7f, 0xa9, 0xea, 0xff,
+   0xfb, 0xff, 0x91, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0x7f,
+   0x45, 0xda, 0x1f, 0x40, 0xfc, 0x1f, 0xc5, 0x0f, 0x85, 0xfc, 0xff, 0xff,
+   0xf7, 0xe8, 0xff, 0x3f, 0xfa, 0xff, 0xbf, 0xfe, 0x1f, 0xea, 0x7f, 0xd1,
+   0xff, 0xff, 0xff, 0xbf, 0xd2, 0x7f, 0x43, 0xff, 0xff, 0xff, 0xff, 0x6b,
+   0xff, 0xff, 0xff, 0xff, 0x00, 0xf4, 0x0b, 0x04, 0xff, 0x15, 0xb1, 0x0b,
+   0x88, 0xfe, 0xff, 0xff, 0x5f, 0xe8, 0xff, 0x0b, 0xfe, 0xff, 0xfd, 0xff,
+   0x05, 0xfd, 0xff, 0xd2, 0xff, 0xb7, 0xff, 0x7f, 0xf1, 0xdf, 0xb0, 0xff,
+   0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xff, 0xbf, 0x85, 0xe8, 0x17, 0x00,
+   0xfa, 0x2f, 0xe2, 0x17, 0x41, 0xfa, 0xff, 0xff, 0x7f, 0xa1, 0xff, 0xab,
+   0xf4, 0xff, 0xff, 0xff, 0x1f, 0xfb, 0xdf, 0xa2, 0xff, 0xff, 0xfb, 0xff,
+   0xd2, 0xff, 0xd2, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff,
+   0x10, 0xfe, 0x57, 0xc8, 0xfe, 0x17, 0xa0, 0x4b, 0x00, 0xfe, 0xff, 0xff,
+   0x5f, 0xf4, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0x17, 0xfe, 0x7f, 0xd0,
+   0xff, 0xff, 0xff, 0x5f, 0xf0, 0x3f, 0x71, 0xff, 0xff, 0xff, 0xff, 0x1f,
+   0xfa, 0xff, 0xff, 0xff, 0x03, 0xe8, 0x4f, 0x81, 0xfe, 0x9f, 0xe4, 0x0f,
+   0x00, 0xfa, 0xff, 0xff, 0x7f, 0x41, 0xff, 0x2d, 0xfc, 0xff, 0xff, 0xff,
+   0x1f, 0xfd, 0x7f, 0x51, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x7f, 0xe0, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x5f, 0x24, 0xfd, 0xbf, 0xf0,
+   0xff, 0x6f, 0xfb, 0xff, 0x7d, 0xfd, 0xff, 0xff, 0xff, 0xd2, 0x7f, 0xc3,
+   0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0x5f, 0xe4, 0xff, 0xff, 0xff, 0xbf,
+   0xfb, 0xbf, 0xf2, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff,
+   0x01, 0xf4, 0xff, 0xd1, 0xff, 0xff, 0xdb, 0x5f, 0xab, 0xff, 0xff, 0xff,
+   0xff, 0x42, 0xff, 0x46, 0xfd, 0xff, 0xff, 0xff, 0xef, 0xfe, 0x7f, 0xd4,
+   0xff, 0xff, 0xff, 0xff, 0xee, 0xbf, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xa6, 0xfe, 0xbf, 0xf2, 0xff, 0x5f, 0xff, 0xfb,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xb1, 0xff, 0xc5, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0xfd, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xfa, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x5f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xb5, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xbf, 0xfb, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xea, 0xff, 0xf7, 0xff, 0xff, 0xee, 0xff, 0xbb, 0xed, 0xff, 0xf7,
+   0xff, 0xd6, 0xfb, 0xff, 0xab, 0x7f, 0x55, 0xfd, 0xbf, 0xef, 0xff, 0xbf,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0xdf, 0xbb, 0x7f, 0x57, 0xfd, 0xdf, 0x55, 0xff,
+   0xb7, 0xfd, 0xff, 0x56, 0xff, 0xad, 0xf6, 0xff, 0xb7, 0xfe, 0xab, 0xea,
+   0xfb, 0x5a, 0xff, 0xd7, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0x7f, 0xa0, 0xff, 0x15,
+   0xff, 0x3b, 0xd0, 0x7d, 0x0b, 0xea, 0x7f, 0xc9, 0x7f, 0x03, 0xd8, 0x5f,
+   0x85, 0x5e, 0x20, 0xf4, 0xaf, 0xe0, 0xfd, 0x0d, 0xde, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xfe,
+   0x5f, 0x45, 0xbd, 0x45, 0xfa, 0xef, 0x02, 0xff, 0x4a, 0xd8, 0xff, 0x53,
+   0x7f, 0x29, 0xf1, 0x7f, 0x15, 0x7d, 0x85, 0xd0, 0xbf, 0x0a, 0xff, 0x55,
+   0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xab, 0xfa, 0x57, 0x40, 0x7f, 0x00, 0xff, 0x17, 0x40, 0xfa,
+   0x00, 0xe2, 0x5f, 0xc0, 0x7e, 0x01, 0xd4, 0xbf, 0x00, 0x5b, 0x00, 0xf0,
+   0x07, 0x40, 0x7a, 0x03, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xd7, 0xff, 0xff, 0x02, 0xf4, 0x17, 0x00, 0xfa, 0x01,
+   0xf4, 0x0f, 0x00, 0xfe, 0x02, 0xa4, 0x7f, 0x81, 0x7f, 0x01, 0xf0, 0x6f,
+   0x20, 0x7e, 0x00, 0xd0, 0x2f, 0x00, 0xfe, 0x02, 0xd0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x5d, 0xfd, 0xff, 0xff, 0xbf, 0xfa, 0x7f, 0x01, 0xf4,
+   0x4f, 0x88, 0xbe, 0x08, 0xff, 0x2b, 0x40, 0xba, 0x00, 0xe0, 0xbf, 0x40,
+   0x5b, 0x01, 0xea, 0x9f, 0x00, 0x5f, 0x91, 0xd0, 0x0b, 0x40, 0xfa, 0x02,
+   0xf0, 0xff, 0xf6, 0xff, 0x5f, 0xff, 0xff, 0xb7, 0xff, 0x77, 0xff, 0xd5,
+   0xff, 0x7f, 0x01, 0xea, 0x8d, 0x12, 0xfc, 0x15, 0xfa, 0x8f, 0x16, 0xfc,
+   0x5a, 0xa1, 0x77, 0x44, 0x7f, 0x62, 0xd9, 0x3b, 0x68, 0x7d, 0x37, 0xf1,
+   0x17, 0x0d, 0xfc, 0x62, 0xa1, 0xff, 0xee, 0xff, 0xff, 0xfa, 0xff, 0x05,
+   0xfa, 0xee, 0xea, 0x07, 0xd4, 0x7f, 0x65, 0xe0, 0x07, 0x0a, 0xfa, 0x0b,
+   0xff, 0x0b, 0x05, 0xfe, 0x54, 0xe0, 0x5f, 0x40, 0x7f, 0x11, 0xf5, 0x0f,
+   0x51, 0xff, 0x2a, 0xe4, 0x8f, 0x10, 0x5b, 0x90, 0xd0, 0xdf, 0xf5, 0xff,
+   0x5f, 0xf7, 0x5f, 0x15, 0x7e, 0xab, 0xb6, 0x03, 0x7b, 0x7f, 0x11, 0xf1,
+   0x0f, 0x2d, 0x7e, 0x17, 0xfa, 0x7f, 0x2d, 0xf8, 0xd5, 0xc4, 0x5f, 0x44,
+   0xdf, 0x02, 0xd0, 0x2f, 0x42, 0xff, 0x6f, 0xd4, 0x0b, 0x25, 0xfe, 0xa2,
+   0xd1, 0x7f, 0xa0, 0xff, 0x3b, 0xfc, 0x5f, 0x40, 0xfd, 0x00, 0xe0, 0x3f,
+   0xc0, 0xff, 0x62, 0xd0, 0x85, 0x2a, 0xfc, 0x0d, 0xfd, 0xef, 0x05, 0xff,
+   0x2f, 0xa0, 0x57, 0xc2, 0x7e, 0x00, 0xea, 0x15, 0xa8, 0xfd, 0x5f, 0xe8,
+   0x17, 0x0a, 0xba, 0xa8, 0xa0, 0xbf, 0xf0, 0xff, 0x0f, 0xe8, 0xbb, 0xa0,
+   0xbe, 0x4a, 0xd2, 0x2b, 0xb0, 0xba, 0xaa, 0xf0, 0x0f, 0x0d, 0xfa, 0x1f,
+   0xfb, 0x5f, 0x1b, 0xfa, 0xad, 0xe4, 0x1f, 0x4a, 0xff, 0x02, 0xd0, 0x17,
+   0x01, 0xff, 0x5f, 0xf4, 0x4f, 0x20, 0xbe, 0x41, 0xe1, 0x7f, 0xa1, 0xff,
+   0x5f, 0xf8, 0x2b, 0x40, 0xff, 0x40, 0xa0, 0x5f, 0x40, 0xff, 0x2a, 0xd1,
+   0x0b, 0x2a, 0xfa, 0x0b, 0xfe, 0xff, 0x41, 0xfe, 0x17, 0xa8, 0x4b, 0x80,
+   0xbd, 0x69, 0xf0, 0x0b, 0x00, 0xfd, 0x2d, 0xba, 0x2b, 0x44, 0x7d, 0x12,
+   0xd0, 0xbf, 0xf0, 0xff, 0x5f, 0xf6, 0x07, 0xe9, 0x5b, 0x00, 0xe0, 0xbf,
+   0x05, 0xfa, 0x4b, 0xf0, 0x8b, 0x2e, 0xfe, 0x1f, 0xfa, 0x7f, 0x45, 0xfd,
+   0x0f, 0xe0, 0x0f, 0x0a, 0x7f, 0x43, 0xc1, 0x2b, 0x08, 0xfa, 0x5f, 0xf6,
+   0x4f, 0x00, 0xfa, 0xa0, 0xa0, 0xff, 0xd2, 0xff, 0x5f, 0xf4, 0x15, 0xa8,
+   0xff, 0x05, 0xa2, 0x7f, 0x05, 0xfc, 0x17, 0xe2, 0x07, 0x09, 0xfc, 0x0b,
+   0xfd, 0xdf, 0xa0, 0xff, 0x55, 0xa1, 0x8b, 0x40, 0xfe, 0x5d, 0xb0, 0x07,
+   0x25, 0xfd, 0x27, 0xfa, 0x0b, 0x0a, 0xfd, 0x03, 0xe0, 0xbf, 0xef, 0xff,
+   0xbf, 0xff, 0x05, 0xf5, 0x5f, 0x90, 0xc8, 0xbf, 0x02, 0xfd, 0x86, 0xfa,
+   0x8f, 0x2a, 0xfa, 0x1f, 0xfb, 0x7f, 0xa1, 0xfe, 0x5f, 0xc2, 0x0b, 0x44,
+   0xfa, 0xdb, 0xe1, 0x2f, 0x09, 0xfd, 0x0f, 0xfa, 0x0f, 0x10, 0x7a, 0x05,
+   0xa0, 0xff, 0xfd, 0xff, 0xff, 0xfa, 0x05, 0xa8, 0xbf, 0x02, 0xc0, 0xff,
+   0x0a, 0xf9, 0x0f, 0xf6, 0x05, 0x0d, 0xfe, 0x13, 0xfe, 0x2f, 0xc0, 0xbf,
+   0xb5, 0xa0, 0x07, 0x00, 0xbd, 0xbe, 0xa0, 0x13, 0x12, 0xfe, 0x57, 0xfe,
+   0x85, 0x0a, 0xfe, 0x03, 0xd1, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0x03, 0xd5,
+   0x7f, 0xa8, 0xea, 0xb7, 0x02, 0xfe, 0x85, 0xfe, 0x0f, 0x2a, 0xfa, 0x17,
+   0xf4, 0x6f, 0x54, 0xff, 0xa9, 0xc2, 0x2f, 0x00, 0xfd, 0x68, 0xd1, 0x17,
+   0x0a, 0xfa, 0x0f, 0xf4, 0x0f, 0x29, 0xfa, 0x5d, 0xd0, 0xff, 0xeb, 0xff,
+   0xf7, 0xff, 0x3f, 0xa0, 0xfe, 0x00, 0x80, 0x5f, 0x60, 0xfd, 0x8f, 0xfa,
+   0x8b, 0x2a, 0xfc, 0x0d, 0xfb, 0x1b, 0xd0, 0xbd, 0x5a, 0xe0, 0x05, 0x41,
+   0x5e, 0x55, 0xe0, 0x27, 0x15, 0xfd, 0xa5, 0xfe, 0x0b, 0x02, 0x7c, 0xa3,
+   0xf0, 0x7f, 0xff, 0xff, 0x5f, 0xfd, 0x57, 0x40, 0x5f, 0x01, 0xe8, 0x2b,
+   0xc8, 0xff, 0x8b, 0xff, 0x0f, 0x0a, 0xfd, 0x15, 0xd4, 0x5f, 0x52, 0xbf,
+   0xa2, 0x82, 0x2f, 0x04, 0xbc, 0x54, 0xa1, 0x0f, 0x04, 0xfd, 0x0f, 0xfa,
+   0x8f, 0x2c, 0xfa, 0x0f, 0xa1, 0xff, 0xd2, 0xff, 0x7f, 0xf5, 0xbf, 0x80,
+   0xfa, 0x22, 0xa1, 0xaf, 0xa0, 0xfe, 0x1b, 0xfd, 0x2b, 0x40, 0xbe, 0x02,
+   0xe9, 0x05, 0x80, 0x7e, 0x10, 0xe8, 0xab, 0x80, 0x7a, 0x00, 0xd0, 0x37,
+   0x10, 0xfd, 0x8b, 0xfd, 0x15, 0x00, 0x7e, 0x21, 0xf0, 0x3f, 0xf1, 0xff,
+   0x17, 0xfc, 0xdf, 0x16, 0xbe, 0x6e, 0xef, 0x03, 0xfa, 0xff, 0x47, 0xff,
+   0x5f, 0x42, 0xfd, 0x12, 0xc8, 0x0f, 0x12, 0xfa, 0x80, 0xc0, 0x7f, 0x09,
+   0x7e, 0x51, 0xf0, 0x2f, 0x00, 0xfd, 0x0b, 0xff, 0x2f, 0x84, 0xfc, 0x05,
+   0xd2, 0x7f, 0xa0, 0xff, 0x5f, 0xf4, 0xff, 0x05, 0xfc, 0xda, 0xfa, 0x07,
+   0xd5, 0xff, 0x4f, 0xff, 0xaf, 0x48, 0x7f, 0x01, 0xf0, 0x05, 0x40, 0x5d,
+   0x05, 0xfe, 0xaf, 0x40, 0xfa, 0x02, 0xed, 0xbf, 0x40, 0xff, 0xa7, 0xfe,
+   0x57, 0xa1, 0xbf, 0x42, 0xfa, 0x7f, 0xf1, 0xff, 0x0b, 0xfa, 0xff, 0xf7,
+   0xff, 0x7f, 0xdf, 0x7f, 0xff, 0xff, 0x8b, 0xfd, 0x7f, 0x41, 0xfd, 0x04,
+   0xc2, 0x2f, 0x00, 0xfe, 0x25, 0xe8, 0x7f, 0x45, 0xde, 0x05, 0xda, 0x7f,
+   0x25, 0xfd, 0x0f, 0xfb, 0x5f, 0x40, 0x7d, 0x09, 0xed, 0xff, 0xa2, 0xff,
+   0x1f, 0xea, 0x7f, 0x5f, 0xfd, 0xff, 0xff, 0xcb, 0xfd, 0xff, 0x2f, 0xff,
+   0x5f, 0xd4, 0x7f, 0x51, 0xe8, 0x8b, 0x52, 0x7d, 0x11, 0xfd, 0x7f, 0x91,
+   0xfe, 0x92, 0xfe, 0xaf, 0xd0, 0xff, 0xd7, 0xff, 0x7f, 0xd5, 0xff, 0xa5,
+   0xfe, 0x6f, 0xf8, 0xff, 0x8b, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0x97, 0xff, 0xff, 0xf7, 0xff, 0xd7, 0xdf, 0xbf, 0x56, 0xff,
+   0x6f, 0xf5, 0xff, 0xad, 0xfd, 0xb7, 0xfa, 0xff, 0x57, 0xff, 0x7f, 0xff,
+   0xdf, 0xaa, 0xff, 0xad, 0xfd, 0xff, 0xeb, 0xff, 0x9b, 0xff, 0xff, 0xfb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xff, 0x5e,
+   0xf5, 0xf7, 0xfe, 0xff, 0xbb, 0xff, 0x7f, 0xf7, 0xfe, 0xdf, 0xff, 0xff,
+   0xfe, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0x97, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff,
+   0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xeb, 0xfe, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xff, 0xbf,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfe, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff,
+   0xff, 0xfe, 0xff, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xdb, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xf6, 0xff, 0xab, 0xff, 0xaf, 0xfa, 0xff, 0xab, 0xf5, 0xaf, 0xfa,
+   0xff, 0xaa, 0xfb, 0xab, 0xaa, 0xff, 0xd7, 0xfb, 0xbb, 0x6d, 0xbf, 0x55,
+   0xef, 0x5f, 0x55, 0xbf, 0x7e, 0xdf, 0x57, 0xf5, 0xff, 0xfb, 0xaa, 0xbb,
+   0x7d, 0xfd, 0x5b, 0xff, 0xdf, 0xad, 0x7f, 0xb7, 0xfe, 0x6d, 0xab, 0xff,
+   0xbf, 0xde, 0xb6, 0xd6, 0xdf, 0xbb, 0xea, 0xbf, 0x6d, 0xfd, 0xbf, 0xd6,
+   0xb7, 0xdd, 0xfa, 0xb7, 0xfa, 0xff, 0xdd, 0xfa, 0x6a, 0xf5, 0xdf, 0xee,
+   0x6f, 0xeb, 0xff, 0xb7, 0xab, 0xff, 0xf7, 0xfe, 0x7f, 0xf5, 0xff, 0x82,
+   0xfd, 0x87, 0x60, 0x7f, 0x43, 0xd0, 0x45, 0x68, 0x7f, 0x00, 0xe9, 0x43,
+   0x00, 0x7d, 0x05, 0xe8, 0x0b, 0x0a, 0x7d, 0x09, 0xe4, 0x5f, 0x00, 0xbd,
+   0xa0, 0xa8, 0x05, 0xf8, 0xbf, 0xb4, 0xc2, 0x47, 0x17, 0x7d, 0x0b, 0xfd,
+   0x5f, 0x40, 0xff, 0x15, 0xfb, 0x17, 0x44, 0xfd, 0x8e, 0xd2, 0x0b, 0xc1,
+   0x5e, 0x25, 0xd0, 0x0f, 0x29, 0xf9, 0x95, 0x8a, 0xab, 0x2a, 0x79, 0x91,
+   0xc8, 0xbf, 0x24, 0xbd, 0x4a, 0xe1, 0x57, 0xc1, 0xbf, 0xe8, 0x8a, 0x4d,
+   0x26, 0x7a, 0x4b, 0xf4, 0x57, 0xa0, 0x7f, 0x02, 0xfd, 0x45, 0x92, 0xbf,
+   0x01, 0xa4, 0x21, 0x54, 0x3f, 0x80, 0xb2, 0x45, 0x00, 0xbd, 0x02, 0xd0,
+   0x05, 0x04, 0xfa, 0x02, 0xf0, 0x2f, 0x02, 0x3a, 0x20, 0xa4, 0x05, 0xf4,
+   0x5f, 0x52, 0xa1, 0x83, 0x15, 0xfd, 0x02, 0xf5, 0x9f, 0xa0, 0xfe, 0x04,
+   0xf4, 0x07, 0x00, 0x7a, 0x11, 0xa0, 0x05, 0x00, 0x7a, 0x00, 0xe0, 0x05,
+   0x00, 0x78, 0x22, 0x90, 0x0b, 0x08, 0xf8, 0x10, 0xa2, 0x7f, 0x00, 0xbc,
+   0xa0, 0xc0, 0x17, 0xd0, 0x5f, 0x60, 0x81, 0x07, 0x05, 0x58, 0x08, 0xd0,
+   0x0b, 0x8a, 0xfb, 0x00, 0xfd, 0x05, 0x00, 0x5f, 0x40, 0xc0, 0x01, 0x00,
+   0x5d, 0x02, 0xa0, 0x03, 0x01, 0x5e, 0x80, 0xc0, 0x05, 0x0a, 0xba, 0x02,
+   0xe8, 0x9f, 0x48, 0x5d, 0x80, 0xf0, 0x05, 0xea, 0x3f, 0x88, 0xa0, 0x01,
+   0x12, 0x7d, 0x21, 0xd0, 0x57, 0x80, 0xfe, 0x17, 0xe8, 0x2b, 0x15, 0x5a,
+   0xa8, 0x89, 0x47, 0x15, 0x7c, 0x52, 0xe1, 0x2f, 0x5a, 0x78, 0x54, 0xc5,
+   0x0d, 0x29, 0xfa, 0x5f, 0xea, 0xbf, 0x03, 0xfb, 0x10, 0xc8, 0x3f, 0xea,
+   0xbf, 0xa0, 0xa0, 0x0f, 0x12, 0x5d, 0x44, 0xc1, 0x0b, 0x05, 0x7b, 0x01,
+   0xfa, 0x07, 0x12, 0x3e, 0x54, 0xe1, 0x85, 0x16, 0xbd, 0xa0, 0xd0, 0x13,
+   0x05, 0x5c, 0xb0, 0x90, 0x8b, 0x04, 0xfe, 0x02, 0xfd, 0xff, 0xa2, 0x5e,
+   0x08, 0xf4, 0x0b, 0xfd, 0x5f, 0x40, 0xc0, 0x01, 0x08, 0x3a, 0xb8, 0xd0,
+   0x0f, 0x20, 0xfe, 0x07, 0xe8, 0x2d, 0x04, 0x7a, 0xe8, 0x85, 0x05, 0x15,
+   0xf8, 0x12, 0xa1, 0x07, 0xaa, 0x5c, 0xa4, 0xc3, 0x0b, 0x2a, 0xfa, 0x1f,
+   0xda, 0xff, 0x87, 0xfe, 0x00, 0xec, 0x3f, 0xf4, 0xff, 0x80, 0x82, 0x07,
+   0x12, 0x6e, 0xb0, 0xc1, 0x83, 0x80, 0x7e, 0x51, 0xf4, 0x07, 0x01, 0x2d,
+   0x58, 0xf7, 0x43, 0x17, 0x5d, 0x20, 0xfa, 0x17, 0xc2, 0x5e, 0x78, 0xdd,
+   0x87, 0x00, 0xfc, 0x0b, 0xff, 0xbf, 0x22, 0x5f, 0x10, 0xf5, 0x17, 0xfb,
+   0x1f, 0x20, 0xe0, 0x45, 0x08, 0x1d, 0x74, 0x91, 0x0f, 0x00, 0xfa, 0x83,
+   0xd4, 0x2d, 0x08, 0x6d, 0xf0, 0xef, 0x47, 0x36, 0xf8, 0x42, 0xe8, 0x2d,
+   0xa4, 0x5d, 0x68, 0xb1, 0x0f, 0x04, 0xfc, 0x1b, 0xfa, 0xff, 0x47, 0xfd,
+   0x00, 0xfd, 0x3f, 0xec, 0xff, 0x42, 0x80, 0x05, 0x10, 0x7c, 0xe8, 0xc2,
+   0x0b, 0x44, 0x7d, 0x25, 0xf0, 0x07, 0x02, 0x1a, 0xfc, 0xfd, 0x82, 0x4f,
+   0x5e, 0x00, 0xf6, 0x07, 0xa0, 0x1f, 0xb4, 0xc4, 0x05, 0x00, 0xfa, 0x17,
+   0xfd, 0xfb, 0x02, 0xbf, 0x00, 0xda, 0x17, 0xfb, 0x5f, 0x10, 0xe2, 0x43,
+   0x00, 0x1b, 0xb4, 0xc9, 0x0b, 0x80, 0xfe, 0xa0, 0xa0, 0x2f, 0x00, 0x7c,
+   0xd0, 0xff, 0x07, 0x5d, 0x78, 0x05, 0xec, 0x2d, 0x40, 0x7f, 0xb4, 0xd0,
+   0x8f, 0x20, 0xfe, 0x17, 0xfd, 0xdf, 0xa6, 0xbe, 0x00, 0xf9, 0x37, 0x5a,
+   0x5f, 0x00, 0x80, 0x87, 0x10, 0x7d, 0xf4, 0xc2, 0x47, 0x00, 0xba, 0x42,
+   0xe4, 0x05, 0x00, 0x1d, 0xfc, 0xef, 0x45, 0x0b, 0x7c, 0x01, 0xb4, 0x17,
+   0xe0, 0x2f, 0x54, 0xa2, 0x0b, 0x08, 0xfc, 0x0f, 0xfd, 0xb5, 0x45, 0x7f,
+   0x02, 0xf6, 0x2f, 0xee, 0x7f, 0x10, 0xe1, 0x42, 0x08, 0x2e, 0xd8, 0xc4,
+   0x0f, 0x41, 0xfe, 0x00, 0xc0, 0x2f, 0x35, 0x78, 0xd0, 0xed, 0x45, 0x5e,
+   0x79, 0x51, 0xe4, 0x27, 0x45, 0x5f, 0x50, 0xc0, 0x8b, 0x22, 0xfa, 0x1b,
+   0xf5, 0x85, 0x05, 0xfd, 0x28, 0xd4, 0x2f, 0x18, 0xdd, 0x10, 0x82, 0x07,
+   0x01, 0x5c, 0xd0, 0xc9, 0x85, 0x04, 0x5a, 0x00, 0xd0, 0x13, 0x8a, 0x1c,
+   0x74, 0xbb, 0x83, 0x15, 0x5c, 0x02, 0xd4, 0x15, 0xe0, 0x3f, 0x6c, 0x90,
+   0x07, 0x0a, 0xfa, 0x17, 0xfe, 0x63, 0xa5, 0x5e, 0x80, 0xf0, 0x1f, 0x57,
+   0x3f, 0x08, 0xe1, 0x85, 0x04, 0x5b, 0xbc, 0xc0, 0x0f, 0x44, 0xde, 0xa8,
+   0x82, 0x27, 0x92, 0x78, 0xd0, 0xc2, 0x07, 0x16, 0xfa, 0x50, 0x81, 0x27,
+   0xaa, 0x6f, 0xa0, 0xc2, 0x0e, 0x2a, 0xfc, 0x0e, 0xf4, 0x86, 0x42, 0xdf,
+   0x28, 0xa0, 0x37, 0x08, 0xfa, 0xb0, 0x82, 0x05, 0x04, 0x5e, 0xa0, 0xc1,
+   0x8b, 0x88, 0x3e, 0x40, 0xe0, 0x0b, 0x15, 0x5e, 0x50, 0xd1, 0x42, 0x85,
+   0x5c, 0x22, 0xc4, 0x0b, 0xd5, 0x3f, 0x48, 0xc8, 0x8b, 0x04, 0xfa, 0x15,
+   0xfb, 0x41, 0x42, 0x3f, 0xa0, 0xe4, 0x0d, 0x15, 0x2e, 0xa8, 0xa0, 0x43,
+   0x01, 0x3a, 0x50, 0xa8, 0x1f, 0x2a, 0xfd, 0x48, 0x81, 0x2b, 0x12, 0x78,
+   0x42, 0xc2, 0x86, 0x14, 0xbd, 0x50, 0x89, 0x2b, 0xf4, 0xff, 0x90, 0x81,
+   0x0b, 0x2d, 0xfa, 0x15, 0xd4, 0x87, 0x24, 0xfd, 0xa0, 0x80, 0x37, 0x04,
+   0xfc, 0xa0, 0xa3, 0x07, 0x15, 0xfd, 0x50, 0xe1, 0x2b, 0x80, 0x2e, 0x00,
+   0x80, 0x05, 0x00, 0x5d, 0x01, 0xd0, 0x01, 0x00, 0x5f, 0x00, 0xe0, 0x05,
+   0xe0, 0x5f, 0x01, 0xf0, 0x01, 0x00, 0xbc, 0x00, 0xe0, 0x05, 0xa0, 0x2f,
+   0x40, 0xa2, 0x05, 0x00, 0x2f, 0xa8, 0x80, 0x01, 0x05, 0x5e, 0x02, 0xe8,
+   0x5f, 0x80, 0xbe, 0xa0, 0x80, 0x05, 0x00, 0xfd, 0x02, 0xa0, 0x03, 0x00,
+   0x5d, 0x00, 0x80, 0x05, 0xa0, 0x7f, 0x03, 0xc0, 0x0b, 0x0a, 0xf8, 0x01,
+   0xc8, 0x15, 0xa0, 0x7f, 0xc2, 0x82, 0x05, 0x10, 0x5d, 0xa0, 0x80, 0x17,
+   0x0a, 0xfa, 0x02, 0xd0, 0x57, 0xc0, 0x5f, 0xd5, 0xf6, 0x57, 0x55, 0xbf,
+   0x5d, 0xff, 0xad, 0xea, 0x7e, 0xab, 0xea, 0xd7, 0xfe, 0xff, 0x5a, 0xff,
+   0x57, 0xad, 0x7a, 0x6b, 0xf5, 0xb7, 0xfa, 0x5f, 0xb5, 0xfa, 0x57, 0xa5,
+   0xbe, 0xfa, 0xf6, 0xab, 0xdb, 0xfd, 0xad, 0xff, 0xdf, 0xb5, 0x7e, 0xb5,
+   0xaa, 0x6f, 0x6d, 0xfd, 0xab, 0xf4, 0x6b, 0xad, 0xff, 0xaa, 0xda, 0xaf,
+   0xea, 0xff, 0xab, 0xea, 0x6d, 0xab, 0xfe, 0x56, 0xed, 0xb7, 0xd2, 0xff,
+   0xea, 0xa7, 0x6f, 0xad, 0xfe, 0xca, 0xab, 0xaf, 0x36, 0xbf, 0x5b, 0xf5,
+   0x7f, 0xeb, 0xff, 0xed, 0xed, 0xd5, 0xda, 0xff, 0xbf, 0xff, 0xaf, 0xf5,
+   0xbf, 0xb5, 0xfb, 0xb5, 0xfe, 0xff, 0xdf, 0xfe, 0xd7, 0xbe, 0xfd, 0xab,
+   0xfa, 0x7f, 0xfb, 0xbf, 0xdd, 0xfa, 0x5b, 0xd5, 0xbf, 0xfd, 0xf6, 0xdb,
+   0xdf, 0xff, 0xb7, 0xff, 0x7f, 0xdf, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0x7f, 0xef, 0xbf, 0xff, 0xff, 0x77, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xbf,
+   0xff, 0xfb, 0xff, 0xbf, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfb,
+   0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xef, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0x77, 0xff, 0xff,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xdf, 0xff, 0xd7, 0xff, 0xfb, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xdf, 0xab, 0xff, 0x7f,
+   0xff, 0xef, 0xf5, 0xff, 0xaf, 0xfa, 0xf7, 0xaa, 0xdf, 0xba, 0xf5, 0xbb,
+   0x5d, 0xfd, 0xde, 0xeb, 0xaf, 0xb6, 0x7d, 0x77, 0xeb, 0xff, 0xba, 0xfd,
+   0x5f, 0xfd, 0xaf, 0xfe, 0xff, 0x5f, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xab, 0xf6, 0xff, 0xd5, 0xfa, 0x5b, 0x5b, 0xff, 0xba, 0xb7, 0x5f, 0x77,
+   0x7f, 0x77, 0xef, 0xef, 0xf6, 0xfb, 0x75, 0xdf, 0xfd, 0x6d, 0xef, 0xee,
+   0xdd, 0xaf, 0x6d, 0xff, 0x12, 0xff, 0xc3, 0xff, 0xff, 0x25, 0xff, 0x7f,
+   0xd1, 0xff, 0xff, 0xff, 0xb7, 0x94, 0xfe, 0xad, 0xf6, 0xab, 0xd6, 0xff,
+   0x57, 0xea, 0xd7, 0x94, 0x7c, 0x65, 0xa9, 0x95, 0x2e, 0x5e, 0x6d, 0xa9,
+   0x0b, 0xab, 0xbc, 0xa9, 0xaa, 0xaf, 0xaa, 0xfa, 0x57, 0xfa, 0x0f, 0xfd,
+   0xff, 0x2d, 0xf4, 0xff, 0xb3, 0xff, 0xff, 0xff, 0x05, 0x00, 0xbb, 0x02,
+   0xd8, 0x03, 0x40, 0x7d, 0x01, 0xb0, 0x05, 0x00, 0x5a, 0x50, 0xc0, 0x03,
+   0x0a, 0x38, 0xa0, 0x80, 0x03, 0x04, 0x58, 0x40, 0x80, 0x0b, 0x00, 0xfe,
+   0x05, 0xfd, 0x25, 0xff, 0xff, 0x03, 0xfe, 0x5f, 0xe0, 0xff, 0xff, 0xff,
+   0x05, 0x20, 0xfe, 0x02, 0xf2, 0x06, 0x80, 0x7e, 0x01, 0xe0, 0x0f, 0x00,
+   0x5c, 0x80, 0x90, 0x0b, 0x2a, 0x58, 0x40, 0x91, 0x26, 0x08, 0x38, 0x80,
+   0x80, 0x2f, 0x00, 0xf8, 0x05, 0xf5, 0x0f, 0xfa, 0xff, 0x0f, 0xf4, 0x7f,
+   0x41, 0xff, 0xff, 0xff, 0x03, 0x80, 0xba, 0x00, 0xa8, 0x03, 0x20, 0xdd,
+   0x02, 0xd0, 0x05, 0x00, 0x3a, 0x50, 0xc0, 0x41, 0x0a, 0x3a, 0x90, 0xc0,
+   0x01, 0x82, 0xac, 0x20, 0xa0, 0x0b, 0x00, 0xfe, 0x05, 0xfd, 0x53, 0xfd,
+   0xff, 0x02, 0xfa, 0x5f, 0xd1, 0xff, 0xff, 0xff, 0x57, 0x0a, 0x7a, 0x55,
+   0xe1, 0x0e, 0x25, 0x5a, 0x50, 0xc1, 0x0b, 0x29, 0x6c, 0x50, 0xd1, 0x8b,
+   0x2a, 0xb8, 0x10, 0x82, 0x0f, 0x14, 0x7c, 0xa2, 0xa2, 0x0b, 0x15, 0xf8,
+   0x85, 0xfe, 0x2f, 0xea, 0xff, 0x3f, 0xfa, 0x7f, 0x80, 0xfe, 0xff, 0xff,
+   0x05, 0x09, 0x2c, 0x20, 0xd0, 0x03, 0x04, 0x3e, 0x81, 0xb0, 0x8b, 0x00,
+   0x3a, 0xaa, 0xc0, 0x0b, 0x16, 0xae, 0x90, 0xa0, 0x85, 0x0a, 0x5a, 0x20,
+   0xc0, 0x0f, 0x00, 0xfe, 0x43, 0xff, 0x17, 0xfd, 0xff, 0x0b, 0xf6, 0x5f,
+   0xd0, 0xff, 0xff, 0xff, 0x17, 0x55, 0x3c, 0xd4, 0x81, 0x2f, 0x29, 0x7c,
+   0x28, 0xe1, 0x0b, 0x21, 0x7a, 0xb0, 0xa1, 0x87, 0x2c, 0xbc, 0x00, 0xc2,
+   0x2f, 0x80, 0x7c, 0xa5, 0xa8, 0xab, 0x4a, 0xfa, 0xc6, 0xfa, 0x3f, 0xe8,
+   0xff, 0x3f, 0xfa, 0x5f, 0x84, 0xfe, 0xff, 0xff, 0x0b, 0x0a, 0x59, 0x30,
+   0xe1, 0x85, 0x04, 0x5a, 0x50, 0xd2, 0x8b, 0x10, 0x2c, 0xd4, 0xe8, 0x0d,
+   0x0b, 0x5a, 0x08, 0xa1, 0x0b, 0x88, 0xfe, 0x40, 0xe4, 0x8f, 0x84, 0xfe,
+   0x85, 0xff, 0x2f, 0xb9, 0xff, 0x17, 0xfa, 0x5b, 0x42, 0xff, 0xff, 0xff,
+   0x2f, 0x2d, 0x3a, 0x74, 0x81, 0x0f, 0x2a, 0xbe, 0x40, 0xd1, 0x0b, 0x21,
+   0x7c, 0xb0, 0xa1, 0x0b, 0x2c, 0xfc, 0x10, 0xa0, 0x5f, 0x00, 0xdd, 0x85,
+   0xd4, 0x2f, 0x09, 0xfd, 0x45, 0xff, 0x7f, 0xe8, 0xff, 0x3f, 0xf4, 0x5f,
+   0x4a, 0xfd, 0xff, 0xff, 0x03, 0x0a, 0x2c, 0xe8, 0xc2, 0x05, 0x01, 0x7a,
+   0x01, 0xea, 0xaf, 0x50, 0x2f, 0x74, 0xe1, 0x57, 0x0b, 0x1b, 0x00, 0xc2,
+   0xaf, 0xd0, 0xfe, 0x02, 0xf8, 0xdb, 0xc0, 0xfe, 0x43, 0xff, 0x5f, 0xf0,
+   0xff, 0x27, 0xfe, 0x2f, 0x4a, 0xff, 0xff, 0xff, 0x2f, 0x50, 0x7c, 0xd8,
+   0x95, 0x0f, 0x44, 0x7e, 0x05, 0xaa, 0x5f, 0x51, 0x7d, 0x60, 0xa1, 0x0f,
+   0x2a, 0xfe, 0x10, 0x80, 0x5f, 0x81, 0xff, 0x07, 0xe8, 0xbf, 0x82, 0xff,
+   0x86, 0xfe, 0xff, 0xa1, 0xff, 0x1f, 0xf2, 0x7f, 0xcd, 0xfe, 0xff, 0xff,
+   0x0b, 0x02, 0x2d, 0xb4, 0xc0, 0x05, 0x80, 0xda, 0x4a, 0xf0, 0xbb, 0xe0,
+   0x5f, 0xb4, 0xd0, 0x2b, 0x04, 0x3d, 0x42, 0xe0, 0x3f, 0x50, 0xff, 0x15,
+   0xff, 0x5f, 0x50, 0xfd, 0xc5, 0xff, 0x5f, 0xe4, 0xff, 0x2f, 0xfa, 0xef,
+   0xb7, 0xff, 0xff, 0xff, 0x2b, 0x00, 0x5d, 0xa4, 0xc1, 0x1f, 0x40, 0xdf,
+   0x0a, 0xc0, 0xff, 0x51, 0x5f, 0xe4, 0xa1, 0x4f, 0x08, 0x7d, 0x80, 0x80,
+   0x6f, 0x41, 0xfd, 0x17, 0xf4, 0x7f, 0x61, 0xff, 0x85, 0xfe, 0xff, 0x40,
+   0xff, 0x3f, 0xf6, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x3d, 0x68,
+   0xd0, 0x05, 0x80, 0xbe, 0x08, 0xf0, 0x5f, 0xe0, 0x3f, 0x58, 0xd0, 0x1f,
+   0x4a, 0x5f, 0x20, 0xe0, 0x1b, 0x80, 0xfe, 0x0b, 0xfb, 0x57, 0x90, 0xfd,
+   0x43, 0xff, 0x7f, 0xe3, 0xfd, 0x27, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x27, 0x55, 0xff, 0x00, 0xa1, 0x8b, 0x0a, 0x7a, 0x69, 0xa1, 0xff, 0x41,
+   0x7f, 0xd0, 0xd1, 0x7b, 0x02, 0xfd, 0x80, 0x82, 0x57, 0x8a, 0xfa, 0x1b,
+   0xfc, 0x5f, 0x22, 0x7a, 0x87, 0xfe, 0xff, 0x07, 0xff, 0x1f, 0xf4, 0xff,
+   0xff, 0xbf, 0x55, 0xf5, 0x05, 0xe8, 0x2e, 0x92, 0xd0, 0x07, 0x45, 0x1d,
+   0x90, 0xe0, 0x5f, 0xb0, 0x2f, 0x24, 0xe0, 0x2f, 0xc8, 0xbf, 0x20, 0xe0,
+   0x0b, 0x04, 0xfe, 0x07, 0xfb, 0x17, 0x10, 0xfa, 0x45, 0xff, 0xff, 0xa2,
+   0xfd, 0x2b, 0xfa, 0xff, 0xff, 0x7f, 0xbb, 0xb7, 0x17, 0xc1, 0x7f, 0x00,
+   0xa0, 0x0b, 0x08, 0x7a, 0x02, 0xa0, 0x5f, 0xa1, 0xfe, 0x80, 0xd0, 0x7f,
+   0x81, 0xfe, 0xa0, 0xa0, 0x0b, 0x08, 0xf8, 0x0d, 0xe8, 0x2f, 0x02, 0xfc,
+   0x83, 0xfa, 0xff, 0x27, 0xff, 0x2f, 0xf6, 0xff, 0xff, 0x5f, 0x22, 0xe0,
+   0x05, 0x74, 0xbf, 0x01, 0xd2, 0x8a, 0x26, 0x1c, 0xa8, 0xd0, 0x3f, 0xc0,
+   0x3f, 0x11, 0xd0, 0x5f, 0xd0, 0x5f, 0x40, 0xa0, 0x03, 0x02, 0x7a, 0x03,
+   0xed, 0x0a, 0x28, 0xfa, 0x06, 0xff, 0xff, 0x05, 0xfd, 0x0b, 0xfc, 0xff,
+   0xff, 0xbf, 0x90, 0xc4, 0x07, 0xe0, 0x7f, 0x23, 0xc4, 0x0b, 0x0c, 0x58,
+   0x00, 0xd1, 0x77, 0x81, 0x7e, 0x42, 0xd1, 0xbf, 0x40, 0xff, 0x82, 0xc0,
+   0x2b, 0x14, 0xfa, 0x16, 0xf4, 0x0f, 0x00, 0xfc, 0x05, 0xfa, 0xff, 0x17,
+   0xfd, 0x17, 0xf4, 0xff, 0xff, 0x3f, 0x82, 0xc8, 0x85, 0xd8, 0x7f, 0x00,
+   0xd0, 0x01, 0x12, 0x3a, 0x02, 0xf4, 0x5f, 0x90, 0xff, 0x09, 0xf4, 0x7f,
+   0xd1, 0xbf, 0x68, 0xea, 0x02, 0x0a, 0xfc, 0x01, 0xf4, 0x2b, 0x00, 0xfa,
+   0x23, 0xfd, 0xff, 0x17, 0x7e, 0x05, 0xfe, 0xff, 0xff, 0x4f, 0x00, 0xc0,
+   0x17, 0xe9, 0xff, 0x02, 0xa0, 0x2b, 0x7e, 0xfa, 0x08, 0xd2, 0x5f, 0x40,
+   0xfd, 0x03, 0xe8, 0x7f, 0xa1, 0xfe, 0xc9, 0xc8, 0x0f, 0x2a, 0xf8, 0x07,
+   0xe8, 0x4f, 0x02, 0xfc, 0x07, 0xf5, 0xff, 0x17, 0xfa, 0x2d, 0xf4, 0xff,
+   0xff, 0x5f, 0x00, 0xc0, 0x6d, 0xf5, 0x7f, 0x81, 0xd0, 0xd7, 0x55, 0x5d,
+   0xf7, 0xfe, 0xff, 0xb7, 0xbf, 0xfd, 0xff, 0xdf, 0xde, 0x7f, 0xf7, 0xf7,
+   0xeb, 0xaa, 0xff, 0xfd, 0xff, 0xbf, 0xfd, 0x7f, 0x05, 0xfe, 0xff, 0x0f,
+   0xff, 0x03, 0xfe, 0xff, 0xff, 0x1f, 0x01, 0xc0, 0xdf, 0xff, 0xff, 0xb7,
+   0xea, 0x5f, 0xff, 0xff, 0xd6, 0xfa, 0x7f, 0xed, 0xff, 0x57, 0xf5, 0xff,
+   0xfb, 0xff, 0xee, 0xfe, 0xbf, 0x7f, 0xfd, 0x57, 0xf5, 0xbf, 0x55, 0xfd,
+   0xaf, 0xf4, 0xff, 0x7f, 0xfd, 0x4f, 0xf4, 0xff, 0xff, 0xff, 0xfe, 0xdf,
+   0x7f, 0xf7, 0x7f, 0x55, 0xda, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xee, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xab, 0xff, 0xff, 0xaf, 0xff, 0xdd, 0xff, 0xff,
+   0xff, 0xbf, 0xab, 0xea, 0xff, 0xff, 0xff, 0xf7, 0xf6, 0xff, 0xfe, 0xfe,
+   0xdf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xfe, 0xff, 0x7f,
+   0xff, 0x5b, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xaf, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xfb, 0xff, 0xff,
+   0x7d, 0xff, 0xff, 0xd7, 0xfd, 0xff, 0xf5, 0x5f, 0xfb, 0xff, 0xaf, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xdb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xfe, 0xff, 0xff, 0xff,
+   0x4d, 0xfe, 0xff, 0xff, 0xcb, 0xfe, 0xff, 0x5f, 0xff, 0xff, 0x57, 0xff,
+   0xea, 0xff, 0xbf, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xd5, 0xff, 0xff, 0xff, 0x05, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x03,
+   0xfb, 0xff, 0xff, 0x7f, 0x01, 0xfa, 0xff, 0xff, 0x03, 0xfb, 0xff, 0x03,
+   0xfd, 0x7f, 0xc1, 0x5f, 0xf0, 0xff, 0x2f, 0xf0, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7f, 0xb1, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0x06, 0xfe, 0xff, 0xff, 0xf7, 0x01, 0xfe, 0xff, 0xff,
+   0x0b, 0xfe, 0xff, 0x17, 0xfb, 0xff, 0x83, 0x5e, 0xd0, 0xff, 0x6f, 0xa0,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe1, 0xff, 0xff,
+   0xff, 0x86, 0xfa, 0xff, 0xdf, 0xfd, 0xff, 0x0b, 0xff, 0xf7, 0xff, 0x5f,
+   0x50, 0xfa, 0xef, 0xfb, 0x8a, 0xfa, 0xff, 0x0b, 0xfe, 0x7f, 0xa1, 0x7f,
+   0xd1, 0xff, 0xbf, 0xf0, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xf7, 0xff,
+   0x7f, 0x41, 0xff, 0x5b, 0xff, 0x0d, 0xee, 0xff, 0xbb, 0xf7, 0x7f, 0x15,
+   0xfa, 0xaf, 0xfa, 0x7f, 0x81, 0xfe, 0x5f, 0xf7, 0x0b, 0xaa, 0xff, 0x17,
+   0xfa, 0xff, 0x83, 0x5e, 0xa2, 0xfa, 0x7f, 0xa1, 0xff, 0x6d, 0xf5, 0xff,
+   0xea, 0xff, 0xaf, 0xfe, 0x5f, 0xb0, 0xff, 0xee, 0xfe, 0x83, 0xaa, 0x7d,
+   0x57, 0xdd, 0xd7, 0x02, 0x7f, 0xdf, 0xfd, 0x2f, 0x50, 0x7d, 0xb5, 0xee,
+   0x83, 0xfa, 0xbe, 0x05, 0xff, 0x57, 0xa0, 0x7f, 0xb0, 0xf7, 0xaf, 0xd0,
+   0x5f, 0xdb, 0xde, 0xab, 0xdd, 0x7f, 0xdd, 0xfb, 0xff, 0x83, 0xff, 0x0a,
+   0xf5, 0x0f, 0x50, 0xff, 0x2a, 0xf1, 0xbf, 0x14, 0xfc, 0x12, 0xd5, 0x5f,
+   0x01, 0xfd, 0x93, 0xd0, 0x0f, 0x82, 0xff, 0x55, 0xfa, 0x5f, 0x85, 0xfe,
+   0x42, 0xd4, 0xbf, 0xb1, 0x5f, 0x82, 0xf0, 0x2b, 0x91, 0xfe, 0x13, 0xf6,
+   0x7f, 0xd1, 0xff, 0x51, 0xfa, 0x0b, 0xc9, 0xde, 0x42, 0xd4, 0x4b, 0x00,
+   0xfb, 0x45, 0xf4, 0x0b, 0xa0, 0x5e, 0x25, 0xaa, 0x0b, 0x68, 0xfd, 0x03,
+   0xff, 0x5f, 0x50, 0x5f, 0x50, 0xfa, 0x7f, 0xe1, 0x3f, 0x49, 0xda, 0x8b,
+   0xa4, 0xbb, 0x44, 0xfa, 0x7f, 0x4f, 0xbf, 0x02, 0xe8, 0x0b, 0x00, 0x5a,
+   0x00, 0xa0, 0x07, 0x01, 0xbe, 0x04, 0xa0, 0x2f, 0x00, 0x7a, 0x00, 0xc0,
+   0x4b, 0x40, 0xfe, 0x06, 0xfa, 0x9f, 0x00, 0xfd, 0x02, 0xd0, 0x7f, 0xa1,
+   0x2f, 0x00, 0xa0, 0x03, 0x00, 0x7e, 0x00, 0xe0, 0xff, 0xd5, 0x7f, 0x00,
+   0xf4, 0x07, 0x00, 0x7e, 0x02, 0xd0, 0x05, 0x00, 0x7d, 0x00, 0xe0, 0x0b,
+   0x00, 0x5e, 0x00, 0xa0, 0x07, 0x00, 0x7d, 0x21, 0xfd, 0x17, 0x80, 0x5f,
+   0x50, 0xf0, 0xff, 0xd0, 0x1f, 0x00, 0xe0, 0x05, 0x40, 0x5d, 0x01, 0xf0,
+   0xff, 0xcf, 0xfe, 0x02, 0xd4, 0x1f, 0x00, 0x5c, 0x00, 0xd0, 0x0d, 0x08,
+   0xed, 0x01, 0xa0, 0x5f, 0x82, 0x7c, 0x01, 0xc0, 0x0f, 0x00, 0xfa, 0x07,
+   0xfd, 0xbf, 0x00, 0xfd, 0x02, 0xd2, 0xbf, 0xb1, 0x5f, 0x00, 0xa0, 0x0b,
+   0x00, 0x5a, 0x00, 0xc1, 0xff, 0xff, 0xbf, 0x54, 0xe8, 0x85, 0x2a, 0x3a,
+   0xb4, 0xe0, 0x43, 0x05, 0x3f, 0x68, 0xc1, 0x57, 0x70, 0x2f, 0xb4, 0xb0,
+   0x05, 0x95, 0xfe, 0x15, 0xfb, 0xaf, 0x8b, 0x3e, 0x81, 0xfc, 0x7f, 0xe1,
+   0x5f, 0x54, 0xe5, 0x45, 0x16, 0x3e, 0x34, 0xf0, 0xff, 0xfd, 0xff, 0x01,
+   0xd0, 0x0b, 0x24, 0x6c, 0x60, 0xa1, 0x45, 0x12, 0xbc, 0x40, 0x82, 0xbf,
+   0x40, 0x5f, 0x20, 0xc0, 0x0f, 0x12, 0xfa, 0x0f, 0xfd, 0x7f, 0x95, 0x7e,
+   0x82, 0xf4, 0x7f, 0xa1, 0x5f, 0x00, 0xa0, 0x0f, 0x24, 0x6c, 0x64, 0xc1,
+   0xff, 0xdf, 0x3f, 0x80, 0xe4, 0x07, 0x0b, 0x1a, 0xdc, 0xda, 0x81, 0x05,
+   0xbf, 0x00, 0xe0, 0x6f, 0xf2, 0x5f, 0xac, 0xf0, 0x85, 0x0a, 0xfe, 0x15,
+   0xfd, 0xff, 0x8b, 0x7f, 0x01, 0xfb, 0xff, 0xd0, 0x3f, 0x24, 0xc9, 0x85,
+   0x0a, 0x1a, 0xd8, 0xb0, 0xff, 0xff, 0xff, 0x04, 0xc8, 0x0e, 0x3a, 0x7c,
+   0xd0, 0xf2, 0x07, 0x15, 0xba, 0x00, 0x80, 0x5f, 0xa2, 0x3f, 0x58, 0xd1,
+   0x0f, 0x2c, 0xfa, 0x17, 0xfa, 0xff, 0x97, 0x7c, 0x09, 0xf6, 0xbf, 0xb1,
+   0x7f, 0x04, 0xd0, 0x0f, 0x2a, 0x7e, 0x50, 0xe1, 0xff, 0xff, 0xbf, 0x00,
+   0xe8, 0x8b, 0x0a, 0x1a, 0x6c, 0xd5, 0x41, 0x03, 0x5d, 0x08, 0xe2, 0x3f,
+   0xe8, 0x2f, 0x20, 0xd0, 0x8b, 0x0a, 0xfc, 0x0b, 0xfd, 0x7f, 0x0b, 0xaf,
+   0x80, 0xfa, 0x7f, 0xe1, 0x2f, 0x50, 0xe1, 0x85, 0x16, 0x2c, 0xac, 0xa0,
+   0xff, 0xff, 0x7f, 0xa8, 0xd0, 0x0b, 0x28, 0x7a, 0xd0, 0xb2, 0x07, 0x05,
+   0xfd, 0x50, 0xa2, 0x7f, 0x51, 0x7f, 0x02, 0xd0, 0x0b, 0x2d, 0xfa, 0x1b,
+   0xeb, 0xff, 0x97, 0x7e, 0x11, 0xea, 0xef, 0x50, 0x7f, 0x00, 0x84, 0x0f,
+   0x2a, 0x5c, 0x68, 0xe1, 0xff, 0xff, 0xaf, 0x50, 0xe4, 0x07, 0x06, 0x5a,
+   0xa8, 0xe5, 0x85, 0x04, 0x5b, 0x80, 0xc8, 0x57, 0xa0, 0x7d, 0x00, 0xb0,
+   0x07, 0x15, 0xfe, 0x06, 0xfa, 0xff, 0x95, 0x5e, 0x02, 0xb4, 0x5f, 0xa1,
+   0x2d, 0x4a, 0xe0, 0x85, 0x0a, 0x3a, 0x10, 0xd0, 0xff, 0xff, 0xbf, 0x88,
+   0xa4, 0x0d, 0x14, 0x5c, 0x50, 0xa4, 0x05, 0x05, 0xde, 0x10, 0xa1, 0x3f,
+   0x55, 0xef, 0x55, 0xe1, 0x8d, 0x24, 0xf8, 0x15, 0xd4, 0xbf, 0x87, 0xfe,
+   0x20, 0xe4, 0x5f, 0x41, 0x6f, 0x08, 0x85, 0x0d, 0x2a, 0x7a, 0x50, 0xd1,
+   0xff, 0xff, 0x7f, 0x00, 0xe0, 0x03, 0x00, 0x3d, 0x01, 0xc0, 0x13, 0x00,
+   0x7c, 0x02, 0xe0, 0x0b, 0x00, 0x7e, 0x03, 0xd0, 0x03, 0x0a, 0xbc, 0x00,
+   0xe0, 0x7f, 0x89, 0x1d, 0x10, 0xd0, 0x0b, 0x00, 0x1e, 0x20, 0xa0, 0x03,
+   0x04, 0x58, 0x01, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x80, 0x0b, 0x00, 0x7a,
+   0x00, 0xd0, 0x07, 0x00, 0xfc, 0x00, 0xa0, 0x2f, 0x40, 0xfc, 0x56, 0xd0,
+   0x0b, 0x00, 0xf8, 0x85, 0xc8, 0x57, 0x09, 0x7f, 0x60, 0x80, 0x1f, 0x44,
+   0x3c, 0x00, 0xa2, 0x0b, 0x0a, 0x7a, 0x00, 0xe2, 0xff, 0xff, 0x5f, 0x55,
+   0xf5, 0x55, 0xf5, 0xff, 0xab, 0xea, 0xbf, 0xda, 0x7a, 0x57, 0xd5, 0x97,
+   0x94, 0x7f, 0x01, 0xf2, 0x52, 0xaf, 0x7a, 0x29, 0xf5, 0x1f, 0x80, 0x5f,
+   0x5b, 0xf5, 0x57, 0xa9, 0xaf, 0xaa, 0xd4, 0xab, 0xaa, 0xdc, 0xab, 0xfa,
+   0xff, 0xff, 0xff, 0x26, 0xd1, 0xaf, 0x84, 0xde, 0xa6, 0xda, 0x6d, 0x92,
+   0xfe, 0x56, 0xf5, 0x5f, 0x51, 0x7d, 0x03, 0xec, 0x4f, 0x4c, 0xfd, 0x27,
+   0xd5, 0xb7, 0xa0, 0xfe, 0x6a, 0xd1, 0x5f, 0x89, 0x5e, 0x29, 0xa5, 0x4f,
+   0x4a, 0xfd, 0x96, 0xf6, 0xff, 0xff, 0xff, 0xdd, 0xee, 0x5b, 0xfb, 0xff,
+   0xad, 0xf6, 0xbf, 0x6d, 0xff, 0x57, 0xdd, 0x6f, 0xd5, 0xff, 0x44, 0xfa,
+   0x5b, 0xb7, 0xfb, 0xda, 0xf6, 0x1f, 0xc0, 0x3f, 0xbd, 0xee, 0x6f, 0x7b,
+   0x7f, 0xdd, 0xda, 0xbb, 0x5f, 0xfb, 0x55, 0xff, 0xff, 0xff, 0xff, 0xdb,
+   0xfd, 0xff, 0xdb, 0xff, 0xff, 0xfe, 0xff, 0xed, 0xfd, 0xff, 0xfb, 0xff,
+   0x7f, 0xff, 0x09, 0xf6, 0xff, 0x7e, 0xff, 0xdf, 0xfe, 0xb7, 0x48, 0xff,
+   0xfb, 0xfb, 0x7f, 0xeb, 0xff, 0xfb, 0xfb, 0xb7, 0xfa, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff,
+   0xff, 0xdf, 0xff, 0xdf, 0xed, 0xff, 0xf6, 0xfd, 0xf7, 0xef, 0xff, 0xfb,
+   0xff, 0x5f, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xd5, 0xff, 0xdb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xfb,
+   0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x77, 0xf5, 0x7f, 0xd5, 0xff, 0xcb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0xf6,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x2f, 0xff, 0xff, 0xe9, 0xff, 0xb6, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x0f, 0xfa, 0xbf, 0xa1,
+   0xff, 0x07, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xea, 0xff, 0xd5,
+   0xf5, 0xbf, 0xad, 0xff, 0xf7, 0xf5, 0x4b, 0xea, 0x7f, 0xfb, 0xfa, 0x6f,
+   0x57, 0xff, 0xfa, 0xed, 0x5f, 0x57, 0xff, 0x76, 0xf5, 0x5f, 0xaf, 0xff,
+   0x25, 0xfe, 0x7f, 0xf1, 0xff, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfd, 0x5e, 0xff, 0x5f, 0xd7, 0xb7, 0x75, 0xfd, 0xaf, 0xde, 0x1f, 0x54,
+   0x7f, 0xdb, 0xef, 0xdd, 0xde, 0xda, 0xab, 0xdb, 0x7b, 0x7d, 0xdd, 0xed,
+   0xd7, 0x7b, 0xf5, 0xfe, 0x8f, 0xfa, 0x7f, 0xa1, 0xff, 0x17, 0xfa, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xa7, 0xd2, 0x5e, 0xb5, 0xfa, 0x5f, 0xab, 0xff,
+   0xaa, 0xe9, 0x45, 0xea, 0xdd, 0x76, 0xd9, 0x57, 0xb5, 0xbe, 0x76, 0xb5,
+   0xd7, 0xca, 0x7e, 0xb5, 0xea, 0x57, 0x4d, 0xff, 0x85, 0xfe, 0xff, 0xd0,
+   0xff, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x7d, 0x01,
+   0x80, 0x0b, 0x02, 0xfa, 0x06, 0xc1, 0x0f, 0x00, 0x3f, 0xa0, 0xa0, 0x03,
+   0x02, 0x38, 0xc0, 0x80, 0x0f, 0x0a, 0x3a, 0xc0, 0x80, 0x07, 0x00, 0xfd,
+   0x8f, 0xfd, 0xbf, 0xb1, 0xff, 0x1f, 0xfa, 0xbf, 0xdb, 0xfe, 0xff, 0xff,
+   0x03, 0x40, 0x7f, 0x02, 0xe0, 0x4f, 0x08, 0xfe, 0x01, 0xe8, 0x05, 0xc0,
+   0x5e, 0x58, 0xe0, 0x0a, 0x04, 0x5c, 0x90, 0xa0, 0x05, 0x00, 0x5a, 0xa8,
+   0x80, 0x25, 0x20, 0xff, 0x05, 0xff, 0x7f, 0xe1, 0xff, 0x0b, 0xfd, 0x6f,
+   0xbd, 0xfb, 0xff, 0xff, 0x0b, 0x00, 0xda, 0x00, 0x80, 0x0f, 0x00, 0x7a,
+   0x07, 0xa0, 0x0f, 0x80, 0x7e, 0xe0, 0xc4, 0x03, 0x08, 0xb8, 0xa0, 0x82,
+   0x0f, 0x0a, 0xbc, 0xa0, 0x92, 0x07, 0x00, 0xfd, 0x0d, 0xfd, 0x7f, 0xa1,
+   0xff, 0x1f, 0xf5, 0x7f, 0xab, 0xfe, 0xff, 0xff, 0x45, 0x0a, 0x3e, 0x50,
+   0xf0, 0x5b, 0x10, 0xbe, 0x20, 0xe0, 0x25, 0xca, 0x9f, 0xa8, 0xe0, 0x8d,
+   0x22, 0x5a, 0x08, 0xa0, 0x2b, 0x84, 0xae, 0x20, 0xc0, 0x85, 0x44, 0xff,
+   0x83, 0xff, 0xff, 0xd0, 0xff, 0x0b, 0xfe, 0x0b, 0x10, 0xfa, 0xff, 0xff,
+   0x0d, 0x10, 0x78, 0x40, 0xa0, 0x57, 0x50, 0xfa, 0x80, 0xc0, 0x4f, 0x50,
+   0xbf, 0x48, 0xa1, 0x0b, 0x0a, 0xba, 0x08, 0xa2, 0x4f, 0x88, 0xbc, 0x40,
+   0xa1, 0x87, 0x40, 0x7d, 0x0b, 0xfd, 0xbf, 0xa1, 0xff, 0x1f, 0xf4, 0x2f,
+   0x20, 0xfc, 0xff, 0xff, 0x0b, 0x15, 0x2e, 0x14, 0xd1, 0x1f, 0x52, 0x7f,
+   0x05, 0xea, 0x17, 0xee, 0x7f, 0xb0, 0xe0, 0x27, 0x44, 0x5e, 0x00, 0xc0,
+   0x5f, 0x40, 0x7f, 0xa2, 0xa8, 0x1b, 0xa8, 0xff, 0x81, 0xfe, 0x7f, 0xf1,
+   0xff, 0x0b, 0xfc, 0x05, 0x81, 0xfe, 0xff, 0xff, 0x0b, 0x2a, 0x58, 0x70,
+   0xd0, 0x7f, 0xd4, 0x7d, 0x01, 0xa0, 0x2f, 0xb8, 0xdf, 0xa0, 0x83, 0x4f,
+   0x88, 0xfc, 0x48, 0xa2, 0x5d, 0xc1, 0xfe, 0x45, 0xe0, 0xab, 0x40, 0xff,
+   0x87, 0xfd, 0x7f, 0xa1, 0xff, 0x1f, 0xe8, 0x0f, 0x00, 0xfa, 0xff, 0xff,
+   0x87, 0x24, 0x3e, 0x14, 0xf1, 0x2f, 0x74, 0xff, 0x24, 0xd5, 0x4b, 0xd6,
+   0xbd, 0x68, 0xe0, 0x0b, 0x05, 0xbb, 0x00, 0xe0, 0x5f, 0x90, 0x7f, 0x01,
+   0xec, 0x17, 0xe8, 0xfe, 0x0a, 0xff, 0xff, 0xd0, 0xff, 0x8b, 0xfe, 0x85,
+   0x04, 0xfe, 0xff, 0xff, 0x0f, 0x04, 0x6c, 0x20, 0xa0, 0x6f, 0xd0, 0xdf,
+   0x05, 0xa0, 0x1f, 0xb4, 0xbf, 0xc0, 0xa2, 0x7f, 0x48, 0xbf, 0x00, 0xc0,
+   0x7b, 0x41, 0xfd, 0xa7, 0xd4, 0x2f, 0x81, 0xfe, 0x0b, 0xfd, 0xff, 0xb1,
+   0xff, 0x1f, 0xfa, 0xaf, 0xa9, 0xfd, 0xff, 0xff, 0x05, 0x00, 0x3e, 0x00,
+   0xd0, 0x1f, 0x76, 0x7f, 0x28, 0xe0, 0x27, 0x54, 0x7f, 0x28, 0xa0, 0x0f,
+   0x42, 0x7f, 0x88, 0xa0, 0x0f, 0x80, 0x7f, 0x05, 0xf4, 0x15, 0x54, 0xff,
+   0x87, 0xfe, 0x5f, 0xe1, 0xff, 0x0b, 0xfd, 0x5f, 0x57, 0xff, 0xff, 0xff,
+   0x0f, 0xa0, 0xfc, 0x02, 0xe0, 0x57, 0xc0, 0xfe, 0x41, 0x82, 0x5f, 0x04,
+   0xfa, 0xa1, 0xc0, 0x7f, 0x80, 0xfe, 0x21, 0xe4, 0x2f, 0x0a, 0xfa, 0x05,
+   0xf4, 0x07, 0x00, 0xfd, 0x0d, 0xfd, 0x7f, 0xa1, 0xff, 0x1f, 0xfb, 0x7f,
+   0x7d, 0xff, 0xff, 0xff, 0x4b, 0x82, 0xbe, 0x22, 0xd0, 0x0d, 0x54, 0x5f,
+   0x00, 0xe1, 0x2f, 0x20, 0x5e, 0x00, 0xa0, 0x5f, 0xd1, 0xbf, 0x44, 0xa8,
+   0x0b, 0x04, 0xfe, 0x17, 0xfd, 0x15, 0x05, 0xff, 0x8b, 0xff, 0xff, 0xd0,
+   0xff, 0x13, 0xfe, 0xfb, 0xef, 0xff, 0xff, 0xff, 0x0b, 0xf4, 0xfd, 0x4e,
+   0xd1, 0x2f, 0xc0, 0xfe, 0x20, 0xa0, 0x5f, 0x84, 0xfc, 0x44, 0xa1, 0x7f,
+   0x80, 0xfe, 0xa1, 0xe0, 0x5f, 0x48, 0xfa, 0x05, 0xed, 0x07, 0x10, 0xfc,
+   0x0b, 0xfa, 0xff, 0xb1, 0xff, 0x17, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x87, 0xaa, 0xff, 0x3b, 0xd0, 0x0b, 0x80, 0xbf, 0x02, 0xe4, 0xb7, 0x40,
+   0xff, 0x03, 0xc0, 0xdf, 0xf0, 0x7f, 0x45, 0xda, 0x03, 0x02, 0xbe, 0x02,
+   0xfd, 0x25, 0x80, 0xff, 0x87, 0xfe, 0xbf, 0xd2, 0xff, 0x0b, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x0d, 0xec, 0xff, 0x6b, 0xa1, 0x0b, 0x41, 0xfe,
+   0x12, 0xc8, 0x7f, 0x01, 0x7d, 0x0d, 0x82, 0xff, 0xa3, 0xff, 0xd5, 0xf4,
+   0x0f, 0x0a, 0xfa, 0x08, 0xfd, 0x0f, 0x00, 0xfd, 0x0f, 0xf5, 0xff, 0xf1,
+   0xff, 0x1b, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0x0f,
+   0xe0, 0x7f, 0xdf, 0x7f, 0xed, 0xf7, 0xbf, 0xfd, 0xff, 0xeb, 0xee, 0xbf,
+   0xfa, 0xff, 0x6f, 0xef, 0xef, 0x6e, 0xbf, 0x00, 0xff, 0xfb, 0x7f, 0xff,
+   0x2b, 0xfe, 0x7f, 0xef, 0xff, 0x46, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x8b, 0xd4, 0xff, 0x2f, 0x80, 0xd7, 0xb4, 0xff, 0x5d, 0xfd, 0xff, 0x6b,
+   0xff, 0xdf, 0xfa, 0xff, 0xef, 0xbf, 0xfd, 0xfd, 0xbf, 0x7b, 0xfd, 0x2a,
+   0xfd, 0x57, 0xd5, 0xff, 0xef, 0xf4, 0xff, 0xdd, 0xff, 0xa6, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x2b, 0xf5, 0xff, 0x5b, 0xf5, 0x7f, 0xff, 0xff,
+   0xf7, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xff,
+   0xef, 0xde, 0x7f, 0xd5, 0xff, 0xff, 0xfe, 0xff, 0x5f, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xfd, 0xff, 0x7f,
+   0xd5, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xfe, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xeb,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0xed, 0xff,
+   0xf7, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0xfb, 0xfa, 0xff, 0xff,
+   0xff, 0xed, 0xdb, 0xff, 0xee, 0xff, 0xab, 0xd4, 0xff, 0xff, 0xff, 0xab,
+   0xfa, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x61, 0xff,
+   0x17, 0xfd, 0xef, 0xff, 0xbf, 0xa8, 0xf4, 0xff, 0xf5, 0xff, 0x06, 0xe0,
+   0xff, 0xd6, 0xff, 0xad, 0xff, 0x5f, 0x75, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x57, 0x69, 0xff, 0x6b, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xc3, 0xfe, 0xab, 0xd4, 0xbf, 0x6d, 0xff, 0xa9, 0xa1, 0xbf,
+   0xd1, 0xff, 0x0b, 0xa0, 0xdf, 0x5e, 0xff, 0x0b, 0xe9, 0xff, 0xd2, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xd5, 0xfe, 0xaf, 0xfe,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xa0, 0x7f, 0x05, 0xf8, 0x6f, 0xdf,
+   0x5e, 0x40, 0xa0, 0xff, 0xe4, 0xff, 0xa2, 0xe2, 0xbf, 0x94, 0xbf, 0x00,
+   0xf4, 0x3f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+   0x40, 0x7f, 0x01, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0xfd,
+   0x03, 0xe0, 0x5e, 0x55, 0xbd, 0x40, 0xc0, 0xff, 0xa1, 0x7f, 0x05, 0xa0,
+   0xbf, 0x9d, 0xbe, 0x05, 0xd0, 0xff, 0x80, 0xfe, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0x5f, 0x00, 0xfd, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x57, 0xa0, 0x7e, 0x05, 0xfc, 0xab, 0x54, 0x7f, 0x80, 0xa0, 0xbf,
+   0xf0, 0xff, 0x40, 0xe2, 0x7f, 0x94, 0x7f, 0x10, 0xb2, 0x57, 0xc2, 0xff,
+   0xb7, 0xfd, 0x57, 0xbd, 0xff, 0xff, 0xff, 0x05, 0x20, 0xff, 0x05, 0xfe,
+   0xff, 0xff, 0xff, 0xaf, 0xfe, 0x5f, 0x01, 0xfa, 0x41, 0xe9, 0x0f, 0x00,
+   0xfa, 0xa2, 0xe4, 0xff, 0xa1, 0xef, 0x02, 0xc8, 0xdf, 0xb6, 0xee, 0x00,
+   0xe0, 0x3f, 0x82, 0xfe, 0xbf, 0xd5, 0x7f, 0x6b, 0xfd, 0xff, 0xff, 0x0f,
+   0x00, 0xfa, 0xad, 0xf4, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x17, 0x80, 0x7e,
+   0xaa, 0xf6, 0x0b, 0x00, 0x5e, 0x01, 0xd0, 0xbf, 0xd0, 0xbf, 0xa4, 0xb2,
+   0xff, 0xdd, 0x3f, 0x00, 0xa0, 0x2f, 0x40, 0xff, 0x6a, 0xfb, 0x57, 0x95,
+   0xfe, 0xff, 0xff, 0x85, 0x00, 0xfe, 0x53, 0xfb, 0xff, 0xff, 0xff, 0x1b,
+   0xfc, 0x2f, 0x14, 0xfa, 0xa1, 0xfe, 0x2f, 0x0a, 0xfa, 0x45, 0xd4, 0xbf,
+   0xb1, 0xff, 0x00, 0xe4, 0xff, 0xdf, 0x6f, 0x41, 0xc4, 0x5f, 0x8a, 0xfe,
+   0x03, 0x80, 0x0d, 0x00, 0xfa, 0xb7, 0xea, 0x15, 0x44, 0xf8, 0x5f, 0xff,
+   0xff, 0xff, 0xff, 0xaf, 0xfe, 0x0f, 0x49, 0xbd, 0x44, 0xfb, 0x05, 0x80,
+   0x7c, 0x23, 0xe8, 0xff, 0xe0, 0x5f, 0x00, 0xa8, 0xdf, 0xff, 0x3f, 0x08,
+   0xd0, 0x2b, 0x40, 0xdf, 0x4a, 0xd1, 0x07, 0x00, 0xfa, 0xee, 0xff, 0x41,
+   0x00, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xfa, 0x1d, 0x14, 0xbd,
+   0x81, 0xf6, 0x0f, 0x0a, 0xfd, 0x85, 0xd8, 0xff, 0xd1, 0xbf, 0x10, 0xe0,
+   0xff, 0xff, 0x5f, 0x40, 0x82, 0x5f, 0x44, 0xfd, 0x02, 0xd1, 0x0f, 0x00,
+   0xfa, 0x15, 0xd1, 0x0b, 0x24, 0xf8, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0x55,
+   0xfd, 0x17, 0xd9, 0x7f, 0x00, 0xfe, 0x85, 0x08, 0xfa, 0x02, 0xf4, 0xbf,
+   0xb2, 0x7f, 0x44, 0xa2, 0xff, 0xff, 0x1f, 0x20, 0xc8, 0x17, 0x81, 0x3e,
+   0x51, 0xd0, 0x55, 0x15, 0x7c, 0x00, 0xa0, 0x21, 0x80, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x9f, 0xfa, 0x17, 0x92, 0xfa, 0x08, 0xf8, 0x0f, 0x2a,
+   0xfe, 0x0f, 0xd4, 0xff, 0xe5, 0xef, 0x40, 0xa0, 0xff, 0xff, 0xbf, 0x40,
+   0x81, 0x3f, 0x80, 0x7e, 0x00, 0xd0, 0x3f, 0x29, 0xf8, 0x05, 0xe0, 0x43,
+   0x10, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfe, 0x0f, 0x08, 0x5f,
+   0xa1, 0xfe, 0x0b, 0x00, 0xfc, 0x00, 0xf9, 0xbf, 0xd0, 0xbf, 0x02, 0xc0,
+   0xff, 0xff, 0x5f, 0x00, 0xd0, 0x57, 0x40, 0x5b, 0x24, 0xf2, 0xd7, 0x17,
+   0xfe, 0x54, 0xa5, 0x0b, 0x02, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b,
+   0xfa, 0x5f, 0x20, 0xfd, 0x82, 0xea, 0x1b, 0x04, 0xfa, 0x17, 0xd0, 0xff,
+   0xb1, 0x7f, 0x05, 0xa2, 0xff, 0xff, 0x5f, 0x02, 0xd0, 0x2f, 0x44, 0x7e,
+   0x00, 0xd2, 0xbf, 0x36, 0xf8, 0x4a, 0xea, 0x06, 0x04, 0xf8, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x07, 0xfe, 0x17, 0x94, 0xbe, 0x00, 0xfd, 0x87, 0x48,
+   0xfe, 0x02, 0xf5, 0xbf, 0xe0, 0xff, 0x02, 0xc1, 0xff, 0xff, 0xbf, 0x00,
+   0xa0, 0x5f, 0x80, 0x5f, 0x24, 0xf4, 0xff, 0x2f, 0xfe, 0x95, 0xea, 0x0b,
+   0x40, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0xf4, 0xbf, 0x00, 0xbd,
+   0x25, 0xa5, 0x1f, 0x00, 0xfa, 0x15, 0xd4, 0xff, 0xd1, 0xff, 0x2d, 0xc0,
+   0xff, 0xff, 0xbf, 0x48, 0xe1, 0x5f, 0xa9, 0xbe, 0x40, 0xa0, 0xff, 0xbf,
+   0xfa, 0xff, 0xfe, 0x2b, 0x04, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85,
+   0xfa, 0x6f, 0x80, 0x7f, 0xa0, 0xe8, 0x0b, 0x80, 0x7e, 0x03, 0xfa, 0xbf,
+   0xd0, 0xbf, 0x4a, 0xe0, 0xff, 0xff, 0x7f, 0x02, 0xb4, 0x7f, 0x52, 0x7f,
+   0x11, 0xd0, 0xff, 0x6f, 0xff, 0xdb, 0xf7, 0x07, 0x40, 0xfb, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x0f, 0xf6, 0xff, 0x43, 0xfd, 0x00, 0xa0, 0x5f, 0x3d,
+   0xfa, 0x06, 0xd0, 0xff, 0xa1, 0xff, 0x90, 0xd4, 0xff, 0xff, 0xff, 0x12,
+   0xf4, 0xf7, 0xf7, 0x7f, 0x03, 0xc1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x5f,
+   0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0xfc, 0x5f, 0xa2, 0x5f,
+   0x00, 0xa0, 0xb7, 0xe5, 0xfd, 0x02, 0xf4, 0xbf, 0xf0, 0xbf, 0x00, 0xe8,
+   0xff, 0xff, 0xff, 0x85, 0xea, 0xff, 0xde, 0xff, 0x92, 0xd0, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0x6f, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
+   0xf4, 0xff, 0x62, 0xff, 0x00, 0xc0, 0x6f, 0x5f, 0xff, 0x25, 0xd4, 0xff,
+   0xa1, 0x7f, 0x01, 0xf8, 0xff, 0xff, 0xff, 0x0b, 0xfc, 0xff, 0xff, 0xff,
+   0x87, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xa0, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x05, 0xfe, 0xff, 0xab, 0xbf, 0xaa, 0xea, 0xff, 0xff,
+   0xff, 0x8a, 0xf4, 0x7f, 0xf5, 0xff, 0x54, 0xf7, 0xff, 0xff, 0xbf, 0xf7,
+   0xff, 0xff, 0xfd, 0xff, 0xbd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xf4, 0xff, 0xeb, 0xff,
+   0xa5, 0xaa, 0xff, 0xfb, 0xff, 0x5b, 0xfd, 0xff, 0xd5, 0xff, 0x23, 0xed,
+   0xff, 0xff, 0xff, 0x5f, 0xf5, 0xff, 0xff, 0xff, 0xf7, 0xea, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b,
+   0xff, 0xff, 0xfd, 0x7f, 0x5b, 0xfd, 0xdf, 0xff, 0xff, 0x6f, 0xf7, 0xff,
+   0xf5, 0xdf, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0xff,
+   0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xee, 0xfe, 0xff, 0xff, 0xff, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xfa, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x5f, 0xdd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0x5f, 0xfd, 0xff, 0xaa,
+   0xfe, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xff,
+   0xa6, 0xfe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x51, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xbf, 0xfe, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0x77, 0xff,
+   0x7f, 0xf7, 0xff, 0xaf, 0xfd, 0xff, 0xff, 0xff, 0x5f, 0xfa, 0xff, 0x7f,
+   0xff, 0x5f, 0xea, 0xff, 0x4b, 0xfb, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x57,
+   0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xff, 0xff, 0xdd, 0xff,
+   0xff, 0xff, 0xc2, 0xff, 0x0f, 0xfc, 0xef, 0x80, 0xfe, 0xff, 0xdf, 0xff,
+   0xdf, 0xa2, 0xff, 0xef, 0xff, 0xff, 0x4a, 0xff, 0x2f, 0xf6, 0xff, 0xeb,
+   0xff, 0xff, 0xff, 0xaf, 0x08, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+   0xfa, 0xbf, 0xf5, 0xff, 0xff, 0xff, 0x06, 0xfd, 0xbf, 0xe8, 0xfd, 0x93,
+   0xda, 0xfe, 0xbf, 0xfe, 0x37, 0x60, 0xff, 0x5f, 0xfd, 0x2f, 0xa0, 0xff,
+   0x42, 0xfc, 0xbf, 0xb2, 0xff, 0xff, 0xff, 0x0b, 0x00, 0xfe, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x05, 0xff, 0x57, 0xc8, 0xfe, 0xff, 0xff, 0x91, 0xdf,
+   0x0e, 0x76, 0xf7, 0x08, 0x76, 0xfb, 0x17, 0xff, 0x2f, 0xa4, 0xff, 0x1b,
+   0xff, 0x3f, 0xa2, 0xfe, 0x03, 0xe8, 0xff, 0xe5, 0xff, 0xff, 0xff, 0x4f,
+   0x00, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfa, 0x3f, 0xa1, 0xff,
+   0xff, 0xff, 0x05, 0xfd, 0x2d, 0xea, 0xc5, 0x41, 0x6c, 0xfd, 0x1f, 0xfd,
+   0x17, 0x41, 0xff, 0x0f, 0xfd, 0xaf, 0xc0, 0xff, 0x2a, 0xfa, 0x3f, 0xb0,
+   0x7f, 0x7f, 0xfb, 0x05, 0x21, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17,
+   0xfd, 0x07, 0xa2, 0xff, 0xff, 0xff, 0x41, 0xaf, 0x0e, 0xbc, 0xea, 0x0a,
+   0x5a, 0xfa, 0x57, 0xff, 0x2f, 0x85, 0xfe, 0x1b, 0xea, 0x7f, 0xa5, 0xfe,
+   0x0b, 0xea, 0xff, 0xe9, 0xff, 0xea, 0xd7, 0x0b, 0x01, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x16, 0xfd, 0x2f, 0x24, 0xfd, 0x76, 0xff, 0x07, 0x3d,
+   0x3c, 0xe8, 0xe0, 0x12, 0x29, 0xfc, 0x2f, 0xfd, 0x0b, 0xa2, 0x7f, 0x15,
+   0xbd, 0x2f, 0xc1, 0xff, 0x25, 0xf4, 0x5f, 0xe8, 0xdf, 0xb6, 0xfa, 0x0b,
+   0x40, 0xfe, 0xef, 0xfe, 0xff, 0xff, 0xff, 0x0b, 0xf6, 0x2b, 0x45, 0xdf,
+   0xdb, 0xfd, 0x49, 0x4b, 0x2c, 0x54, 0xea, 0x89, 0x44, 0xfe, 0xaf, 0xfe,
+   0x3f, 0xa4, 0xfe, 0x05, 0xe0, 0x7f, 0xa8, 0xfe, 0x25, 0xea, 0x7f, 0xdb,
+   0x3f, 0xe8, 0xa0, 0x0b, 0x41, 0xfa, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x1f,
+   0xfd, 0x0f, 0x41, 0xbf, 0x5a, 0xfb, 0x03, 0x9a, 0x2c, 0x58, 0xc8, 0x03,
+   0x4a, 0xfa, 0x17, 0xfd, 0x17, 0xa1, 0x5f, 0x12, 0xd5, 0xaf, 0xd0, 0xff,
+   0x0a, 0xf4, 0xff, 0xfa, 0x5f, 0x90, 0xe0, 0x83, 0x80, 0xfe, 0xad, 0xfe,
+   0xff, 0xff, 0xff, 0x13, 0xfe, 0x2b, 0xa2, 0x7d, 0x2a, 0xed, 0x45, 0x0b,
+   0x1d, 0x12, 0xe9, 0x48, 0x88, 0xfe, 0x0a, 0xfb, 0x7f, 0xd2, 0xff, 0x00,
+   0xa0, 0x2f, 0x42, 0xff, 0x53, 0xec, 0xff, 0xff, 0xbf, 0xa8, 0xa2, 0x1f,
+   0x82, 0xfc, 0x17, 0xfd, 0xff, 0xff, 0xff, 0x17, 0xe8, 0x2f, 0x44, 0x7f,
+   0x20, 0xf4, 0x85, 0x24, 0x3d, 0x24, 0xd0, 0x09, 0x81, 0xfe, 0x0b, 0xfe,
+   0xaf, 0xba, 0xbf, 0x00, 0xe0, 0x1f, 0x50, 0xff, 0x02, 0xfa, 0xdf, 0xf7,
+   0xbf, 0x50, 0xa0, 0x03, 0x00, 0xff, 0x17, 0xff, 0xff, 0xff, 0xff, 0x0b,
+   0xfd, 0x17, 0xc1, 0x5f, 0x10, 0xe8, 0x01, 0x00, 0x0e, 0x00, 0xe4, 0x02,
+   0x10, 0xfb, 0x06, 0xfd, 0xff, 0xf2, 0xbf, 0x00, 0xa0, 0x7f, 0xa2, 0xfd,
+   0x53, 0xe8, 0xff, 0xff, 0xbf, 0xd0, 0xc1, 0x2f, 0x40, 0xfa, 0x07, 0xfa,
+   0xff, 0xff, 0xff, 0x17, 0xfa, 0x2f, 0x04, 0xdf, 0x40, 0xa8, 0x03, 0x85,
+   0x2c, 0x00, 0xc0, 0x82, 0x82, 0xfe, 0x0a, 0xfd, 0x7f, 0xff, 0xff, 0x0e,
+   0xd5, 0x9f, 0xe8, 0xff, 0x8a, 0xfe, 0xff, 0xff, 0x5f, 0x50, 0xe2, 0xaf,
+   0x88, 0xfe, 0x15, 0xff, 0xff, 0xff, 0xff, 0x4a, 0xed, 0x9f, 0xf0, 0x7d,
+   0x11, 0xe1, 0x04, 0x20, 0x0b, 0x21, 0xe8, 0x01, 0x10, 0xbf, 0xa0, 0xfe,
+   0xff, 0xee, 0xff, 0x15, 0xfa, 0xbf, 0xa2, 0xff, 0xab, 0xfa, 0xff, 0xff,
+   0xff, 0xd0, 0x80, 0x7f, 0x81, 0xfc, 0x17, 0xfa, 0xff, 0xff, 0xff, 0x97,
+   0xfc, 0x37, 0x82, 0xbf, 0x22, 0xc0, 0xad, 0x00, 0x7e, 0x85, 0xa2, 0x5f,
+   0x00, 0xfd, 0x81, 0xfa, 0xff, 0xff, 0xff, 0x0d, 0xed, 0xff, 0xfd, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xbf, 0x20, 0xe2, 0xaf, 0x00, 0xff, 0xdf, 0xff,
+   0xff, 0xea, 0xff, 0x7f, 0xff, 0x06, 0xa0, 0x7e, 0x81, 0xd0, 0x57, 0x08,
+   0x1a, 0x10, 0xe4, 0x15, 0x84, 0x3e, 0xa0, 0xf6, 0xff, 0xff, 0xdf, 0x2b,
+   0xfa, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0x80, 0x80, 0x7f,
+   0x41, 0xfa, 0xbf, 0xfe, 0xff, 0xdf, 0xff, 0xee, 0xf7, 0x3f, 0x80, 0xff,
+   0x02, 0xc1, 0x17, 0x01, 0x7d, 0xb1, 0xa0, 0x97, 0x88, 0xfa, 0x91, 0xec,
+   0xff, 0xff, 0xff, 0x16, 0xed, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0x20, 0xe0, 0xff, 0x80, 0xfe, 0xff, 0xff, 0xbf, 0xf0, 0xff, 0xff,
+   0xfe, 0x17, 0x60, 0xaf, 0x00, 0xb0, 0x2d, 0x14, 0x1a, 0x94, 0xd0, 0x0b,
+   0x00, 0x5f, 0x48, 0xe8, 0xff, 0xff, 0xff, 0x25, 0xe9, 0xff, 0xef, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x84, 0x80, 0x5f, 0x81, 0xfc, 0xff, 0xff,
+   0xff, 0xa1, 0xff, 0xff, 0xff, 0xf7, 0x6f, 0x7f, 0x50, 0xe2, 0x2b, 0x00,
+   0xbd, 0x68, 0xe0, 0x1b, 0x09, 0xfc, 0x80, 0xe8, 0xff, 0xff, 0xbf, 0x84,
+   0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0xa0, 0x6f,
+   0x01, 0xfe, 0xff, 0xff, 0x3f, 0xd0, 0xff, 0xff, 0xff, 0x5f, 0xb5, 0x5f,
+   0x00, 0xf4, 0x87, 0x04, 0x2a, 0x2a, 0xd5, 0x45, 0x84, 0xbe, 0x20, 0xe8,
+   0xff, 0xff, 0xff, 0x14, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x00, 0x82, 0x5f, 0x44, 0xfa, 0xff, 0xff, 0x7f, 0x41, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xdf, 0x50, 0xd0, 0x87, 0x10, 0x1c, 0x2a, 0xa8, 0x83,
+   0x80, 0xfc, 0xa4, 0xe8, 0xff, 0xff, 0xbf, 0x00, 0xc0, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x5f, 0xe8, 0xf6, 0x2f, 0x00, 0xfa, 0xff, 0xff,
+   0xbf, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x7f, 0x96, 0xfe, 0x15, 0x09,
+   0x2d, 0x9a, 0xd0, 0x25, 0x05, 0x7b, 0x03, 0xf4, 0xff, 0xff, 0xff, 0x00,
+   0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0xfe, 0x5f,
+   0x00, 0xfc, 0xff, 0xff, 0xbf, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+   0xb4, 0xf5, 0x57, 0x15, 0xec, 0x36, 0xe2, 0xd5, 0x0a, 0xfe, 0x05, 0xe8,
+   0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xb0, 0xff, 0x2b, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0xd0, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xf7, 0x0b, 0x5d, 0x2f, 0xa0, 0xb7,
+   0x8b, 0xfe, 0xf6, 0xfe, 0xff, 0xff, 0x7f, 0x2b, 0xd5, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff,
+   0xef, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x5f, 0x7f,
+   0xff, 0xfe, 0xf7, 0x77, 0xb7, 0xfd, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf5, 0xff, 0x5f,
+   0xa5, 0xff, 0xff, 0xff, 0xbf, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xb7, 0xfd, 0xaf, 0xfe, 0xff, 0xdf, 0xff, 0xff, 0xfe,
+   0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xed, 0xff,
+   0xbf, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xdf,
+   0xfa, 0xff, 0xea, 0xff, 0xbd, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xef, 0xff, 0xad, 0xea, 0x7f, 0xff, 0xff, 0x7f, 0xfd, 0x7f, 0xf5, 0xff,
+   0xab, 0xfa, 0xef, 0xfd, 0xff, 0x7f, 0xfb, 0xff, 0xeb, 0xff, 0xdf, 0xfd,
+   0xbf, 0xf6, 0xff, 0xbf, 0xfc, 0xbf, 0xd9, 0xff, 0xf7, 0xfd, 0xff, 0xff,
+   0xff, 0x0b, 0xfd, 0x7f, 0xbd, 0xfe, 0x57, 0xdb, 0x9f, 0xfa, 0xff, 0xaf,
+   0xf6, 0xff, 0xd4, 0xff, 0xff, 0xef, 0x3f, 0xfe, 0xff, 0xff, 0xec, 0x5f,
+   0xb1, 0x7f, 0x75, 0xf7, 0x6f, 0xfc, 0xff, 0xbb, 0xf5, 0x7f, 0xd1, 0xff,
+   0x96, 0xfa, 0xdf, 0xda, 0xff, 0x2b, 0xfd, 0xef, 0xa9, 0xda, 0x55, 0xda,
+   0x3f, 0xf5, 0xff, 0x7f, 0xf4, 0x5f, 0xf1, 0x7f, 0x21, 0xfa, 0x7f, 0xea,
+   0xff, 0x5f, 0xe9, 0xff, 0x62, 0xff, 0xc7, 0xec, 0x5f, 0xea, 0xff, 0x4f,
+   0xfc, 0xdf, 0x68, 0xff, 0x25, 0xfb, 0x7f, 0xef, 0xff, 0x87, 0xfe, 0x3f,
+   0x52, 0x7d, 0x4b, 0xd2, 0xaf, 0xa8, 0xff, 0x05, 0xff, 0xaf, 0x44, 0xff,
+   0x53, 0xf4, 0x57, 0xfa, 0xff, 0xb7, 0xfc, 0x5f, 0xd1, 0x7f, 0xa9, 0xf4,
+   0xbf, 0xd0, 0xff, 0x1f, 0xfa, 0xbf, 0xc0, 0xff, 0x05, 0xe8, 0x5f, 0x4c,
+   0xff, 0x2d, 0xf4, 0x6f, 0x05, 0x7d, 0x00, 0x80, 0x5f, 0x68, 0xbf, 0x1f,
+   0xe8, 0x3f, 0xc0, 0x7e, 0x82, 0xd4, 0x7f, 0xa0, 0xff, 0x2f, 0xd4, 0x5f,
+   0x82, 0xfe, 0x85, 0xe0, 0x6f, 0xea, 0x7f, 0x05, 0xfd, 0x57, 0xa8, 0xbf,
+   0x00, 0xfe, 0xab, 0xca, 0xbf, 0x83, 0xfe, 0x1f, 0x20, 0xb8, 0x01, 0xd0,
+   0x55, 0xa1, 0x7f, 0x41, 0xf6, 0x85, 0xa4, 0xdf, 0x28, 0xf2, 0xaf, 0xea,
+   0xfe, 0x96, 0xfc, 0x3f, 0x40, 0xbf, 0x28, 0xea, 0xaf, 0xb0, 0xff, 0x2b,
+   0xf5, 0x2f, 0x52, 0xff, 0x55, 0xf0, 0x3f, 0x52, 0xff, 0x2a, 0xfa, 0x3f,
+   0x00, 0x38, 0xa8, 0x82, 0x17, 0x24, 0x7c, 0x45, 0xd4, 0x2f, 0x04, 0xba,
+   0x42, 0xd0, 0x5f, 0x80, 0xfd, 0x15, 0xd1, 0x57, 0x4a, 0xfc, 0x42, 0xc8,
+   0x4f, 0xd2, 0xff, 0x82, 0xfe, 0xaf, 0xe0, 0xbf, 0x00, 0xff, 0x47, 0xe4,
+   0x7f, 0x85, 0xfe, 0x2f, 0xa0, 0x5c, 0x54, 0xc9, 0x05, 0x00, 0x2f, 0x00,
+   0xe0, 0x01, 0x00, 0x5d, 0x00, 0xe0, 0x8b, 0xaa, 0xbe, 0x42, 0xf4, 0x0b,
+   0x80, 0x7e, 0x01, 0xe0, 0x5d, 0xb0, 0xff, 0x2a, 0xfa, 0x0f, 0x8a, 0xfe,
+   0x2a, 0xe8, 0x9f, 0x48, 0xff, 0x11, 0xf4, 0xbf, 0x84, 0x78, 0xe8, 0xc1,
+   0x05, 0x00, 0x7c, 0x00, 0xa0, 0x07, 0x00, 0x5d, 0x00, 0x82, 0x1f, 0x00,
+   0xfa, 0x04, 0xa0, 0x5f, 0x04, 0xfa, 0x04, 0xe4, 0x07, 0xc0, 0xbf, 0x00,
+   0xfd, 0x56, 0xe0, 0xbf, 0x00, 0xfd, 0x27, 0xa0, 0xbf, 0x04, 0xfd, 0x17,
+   0x50, 0x1c, 0xa8, 0xee, 0x2b, 0x15, 0x5d, 0x52, 0xd1, 0x2b, 0x0d, 0xbd,
+   0x52, 0xf1, 0x0b, 0x80, 0x7e, 0x01, 0xe0, 0x0b, 0x40, 0x7e, 0x2b, 0xf5,
+   0x9f, 0x90, 0xfe, 0x02, 0xf4, 0x0f, 0x40, 0xff, 0x01, 0xfa, 0x0f, 0x40,
+   0xff, 0x00, 0xf4, 0x3f, 0x00, 0x7a, 0xf4, 0xab, 0x0b, 0x12, 0xfd, 0x20,
+   0xd1, 0x0b, 0x11, 0x7d, 0x20, 0xc1, 0x7f, 0xa1, 0xfe, 0x16, 0xee, 0x7f,
+   0xd1, 0xfd, 0x0b, 0xed, 0x37, 0xc0, 0xff, 0x05, 0xf5, 0xb7, 0xc0, 0x7f,
+   0x05, 0xf4, 0xbf, 0xd0, 0xff, 0x13, 0xfd, 0x17, 0x08, 0x1d, 0xf8, 0xee,
+   0x17, 0x05, 0x5d, 0x52, 0xd0, 0x27, 0x0a, 0x5d, 0x51, 0xf0, 0xaf, 0xd0,
+   0xff, 0x8b, 0xfa, 0xaf, 0xa0, 0xff, 0x17, 0xfa, 0x6f, 0x81, 0xfe, 0x15,
+   0xf4, 0x3f, 0x81, 0xfe, 0x15, 0xec, 0x57, 0x81, 0xfe, 0x06, 0xe8, 0x37,
+   0x00, 0x7d, 0xe4, 0xff, 0x27, 0x08, 0x7d, 0x41, 0xe2, 0x16, 0x24, 0xff,
+   0x42, 0xa5, 0xbf, 0xa1, 0xfe, 0x1b, 0xea, 0xff, 0x41, 0x7f, 0x17, 0xfd,
+   0x5f, 0xd4, 0xff, 0x46, 0xec, 0x2f, 0x44, 0xff, 0x45, 0xf4, 0x5f, 0x44,
+   0xff, 0x25, 0xf4, 0x17, 0x10, 0x2e, 0xfc, 0xff, 0x15, 0xa5, 0x7f, 0x10,
+   0xf4, 0x27, 0x41, 0x3f, 0x10, 0xf8, 0x7f, 0xd1, 0xff, 0x17, 0xff, 0x3f,
+   0xf1, 0xff, 0x17, 0xf6, 0x3f, 0x02, 0xfd, 0x42, 0xf4, 0x7f, 0x88, 0xfe,
+   0x83, 0xd4, 0x2f, 0x44, 0xbd, 0xa3, 0xb4, 0xab, 0x00, 0x5c, 0xa0, 0xd5,
+   0x17, 0x80, 0xee, 0x02, 0xec, 0x0f, 0x40, 0xfd, 0x02, 0xf4, 0x7f, 0xd1,
+   0xff, 0x0f, 0xfa, 0x7f, 0x51, 0xff, 0x17, 0xfd, 0x47, 0x84, 0x7e, 0x85,
+   0xe0, 0x0b, 0x4a, 0xbe, 0x24, 0xe8, 0x2b, 0x88, 0xfe, 0x84, 0xe8, 0x07,
+   0xa0, 0x3b, 0x7c, 0xff, 0x0b, 0x60, 0x3f, 0x41, 0xf4, 0x15, 0xa2, 0x3f,
+   0x01, 0xda, 0x7f, 0x61, 0xff, 0x15, 0xfd, 0xff, 0xd0, 0xff, 0x0f, 0xff,
+   0x1f, 0x08, 0xfa, 0x21, 0xa8, 0x5f, 0x82, 0xfa, 0xa1, 0xa0, 0x4f, 0x04,
+   0x7a, 0x21, 0xa0, 0x05, 0x04, 0x6e, 0x40, 0xc1, 0x2f, 0xc2, 0x7e, 0x02,
+   0xd4, 0x27, 0x40, 0x7d, 0x51, 0xf4, 0x7f, 0xd1, 0xff, 0x17, 0xfb, 0xbf,
+   0xb1, 0xff, 0x1b, 0xfa, 0x0b, 0x82, 0x5e, 0x00, 0xe0, 0x03, 0x00, 0x3e,
+   0x00, 0xe8, 0x0b, 0x40, 0xbe, 0x00, 0xe8, 0x2b, 0x50, 0x5d, 0xa8, 0xd4,
+   0x05, 0x00, 0x7d, 0x11, 0xd2, 0x15, 0x25, 0xbb, 0x00, 0xaa, 0x6f, 0x61,
+   0xff, 0x17, 0xf6, 0x5f, 0xe1, 0xfe, 0x07, 0xf6, 0x17, 0x00, 0x78, 0x01,
+   0x81, 0x0f, 0x00, 0xf8, 0x01, 0xa0, 0x17, 0x00, 0x7a, 0x01, 0xa0, 0x43,
+   0x81, 0x78, 0x01, 0x90, 0x2d, 0x55, 0x6c, 0xa2, 0x88, 0x17, 0x21, 0xbc,
+   0x52, 0xc0, 0xbf, 0xc0, 0xfe, 0x0a, 0xec, 0xff, 0x80, 0x7f, 0x1d, 0xfc,
+   0x05, 0x14, 0x5e, 0x28, 0xe0, 0x85, 0x14, 0x5e, 0x48, 0xc2, 0x85, 0x12,
+   0x5c, 0xa8, 0xc0, 0x02, 0x24, 0x5e, 0x00, 0xe0, 0x13, 0x02, 0xb9, 0x50,
+   0xe2, 0x05, 0x8a, 0x7c, 0x20, 0xc9, 0x57, 0x51, 0xfb, 0x0b, 0xf5, 0x2b,
+   0xd1, 0xfe, 0x05, 0xd5, 0x8b, 0x00, 0xf8, 0x40, 0x82, 0x0d, 0x20, 0xb8,
+   0x00, 0x80, 0x0d, 0x00, 0xd8, 0x00, 0xc1, 0x42, 0x00, 0xf8, 0x02, 0xc0,
+   0x07, 0x00, 0x5c, 0x00, 0x80, 0x07, 0x00, 0x58, 0x00, 0x80, 0x2f, 0x00,
+   0xbe, 0x02, 0xc0, 0x2f, 0x00, 0xfc, 0x02, 0xe0, 0x05, 0x0a, 0x1c, 0x20,
+   0xc0, 0x03, 0x05, 0x1c, 0xa0, 0xa0, 0x03, 0x26, 0x3a, 0xa0, 0x80, 0x01,
+   0x00, 0xbc, 0x8d, 0xfa, 0x02, 0x08, 0x3c, 0x00, 0xc0, 0x05, 0x00, 0x3a,
+   0x00, 0xa0, 0x0f, 0x40, 0xfd, 0x10, 0xf4, 0x17, 0x40, 0xbf, 0x10, 0xd4,
+   0x05, 0x08, 0xb8, 0xa0, 0x80, 0x05, 0x08, 0xb8, 0xa0, 0x80, 0x0b, 0x04,
+   0x58, 0x80, 0x80, 0x85, 0x20, 0xf8, 0x09, 0xea, 0x47, 0x80, 0x78, 0x00,
+   0x90, 0x25, 0x00, 0xf8, 0x04, 0x80, 0x2f, 0x01, 0xfa, 0x02, 0xa0, 0x4f,
+   0x00, 0xfa, 0x02, 0xe0, 0x03, 0x22, 0x1a, 0x40, 0xa0, 0x03, 0x02, 0x3a,
+   0x80, 0xa0, 0x01, 0x04, 0x3a, 0x22, 0xa4, 0x55, 0x8a, 0xfe, 0x03, 0xfd,
+   0x15, 0x29, 0x5f, 0x55, 0xe5, 0x87, 0xaa, 0x5e, 0x50, 0xf5, 0x5b, 0x54,
+   0xbf, 0xa9, 0xf4, 0x57, 0xa5, 0xfe, 0x52, 0xb5, 0xaf, 0x4c, 0xfa, 0x4a,
+   0xa5, 0x5f, 0x56, 0xfa, 0x2a, 0xa5, 0xaf, 0x54, 0xfa, 0xa4, 0xc4, 0x45,
+   0x11, 0xfc, 0x8b, 0xfe, 0x57, 0x22, 0x7a, 0x21, 0xd4, 0x2f, 0x48, 0x7d,
+   0x25, 0xd1, 0x5f, 0x91, 0xfe, 0x05, 0xc9, 0xaf, 0x94, 0xfe, 0x0a, 0xe9,
+   0x95, 0x2a, 0xbd, 0x68, 0xa9, 0x45, 0x8d, 0x5a, 0xe9, 0xa8, 0x4b, 0x8b,
+   0x5a, 0x72, 0xa9, 0xbf, 0xef, 0xfb, 0x82, 0xfe, 0xd7, 0xdd, 0xff, 0xee,
+   0xfb, 0xdd, 0xb7, 0xff, 0x6d, 0xef, 0xb7, 0xf7, 0xff, 0xfe, 0xfe, 0xbf,
+   0xeb, 0xff, 0x77, 0xff, 0xbf, 0x6f, 0xfd, 0xdb, 0xef, 0x7f, 0xfb, 0x7e,
+   0xab, 0xef, 0xbf, 0xfe, 0xfe, 0xd6, 0xfb, 0x77, 0x6d, 0xff, 0xbf, 0xfd,
+   0x7f, 0xdb, 0xfe, 0xad, 0xee, 0xbf, 0xbd, 0xfd, 0xed, 0xfd, 0xff, 0xae,
+   0xfd, 0xdb, 0xfb, 0xff, 0xde, 0xfe, 0xef, 0xfa, 0xf7, 0xfe, 0xbf, 0xef,
+   0xfa, 0xef, 0xdf, 0xff, 0xff, 0xfd, 0xdb, 0xaf, 0xff, 0xff, 0xee, 0xff,
+   0xff, 0xff, 0xd7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf,
+   0x7f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+   0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xfb, 0xdf, 0xfd, 0xff,
+   0x5f, 0xfd, 0x7f, 0xf7, 0xff, 0xaf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0xff, 0xeb, 0xff, 0xff, 0xed, 0xff, 0x57, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xed, 0xf7, 0xff, 0xff, 0xdf, 0xff, 0xaf, 0xea, 0xff, 0x6f,
+   0xeb, 0x7f, 0xf5, 0xff, 0xff, 0xf6, 0xff, 0xda, 0xff, 0x6d, 0xeb, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xfd, 0xaf, 0xfe, 0xff, 0xad, 0xff,
+   0x5f, 0xfd, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xdf, 0xfe, 0xff, 0x5b, 0xfe,
+   0xfb, 0xbd, 0xff, 0x82, 0xf4, 0x2f, 0xfa, 0xff, 0x57, 0xfa, 0x5f, 0xe0,
+   0xff, 0x03, 0xf4, 0xbf, 0xb5, 0xff, 0xff, 0xff, 0xbf, 0xd6, 0x7f, 0xc1,
+   0xff, 0x7f, 0xe3, 0xff, 0x82, 0xfe, 0xaf, 0xf6, 0xff, 0xbf, 0xf4, 0xb7,
+   0xfb, 0xff, 0x57, 0xfb, 0x27, 0x6b, 0xff, 0x8b, 0xd0, 0x7f, 0xd0, 0xff,
+   0x1f, 0xf6, 0xff, 0x48, 0x7f, 0x4b, 0xd1, 0x7f, 0xef, 0xff, 0xff, 0xff,
+   0x77, 0x15, 0xfd, 0x0b, 0xfd, 0xff, 0x45, 0xff, 0x0f, 0xfa, 0xff, 0xae,
+   0xff, 0xb7, 0xe8, 0xae, 0xf6, 0xff, 0x57, 0xfa, 0x01, 0xa0, 0xbd, 0x02,
+   0xea, 0x2f, 0xf5, 0xff, 0x2b, 0xfa, 0x2f, 0xb0, 0xff, 0x05, 0xf4, 0xd7,
+   0xaa, 0xff, 0xff, 0xfb, 0x9f, 0x00, 0xff, 0x45, 0xff, 0xb7, 0xa2, 0xff,
+   0x85, 0xfa, 0x5f, 0x6b, 0xff, 0x2f, 0xfc, 0x03, 0xfa, 0xff, 0x02, 0xec,
+   0x05, 0x20, 0x7f, 0x05, 0xd8, 0x7f, 0xa0, 0xff, 0x8f, 0xfa, 0xbf, 0xa2,
+   0x7e, 0x01, 0xe8, 0x3f, 0xa2, 0xfe, 0xf5, 0xd7, 0x37, 0x00, 0xfa, 0x0b,
+   0xda, 0xbf, 0xa8, 0xfe, 0x12, 0xd4, 0x37, 0x85, 0xfe, 0x2d, 0xd1, 0x0f,
+   0xa8, 0xff, 0x07, 0xf8, 0x43, 0x04, 0x7d, 0x21, 0xf2, 0xaf, 0xd4, 0x7f,
+   0x0b, 0xfd, 0x2f, 0x44, 0x7f, 0x85, 0xf6, 0x2f, 0x45, 0xbf, 0x5a, 0xeb,
+   0x05, 0x02, 0xbd, 0x4a, 0xf5, 0x57, 0xe0, 0xbb, 0x41, 0xf2, 0x2f, 0xa4,
+   0x5e, 0x0b, 0xfa, 0x25, 0xf2, 0x7e, 0xa1, 0xe4, 0x85, 0x00, 0x7a, 0x02,
+   0xa4, 0xbf, 0xa8, 0xfe, 0x0a, 0xea, 0xaf, 0x40, 0x7d, 0x09, 0xd4, 0x2f,
+   0x04, 0xfd, 0xf2, 0xaa, 0x27, 0x04, 0x7a, 0x09, 0xad, 0xb7, 0x40, 0x7e,
+   0x13, 0xa4, 0x15, 0x85, 0x7a, 0x15, 0xa2, 0x07, 0xa2, 0x7f, 0x25, 0xe8,
+   0x05, 0x0a, 0x5e, 0xa8, 0xd0, 0x05, 0x00, 0xbd, 0x20, 0xd1, 0x05, 0x12,
+   0x3b, 0x00, 0xf0, 0x05, 0x11, 0xbb, 0xac, 0xe2, 0x05, 0x00, 0x5d, 0x20,
+   0xe0, 0x05, 0x15, 0x5d, 0xa0, 0xd0, 0x07, 0x12, 0xbe, 0x40, 0xc0, 0x25,
+   0xa8, 0xfa, 0x42, 0xd0, 0x43, 0x12, 0x78, 0x20, 0xc0, 0x07, 0x0a, 0x7a,
+   0x21, 0xd0, 0x0d, 0x02, 0xfd, 0xa0, 0x80, 0x17, 0x02, 0xfe, 0xa0, 0xc0,
+   0x45, 0x15, 0xb8, 0xd0, 0x80, 0x07, 0x02, 0x78, 0x20, 0xc0, 0x0b, 0x05,
+   0x38, 0xa1, 0x80, 0x0d, 0x00, 0xfd, 0x82, 0xe4, 0x05, 0x0d, 0x2e, 0xa0,
+   0xd0, 0x12, 0x01, 0x2d, 0x80, 0xa0, 0x03, 0x08, 0x1a, 0x12, 0xf0, 0x02,
+   0x14, 0xba, 0x40, 0xe2, 0x05, 0x00, 0x3d, 0x20, 0xd0, 0x85, 0x16, 0x5d,
+   0x54, 0xd1, 0x42, 0x0a, 0x5d, 0x40, 0xa2, 0x27, 0x00, 0xbe, 0x20, 0xe8,
+   0x01, 0x50, 0xfc, 0x00, 0xc1, 0x47, 0x16, 0x7c, 0x58, 0xc1, 0x47, 0x15,
+   0x7a, 0x60, 0xc1, 0x46, 0x15, 0xba, 0x05, 0xd4, 0xc3, 0x28, 0x78, 0xe9,
+   0xd1, 0x05, 0x0a, 0x5d, 0x60, 0xc1, 0x07, 0x1b, 0x7d, 0x89, 0xc0, 0x27,
+   0x55, 0xf8, 0x05, 0xc8, 0x05, 0x0d, 0x2c, 0x50, 0xd0, 0x82, 0x0d, 0x2c,
+   0xb4, 0xa0, 0x82, 0x0b, 0x1c, 0xd4, 0xc0, 0x01, 0x0b, 0xfc, 0x02, 0xe8,
+   0x02, 0x80, 0x2e, 0x54, 0xe1, 0x43, 0x17, 0x3e, 0xb4, 0xb0, 0x45, 0x15,
+   0xde, 0x20, 0xd2, 0x15, 0x02, 0x7c, 0x02, 0xf0, 0x12, 0xb0, 0x5c, 0x01,
+   0xd1, 0x45, 0xbd, 0x5c, 0xe8, 0xc5, 0x85, 0xbe, 0x78, 0xd8, 0x8b, 0xc7,
+   0xbe, 0xf8, 0x05, 0xe8, 0xc7, 0x10, 0x7c, 0x70, 0xa1, 0x47, 0x16, 0x78,
+   0xe4, 0xc1, 0x05, 0x17, 0xba, 0x45, 0xd4, 0x27, 0x5a, 0xf9, 0x04, 0xc2,
+   0x81, 0x0e, 0x3c, 0x88, 0xe0, 0x81, 0x17, 0x5c, 0x74, 0x91, 0x43, 0x0b,
+   0x1a, 0x74, 0xe1, 0x81, 0x15, 0x7e, 0x05, 0xf5, 0x00, 0x14, 0x2c, 0x54,
+   0xe1, 0x82, 0x0d, 0x2f, 0x58, 0xf1, 0x43, 0x0d, 0xfe, 0x02, 0xe8, 0x17,
+   0x05, 0xfc, 0x62, 0xe0, 0x05, 0xb4, 0x78, 0x80, 0xa0, 0x87, 0xae, 0x58,
+   0xec, 0xa3, 0x45, 0x5f, 0x7a, 0x74, 0x85, 0x47, 0x57, 0xf8, 0x15, 0xd4,
+   0x87, 0xa0, 0x78, 0x70, 0xc1, 0x07, 0x1d, 0x7c, 0x70, 0x81, 0x07, 0x1b,
+   0xfc, 0x2f, 0xfa, 0x17, 0x54, 0xf8, 0x84, 0xc2, 0x43, 0x0b, 0x2c, 0x04,
+   0xe1, 0x41, 0x1b, 0x3a, 0x58, 0xc1, 0x45, 0x2b, 0x2c, 0xd8, 0xc1, 0x82,
+   0x0f, 0x7c, 0x41, 0xf0, 0x21, 0x14, 0x5c, 0xd4, 0xb0, 0x45, 0x0b, 0x5b,
+   0xd4, 0xf0, 0x42, 0x0d, 0xfb, 0x02, 0xf4, 0x25, 0x00, 0xbd, 0x62, 0xc0,
+   0x06, 0x9a, 0x7c, 0x28, 0xa0, 0x87, 0x16, 0x5a, 0x70, 0x85, 0x43, 0x16,
+   0x5c, 0x50, 0xc9, 0x05, 0x3a, 0x79, 0x05, 0xc4, 0x07, 0x04, 0x58, 0xb0,
+   0xd1, 0x07, 0x1b, 0x5e, 0xa8, 0xc1, 0x07, 0x1b, 0xfe, 0x17, 0xed, 0x0f,
+   0x00, 0xfd, 0x42, 0xc3, 0x45, 0x25, 0x2c, 0x00, 0xd0, 0x41, 0x15, 0x3c,
+   0x94, 0xd0, 0x85, 0x95, 0x3c, 0xb4, 0xc0, 0x45, 0x05, 0xfc, 0x40, 0xf0,
+   0x82, 0x08, 0x3d, 0x54, 0xd0, 0x45, 0x05, 0x3a, 0x50, 0xb0, 0x45, 0x05,
+   0xfd, 0x0d, 0xfe, 0x25, 0x02, 0x7a, 0x44, 0xa0, 0x05, 0x0a, 0x7d, 0x54,
+   0xa0, 0x0f, 0x12, 0x6d, 0x20, 0xa1, 0x07, 0x04, 0xfa, 0x20, 0xa1, 0x0b,
+   0x15, 0x7a, 0xa1, 0xc2, 0x07, 0x12, 0xfd, 0x50, 0xd1, 0x0d, 0x14, 0xfe,
+   0x52, 0xe1, 0x0d, 0x14, 0xfd, 0x15, 0xe8, 0x0d, 0xa4, 0xfe, 0x81, 0xc2,
+   0x43, 0x01, 0x5d, 0x20, 0xd2, 0x05, 0x04, 0xbe, 0x50, 0xd0, 0x25, 0x09,
+   0x5d, 0x90, 0xd0, 0x03, 0x00, 0xdf, 0xa8, 0xe0, 0x02, 0x09, 0x5e, 0x20,
+   0xf0, 0x23, 0x09, 0x3b, 0x20, 0xd0, 0x07, 0x09, 0xfd, 0x0b, 0xfd, 0x13,
+   0xd0, 0x5b, 0x24, 0xa0, 0x01, 0x22, 0x5d, 0x40, 0xd0, 0xaf, 0x40, 0xbd,
+   0x02, 0xe4, 0x0f, 0x20, 0xfd, 0x02, 0xea, 0x5f, 0x44, 0xbc, 0xb5, 0xd7,
+   0x17, 0x40, 0xfa, 0x03, 0xc0, 0x0f, 0x20, 0x7e, 0x43, 0xe8, 0x3d, 0x00,
+   0xfd, 0x02, 0xd0, 0x07, 0x52, 0xff, 0x80, 0xc0, 0x05, 0x80, 0x5f, 0x54,
+   0xd0, 0x1b, 0x20, 0xff, 0x02, 0xf2, 0x5b, 0x40, 0xdf, 0x02, 0xb0, 0x17,
+   0x20, 0xff, 0xfa, 0xea, 0x05, 0x80, 0xbf, 0x80, 0xfa, 0x37, 0x80, 0xfb,
+   0x00, 0xb2, 0x07, 0x20, 0xbf, 0x01, 0xf4, 0x42, 0xf8, 0x5f, 0x20, 0xe0,
+   0x01, 0x00, 0x7d, 0x50, 0xd1, 0x5b, 0xa0, 0xfe, 0x0a, 0xd4, 0x37, 0x80,
+   0xfe, 0x0a, 0xf4, 0xb7, 0xa0, 0xfe, 0xeb, 0xef, 0x27, 0x20, 0xfe, 0x03,
+   0xd0, 0x2f, 0x00, 0xff, 0x03, 0xf0, 0x3f, 0x40, 0x7e, 0x17, 0xe8, 0x06,
+   0xea, 0xff, 0x20, 0xc1, 0xbf, 0xfd, 0xdf, 0xea, 0xfa, 0xbf, 0xef, 0xdf,
+   0xeb, 0xf6, 0xdf, 0xff, 0xff, 0xeb, 0xff, 0x5f, 0xd7, 0xff, 0xff, 0xfd,
+   0x95, 0xef, 0x7f, 0x5f, 0xff, 0xff, 0x7f, 0x7f, 0xdd, 0xef, 0xdf, 0xef,
+   0xff, 0xf5, 0xf6, 0xdb, 0xfd, 0xbf, 0xd7, 0xfe, 0xab, 0x55, 0xbf, 0xdf,
+   0xeb, 0xff, 0xaa, 0xfe, 0xbf, 0xfe, 0x7f, 0x55, 0xff, 0x5f, 0xf5, 0xff,
+   0xba, 0x7e, 0xff, 0xff, 0xaf, 0xac, 0xff, 0x75, 0xf5, 0xaf, 0xd2, 0xff,
+   0x37, 0xfd, 0xbf, 0x5a, 0xff, 0xaf, 0xfd, 0x5f, 0xfb, 0xff, 0xda, 0xea,
+   0xff, 0xfe, 0xff, 0xfa, 0xff, 0xbf, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff,
+   0xff, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xdf,
+   0xff, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xfb, 0xfe, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xef, 0xfb, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xfe, 0x7f, 0xff,
+   0xff, 0xef, 0xf7, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xdf, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
+   0xff, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf5, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xbf, 0xf6, 0xff, 0x7f, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xfd,
+   0xff, 0x7f, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xf4, 0xff, 0xaf,
+   0xfc, 0xbf, 0xeb, 0xff, 0x57, 0xfd, 0xff, 0xff, 0xff, 0x17, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x77, 0xfe, 0xff, 0xff, 0xf8, 0xff, 0xd1, 0xff,
+   0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xe9, 0xff, 0xd1, 0xff, 0xff, 0xff,
+   0xaf, 0xfe, 0xff, 0x5f, 0xfd, 0x7f, 0xe9, 0xff, 0x6d, 0xfb, 0xdf, 0xf6,
+   0xff, 0x0f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xf5, 0xff, 0x6f,
+   0xed, 0x7f, 0x75, 0xff, 0xef, 0xfe, 0x2f, 0xed, 0xff, 0xaf, 0xfc, 0x5f,
+   0xf5, 0xff, 0xbe, 0xff, 0x6f, 0xea, 0xff, 0x5d, 0xf4, 0x7f, 0xa9, 0xff,
+   0x4b, 0xed, 0xff, 0xae, 0xff, 0x2b, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x7f, 0xec, 0xff, 0x6f, 0xe9, 0xff, 0xc2, 0xff, 0xdd, 0xeb, 0x7f, 0xfa,
+   0xff, 0x7f, 0xe9, 0xff, 0xa1, 0xff, 0xf5, 0xfa, 0x3f, 0xf0, 0xff, 0x17,
+   0xfb, 0x6f, 0xe0, 0xbf, 0x02, 0xf4, 0x2f, 0xeb, 0xfe, 0x45, 0xfc, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xaf, 0xb0, 0xff, 0x1f, 0xfc, 0xaf, 0x50, 0xff,
+   0xb2, 0xfc, 0xaf, 0xd0, 0xff, 0x8f, 0xfc, 0x5f, 0xd0, 0xff, 0x4b, 0xfd,
+   0xff, 0xd2, 0xff, 0x17, 0xfc, 0x5f, 0x40, 0xff, 0x05, 0xec, 0x6f, 0xca,
+   0xff, 0x8f, 0xfa, 0xbf, 0xdd, 0xff, 0xf7, 0xfa, 0x7f, 0xe5, 0xff, 0x5b,
+   0xe9, 0x7f, 0xc1, 0xfe, 0x67, 0xa9, 0x7f, 0xf2, 0xff, 0x3d, 0xe8, 0x5f,
+   0xa0, 0xfe, 0xaa, 0xfa, 0x2f, 0xd0, 0xff, 0x55, 0xf7, 0xaf, 0xca, 0x7f,
+   0x28, 0xf9, 0x9f, 0xa4, 0xff, 0x12, 0xff, 0x6b, 0xb7, 0x7e, 0x5b, 0xf7,
+   0x2f, 0x50, 0xff, 0x17, 0xfe, 0x5f, 0xa4, 0x7f, 0x85, 0xf4, 0x5f, 0xd1,
+   0xff, 0x87, 0xff, 0x3f, 0xc5, 0xff, 0x25, 0xfd, 0xff, 0x52, 0xff, 0x07,
+   0xfc, 0x5f, 0x48, 0xff, 0x02, 0xea, 0xbb, 0xa4, 0xfe, 0x27, 0xf4, 0xdb,
+   0xaa, 0xfa, 0x56, 0xd5, 0xff, 0xd2, 0xfe, 0x4a, 0xd0, 0x5f, 0x04, 0xfd,
+   0xaa, 0xea, 0x5f, 0xb1, 0xff, 0x1d, 0xfa, 0x6f, 0xa8, 0xdf, 0x45, 0xf4,
+   0x17, 0xd1, 0xbf, 0xaa, 0xea, 0x2b, 0x45, 0xbf, 0x28, 0xfd, 0x17, 0xc2,
+   0xbf, 0x88, 0xfa, 0x07, 0x55, 0xbf, 0x49, 0xfa, 0x2b, 0xa1, 0xbd, 0x15,
+   0xfd, 0x6b, 0xa8, 0xfe, 0x82, 0xa8, 0x3f, 0xd1, 0xff, 0x03, 0xfd, 0x9b,
+   0xe2, 0x7f, 0x93, 0xfe, 0x2f, 0x80, 0xfe, 0x00, 0xf8, 0x0f, 0x40, 0xfd,
+   0x01, 0xd0, 0x2f, 0x40, 0xfd, 0x01, 0xe8, 0x15, 0x00, 0x78, 0x01, 0xa0,
+   0x17, 0x00, 0x7a, 0x01, 0xa0, 0x0f, 0x00, 0xda, 0x04, 0xe0, 0x37, 0xd0,
+   0xff, 0x06, 0xfb, 0x37, 0x40, 0x7f, 0x05, 0xfa, 0x0b, 0xc0, 0x7f, 0x01,
+   0xec, 0x17, 0x80, 0xbf, 0x04, 0xfc, 0x0b, 0x40, 0x7f, 0x04, 0xf6, 0x03,
+   0x00, 0x5e, 0x00, 0xe0, 0x4f, 0x80, 0xfe, 0x04, 0xe0, 0x2b, 0x00, 0x7d,
+   0x00, 0xa4, 0x2f, 0x70, 0xff, 0x01, 0xfd, 0x2f, 0xe8, 0xff, 0x01, 0xfd,
+   0xaf, 0x0a, 0x7c, 0xa5, 0xd0, 0xaf, 0x0a, 0x7d, 0x51, 0xd0, 0xaf, 0x0a,
+   0xfd, 0x51, 0xc8, 0x97, 0x50, 0x58, 0xa8, 0xa0, 0x0b, 0x0a, 0xaa, 0xa0,
+   0xa2, 0x8b, 0x2a, 0xfa, 0xa8, 0xc0, 0xff, 0xc1, 0xff, 0x1f, 0xfb, 0xff,
+   0xa1, 0xff, 0x17, 0xfb, 0x0b, 0x44, 0x7f, 0x88, 0xf4, 0x0a, 0x48, 0xff,
+   0x84, 0xe8, 0x0b, 0x42, 0x5f, 0x44, 0xf0, 0x42, 0x40, 0x3c, 0x54, 0xd0,
+   0x85, 0x24, 0x3c, 0x48, 0xc0, 0x07, 0x08, 0x5c, 0x20, 0xa2, 0x5f, 0xf0,
+   0xff, 0x05, 0xfe, 0x9f, 0xf0, 0xff, 0x0d, 0xfe, 0xaf, 0x42, 0xfa, 0x21,
+   0xc0, 0xaf, 0x02, 0xba, 0x29, 0xa0, 0x57, 0x0a, 0xfc, 0x88, 0xc8, 0x0f,
+   0x48, 0x58, 0xd4, 0xeb, 0x0f, 0x08, 0xfa, 0x40, 0x81, 0x0d, 0x09, 0xb8,
+   0xa0, 0xa0, 0xff, 0xa1, 0xff, 0x1f, 0xfa, 0x7f, 0xa1, 0xff, 0x1b, 0xfa,
+   0x0b, 0x80, 0xbe, 0x04, 0xf4, 0x0b, 0x40, 0x7d, 0x00, 0xf4, 0x07, 0x40,
+   0x7f, 0x01, 0xe4, 0x82, 0x00, 0x5c, 0xb8, 0xb0, 0x03, 0x01, 0x5c, 0x00,
+   0xe0, 0x03, 0x00, 0xbe, 0x00, 0xc0, 0xbf, 0xd0, 0xff, 0x0b, 0xfd, 0xbf,
+   0xd0, 0xff, 0x17, 0xff, 0x17, 0x00, 0xba, 0x00, 0xc0, 0x17, 0x00, 0xfe,
+   0x02, 0xa0, 0x2f, 0x00, 0xba, 0x02, 0xd4, 0x05, 0x00, 0x38, 0x60, 0xe7,
+   0x0f, 0x00, 0xbc, 0x00, 0x80, 0x17, 0x00, 0xb8, 0x00, 0xa0, 0xbf, 0xb1,
+   0xff, 0x1b, 0xfa, 0xff, 0xb1, 0xff, 0x17, 0xfa, 0x8b, 0x4a, 0x7f, 0xa8,
+   0xf4, 0x85, 0x4a, 0x5d, 0x68, 0xd4, 0x85, 0x4a, 0x7d, 0xa8, 0xf0, 0x50,
+   0x48, 0x5c, 0x54, 0xd9, 0x01, 0x24, 0xbd, 0x48, 0xea, 0x0b, 0x52, 0xbe,
+   0x20, 0xc9, 0x7f, 0x60, 0xff, 0x07, 0xf7, 0x5f, 0x60, 0xff, 0x0a, 0xfe,
+   0x07, 0x09, 0xda, 0x48, 0xc4, 0x8d, 0x84, 0xba, 0x88, 0xe4, 0x8b, 0x00,
+   0x6e, 0x48, 0xc0, 0x83, 0x00, 0xb9, 0x00, 0x80, 0x17, 0x20, 0xb8, 0x00,
+   0x80, 0x0b, 0x42, 0xb8, 0x20, 0xa0, 0xdf, 0xc1, 0xbe, 0x1d, 0xec, 0xff,
+   0xc1, 0xfe, 0x1b, 0xf2, 0x05, 0x42, 0x3d, 0x90, 0xb0, 0x03, 0x09, 0x3e,
+   0x50, 0xd0, 0x0b, 0x4d, 0xbd, 0x90, 0xb4, 0x50, 0x28, 0x7c, 0x00, 0xd0,
+   0x0b, 0x82, 0x3e, 0xa0, 0xe4, 0x0b, 0x08, 0xbd, 0x80, 0xc2, 0x3b, 0x50,
+   0xfb, 0x0a, 0xf5, 0x2b, 0xb0, 0xff, 0x06, 0xed, 0x0f, 0x00, 0xfc, 0x00,
+   0xe0, 0x0f, 0x00, 0xfa, 0x00, 0xa0, 0x07, 0x00, 0x7a, 0x00, 0xe0, 0x03,
+   0x00, 0xd8, 0x0b, 0xe2, 0x0b, 0x00, 0xf8, 0x00, 0x80, 0x17, 0x00, 0xba,
+   0x00, 0xa0, 0x4f, 0x01, 0xfe, 0x02, 0xc4, 0x4f, 0x01, 0xfa, 0x10, 0xe0,
+   0x45, 0x00, 0x5e, 0x00, 0xc0, 0x03, 0x00, 0x5e, 0x00, 0xa0, 0x05, 0x00,
+   0x5e, 0x00, 0xc0, 0x00, 0x00, 0x7c, 0x41, 0xf4, 0x0f, 0x04, 0x7e, 0x01,
+   0xe0, 0x4b, 0x00, 0xfa, 0x00, 0xa0, 0x2b, 0xa0, 0xfe, 0x08, 0xf0, 0x2f,
+   0x80, 0xbe, 0x05, 0xd4, 0x1f, 0x4a, 0xfa, 0x25, 0xa5, 0xaf, 0x54, 0xfa,
+   0xa5, 0xe2, 0x5f, 0x22, 0xfa, 0x4a, 0xd2, 0x4b, 0x55, 0xfd, 0x0b, 0xf6,
+   0xbb, 0x90, 0x7a, 0x4b, 0xaa, 0xaf, 0xa4, 0xbe, 0x4f, 0xea, 0x4f, 0x04,
+   0xfa, 0x42, 0xa2, 0x4f, 0x10, 0xfc, 0x84, 0xe0, 0x4b, 0x20, 0xbe, 0x10,
+   0xd0, 0x0b, 0x00, 0xbe, 0x00, 0xa4, 0x0b, 0x88, 0xbe, 0x00, 0xe1, 0x05,
+   0x01, 0xff, 0x8b, 0xfa, 0x6f, 0x42, 0xff, 0x02, 0xf4, 0x3f, 0x41, 0xfb,
+   0x12, 0xd4, 0x2f, 0x51, 0xff, 0x0a, 0xe8, 0x17, 0x45, 0x7f, 0x11, 0xea,
+   0x9f, 0x8a, 0xfc, 0x45, 0xe5, 0x5f, 0xb5, 0xfc, 0x55, 0xe9, 0x5f, 0x29,
+   0xfc, 0x2b, 0xca, 0x57, 0x2e, 0xfd, 0x03, 0xfe, 0x7f, 0x4a, 0xfd, 0xaf,
+   0xd4, 0x7f, 0x4a, 0xff, 0xa7, 0xf4, 0x5f, 0x42, 0xee, 0x52, 0xe5, 0x7f,
+   0x10, 0xfd, 0xa7, 0xe8, 0x77, 0xf5, 0x7f, 0xb7, 0xbb, 0x7f, 0xeb, 0x7f,
+   0xd7, 0xf6, 0x77, 0xdb, 0x7f, 0xed, 0xf7, 0xdd, 0xf5, 0xff, 0x82, 0xfd,
+   0xff, 0xfd, 0xff, 0xbb, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xfb, 0xef, 0xbe,
+   0xff, 0xaf, 0xbe, 0xaf, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5f, 0xff, 0x7f,
+   0xff, 0xf7, 0x5e, 0xff, 0xdf, 0xef, 0xff, 0xfb, 0xff, 0xbf, 0xfe, 0xbf,
+   0x5f, 0xff, 0xbf, 0xfd, 0xef, 0xab, 0xff, 0xf7, 0xfa, 0xef, 0x57, 0xff,
+   0x7d, 0xff, 0xdf, 0xea, 0xfe, 0xfd, 0xf5, 0xff, 0xdd, 0xfe, 0xff, 0xfe,
+   0xff, 0xfb, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xdf,
+   0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xfd, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xf7, 0xef, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xfe, 0xef,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff,
+   0xaf, 0xdd, 0xff, 0xbf, 0xfd, 0xdf, 0xfa, 0xff, 0xff, 0xfa, 0x7f, 0xab,
+   0xff, 0x5f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5,
+   0xff, 0xff, 0xd7, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xaf,
+   0xfe, 0xff, 0xff, 0xff, 0x55, 0x52, 0xfd, 0x55, 0xf7, 0x7f, 0xff, 0xff,
+   0xbf, 0xf7, 0xff, 0xea, 0xff, 0x6b, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xba, 0xff, 0x6b, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xfb, 0x55, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xfe, 0x47,
+   0xec, 0x5f, 0xea, 0xff, 0x6f, 0xec, 0xdf, 0xa0, 0xff, 0x0f, 0xc9, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x51, 0xff, 0xff, 0x43, 0xff,
+   0x0f, 0xfb, 0xff, 0xff, 0xff, 0x5f, 0xe8, 0x05, 0xfa, 0xff, 0xff, 0xff,
+   0x09, 0x42, 0xfd, 0x2a, 0xf9, 0x2f, 0xf4, 0xff, 0x5f, 0xf8, 0x3f, 0xa1,
+   0xff, 0x15, 0xf5, 0xaf, 0xaa, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xe2,
+   0xff, 0x5f, 0xc9, 0xff, 0x12, 0xfd, 0x5f, 0xd5, 0xff, 0x5b, 0xf4, 0x03,
+   0xff, 0xff, 0x55, 0xfd, 0x03, 0x00, 0xdd, 0x05, 0xea, 0x7f, 0xaa, 0xff,
+   0xb7, 0xe8, 0x7f, 0xa0, 0xfe, 0x17, 0xc0, 0xff, 0xff, 0xfe, 0x7f, 0xfd,
+   0xff, 0x56, 0xdf, 0x85, 0xfa, 0xff, 0x89, 0xfe, 0x0b, 0xf5, 0xfb, 0x5f,
+   0xff, 0xb7, 0xd4, 0x07, 0xea, 0xff, 0xef, 0xeb, 0x4b, 0x40, 0x7d, 0x02,
+   0xf4, 0xaf, 0xf0, 0xff, 0x0d, 0xf6, 0x57, 0x4a, 0xff, 0x02, 0xfa, 0x2f,
+   0x80, 0xfe, 0x0b, 0xff, 0xdf, 0xfd, 0x7d, 0x89, 0xfd, 0x5b, 0x60, 0xbf,
+   0x42, 0xec, 0x17, 0xc8, 0x5e, 0x0b, 0xea, 0x2a, 0x5a, 0x5f, 0x25, 0xe8,
+   0x0b, 0x00, 0xfd, 0x08, 0xdc, 0xbf, 0xa0, 0xfe, 0x1b, 0xec, 0x5f, 0x42,
+   0xfd, 0x05, 0xd0, 0x2f, 0x8d, 0xfe, 0x17, 0xfa, 0x5f, 0x4b, 0x5f, 0x05,
+   0xd5, 0xd7, 0xc2, 0xfa, 0x05, 0xd8, 0x4f, 0x82, 0xfd, 0x1e, 0xd8, 0x0b,
+   0xc0, 0xfe, 0x45, 0xc9, 0x85, 0x8a, 0x1e, 0x22, 0xe9, 0x5f, 0xc0, 0xff,
+   0x05, 0xf4, 0x2f, 0x40, 0xff, 0x26, 0xfa, 0x5d, 0x60, 0xff, 0x05, 0xff,
+   0x3b, 0x00, 0x5c, 0x28, 0xf2, 0x05, 0x15, 0x1f, 0xa8, 0xe0, 0x21, 0x0d,
+   0x1e, 0xa0, 0xc2, 0x17, 0x29, 0x1f, 0x60, 0xa0, 0x17, 0x02, 0x7a, 0x20,
+   0xf8, 0x5f, 0x01, 0xdd, 0x4b, 0xd4, 0xbf, 0x40, 0xfd, 0x05, 0xd0, 0x57,
+   0x40, 0xfd, 0x17, 0xfa, 0x2f, 0x92, 0x1c, 0x69, 0xd0, 0x2b, 0x0a, 0xbc,
+   0xa8, 0xa4, 0x0b, 0x49, 0xbc, 0xa0, 0x80, 0x27, 0x40, 0xbd, 0xa2, 0x82,
+   0x8b, 0x44, 0x9a, 0x88, 0xa4, 0x2b, 0xd0, 0x7e, 0x05, 0xea, 0x45, 0x88,
+   0xbb, 0x12, 0xed, 0x8f, 0x80, 0xfe, 0x06, 0xfd, 0x2b, 0x00, 0x5d, 0x14,
+   0xf5, 0x85, 0x02, 0x3b, 0x20, 0xe1, 0x43, 0x02, 0x3b, 0x49, 0xd2, 0x15,
+   0x00, 0x3a, 0x50, 0xa8, 0x0b, 0x00, 0x3c, 0x00, 0xe0, 0x0f, 0x02, 0xfa,
+   0x00, 0xa0, 0x0f, 0x01, 0xfe, 0x20, 0xa0, 0x1b, 0x08, 0xfa, 0x55, 0xd5,
+   0x07, 0x04, 0x1a, 0x70, 0xa0, 0x0b, 0x16, 0xbc, 0x60, 0xa0, 0x8b, 0x1e,
+   0x7c, 0x88, 0x80, 0x97, 0x00, 0x7c, 0xc0, 0xa0, 0x17, 0x00, 0xba, 0x20,
+   0xa4, 0x05, 0x00, 0x5e, 0xa0, 0xe0, 0x0b, 0x04, 0x5c, 0x00, 0xe0, 0x07,
+   0x02, 0xba, 0x8a, 0xea, 0x42, 0x20, 0x5f, 0x14, 0xf0, 0x85, 0x0a, 0x3a,
+   0x54, 0xa1, 0x05, 0x02, 0xde, 0xa0, 0xe0, 0x27, 0x16, 0x5d, 0x08, 0xc1,
+   0x4d, 0x04, 0xba, 0x80, 0xe0, 0x1f, 0x0a, 0xfa, 0x00, 0xa0, 0x0f, 0x08,
+   0xfa, 0x40, 0xa0, 0x0d, 0x08, 0xbc, 0x29, 0xd9, 0x07, 0x02, 0x5c, 0xe0,
+   0xc0, 0x0b, 0x2a, 0xbc, 0xa0, 0xc2, 0x0b, 0x0e, 0xd8, 0x82, 0xc8, 0x0d,
+   0x14, 0xf8, 0x51, 0xc8, 0x03, 0x29, 0x5c, 0x28, 0xc2, 0x85, 0x24, 0x5c,
+   0x68, 0xc1, 0x81, 0x12, 0x5c, 0xa8, 0xc2, 0x83, 0x12, 0x3a, 0x00, 0xa0,
+   0x41, 0x00, 0x5d, 0x54, 0xf0, 0x85, 0x16, 0x7e, 0x68, 0xe0, 0x85, 0x2a,
+   0x7e, 0x25, 0xf4, 0x27, 0x45, 0x5c, 0x40, 0xe0, 0x0f, 0x25, 0xf8, 0x40,
+   0xa1, 0x0b, 0x2d, 0xb8, 0xa0, 0x82, 0x0f, 0x2e, 0xb8, 0xa0, 0x82, 0x8f,
+   0x2e, 0xba, 0x00, 0xe0, 0x47, 0x05, 0x3a, 0x54, 0xa1, 0x0f, 0x2a, 0xd8,
+   0xc8, 0x82, 0x0f, 0x0a, 0xfc, 0x82, 0xd0, 0x17, 0x9a, 0xf8, 0x85, 0xd4,
+   0x03, 0x1a, 0xbe, 0x68, 0xe2, 0x83, 0x0a, 0xbe, 0xd8, 0xe2, 0x83, 0x29,
+   0x7e, 0x58, 0xe1, 0x05, 0x29, 0x7c, 0xab, 0xaa, 0x01, 0x10, 0x5d, 0x68,
+   0xd0, 0x85, 0x0a, 0xbe, 0xb0, 0xe0, 0x85, 0x16, 0xfa, 0x0b, 0xfc, 0x25,
+   0x01, 0xfe, 0x22, 0xf8, 0x0f, 0x2b, 0xb8, 0xc8, 0xa0, 0x8f, 0x3a, 0xb8,
+   0xa0, 0x82, 0x0f, 0x2b, 0xb8, 0xd0, 0x82, 0x0b, 0x2d, 0xf8, 0x2a, 0xfb,
+   0x87, 0x10, 0x7d, 0x50, 0xe1, 0x0f, 0x2a, 0xba, 0xc0, 0xa2, 0x0f, 0x2c,
+   0xfe, 0x17, 0xf4, 0x0f, 0x00, 0xfc, 0x07, 0xe8, 0x45, 0x14, 0xbe, 0xa0,
+   0xa2, 0x05, 0x05, 0x3e, 0xa8, 0xe0, 0x05, 0x16, 0x5e, 0xa8, 0xe0, 0x8b,
+   0x0a, 0xfe, 0x4b, 0xed, 0x02, 0x08, 0x2e, 0x54, 0xd0, 0x8b, 0x0a, 0x7e,
+   0xa8, 0xe0, 0x8b, 0x0a, 0x7c, 0x09, 0xfb, 0x25, 0x44, 0xff, 0x8a, 0xfe,
+   0x0b, 0x12, 0x78, 0xa8, 0xc0, 0x0d, 0x2a, 0xfa, 0xa0, 0xa2, 0x0b, 0x04,
+   0xfa, 0x80, 0xa2, 0x0b, 0x28, 0xba, 0x0f, 0xfd, 0x25, 0x02, 0x7d, 0x40,
+   0xa1, 0x0f, 0x12, 0xf8, 0x80, 0x82, 0x0f, 0x28, 0xf8, 0x07, 0xfc, 0x0f,
+   0x00, 0xfc, 0x17, 0xf8, 0x87, 0x04, 0xae, 0xa0, 0xa2, 0x03, 0x04, 0xba,
+   0x00, 0xa0, 0x47, 0x2a, 0x3a, 0x50, 0xa0, 0x87, 0x0a, 0xfa, 0x05, 0xff,
+   0x03, 0x09, 0x5d, 0x28, 0xd0, 0x0b, 0x04, 0xbe, 0x28, 0xe0, 0x85, 0x02,
+   0x7d, 0x11, 0xf7, 0x25, 0xf5, 0xff, 0x02, 0xff, 0x1f, 0x80, 0x3c, 0x20,
+   0x80, 0x5f, 0x00, 0x7e, 0x45, 0xe0, 0x1f, 0x00, 0xfe, 0x02, 0xe0, 0x1d,
+   0x00, 0xfe, 0x17, 0xfa, 0x06, 0x80, 0xfe, 0x01, 0x90, 0x5f, 0x10, 0xf8,
+   0x03, 0x80, 0x3f, 0x00, 0x78, 0x01, 0xfd, 0x0d, 0xa9, 0xfe, 0x0a, 0xfa,
+   0x4b, 0x10, 0x9f, 0x40, 0xc0, 0x07, 0xa0, 0xba, 0x00, 0xd4, 0x45, 0x40,
+   0x7d, 0x01, 0xd4, 0x27, 0x40, 0xfd, 0xaf, 0xff, 0x05, 0x20, 0xbf, 0x02,
+   0xc0, 0x37, 0x00, 0x78, 0x45, 0x80, 0x57, 0x08, 0x7c, 0x00, 0xff, 0x03,
+   0xe8, 0xbf, 0x00, 0xfd, 0x1f, 0x00, 0x3c, 0xa0, 0x80, 0x5f, 0x00, 0xfe,
+   0x05, 0xa0, 0x1f, 0x00, 0x7d, 0x05, 0xd0, 0x4f, 0x00, 0xfd, 0x17, 0xfd,
+   0x05, 0x40, 0x7d, 0x01, 0xc1, 0x6f, 0x00, 0xf8, 0x05, 0x80, 0x5f, 0x00,
+   0xf8, 0x02, 0xfa, 0x07, 0xf9, 0xff, 0x02, 0xfd, 0xf7, 0xfb, 0xff, 0xaf,
+   0xbf, 0xef, 0xfb, 0xff, 0xb6, 0xff, 0xef, 0xdb, 0xfe, 0xfb, 0xef, 0xbf,
+   0xfb, 0xfe, 0xff, 0xff, 0xa5, 0x6f, 0xff, 0xbf, 0xbe, 0xdf, 0xb7, 0xff,
+   0xdb, 0xfb, 0x7f, 0xf7, 0xbd, 0x88, 0xfe, 0x15, 0xf4, 0xbf, 0x08, 0xff,
+   0x5f, 0x55, 0xbf, 0x74, 0xe9, 0xbf, 0xa6, 0xfd, 0x6f, 0xf5, 0xbf, 0xda,
+   0xff, 0x97, 0xfc, 0x7f, 0xcb, 0xff, 0xbf, 0xff, 0x4b, 0xea, 0xff, 0x6a,
+   0xf5, 0x7f, 0xed, 0xba, 0xb7, 0xd6, 0xef, 0x55, 0xfd, 0x92, 0xfe, 0x47,
+   0xe9, 0xff, 0x51, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xf7, 0xff,
+   0xb5, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xb7, 0xff, 0xdf, 0xff, 0x7f, 0xff,
+   0xff, 0x6d, 0xff, 0xbb, 0xfe, 0x7f, 0xaf, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xdf, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xfb, 0xff,
+   0xbf, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xed, 0x7f, 0xff, 0xff,
+   0xff, 0xfb, 0xff, 0xdf, 0xff, 0xef, 0xff, 0xf7, 0xfb, 0xff, 0x7a, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x55, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xea, 0xff, 0xff, 0xff, 0xf7, 0xfe,
+   0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd,
+   0xff, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xbf, 0x92, 0xb6, 0xff,
+   0xf7, 0x7f, 0x5b, 0xfb, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xb6, 0xed, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0x7f, 0xea, 0xff, 0xff, 0xff, 0x7f, 0x75, 0xf7, 0xbf, 0xff,
+   0xff, 0x00, 0xe0, 0xff, 0x57, 0xff, 0x45, 0xf5, 0xff, 0xd3, 0xff, 0xff,
+   0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xf5, 0xfa, 0x41,
+   0x5d, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xaf, 0xfa, 0xff, 0xff, 0xf7, 0xdf,
+   0xad, 0xdd, 0xff, 0xfe, 0x5f, 0x50, 0xd0, 0xff, 0xeb, 0xff, 0x2a, 0xfc,
+   0x7f, 0xf1, 0xff, 0x5f, 0xed, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0x77, 0x77,
+   0xdf, 0xd6, 0xee, 0x84, 0xea, 0xfd, 0xff, 0xff, 0x7f, 0xd7, 0x2f, 0xd2,
+   0xff, 0xb7, 0xfe, 0xbf, 0xaa, 0xd4, 0xdf, 0xfa, 0xff, 0x01, 0xd0, 0xff,
+   0x8b, 0xfe, 0x81, 0xf4, 0xef, 0x42, 0xff, 0xff, 0xda, 0xff, 0xda, 0xff,
+   0x7a, 0xf5, 0x57, 0xed, 0xfe, 0xab, 0xfc, 0x81, 0x4a, 0xff, 0x6a, 0xf5,
+   0xff, 0xfd, 0x1f, 0xe8, 0xef, 0x7f, 0xd5, 0x1f, 0x00, 0xe0, 0x1b, 0xfd,
+   0x5f, 0x90, 0xa0, 0xb7, 0x65, 0x7f, 0x45, 0xfc, 0x5f, 0xf0, 0xfd, 0x5f,
+   0xe0, 0x2b, 0xe1, 0x5f, 0x4b, 0xed, 0x0d, 0xaa, 0x7d, 0x21, 0xf4, 0x01,
+   0x00, 0x7c, 0xb3, 0xfa, 0x7f, 0xd1, 0x3f, 0xa0, 0xbd, 0xd7, 0x55, 0x5f,
+   0x00, 0xa0, 0x5f, 0xf4, 0xbf, 0x00, 0xe1, 0x77, 0xc3, 0xfe, 0x0b, 0xe4,
+   0xd5, 0x01, 0xff, 0x5f, 0xa0, 0x7f, 0x50, 0x7f, 0x55, 0xd9, 0x4b, 0x50,
+   0xfd, 0xa2, 0xe8, 0x85, 0x42, 0x79, 0x65, 0xe9, 0x7f, 0xe1, 0xaf, 0xe8,
+   0xcb, 0x2f, 0xa0, 0xbf, 0x8a, 0xf6, 0x5f, 0xfc, 0xbf, 0x20, 0xd0, 0xad,
+   0x82, 0xbf, 0x40, 0xf4, 0x0b, 0xa0, 0xfc, 0x2f, 0xe9, 0x83, 0xa0, 0x9d,
+   0x00, 0xe0, 0x05, 0x00, 0x5c, 0x81, 0xe8, 0x15, 0x04, 0xfe, 0xd2, 0xd0,
+   0xff, 0xc8, 0xbf, 0x40, 0xd7, 0x0d, 0x40, 0xbd, 0x8a, 0xec, 0x5f, 0xe8,
+   0xbf, 0x00, 0xa0, 0x4b, 0x25, 0xfa, 0x4b, 0xd4, 0x0b, 0x00, 0xf9, 0x7f,
+   0xd0, 0x2f, 0xa5, 0x3e, 0x00, 0xd0, 0x03, 0x01, 0x78, 0x29, 0xa8, 0x27,
+   0x09, 0xf8, 0x41, 0xe0, 0x6f, 0xe1, 0x5f, 0xb0, 0xc9, 0x2b, 0x80, 0x6f,
+   0x05, 0xf5, 0x2f, 0xfd, 0xaf, 0x00, 0xd0, 0x29, 0x41, 0x9f, 0x80, 0xe8,
+   0x82, 0x10, 0xfd, 0x0b, 0xed, 0x12, 0x90, 0x5a, 0x00, 0xd0, 0x05, 0x00,
+   0x5c, 0x44, 0xe4, 0x15, 0x02, 0xbe, 0x92, 0xa8, 0xff, 0xa2, 0xff, 0x60,
+   0x93, 0x03, 0x11, 0x5c, 0x09, 0xad, 0x5f, 0xf4, 0x1f, 0x40, 0x80, 0x03,
+   0x00, 0x3d, 0x00, 0xc0, 0x0b, 0x01, 0xf9, 0x2f, 0xe8, 0x42, 0x00, 0xdc,
+   0x68, 0xa1, 0x5f, 0x48, 0x5b, 0x00, 0x80, 0x05, 0x9a, 0xfa, 0x22, 0xe0,
+   0xbf, 0xe1, 0x5f, 0xc8, 0xe2, 0x85, 0x40, 0x1b, 0x82, 0xf4, 0x5f, 0xf4,
+   0x5f, 0x04, 0xe0, 0x01, 0x00, 0x4f, 0x82, 0xc8, 0x01, 0x10, 0xfc, 0x0b,
+   0xf0, 0x01, 0x00, 0x3a, 0x28, 0xd0, 0x15, 0xa0, 0x5e, 0x00, 0xa0, 0x13,
+   0x0a, 0xfe, 0x41, 0xa0, 0x7f, 0x87, 0xff, 0xa1, 0xa0, 0x23, 0x05, 0x5c,
+   0x08, 0x80, 0x5f, 0xec, 0x9f, 0x20, 0x81, 0x5f, 0x14, 0x5c, 0x00, 0x80,
+   0x0b, 0x21, 0xfa, 0x17, 0xd0, 0x43, 0x49, 0xfa, 0x68, 0xe1, 0xff, 0xa1,
+   0xbf, 0xa9, 0xe4, 0x06, 0x9a, 0xfc, 0x0b, 0xea, 0xff, 0x60, 0xbf, 0x40,
+   0xd1, 0x82, 0x22, 0x1a, 0x01, 0xa9, 0x37, 0xf9, 0x3f, 0x0a, 0xd0, 0x25,
+   0x12, 0x0d, 0x41, 0xd4, 0x41, 0x91, 0xfc, 0x0f, 0xea, 0x89, 0x80, 0x5e,
+   0xb0, 0xd0, 0x5f, 0xe8, 0x7e, 0x41, 0xa8, 0x01, 0x15, 0x7b, 0x05, 0xf9,
+   0xaf, 0xc7, 0xff, 0xa2, 0xf2, 0x52, 0x45, 0x3a, 0x09, 0x80, 0x2f, 0xf4,
+   0x6f, 0x20, 0xc0, 0x5f, 0x04, 0x5d, 0x04, 0xc0, 0x0b, 0x20, 0xf8, 0x4d,
+   0xa8, 0x13, 0x21, 0xbd, 0x68, 0xd1, 0xff, 0xc1, 0x7f, 0x89, 0xe8, 0x05,
+   0x2a, 0xfe, 0x05, 0xea, 0x57, 0x80, 0x7e, 0x03, 0xf5, 0x81, 0x22, 0x6c,
+   0x85, 0xfe, 0x3f, 0xec, 0xbf, 0x00, 0xb8, 0x6f, 0x28, 0xbc, 0xc1, 0xf4,
+   0x01, 0x01, 0xfd, 0x17, 0xe0, 0x81, 0xd0, 0x5e, 0x28, 0xe1, 0xbf, 0xa4,
+   0xef, 0x22, 0xf4, 0x11, 0x0d, 0xfa, 0x05, 0xfd, 0x2f, 0x86, 0xff, 0x26,
+   0xed, 0x13, 0x45, 0xf8, 0x8b, 0xda, 0x6f, 0xf8, 0xbf, 0x40, 0xe0, 0x5f,
+   0xd1, 0xfc, 0x0a, 0xa4, 0x07, 0x00, 0xfc, 0x5f, 0xa0, 0x07, 0x81, 0xff,
+   0x68, 0xa0, 0xff, 0x61, 0xff, 0x45, 0xc8, 0x13, 0x59, 0xfe, 0x15, 0xf4,
+   0x85, 0x94, 0xfe, 0x0b, 0xf6, 0xc2, 0x02, 0xba, 0x06, 0xfd, 0x5f, 0xf4,
+   0x7f, 0x88, 0xd0, 0xbf, 0xa8, 0xbf, 0x41, 0xe8, 0x89, 0x30, 0xbd, 0x35,
+   0xe0, 0x05, 0x41, 0x1f, 0xb0, 0xd0, 0xff, 0xa6, 0x7f, 0x91, 0xf0, 0x16,
+   0x12, 0x5a, 0x03, 0xfb, 0x0d, 0x82, 0xfa, 0x17, 0xfc, 0x82, 0x26, 0xf8,
+   0x0e, 0xfb, 0x5f, 0xd4, 0xef, 0xa0, 0xf2, 0x7f, 0xa1, 0xfd, 0x8b, 0xe0,
+   0x0b, 0x41, 0xfa, 0x57, 0xa1, 0x0d, 0x44, 0xfd, 0x50, 0xd1, 0xff, 0xc5,
+   0xfe, 0x91, 0xe8, 0x77, 0x52, 0xbe, 0x00, 0xf4, 0x83, 0x14, 0xfd, 0x05,
+   0xfb, 0x83, 0x02, 0xfa, 0x8b, 0xfe, 0x3f, 0xe8, 0xbf, 0x08, 0xd0, 0xbf,
+   0xe8, 0x7e, 0x41, 0xd4, 0x83, 0xb0, 0x5e, 0x0a, 0xe0, 0x83, 0x82, 0x5e,
+   0x48, 0xb0, 0xff, 0xa5, 0xbf, 0x22, 0xf4, 0x0f, 0x04, 0xba, 0x02, 0xed,
+   0x05, 0x00, 0xfa, 0x3f, 0xe8, 0x0e, 0x14, 0xfc, 0x0b, 0xe8, 0x7f, 0xa8,
+   0x7f, 0xa1, 0xfe, 0xff, 0xa3, 0xff, 0x8b, 0xa0, 0x7f, 0xa1, 0x5d, 0x00,
+   0xc8, 0x1f, 0x14, 0xbc, 0x00, 0xe0, 0xff, 0x07, 0xfd, 0x42, 0xd4, 0xbf,
+   0x88, 0x2e, 0x30, 0xe8, 0x03, 0x80, 0xfc, 0x17, 0xd4, 0x8b, 0x0a, 0xfe,
+   0x87, 0xfe, 0x57, 0xd0, 0xff, 0x80, 0xfa, 0x7f, 0xa5, 0xff, 0xc2, 0xe2,
+   0xaf, 0xe0, 0x0f, 0x11, 0xb0, 0x0b, 0x40, 0xba, 0x90, 0xa0, 0xff, 0x25,
+   0xfb, 0x01, 0xe8, 0xbf, 0x80, 0x1f, 0x90, 0xd0, 0xa2, 0x12, 0xf8, 0xff,
+   0xd0, 0x3b, 0xa8, 0xfd, 0x1f, 0xf4, 0xff, 0x03, 0xbf, 0x85, 0xee, 0xff,
+   0x0b, 0xfd, 0x8b, 0x82, 0xff, 0xd1, 0x5f, 0xa2, 0xe2, 0x5f, 0x9e, 0xb8,
+   0x52, 0xe1, 0xff, 0x0f, 0x7c, 0x8b, 0xd8, 0x7f, 0x25, 0xbd, 0x6a, 0xc5,
+   0x91, 0x00, 0xfa, 0xaf, 0xe2, 0xaf, 0xa8, 0xfe, 0x05, 0xfa, 0xbf, 0xd0,
+   0xfe, 0x82, 0xfd, 0xff, 0x55, 0xff, 0xd5, 0xd5, 0x5f, 0xd1, 0x3f, 0x50,
+   0xa5, 0xb7, 0x2a, 0x7a, 0xb4, 0xd8, 0xff, 0x57, 0xfb, 0x21, 0xf4, 0xbf,
+   0xd0, 0x2f, 0xda, 0xa0, 0x83, 0x55, 0xfc, 0xff, 0x80, 0xbf, 0xb0, 0xff,
+   0x5f, 0xf6, 0xff, 0x83, 0xff, 0x07, 0xff, 0xff, 0x4f, 0xfe, 0x97, 0x87,
+   0x7f, 0xd1, 0x5f, 0xa5, 0xe5, 0x6f, 0xba, 0xf8, 0xe9, 0xf1, 0xff, 0x1f,
+   0xfe, 0x07, 0xe8, 0xff, 0x47, 0xdf, 0xfa, 0xc7, 0x7f, 0xab, 0xfb, 0xff,
+   0xef, 0x7f, 0xef, 0xff, 0x57, 0xfb, 0xff, 0xad, 0xfe, 0xfa, 0xff, 0xff,
+   0xbb, 0xff, 0xfb, 0xfa, 0xff, 0xf5, 0x7f, 0xfd, 0xff, 0xbf, 0x7f, 0x7f,
+   0xbf, 0xf7, 0xff, 0xf7, 0x7e, 0x7d, 0xfd, 0xff, 0xfa, 0x7f, 0xdf, 0xfa,
+   0xeb, 0x7f, 0xff, 0xff, 0xda, 0xff, 0xfd, 0xfe, 0x7f, 0xff, 0xff, 0xaf,
+   0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 0xef, 0xef, 0xff, 0xd5, 0xff, 0x6b,
+   0xd7, 0xff, 0xf7, 0xfa, 0xfd, 0xde, 0xff, 0xdf, 0xfd, 0xd7, 0xd4, 0xff,
+   0xdf, 0xff, 0xfd, 0xef, 0xff, 0xdb, 0xff, 0xff, 0xef, 0xff, 0xf7, 0xff,
+   0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff };
index 7cfab0b6d71e350fcd1d5b6e983436261fc9af83..c3134b3c7a76a35227ebe3d374489fd49d01ffae 100644 (file)
 /* XPM */
-static char * matrix2_xpm[] = {
-"42 432 65 1",
-"      c None",
-".     c #000000",
-"+     c #020E04",
-"@     c #021804",
-"#     c #062604",
-"$     c #0B3008",
-"%     c #021E04",
-"&     c #0C360E",
-"*     c #114410",
-"=     c #1F561E",
-"-     c #145417",
-";     c #136314",
-">     c #1D5E1D",
-",     c #0E4E0C",
-"'     c #1C4E1C",
-")     c #246624",
-"!     c #2F832F",
-"~     c #2B7729",
-"{     c #368B34",
-"]     c #3B9439",
-"^     c #298B27",
-"/     c #4CB34A",
-"(     c #44AB42",
-"_     c #42A244",
-":     c #0D3E0E",
-"<     c #26C227",
-"[     c #52BB54",
-"}     c #3E9C3C",
-"|     c #127410",
-"1     c #40CC44",
-"2     c #5AC254",
-"3     c #286E26",
-"4     c #178618",
-"5     c #269624",
-"6     c #62DA61",
-"7     c #5ACA5C",
-"8     c #5ED05C",
-"9     c #2AA62C",
-"0     c #3AC237",
-"a     c #FFFFFF",
-"b     c #166E14",
-"c     c #62DE64",
-"d     c #1E751C",
-"e     c #26B529",
-"f     c #88E688",
-"g     c #42D73C",
-"h     c #36B634",
-"i     c #2E9A34",
-"j     c #66E561",
-"k     c #7AF67C",
-"l     c #92F294",
-"m     c #76EE74",
-"n     c #1AA614",
-"o     c #169614",
-"p     c #32D634",
-"q     c #32CB34",
-"r     c #3EDE3C",
-"s     c #D9F9D8",
-"t     c #26CB24",
-"u     c #9DD89F",
-"v     c #E8FEEA",
-"w     c #D8F3D8",
-"x     c #73E774",
-"y     c #66E264",
-"z     c #D7F2D8",
-"..........................................",
-"..................@@%%@+........@##$%+....",
-".+..@@@@++.+..+..@::**:#+.+..+.#-;b|>:@.+.",
-"...@###$#@+.....@:!!!]!=$+....%;uful85:+..",
-"..+%$#####+..+.+$>/]!]]{:@...+'9vwfzsf)%..",
-"..+#&#@@#&%+...+'![!->][=#+..@4uauoiua5$..",
-".+@###@+#&%+...#>]/~,*{2)$+..#hzvg44fah'+.",
-".+@$&@+@#&@@..+#3__d**![~*@.+$1aaqd4ua7;%.",
-".+##$%++#&#++.+#!/_b*:!/~'@..&uaa<|dfafd%.",
-".+@$$%@@#$@@..+#3}_d-*![~:+.+$7vaq4|ua7b@.",
-".+@$$#++#&@+...%)]/!,,!/)$+..$9zag44uah*+.",
-"..@@&#@%#&@+...+*~8{->][=%...@|7axo9la5#+.",
-"..+@$#@%##+....+$=/{)~]}'%..++*}vf<1zz|%..",
-"...+%##$#@+.+...+:3!{]~'#+....@-[yuz1!:+..",
-"....+@@@+........%:=>>*#+.....+#;^99|:+...",
-"....+...+..+..+...+@@@%+...+....+###%+.+..",
-".+..............+............+............",
-"..+...+.....+......@#%+.+........@##@.+...",
-".....@@@+.+...+...@:='&@..+...+.@3{d-$..+.",
-"....+#&#$%.....+.+@{2]~)@..+...+$uvz8_$...",
-"..+.+$:#@@.......@$}x{)'@......+:lvu[!%...",
-"....+#:@++.+.....+$_6>&#...+...%&zv(,$....",
-"....+$:@+....+...@$_6=$@.....+.%*la5*%..+.",
-"....+#:@+.....+..+$_6>#@.......+&zv5&%....",
-".+..+$&@+.+......@$_8=#+.+....+%*zv^&+....",
-"...++$:@+.....+..@&_6=#+..+....%,zv5$@+...",
-"...+.$&++...+....@&(6=$+....+.+#,la5:+..+.",
-"....+$:%++......+@&(8=$@.......#=wv5:@....",
-".+.++$$@+.....+.+#*_2):@.+....+$dzae>#....",
-"...+%%$#@+.+.....#={_~'#...+...:9lv24$+...",
-"....+@+++........@&'=:#@.....+.+-~5):+..+.",
-"...........+..+....+++..........+@++......",
-".+...+..........+.++++..+..+.....+%@......",
-"....++@++...+....+@$:&$+.......+$*'=:@+...",
-"...+@+@@@@....+.+$=====*%...+.@*i9oo^d#...",
-"+..@$$####@.....@=/_!!{]&+....#{vvc8zz=+..",
-"..+#&$@%##+.+..+&32}3)!}*....+-2az<<uz;+..",
-"..+#&#@+@#+....+*~7!-')~$++..+duvuo4eu-...",
-"..+@&#@@++.....+:~2{,:::+...++;uaf4b;;#...",
-"..+%#$%++..+...+$)/5>'&@+....+*(afe|,#++..",
-"..+@###@@+...+.+#'{}!-:#+....+&4zzxo-$+...",
-"...+@#$#++.....+@:){}~=$@+....#;exwq5*%...",
-"..+@@%$$%@.+...+$*=4]}3'%..+.+*|nplzq4$+..",
-"..@%%#%$$#@....+*)d~^}}!*@...+be0qpwzf>@..",
-"..+%##$#$%@.....:3{5}((]:+...+;efxlaazb@..",
-"..++##$#$#++...+#=]}}_}!:+....*}wvavvu>+..",
-"...++@@@++...+..@#*=-='*@..+..+*3^^^4b#...",
-"....+..+.+........@+@@+.+......+@%%#@+.+..",
-".+................+@%%......+...+%%%......",
-"....+@@@+..+.+...@#$::&+.+.....@&-;>:@.+..",
-"...+@@@%@+.....++&3)))=:+.....%-[he[o>+...",
-"+.+@&$#$#%+.....#=[}!}{)#..+..#]vv6alh&+..",
-"..+@&$@##@..+...&32]3~~)$....+=2aze88h&...",
-"..@@&#@@@@+....@:~[{=>>=%....+;uvue99{$+..",
-"..+@&$#++......@$)[_!'&#+.+..@*9avg^;&+...",
-"..+@$$#@@+..+..+$3//{=&@.....@,havx5,@....",
-".+@@&##+@......@*~/(!=&@...+.%d7avfi;%....",
-"..@$$#@@++..+..%){_!>'&%+....#9zv6n4*#@+..",
-"..%##%++@@.....%3]}~-*-'%....#/sw0o44!#...",
-"..+#$#@%##@.+..+'~_~-)!]*+...@4uvpoefz)...",
-"..++##%##@+...+.&=!!3!!~$..+.+,^6818f8'.+.",
-"...+@%%#@@......+$>)!!3'%.....+,i076h4#...",
-"....+++@++.......+#$:&$@+......@&-;)'#+...",
-"+..........+.+.....+++++..+.+....+++@+....",
-"..+............+..+++.........+.+@@....+..",
-"....+++.+........@#$#%.+.......@&::@+.....",
-"....%%#+..+..+...#*3~:@..+..+.+$422>#...+.",
-"+..+@$&@@.......@$3_[):@......+>hva9=#....",
-"..++##&#%+......%:~(/{>#+.....#b0aali:@...",
-"...+#$$&@@+.+...%*~_/(!'$+.+..#btzav6!&+..",
-".+++##$$$#+...+.#'!}((}~:@....$4plvaz8b%..",
-"..+@%$$$#$%+...+#>^_(}}_>$...+:5czszsz9'..",
-"..+#$#$$#$#+...+:)_/h}_/~*+..@;ezavlsa1b@.",
-"..+#&:&$#$@@...+'![72((_~*+..+46aaavva1d+.",
-"..@@$&$$##++...+:~(0(i!~=:...+)2sawf68}-+.",
-".+.+###@++++....#:!{^>*$$@....&|8fxi)-&%..",
-"...+@@%++....+..@$)33:#@+..+..%-900;$%+...",
-"...+@@@+........+#*-'%@........&~54&@.....",
-"..........+.......+%@.....+.....##@....+..",
-".......+....+..........+...+........+.....",
-".+...+.+......+..+@###+......+.+#$&$%...+.",
-"...+@@%@@........#*===*#.......$d5i5)&....",
-"...@@##$#@.+....%')~{}~'#..+..#b08fs8!#...",
-"+.++###$$%+..+..%'!]}2})$.....$!8zsash:...",
-"...+@%#$%@+.....%:=)~}{)#.....#;5<qffh:.+.",
-"..++%@##$%+..+..@$;~^_])$+.+..#>n0czf0*+..",
-"..++#$$&$++....+$'!_([}>#....+&4xwvas9:...",
-"..+%$$%#%@.....@:3/_{{3*#....%b2av6f[d#...",
-".+%#&#@@++.+...@>{[{b'*%+.+..%ilafe5b&@.+.",
-".+@$##@++...+..%)}}3,'&#+....#/saq4|-$+...",
-"..@##@@%%@.....@=!]~,===@....@56a<oni^#...",
-"..++$#@###+....+&>]~=!{~$.+..+'nzgn7f6*...",
-"..++@%@#@@..+...%:;~~!3=%.....#>eq16[i#.+.",
-"...+++#@@@......+#:=)3=$+.+...+#>5hhi*@...",
-".....+.+.....+....@###@+....+..+%#:$#+....",
-"..........+......................+....+...",
-".+..++++.........+$::#+..+....+@*)b&@...+.",
-"...+%##@+..+..+..$=!~'&@...+...&9174'%....",
-"....+%##%+.......%')!{)&@......$!hgf(-%...",
-"+..++@@$#@+.+...+#$=3}{=&+....+#,o1wli*@..",
-"...++@@##$@...+.+#$->^}}'%.+..@$-oe1zz4#..",
-"+..+@###&&@+....@*3~^][2=#....#b[78lvai$..",
-"..@%$$$$:&@+...+$)(_i(76)$+..+*9avzsaah:+.",
-"..+#$#@@$&#+...@=!/{d~}2>$+..@^lax<qza9*@.",
-".+@#$#@@#$@+.+.@3]}d--^/=$+.+#haaqonfa5&@.",
-".+%##@@+%&%....%)]})--{[=$...#/vv<45fa5&+.",
-"..@#$%%%$$@....+'!}!-b]/-#...@!8a1oela4#..",
-"..++$#@@%$@.+..+#>}~>~{]:@...+*isce1lzd@..",
-"...+@%%#@++...+.@$)d~!)'@+....@-90q8[|$+..",
-"....+@%@@.......+@$'>>:@+.....+@,4ii;#+...",
-"..........+.......+@@%@...+.....@##$%...+.",
-"+..+...+....+..........+....+........+....",
-"....@+@@++....+..%&***&&@.....+#=bbb>-%...",
-"...@%%@@%%@.....%:33~~3=*@....@;01000e)#..",
-".+.@&$####%+....%=2_{{]]=&.+..$}avffzzi,..",
-"...%&&####%++...#)7/{!]{)&....#/aaf6ul9=..",
-"...@$##+@++...+.+'_]~='*:@....#~vzqn{!>#..",
-"...+@#$@+++.....@$~{{-&$%+.+..+-[lfo-&#+..",
-"...++#$@+........@*{}-$%+......#|fu5-#+...",
-"....+@#@++..+....@#3{)*%....+..@&0ze;$++..",
-".+...@%#@+....+...%'3~=#+.+.....#^[g5#+...",
-"..+..++#%++.......+$']~#+...+...@&oz[:@...",
-".....++##+..+...+..%*{!=%.....+..#;f8^#+..",
-"......+@@#+..+.....+$3~3$........+*[81:...",
-"..+....@@#+.........+&)~$..+......%'9x*...",
-"........++...+.+.....+&'%...+..+...+>~%+..",
-"....+..+.........+........................",
-".+.......+..............+......+.......+..",
-"...........+..+...+++@+...+.+....+@#++....",
-"...+.+@@++.......+@:''*#+......+$;!4)&++..",
-"...+@@##%@+..+...%*)3~3'$+....+#~h0qe^:+..",
-"+..@##@@#$@.....@*]!~d{]'%.+..+;zxq<ul!#..",
-"...+&$%##&@...+.+=[])d}/=#...+%!vfq<lai$+.",
-"...%&##@$&#+....%=2idb_[)$@...#!alqtzan:@.",
-".+.@$#$$$$%+...+@'_((/[[>$+...$!szzzva9*@.",
-"..++#&&&&&%++...#*{/277/)$@..+#4uavaave,@.",
-"...@$$&$#$@+....#=_0[9(/):@...$^saazvve-@.",
-"..+@$$#%$$#++..+#-/_5!i_~:@..+$5avxpfaqb@.",
-"..+@&#@%###+....#=2]>;^]3'+..+#iafenpzq4@.",
-"...@$$%+#&@@+...@=/{;-!/3*@...#^afeo6a[b@.",
-"...+##%@#$@+..+.@:]!b-!_>$..+.@)u60n8w9*..",
-"...++@@@@@+......#:))~3>&%.....$de0009'%..",
-".....+@@++.......+@&**:$+......+#-dd>,+...",
-"+..........+.+......+@+..+..+.....@+@..+..",
-"...+...+.......+..+++%++......+.+@%#%+....",
-"+....@%@@+.......+@:==*$@.+....+#;55d*#...",
-"...+@@%%%@+..+..+#*)~~)=&+..+.+$b9q0h5,@..",
-"+..+##@@#$@+....+:{!3)!]=$....@)ff0<6z5:..",
-"..+@$$%@#$@+...+#=({3>!]3:+...$^aleo6vh;@.",
-"...@$#+@@##++..+#=/!-,3])'%..@&5a6n5<z04%.",
-"..+@&$+%#$#+...+#)[^>-d_~'@..+:9a6nnqv1!%.",
-"...%$$#@%$@@...+#;2_dd](3:@..+:}al0<la0b%.",
-".++@&&&$$&@+.+.+#=72(_/(>$+..+$iaaasaa9*+.",
-"...@#&$$#@@+....@,}//{!~*@....$|zaau67b@..",
-"...+@#$@@+......@&b}_d':%+....%-<zs<^>&@..",
-"...++#$#@++.+....%:!_{)$@++....#;gaun,#...",
-".....+##@+....+..+%=~{)*@...+..+#5uf0|#...",
-".....++@%#+.......+@&)3)$.......+#>h09:+..",
-".+.....+++..+......+@$:$+..+..+..+%'='+...",
-"..+...........+....................+......",
-".....+..........+.+.........+...........+.",
-"..+...+..+.+..........+.+......+.....+....",
-".......@+....+.....@$:$...+......@:~*.....",
-".....+%#%.......+..$=])%....+....,5z/#+...",
-"..+..+@$#+..+.....+#=/~$+.....+..*}vu$++..",
-"......+$#+....+...+%'(!&%.......%$~af>#...",
-"..+.+++##%+.....++@$:]!=$+.+...+@:4z85:+..",
-"...++@@@#%+......%:*=3~~:+..+.+$;|o2g8=@..",
-"...@@%%+##@.+..+%:3))=~{*%....$>heeo1l~#..",
-"..@@#%@@@$@+...+')~3-*~}'#@..%deg<54qz^&#.",
-".+%##@@@#$@@+.+#)]!3->!_~'$@+:[z8ennfv0!-@",
-".+$$####$&&$%++:]/{~!{/7[])$+-lamg7laavze*",
-".+#$@@@@###@@+.:{}3;)3~{{~=#+'8zh992uu6u5&",
-".++@+++++++@+.+%'=&###$$$::++#^5-:*$**,--%",
-"...+...........+##%@+@+@+++..+$&%+@@@@%%+.",
-"..........................................",
-"..+.....+..........+....+...+....++.......",
-".....++....+..+...@&*@...+....+.@';#..+...",
-"...+@%%+........++*>3$+........@b9(*@...+.",
-"+..+@##@+.+......#3{!*$+..+....:8lld&@....",
-"....@@##@...+....%')!!>#+...+..#~[ffi$@...",
-"...+.@@##@+..+....@'~}~'#+......%!0z7d:+..",
-".....+@@##@....+..+$*=!]'#...+..@:d96l{$..",
-"......++#&@+......+@$*!(>$+.....+#*dua9*..",
-".+....++#$%.....+.+@&'~_=#......+#-4fwi:..",
-"..+..+@%@@+.+.....+$=~~=&@..+...+*481_-%..",
-"....+@##@++...+...#=~!>&@.....++$]8u9,#+..",
-"....+#$@+........%:!_=&+++.....@;fz5*@+...",
-"..+.%#@+...+.....#3~3$@+...+...:[8[-%+....",
-"...+@@+.+.....+..#3=&++........:2i,@+..+..",
-"....+.......+....+#@@.....+..+.+:#@.......",
-"+........+.............+..............+...",
-"..+...+.......+............+........+...+.",
-"...+....+..+......++@@@.+.......+@%%++....",
-"....@@@+@+.....+.%:*'''&+....++#>d^]!,%...",
-"...+@@##@@+.+..+%:>3~{~=:%+...#>9h1f7i=$..",
-".+@#%%%$$#%+...@'33)3_}~)*@..#^17eeaw1hd%.",
-".+%#@@@$###%+.+#~{)==(}!~)$++:[l<o9asgp9'@",
-".+##+++$#@%%@++&!{'*=_{)~3=#@-uu^|owfe104:",
-"++%$@@@##%##%+#*!{*:,!!~3~3:#dlf4>46y1q01>",
-".@#%+++@##@##+@'{],&:>!]d~{*#dul!;>96l06ud",
-".+#$@+++%$#@#++#!}=:$*~}~~~:@*zlo;-|2ag1g>",
-"..@#%%@+@###@+.%=~)=*:){{~>#.#_7ho|;huf1_:",
-"...+%@@+++#@+..+#:))>::={~$@.+$bhhn;|ifu-@",
-"....++++++@+....+@$:$$#$*:+...+#'>-:&*d;@.",
-".......+...........+@+@++........++#+@+...",
-".+..........+..+..........+...............",
-"....+...+.....................+.......+...",
-"..+.......+.....+.+++..+....+.+++++.....+.",
-"..+++.+.....+.+#$&$@$#%+.+..+$:*&&:&#@....",
-"++@@%##%@@....%'==>33='*#+..$^999h794d:+..",
-".%##%#$#%@@...#)~!~_/!3):+..*9181sa80e=%..",
-".++@@$$@@@+.+.#&*->]()':$@..$>4onlae4|*%..",
-"+@@@%#&%++++..$=-->}/b'*&#..*^o4efa<4d-$..",
-"+#@@@$$#@+@+..'!3;b_[4=-*$..!6qeewa1nod,+.",
-"+@@%@$&@%@++..$>>>b_/3;'*$+.'h9n<saq9o4*..",
-".+@@@#&@@++...%$*,>}/3-*:%..#'|onzv<ob-$..",
-"...++#$@++.+...@##:!('$#+....@$&;fa4,$%...",
-"...++%$++....+..+@$!_,#@..+...+#*uz4&@..+.",
-"....+#$@+........@#!_'$@.......+$fz4$@....",
-".....##++..+......#~_=$+....+..+%uv9,+....",
-"+....@#@+....+....+){'$..+......@_u!:.+...",
-"..+.+++........+...%#@+......+...#:@+...+.",
-"........+.................+...............",
-"......+...+..+..+..%%...+......++$$...+...",
-"....+@@..........+&==@......+..+*!i$......",
-".+..+%$..+....+..+#3!#....+....+$hu:....+.",
-".....@$+...+......@~]&.+........$8u'.+....",
-"....+@$+.........+@3}&......+...$uu)+.....",
-".+...%#++....+...+#~]:@..+.....+#ul=+.+...",
-"...++##+..+....+.+%~]:@......+.+$uz;@...+.",
-"....+@$++........+%~_:%...+....+#uz3#.....",
-".+..+@$+....+....+@3}*%+........#6ud$+....",
-".....%#%++...+....%3]=$+..+.....#/z^*@+...",
-"...+.@@#@......+..+'~~=%....+...%!76^#..+.",
-".....+@#@+.........#'{3&+........&5uh'@...",
-".+....+@@@.+.....+.+#*''@.+..+...+&3^!%...",
-"........++....+......+$:+.....+...+@*;@...",
-"....+.......+...........................+.",
-".+.......+....+...+.......+...+....+......",
-"................+...++++....+...++++++....",
-"...+.++++++......+#&$&&$$#.....+&:*'--*$..",
-"...+#%%%%%%@.+..+#)33))3)*%...+*h0e<h0ed#.",
-"+..+##%####%+...+*{!d!!!{3$+..@)l61qqqfh:+",
-"...@$#@@@#$%+..+@=({b;dd_~&@.+$!ay<t<pz6>@",
-"+.+@$$##$#&#@..+$=_}^^{i(]:@.+:nvzcgyxvu;#",
-"..+##$$$$$$#@..@'3__(9((({*%.@3[vsszwvaf|#",
-".+%#$##$#$$#@+.@3}_9__([_!=#.#2sszzsvas6o$",
-"..%#$#$$$&%%@..%>!}ii5(0i)*%.%_flmxxaaf<|#",
-"..++$#%#$&#@+..+#-]{{5(2^-#+.+&^lyggsac4*+",
-"...@$##@###++...#,(5~d^]!=#..+$4sxpp6fg5$.",
-"..++$#@#@%@@.+..@'}^|b)>>*@...#dw6t<ehe|@.",
-"...+###@@++.....+$!{!d>:$@....+>x6pqo;,#..",
-"...++#%$++...+...#=!]3'#+.+....&^uvg4#@...",
-".+..+#$@+........+#~}):%....+..@:2z/b%....",
-".....+++++...+....+$:$%.........@*;:#..+..",
-"...+.......+...+........+.+...+...........",
-"+....................+@+...+.......@%@+...",
-".......+@@...+...+.+@&*'@.......++#'d~#.+.",
-".+..+.@%%%+......+@%:>3)$....+.+@$-9<(:...",
-"..++@+@##%+...++#&&:={!3:@...@&->bouf1>%..",
-".+%######$@+..+#3{{!!{_}'%..+&[fu68jvz4#..",
-".+%$##$##$@+..+$~_/_}{}(=$..@*uzavlcvv9*+.",
-"..+@#$$###@@...+:>{__~!!3'@..@-9zal1gf0d@.",
-"...+@$#@%%%%...+@:=]();)3=#..+#;ezvhn90i$.",
-"+..++#$%++@@+...+#&!}>*:)=$...+#-6and;hi:+",
-"....++@#@+++.....@%>~~=$$#+....@#i615:,&+.",
-".....+%@@+..+.....+$=~=:@+..+...+,5q9;#+..",
-".+...++@%@....+....+$)>'@........@*hh4#...",
-".......++@+.....+...@&*'&....+....@'d{:+..",
-"......+.+@..+.....+...$&#.+....+....&>$...",
-".+..........................+........+.+..",
-"...+.........+..+....+..........+..+......",
-".......++.+.......#%%$#++....+..$##-:..+..",
-".+.+%@@#@.....+..#=**!=@+.+....&]|b8i$+...",
-"...+#%+$%@.+....@&~3'}~&@.....%=6h5v8*#+..",
-"..++$#@$#@+....+#'_~3/!:$@..+@$!a8<afd&@..",
-".++@$##&#+++..+$$=({~/{=&#..+:*5vx0v64-$+.",
-"+@@@$$%:$@@+..#'>~/}{29;=:@.$557alfalh5;%.",
-".##$&#$&&##@+.&{~]2/98/^3=#+=ffuavzavr0o&.",
-".+@@&$%$$@@+..%'=3[]^[_3>:+.$d52af6alq5;#.",
-"..+@$#%##@++...+#-(^b}^b&#@..%:^ar<zceb$+.",
-"..++$#@###@+...+%*_!;~!!:#....#~v1ngcgb$+.",
-"...+$@@+##+.+...+:}),>3!*#+...+;z1d51fd$+.",
-"...+#@++@#%+.....:{)$&)!-#+...+=l/--9l^:@.",
-"...+#@++++@++....%!'%#$'='%+...*84##>~9b#.",
-"....++....@+..+..@'$+@+%*:+..+.@!-@+@#d;%.",
-"..................++...+++......++....++..",
-".+.....+...+...............+.........+....",
-"...+.++.+.....+...+$*%......+...@';#+.....",
-".....%#+..+.....+%#)~*%+.+....+@$/6>#@.+..",
-"...+@#$@++..+..+@$:!_'$#+....+#*>fs4'$@...",
-".+@@@#&@+@+...+#''=]/)>*$@..@&do5lae44'%..",
-".@#$#$&$##%+..%*]({/2{{]):..#dfsyaaffz(>..",
-".+$$#$$#$##+..@*_/!(1!{}3'..#dzvgva6lv0d+.",
-"++$$@$&@##@@..%:]/d_[d!{3'+.%>lzqua0gz0d+.",
-"++%&#$:##$%@..@&][^/2{]_3*..#-faxvaxlv13+.",
-".+###$$##$%+..@#!}!(2{{]3:+.%:fw8saufz/;..",
-".++%+#$@+@@+..+%'>,{(>=)'#..+#494ua99e!*..",
-"..+++%$@@++....+#&$!}-:&#+...+:-'fw4->&@..",
-"....+%#+.....+..+@#3]:@+......+##7z;#@....",
-".....@%+..+.......+=3$@.+.+.....+58*@..+..",
-".+..+++............$*+......+....'d@......",
-".......+...+..+.....+..................+..",
-".....+..........+.....+..+....+.....+.....",
-"+......++....+......+$$$++.+....+.+**:%+..",
-"..+....#%@+.......+.#==*&%...+...+&i5b=$..",
-"...+..@##@@++..+...+:{!='&.......@>f6e4'..",
-"......+###@+......+@*}]~=&....+.+#dzsg5-+.",
-".....++#$#@+..+...+$*~}}=$@.....+$4gzzo$+.",
-".+.+.+%#$#@+....+.+:)]_i-$+.+...+-eusln*@.",
-".....@@$$#@+......@*~/({)&+.....%|7aal9>+.",
-".....@@&$#%@.+....%&)((^b*%...++#>esvge|#.",
-".+.+++@$$##++...+@#:;__]~'@+...@&-ilalq^#.",
-"...+++@$$#$@...+@$$:bi(_{>#..+$:-|elavcn$+",
-".+@@@####$@@+..#'>)~]}}}3*@.+&4nhcuzsz0d%.",
-".+%%######@+..+&>!!{{!!!>:@.@*(18ff6f8e-#.",
-"..@%+@@+++@@+..@'>=-***:>'+..#4hh5~;;de4+.",
-"..+@++..+.++...+$::$@@##:$...+&;;:$###>*..",
-"..................++++.........+++++......",
-".....+.......+............................",
-".....+++..+.......+$:$@+..+.....+*):#..+..",
-".+..+%%@+.....+..@%=3*$+....+..%$504:@....",
-"...++#$@++.+....##&!_=$$@....+#:-uz5':#...",
-".+@@@$&%%@++..+#=~)_2~)':#...&}7eva89^;:..",
-".+$&#&&$##@+..+:_[][8({!)*+.%;zazaavl8hb..",
-".+#$##&##%@+..+$]/!](}{3=$..+,fv7lzzc0^-..",
-".+$#@%#$#@+...+#{_>|{i~=&%..@&fze<gx1n-#..",
-"..#$@@@$@@+...+%!}>;3_~*#@..+&uzee<w8b&@..",
-".+@#%%###@+...+@3!~;d]!*#+..+#[f<e<z1|$%..",
-"..+%##%#@@+....+=~{!~~3-$@...@^1lg1cq5*%..",
-"..+@$#%+%%%+...+#>(]3=)~=$...+:]azq5e75'..",
-"...@%@@+@%%+.+..+:!3=$'3=&....@-u75*4[o>..",
-"+...+++...++.....+##@@@%&$+....@:$###$-&+.",
-"...................+...+++..+.....+...@+..",
-"+......+.....+............................",
-"..+.......+....+..+.+...+.....+..+....+...",
-"...+...+.........@+@%@@@...+...@@#%#%@.+..",
-"..+@+++++++.+..+$:$$$#&:#+...+:>'*::'-:@..",
-"..@#%+++%%@+...@)~=*:&=~=:...#(cnd>;o7^'..",
-"..##%+++@#%+..+@!])'::)!)*+..$uze4bbemhb+.",
-".+%$%@@+%#%@...#~];,**){3'@.+$ufe4||ex04%.",
-".+##@++@@##@..+$~]>*:*){3'@.+&fzn4;|efq!%.",
-"..##%@@+@$@@..+#!i;,::b{~'+.+$ufn4;bex04%.",
-".+##@++@%$%@...#~];'::){~,@.+$fl94;|<f14%.",
-"..#$%%%@###@..+%!}~;;)!}~'+..$uvpene6v14@.",
-"..@$#@%@#$#@...@~]{~)~{_~,@..#8a6q00ua1~@.",
-"+.%#@@+@@#@@...+3!>***)!)*+..@/u9dbdefhb+.",
-"..+@++.++@++.+..*=$$%#:='#...+d5,:&:b5!,..",
-".........+......+@++@@@#@++...+@@@++###@..",
-"..............+...........................",
-"+..+...+..+......+.........+..............",
-".....+......+....++@@++.+....+.+%#@@+..+..",
-"...++++++.......%#$$$$#%++....#:::*::$%+..",
-".++@@@@@%@@+...+*)>>-==='$@..+d_n55o54d'%.",
-".+#$$##$#$##+..@~_(]^i]]!):..%8valglzvlh-+",
-"..+#$$#$#@@%...+=!}}}(]~3'#..+{uzwzsl[[^$.",
-".+.+%##&#@+++...@:d{i/!'*$+...#;0xfa64|,+.",
-"....+@#$#+++....+#:-d(!:$%....@$bo0af)*#..",
-"...+.++$#+.......+#$>_!&%++....@$-5v8-$@..",
-".....++#%++..+....@#*]d&#...+...@$|l0,#+..",
-".+....+#%@....+....+&33:#+.......#=8h|$+..",
-"...+...@@%+.....+..+#=>=&+.......+$599'@..",
-".....+..@%@+........+%=3'$+.+.....+:514:..",
-".+......+@++.+....+..+&'&%....+....+'!>&..",
-"..........+....+.......+@@.....+....+@#%..",
-"...+..+.............+...+..+.....+........",
-"+......+...+..+..+....+............+...+..",
-"....+.+.++........+#$@#$%+..+..+@$*#:'#+..",
-".+..+@%@@%%+..+..+&)~*=!=&.....+*(7bnu9=..",
-"...+@#$+#$%@....@#:~_=3]~'@...@:>uzo0s0|%.",
-"..+++%$%@##@....%&'{()~]~'@+..$;4fae<zg5$.",
-"..+@%$&##$##+.+.&=3_[!](]~:+.+'i[va6fvl/;@",
-"..+@@$&#$$$%@...&=3_[{]/}~*+..,i7vaflav1b@",
-"...++#$@###@+...+$:{/3!}!=$+..@:)uahguy9:+",
-"....+#$@@##@.....@$!_b3]~=@....#,uae1lg5#.",
-"....+%$%###@..+..+$!_;d{~'%....+&fanqf14#.",
-"+...+#$@@#@%.....+%!_>d]~'@+...@$ua90lq!@.",
-".....#$@#$@@.+..+.@!(3!{~,+..+.+#uae6w14%.",
-"..+..#$#%$#@......%~/~{_3'+.....%uvflv7)+.",
-".....@@%@@++......+'3=)3=$......@~2!(2n,..",
-"......+.+@++.+.+...+#%$*$#..+....@$#,;*#..",
-".+...............+...+++......+...+.@@+...",
-"...+.+....+...............................",
-"..++.+..+...+..@&*&$%%%@+.+..@=)>:#$$@+.+.",
-".+@#%@@@@+....+$3!3':'*&%@..+*7f<4;db'$%+.",
-".+@#%%@%###@+..$)!~~)~~!3=:+.:/f1q<18u/^;@",
-".+@@##$#$&##%+.@')~]_{_[}!>#.#deqfalaaa69$",
-"..+@###@#$%%+..+&>~]]b!}!)*@.#-ngffe6z6/)@",
-"..+@###@@%%@+..%&>^]!=>3~=#+.%-9fx8o9115$@",
-".+@##$%@+@#@+..@,~]]~,*'~)#+.%4qwfg4|51h$+",
-".+@###%+++##+..@3]!~~*&'!)$..%[zgg1|>4u7$+",
-"..##+%#@++##+.+@~{>)!*$*]~#..#8uiq7|-|lu&+",
-"..++@##+@+##....:,:!{':']!#+.+=4;8l4>4zu$.",
-"....+@#@##%%+...+%#)])3~{3%...@$$[z[/7v/$.",
-".+...@###$#@.....++'!]_(~'@....+%!6svsu4@.",
-".....++%@@++.......$:>)):#......+:3i(_):..",
-"..+....+++...+......@#$#+..+......@:&:%...",
-".....+.........+.+...+.......+.....+++....",
-"..........+.............+......+.......+..",
-"..+...+.....+.....#%@.+++.+.....&&%..++...",
-"....%@@+..+...+..#==*$%#&#.+...$9i~:#&'*..",
-"...+%%%@@%#@.....$)33&:=~=+..+.:h8h;;57i#.",
-"+...@##+@%#%+....#={!'=3]3&....&9ff457z7&.",
-"..++.$$@@$#@+..+.%:!_=3{~'$....#)usn<z0^:+",
-"....+%$###++.....%${_^!!'&%...+#,fv66fi-#.",
-"...++##$#%++.....#$~_/]3:@+.+..#-1vvf0>#+.",
-"....+@$&$@+.+...@%:d_2}=&%+...@$;0aaln-#..",
-".++@@##$$@@...++#*>!}/}3:@...+:|_6zszh;#..",
-".++#$####$@+...@'!(}{~]}=#@..#4usvf1zv5&@.",
-"..%#$%+@@@%++..@=!{!>,)~=:#..$9xu7_497(b$.",
-".++@+++.+@@@+..@=3':###:='&+.+5[5;:$:;54-@",
-"...++.....+.....@$#++++@#%+...$'$#@++@$$@.",
-"......+.....+............+................",
-"..+.......+...+....+.......+.........+....",
-"...+............+............+....+....+..",
-"...+...+....+..+%$@..+..+....+&:%.........",
-".+%@@....+....@&'=*$.....+..%-^i):++..+...",
-"+@#$#@........$3{{~'@.......*hfz1d@.....+.",
-".@###@+...+...@*~]{=$#++%%+.#48szi:#+@$#+.",
-"..@##%+.++@+..+#=!_3$%#&**%.+$9fvh'$$*~;#.",
-"..@#&#@+@@#%+..@*![~:$:=!)@..@4ua8>*)9x(#.",
-"..+@$#++@#%@...+&)(!'$=!)'@..+'(af4-o12!%.",
-"...+###+@%++....@*{{)*=~'$....%blx0|924:..",
-"...+@#$++@+..+..+$>{_-**$+..+.@*]lz4|d*%..",
-"....+%$%@+.......+$!]):#@@.....#-7ze|:#@..",
-".+...+@#@++...+..+@:){)$%+.....+#;9x9*#@..",
-".....++@%%++......+#$)3)&@.+....+$;h0e>%..",
-"...+...+@#++...+...+@:=~'$...+...+#-_6!$..",
-"+.......++@++........@$:':.........@:;^;+.",
-"....+.....++.....+....+@$$..........+@':..",
-"+.....+.......+.............+..+.........."};
+static char *matrix2_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"320 377 12 1",
+/* colors */
+"  c #81DD81",
+". c #5AD25A",
+"X c #2BA02B",
+"o c #279027",
+"O c #217A21",
+"+ c #E0F7E0",
+"@ c #1B641B",
+"# c #165016",
+"$ c #0B2A0B",
+"% c #081E08",
+"& c #A7E7A7",
+"* c #000000",
+/* pixels */
+"***************************%%%%%%****************%**%************%%%$$###$$%%%*******%%%$###$%%************%*%%**************************************%*%*%*************%$#####$%********%$##@##$%***************%%%%%*************************************************************************************************%%$$#$$%**",
+"**************************%%$$#$$%%**********%%%%%%%%%%%*********%$##@@@O@@#$%%******%%#@@O@@#%%%*********%%$%$%%%**********************************%%%%%%************%%#@OoO@#$%******%$#@OOO@#%%************%%%$$$%%%***********************************************************************************************%$#@@@#$%*",
+"************************%*$$@@O@@$$%*******%%$$#$#$#$#$$%%*****%*%#oXX....oO@$%*****%%#@o. .o@#$%*******%%$$##@#$%********************************%%$###$$%**********%%#@o++.Xo#%%****%%#oX.++o@#%%***********%$#@@@#$%*********************************************************************************************%%%#O...@#$*",
+"************************%%$@OXoXO@$%%*****%%$#@@O@@@O@##$%%****%%$@X.... .XXO#%****%%#@oX & XoO#$%%****%%$#@OOO@#$%%***********%%$%%%%%**********%%$#@OO@#$%********%%$@oX++..X#%%****%%#o..++Xo@$%*********%%$#@Ooo@#$%%**********%*%%%*****************************************************************************%#@o   o@$*",
+"************************%$@X.+++.X@$%*****%%@Oo. XXX .oO@%%****%%#O. &&&++..X#$***%%#@o &+++ .XO@%%****%%#O.    O#$%*********%%$$###$$%%*********%$@O.  Xo#%%*******%$#Oo.++.XX#%%****%%#XX.++XXO#$%*******%%$#Oo+++oO#$%%*********%%$$$%%**************************************************************************%%@oX++&o@$*",
+"***********************%%#@X.+++.X@#%****%%#OXX& .X.&&XXO#%****%$@o &&&&++ .X@$**%%$@OX &+++& XXO$%***%%#@o  && o@$%%*******%%#@OOOOO##%%*******%%#@o & .o@$%******%%$@.. &&Xo@$%******%$@XX&+ ..@$%%*****%%$#OoX+++Xo@#$%%*******%$#@@@#$%************************************************************************%%$@X.+++XO#*",
+"***********************%%#o..+++..O#$****%%#oX.&&...&&.Xo#%***%%#@o &&&&++ ..O#**%$@OX.&&+++& .Xo#$***%$@OX &&&&XO@$%*****%%$#@OXXXXoO@$%*******%$#oX&&&.X@$%******%$#O. &&&XO@$%*****%%$#OX&&& .O#$%****%%$@@oX.+++.XoO#$%******%%#@ooo@#$%***********************************************************************%%#OX.+++X@#*",
+"***********************%$#O &+++& o@%%***%$@X. ++   ++..X#$***%$#oX&&&&&++ ..O#*%$#O &&+++++++..X#$**%%#XX.&&&& ..@$%*****%%#@o&&+++& O#%%******%$OX.+++..@$%%******$@o &&& X@#%********%#OX &&&&o@$%****%$#X....+++....X#$******%#@o+++o@$%***********************************************************************%$@o  &&&X@$*",
+"************************$@o &+++& o@$%**%%$@.. ++   ++ .X@$**%%#OoX&&&&&++  .o@*%$@o &&+++++++ .X@$**%$#X..&&&&& .O#$%****%$@OX&&+++&&o@$******%%#O..+++.X@$%******%$OX&&&& o@$%*******%%$#o &&&&o@#%****%#@.. . +++ . ..@$*****%%#OX+++XO#%%**********************************************************************%$@o &&& O@$*",
+"***********************%$@o &+++  o@$***%%$OX. ++ . ++..o#%*%%$#.  ++++++++&&XO*%#@o+++ &...& ..X#$*%%$#X. &&&& & o@$%***%%#o..++...  O#$%*****%$@o&&&  XO#%%*****%%#@X&&&& O#%%*********$#O &&&&XO#%***%%$@.  +++++++ ..@#******$#oX+++Xo#$%***************************%*%*%*%**%%*******************************%$#oX++..XO#%*",
+"***********************%%@o. +++&.o#$%***%#@.. ++. .++.Xo#%**%#@.. ++++++++&&Xo*%#@X&++ &...& .Xo#%**%$#X..&&&&&& oO#$%**%$#X..++...  O#$%*****%$#o&&  .o@$%%******%#OX+++.oO#%%*********%#@XX+++XO#%%**%%#@.. +++++++& .@#***%%%#@o.+++.o@#%%*************************%%%$%$%$$%%$%%%****************************%#@oX++..o@$%*",
+"***********************%$@o &+++  o@$***%%$@X..++...++.XO$%*%%#@. &++++++++&&XO*%$Oo+++ &...  .Xo#$**%$#o..&&&&&&&XO@$%**%$#X..++..X .O#$%%*****$#O &...@#$%******%$#oX+++.o@$%*********%%$@o.+++Xo#$****%$#.  +++++++ ..@$**%%$#@OX.+++.Xo@#$%**********************%%$$##@#@#@@@##$$%**************************%$#OX.++.XO#%%*",
+"************************%#o &+++& O@%%***%$#X........ oO#$%*%%#O.. ++++++++&&X@*%$@o&&&++&&& ..XO#$***%$@OX&&&&&& ..X$%**%$@o..++..XXoO@$$%*****%#@X.oO@#$%********%#oX+++Xo@$%**********%$@oX+++Xo#%%**%%$#OX.. +++  .XO#$**%#@OoXX.+++.XXoO@$**********************%$@@OoooooooooOO@$*************************%$#o.  &&X@#%%**",
+"***********************%$#O &+++& O#$****%%#oXX.XooX..O#$%***%$@. &++++++++&&o@*%$#O &&++&&& ..Xo@$**%%$#OX&&&&&&&..X#%**%$#XX.++...XXOO@$%****%%$#oo@#$%%%*******%$#oX+++Xo@%***********%%@oX+++Xo@%****%%#@XX  +++ .XXO#$*%$#OXX...+++...XXO@*********************%$@OXXXX.XX.XXXXoO@*************************%#@X&++ .o@$%***",
+"************************%#@X.+++.XO$%*****%%$#@@@@@@@##$$%**%%#Oo..++   ++..XO#**%#@oX.  +++++  .O#***%$#OX &+++&&XXO#%**%$#X..+++++....X@$******%$$#$$$%**********%@oX+++Xo#$***********%%@oX+++Xo#$%***%%#OX.++   ++.XX#%*%#OX+++++++++++++XO*********************%#OX+++++++++++++XO************************%%#OX+++..O#$%***",
+"************************%$@XX+++.o@#%%****%%$$$#$$$$#$$%****%$#OXX.++   ++.XXO#*%%$@oXX &+++++&& O@***%$#OX&&+++&&.XO@$*%%$@X..+++++.. ..@#******%%%%%%***********%%#oX+++Xo@%%**********%%@oX+++Xo#%*****$$oX.++   ++.Xo#%*%#oX+++++++++++++XO************%********%#oX+++++++++++++Xo************************%$@oX+++..@$%****",
+"************************%$#oX+++Xo@$********%%%%%%%%%%%%****%$#oX..++   ++..XO#**%$@OX.. +++++&& o@**%%$#OX &+++&&.Xo@$*%%#@X..+++++..  .O#*******%%%*%***********%%#oX+++Xo@$%**********%$@o.+++Xo#%*****%#OX.++...++.Xo#%*%#OX+++++++++++++XO********%%%%%%%******%$OX+++++++++++++XO********%%%%%%*********%%#@..+++Xo@$%%***",
+"************************%%#oX+++XO#%%***********%*%*%*******%$OX+++++++++++&&O#*%%#O.. . ...& +++X@**%%$X..  ++++&&& O#*%$#o.&&&&+++++&& o#***********************%%#oX+++.o@$%**********%$@oX+++Xo#$%***%%$OXX. XXX .XoO$%*%$@OXX...+++...XXO@*******%%$$##$%%%****%$@OXXX.X.X.X.XXXO#******%%%$###%%%*******%$@o&&&  o@$%*****",
+"*************************%#@X+++X@#%************************%#OX+++++++++++&&@#*%$#O. &. ...  +++oO**%%$oX.. +++++&& O@*%$@o &&&&+++++&& O#***********************%%#oX+++.oO$%**********%$@X.+++XO#%****%%$@oX..ooo..oO@$%**%$@OoXX.+++.XXoO@$*******%$#@@@@#%%****%%$@@ooooooooooOO#$******%$#@@@@#$%******%%#OX&&  .O@$%*****",
+"************************%%$@oXXXO@$%************************%$@X.  ++&&&&&.Xo@$*%$@o&+++++&+++&&&X@***%$#@OX.&&&..&& o#*%$@X+++  & &++...o@************************%#OX&&& .O#$%********%%#O. &+&XO#%*****%%$###@#@#@@##%%%**%%$#@oX.+++.Xo@#$%******%%#@...oo#%%****%%$####@#@@#@@##$%*****%%#oX...@#%*****%%$@oX&+ ..@$%******",
+"*************************%$#OXXXO#$%************************%$@O.  ++&&&&&XX@#$*%$Oo&++++&&&++&& o@**%*%$#@oX&&&..&& o@*%#@X&++&  & ++ ..O#***********************%%$@o&&+ .o@$%*******%%$@o. +&&X@#%%*****%%$$$$$$$$$$%%*%****%$#@o.+++XX@#$%*******%#@o   .o#$%******%%%$$$$$$$%%%%%******%$@o.   O@$%****%$#oX.++.oO#$%******",
+"*************************%%#OXXXO@%%*************************$#O.  ++&&&&&XO#$%*%$@o&++++&&&++&& O#***%%%$@OX&&&..&& o#*%#@o&++ &  &++...o@************************%$@o. &&&oO$%%******%%#@X&&   o@$%********%%%%%*%%%%*%*******%$#oX+++Xo@$%*******%$@OX&& .X@$%********%******%%%%*******%%#@X.&& o@$%****%$@o..++Xo@$%%******",
+"*************************%$#O+++O#$*************************%%#O.. ++&++  oO$%%*%$#o.  &&+++&&XXO#$*****%%$@o&++++&& O#*%$@o&&&++++++++++XO*************************$#O. &&&Xo#$%******%$#OX&&& .O#$**********%*%*****%*********%%#OX+++XO#%%*******%$OX.+++.X@$%***********%***************%$O. +++o@$%****%#O.  &&XO#$%*******",
+"*************************%%#O+++O#$%*************************%$@.. +++++  o@$%***%#@..  &+++&&XO@#%******%$@O&&&&&&  @#**$#O &&+++++&&+++oO*************************%#@.. &&Xo@$%%*****%$@oX&& ..@$%%****************************%$@o+++o@$%*******%$#O..+++ X@$%%*************************%%$@. +++o@$%%***%#O.&&& X@$%********",
+"**************************%#@OOO@$%%************************%%$@X. ++&&&& O@$%**%%%%#@OX.+++XX@#%%********%#@OoXoXoOO#$**%$#OoXXX.XXXXXXoO#***********************%*%%#OX.++..X#%*****%%#X..++XXO#$%*****************************%$#Oooo@#$%********$#o&&&  XO#$%***************************%$#@ooXo@#$*****%#O  && O@$%********",
+"**************************%%##@#$$%**************************%$@X. ++&&& .O#%******%%#@oX+++Xo#$%********%%%$#@@@@@##$%**%%$#@OoOooooooO@#$*************************%%$@OX++..X#%%****%%#X..++Xo@$%*******************************%$##@@#$%********%$@O&&  .o@$%*****************************%$#@O@@#$%%****$#O. ..X@#%*********",
+"***************************%%$$$%%***************************%%#oX.&&&&& .@#%%*******%$#O. .@#$%***********%$$$##$$$%%***%%%$$$###@######$%**************************%%#Oo++.Xo#%*****%%$oX.++o@#%%********************************%%$$$%%%********%%#o &...@#%%*****************************%%%$$#$%%******%$@...XO#$%*********",
+"****************************%%%%%****************************%%$#@OooXooO@#%%*********%$#@@@#$%**************%%%%%%%%%******%%%%$%$%$%$%%%****************************%$#@OOO@#$%%*****%$#@OoOO#$%**********************************%%%*%**********%%#OX.oO@#$%%*******************************%%%%%%%******%$#XXXOO$%%*********",
+"**************************************************************%%$##@@@@@##$%%**********%$$##$%%****************%*%************%*%*%*%*%********************************%$##@##$%%******%%$##@#$$%*************************************%************%%$#XXO@#%%**********************************%*%*********%%$#@##$$%**********",
+"******%%%$$%%%%*********%*%%%$%%%%**********%%%$%$$%$%%%*********%%%%$$$%%%*************%%%$%%%********%%%$$$$$$$%%%%************%%%%$$%%*****%%$%$$$$$$$$%%%*********%%%$%$%%%***********%%%$$%$%******************************************************************************************************************%*%*********",
+"*****%$$##@##$%%%*******%%$$####$%**********%%$###@@##$%%*******%%$#@#@@@#$%%**********%$$$##$%%%*****%%$###@@@@@##$%%*********%$$##@###$$%**%$$#@@@@@@@@##$$%******%%$$##@###%%%*******%%%$#####$%%%************************************************************************************************************%%%%%$%%%%*****",
+"**%%%$#@OOoOO@#$%%****%$$#@OOOO@#$%%******%%$#@OOoooOO@#$%%***%%$#@@OoooOO@#$%%******%%$#@O@O@#$%***%*%$#@Oooooooo@@$$******%%%$#@OOooO@@$%*%%#@OOooooooooO@#$****%%%##@OOoOO@@$$%******%$#@OOOOO@#$$%*********************************************************************************************************%%$######$$%%****",
+"**%%$@@X. & .XO@$%%**%%#@OoX.   O#%%*****%%$#@o..&&&..o@#$%***%$#@o..&&&..OO#$%******%$#OX....@#%****%$OoX & & &&..X@$%*****%%#@OoX &  .O@$*%#@.. &&& &&&...@#%***%$#@oX. & .XO@#$%****%$#@o   ..oO@#%%*******************************************************************************************************%%$@@OoooOO##%%***",
+"**$$@Oo..&&&..oO@$%*%%#@oXX..&  oO$%*****%$#OoX  &&&  XoO#$**%$#OoX  &&&  XoO#$*****%%#Oo... .O@$%**%$#OX.&&&&&&&  .@#%*****$$@oXX.&&&& X@$*%#O.  &&&&&&&  .O@$**%$#@oX..&&&..XoO#$**%%$#OoX&&&  XXo@#%****************************************************%%%%%%*************************%%%%%%*************%%#@OoXXXXXXO@#$%**",
+"*%$@X..+++++++..X@$*%%#O&+++++++XO#%****%%#@. &+++++++& .O#*%$$@. &+++++++& .O#*****%$@X.+++++X@#%%*%%@X..++++++&& .O#%***%%$@X.+++++&&&XO#*$@o&&+++++&++++&o@$*%$$O.  +++++++& .@#***%#@X++&&&++++&o@$**************************************************%%%$#$$$%%**********************%%$$#$$$%%**********%$@XX+++++++.XO#%%*",
+"*%#@...++++&++ ..@#*%$#o&+++++++Xo#$%***%%@O &&+++++++&& O@**%#O  &+++++++&& O@****%$#O..+++++XO#%**%$@X. +++++++&& O#%***%$#OX.++++++&&XO#*$@o&&+++++++++++oO$**$@O &&+++++++&& o@**%$@OX++++++++++oO$*********%%%%*****************%%%%%%***********%%%$$#@@@@##$*****%%%%%%%%%%%%****%$$@@@@@#$$%%*******%%#OX.+++++++.XX@$%*",
+"%$#O.  +++++++ ..O@**$#O&&++++++Xo#%*****$@o &&+++++++&& o@*%$#O &&+++++++&& o@****%$#O..+++++Xo#%%*%#@.. +++++++& .O#%**%%$Oo. +++++&&&o@$*%#O&&+++&&++++++XO$*%$@o &&+++++++&& o@*%%$@XX++++++++++XO@*******%$$$$$$%%*************%%$#$$$%**********%$$@@OooXoO#$****%%%$$$$$$$$$%$%**%$@OoXooO@#$$%%*****%$#oX.+++++++..XO#$*",
+"%$Oo&++  ...  ++&o@**%$@oXX..+++Xo@$****%%@O&&+  ...  +++XO**$#O.  ..... &++&o@****%#@X&+&&&++Xo#$**%#@.. ++......Xo@#%**%$#OX++&&&...XoO#$*%$@OoXXXX..&&&&&o@$*%$OX&++  ... &+++X@*%$#X..++.....+++.o@*****%%$#@@O@#$%************%$##@@@#$%*******%$$#@Oo  +++.X@**%%$##@@@@@@@@@##$%*$#@+++&&Xoo@#$%%****%$#X..++...&&++&o@$*",
+"%$OX+++  XXX  +++XO*%%$$@oXX.+++XO@%%***%$#O&&&..XX.  +++XO*%%$#. ..XX.. &+++XO***%$#OX&+&&&++Xo#%%*%$@.. ++ .....XX@#%*%%$@XX++&& ...Xo@$%*%$$@@OOooX.&&&&&o@$*%$@o+++& ...  ++&X@*%$@X. ++.X.X.+++XX@*****%%#@oooo@#$%**********%$#@OXoo@#$%****%%$#@OXXX  +++.X#**%$#OOooooXooooOO#$*%#O+++&&.XXoO@$$%***%$@X. ++...&&++&XO$*",
+"$#OX+++ .XXX..+++XO***%%##oX.+++.O@%%****%$@OoooooXX&&+++X@**%$#@OOoXXX.++&&&o@**%%$OX.++ . ++Xo#$**%#@X. +++++++& .O#$*%$#X..++&&&&&.Xo@$%**%%$$##@OXX++ ..O#$*%#@X&&&&&...&&&&&oO*%$@.. ++.X.X.+++.X@*****%$@..+++o@$%**********%$@..+++o@$%***%%$#OX.&++++...oO#**$#@  &&&&&&& &  O#*%$@oX.&&+++ .O@#$$**%%#XX.  .X.. +++X@#*",
+"%#OX+++ .XoX..+++XO****%%#@XX+++Xo#$*****%$$#@@@OoX.&&++&X@***%%##OOoX..++&&&oO**%$#oX.++   ++Xo@%%*%#@.. +++++++  .O@%*%$@X. ++&&&& ..X@#%***%%%%$#@oX++ ..@#%*%$@o&&&&&...&&&&&o@*%$@.. +&.X.X.+++.X@****%%#@. +++X@#%*********%%#@. +++X@#%**%%#@Oo..+++++..XO#$*%$@o &&&&&&&&&&& O@*%$#@oX&&+++  XoO@#$*%%#OX....X.. +++XO#*",
+"%#OX+++ .ooo..+++XO*****%$#o.+++Xo@%%*****%%$##@OoXX&&++&o@***%%$$@OXX..++&&&o@**%#@X..++. .++Xo@$%*%$#X..+++++++&  o@$*%#@.. ++&&&&&...O@$*****%%%$@o.++ .X@$%*%$@o &&&&...&&&&&o@*%$@X. ++..X..+++.X@****%%$O. +++X@#%*********%%#@. +++X@#%**$$@OXX. +++++.XX#$%*%$@o&&&&&&&&&&&&&o@**%$#@o &+++& .XXO@$*%%$OoX..XX.. +++oO$*",
+"%#oX+++..oOo..+++XO******$#oX+++Xo#$*******%%$#@O.. ++...O#****%%$@..+++++ ..o@*%$@O  &&& . ++.X@$%*%$#oX.&&...&&+++XO#*%$@.. ++++++++++X@#******%$#OX.++XX@#%%*%$@o.. +++++++...o@*%$@X..++...&&+++.XO*****%#@X.&&&oO$%%*********%#@..&&&X@$$**$@O&&&++&& .XoO#$%%*$#oX&&++++++++++&XO***%$#@oX...+++++.X@**%%$#@oX.. ++&&&o@$*",
+"%#OX+++..oOo..+++Xo******$#oX+++Xo@%%*******%$#OX.  ++..o@$****%%$#X.+++++...o@*%$@o &&&&. .++.XO@$**%$OoX&&...&&+++Xo#*%#@.. ++++++++++XO#******%$@oX.++Xo@$%**%$@o...+++++++ ..o@*%$#X..++... &+++.X@****%%$@X.&& O@$***********%$#X. & O@$***$@o&&+++&  XoO#$$***$#oX&&+++++++++&&Xo****%$#@oX..+++++..@**%%%$@OX.  ++&& O#$*",
+"%#oX+++..ooo. +++XO*****%$#oX+++Xo#$********%#@X.+++ .Xo@$$****%%#@Oo...&&++&oO*%#OX+++++&&&++ ..@$*%%$#@OOoooX..+++.X@*%$@.. ++ ....+++.X@******%$@.  &&XO#$%**%$@o&++&&. .&&++&oO*%%#@XX&&++++++++.X@******%##OOOO@$%%**********%%$@@oOO@$%%**#oX+++++   Xo@#%%%**%#oX&&&&&&&&&&&&&XO****%%$@OX..+++++ .O****%$#OX+++  XXO@$%*",
+"%#OX+++..ooo. +++Xo******$@oX+++Xo@$******%%$@O..+++ .oO#%%***%%$#@@oX..&&+++XO*%#OX+++++&&&++& .O#*%%$#@OOO@OoX.+++.X#*%#@.. ++.....+++.o@*****%%#O.  +&XO#%%**%#OX+++&&...&&+++XO**%$#OX&+++++++++.X@*****%%%$#@@#$$%************%%##@###$*%**#OX+++++   Xo@#$%***%#oX&&&&&&&&&&&&&X@****%%#@oXX.&++++ .O*****$#OX+++ .XO##%%*",
+"%#oX&++ .XoX..+++XO*****%$@XX+++.o@$%*****%$#OX. +++ .O@$%%**%%##@@@OoX.&&+++XO*$#oX+++++&&&++& .O#*%%##@@@@@@oX.+++.X@*%$@.. ++.....+++.X@*****%$#o. &&&X@$%***%$OX+++&&...&&+++XO***%#Oo&&++++++++.X@******%%$#$#$$%*************%%%$##$%%%***$OX&++++& ..Xo@#$%%*$#oX&&&&&&&&&&&&&XO***%$$@OXX..+++++..@****%%#OX+++..O@$%%**",
+"%#OX+++ .XoX..+++XO****%%#@o.+++XX@#%%**%%%#oX.++&& .oO#$%%*%%$@X..oooXX  +++XO*%#oX+&++++++++&& o#*%$#X..ooOOoX.+++.X@*%#@X. ++..XX.+++.X@*****%$@o&&&& o@$%%**$#OX+++  ...  +++XO**%%%@OX...   +++Xo#*******%$$###$%%************%%$$###$%****%#@oX.  ++++&XoO#$%*%#oX&&+++++++++&&XO*%%%#@O..+++&&.XXo@#*****%#OX&&&Xo@#%%***",
+"%#@X+++ ..XX..+++X@***%%$@OX.+++.Xo@$$%**%#@X..++&& .Xo@#$%*%$#O...XoXX.  +++XO*%#oX&&++++++++&& o@*%#@...XXoXX..+++.X@*%$@.. ++.....+++XX@****%%#@X&&&& o@$%***%$OX+++  ...  +++XO***%$#OXX. .. +++XO#******%$#@O@@#$%***********%%$#@@@@#$%***%$#@OX..+++++..o@#$*%#OX&&++&++&&&&&&XO**$#@oX  +++&&XXo@#$****%%#@X&&&XO#$%****",
+"%$@o&++  ...  ++&o@**%%#@OXX.+++.XXO@$%*%$#OX..++&& .XXO#$$*%$@o.. .XX.X  ++&X@*%$Oo&&&+++++++&& o#*%#O.. ..XX...+++.o@*%%#X..++.....+++.X#*****%#@X&&&& O#%%***%#@X&++  .X.  +++o@**%%$@OX...  .+++XO#*****%%#@Oooo@#%%**********%$#OoXoO@#$***%%$#@O..+++++..Xo@#*%$@o&&&&&&&&&&&& o@*%$@oX. &+++& oO##%%*****%$@X&&&XO#%%****",
+"%%@O.. ++&&&++  .O@*%%$@X..&&+++&& ..@$*%#@X+++++&&&&&..X@$*%#OX+++&&&&&++&&&o@*%%#@oXX. &&&++&  o@*$#@  &++& &++++&XO#*%%#@XX+++++&&+++XX#*****%#OX+++XX@#%****%$@o &&++&&&++&&&o@**%$@OX &&&&++&&&o@$****%%$#..+++o@$%*********%$#O..+++o#$%****%%$#@oXXX&&+++.X#*%%#@OoooXoXXoXooO@#*$#@&++++...Xo@#$%%*****%%$@o & o@$%*****",
+"%%$@X..++&&&++..X@$*%%#@..&&&+++&& ..@#*%#OX+++++&&&&&  .@#*%#OX+++++&&&++&& O#*%%$#@oX..&&&++&  O@*%#@.&&++&&&++++&o@$**%$#OX++++++++++Xo#*****%#OX+++Xo@%%****%%#O &&++&&&++&& O#**%$OoX&&&&&++&& O@$*****%#@..+++o@$%*********%$@o. +++o@$%******%$#@OoX  +++.X#*%%%$#@O@O@O@OO@@##%*%#O&++&&.XoO@#$%%*******%$@o & o@$%*****",
+"*%$#@oX. &+&& XoO#$*%%#O. &+++++++& .O#*%#OX&+++++++++& .O#*%$@O...+++++&&XXO@#***%%$@O..&++++&& O@*%$#OX.&&+++&&.Xo@#$***%$@O..&&&++ ..o@$****%%$@o&&&XO#%%****%%$@OX.&&+++&&XXO@$*%%#oX.&&++&  XXO@$%****%%#@..&&&XO#%%*******%%#@X++ &.o@$%********%$#@@ooXXoO@#***%%$$$#$###$#$$$%%*%#@XXXXoOO@#$%%*********%$@o & o@$%*****",
+"**%$#@o..&&& .oO#$%*%%#O.&&&++++&&&  @#*%#OX&&++&+++&&&  O#**%#@X..&&&&&&&Xo@$%****%%#@..&&&&&&  O#*%%#@OX &&&&&&XoO#$%***%%#@XX&&&&&..XO#$*****%$@o   o@$%%*****%%$@OX &&&&&&Xo@#%*%%$OX.&&&&&..oO##%%*****%$@X.&&&o@$%********%%#OX++  .O#$%********%%%$##@@O@@$$***%*%%%%%%%%%%%%%***%$#OooO@##$%%%**********%%#O   O#$%*****",
+"***%$#@X.&&&..@#$%***%$@.. &&&&&&& ..@$*%$Oo&&&&&&&&&& ..@$*%%$@oX.&&&&&  O@#$%****%%$#XX&&&&& ..@$**%%$@O  &&&& o@#$%*****%$#OX  && .Xo#$%*****%%#@.  @#$%*******%%#@O  &&&  O@#%%*%%$OoX&&&&&.XO#$%%*****%%$#X.&& O#$%********%$@oX++ ..@$%***********%%%$$#$$$%**********%**%*%*******%$##@##$%%%*************$#@...@#%******",
+"****%$#@OOooO@#$%***%%$#@OooXoXoXooO@#$*%%#@OooXXoXXoXoO@#$**%%$#@OoXoXooO#$%%*******%#@OooooooO@#$***%%##OooXooO@#%%%******%$#@OooooO@#$%%*****%%$#@@@#$%********%%%#@OoooooO@$%%%**%$$@OoooooO@#$%%*******%%##@OO@@$%*********%$oX. &XoO#$%************%%%%%%%%%************************%%$$%%%%***************%$#@@@#$%******",
+"*****%%$##@@##%%%*****%%##@@@O@O@@@@$$%**%%##@@@OO@O@@@##%%***%%$$##@O@@@##%%******%*%%$#@@@O@@##%%****%%$##@@@##$%%*********%$$##@@##$$%%*******%%$###$%%**********%%$#@@O@##$%%*****%%$$@@@@@#$%%%*********%%$#@##$%%********%%$OXX .o@#$%*****************%*%**************************%%*%%******************%%$$#$$%%******",
+"******%%$$$%$%%*******%%%$$#$#$#$$$%%%%**%%%$$#$#$#$#$$%%%%*****%%$$$$$$$%%%***********%%$$$#$$%$%*****%%%$$$#$$$%%%**********%%$$$$$$%***********%%%%%%**************%%$$$$$$%%*******%%$$$$$$%$%***********%%%%$%$%%**********%%$@@@@@#%%%***********************************************************************%%%%%********",
+"*************************%*%*%*%***********%*%%%%*%*%****************%%%%*%*******%%%*%%%*%************%*%%%*%%%%*%*********%%*%%%*%%%*%************%%%%*%*********%*%%*%****%*%%*%******%*%%*%%%%*%**********%*%%%*%%%*%******%*%%%***%*%%**%******%%%*%*%************%***********%%*%*****%********%%************%**%*********",
+"******%%%%%%%***********%%%%$%$%%%********%%%$%$$$$$%%%***********%%$%%%$%%%%%**%%%%%$%$$$$$%%********%%$%$$$$$$$$%%%%***%%%%$$$$$$$$$$%$%********%%%$%$$%$%%%%**%%%%$%$%%%%%$%$%%%*****%%$%$$$%$%$%%*********%$%$$$$$%$%%****%%$%$%$%%%$%%$%%****%%%%$$$$%%%*********%%$%$%**%**%%%%%%***%%%%%%%*%%%%%$%%%*******%%%%$%%%******",
+"*****%%$####$$%%******%%$$##@###$%******%%$$#@@#@@###$%%%*******%%$$#@@####$$%%*%$##@@@@#@##$$%%****%%%$#@#@@@@@@#@$$%***%$$##@@#@@@#@###$%*****%%$$#######$$%%**%$###@###$###@###$**%%%$##@#@@@@###$$*****%%%$##@#@#@###$%*%%$###@###$######$%*%%$##@#@####%%******%%$$###$%%%%$$####$*%%$$###$%%$$#####$%*****%%$$####$$%*****",
+"**%%%$#@@OO@@#$%*****%%$#@OOOoO@#$%*****%$#@OOoooooOO@#$%%****%%%$#@OOoooOO@@#$*$#@OOoooooOO@#$%%***%$#@OoooooooooO@#$%*%$#@OooooooooooO@#$***%%$$#@OooooOO@@#$*%$#@OoOOO@@@@OOoO@#**%%##@OOooooooO@#$$****%%#@@OooooooO@#$*%$#@OOOOO@@@OOOO@#$*%%#@Oooooo@@#$%*****%$#@@OO##$%$##@OO@#*%$#@@O@@#$##@OOO@#$***%%%$#@OOOO@##%%***",
+"**%%$#OOXXXoo@#$%****%%#oX.    .O#$%****%#@.     &  .XO@$%%***%$#@XX     ..XXX#*#XX    &   ..O@#$%%*%#@.     &     .O#$*%#@.   & & & &  .X#***%$#@XX     ..XXX#*$#XX     XXX     XX**%$#X..    &  ..X@$****%$#X.  & &   XX#*%#XX     XXX   ..@#*%#@.       oO#%%****$#XX  .oO###Oo . XX*%#@.. .X@@@X.. .XX#***%$#@XX   ..O@#$%**",
+"**%$OoX&&+++ .@#%%***%$@X..&&& &oO#$%***$@O  &&&&&&& .Xo@$%*%%$@@oX. &&&&. ..X@*@X. &&&&&&& .Xo@#$%*$@O  &&&&&&&&&  o@$*$@O  &&&&&&&&&& ..@*%%$#@oX. &&&&. ..X@*$@X. &&  X.X  && .X*%%$O.. &&&&&&& ..@$***%%#O..&&&&&&&&.X@*$@X.&&&& .X. &&  O#*$#O. &&&&& .o#$%****$@..  &Xo@@@oX  &.X*$@o   ..oOO.. &&.X@**$$#OoX. &  .oo@#$%*",
+"*%$#oX.&++++ .o@$%%**%$@...&&&&&Xo@$%***$@o &&&&&&&&&..XO#$*%$@OoX. &&&&&   ..O*@..&&&&&&&&& .XXO#$*$@o &&&&&&&&&&&&XO#*$@o &&&&&&&&&&&&..O*%$@OoX. &&&&&   ..O*#@..&&&&&...&&&&&..*%%#@..&&&&&&&&& .@#***%%#O. &&&&&&&&..@*#@..&&&&&...&&&& o@*$@o &&&&&& .X#$%****#@..&&&.XoOoX.&&&..*#@X &&..XXX..&&&..O*%$@OoX. &&&& .XXO#$*",
+"%%#@X..&++++& XO#%%*%%#@. &+++++ .O#%%**#OX+++++++++++++X@#*$#O  &++++++++++&&o*O. +++++++++++++oO#*#OX+++++++++++++.o@*$OX+++++++++++++&&o*$#O  &++++++++++&&o*$O. +++++...+++++ .*%%#@. &+&++++&& .O#***%%#O &&+++++++..@*#O. +++++. .++++&XO*$@o&&+++++&.X@$%****#O. +++&&XXX &+++ .*#oX+++++.XX&&+++ .O*%#O  &++++&+++++oO#*",
+"*$#O. &&&   ++.oO$%**%$@. &+++++&.o@$%**$OX&++++++++++++XO#*$@o &&++&&&&&+++&&o*@. +++++&&++++++Xo@*$OX&++++++++++++.X@*$OX&+++++++++++++&o*$@o &&+++&&&++++&&o*#@. +++++...+++++ .*%%$@.. &+++++&  .#$***%%$@. &&++++++ .@*$@. +++++. .++++&o@*$@o&&&+++&&.X#%%****#O. +++&&X.X&&+++ .*#o.+++++...&&+++ .O*$@o &&+++&&+++++Xo@*",
+"%$@o &&&&   ++.Xo#%*%%$@OX.+++++&&X@$%**$@o.  ++.....+++.X@*#OX+++  .X.X.&&&&&o*@o.+++  ..X..+++ .O*$#o.  ++.....+++XX@*$@o.  ++.....&&&&&X*#OX+++  .X.X.&&&&&o*$@oX+++ ....  +++.o**%$#@oXX.+++..Xo@#$****%$#@oXX.++  .oO#*$@XX+++  +++++.Xo@#*%#@oX.++..XO@$$*****#O..+++++...+++++..*#oX+++++.  ..+++.XO*#OX+++  ..X..+++ .O*",
+"$$OX+++   & ++ ..@#***%#Oo.&++++&&XO#%%*%#O.  ++.....+++.X@*#OX+++ .XXoXX &&&&o*#oX+++ .XXXX.+++ .O*$#O.  ++.....+++.o@*%#O.. ++.....   &&O*#OX+++ .XXXXX&&&&&o*$@oX+++  .X.  +++Xo***%$#@oX.+++.XO@#$%****%%$#OoX.++  .o@$*$@oX+++  +++++XXO#$*%$@OX.++..XO#%%*****#@X.+++++...+++++.X*#oX+++++   ..+++.XO*#OX+++ .XXXX.+++ .O*",
+"%#OX+++&&+++++ ..@$**%%#@XX&&++++&Xo@$%*$#O.. ++.....+++.X@*@oX+++ .oO@Oo.  & O*#oX&++ .XooXX+++& o*$#@.. ++.....+++Xo#*$#O.  ++.X...&  & O*@oX+++ .oOOoX  &&&O*%#XX+++  ...  +++Xo****%$#Oo.+++XXO#%%%*****%%$#@XX++ ..o#$*%#oX+++  +++++XO@$%**%$@XX++.Xo#$%%*****#OX.+++++...+++++.X*#oX+++++& &..+++.X@*@oX+++ .oOoXX+++& o*",
+"%#OX+++&&+++++ ..O#**%%#OX.++   ++.XO$%*%#@.. ++&&&+++++.XO*@X.+++.XO@###@OoOO#*#oX+++ .oO@oX&&&&&o*%#O.. ++.. ++..Xo@$*%#@.. ++...++.XXo@@*@X.+++.XoO@OoX.XXX@*%#OX+++&&&&&+++++Xo*****%$@oX+++XX@$%*******%%%$@oX++ ..O#%*$#oX++++++++.XX@$%%**%$@oX++.Xo#$*%*****$OX.+++++ . +++++.X*#OX+++&&+++..+++.X@*@X.+++.XO@@OX&&&&&o*",
+"%#oX++++++++++ ..@#**%$#XX.++   ++.Xo#%*%#@.. ++&&&+++++.XO*@X.+++.X@#%$$###@#$*#oX+++..O@@OX &&&&o*%#@.. ++. .++..X@#$*%#@.. ++...++XXo@#$*@X.+++.XO@OoXX..Xo@*%@oX+++&&&&&+&+++XO*****%$@oX+++Xo#$%*****%%%%%$#oX++ ..@#%*%#oX++++++++.XO@$%***%%#oX++.XO#$%******$OX.+++++ . +++++.X*#oX+++&&+++..+++.X@*@X.+++Xo@##OX &&&&o*",
+"%#OX++++++++++ ..O#**%$@X. ++...++ ..@$*%#@.. ++++++++++..O*@X.+++Xo@$%%%$$$$$%*#OX+++..O@#@o  &&&X*%#@.. +++++++.XO@$%*%#@.. +++++++XX@#$%*@X.+++XXO@O.    ..@*%#OX+++++&+++++++Xo******%@oX+++Xo@%%***%%%%$$%$#oX++ ..@#%*%#OX++++++++..o#$%***%%@oX++.XO#$%$%%***$@X.+++&&+++&&+++.X*#oX+++  +++  +++.X@*@X.+++XX@##@o  &&&X*",
+"%#oX++++++++++ ..O#*%$#O.. ++...++ ..O#*%#@.. ++++++++++ .o*@X.+++Xo@$%%%%%%%%%*#oX+++..O##@o  &&&X*%#@.. +++++++.XO@$%*%#@.. +++++++XO@$%%*@X.+++.XOOo &&& ..O*%#oX+++++++++++++Xo*****%$#oX+++Xo#$****%$##@###@oX++ ..@#%*%#oX++++++++..o@$%%**%%#oX++.Xo#$#$$$%%*$OX.+++&&+++&&+++.X*#oX+++  +++  +++.X@*@X.+++Xo@$#@o  &&&o*",
+"%#OX+++&&+++++&& o@*%$@o.  ++...++  .o@*%#O.. ++++++++++ .o*@X.+++.o@$%%%$$$$%%*#OX+++..O@#@o. &&&X*%#@.. +++++++.XoO##*%#@.. +++++++Xo#%%**@X.+++XXooX &&&&..O*%#oX+++++++&+++++Xo******$@oX+++Xo@%%***%#@OoOO@@oX++ ..@#%*%#oX++++++++ .XO#$%**%%#oX++.Xo@@@@##$%*$@X.+++&&+++&&+++.X*#OX+++  +++  +++.X@*@X.+++.o@##@X  &&&X*",
+"%#OX+++&&+++++&& O#*%#OX&++++++++++&&o@*%$@.. ++.....&&&&&o*@X.+++.XO#$$$##@@#$*#oX+++..O@@Oo  &&&o*%#@.. ++   ++...XX#*%#@.  ++   ++XO#%***@X.+++..ooX+++++& o*%#oX+++  ...  +++XO*****%%@o.+++Xo@$%***#OX&&&oOOXX++...@#%*%#oX+++& &&&++.XO#$***$@oX++.XXOO...@#$*#@X.+++..+++..+++.X*#oX+++  &&&+++++.X@*@X.+++.XO@@OX&&&&&o*",
+"$#OX+++  &&&++&& o@*%#OX++++++++++++&Xo*%#O.. ++..X..&&&&&o*#X.+++.Xo@#@@OoOO@#*#oX+++..oOOoX & &&o*%#O.. ++   ++ ....O*%#O.. ++   ++o@$%***#X.+++.XXXX+++++&&o*%#oX+++  .X.. +++Xo*****%$@oX+++.o@$%***#oX++&XooX.++ ..@$%*%#oX+++  &&&++..o@$*%%$@oX++..XXo...O@$*$OX.+++..&&&..+++.X*#OX+++& &&&+++++.XO*#X.+++.XoOOoX&&&&&o*",
+"%#OX+++ &&&&++&& O#*$@X.+++&     &+++.X*$#O.  +&...X.&&&&&X*#OX+++& XoOOo     @*@oX+++ .XooX.+++..O*%#O.  ++... .&& & o*$#O.. ++....XO@$%***#OX&++& .XX..&&&&&X*$@O.+++ ..X.  +++Xo***%$$#OX.+++.XO#$$%*@X.+++..XX.++ .X@#%*%@oX+++& ...++&  o@**%#OX.++...X.+++.o#*$OX.+++..X.X..+++.X*#oX+++  ...+++++.X@*#OX+++& XoXX.+++..o*",
+"%$@o&&&&&...& ..X@#*$@X.+++   .   +++.X*$#o.. ++..X..&&&&&o*#OX+++&&XXXXX&&&& O*@o.+++  .XX..+++..@*$#o.. ++.... &&&&&o*$#o.  ++....XO#%%***#OX&++&&.....&&&&&o*$@oX+++ ..X.. +++.o***%$@OoX.+++.XXO#$%*@o.+++.....++...#$%*$@o.+++  ...++&& oO*%$@OX.++.....+++.o@*#OX.+++..XXX..+++..*#oX+++  ...+++++.XO*#OX+++&&.XX..+++.XO*",
+"%$#o &&&&...  ..X@$*#OX.+++&  .  &+++..*$@o.  +&.....&&&&&o*#@o&++&&.....&&&& O*@o.+++ ......+++.X@*#@o.  ++.....&&&+&X*$@o.  ++..X.o@#%****$@X&++& .....&&&&&o*$Oo.+++ ..X.  +++XX**%$#@XX..+++..XoO#$*#o.+++.....++..X#$%*#@o.+++  X..++&&&Xo*$#OXX.++.....+++.X#*#oX.+++.XXXXX.+++.X*#oX+++ ....+++++.X@*#@o&++& .....+++.X@*",
+"%%#OX. +++++++.XX#$*#O &+++++   +++++& *#oX+++++++++++++.XO*%#O...+++++++++&.X@*O  +++++++++++&&Xo#*#OX+++++++++++++&&o*#OX++++++++..#$%****$#OX. ++++++++++.X@*#O  +++++...+++++& *%%$@  &+++++++&& @$*#Oo&&++++++++Xo@#%%*#O &+++++..X. +++& *$Oo+++++++++++++XX#*#O &+++&&XoX &+++& *#o.+++++XX.&&+++.X@*%#O...+++++++&& XO#*",
+"%%$@X..+++++++.Xo#%*#O &+++++...+++++& *$oX+++++++++++++Xo@*%##XX.++++++++&&Xo@*@.&++++++++++&&&O@$*#oX+++++++++++++&&O*$OX++++++++..@$%%***%$@XX.++++++++&&Xo@*#@ &+++++...+++++& **%#@ &&+++++++&& @#*$@o&&&++++++&oO#%%**#@.&+++++.XX..+++  *$@X+++++++++++++Xo#*#O &+++& ooo&&+++& *#OX+++++XXX &+++Xo#*%##XX.+++++++& .O@$*",
+"*%$#oX.&++++++.XO$%*$@oX.....XXX.....XX*$@OX...........Xo@#**%##OoXX.....XXoO#$*@Oo..........XXO@#%*$@OX............XX@*$#OX......Xo@#%%****%%##OoXX.....XXoO@$*$@oX.....oXX.....Xo*%%$#oX.........Xo#$*%#@OXX.....XoO#$%***$@oX....XooOoXX.XXo*$#OX............O@$*$@oX...XXOOOXX..XXX*$@oX...XXOooX..Xo@#*%%$@OoXX....XXoO@$%*",
+"**%$#@OoX...XXO@#$%*$#OoXXXXXOOOXXXXXoO*%#@XXXXXXXXXXXoo@#%*%%%$#@OOXXXXXoO@#$%*$@OXXXXX.XXXoo@@#$%*%#OoXX.X.X.XXXXXoO#*%#@oXXX.XXXO#$%******%%$#@OoXXXXXoO@#$%*$#OoXXXXXOOOoXXXXoO**%$#@ooXX.X..XXoO#$*%%##OoXX.X.OO#$%%***$#OoXXXXX@##@OoXXoO*%#@oXXX.X.XX.XXo@#%*$#OoXXXoo##@OoXXXoO*%#OoXXXX@@@@OoXX@#%**%%$#@OOXXXXXO@#$%%*",
+"***%$#@OOoXoOO#$$%**%$@@OoOOO###OOoOO@@*%$$OOooXoOoOOO@@$%%***%%%$#@OOoOO##$$%%*%$#OooXooooOO##$%*%**%#OOooooooooOOO@@$*%$#OOooooO@#$%%******%%%%$##OooOO@##$%%*%$#OOoOOO###OoooO@#***%$#@OoooooooO@#%%**%%$##oooXo##$%%****%$#OOooO@#$$$#@@@@#*%%#OOoooooooooOO#$%*%$@@OoO@@$$$@@OO@@#*%$#OOoO@#$$##O@@#$%**%*%%$#@OOOO@##$%%**",
+"****%%$###@###$%%****%$$####$$$$$####$%**%%$######$##$$$%%******%%%$$###$$$%%%**%%$$#######$$%%%%***%%%$$#########$$$%%***%$######$%%%**********%%%$$#$#$$%%%***%%%$####$$$$$$$##$$****%%$#$###@##$$$%****%%%$$####$$%******%%%$#$##$$%%%%$$$$%**%%$###########$%%**%%$$#$#$$$%%%$$$$$%**%%$$$$$$%%%$$$$%%%*****%%%$$$#$$%%%****",
+"******%%$$$$%%%%******%%%%%%%%%%%%%%%%%***%%%%%%%%%%%%%%*%********%%%%%%%%%*******%%%%$%%%%%%%%*******%%%%%$%$%%%%$%%*****%%%%%%%%%%*************%*%%%%%%%%******%%%%%%%%%%%%%%%%%%****%*%%%%$%$$%%%%******%%%%%%%%%%********%%%%%%%%%**%*%%%%****%%%%$%$$%$%%%%%*****%%%%%%%*%%%%%%%%%***%%%$%%%*%*%%%%**********%%%%%%%%******",
+"****%***%*%**********************************%**%***%*****************%**************%**%*%*%************%*********%***************************%**********%**********%*%********%*********%**********************%*%*%***********%%%%%$%%********%%%%$%%******************%%%%%%%%**************%%%%%***************************",
+"**%%%%%$%$%%%%%%**********%%$%%%%%%*******%%%%%$%$%%%%***********%%%%$%$%$%%%******%%%%$%%$%%$%%%%****%%%%%%%*%%%%%%%%****%%%%%%%*%*%%%%%%%****%%$%%%%%*%%%%%%%***%%%%%%%%%%%$%%%%%***%%%%%%%%%%%$%$%%%*****%%%$%%$%%$%%%%*******%%#####$$%*****%%$####$%%**************%%%$#@###%%***********%%$$$$%%%*************************",
+"%%$$#####@####$$%******%%%$$####$$%%****%%$$########$$$%*******%%$$########$%%%**%%%$###@##@##@#$$%**%$$###$$$$$####$$%*%%$$###$$$%$$####$%*%%$$###$$%%$$$###$%*%%$$#####$$#$####$$*%%$$#####$$#$####$$***%%$$#####@####$$%****%%$#@OOOO##$*****%$#@OO@@$%%*************%$#@@OOO@#$%*********%%$#@@@#$%*************************",
+"%$#@OOooOoOoO@@#$%%***%%$#@OOOoOO@#$%%**%$#@OOoooooOO@#$%%****%%$#@OOOooOOO@#$%*%%$#@OoOooOooOOO@#$*%$#@OOO@@@#@@OOO@#$*%$#@OOO@@###@@OO@O#*%$#@@OO@@###@@OO@O#*%$#@OOOOO@@@OOOOO@#*%$#@OOOOO@@@OOOOO@#**%%$#@OOooOooOoO@#$****%%#@...  o@#%%***%$O &&Xo@$%************%%#@o. ...O#%%********%$#@...O#$%************************",
+"$#OoXXXXX.XXXXoO@$%*%%%$#OOXXXXXXoO@$$%*$@OoXXXXXXXXoo@#$%%*%*%#@OoXXXXXXXXoO#$*%$@OoXXXXX.XX.XXoO#*$@OoXXXXoOooXXXXoO@*$@OoXXXXOO@@ooXXXoO*$@OoXXXXoOOOoXXXXoO*$@OoXXXXXoooXXXXXoO*$@OoXXXXXoooXXXXXoO**%#@OoXXXXXXX.XXoO#****%$@o.    Xo@$****$#O &&.XO#$************%$OoX &  .o@$%*******%%#Oo...o@#$************************",
+"$OX++++++++++&& O@$**%#@oX&&+++++..X@$%*#@ &++++++++&&XoO$%**$$@oX++++++++++XO#*%#OX+++++++++++++Xo*$OX+++++.XX&&+++& O*#@ &+++&&ooo&&+++  *#@ &+++&&Xoo&&+++  *#@ &+++++...+++++& *#@ &+++++...+++++& *%%#O&&&++++++++++XO***%%#OX++++&.o@$%%**%#O.  &&o@$%**********%%$oX.+++++X@#%******%%$@X.+++.X@$%***********************",
+"#oX++++++++++&&&oO#*%$@oX.&&+++++ ..O@$*@O &++++++++&&.Xo@$*%$@oX.++++++++++Xo#*%#oX+++++++++++++.o*#oX+++++...&&+++& O*#O &+++&&XXX&&+++& *#o &+++&&X.X&&+++& *#O &+++++...+++++& *#O &+++++...+++++& *%$@o&&+++++++++++.o***%%#OX++++&XX@$%***%#O.  &&X@#$**********%%$oX.+++++XO#%%*****%%#O..+++.XO#%%**********************",
+"#oX++++++++++&&&.o@*$#OX..&++++++  .oO#*#O &+++++++++&..XO#*%#@X..++++++++++.X@*$@X.+++++++++++++XX*@o.+++++...&++++&&O*@O&&+++&&XXX&&+++&&*#O &++++&...+++++& *@O &+++++ . +++++& *@O &+++++ . +++++&&*%#@o&&+++++++++++.o***%%@oX+++++Xo@$%%**%$@.. &&Xo@$%%*********%$OX.+++++Xo@%******%$@O..+++..o#$%**********************",
+"$OX &&++     +++& O*$@o&&+&&     +++.o@*#OX.+++&&   &&+&&o@*$@o&&&++     +++.o@*$@X.+++  +++  +++.X*#oX+++& XXX..+++..O*#O..+++..ooX..+++..*#o..+++ .& &. +++..*#OX.+++&&...&&+++.X*#OX.+++&&...&&+++.X*%#OX&++&&   &&+++XX***%%#o.+++.XX@$%****%$#OXX++.XO#$*********%%%#@oX.+++Xo#$*****%%$@o&&+++&&o@$%%*********************",
+"$@o.  ++ ....+++&&o*#OX+++&&...  +++.XO*#@X.+++&& . &&++&X@*$@o&&+++     +++.X#*$@X.+++  +++  +++.X*#oX+++  XoXX.+++..O*#OX.+++..ooXX.+++.X*#O..+++ .&&& .+++..*$@X.+++&&...&&+++.X*$@X.+++&&...&&+++.X*%$@o&++&&   &&+++Xo****$#oX+++.XO#$%%****%$@oX++..X@$%%*********%$#OX.+++Xo#%%*****$#OX&&+++&&XO#%**********************",
+"%#O.  ++..X.X&&&&&o*#o.+++ .XXXX.+++& O*$@oX+++  ...  +++XO*#@X+++&&.....&&&XX#*$#X.+++..+++..+++.o*#oX+++ .XOoX.+++.XO*$@o.+++..oOo..+++XX*#@X.+++  +++  +++.X*%#OX.  ++++&++  .X@*%#OX.  ++. .++  .XO*%$@o && .. .++  .X@****$#oX+++XX@$%******%%#OX && .O#$***********%#@o.+++Xo#$****%%$OX.++...++.oO$%*********************",
+"$#O.. ++.XXX.  &&&X*@o.+++..oooXX+++&&o*$#oX+++ ....  ++&XO*$Oo&++& .....&&&Xo#*$#XX+++..+++..+++.o*#oX+++..oOOoX+++.XO*$#OX+++..ooo..+++Xo*#OX.+++  +++  +++.X*%$#O.. ++&&&++ ..O@*%$#O.. ++ . ++ ..O@*%$@O  &. .. ++ ..O#***%%#oX+++Xo@$%*******%$#o &&&&XO#%%*********%$@oX+++Xo@%%****%$Oo.++ ..++XX@$%*********************",
+"%#@.. ++.XXX. &&&&o*@X.+++..O@@oX+++&&o*%#oX+++  ...  +++o@*$@o&++ &.....&&&Xo#*$#oX+++..+++..+++Xo*#OX+++ .O@OoX+++.X@*%#OX&++..ooo..+++XO*$@X.+++  +++  +++.X*%%#@X. ++&&&++ .X@#*%%#@X. ++. .++ .X@$**%#@.. . .. ++ .XO$***%$#oX+++Xo@%%*******%%#@X.+++XO@%%**********$#oX+++Xo@%%***%%#OXX++...++.oO$%*********************",
+"%#@.  ++...X.&&&+&X*@X.+++.oO##@X  &&&X*$#oX+++&&  &++&&&o@*$#O.. +++++ &...o@$*%$#oX....+++....XO@*#oX+++..o@@XX+++.X@*%#@X&&&& XXX  &+&XO*$OX.+++&&++++++++.X**%$#Oo. &+++&&XXO#$**%%#OoX+++++++Xo@#$*%%$#@oXX.&+&++XXO#$***%%@oX+++Xo#$*********%$@X.+++.o@$%**********$@oX+++Xo#$****%%$OX.  XXX  XXO$%*********************",
+"%#@.. ++.....&&&&&o*@X.+++Xo@##@o  &&&X*%#OX+++&&&&&++&& O@*%#OX. +++++&&...X@#*%%##ooXX.+++.XXXo@$*#OX+++ .O@OoX+++.XO*%$@o &&&&.X.  +&&o@*$@X.+++&&++++++++.X***%$@oX &+++& Xo@$%**%%$#OX+++++++XO#$%***%$#@oX.&++++Xo#$%***%%@oX+++Xo@%%********%$#OX&&& .O#%%********%%#o.+++Xo@%%****%$OOX..ooo..XoO$%*********************",
+"%#@.. ++++++++++.XO*#X.+++.Xo@OOX &&&&o*$#oX++++++++++..oO#*%#@oX...&&&+++++XO#**%%$#@oX.+++.Xo@#$%*#oX+++..o@@XX+++.X@*%%#O.. +&.X.++  .O#*$@X.+++++& &+++++.X**%%$@oX&&+++&&Xo@$%****%$@o..+++.Xo@$%****%$#Oo. +++..XO@#%****$@oX+++.O@$**********%#@X&&&  o@$*********%$#oX+++Xo#$*****%%$#@@@@#@@@@#$%%*********************",
+"%#@.. ++++++++++.X@*@o.+++..oooXX+++& o*%#oX++++++++++.Xo@$*%#@oXX..&&&+++++XO#**%%%$#Oo.+++XX@#$%%*#OX+++..OOOoX+++.X@*%%#@.. ++...++ ..O#*$@X.+++++ & +++++.X**%$#@o.&&+++&&XX@#$****%$#OX.+++.XO#$%****%%#OX  +++.XXo@#$***%%#oX+++Xo#$**********%$@o&&+  o@$%%********$#oX+++Xo@%%*****%%%$$$$$$$$$%%%*******%*%%*%*%%%*%***",
+"%#O.. +++++++++&Xo#*#XX+++...XX..+++& o*$#oX++++++++++.Xo@#*$#OXX...&&&+++++Xo#****%%#@o.+++.o@#%%**#OX+++..oOoX.+++.X@**%$#X..++...++..X@$*$@o.+++++  &+++++.X*%%$@oX.&&+++&&.Xo@$****%%#OX.+++XXO#%****%%$@OX &+++..XXoO#****$@oX+++Xo@%%**********%$@XX.++Xo@#%%******%%@oX+++Xo#$*******%%%$%%%%%%%%%****%%%$$%$%$%$%%$%%%%*",
+"%#O.  ++    ..XoO#$*#OX&&&++   &&+++.XO*%@oX+++   . ++  .O@*#OX&&+.......+++.X@****%%#Oo.+++.X@#%%**#OX+++ .XXXX.+++.X@**%%#OXX++.. ++.oO#%*%#oX+++++  .+++++XO*%$@O.. ++...++  .O@****%$#OX.+++.X@#%%***%$#oX.++&&&..+&&XO****%#oX+++.o@$%***********%$@oX++..o#$%*****%%$@o.+++Xo@%%**********%%*%%*******%%$$####@###@@#@#$%*",
+"$@o.  ++   ..XOO#$%*$@X&&&++ &&&&+++.XO*$@o.+++  ...++  .o@*#oX+++.......+++.X@****%$@OX.+++.XO#$%**#@X+++ ..XX..+++.X@***%$#oX++   ++XO@$%*$#oX+++++.  +++++Xo*$#OX  &++.  ++&  XO****%$@oX.+++.XO#$%**%%#@X..++&&&..++&Xo***%%@oX+++XX@#%%*********%%$@oX++..X@#%*****%%#Oo.+++Xo#$***********************$$@@OooOoOoOooOo@@#*",
+"$@o&&+++&&&..O@#$%%*$#O &&++&&&&&+++.XO*$O..+++&&...&&+++.X*@X.+++&& &&&&+++.o@***%%#OX  +++ .XO#%%*$@o.&&++&& &&+++XO#***%%#OX &+++&&XO#%%*%#OX+++++...+++++Xo*$@X.+++++ ..+++++..****%#OX &+++ .XO#%%*%%#o &&++&&&& +++.X***%%#o.+++.Xo#$%***********%$@X&+ ..O@$*****%$#OX.+++Xo#$***********************$oo...  . . .   .X@*",
+"$@X&&+++&&&.XO#$%%**%#Oo..+++++++   ..@*#@..+++&&.X.&&+++.X*#X.+++&&& &&&+++XX#****$@OX&&+++  XO@$%*%#O.  ++&&&&&++&XO#***%%#@X &+++&&XO#%**$#OX+++++...+++++XO*#O. +++++ . +++++..**%%$@oX&&+++  XO@$%*%$@o&&+++&&&&&+++.X****$#oX+++& XO#%%**********%$@O. ++&o@$****%%#OX &+++Xo#%%**********************#XX   &&    &&&& .O*",
+"#@X&&+++&&&.XO$%%***%$@oX.+++++++   ..O*#@..+++&&.XX&&+++.X*@o.+++&&&&&&&+++Xo#**%%$@oX &+++& Xo@$%*%#@.. ++&&&&&++&o@#****%$#o &+++& o@$%**%#@X&++++.X.++++&X@*#O..+++++...+++++..***%$@oX&&+++& XX@$%*%$@o&&+++&&&&&+++.o***%%#oX+++&&Xo@$%**********%%#O..+++XO#****%$@oX &+++Xo@%***********************@X.  &&&&&& &&&& .o*",
+"$OX&+++&+++.X@$%****%$@X. ++++++++++ .@*#@. ++++&XXXX.+++..*#oX&&&&++++++  .o@#***%%@XX&+++++&.XO$%*%%#@XX&&+++++ ..O#$****%%#O..+++..O#%%**%$@o  && XXX&&&  o@*#@. +++++...+++++..**%%#OX.+++++++XXO$%*%%#O  &+++++++++&Xo***%%#OX+++&&.XO$%%**********%$@XX+++.o#***%%$Oo.&&+++XO#%%**********************@..++++++++++++++&o*",
+"$@o&&&&&&&&.X#$%****%$#X..++++++++++..O*$#..&&&&&oOOXX&&&..*#Oo  &&&+++&&..XO#%***%$#OX&&+++&&XoO$%**%$#@X&&++++&..X@$%*****%$@X.&&&.X@$%%***%#@.  . ooo.   .@#*$@X.++++&X.X&&++&..***%$OoX&&++++&XX@$%*%%#@.  ++++++++&&XO****%#OX&++++.Xo$%***********%$#OX+++Xo#***%%#oX.&++++Xo#%%**********************@. &+++++++++++++&o*",
+"$#@ooXXXXooO@$%******$#X..++++++++++..@*$#@OoXXoO@@@@OoooO@*%#@OooXXXXXXXoO@#$%***%%$#OooXXXXoO@$%%**%%$#@ooXXXXooO@#%%*****%%#@OoooO@#%%***%%$#@OoOO@@@OOOO@#$*$#@ooXXXooOoooXXoO@***%%$@OoXXXXXoO##%%**%$#@ooXXXXXXXXooO#***%%#@o&&&+&.XO#%%***********%#Oo+++XO#***%%$oX.&+++&X@#%***********************@X.&&+++++++++++&&O*",
+"%$$@@@OOO@@#$%%******%$#Oo...X.....Xo@#*%%#@@@O@@#$$##@@@#$*%$$@@@@@OO@O@@#$%%%****%%$#@@OOO@@#$$*****%%%##@@OOO@##$$%******%%%##@@@##$%*****%%$#####$$$##@##$%*%$##@@O@@##@@@O@@@#****%%$#@@OOOO@#$%%***%%$##@@OOOoOOO@@#$****%$#o &&&&XXO$%%***********%$#OXXXO#$***%%$OoX&&&&&O@$%***********************#@OoXXXXXXXXXXXXoO@*",
+"*%%$#$#$#$$$%%*******%%##OXXooXX.XXXO#$**%%$$$#$$%%%%%$$$$%**%%%$$##$##$$$$%%*******%%%$$##$#$%%*%******%%$$$#$#$$$%**********%%$$$$$%%*******%%%$$$%%$%%$%$%%%**%%$$#$#$$$$$$##$$%***%*%%$$$##$$$$%%*****%%%$#$######$#$%%*****%$@OooooO##%%*************%##ooo##%****%$#@OoXXoO@#%%***********************$##@@OOOoOoOOoOOO##*",
+"*%*%%%%%%%%%*********%%%$#Oo@@OoooOO#$%***%%%%%%%%%*%*%%%%****%%%%%%%%%%%%**%*********%%%%%%%%%%********%*%%%%%%%%*%************%%%%***************%%**%%%*%*****%%%%%%%%%%%%%%%%%********%%%%%%%%%*********%*%%%%%%$%%%%*******%%$#@@O@#$$%**************%%$@@@$%%******$$#@@@O##%%************************%%$$##########$#$$%*",
+"******************************************%%%%%%******************************************%%%%%%********************************%%%%%%%%%%***********************%%%%%%%*******************%%%%%%****************%*%%%********%%%%%%*****************%%%%%%%%*******************************************************************",
+"*******%%%%%%****************************%$$$#$$%%***************************************%%$#$$$%%*****************************%%$$#####$%%**********************%$$##$$%%****************%%$$$%$%**************%%$$$$%%****%%%$#$$$%**************%%%$$###$%%******************************************************************",
+"******%%$##$$%**************************%$#@O@@#$$%************************************%%$#@@@@#$%%**************************%%$$@@OOoOO@#$*********************%$#@@@@@$%%**************%%#@@@@#$%************%$#@@@@$$%***%$#@@O@#$%%************%$$@@OO@@#$%*****************************************************************",
+"*****%$$@@@@#$%*************************$#OooXXO@$%%***********************************%$#@ooXoO@$%**************************%%#@OXXXXXXoO#*********************$#OoXXoO@$%%************%%#@OooO@#%%**********%%#@oooo@#%%**$#@ooXoO@$%**********%%%#@OoXXXo@#%%****************************************************************",
+"****%%$Oo...@#$%************************$@.&+++.o@$%**********************************%%#OX++&&&O@$*************************%%#@o&&&+++++oO*********************$@. +++.X#$%************%$@..+++o@$%**********%$@O+++..@$%**$Oo+++& O#$%**********%$OX.++++&o@$%****************************************************************",
+"*****$@oX. .oO#%%*********%**%%*********#O &+++.X@#%%****************%%*%%************%$@oX++&&&o@$********%***%*%*********%%$@oX&&++++++oO*********%*%*%*%*****#@ &+++.X@#%%**********%%#@..+++o@#%%********%%#@X+++..@#%%*$OX+++&&o@$%%%********%$oX.+++++XO#%%*****%***%*%***%**********%*%%*%*%%**************%***%*********",
+"***%%$@X.+++.o@$%*******%%%%%%$%%%******#@X.+++..o@$$%%*********%%%%%$%$%%%%%*******%%%$@OX &+++XO$******%*%%$%%%%%%*******%$#O. +++   ..o@******%%%$%$%$%$%%%**#@X.+++ .o@$$%%********%%#O..+++XO#%*********%#@oX+++ .O#%%*$@o  &+&XO#$%%%%*%***%*$#@X..+++XO#%%****%%%%$%$%$$%$%%%******%%%%%%%%%%$%%*********%*%$$%%$%%%*****",
+"****%$@..+++.X@$%******%%$$#####$$%%****$@X.+++ .oO@#$$$%%****%%%$####@#@##$%%%***%%%$##OXX &+++XO#*****%%$###@###$%%%****%$#@o  +++  ...O#***%%%$$##@######$$%*#@X.+++ .XO@#$%%%******%$@O. +++XO#%*******%%$#@XX+++..O#$**$@o.& ++Xo@@###%%*****%%$@o. +++Xo@%****%%$#####@######$%%***%$$#########$$%%*****%%%$$##@###$%%%***",
+"****%$@X.+++.Xo#%%****%%##@OOoOO@#$$%***$@o.+++  XXoO@@#$%%*%*%$#@@OOoOoOOO@#$%**%%$#@@ooX. &+++XO#**%%%$#@@OOoOOO@#$%%***%$@oX &+++   .XO#**%%$#@@OOOooooOO@#$*$@o.&++  XXoO@@$%%****%%$@o. +++XO#%******%%$#OoX.+++ .O#$**%@O. &++XXoO@@@#$%%****%$#O..+++Xo#$%***$#@@OoooOoooOO@@$$**%$#@@OOOOOOO@@#$$%***%%$#@@OOOOO@@#$%%**",
+"****%$#oX&&&&&O#$****%%#OoX.....Xo@#%%**$#oX+++&&   ..OO##%*%$$@@o... . ....@#%*%$$@OO..   &&+++Xo#***$$@OO.... ..oO@#%*%%$@X..&&+++&& ..O#*%$$@Oo... ... ..Xo#*$#oX+++&&  ...O@#$%***%$@oX  && XO#$******%$#X..  &&& .o@$%*%#O.. ++.XX....X#$%*****%$@o.+++Xo#%****#oX....  ... ..O@#%*$#oX....X.....O@#$%*%$$@OO...  ..oO@#%%*",
+"*****%$@o &&& o#$%**%%#@oX.  &  .Xo@$$**%#oX+++&& & ..XXO@$*%$@OXX.. &    ..oO$*%$@OXX.. & &&+++Xo#*%%#@OXX..&    XXO@$*%%#O.. +++++&  ..O#*%$@OoX..  &     .X@*%#oX+++ && &..Xo@#$***%$@oX &&  XO$%*****%%#@X..& &&  .o@$%*%#O.. ++...  ..XO#%*****%$@oX+++Xo@$****@X...    &     Xo@$*#@X.   .. & ..XO@#$*%$@OXX..     XXO@$$*",
+"*****%%#@OXX  O#%%**%%#O&&&+++++++Xo@$%*$#oX++++++++++&&&O@*$@O&&&++++++++++Xo#*$@O&&&++++++++++XO#**$#O&&&+++++++&&&O@**$$O &&+++++++&& O#*$@O&&&++++++++++  O*$#oX++++++++++ ..@$**%%$oX.+++++XO#$%*****$#O &&+++++++XO#%*%$@.. ++   ++&& O#%*****%%@oX+++Xo#%%***O. ++++++++++++& O#*#O  ++++++++++ ..@#*$@O&&&+++++++&&&o#$*",
+"*****%%%#@Oo..O#%%**%$#o&&&+++++++.XO$$*%#OX+++++++++++&&o@*$@o&&+++++++++++.X@*$@o&&+++++++++++Xo#*%#@o&&+++++++++&&X@*%%#O &&+++++++&& O#*$@o&&+++++++++++& O*%#OX++++++++++  .O#**%%#oX.+++++Xo#$*****%%#O &&+++++++XO#%*%#@.. ++   ++&& O#$******$#oX+++Xo@%%***O &++++++++++++&&o@*#O &++++++++++  .O#*$@o&&+++++++++&&o@$*",
+"*******%%$#@.X#$%***%$@o&&++++++++.Xo#%*%#oX+++++++++++&&XO*#OX&&+++++++++++.X@*#OX&++++++++++++XO#*%#oX&++++++++++&&XO*%%#@  &+++++++&  @#*#OX&++++++++++++  O*%#oX++++++++++& .o@***%$OX.+++++Xo#%*****%%#@. &+++++++XO#%*%#@.. ++  &++&& @#%*****%$@oX+++Xo#$****O.&++++++++++++&&o@*#O.&++++++++++&  o@*#OX&+++++++++++&Xo#*",
+"*******%%%$$###%%****$@o.. &&&&&++ .X@$*%#oX+++++...  +++.o*@o.+++  .... +++.o@*@o.+++  ...+++++Xo#*%@o.+++  ...& +++.o**%$#oX. &+++.XXoO#$*@XX+++  ...&++++.oO*%#oX+++++...&&+++o@***%%$@oX.+++Xo@$******%$#@ooXX...++Xo#$*%#@.. +++++& .oO@$%******%@oX+++Xo@%%***@X.+++&&&&&&&&&&&X@*#@X.++++&... &++&o@*#XX+++  ...  +++.o@*",
+"*********%%%$$%%****%$@o...&&&&&++ ..@$*%#oX++++&.X.  +++.X*@o.+++ .XXX. +++Xo#*@o.+++ ..X.&&+++XO#*$@o.+++ &... &+++.X***$$@oX &++&.XoO#$%*#X.+++ ..X.++++&.o@*%#oX++++&... &+++XO****%$@OX.+++Xo#$%*****%%$#@Ooo...++Xo#%*%#@.. +++++  Xo@#%%*****%$#oX+++.O@$****@oX+++&&&&&&&&&&&oO*$@oX++++&.X. &+++XO*@X.+++ .XXX  +++.o@*",
+"**********%*%%*%****%$Oo&+++++++++ ..@#*%#OX+++  XXX..+++.X*@X.+++.XXoooX...XO#*@X.+++..XX.. +++Xo#*$@X.+++++++++++++.X***%%#OX&&&&&Xo@#$%%*@X.+++.XXX.. +++Xo@*%#OX+++  XXX. +++XO****%%$Oo.+++Xo@%*******%%%$##OXX.++Xo#%*%#@.. +++++ .XO#$%*******$@oX+++Xo#$****@oX+++  &&&&&&&&&XO*$#oX+++ ..XX  +++XO*@X.+++.XXXXX.+++.X@*",
+"********************%#OX&+++++++++ ..@#*$#oX+++ ..XXX.+++.X*@X.+++.Xo@OOo...o@$*@X.+++.XXXX  +++XO#*$@X.+++++++++++++.X***%%#Oo &&&&XO@$%%**@X.+++.XXXX  +++Xo#*%#oX+++ .XXX. +++XO*****%$@oX+++Xo@$%********%%$$#XX.++Xo#$*%#@.  +++++..oO#%%%*****%%@o.+++Xo@$%***#oX+++& &&&&&&&&&XO*%#oX+++ .XXX. +++XO*@X.+++.XoooX.+++.X@*",
+"********************%#oX++++++++++ ..O#*%#oX+++  XXX..+++.X*@X.+++.XoO@OOX.XO@#*@X.+++..XXX  +++Xo#*$OX.+++++++++++++.o***%%$OX&&&&&Xo#$%%**#XX+++& ...+++++XO#*%#oX+++ .XXX. +++Xo***%%%#@X.+++.o@$%%*********%%#OX.++Xo#%*%#O.. +++++..XO@$%*****%%$@oX+++.o@$%%**#oX+++  &&&&&&&&&X@*%#oX+++ .XXX. +++Xo*@X.+++.XXoXX.+++.X@*",
+"********************$#X.+++.....++ ..O#*%@oX++++&..X  +++.X*@o.+++ .XoOoo...Xo#*@o.+++  X..+++++Xo@*$@X.+++&&   & &&&Xo***%$#OX&&&&&Xo@#$%%*#@X&&&++++++++++Xo#*%@oX+++ .XoX..+++Xo****%$#Oo.+++XXO#$%%*******%%$#oX.++XO#$*$#O.  ++&&&++.Xo#$%****%$#OX.+++XXO@$%%*@O.+++& &&&&&&&&&Xo*$@oX+++ .XXX. +++Xo*@o.+++  XXX  +++.X@*",
+"********************$@X.+++.....++  .O@*$@oX+++++.X. &+++XX*#XX+++& XXXXX....X#*#XX+++& ...+++++Xo@*$#X.+++&&    &&&&Xo**%%#@oX&&&&&.Xo@@$%*$@O &&++++++++++XO#*$@o.+++ .XXX. +++Xo**%%$#OoX.+++.XXO#$$*****%%%$$@oX.++Xo#%*$#o.. ++&&&++.XXO#$**%%$@OoX.+++.XoO#$%*@oX+++  &&&&&&&+&Xo*$@o.+++  XXX  +++XX*#XX+++  .X. &+++XX#*",
+"********************$#o.+++.....++  .o@*$Oo.+++++... &+++Xo*#XX+++& ..X.. ...X@*#XX+++& ...+++++.o@*$#oX+++&&     &&&XO**%$@OX.&&&&&..XoO#$*%#@oX..    &&+++Xo#*$@o.+++...X...+++.o*%%$#OXX..+++..XoO#$****%%%##@oX..++Xo#%*$@o.  ++&&&++...oO#**%$#OoX..+++..XoO#$*@o.+++& &&&&&&&+&.o*$@XX+++ ..X.. +++.o*#XX+++& ...&&+++Xo#*",
+"********************$#oX+++++++++++++XO*$O. ++++++++++&&&XO*#@X&&&++++++++++ .@*#@X&&&++++++++++  O*%#OX&&&++++++++++Xo*%%#@ &&+++++++&& @$*%%#@oX..   & +++XO#*#@. +++++...+++++  **%#@.&&+++++++&& @$****%$#@OoX...++XO#$*#oX++++&.. +++++ .@**%$@ &&+++++++&& @$*O. +++++&&++&&&++ .*$@. +++++...+++++  *$OX&&&+++++++&&&XO$*",
+"********************%#oX+++++++++++++XO*#@. ++++++++++&& O@*$@O &&++++++++++ .@*$@O &&++++++++++ .@*%$#O &&++++++++++XO*%%#O &&+++++++&& @#**%$@oX  &&&++&&&o@$*#@  +++++...+++++ .*%$$@ &&+++++++&& @$**%%$#XX...&&&+&XO#%*$oX+++&&...+++++ .@*%%#@ &&+++++++&& @#*@  ++++&&&++&&&++ .*#@  +++++X..+++++ .*$#O &&+++++++&& O@$*",
+"********************%$@oX... . . . ..O@*$@X....... ...XXO@$*%#@OXX..........oO#*%#@OXX... ... ...o@**%#@OXX.. . ....XO#*%%$@X...    ...XX@$*%%$@oX & &&++&&&O@$*$@X..  ..XXX. ....o**%#@oX...  ....XX@$**%%#O... &++++&o@$%*$@o....XXXX..  .Xo@**%$@oX...  ....XX@$*@X..  ..... ......o*$@XX.. ..XXX. ....o*%#@OXX.......XXO@$%*",
+"********************%%#@XXX........XX@#*%#OXX........XOO##%*%%$#OoX......XXoO#$*%%$#OoX.....X..XXO#*%%%$#OoX......XXO@#*%%$#XX........XoO#$*%%#oX.++++++&.Xo@$%*%#OX....XoOo....XXO***$#OXX.......XXO#$**%%#O.&&+++++.XO#$%*%#OX..XXOOoX....oO#*%%$#oXX.......XXO#$*#OX....XXX..X.X..XO*$#OX.....ooo....XXO*%%$#OoX.....XOO##%%*",
+"********************%%%$OOoXXXXXXXXoo#%*%$@OoXoooXXoXo@#$%%**%$$#@ooXXXXXooO#$%**%$$#@ooXoXXXXXoO@$***%$$#@ooXXXoXO@@$%**%$$OooXX.X.XXoO@$%*%%$OX.&++++&&XoO#$%*%$@OXXXXo@@@oXXXoO@**%%$@OOoXXXXXoOO@$%**%%#O &&+++++.X@#%**%$#XXXoO@#@oXXXXO@$***%$@OOXoXXXXoOO@$%*$@OXXXoooXXXoooXX@@*%$@OooXXX@#@oXXXXO@*%%%$#@ooXXXoX@#$%%**",
+"**********************%%$####@#@#@##$$%*%%$###@#@#@###$%%%*****%%$####@####$$%%****%%$####@######$%*****%%$####@####%%%***%$$#@#@@@@###$%%***%$OXX&&+++& o@#%%**%$$#@@@##$$###@###$***%%%#####@#@##$%%***%%#@. &+++&&XO#$*%*%%$####$$$$##@@##$%***%%$$##@@#@@##$%%**%$###@####@#@#####$*%%$###@##$#######$$***%%%$######$$%%%***",
+"**********************%*%%$$$$$$$$$$%%****%%$%$$$$$%$%%%*******%%%%$$$$$$%%%%******%%%%$$$$$$$$%%%******%%%%$$$$$%%%%%*****%%%$$$$#$$$$%%%**%%%$@OoXXXXoo@#$%%***%%%$$$$%%%%$$$$%%%***%%%%$$$$$$$$%%%%%***%$#OooXXXooO#$%*****%%$%$%%%%$$$$%%%%*****%%$%$$$$$$%$%%**%%%$$$$$%$$$$$$%%%%**%%%$$$$$%%%$$$$%%%****%%%%$$$$$%%%*****",
+"********************************************************************************************************************************************************************************************************************************************************************************************************************************",
+"*************************************************************************************%*%********************************************************************************************************************************************%%%%%$%************%%%%%%*%*********%%%%%%%*************************************************",
+"*************************************************************************************%%%%%%****************************************************************************************************************************************%%$$##$$%%*********%%$###$%*********%%%###$$%%***********************************************",
+"***********************************************************************************%%$$#$%%***************************************************************************************************************************************%%$#@XX@#$%*********%$#ooo#$%********%$#@XX@#$%%**********************************************",
+"*********************************************************************************%%%##@@@#$%%************************************************************************************************************************************%%#@@oX.O@#%%*******%%#@X.X@#%%******%%#@OX.OO@#%%*********************************************",
+"*****%****%*******************%******************%*%******************************%#OXX .O#$%**********************************%***************************************%****%*************%******************%**%****************%#@OXX..O@#%********%$@o...o@$%*******%#@o..Xoo@$%%********************************************",
+"**%%%%$%$%%%$%%*********%%%%%%%$%%%%%%******%%%%%%%%%%%%%*********%%%%%$%%%%%***%%$@oX.  o@#$%%%*******%%%%%***%%%%%%*****%%%%%%%%%%%%%$%%%***%%%%%%%%*%%%%%%%*****%%%%%%%%%%%%%%%****%%%%%%%**%%%%$%%%****%%%%%%$$%$%%%********%$@O&&&  O#$%********%#@X+++X@#%*******%$#O. &&&O@$%********************************************",
+"*%%$$########$$$%******%%$$#########$%%***%%%$##$#$$###$$%%*****%%%$#######$%%%**%#@.. ++XoO##$%%****%$$$#$$%%%%$$#$%%%**%%$####$$$$#####$%**%%$$##$$%%%$#$##$$***%%$###$$$$$###$%%**%%$#$#$$$%%$#$#$$$**%%%$#########$$%*******%$@X&&&  O#$%*******%%#OX+++XO#%%******%%#O  &&&X@$%********************************************",
+"%$#@@OOOoOOOO@@#$%%*%%%$#@@OOoOoOOOO@#$**%%##@@O@O@O@OO@@#$****%%$#@@OOOOO@@#$%*%$#O.. ++.XXO@@$%%**%$#@@@@##$##@@@@#$%*%$#@OOOO@@@@@OOO@@#*%$#@O@O@@####@O@@@#*%%$#@OOO@@@@@OOO@#$*%$#@@O@@#####@@O@@#**%##@OOoOoOOO@@##%%****%%#OX+++.oO$%********%%#oX+++Xo#%*******%%#Oo.+++XO#$********************************************",
+"$#OoXXXXXXXXXoo@@$%*%%$@@OXXXXXXXXXXo@#**%$#OoXXXoXXXXXoO@#***%%$@OoXXXXXXXoO@$*%#@X.  ++...XoO@#%%*$#@oXXoO@@@@ooXoO@$*$#@oXXXXXoooXXXXXoO*$#OoXXXoOO@@ooXXXo@*%$#OOXXXXoooXXXXoO#*$#@oXXXoO@@@ooXXXo@*%$@OoXXXXXXXXXoO@$%****%%#OX+++XX@$%%*******%%#oX+++Xo#$********%$@oX+++Xo#%%********%%%%%%%%*%%%***********************",
+"#@. +++&+++++&..X@$*%$@X..&+++++&+++ .@*%%#O &&++   +++&&O@***%$OoX&++++&&&&&O#*%#OX++++++++++XXO$%*#@. +++.XOOo++&&&O@*#@. +++++...+++++ .*#@. +++& XoX &+++ .*%$OX+++++...+++++XO*#@. +++& ooo &+++ .*$#O&&&+++++++&& O#%****%%@oX+++Xo@$%********%%@oX+++Xo@%%*******%$@XX+++Xo#%******%%%$$$#$$$$$$$$%%*********************",
+"#O  ++++++++++..XO#*%#@...++++++++++& O*%$#O&&&++& &++++&o@**%$#oX.+++++++&&&o@*$#XX++++++++++.Xo$%*#O.&+++.XooX++&&&o@*#O &+++++...+++++  *#O  +++&&X.X&&+++  *%#OX+++++...+++++XO*#O  +++&&XXX&&+++  *$@o&&&+++++++&&&O@%*****$#oX+++Xo#%%********%%#oX+++Xo#%%********%#oX+++Xo@$******%$##@O@O@@@@@@##%*********************",
+"#O.&++++++++++  .o@*$@o.. ++++++++++&.O**$#O&&&++&& ++++&X@**%$@XX.++++++++&&o@*%#o.++++++++++.oO$%*#O &+++..XXX+++&&X@*#O. +++++.. +++++&.*#O &+++&&...&&+++& *%#OX+++++ . +++++XO*#O  +++&&.XX&&+++&.*$@o&&+++++++++&&O#$***%%#OX.+++Xo#$**********$@oX+++Xo#$********%%#oX+++.X@#$***%%$#@OoXXXooooooO@#*********************",
+"$OX.+++++&  &++++XO*#@X+++++ & +++++.XO*%%#OX. +++++  &&&XO*%$#O&&+++ & +++++XO*%#@X&&&++   ..oO#$%*$OX.+++ .oXX&&+++XO*$OX.+++&&...&&+++.X*#O. +++ .+++  +++..*%$@o. &++. .++& .o@*#@X.+++& ...&&+++.X*#@o&++&&&&&++ ..O#%****%#O..+++Xo#%%********%%#o.+++Xo@%%*******%%@oX+++..O#%%**%%#O.. ++&&&..&&&oO*********************",
+"$OX.+++++   &++++XO*#oX+++++   +++++.XO**%$@X..+++++  && o@**$#O &+++& &++++&o@*%$@o &&++  ..XO#$%%*$@X.+++..XoX &+++XO*$@X.+++&&...&&+++.X*#@..+++  +++  +++.X*%%#O.. ++ . ++  .O#*$@X.+++&&.X.&&+++.X*$@o&++&&&&&++ .X@#%***%$@O&&+++Xo#$**********$#oX+++.O@$*********$#oX+++&&o@$%**%$@o. &++&&&..++&XO*********************",
+"$@oX+++& .X...+++.X*@o.+++.....&&+++Xo@**%%#OX.++  .XXXoO@#*%%#O.  +++++   ..o@*%$#o.  ++.XXo@#$%%**$@oX+++..ooX. +++XO*%#@X  &++...++& .oO*$@XX+++&&+++& +++.o**%$#OX. &+++&&XXO@$*%#@X  &++...++& .XO*%#OX..  +++& .XO#$%***%%@o&&+++Xo#$*********%%#oX+++Xo#$********%%@oX+++&&o#$%**%#oX+++&&++++++&&X@*********************",
+"$@oX+++& .XX..+++.X*@X.+++..XX.  +++.O@***%$@oX++ ..XoO@##%*%%#O.. +++++&  ..o#*%%#O.. ++.XO@##%%%**$#oX+++..ooo..+++Xo*%$@o. &&+...&+  .o@*$#oX+++ &+++  +++Xo**%%#@oX &+++& Xo@#%*%$@o. &++...++&  o@*%#@X..  +++& XoO#%%***%$#o&&+++Xo#%%*********$@oX+++XO@%%*******%%#oX+++&&o@%%**%#oX+++&&++++++&&o@*********************",
+"%#oX+++&......+++XX*#X.+++..X..&&+++XO#***$$Oo.++ ..o@##$%%*%$#O.  +++++ & ..o@*%%#@.  ++XXo@@#$$%%*%#oX+++..XXX. +++Xo*%%#@.  &&...++  .@#*$#oX+++&&+++& +++XO**%%$@oX &+++&&Xo@$%**%$#o..++  &++.Xo@$*%$@XX.  +++ &Xo@#%%****%#OX.+++Xo@%*********%%#oX+++Xo@%%*******%%@oX+++.XO#%%**%#OX+++  +++++&&&O@*********************",
+"%#OX+++++ . +++++Xo*#oX+++++   +++++Xo#**%%#Oo.++..Xo@#$$%%**$#O..   &&&+++&&oO**%#@X. ++.XooO@@#$%*$#OX+++ .XXX. +++Xo**%$@oX.++...++.XO#$*%#OX+++++++++++++XO**%%#@oX&&+++&&XX@#%**%$#OX.++&  ++.XO#%*%#@X..++&&& ...X@$%****%$#oX+++Xo#$*********%%@oX+++Xo@%%*******%%@oX+++Xo@$%***%$@O...X.......XX@$*********************",
+"%#oX+++++&&&+++++X@*#@X+++++& &+++++Xo#**%$#OX.++...oO@#%%**%$#O..   &&&+++&&XO*%%$@.. ++..XXXoo@#$*%#OX+++ ....  +++Xo**%%#OX.++.  ++Xo@$%*%$OX&+++++++++++&XO**%$#oX.&&+++&&.XO@$***%$#oX&&+++&&Xo@$%*%#@X..++&&&....XO#$****%$#oX+++Xo@%%********%%#oX+++Xo#%%*******%%@oX+++Xo@%%***%%$#oXXOOoXXX.ooO#$*********************",
+"%#oX++++++++&&...O#*$#O...++++++&+++XO#*%%#O.. ++&  ..O@#%%*%$@o&++++&&&&&+++.o**%$@X..++   &&&  @#*%#OX&&+++ . +++++.X***%$#oX&&+++&&XO#$%*%$@o  &++ . ++&  o@*%%#O. &++ . ++& .O#****$#OX&&+++&&XO#%%*$#o &&++&&&&&++&o@$****%%@oX+++.o@$%********%%@oX+++Xo#$********%%@o.+++Xo#$*****%$$##@@@@@@O@@#$$%*********************",
+"%#oX++++++++&&.XX#$*%$@o..&+++++++++.O@**$#O. &++&&  .XO@$%*%#@X&++++&&&&&+++Xo**%$#o..++&&&++&  O#*%$@o&&&++   +++++.X***%%$Oo&&+++&&X@#%**%$#o. &++. .++  .o#*%$#o &&++. .++&& O@****%$Oo&&+++& o@$%%*$@o&&+++&&&&&++&o@$****%%@oX+++Xo@$%********%%#oX+++Xo#%%*******%$@oX+++Xo#%%*****%%$$$%$$$$$$$%%%**********************",
+"$@oX+++& ...XooO##%*%$$@@oXX...  +++Xo#*%$@o. &++&&   Xo@$%*%$@o&++++ &&&&+++Xo***%#oX.++& &++&& @#*%%#O&&&++   +++++..***%%$@O &+++& o@$%***%#O.. ++...++  .O#*%$@o &&++.. ++&& o@**%%$@OX&&+++Xo@$%%**$@o&&+++&&&&&++&X@$*****%#oX+++.X@$%********%%#OX&++XO#%*******%%$@X.+++XO#$*********%%%*%%%%%%%************************",
+"$@o.&++& .XXoO@#$%%**%%$#@OoXX.  +++XX@*%$@X++++++++++.oO$%*%$@o &&&&+++++  .o@**%%$#OX  ++++&..X@$*%%#@OX.+++++&&+++..****%%#OX.+++.X@#%***%%$#X..&&.X.&&.XX@$*$$OX&++++...+++++XO*%$#@XX.&&++&XO#%%***$#o &&+++++++&& o@$****%%#OX+++.XO#$%********%#@X&&&X@#%%******%%#OX.+++XO#%***************%****************************",
+"$@o.+++  .XXO@$%%%****%%$$#OXX. &+++.o@*%$Oo&+++++++++XoO$%*%%#O  &&&+++++...@#***%%$@O..+++&&.Xo#$**%%#@Oo&++++&&+++..*****%$#oX&&&Xo#$%****%%#OXX  ooo  XXo$$*%$@o++++&...&++++o@*%$Oo++++++++XO#%****%#O  &+++++++&& O#$*****%$@o+++.XO#$%%*******%$@O&&&O@$%*******%$#oX.+++oO$%%*******************************************",
+"$O. +++++& .@#$%********%$#@. &+++++ .O*%%#@OXXXXXXXXoO@$%**%%$#@oooXXXXXXoO@#$****%%$#OooXXooO@#$%***%$$@OoXXXXXXXXXO@*****%%$#OOoO@@$%%****%%%##O@O@O@OO@@#%%*%$#@ooXXooOooXXoo@#*%$@X++++++++XO#%%***%$#@oXXXXXXXXooO#$%*****%$@O...&&oO#%*********%#@OOO@$%%******%%#Oo &...O@$%********************************************",
+"$@  +++++  .@$%%*********%#@. &+++++  @**%$#@@OooOOO@@#$$%***%%$#@@@OOOOO@@##$%*****%%$#@@OO@@##$%%****%%$#@@OOOOOO@@@$******%%$#@@@#$%%******%%$$###$#$##$$%%%**%$#@@O@@@@@@OO@@#$*%%#OX.......@#$*****%%$#@@OooooOOO@#$%%******%$#XXX  o@#%%*******%%%$#@#$$%********%#@o ..Xo@$%*********************************************",
+"#@XX    ..Xo#$%**********%$#oX..    XX@**%%%$########$$%%*****%%%$$#$#####$$%%*****%*%%%$$#$#$$%%*******%%%$$#######$$%*******%%%%$$%%%**********%%%%%%%%%%%%****%%%$$##$$$$$$##$%%**%$#XX.X.XXX#$%%*****%%$$$#######$$%%%*******%%##OOO@#$%%**********%%$%$%%********%%%##@OO@##%%*********************************************",
+"%$@OXX.XXoO@%%***********%%$@OoX.XXXo@$***%%%%%%%$%%%%%********%*%%%%%%%%%%***********%*%%%%%%************%%%%%%%%%%%%%********%%%%%%*************%%%*%*%%%********%%%%%%%%%%%%%%****%%$#@@@O@@#$%*********%%%%%%%%%%%%%********%*%%$$###$$%%************%%*%**********%%%#$###$%%**********************************************",
+"************************************************%*%%%*%*****************%********************************%******%**%*******************************%%%%$%%%%********************************************************************************************************************************************************************",
+"************************************************%%%$$%%************%%%%%%%%****************************%%%$%%%*%%%%%%%**********%*%%*************%%%$######$$%%***************************%%%%%%%***************%%%%%************************************************************************%*%%%%%%***************%***********",
+"***********************************************%$#####%%*********%%$$###$$%%**************************%$$###$$$$$##$$%%********%%%$$%%**********%%##@@OOOO@@#$%************%*%*********%*%%$$$$$$%%%**********%%%$$$$%%**********************************************************************%%$$##$$%%***********%%%%%%%%******",
+"***********************************************$#@OoO@#$%*******%%$#@@@O@@#$%%*******%**********%****%$#@@OO@@#@@@O@@#$******%*$#####$%********%%$@OoXXXXXoo@@$*******%%%%%%%%$%%******%%$##@@@@##$%%********%$$#@#@##$%%******************************************************************%%$##@@@@##$$%*******%%$$####$$%%****",
+"*********************************************%%#@o&&&o@#$*****%*$$@oX....XO#$%****%*%%%%%*%*%%%%%***%$#O....XoOoX...X@#*******$$@OoO@$%%*******%#@O  +++++&& O#****%%%$$#$$#$#$$%%****%$$@@XX..oo@@$$%*****%%%#OoXXXoO#$%*****************************************************************%$$@@oX..oo@##$%*****%%$@@OOOO@##%%***",
+"********************************************%%$@oX+++Xo@#$%***%%$@OX......oO#$%***%%$$$$$%$$$$$$$%%*%$@o.  . XXX.....o@******%$@O&&&o@$%*****%%$#OX &+++++&& o@*****%$##@@#@@@@#$%***%%#@OXX....XXO@#%%****%%$@oX...XXO#%%***************************************************************%$#@oo.....XXO@#$%***%%$@OoXXXXoO@#$%**",
+"********************************%***********%$#O..+++..o@#%***%$@oX+++++++.XO$%**%%#Ooo@@#@#@@oOO$$*%#oX+++++...+++++Xo******%#Oo&&&X@#%*****%%#oX.++& &&&++&o@***%%$@oo..OOO&&@#$**%%#@.. ++++++ ..@$$****%$#O &  &++o@$%******************************%**%*%*%************************%%$@.. ++++++ ..@$%***%%#O &+++++XXO$%%*",
+"***************************%%%%%%*********%%$#OX. +++..Xo@$**%%#@X.+++++++.Xo#%*%%$#oXXoooOoooXXo@$*$#o.+++++ . +++++Xo*****%%#OX+++XO#%%****%$@X..++&&&&&+++o@****%$OoX. Ooo&&O#$%*%$#O.  ++++++  .O@$***%%$@o & &&++XO#%*********%%%%*%%%%%******%%%$%%$$%$%%%%***********************%$@O.  ++++++  .O@$***%%@O&&+++++.Xo$%**",
+"***************************%%$$$%%%*******%$#OoX  +++ ..oO#**%%#oX.+++++++.XO$%*%%#OX..XX.XX.X..XO#*%#oX+++++ . +++++Xo*****%%#oX+++Xo#%****%%#OX. ++&&&&&++&o@****%$@oX..Ooo&&O#%%*%#OX.& ++++++&  oO#***%$#OX&&&&&++XO#%%*****%%%%$$$$$$$$$%%**%%$$###########$$%*********************%#@X.&&++++++&  oO#***%$#O&&+++++.XO$$**",
+"*************************%%$#@@@@$%******%%#@.  +++++++..X#**%$@X. ++.....Xo@$%*%$@o&&&+++++++&&&O@*%$Oo  &++...++&& X@*****%%#oX+++Xo#$****%$#o. &++&&&.. ..o#***%%$@@OooO@OXX@#$**$#XX++++++++++++.o@***%$Oo.&&&+&++XO@$******%$#@#@@@@@@@#$$**%$#@@OOoOoOoOOO@#$*********************$#XX++++++++++++.o#****%#OX......Xo@$%%*",
+"*************************%%#@Ooo@#%%*****%$@O.  +++++++ .X@**%#@...++..XXXOO#$%*%$@o&&+++++++++&&o@*%$#o. &++...++  .o@*****%%#oX+++Xo#%%***%#@X  &++&&&.....O#****%%##@OO##@oo#$%**#OX.++++++++++++.X@**%%#OX.&++++++.o@$%***%%$#@oooooooooO@#*%%#@oXXXXXXX.XXXo@#****%*%%%$%$%$%$%%%**#@X.++++++++++++.X@***%%$@X.....XO@#$***",
+"************************%%$#X...X#$%*****%$@X&++&&...&&.XX#*%%#O.. ++X.XoO##%%**%#@X&++++&  +++&&XO**%#@X..++&&&++..X@#*****%%@oX+++XO@%****%#oX+++&&+++++...O#*****%%$$$$$$$#$$%%**#O  &++++&&++&&&  O**%$#X..++   ++.XO$%**%%$@O. &&&..&&&..#*%#@X+++++++++++++XO****%$$$########$$$%*#O.&&&&++&&++&&&& O****%%$#@@O@O@##%%%**",
+"*************************%$@.....@$%%****%#@X+++ &...&&..o#*%$#O.. ++..Xo@#$%%**%#OX&++++ & +++&&X@*%*$#oX.++&&&++.Xo@$*****%%#OX+++Xo#%%***%#o.+++&&+++++...O#******%%%%$%%%%%%****@O &+++++&&++&&&& o**%$#X..++   ++.oO$%*%%$@Oo &&&&..+++..@*%#OX+++++++++++++Xo**%%$$@@@OOOoOOOO@$$*@o &&&&++&&++&&&& o*****%%$$###$$$%%****",
+"************************%%$@X....O#%*****%#OX+++& X.X& .Xo$*%$@o.  ++..XoO#$%***%#@X&++++&  +++&&XO**%%#OX.++&&&++.XO#%******$#OX+++XO#%****$@o.+++&&+++++ ..o@*******%*%*%*%%%*****@o &+++++&&++&&&& o***$@X..++   ++.Xo#$*%$#OXX&&+++..+++..@*%$OX+++++++++++++.X***$#@OXXXXXXXXXoo@#*@o &&&&++&&++&&&& o*******%%%%%%%*%*****",
+"*************************$$OXX..XO#$****%%#OX+++  .XX.XoO@$*%#OX++++++++.X@$%***%#OX+++  ...  ++&XO***%$@oX&+++++&.XO#%******%#OX  .XO#%%***%#oX+++++   +&+++XX*********************@o&&+++++..& &&&&&o*%%$#oX.+&++++&..o#$*%#O.  ++   +++++Xo@*%$@O...       +++.X*%%$@. &++++++++++o@*#o&+&&&++++&&&&&&&o*********%*%%********",
+"************************%%#@X....O#$%****%$OX+++ ...X.XXO@#*%$oX++++++++..@$%%**%#OX+++ &...& +++XO**%%$@oX&++++&&.XO#%******%#@X.  X@#%****$#oX+++++& &+++++.o*********************@o&++++++..& &&&&&o**%%#XX.++++++&..X#%*$@o. &++   +++++XO#*%%#@XX......  +++.X**%$@  &++++++++++o@*@o&&&&&++++&&&&&&&o*********************",
+"************************%%#O. && O@%%***%%#@X&++++.. &&.XO$*%$@X.  ++&  .o@#%%**%$OX&++++&  ++&+&XO***%$OX.&&+++&&.XO#%*****%%#@X+++XO#%****%$@X.. +++++&&+++.o*********************#o. ++++++++++++ .o**%$#o..+++++++.XX#$*$Oo+++&&&&&++ ..o@$**%$#@O@OOOoXX.+++.o*%%$@X...     . ..o#*#o. +++++&&+++++ .O*********************",
+"************************%$@o &&&&o@$%%***%$@o&&+++   &&.Xo#*%$@o.  ++&  XX@#$%%*%#Oo&++++ & ++++&X@**%%$@X.&&+++&&.XO#%******%#OX+++XO#%****%$#OX..+++++&&+++.X*********************#O. ++++++++++++..O**%%#XX.+++++++..o#$*#OX+++&&&&&++  .X@$***%%$$####@OXX+++.X**%$#oX..........X@#*#@..+++++& +++++..O*********************",
+"************************%$@o &&&&XO$%****%$@o&&&++&  +&.Xo$*%$@o. &++&& .XoO@$$*%$OX&++++&  ++&&&X@**%%#OX.&&+++&&.XO$$*****%%#OX+++XO#%%****%#@X..+++++&&+++.o*********************$@..++++++++++++..@**%%$oX.+++++++.Xo#%*$@X+++&&&&&++ ..X@#*****%%%%$%$@OX+++Xo**%%$OooX.....X.XX#$*#@X.+++++&&+++++..@*********************",
+"***********************%%#@X&&+&&XO#$*****%#@o..+++++++XX@$*%$@X  &++....XXXX@#*%$@o&&+++++++++&&o@**%%$Oo.  +++ ..XO#%******$#oX+++Xo#$****%%$@oXX.. & ++++&XO*********************$#OX&++++&&++++&XO#**%%$@oX..   ..Xo@$%*$@o  &++ & +++++XO#******%*%%%%$#O...o@***%$$#@#@@@@@@@@#$%*%@oX&&+++&&++&&&XO#*********************",
+"************************%#OX&&+&&XO#%*****%$#OX.&+++++&Xo@$*%#Oo &&++........O@*%$@O&&&+++++++&&&o@**%%#OX..&+++& XXO#%******$#oX+++Xo#$****%%#@oX.X.   +++++XO*********************%#@o&&&++&&++&&&o@#***%$#@o... ..XoO#$%*%#@.. ++  &+++++Xo@***********%$#@XXX@#****%%%$$$#$##$$$%%%*%$@o&&&++&&+++&&o@#*********************",
+"************************%#OX+++++XO#$%*****%$#@XX.+++.Xo@$%*%#oX+++++++++++++XO**%#OX....XXXXX..XO#**%%#oX.+++++++.Xo#%*****%%#oX+++Xo#%%***%$@o&&&  ...++ .X@$*********************%$#OX..&&++&&..XO#%****%$$##OOoOO@#$%%**%$@OXX&&++& .+++ .@************%%$###$%*****%%%%%%%%%%%%%%**%$#OX..&&++&&..XO#$*********************",
+"***********************%$#oX+++++.o#$%*****%%$#OXX+++.oO#%%*%@o.+++++++++++++XO*%%$@oXXXXoooooXXo@$**%%#oX.+++++++..o#%******%#OX+++XO#%%***%$@o&+++++++++.Xo#$**********************%$#OXX&&++&&XXO@$%*****%%$$#####$$$%***%%$#OX &&&&..+++..@*************%$$$$%%********%*%*%*%*******%$#OXX&&++&&XXO#$%*********************",
+"***********************%$#oX+++++Xo#$%*******%$#oX+++XO#$%**%#OX+++++++++++++XO***$$OOoOO@@@@@ooO$%**%%#oX.++++++&.Xo#%*****%%#OX+++XO#%****%$@o&+++++++++Xo@$%**********************%%$@OX  ++& Xo@$%%******%%%%%%$%%%%******%##O. &&&..&&&..#***************%%%%***********************%%$@OX  ++& XoO$%%*********************",
+"************************%#OX+++++XO#%********%%$@o...O@#%%**%$@o..        ...O@***%$$$#$$$$$$$$$$%%***%$@oX..  . .XO@$%******%$@O...O@$%****%%#O...&    .Xo@#%%***********************%%$#@OoXXoo@#$%%*********%%%%%%**********%$#@OoooOooooO##*******************************************%%$#@OooXoo@#$%%**********************",
+"***********************%%#@X&&&&&XO#%%********%$$@XXX@#%%***%$#OX..........XX@#****%%%%%%*%*%%%%%%%**%%$#@oX.....Xo@@%%******%%#OX.X@#%%****%%$@XX.  ...Xo@#$%*************************%%$$#@@O@##$%%*************************%%%$#@#@@@@@@@#$$********************************************%%$$#@OO@##$%%***********************",
+"*************************%#O.   .O#$%**********%%##@#$$%*****%$#@@OOOOOoOOO@@$$*****%%%%******%********%$##@OOOOO@#$$%********%$#ooX#$%%*****%$#OXX...XXo@#%%****************************%%$$##$$%%%****************************%%%$$$$$$$$$$%%**********************************************%%$$$$#$%%*************************",
+"************************%%$#@OoOO#$%************%%%$$%%*******%%$##########$$%%*************************%%$$####$#$%%**********%$##$$%********%%##@@@O@@#$%%*******************************%%%%%%%********************************%%*%*%*%%%%%*************************************************%%%%%*%**************************",
+"**************************%$#####$%%*************%%%%*********%%%%%$$$%$$%%%%****************************%%%%%%$%%%*%*********%*%%%%%%*********%%$$#$#$$%%%**********************************%*%*************************************************************************************************%*%****************************",
+"*****%%%$%$%%%******************************%%%%%$%$%%***********%%%%%$%%%***************************************************%%%$$$#$#$$%%%************************************************%%%%%%************************************************%$%$$%%************%%%$%$%*************%%$$$$$$%%******************************",
+"****%%$$###$$%%******************************%$#####$$%*********%%$#####$$%%****************%******************************%%%$#@@@@@@@@#$%***********************************************%%$$$$%%%***********%*%%*%****************************%$#####$%%**********$#@###$%************$#@@@@##$$%******************%*%********",
+"***%%$@OXXX@@$%%*************%*************%%$@@XXXoO#$%*******%%$@OXXXoo$$%************%%%%%%****************************%%$#@oX.....XXX#$*********************************************%%$$@ooO#$%*********%%%$$$$$%%**************************$@@ooO@#$%**********#OOoO@#$%***********#@OooooO##$%*****%*********%%%$%%%******",
+"***%$#Oo.X.XO@$%%**********%%%$$%%*********%$#Oo...XX@#$%******%$#Oo...XX@#$%*********%%$$#$$%%**************************%%#@Oo.X........O#********************************************%%%#@OXXX@#%%*******%%$$##@###$$*************************#X. &&Xo#%%%*****%**X.&&&Xo#$%**%%%%$*%*oX&&&&&XXO#%%%%%%%%*******%%$###$%%*****",
+"**%$#OXX...XXO#$%*********%%####$%%********%#@XX.. ..o@#%%*****%#@XX.. ..o@#%%*******%%$#@@@@$$%************************%%#@ooX..      ..O@********************************************%%#@OX...O@$%*******%$#@OoooO@#$%************************@X.&&&.X@$%***%%%%%*X.&&&.X@$%%%%$#$$$%*X.&&&&&..o@$$$$$#$$*******$$#OO@@$%*****",
+"*%$#Oo&+& &+&oO#%%*******%%##ooo@#%*******%%#O&& & +&.XO$%****%%#O&&   +&.XO$%******%%##XXX .#$%************************%$@o&&&++++++++++XO********************************************%#@o &+++X@#%*****%%$#O..&&&..O#$%%**********************@..&&&.XO$$%%%$$$$$*..&&&.XO$$%$##@@@#$*X.&&++&..XO####@@##*******%#O&&&@#%%****",
+"*%$@oX++&&&++Xo@$%%******%$@O..XO@$%%*****%$#O&& &&++.XO$%%***%$#O&+&&&++.Xo$$******%$#OX.. .@$%******%%%%%****%*%%%****%#OX&&&++++++++++XO********************************************%#@o &+++XO#%%****%$#@o  &&& .oO#$%**********************@..+++..@#%$%##@OO#*..+++..O#$##Ooo  @$*.  &&&&&  O@@@O..Xo******%$#O&&&O@%%****",
+"%%#o..++...++..X#%%****%%$#Oo+++XO#$%%*****$#O..   +&.XO#%%***%%@O.  &&++.XO#%%*****%$OX&&&.X@#%%****%%$$$$$%%%$$$$$$%**$@o.+++  +++++  .o@********************************************%$#OX.+++Xo@%****%%$oX.++...++.XO#%%****%%%%%*%*%%*******@..+++..O#$$#@@oXo@*..+++ .O@##OXX.  @#*.  &&&&&& oOooX  .X******%$@O...o#$%****",
+"%$#X..++...++ .X#$****%$$#OoX+++XXO#$$*****$#O..   ++XX@$%****%%#O..&&&++.Xo#%%****%%#OX&+&XX#$%****%$##@@@##$$##@@##$$*$@X.+++  +++++  .o@*********%%%%*%******************************%#@XX+++Xo#$****%$#o..++  .++..o#%%*%%%$$$$$%$$%$%%*****@oX+++ .O@##@...&&@*oX+++..o@@OX&&&..O#*oX  &++ ..XX.. &&X@******%$@o...o@$%****",
+"*$#X..++...+&..X#%%**%%#@OXX.+++.XoO@#$***%%#O... .+&.o@$%%****$#O.   &++.Xo#%%****%%#OX&&&Xo#%%****%#@OoooO@#@OOoooO@$*$@X.+++  +++++ ..O#*******%%%$$%$******************************%%$Oo.+++.o@$%***%$#o..++ ..++..X#$%*%%$##@########$%%***#o.&++ .o@@@o.  & O*oX+++ .oooX.&&&..@#*OX& &++  .XX   &&o@******%#Oo. .o@$%****",
+"%%#OX.&+   ++XXO#%***$$@X..  +++  ..X@$***%%#OX.+++..XO@$%****%$#O..&&&++..o#$******%$OoX.XO@$%*****$@. &&&XXO@o++&  @#*$@X.+++& +++++  .@#******%$$##@##%%*****************************%$@o.+++Xo@$%***%$@X..++...++ .X@%%*%$@XXXoooooXo@##%%**@oX+++ .XOOoX   &&O*o.+++ .XoXX.&&&..@#*oX &&++   .. & &&o@****%%$#oX&+&X@#%****",
+"*%$@OX&+   ++Xo@$%%*%$@o..   +++   ..o@***%$#O..+++..XO#$%*****$@O.. &&++..X#$%*****%%@OoXo##%%*****#@  +++..ooX++&&&o@*$#X.+++ &+++++ ..O#*****%%$@OooO@#$****************************%%#@XX+++.X@$%***%%#X..++...++..X#$%*$#@...XX.X...oO@#%%*@o.+++ .XXX..&&&XXO*oX+++ ..X.&&&& XXO#*.    &&&&&  ++&XX@#****%%#Oo.+++XO#%****",
+"**%#@OX.   .Xo@$%%**%$OX+++++++++++++XO****$@o&+&&&+&.XO$%%**%%$@o&+   ++.XX#%%*****%%%####$%%******#O..+++..ooX&&++&oO*%#OX&+++++++++ ..@#*****%$#X.&&&O#$*****************************%#@..+++..@#%%**%%#OX.++ & ++.Xo#%%*$@O&++&& . ++..X@$$*OXX+++ ...X  &++Xo@*X.+++ ....+&&& .XO#*.  & &&&&&  &++Xo@$***%%#@o &+++XO#%%***",
+"**%%#@XX...Xo@#%%***%#OX+++++++++++++XO***%$@o&+&&&&&.Xo$%****%$@o++ & ++.Xo#%%******%%%$%%%%*******$@X.+++ .XXX&&+++XO*%#OX&&++++++++ ..@#****%%$@X.+++o@#%%***************************$#O. +++..O#%***%$#OX.++   ++.XO$$**$@o&+++&   ++ ..O#$*O &++++&&&&++&&&.o@* &+++&+++++++++& O@*X.+++++&&&++&&&.X@$**%$#@oX &+++XO#%%***",
+"**%%%#@o..XoO$$%****%$OX+++++++++++++XO***%$#o&+&&&&&XXO$%%***%$@O++   +&.Xo$%**********%%%*********#@X.+++..ooX &+++XO*%$#O &&+++++++ ..@#*****%#O..+++X@#%**************************%*$#O..+++..O#$%***%$OX.&+ & ++.XO$%**$@O&++++   ++  .X@#*O &+++++&&&++&& .o#* &+++++++++++++&&o@*X.&++++&&&++&&&Xo#$**%$@oX.&&+++XO#%****",
+"****%$$##@@#$$%*****%%#OoXX..+++...XoO#****$#@..    .o@#%%*****%#@X..  ..o@#$%%*********************$@XX+++ .XoX. +++XO*%%#@oXX  +++++...@#****%%$@..+++o@#%**************%%***********%$#O. . ...O@$%**%%$@oX &&&&& Xo@#%%*%#OX..++&&&&&+++.X@*@. +++&+&&&++&&&.o@* &+++++++++++++&&oO*oX&++++&&&++&&&.X@%*%$#O &&++...o@#$%***",
+"*****%%$$$$$%%******%%$#OoX..+++.XXo@#$****%$@XX.....@#$%%****%%$#Oo...XXO#$%***********************%#OX+++ .XXX  +++Xo**%%#@OX  +++++ ..@#*****%$@X.&&+o#$%***********%%$%%%%*********%$#@X.....X@#$%%*%%#@o. &&&&& .o@#%%*%#OX..++&&&&&+++.XO*@OoX.. .+++&&+++.X@*oXX..&&&&&&& . ++X@*@OXX.. +++&&+++.X@$*%$@o&&&++...XO##%%**",
+"*******%%%%*%********%%$#OOX.+++.Xo@#$%***%%$$@@OOO@@#$%*******%%$#@@@O@@$$%%***********************$#oX+++  ...  +++Xo***%%$@OX.+++++ ..@#*****%$#@OooO@#$%**********%$$####%%********%%$#@@@@O@@#$%***%%#o..+++++++..X#$**%$@o..+++++  +++..@*$@OoX...+++&&+++.X@*@o...&&&&&&&  .++o@*#@OXX. +++&&+++.X@$*%$Oo&&+++..XXoO##%%*",
+"*********%***********%%$#@OX.&++.oO@#$%*****%%$$###$$%%%********%%%$#$#$$%%*************************%#oX++++& . &++++.o****%%#Oo.+++++ ..@#******%$##@@@#%%**********%%#@OOO@#%%********%%%$####$$%%%***%$#XX.+++++++..o#%%*%#@X..+++++&&+++..@*%#@XX.++&&&&&+++.X@*@o.  +&.X...+++ .o@*$#OX.++&&&&&+++.X@#*%#OX+++  ..X  XXO#%*",
+"*********************%%$#@oX.++&.Xo@#$%******%%%%%$%%%***********%%%%%%%%%**************************%#oX+++++   +++++.X*****%$@o.+++++ ..@#********$$$$$%%***********%$@o &&O@#%%*********%%%%$%%%%%****%%$XX.+++++++.Xo$$**$#OX..+++++  +++.X@*%#@XX.++ &&&&+++.XO*@o. &&&.XX..+++ .o#*$#OXX++&&&&&+++.XO#*%#@X+++  ...&&.Xo#%*",
+"*********************%$#XX...   ..XXo$$********%%*%*%**************%*%%*****************************%#OX+++&+&  +++++.X****%$@OX.+++++ ..o#*********%%%%%***********%$@OX&&&XO#$%**********%*%*%*********%$#OooXXXXXXOO#$%**$@o&&+++   ++&& XO@*%#OX..++&&&&&+++.XO*Oo & &&XXXX.+++..O#*$@oX.++&&&&&+++.XO#*%$Oo&+++&.. ++..X#$*",
+"********************%$#@...   &   ..X@#*************************************************************%#oX+++++++++++++ .**%%$@OX..+++++&& o@************************%%$@..+++..@$%************************%%$$@OOoooO@@#$%%**$@o&++++   ++  .o@$*%#O &&&&&&&&&+++ .O*X.&++..XXX&&&& ..O#*#O &&&& & &&+++ .O#*%$@o&&+++   ++ .X@$*",
+"*********************$@O..  &  &  ..XO#*************************************************************%#OX++++++++&&+++ .***%$@oX. +++++&& XO*************************$#O..+++..O#%%*************************%%$$#####$$%%%***$@o&++++.. ++ ..@#$*$@O&&&  &&&&&+++  O*o.++&.XoXX&&&&&..O#*@O&&&& & &&&+++  o#*%$@O&&&++   ++..X#$*",
+"********************%$@X+++++++++++++X@*************************************************************%#oX+++  ..XXXXXoo@**%$#X..++++++++++Xo*************************%#O. +++..O#%**************************%%%%%%%$%%%%*****%#O.  XX.....Xo@#$%*%#O &&   &&&&+++ .O*oX&&&XXOoX&& & ..O@*#O && . . &&+++ .O#**%#@XX.+++++++.XO#%*",
+"********************%$@o+++++++++++++o@*************************************************************%#OX+++ .XO@####$$%**%%#o..++++++++++Xo************************%%#o &+++ .@#%%****************************%*%**%********%#@X..ooXXXXXO@#$%%*$#OX..XXooX..+++ .O*oXXXXO@OXX++&&&+&O@*#OX..XoooX..+++ .O#*%%$#OXX++++++&Xo@$%*",
+"********************%%#OOXXXXXXXXXXXo@#*************************************************************%#OX+++..O##$%%$%%***%%#oX.++++++++++XO*************************$#O &+++..@#%*******************************************%%#@@@@@#@@@@#$%%***%$#XXX@O@OOX.&++..@*OoOOO@#@OX&&&&&&+O#*$#XXX@@@@OXX+++..@$***%$#@ooXXXXXoO@$$**",
+"*********************%$#@@OoooooooO@@#$*************************************************************%$#O...oO#$%**********%$#@ooXXXXXXXXoO#************************%%#@X.   XO@$%*******************************************%%%$$#$$$$$$$%%%%***%%$########@OoXoO@#*$$###$$$#@oooXooO@$*%$######$@@ooooO@#$***%%$##@OOOOO@#$%*%*",
+"*********************%%%$###########$%%*************************************************************%%#@XXXO#$%***********%%$##OOoooooOO@#$*************************%$@oX...o@$%**********************************************%%%%%%%%%%%%*******%%%$%%%%%$##@@@@$$*%%%%%%%$$#@@@@@@#$$*%%%$$%%%%$$@@@@@$$%******%$$#####$$%%***",
+"***********************%%%%%$%$%%%%%%%***************************************************************%$#oXo#$%%************%%$$########$$$%**************************%$Oo..X@#$%**********************************************%*******************%%%%%%%%%%$$$$$%%*%%%%%%**%%$$##$$$%%**%*%*%%*%%%%$#$$%%********%%%%%%%%%%****",
+"***%%%$$$$%%***************%%%$$$$%%**********%%$$#$$%***********%*%%$%%%%******************************%%%$####$%%************%%%%%%%%*%*********%%%$%$%$%%%%%****%%%$$$$%%****************%%$$$$$%**********%%$#$$$***********%%%%%%%%%%%********%%%$$$%%******************%%$$$$%%********%%$$####$%*********%%%%%%%%%%%%****",
+"***%%##@##$%%**************%%$##@##$%********%%##@@@#$%**********%$$$###$$%%***************%*************%$#@OO@@$%%*********%%%$%$$$$$$$%%***%%%%$$########$%%****%%##@@#$%%**************%%$##@#$$%%*******%$#@@@#$$%********%%$##$##$#$$%%******%$$#@@#$%%***************%%$##@#$$%*******%%#@OOO@#$%*******%%%$#$$$$$$$$%%**",
+"**%%#@o..@#$$*************%%#@oo..#$%%*****%%%#Oo...@#$%*******%%$#ooOO@O@$$********%%%$%%%%%%%********%%$#XX   o@$%*******%%$$##@#@#####$$****%$#@OoXXXXooO@@$***%%$@..oOO$$************%%%$#O..O@#%%*****%%%#@...oO#%%******%%$#@@O@@@@@#$$%*****%#OO..@@$%%*************%%$#O..o@#%%****%%%#OX & oO#$*****%%%##@@@@#@@@@#$$%*",
+"**%$@OX  oO#$%%**********%$$@oXX  @#$*******%$@oX   o@$%******%%##OXXXXXXo#$%%*****%%$$$#$$$$$$%*******%%$OX.&& XO#%%*******$$ooXXXXXXXXoo#**%$$#OoX.....XXXoO#***%%#@. XXo@$$%***********$$@Oo  XO@%%*****%%#@o & Xo@#%%****%%$@O  XXX..XoO$%****%%@OX  oO@$%%***********%%$@Oo  XO@$%****%%$@XX&&&.o@#%%****%$Ooo..OOO..XoO$%*",
+"**%%@oX&&XXO#$%*********%%$@O...  @#%******%$@OX.&& XO#$%****%%$@Oo.....XXO#$%****%%$#@@@@@@##$$%******%$#O..&&&Xo@%%*****%%#@XX........XX@*%$#@OXX..... ...XX@**%%$@O..++&Xo@#$%%****%%$#@O  &&&XO@$%%**%%$@O. &&&+&oO#$%***%$@Oo&&.X.  .XX#$%**%%$@OX &XXO@$%%*********%$$@OoX& XO@%%****%$@OX.&&&.XO#$%***%$#oX.. XXX  XXo#$*",
+"**%$#OX && .@#%%******%%%$#oX&&&.X@$%%****%%#Oo&+&&&..@$%%**%*$#X..++++++&o@#%***%%$OoX. OOO  @$%%****%%$@o &   ..@$%******$#O.... . .....o*%$@...++++++++++&&O**%$#Oo..+++.XO@#$%**%%$$@@oX &&& Xo@$$***$$@OX. +++++Xo@#$**%$#XX. &   &&...O#%***%$#OX && .O@#%%%*****%%%#@O  && XO#$%***%%#Oo&+&&&++oO#$%*%%$@X..&&... & .X@$*",
+"*%%$@OX &&& o@$*%*****%%$@OX.+++.X@$%****%%#@oX++++& .@$%****%$@X. ++++++&X@#%***%$#OX.  XXX  @$%%****%$#OX &   .X@%%****%%$@o&+++++++++++o*$#O.. ++++++++++&&o*%$#oX..  &   .Xo#$%*%%#oXX..&&&  .XX@$%*%$@X..&&   && .X@#%*%#@X..&&   && ..O@$***%$@OX &&& XO@#$%%***%%$#@OX &&& XO#$%***%$@oX++&&&++Xo@$%*%%#O...&&   && ..O#*",
+"*%%#oX.. &&&o@#%*****%%$@oX. &  Xo#$%%***%$#X. &&   ..O#%%**%%#O.    &&&..o@$%%**%$#XX.&&.....O#%****%%#oX. &&&&Xo@$%%****%#@X++++++++++++X*#@X+++ &.....&&&&&o*$#o..   &&&&&...o@$*$@O...  &&&   ..o@$*$@O.  && & &&  .oO#*$@o.. &&& &&&  .X@#**%$@X... &&&..XXO#%**%%#oXX. &&& ..Xo#$**%#@X.  &   && ..@$*%%#@.. &&.  && ..O#*",
+"*%$@X... &&&XO#$*****%$#oX.  && Xo#$*****%#@X. && & ..@#%%**%$#O. & &&&&.XO#$****%#@X..&& ...XO#$****%$@X.. &&&&Xo@$%*****%$OX &+++&&...++X*#OX+++  XXXXX&&&&&o*#Oo+++++++++++++.o#*$OX+++++++++++++.o#*$OX+++++++++++++.o#*#OX+++++++++++++.o#*%%#@X..  &&& ..XX@$**%$@o..  &&& ...X@$*%%#O.. &&   && ..O#*%%#O &&+++++++&& O#*",
+"%%#@X..  &&&Xo@$%****%$@XX. & &&Xo@$%%**%%#O.. &&   ..O#$***%%#o. &  &&&..O#$%**%%#OX..&&   ..O#%%**%%#@X.. &&&&.o@$%****%%#@X&&+++&&...++X*#OX+++&.XOOoX &&&&o*#OX+++++++++++++.X@*$OX+++++++++++++.X#*#OX+++++++++++++.X@*$oX+++++++++++++.X@*%%#@ &&+++++++&& @#*%%#@ &&+++++++&& @#*%%#O &&+++++++&& O#*%%#@ &&+++++++&& @#*",
+"%%#O &&+++++ .O#%%**%%#@ &&+++++ .O#%%**%%#O &&+++++ .O#$%**%$#O&&++++++ .o#$***%%#O &++++++ .o#$%**%%#O &&+++++..O#%%****%#OX&&+++&&. .+&o*@X.+++.Xo@#@OXXX.X@*$@o.  ++.....+++XX#*$@o.  ++.....+++XX@*$@o.  ++.....+++XX#*$Oo.  ++.....+++.o@**%#@ &&+++++++&& @#**%$@ &&+++++++&& @#*%%#@ &&+++++++&& @#**%$@OoX..+++..XXO#$*",
+"*%#@ &&+++++..o#$%***%#@ &&+++++..o#%%**%%#@ &&+++++ .o@$%**%%#O &&+++++ .o#$%**%%$O &&+++++ .o@%%**%%#@ &&+++++ .o#$****%$#OX+++++&&+++.Xo*#X.+++.XO#$$#ooXXo@*$@o.  ++.....+++.o@*$#o.  ++.....+++.o#*$@o.  ++.....+++.o@*$@o.  ++.....++&.X#**%$#OoX..+++..XXO#$*%%$#OoX..+++..XoO#$**%$#OoX..+++..XoO#$***%$@OXX.+++.XoO##%*",
+"%%$@OX.&&+++&&o@$%**%%$@oX.&&+++&&o@$%***%$@oX.&&+++&&o@$%***%$@oX.&&+++&&o@$%***%$@oX.&&+++&&o@$%***%$@oX.&&+++& o@$%***%$@oX+++++&&+++.XO*@o.+++.X@$$$$@O@OO$*%#O.. ++.....+++Xo#*%#O.. ++.....+++Xo@*%#O.. ++.....+++Xo#*%#O.. ++.....+++Xo#**%%$#OXX.+++.XoO#$%**%%$#OoX.+++.XoO@$%**%%$@OXX.+++.XXO##%**%*%$#OX.+++.XO#$%%*",
+"**%$@oX&&+++&&XO#$***%%$@oX&&+++&&XO#%%***%$@o.&&+++&&XO#$***%%$@oX&&+++&&XO#$****%#@oX&&+++&&XO#%%***%$@oX&&+++&&XO#%**%%$Oo.+++++&&++&.X@*@X.+++Xo@$%%%%$$$$%*%#@.. ++...&+&  oO$*%#@.. ++...&+&  X@#*%#@.. ++...&+  .o@$*%#@.  +&...&&  .o@#***%%$#OX.+++.XO#$$****%%$#OX.+++.XO#$%%***%%$#OX.+++.XO#$%%***%%%$@oX+++Xo@#%%**",
+"*%%$@XX++   ++XO@%%***%$@XX++   ++XO@%%**%%$@oX++   ++Xo@%%***%$@XX++   ++XO#$%**%%#oX.++   ++XO@%%**%%$@XX++   ++XO#$%*%$@X..++++++++++.X@*@X.+++Xo@$%%%%$$$%%*%$@.. ++...++  .@#%*%$@.. ++...+&  .@#%*%#@.. ++...++...@$%*%#@.. ++...+& ..@$%****%%$@oX+++Xo@#%%*****%%#@oX+++Xo@#%%*****%%$@oX+++Xo@#%%******%$@oX+++.o#$%***",
+"*%%#@X.++. .++.o@$%**%%$@o.++   ++.o@$%**%%$@XX++   ++.o@$%**%%$@o.++   ++.o@$%**%%#oX.++   ++.o@$%**%%#@o.++   ++.o@$%*%#OX..++++++++++.o#*#X.+++.XO##$$####$$*%#@.. +++++++.Xo@$$*%#@.. +++++++.Xo@$%*%#@.. +++++++.XO@$$*%#@.. +++++++.XO@$%****%%$@o.+++.o#$%*******%$#o.+++.o#$%*******%$@o.+++Xo@$%*******%%@oX+++Xo@%%***",
+"%%$@...++...++ ..@$**%$OX. ++...++ ..@$**%#@.. ++...++...@$**%#@...++...++ ..@$**%#@.. ++...++ ..@$*%%$@...++...++...@$*$@O &&+++++&&  .Xo#*@o.+++.XoO@@@OO@@#$*%#@.. +++++++.XO@$%*%#@.. +++++++.Xo@#%*%#@.. +++++++.XO@$%*%#@.. +++++++.XO@#%*****%%#o.+++.o#$%*******%$#oX+++Xo@%%*******%%@oX+++XX#$%*******%%#o.+++Xo@%%***",
+"%$#O.  ++...++ ..O@*%$#O.. ++ ..++ ..O@*%%#O.. ++...++ ..O@*%$#O.  ++...++ ..O#*%$#O.  ++ ..++ ..O@*%$#O.. ++...++ ..O@*$@X&&&+++++&&&  XO@*#oX+++ .XXooo....X#*%#@.. ++&&&++.XXO@$*%#@.. ++&&&++.XXO@$*%#@.. ++&&&++.XXO@%*%#@.. ++&&&++.XXO@$****%%$@oX+++Xo@$%%******%$@o.+++Xo@$%*******%$@o.+++Xo@$%*******%$@XX+++Xo@$%***",
+"%$@o&&+++++++++&&o@*%$@o&&+++++++++&&o@*%$@o&&+++++++++&&o@*%$@o &+++++++++&&o@*%$@o&&++++++++&&&o@*%$@o&&+++++++++&&o@*#oX&&&+++++&&   XX@*#OX+++& .X.X.   ..@*%#O.. ++&&&++...Xo@*$#O.. ++&&&++...Xo@*$#O.. ++&&&++...Xo@*%#O.. ++&&&++..XXo@***%%$#OX.+++.oO#$%****%%$#Oo.+++.XO#$%****%%$#@XX+++.X@#$%*****%$#OX.+++.XO#$%**",
+"%#OX&+++++++++++&Xo*$@OX&+++++++++++&Xo*%#OX&+++++++++++&Xo*%#oX&+++++++++++&Xo*$@OX&+++++++++++&Xo*%#OX&+++++++++++&Xo*@o.+++. &&&&&...&&o*$@o  &++++++++++..O*$@o.  ++...& &  &&O*$@o.  ++...&    &&O*$@o.  ++...     &&O*$@O.  ++...   & &&O***%$#@oX.+++.Xo@#$%***%$#@oX.+++.Xo@#$%***%$#OoX.+++.Xo@#$%**%%$#@oX.+++.Xo@#$%*",
+"#@X.+++&&&&&&&+++.X*$@X.+++&&&&&&&+++.X*#@X.+++&&&&&&&+++.X*$@X.+++&&&&&&&+++.X*$@X.+++&&&&&&&+++.X*#@X.+++&&&&&&&+++.X*OX.+++ .&&&&&...&&X*$#O.  ++++++++++.X@*$@o.  ++...  &&&&&o*$@o.  ++... &&&&&&o*$@o.  ++...&&&& &&o*$@o.  ++...&&&& &&o**%%#@oX..+++..Xo@#$*%*$#@oX..+++..Xo@#%**%%#@oX..+++..XoO#$**%%#@oX..+++..Xo@#%*",
+"#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*#OX.+++&&&&&&&+++.X*O &+++&&++++++++++X*%#@.. ++++++++++.X@*#oX+++++++++++++&&o*#oX+++++++++++++&&o*#oX+++++++++++++&&o*#oX+++++++++++++&&X*%%$@.. +++++++  .@$**%$@.. +++++++& .@$*%%$@.. +++++++  .@$**%$@.. +++++++  .@$*",
+"#O &+++++...+++++& *#O &+++++...+++++& *#O &+++++. .+++++& *#O &+++++. .+++++& *#O &+++++...+++++& *#O &+++++. .+++++& *O &+++&&++++++++++X*%%#@oX..+++&&..XX@#*#oX+++++++++++++&&o*#OX+++++++++++++&&o*#OX+++++++++++++&&o*#oX+++++++++++++&&o*%%#@. &+++++++& .O#*%%#@. &+++++++& .O#**%#@. &+++++++& .@#*%%#@. &+++++++& .O#*",
+"#O &+++++ . +++++& *#O  +++++ . +++++& *#O &+++++...+++++& *#O &+++++...+++++& *#o  +++++ . +++++& *#O &+++++...+++++& *O  +++&&++++++++++o**%%$#o..+++&&XoO#$%*#OX+++++++++++++&&o*#oX+++++++++++++&&o*#oX+++++++++++++&&o*$oX+++++++++++++&&o*%%#O. &+++++++&&.@#*%%#O. &+++++++&  @#*%%#O. &+++++++&&.O#*%%#O. &+++++++&&.@#*",
+"#O  +++++...+++++  *#O &+++++...+++++  *#O  +++++...+++++  *#O. +++++...+++++  *#O.&+++++...+++++&.*#O  +++++...+++++  *@X.   .   &  &&&  o****$#O..+++& o#$%***$@o.  &&  &     .XO*$@o.  &&  &     .XO*$@o.  && & &    .XO*$@o.  &&&   &   .XO**%$@X.. & &   ..X@#**%$@X.. & &   ..X@#*%%$@X..   & & ..X@$**%$@X.. & &   ..X@#*",
+"#@X.     .X.   & .X*#@X.     .X.   & .X*#@X.     X...    .X*#@X.     X...    .X*$@X.     .X.     .X*#@X.     X...    .X*#oX...... .     ..@***%%#O &+++.XO#%%***%#@...    .   ..Xo#*%#@..    . .  ..XX#*%#@..    . .  ..Xo@*%#@..     . . ..Xo#*%%$#XX... . ...XX#$*%%$#XX.... . ..XX#$**%$#XX... . ...XX#$*%%$#XX... . ...XX#$*",
+"$#oX. ...XoX.....Xo*$#oX. ...XoX.....Xo*$#oX. ...ooX.. ..Xo*$@oX. ...ooX.. ..Xo*$@oX. ...XoX.. ..XX*$#oX. ...ooX.. ..Xo*$#@OOOOOoOooooooO@#****%#@. +++Xo#$%****%$#@OoooooooOooO@@$*%$#@OOooooooOooO@#$*%$#@OOooooooOoOOO#$*%$#@OOooooooOooO@@$**%%$#@OOooooOOO@#$%**%%$#@OOoooOoOO@#$%**%%$#@OOoOooOOO@#$%**%%$#@OOoooooOO@#$%*",
+"%$#@OOOO@@@@@OOoO@@*%$#@OOOO@@@@@OOoO@@*%$#@OOoOO@@@@OOoO@@*%$#@OOoOO@@@@OOoO@@*%$#@OOOO@@@@@OOOO@#*%$#@OOoOO@@@@OOoO@@*%$$######@##@#@###$****%$#OoXXoO@#%%****%%$$###@#@#@####$$%*%%%$##@#@#@#@###$$%*%%%$##@#@#@#@###$$%**%%$##@#@#@#@###$$%***%%$$####@#@##$$%%***%%$$#####@###$$%%***%%$$###@#@###$$%****%%$$$########$$%%*",
+"%%$$#####$$$#####$%*%%$$#####$$$#####$%*%%$$#####$$$#####$%*%%$$#####$$$#####$$*%%$$#####$$$#####$$*%%$$#####$$$#####$%*%%%%$$%$%$$$$$$$%%%*****%$#@@@@#$%%*******%%%$$$$$$%$$%%%%***%%%$%$$$$$%$%%$%%***%%%$%$$$$$%$$%$%%***%%%$%$$$$$%$%%$%%*****%%%%%$%$%$%%%%******%%%%$$$%$$%%%%%*****%%%%$%$%$%$%%%%*****%%%$%$$$$$%%%%***",
+"************************%%%%$$$%$%%%%*******%%%$$$%%%***************%%%$$%%%*********%%$$#$$$%**********%%%%$$$$%$%%%*****************************************************%*%%%%*%******%%$$$$%%%***************%%%$%$%*%********%%$$##$$%***********************************%%%$%$%*********%********************%%%%%%%*******",
+"**%%%%%%%%%%%%**********%%###@@@@###%%*****%%#@@@##$%**************%$$#@@#$%********%%$#OOO@#$%%********%%##@#@@@###%%%*********%**%%**********************************%%%%$$$$%%******%%$@@@##$%%************%%%$#@@#$%********%%$#OOO@#$%%************%*%*%***************%%$#@@$$%%*****%%%%%%%****************%$$###$%%*****",
+"%%$$#######$$%%%*******%$#@OooooOO@@#%%****%$#oooO@#$%************%%$@@oo@#$%*******%$#OoXXO@#$%******%%$#@OooooOO@@$$******%%%%%%%%%%%*****************************%%%$$####O@@$$%****%$@oooO@#$%************%%#@@oo@#$%*******%$#OoXXO@#$%********%%%%%%%%%%%************%%#@@oo@#$%***%%$$#$$$%%%************%%$@Oooo@$$%****",
+"$$@@OOOOOOO@@##%%%***%%%#@..&&&.. ..@$%***%%#@.   .@#%%**********%%#OoX&&oO#%%*****%%#OX&&&..@#%%*****%%#@..&&&.. ..@$%****%%%#@$$###$$%%*************************%%$$#@@OOOoXoo@$%***%%#@.   .@#%%**********%%#OoX&&oO#%%*****%$#OX&&&..@#%%******%%$#@$$$@#$%%%*********%%#OoX&&oO#%%*%%##@O@O@#$$%**********%%$@OXX.XOO#$%%**",
+"#@OoXXXXXXXooO@@$%%***%##O. &&&    .@#%***%%#O &   o@$%**********%$@o..&&XO@%******%$@XX+++ .o@$%%****%$#O. &&&    .@$%****%$#@O@@@OO##$%%*****%%%%******%%%%*%***%$#@OooXXXX..XO#$***%%#O &   o@$%%********%%##o..&&XO@%%*****%$@XX+++ .o@$$%*****%$#@O@@#OO@#$%%******%%%#@o..&&XO@%%*%#@ooXXooO@#$%*********%$@OXX...XoO#$%**",
+"#..&+++++++&&XXo@#%*%%$@OX  +++  & .O#%****$#O &&& XO#$%********%$#OX..+&XO@%%****%$#OX.+++  XO#%%***%$#Oo  +++  & .@#%***%%#@ooOoOXXO@#$%****%%$%$%%%**%%%$%%%*%%$@@o. ++++&+++o@$***%$@O &&& XO@$%%%****%%%$@OX..++Xo@$%%**%%$#oX.+++  XO@$%%**%%$#@ooOOooXO@@$%%***%*%%##OX..++Xo@$%*$#O&&&+& ..@#$%*%*****%$#@X&+++++&oO#$%*",
+"@..++++++++&&..XO@$*%$#oX.&++++++..XO#$***%%#@X.&+&.X@$%%******%%#@o&&+ .oO#%%*****$#o&&   &&.Xo$%%**%$oX.&++++++..o@$%***%$@O&&.X.&&.Xo#$**%*%$####$%%%$##@#$%*%$@OXX  ++++++++Xo#*%%$#@oX.&+&.XO@$$%%**%%$#@OX&++ .Xo@#%%**%$#OX&&   +&.XX#$%**%$#Oo&&X.X&&..X@$%**%%$$#@OX&&+ .Xo@#%*$@o&++++  .O@#$%%****%%$@oX+++++++Xo@$%*",
+"OX.+++&&&&&&&+++Xo#*%$OX..&&+++++...o@$**%*$#Oo.&&&..o@$%%****%%$@oX+++ .XO#$%***%%#@o&& & +&.XX#%%*%%#oX.&&+++++.XX@$%**%%#@o&&...&&..X#$%**$$@X.X@##$##@.XX@$*$#O &&++&&&+++++.X@*%%#@oXX.&+&..XOO@#%*%%#@OoXX+++  XXO@#$*%$#OoX&+ & +&...O@$*%$#OXX+&...&&...O@$*%%##@OoXX+++ ..Xo@#*$@o&&&++&  .X@@$$%%*%*$#X..++.  ++..X@%*",
+"OX.+++&&& &&&+++.X@*$#O...+++++++...oO#**%%$@OX.&+&..oO@$$%**%%$@Oo.+++..Xo@$$***%$#OX&&  &++..X@$%*%%#o..&&+++++..o@#%**%$@OX&+...+& ..@#%*%%#O...oO@@@Oo...O#*$@o &&++&&&+++++.X@*%#@oX...&+&..XXXO@#*%#@OXX..+++ ..XXo@#*%#@oX.&+   ++ ..oO#*%#@oX.++...&& ..XO#*$$@OoXX..+++  .XXo@*$@o&&&++&  ..oo@#$%**%$@X. ++ ..++ .X@$*",
+"O..+++&&&&&&&+++.XO*$@o&++&&...&&+++..@*$#O &&++&&&&&+++Xo#*$#O &&++&&&&&+++Xo#*$#o &&++&&&&&+++Xo#*$#o&&+++ &&&&+++Xo#*$#o&&&++&&&&&+++Xo@*%$@O.  XXoooXX  .o#*#OX&&&++&&&+++++.XO*$@O&&&++...&&++&..@*$@o&&+++...&&++&..@*$@o&++++...&&+++..@*$@o&&++&.X.&&+++..@*$#..&&&++ ..++++&..*$#o&&&++&&& .XXoO@#*%%#@.. ++ . ++ ..@$*",
+"@X.+++  .....+++& O*#OX&++&&...&&+++ .@*$@o &&++&& &&+++.X@*$@o &&++& &&&+++.X@*#@o&&+++& &&&+++.X@*#@X&&+++& &&&+++.X@*#@o&&+++& &&&+++.X@*%$OX+++&&XX.&&++&o@*#oX+++     &&+++& o*$OX&++++..X&&+++ .@*$@X&++++... &+++ .@*$OX&++++.X.&&+++ .@*$OX&++++.X. &+++ .O*#@..&&+++.. +++++ .*%@O.  +++++++++&Xo@**%$@.. ++   ++ ..@#*",
+"@o.+++  .X.X.+++& o*#OX+++++ .  &+++ .O*#OX&&&++   &&+++.XO*#OX&&&++   &&+++.XO*#OX&&+++   &&+++.XO*#OX&+&++   &&+++.XO*#OX&++++   &&+++.XO*%$@X&+++&...&&+++o#*@X.+++     &&+++& o*#OX+++&&.X.. +++..O*#OX+++& .XX  +++..O*#OX+++&&..X. +++..O*#OX+++&&.XX. +++..O*#O. +++&&...&&+++..*%#O.  ++++++++++.X@**%#@.. ++   ++ ..O#*",
+"O. +++++   .X &&&&o*#oX+++++ .   +++..O*#o.+++ .XXX..+++& o*#oX+++ .XXX..+++& O*#o.+++  XXX..+++& o*#o.+++ ..XX..+++& o*@o.+++  XXX..+++& o*%$#OX..+++++++..XO#*@X.+++..+++  &&&&&o*#OX+++ .XOoX.+++.XO*#oX+++ .XOoX.+++.XO*#oX+++ .XooX.+++.XO*#oX+++ .XooX.+++.XO*$#OX&&+&&...&&+++Xo*%#@.. ++.....&&&&&o**%$@.. +++++++ ..O#*",
+"O. +++++  .X.  &&&X*#OX+++++&&&..+++.XO*@o.+++ .XooXX+++& o*@X.+++..XooXX+++& o*@o.+++ .XooXX+++& o*@o.+++ .XooXX+++& o*#o.+++ .XooXX+++& o**%#Oo..+++++++.XX@$*@X.+++..+++  &&&&&X*#oX+++ .oOOXX+++.X@*#oX+++ .oOOoX+++.X@*#oX+++ .oOOoX+++.X@*#oX+++ .oOOoX+++.X@*%#OX&&&&&...&&++&XO*%#@.. ++.....&&&&&o*%%#@.. +++++++  .o@*",
+"O. +++++  .XX &&&&X*@oX+++++&&+..+++.X@*@X.+++XoO##Oo  &&&X*#X.+++XoO##Oo  &&&X*@X.+++.oO##Oo  &+&X*#X.+++.oO##Oo  &&&X*@o.+++XoO##Oo  &&&X*%%$#oX.+++++++.XX#$*@X.+++..+++  &&&&&o*#oX+++..o@OoX+++.X@*#OX+++ .oOOo.+++.XO*#OX+++..o@OXX+++.XO*#OX+++ .oOOo.+++.XO*%$#OX..++   ++..XO#*%#@.. ++.X.X.&&&&&o*%%#@.. +++++++  .o@*",
+"O. +++&&...XX  &&&X*#OX+++&&+++..+++.X@*@X.+++.o@##@o  &&&X*@XX+++.o@#$@o. &&&X*@o.+++Xo@##@o  &&&X*@XX+++Xo@##@o  &&&X*@X.+++.o@##@o  &&&X***$#OX.&&+++&&.XO#%*@X.+++. +++.. &&+&X*#oX+++..o@OXX+++.X@*#oX+++..o@OoX+++.X@*#oX+++..o@@XX+++.X@*#oX+++..O@OoX+++.X@**%$@X..++& &++.XX@$*%#@.. ++..X..&&&+&X**%$@.. ++...&&+++Xo*",
+"O..+++&&..XXX  &&&o*#oX+++  +++ &+++.X@*@X.+++Xo@#$@o  &&&o*@X.+++Xo@##@o.& &&o*@X.+++.o@$#@o  &&&o*@X.+++Xo@$#@o  &&&X*@X.+++Xo@$#@o  &&&o*%*$#OXX&&+++&&.oO@$*@X.+++..+++..&& +&o*#oX+++..O@@XX+++.X@*#OX+++..O@@XX+++.X@*#OX+++..O@OXX+++.X@*#oX+++..O@OXX+++.X@**%%$#OX&&+++& XO#$%*%#@.. ++.....&&&&&o*%%#@.. ++... &+++.X*",
+"@o.+++ .XXooX&&&&&X*#oX+++ &+++  +++.X@*@X.+++.o@##@o  &&&X*@X.+++XX@##Oo  &&&X*@X.+++XoO##@o  &&&X*@X.+++.o@##@o  &&&o*@X.+++.o@##@o  &&&X**%$@.. ++&&&++ .X@$*@o.+++++&  ..+++&&X*#OX+++ .oOOoX+++.X@*#OX+++ .o@OoX+++.X@*#oX+++ .o@OoX+++.X@*#OX+++ .o@OoX+++.X@***%%#@o&&+++&&oO$%%*%#@.. +++&+&&+++ .o*%%#@.. ++.X...+++.o*",
+"@oX+++  XXXXX&&&&&o*#oX+++     +++++.X@*@X.+++..oOooX&+&&&o*#o.+++..oOooX&++&&o*#X.+++..oOooX&&+&&o*@o.+++..ooOXX&+&&&o*@X.+++..oOooX&++&&o*%$#O.. ++&&&++ ..O#*@o.+++++&  ..+++&&o*#oX+++..OOOo.+++.X@*#OX&++..oOoo.+++.X@*#OX+++..oOOXX+++.X@*#oX+++..oOOX.+++.X@****%$@oX.+++.XO#$%**%#O.. ++++++++++..@*%%#O.. ++...X.+++.o*",
+"#XX+++ ..XXX.&&&& O*#OX+++   & +++++.XO*#o.+++..XXXX.&++& O*@o.+++..XXXX.&+&& o*#oX+++..XXXX.++&& O*#oX+++..XXXX.+++& O*#o.+++..XXXX.+&+& O*%$#O.. ++&&&++  .o#*@o.++++&&  ..+++& O*$@X+++..XXXX.+++XX#*#@X&++..XXX..+++.o@*$@X+++ .XXXX.+++.X@*$@X&++ .XXXX.+++XX#****%$@OX.+++.XO@$%**$#O.  ++++++++++.X@*%$#O.. +&.....+++.X*",
+"@X.+++& .... +++.XO*#oX+++  &  +++++.X@*#OX&&&+&...  +++.XO*#OX&++&&...  +++.XO*#OX&&+&&... .+++.XO*#OX&&&+&.... +++.XO*#OX&&&+&... .+++.XO*%$OX+++& .X.  ++&o@*#oX+++++     +++.XO*$@o &&++.... +++Xo#*$@o &&++.....+++Xo#*$@o &&&&.... +++XO#*$@o &&+&.... +++Xo#****%$@o..+++..o@#%%*$@o. &++&&&&&..XoO#*%$@o. &++    &+++.o*",
+"Oo.+++&&...  +++XX@*#oX+++ &...+++++.X@*$@o&&+++  .  +++.X@*$@o&+++&  .  +++.X@*$@o&&&++ .   +++.X@*$@o&&++& .   +++.X@*$@o&&+++ .   +++.X@*%$OX+++ .XXX. +++O@*#OX+++++    &+++.X@*$#O &&&+..   +++XO#*$#O &&+&...  +++XO#*$#O &&++...  +++XO#*$#O.&&++..   +++XO#**%%$@OX. +++ .XO@$%*#OX  &++&&&& XXo@#$*%#@X  &++& &&&+++.X*",
+"O &++++++++++&  XO#*#XX+++++... &+++.X@*$#OX..&&+++++  .oO#*$#OX..&++++++&  oO#*%#OX..&++++++  .oO#*$#OX..&++++++  .oO#*$#OX..&++++++&  oO#*%$#OX..XoOOOoX..XO#*#OX&&&+++++++&  oO#*%#@X..+++++++&& X@#*%#@X..+++++++&& X@#*%#@XX.+++++++&& X@#*%#@X..+++++++&& X@#**%%#o..+++++++.XX#%*#oX+++++&&&XXoO##%%*%#o.+++++&&&+++++XO*",
+"O &++++++++++  .O@$*#XX+++++...  +++Xo@*%$#OX.&&+++++ ..O@$*%##oX.&&+++++  .O@$*%$#OX.&&+++++ ..O@$*%$#OX.&&+++++ ..O@$*%$#OX.&&+++++  .O@$**%#@oXXO@###@OXXX@$*$@o&&&+++++++  .O@$*%%#OX.+++++++&  o@$*%%#OX.+++++++&  O@$*%%#oX.+++++++&& o@$*%$#OX.+++++++&& O@$**%%#o..+++++++..o#%*#o.+++++&& XO@#$%%**$#oX+++++  &+++++XO*",
+"@.&++++++++++ ..@#%*#OX+++++XXX. +++XO#*%%#@oX&&+++++..X@$%**%#@oX&&+++++...@#%*%%#@oX&&+++++..X@$%*%%#@oX &+++++..X@$%*%%#@oX&&+++++...@#%*%*$#OOO#$$%$$#OOO$$*$@o &&+++++++...@#%*%%$@oX+++++++& .@#%*%%$OoX+++++++& .O$%*%%$OoX+++++++  .@#%**%$OoX+++++++  .O$%**%%#oX.+++++++.Xo#%*#OX+++++  .O#$%%****%#oX+++++   +++++o@*",
+"@OoXXX.XX.XXXoo@#%%*$#OoXXXXoOOOoXXoO@$**%%$#@oXXXXXXoO##%%*%%%##@oXXXXXXoO@#%%**%%$#OOXXXXXXoO##%%**%%$#@oXXXXXXo@@$$%**%%$#@oXXXXXXoO@#%%***%%$$$%%%*%%%$$$%%*%#@....X.XXXXoO@#$%**%$$@OoXXXXXXoo@#$%**%%$#OoXXXXXXXOO#$%**%%$@OoXX.XXXoo@#$%**%%$#OoXXXXXXXOO#$%***%$#@oXXXXXXXoO#$%*$#OoXXXXXoO#$%%*****%$#OoXXXXXXXXXXXo@#*",
+"$#OOoOoooOooO@@$$%%*%$@@OOO@@##@@@@@#$%***%%$##OOoOO@##$%%****%%$#@@OooOO@##%%%***%%$#@@OoOO@##$%%****%%$#@@OoOO@@#$%%****%%$##OOooOO@##$%%****%%%%%%***%%%%%%%*%#@X..ooOooOO@#$$%****%%$#OOooooO@@#$%****%$##OOooooO@@#$%%**%%%$#@OOOooO@@#$%%***%$##OOooooO@@#$%%****%$#@@ooooO@@#$%%*%$@@OoOO@##$%%*******%$@@OoOOO@OOOOO@#$*",
+"%$$#####@####$$%%***%%$$####$$%%$$#$$%%****%%%$$#####$$%%******%%%$$#####$$%%******%%%$######$$%%******%%%$######$%%%******%%%$$#####$%%%*******%*%*******%%****%%$##@@@#####$$%*******%%$$#######$%%%******%%$######$$%%%*****%%$$#######$%%%******%%$######$$%%%****%%%%$$#####$$%%%**%%$$#####$%%%********%%$$######$####$%%*",
+"*%%%%$%%$%$%%%%%******%%%%%%*%%%%%%%%*******%%%%%%%%%%%*********%%%%%%%%%%%*%********%%%%%%%%%%*********%*%%%%%%%%%*********%%%%%%%%%%%*************************%%%$$$$$$%%%%%%%*********%%%%$%%%%%*********%%%%%%%%%%%%********%%%%$%$%%%%*********%%%%%%%%$%%%********%%%%%$%$%%%%******%%%%%%%%%************%%%%%%%%%%%%%%%**",
+"*****%%%%%********************%%*%**************%%%%******************************************************%%%%%$%***************************************************%%%%%%********************%%%%%************%%%%%*********************************%%%%%********************%%%%%%************%%%%****************************",
+"****%%%$$%%%****************%%%%$$%%***********%%%$$%%***********%**%*%**%*******************************%%$###$$%%*************************************************%%%$$%%%*****************%%%$$$%%**********%%%$$%%******************************%%%$$%%%*****************%%%$$%%%%********%%%%$$%%**************************",
+"**%%%$####$%****************%$####$%%********%%$####$$***********%%%$%$$%%%***************%*************%%$#@OO@#$%***********************************************%*$$####$%*****************%$####$$%********%%#####$%***********%****%**%*******%%%$####$%*****************%$####$%%********%$####$$%***********%****%*%******",
+"***%@@O..@#$%%***********%%%$@OO..#$%%******%%$#@X.X@#%%*******%%%#@@@##@#$%%********%%%%%%%%%***********$#XX  .O#$%***********************************************%#@O..@#$%%*************%%$#@..O@#%%******%%#@X.X@#$%*********%%%%%%%%%%********%@@O..@#$%%*************%%$#@..o@#%%*****%%$#@X.X@$%%*********%%%%%%%%%%*****",
+"*%%%#Oo..oO#$%***********%%##ooX..##%*******%$#Oo...O#$%******%%$#@ooooooO@$%%*****%%%$$$$$$$$%%*******%%$@X.&& O@$%%********************************************%%%@Oo..oO#$%*************%$#@o..oO@%%*****%%$@O...o@#$*******%%%$$$$%$$$%$%%***%%%#Oo..o@@$%*************%$#@o..oO@%%*****%$#Oo...O@$%*******%%%$$$$$$$%%%****",
+"**%%@OX  XoO#$%**********%$#OXX...@#%%*****%%#OoX  .XO#$%****%%$@OoX.XXXXoO#$%****%%$##@@######%%******%%#O..&&&o@#$*********%******%****************%***%********%%@OX  XoO@$%***********%$#@oX  XO@%%*****%$#OX.  Xo@#%%****%%$##@#######$%%%***%%@OX  XoO#$%***********%$#@oX  XO@%%****%%#OoX   oO#%%*****%%$##@@######%%***",
+"**%%#@o && .O#%%********%%#OX&&&.X@#%%*****%$@O&++++.X@$%****%$#XX.++++++&XO#%%***%%@oo..OOO..#$%******%%#O.&. ...#%%*****%%%%%%%%%%%%%%%********%%%%%$%%%%%******%%$@o && .@#$%*********%%#@.. &&o@#%%****%%#@..+++&&O@$%****%%@Oo..O@O..OO#%%***%%#@o &  .@#%%*********%%#@...&&o@$%%****%$@O&++++.X@$%*****%%@Oo..OOO..#$%***",
+"**%%$@o &&  o@$%*******%%#@XX+++.X@$%****%%$#OX&++++..O#%%***%$@X. ++++++&XO@%***%%#OoX..oXo .@#%%*****%$@o &  ..X@$%%****%%$$#$$$$$$#$$%%%****%%%$#$#$##$$$%%****%%#@o &&& o@#$%*******%%#@o.  &&o@#%*****%$@O. +++&&o@#$%**%%$OoX..ooo..oo@$%***%%$@o&&&& O#%%********%%#@o.  & O@$%****%%#@X+++++..@$%%***%%$OoX..oXo .@#%%**",
+"**%$#Oo..&&&oO#%%*****%%$@O..&  XX@$%*****%$Oo.   ..& O#$%**%%#O.    &&& .X@#%%**%$#oX.. .....O@$%****%$#@X. &&&Xo@$%***%%$@OOOO@@@OOOOO#$%*%*%$$#@OooOOOO@@$$****%%#@o..&&&.o@#$%****%%$#@oX&&&..X@#$%**%%%#@X &     .oO$%**%%#OoX  .... XXO#%****%$@o..&& o@$%*******%%$@oX&&&XX@#%%****%$OoX &    .@#%%***%%#OXX  .....@#%%**",
+"*%%$@OX..&&&Xo@#%%***%%##OX. && .oO#%%***%$#oX.    .& o@$%***$#O. &  &&& .XO#%***%$#oX.   .. .o@$%***%%$@oX &&&&XXO#%%**%$@OoXXXoooXXXXXO@#*%%$#@OoXXX.XXXXo@#%**%%$@OX..&&&.XoO#$%**%%$#@oX.&&&..Xo@$%***%$@oX&&   & .Xo#$**%$@oX. ....  .Xo@$***%%#@o..&& X@#%******%%$#oX.&&&Xo@$%****%%$OX. &  . .@#%****%%#OX.  .....O#%***",
+"*%$#OXX..&&&.XO#$%***%$#OoX   & .Xo@$%***%#@X..&&.  &&XO#%%*%%@O. &  &&&  oO#$**%%#@X..&&   & o@#%%**%$#OX. &&&&.Xo@$%%*$#OX....XX.X...XXO@*%#@OoX........XXo@$**%#@OXX..&&&..XXO@$**%#@OXX..&&&..XXO@$*%%#@OXX&&   & ..XO#*%%#@X.. &...& ..XO#***%$#OX..&&&XO#%%*****%$#Oo..&&&Xo@$%****%%#oX. &  . .@#%****%%#oX. & . ..@$%%**",
+"%%#@. &++++++&XO#%%*%%$O.&&++++++&oO#$%*%%#O.&&+++++++Xo#$%*%%@o &&+++++++Xo#$%*%%#O &&+++++++Xo#$%*%%#@  &++++++&XO#%%*$OX+++++++++++++  O*$#O   ++++++++++Xo#*%$#O. &+++++++&  O#*%$#O. &+++++++&  O#**$#O &&+++++++&& O@*%$@o. &+++++++&& O@**%%$oX.+++++XO#%******%$oX.+++++Xo#%*****%%#o..+++++Xo@$%****%%#o..+++++Xo@$%***",
+"%%#O &&+++++++Xo@#%*%%#O &&+++++++Xo@$%*%%#o &&+++++++.o@#%*%$#o&&&+++++++Xo@#%*%$#O &&+++++++XX@#%*%%#O &&++++++&Xo@#%*#OX+++++++++++++& X*$@o &&++++++++++.o@*%$@o &&+++++++&& oO*%#@o&&&+++++++&& X@*%$@o &&+++++++&& X@*%#@o&&&+++++++&& X@***%$oX.+++++Xo#$%*****%$OX.+++++Xo#$%****%%#oX.+++++.o@$%****%%#oX.+++++.o@$%***",
+"%$#o. &   . ++..X#%*%$@o. &   . ++..X#%*%$@O  &     ++..X#%*%%#O.     . ++ .X#%**$@o. &     ++ .X#%*%$#o. &     ++..X#%*#@X  && +++     ++X*#XX+++&&...&&+++.X@*%#OX+++&&...&&+++Xo*%#XX+++&&...&&+++Xo*%#OX+++&&...&&+++.o*%#XX+++&&...&&+++.o***%%#@XX.+++Xo#%******%%#@XX.+++Xo#$******%$#OXX.+++Xo@$%*****%$#Oo..+++Xo@$%***",
+"%$@o  &    .++ .X@$**$#o  &    .++ .X@$*%$@O. &  . .++ .X@$*%$@O..&    .++ .X@$*%$#o  &  . .++ .X@$*%$@O  &  .. ++ .X@$*#OX  &  +++  .. ++X*@o.+++ .XXX  +++.o@*%@OX+++&&. .&&+++.X*$@o.+++&&. .&&+++.X*%@OX+++&&. .&&+++.o*$@o.+++&&. .&&+++.o***%%$@oX.+++Xo@%%*****%%$#oX.+++Xo@%%*****%%$@oX.+++Xo#%%*****%%#@OX.+++Xo#$****",
+"%$@o  &  .  ++ ..@#*%$@o  &  .  ++ ..@#*%$@o  &  .  ++ ..@#*%$@o.    .  ++ ..@#*%$@o  &  .  ++ ..@#*%$@o  &     ++ ..@#*#OX && &+++   . ++X*@X.+++.XXOooX  .XO#*$@XX+++&&...&&+++.X*$@X.+++&&...&&+++.o*$@XX+++&&...&&+++.X*$@X.+++&&...&&+++.X****%%$Oo.+++Xo#$*******%$#@o.+++Xo#$*******%%#Oo.+++Xo@$*******%%#Oo.+++Xo@%%***",
+"%$@o &&+++++++ ..@#*%$@X &&+++++++ ..@#*%$Oo&&&+++++++ ..@#*%$@o &&+++++++ ..@#*%#@o &&+++++++ ..@#*%$@X &&+++++++ ..@#*@X.+++++++++++++++X*@X.+++.XoOOoX. .o@#*$#X.+++++++++++++.o*$@X.+++++++++++++.o*$#X.+++++++++++++XX*$@X.+++++++++++++.o*****%$@oX+++XX#$%*******%$@oX+++Xo@$%******%%$@oX+++Xo@%%*******%$@oX+++Xo@%%***",
+"$#OX&&&+++++++ ..O#*$#OX&&&+++++++ ..O#*%#OX&&&+++++++ ..O#*%#OX&&&+++++++ ..O#*%#OX&&&+++++++ ..O#*$#OX&&&+++++++ ..O#*OX.+++++++++++++++X*#X.+++..ooOoo.X.XO#*$@X.+++++++++++++.o*$@X.+++++++++++++.X*$@X.+++++++++++++.X*$@o.+++++++++++++.o****%%$Oo.+++Xo@$%******%%$Oo.+++.o@$%******%%$Oo.+++Xo@$%%*****%%#@o.+++Xo@$%***",
+"%@X.+++ ....++ ..@#*%@o.+++ ....++ ..O#*$#X.+++ ....++ ..O#*$#o.+++ ....++ ..O#*$@X.+++ ....++ ..O#*%@o.+++ ....++ ..@#*o&&&&&..+++&&&&&&&X*#oX+++  .XX.X...XX@*$@X.+++++&&&&&&&&.o*$@X.+++++&&&&&&&&.o*$@X.+++++&&&&&&&&XX*$@X.+++++&&&&&&&&.o***%%$#Oo.+++.X@#$%*****%$#Oo.+++XX@#$%*****%$#Oo.+++.XO#%%*****%$#OXX+++.XO#$%**",
+"$#o.+++.  ..++ ..O@*$@o.+++.  ..++ ..O#*$@o.+++.  ..++ ..o#*$#X.+++.  ..++ ..O#*$#o.+++.  ..++ ..o#*$#X.+++.  ..++ ..o@*o&&&&+..+++&&&&&&&X*#OX&&&+++&&&&+++&.@*$@o.+++++&&&&&&&&.X*$@X.+++++&&&&&&&&.X*$@o.+++++&&&&&&&&.o*$@X.+++++&&&&&&&&.o***%%#@oX.+++.Xo@#$%**%%%#@oX.+++.Xo@#$%**%%%#@oX.+++.Xo@#$%**%%%#@oX.+++.Xo@#$%*",
+"$@X.+++ ....++  .o@*$@X.+++ ....++  .o@*%@X.+++ ....++  .o@*$@X.+++ ....++  .o@*$@X.+++ ....++  .o@*$@X.+++ ....++  .o@*o&&&&&..+++&&&&&&&X*$@O&&&++++++++++  @*$@o.+++++&&&&&&&&XX*$#o.+++++&&&&&&&&Xo*$#o.+++++&&&&&&&&.o*$#o.+++++&&&&&&&&.o*%%%#@OXX.+++..Xo@#$**%%#@OXX.+++..Xo@#$**%%#@OXX.+++.XXo@#%**%%#@OX..+++.XXo@#%*",
+"$@o.++++++++++++&XO*%@o.++++++++++++&XO*$#o.++++++++++++&XO*$#o.++++++++++++&XO*$@o.++++++++++++&XO*$#o.++++++++++++&XO*o&&+++++++++++++++X*%#@oX. &+++&&&  XO@*%#OX+++++++++++++Xo*$#OX+++++++&+++++.o*$#OX&++++++++++++Xo*%#OX+++++++++++++.o**%$#.  &&+++&&  .@$*%%$#.  &&+++&&  .@$*%%$#.  &&++++&  .@$*%%$#.. &&++++&  .@$*",
+"%#o.+++++++++++++XO*%#o.+++++++++++++XO*$#o.++++++++++++&XO*$#o.+++++++++++++XO*%#o.++++++++++++&XO*$#o.+++++++++++++XO*O &+++++++++++++++o**%$#@X.&+++&& ..O#$*%$@o&++++++++++++Xo*%$@o&++++++++++++Xo*%$#o &&++++++++++Xo*%$@o&++++++++++++Xo*%%#@. &&+++++&& .@#**%#@. &&++++++& .@#**%#@. &&++++++& .@#**%#@. &&+++++&& .@#*",
+"$#@o  &&&&&&&&&& o@*$#@o  &&&&&&  && o@*%#@o  &&&&&&  && o@*%#@o  &&&&&&  && o@*$#@o  &&&&&&  && o@*%#@o  &&&&&&  && o@*OX.&&&&& ..&&&&&.oO***%%#O..+++& XO@$%%*%$#OoX. &&&&&&...o@*%%#OoX.&&&&&&&..Xo@*%$#@oX. &&&&&&..XO@*%$#@oX. &&&&&&..XO@**%$@.. &&&&&&&  .O#*%%$@.. &&&&&&&  .O#*%%$@.. &&&&&&&  .O#*%%$@...&&&&&&&  .O#*",
+"%$@O.  &&&&&  && o@*%$@O.. &&&&&  &  o@*%$@O.  &&&&&  &  O@*%$@O.  &&&&&  &  o@*%$@O.  &&&&&  &  o@*%$@O.  &&&&&  &  O@*#oX &&& ...&&&  oO@***%%#OX.+++& o@$%%***%$#@oX. &&&&&.Xo@#*%%$#OoX &&&&&&.XX@#***$#@Oo. &&&& .XX@#**%$#@oX.  &&&&.XXO#**%$@X..&&&&&&& ..@$**%$@X..&&&&&&& ..@$**%$@X..&&&&&&& ..@#**%$@X..&&&&&&& ..@#*",
+"%%$OX..      . ..@#**$$@...     .. ..@#*%$$OX..     .. ..@#*%$$OX..     .. ..@#*%%#@X..     .. ..@#*%$$OX..     .. ..@#*#@o..   XXX.   .O@$***%$#O &+++..O#$%*****%$$@@..    .XoO#$***%$#@O.     .XoO#%***%%$@O..    .oo@#%***%$$@@..    .XoO#%*%%$#oX. &     ..X#$*%%$#oX. &     ..X#$*%%$#oX. &     ..X#$*%%$#oX. &     ..X#$*",
+"*%$#@@OoooooooOO@#$**%%##OOooooOoOOO@#$**%%#@OOooooOoOOO@#$**%%#@OOooooOoOOO@#$**%%#@OOooooOoOO@@#$**%%#@OOooooOOOOO@#$*%#@@OOOOOO@OOOO@#$$****%#O &+++.o@$%*******%%$#@@OoOoO@##%%****%%##@OOoooO@@$$%***%%%$#@OOooOO@#$%%****%%$#@OOOoOOO#$$%***%$#@OOoooooOO@@#%***%$#@OOoooooOO@@#%***%$#@OOooooooO@@$$***%$#@OOooooooO@@$%*",
+"**%%$##@#@@@#@##$%%***%$$$##@#@#@###$%%***%%$$##@#@#@###$$%***%%$$##@#@#@###$%%**%%%$$##@#@#@###$%%***%%$$#@#@#@@###$%%*%%$#@###$#######$%****%%$#OoXXoO@#%%********%%$$##@####$%%******%%$###@###$$%%******%%%$###@###$%%******%%$$###@##$$%%****%%%###@@@@@@##$%%***%%%###@@@#@@##$%%***%%%###@@@@@###$%%***%%%###@@@#@###$%%*",
+"**%%%%%$$%$$$$%$%%*****%%%$%$$$%$%$%%%****%%%%$%$$$%$$%$%%****%%%%$%$$$%$%$%%%****%%%%$%$$$%$$$%$%****%%%%%$$$$%$$%$%%%**%%%%$$$%%%$$$%%%%*****%%##@OO@@$$%***********%%$%$$$%%%*%*******%%%$$$$$%%%%********%%%%$$$%%%%**********%%$$$$$%$%*%*****%%%%$%$$%$$%%%******%%%%$%$$$$$%%%%*****%%%$%$$$$$$%%%%*****%%%%$$$$$$$%$%%**",
+"**%%%%$$%$%%$%$%*%*********%*%*%*%************%*%**********************%**%************%%%%$%%*************%*%%%%%************************************************************************%***********************%%*%***************%%%*%**************************************%*%******%%%$%%%%*******************************",
+"*%%$##########$$%%********%%%$%$%%%%*********%%%%%%%******************%%$%%%%*********%%$##$$%%************%%$%$%$%%%%*****************************************************************%%%%%%%%*****************%%%$$$%%**********%%$%$$%%***********************************%%%%$%%%***%%$####$%%******************************",
+"%$#@@OooXooOoo@@#$%****%%%$###@###$%%%*****%%$$##$$%%***************%%$####$%********%$#@Ooo@#$%*********%%$#@#@###$%%%****************************************************************%$####$%***************%%%###@@$$*********%%$#@##$$%********************************%*%$###$$%***%#@OooO@#$%*****************************",
+"%#@oXXX..XXX.XXO@#%*****%##@OOoOOO##%%****%%$#@OO@#$%%*************%%$@@OO@#$%%*****%$#@oXXXo@#$%*******%$$@OOooOO@@#$%******%*%**%*%%*************%*%%******************************%%$#@@O@#$%%**************$$@OOoO@$%%******%%#@OooO@#%%*********%*%*%**%*%************%$$@@OO@#$%%*$@OX.XXo@#%%***************%*%*%*%*%****",
+"$@..+++++&+&++  .@$**%%%$@O  . . .oO#%%****%@Oo&&Xo@$$***********%*$#@oX++oO#%%*****%$@X.+++.X@$%%******%$@X.&&&...XX#%****%*%%$%%%%%$%%%**********%%%$%%%***************************%%@OX&&Xo@#%%**********%%%#@...& O#%%****%%%#@X.&&&o@#%%*****%*%%%$%%$%$%%%%*******%*%%$OoX++oO#%%*#OX++++&o@$%%***********%%%%%$%%%$%%%***",
+"#@. +++++&+&++& .@#**%%$@Oo&&     XO@%%***%%@oX&&.Xo@$%%*********%%$@oX.++XO@%****%%$#o. +++ .o#$%****%%$#O..&&&....X#$****%$$#########$%%%******%%$#@##$%%**********%*%%%%%%%%%****%%$@oX&&.Xo@#%%********%%%$@O.. &&O@$%****%%$@O..++&XO@$%%****%$$#########$$%*******%%$$@oX.++XoO$%*#oX++++&XO#$%**********%%$##########$$%*",
+"#O. ++++++++++&&.O#**%#@OXX&&&&&& Xo@$%***%%@oX&+..XO@$%*********%$@OX..++Xo@%%***%%#@o. +++ .o@#%%***%%#@o..++& . ..@$**%%%##OOOOOOO@@@$%%******%$#OOOO@$$*********%%%$$#$#$#$$$%%*%$#OX.&+..XO@#$$%****%%$$#@Oo   &&o@#%%**%$$@OX. +++.XO@$%%*%%$##@OOO@OOOO@#$$**%%%%$$#@OX..++.oO#%*#oX+++++Xo@#$$%%****%%%$#@OOOO@OOOOO##$*",
+"#O. &&&+++++++..XO#*%$@O  &&&++++&XO#%%***%%#OX..++&XO#$%*******%$#OX&++ .X@#$****%$@XX&+. .++Xo@%%****$@oX&++++++.Xo#$**%%$oXX &XoX&&XXo$%****%%$#XX&& o#$%%******%%$#@@@@O@@@@#$%*$#@OXX..+&&XOO@$$%%*%%$#@@oX.&++..XO@$%*%%#@oX.++&& &&oO#$%*%$#OX..& XXX++oO@$%*%%##@@Ooo&&+ ..Xo@#*$@o.  ++..XXoO@#$%%*%$$@@oo++XXX& ..X@#*",
+"#@.  &&+++++++..oO#*$#OX &&+++++&&XO#$%**%%$#Oo. +++XX@@$%*****%$#OoX+++ .XO#%%***%$OX.&+. .++.X@$%**%%$OX.&++++++.XX#%**%%#X..&&.X.&&.Xo#%*****%$@X.&&&o@#%*****%%$#@OooXXoXXooO@$*#@oXX.. +++.Xoo@#$%*$#@OoXX..&++..XoO@$*$#@oX..++ &&&&.oO@$*%#@o...&&X..++XXO#$*%#@OooXXX+++. .XXO@*$#O.  ++&&&&&.Xo#$%*%#@OXXX++.XX&&...oO*",
+"$@X.+++    .++&& o@*$@. &&+  &&&&&Xo@$%***%$#oX&&+++&&o@#$%***%$#Oo&&&++&&XO@$%**%$#OX.&&+++&&XoO#%***%$@oX&&+++&&.XO#$*%%$#oX.&&+&&&&XXO#%****%$#O. +++XO#%%****%$#@O &&&&&&&&&.X#*@X.&&&.....&&  .@#%*$@X.&&&..X..&&& .@#*$#..&&+.....&&& .@#*$@..&&&...X.&&& .O#*$#..&&&  ...  &&&..*%#@.. ++&&&&&..Xo#$*$#..&&&& .X.&&&&&..*",
+"$@o.&++  .  ++&&&o@*#@..+++  &&&&&.o@#%*%%$#OXX&&+++&&XoO#$*%%%#@oX&&+++&&XXO#$**%$@XX.&&+++&&.XO@$**%$@OX.&&+++&&.Xo@$**%#@X..&&+++&&.XO@$****%$@O. +++XO@%%***%%#@oX&&&&&&&&&& .@*@. &&&..XX.&+&& o#$*#@..&&&..X.X&+&& O@*#O..&&+.....&+&& o#*#@..&&&..X..&+&& O@*#@..&&+  .X. &&+&..*%#@.. ++&&&+& ..o@#*#@..&&+&&X.X&&++& .*",
+"$#o.+++   . ++&&&XO*#O. +++  &&&&&.Xo@$**%#OoX.&&+++&&.Xo@#*%%#OoX.&&+++&&.Xo@#*%$#OX..&&+++&&.XoO#*%%#OXX.&&+++&&.XoO#*%$#OX..&&+++&&.XXO#**%%$#@o  +++Xo@#$%%*%#OoX.&&+++&&+&&..@*O. ++&..XX.&&&& o@$*#O. &+&..XX.&+&& o@*#O. +++.....&+&& o@*#O. ++&..X..&+&&&o@*#O. &+&&..X. &++& .*%#@.. ++++++++++.X@*#O. ++&& .X.&&+&& .*",
+"$#OX &&++++++++++.o*#O..+++++&&&++&& O#*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@*%$@o&++++&&&++++&o@**%$#OoX... .XXoO@$%*$@o&&+++&&&+++++XX@*O..+++..XXX&++++XO#*#O..+++..XX.&++++XO*#O..+++ .XX.&&+++XO*#O..+++ .XXX&++++XO*$@X.+++&&... &+++.X*%#@.. +++++&++++..O*$@. +++& .X.&&+++..*",
+"%#OX&&&++++++++++.o*#@. +++++&&&++&& o@*%#@X+++++&&&++++&XO*%#@X+++++&&&+++++XO*%#OX+++++&&&++++&XO*%#@X+++++&&&++++&XO*%#OX+++++&&&++++&XO*%$@@XX... ...XXXo@$*#@X+++++&&&+++++Xo@*@. +++ .XXX&&+++XO#*#@. +++ .XXX&&+++XO*#@. +++ .XXX&&+++XO*#@. +++ .XXX&++++XO*$@OX&&&+&...++&&&Xo*%#@.. ++.....+++&&o*$@X.+++&&... &+++.X*",
+"%@OX&&&++++++++++.X*#@..+++++&&&++&&&o@*%@OX+++++&&&+++++XO*%@OX+++++&&&+++++XO*%@OX+++++&&&+++++XO*%@OX+++++&&&+++++XO*%#OX+++++&&&+++++XO*$#OoX..... ....XXO#*@OX+++++&&&+++++.o@*@..+++ .XXX&&+++XO#*$@..+++ .XXX&&+++XO*$@..+++ .XXX&&+++XO*#@..+++ .XXX&++++XO*%#@o &&++...++&& o@*%#@.. ++.XX..&++&&o*$#OX&&&+&...++&&&XO*",
+"$#X.+++&&.... +++.X*$@oX+++&&...  +++XO*$#X.+++ ..X...+++.X*$@X.+++...X...+++.X*$@X.+++...X...+++.X*$@X.+++ ..X.. +++.X*$@X.+++ .X....+++.X*$@. +++++++++++++oO*@X.+++. &&&+++++.X@*@oX+++ .XXX  +++XO#*$@oX+++..XoX. +++XO*$@oX+++..XoX. +++XO*$@o.+++ .XXX. +++XO*%$#OX..++.  ++..XO#*%#@.. ++..XX.& &&&X*%#@o &&++...++&& o@*",
+"$@X.+++  .X...+++.X*%@o.+++&&.X.. ++&XO*$@X.+++..XXX..+++.X*$#X.+++..XXX..+++.X*$@X.+++..XXX..+++.X*$@X.+++..XXX..+++.X*$@X.+++..XXX..+++.X*$@. +++++++++++++o@*#X.+++ .&&&+++++.o@*@o.+++ .XoX. +++Xo#*$#oX+++ .XoX. +++Xo*$#o.&++..XoX. +++Xo*$#oX+++ .ooX. +++Xo**%%#OX.++   ++.Xo#%*%#@.. +&...X.  &&&o*%$#OX..++.  ++..XO#*",
+"$#X.+++..XXXX.+++.X*$#oX+++ .XXX  +++XO*$#X.+++.XXXXX.+++.X*$@X.+++.XXoXX.+++.X*$@X.+++.XXXXX.+++.X*$#X.+++.XXXXX.+++.X*$#X.+++.XXoXX.+++.X*%#OoXX.......X.XoO#*@X.+++& +++..+++.X@*#OX+++ .XXX. +++XO#*%@oX+++ .XoX. +++XO*$#oX+++..XoX. +++Xo*$#oX+++..XoX. +++XO**%%$@OX&+++++&Xo#$%*%#@.. ++   ..+++ .o**%%#OX.++   ++.XO#%*",
+"$@X.+++.XXXX..+++.X*%#oX+++  XXX. +++Xo*$@X.+++.XXoXX.+++.o*$@X.+++.XXXXX.+++.X*$@X.+++.XXoXX.+++.X*$@X.+++.XXoXX.+++.X*$@X.+++.XXoXX.+++.X*%$#@ooXX....XXXO@#$*@X.+++  +++..+++.X@*#OX+++ .XXX  +++Xo@*%#OX+++ .XXX..+++Xo*%#OX+++ .XXX..+++Xo*%#OX+++ .XXX..+++Xo****%#OX. +++ .o@$%**%#O.. +++++++++&.X@***%$@OX&+++++&Xo@$%*",
+"$#X.+++...XX..+++.X*$@oX+++  XXX  +++Xo*$@X.+++..XXX..+++.X*$@o.+++..XXX..+++.X*$@o.+++..XXX..+++.X*$#X.+++..XXX..+++.o*$#X.+++..XXX..+++.X*%%$##OXX....Xo@@#$%*#X.+++& +++..+++.X#*#OX+++  X.X  +++Xo#*$#OX+++ ..X.. +++XO*%#OX+++...XX. +++Xo*$#OX+++...XX. +++Xo***%$#oX. +++.XO#%***%#@.  ++++++++&&Xo#***%%#@X. +++ .o@$%**",
+"$#o.+++&&... &+++XX*$@X.+++ ..X.. +++.o*$#oX+++&&...&&+++Xo*%@o.+++&&...&&+++Xo*$#o.+++&&...&&+++XO*$#o.+++&&...&&+++Xo*$#o.+++&&..X&&+++XO**%%%$@O. +++XO@$%%**@XX+++++ . &++++XO#*#OX&++&&...&&+++.o@*%#OX&++&&...&&+++.o*%#@X+++&&...&&+++.o*%#OX&++&&...&&+++.o**%$#@oX&&+++.o@$%***%#O.. +++++++&&&XO$****%#Oo  +++..O#$%**",
+"$#oX+++&&...&&+++Xo*#Oo.+++ ..X.  +++.X*%#o.+++&&...&&+++XO*$#oX+++&&...&&+++XO*$#oX+++&&...&&+++XO*$#oX+++&&...&&+++XO*$#oX+++&&...&&+++XO****%$#O. +++XO#%%***#X.+++++ ..&&+++XO#*$@o&++&&...&&+++.XO*%$@o&++&&...&&+++.X*%$@o&++&&...&&+++XX*%$@o&++&&...&&++&.X**%$@oX.&&+++Xo@$%***$#O.  ++.....XXO@#$**%%#OoX&&+++.o@$%%**",
+"%#@X. &+++++++&  X@*#o &+++++...+++++& *%#@o  &+++++++&  o@*%#@X.&&+++++++&  o@*%#Oo  &+++++++&  o@*%#@o  &+++++++&  o@*%#@X. &+++++++& .o@*****%#@..&& o@$%%***@oX++++++++++& .o@#*%#OX..++++++++++& O**$#OX..++++++++++& *%%#OX..++++++++++& **%#OX..++++++++++& *%$#O &&+++++Xo#%****$@o.  ++...XXoO##%%**%$@oX.&&+++Xo@$%***",
+"%$#o.  +++++++  .o#*#O&&+++++...+++++& *%$@O.  +++++++  .O#*%$@O.  +++++++  .O#*%%@O.  +++++++  .O@*%$@o.  +++++++  .O@*%$#o.  +++++++  .O@****%%$@o.   O@$%****@oX++++++++++  .O#$*%$@o..++++++++++& O**%$@XX.++++++++++& **%$@oX.++++++++++& *%%$@oX.++++++++++& *%$@o&&++++++XO#$****#oX&++++&&&XO@#$%%**%$#O &&+++++Xo#%****",
+"%%#@.. +++++++ ..@$*#O &+++++...+++++& **%#@.. +++++++ ..@#**%$@.. +++++++ ..@#*%%#@.. +++++++ ..@$**%$@.. +++++++ ..@$*%%#@.. +++++++ ..@$*****%%#oX...@#%%****#oX++++++++++ ..@$%*%$#Oo.++++++++++& O**%%#OX.++++++++++& **%%$OoX++++++++++& **%%#OoX++++++++++& **$@o&&++++++XO#%****#oX+++++&& o@$%%*****$@o&&++++++XO#%%***",
+"*%%#@OoXXX.XXXoO@#$*$@OXXXXXXXoXXXXXXoO*%%%#@OoXXX.XXXoO@#%**%$#@OoXXX.XXXoO@#%**%%#@OoXXX.XXXoO@#$*%%$#@OoXXX.XXXoO@#$**%%#@OoXXX.XXXoO@#$******%$$@@@@#$%*****@..&&&..X.XXXoO@#$%**%$#@OXXXX.XX.XXoO@**%%%#@OXXXX.XX.XXoO***%%#@OXXXX.XX.XXoO***%%#@OXXXX.XXXXXoO*%%@O &&&&&& o@$%****$@o&&&&&&  O#%%*****%%#o &&&&&& o@$%****",
+"**%%##@OooOooO@#$$%*%#@@ooooO@O@OoooO@@***%%##OOooOooO@#$$%***%%##@OooOooO@##%%***%%##OOooOooO@#$$%***%%##@OooOooO@#$$%***%%##OOoOoooO@@$%%*******%$$##$%%%*****#X. &&XXooooO@@$$%****%%##@OooOooOoO@@$***%%%##@OooOooOoO@@***%%%##OOooOooOoO@@****%%#@@Ooooooooo@#*%%#O   &   .@#$%****$#O  & & ..@#%******%$#@   &   .@#%%****",
+"***%%$$#######$$%%**%%$$######$######$$****%%$$$#######$%%*****%%$$#######$$%%****%%%$$$######$$%%*****%%$$#######$$%%***%*%%$$#######$$%%%*****%**%%%%%%%******##OooOO@@@###$%%%******%%$####@#@###$$%*****%%$####@#@###$$*****%%$$###@#@###$$*****%%$####@#@####$**%$#@oooooOO#$%*****%$#OOooooOO#$%%******%$#OOooooOO#$%*****",
+"***%*%%%%$%$%%%%*%***%%%%$%%%%%%%%$%$%%*****%%%%%$%$%%%%*%*****%*%%%%$%$%%%%%********%%%%$$%%%%%%*******%%%%%$%$%%%%*******%*%%%$$%$%%%%%***********%%%*********%$##@###$$%%%%%%********%%%%$%$%$$$%%%%******%%%%$%$%$$$%%%*******%%%$%$%$$$%%%********%%%%$%$%$%%%***%$##@@@@##$%%*****%$$#@@@@@##$%%********%$#@@@@@##$%%*****",
+"*********************%%%%%***************************************************************************%%%$$####$###$$%%***************%*********%%%%%%%%$%%%************%%%$%%***********************************************************************************************************%$$#$$$%%%******************************",
+"********************%%%$$$%%%**************************************%*%*%**%**************************%$#@O@O@@O@OOO@#$%***********%%%%%********%%$$#####$$$%%*********%%$#$#$%%******************%***********************************************************************%%%%*%%%%******$@@OO@@#$%%%%***************************",
+"********************%##@###$%********************************%%%$%%$%$%$%%$%%*********%*%************%#@ooXXXXXXXXooO#$**********%$$#$$%%******%$#@O@O@@@@$$%*********%$#@@@#$%**************%%%%%%%%**********%%%%%*******************************%*%%%%%*%**********%%%%$$$$%%$%$%****@OoXXoO@##$$$$%%%*********%******%******",
+"*********%%%********$@X.XXo#$%%*****************************%$$##@##@#@#@###$$%*****%%%$%%%*********%$@o&++&&&&&&+++XO#*********%%#ooO##%*****%$#X........@#%%*******%$#O. .O#$%*************%$$###$$%%*******%%$$$$$%************%**%%*%%*%******%%$$$$$$$%%**%*******%$@@@@###O@#%%***O &+++..O@@oO@#$$%%*****%%%%%**%%%%%****",
+"******%%%$$$$%******@O...XXO#$%*************%%%%%%%$%*******$#@OOoOooOooOoo@@$$****%%$####$%%*******%#OX++++&&&&&+++Xo#*******%*$$OX.o@@%%***%%#@...  ..  O#$******%%%#@o & o@$%************%$#@OoO@#$%*****%%$##@@##$%%*****%%%%$%$%$$$%$%%%***%%%##@@@@##$$$%$%%***%%$#OoooO@OXo@#$%**o&&+++..XooXXO@@#$$**%*%$$$$$%%%$$$$%%**",
+"******%$#@@##$%%****Oo.  ..oO#%%*%*%%%%****%%$$#####$$%%****#OoXXXXXX.XX.XXXO@$***%%$@@OO@#$%*******$#OX+++++&&+++++.X@****%%%%%$@o..XoO$%%**%%#@.   &  & o@$****%%%$#@oX&&&Xo#$$%%********%$#OoXXXoO#$***%%%$#@oooo@#$%%****%$###@#@##@@@@#$%%*%$#@ooXoooO@@#@##$$**%%#@XX.XoXo.XO@$%**o&&+++ ..XX..XXoO@#***%$#@@@#$$#@@@#$%%*",
+"*****%%#@XXXO#%*****X.+++++.X@$%%*%%$%%***%$$#OOOoOOO@$%%***#. ++++++++++++++O#***%$#X.   @#%%******%@o.+++&&&&&&+++.o@*%%%%$$$##X.++.XO#%***%%#O.  ++&&++XO#%**%%$#@OoX.+++.X@@#$%********%$@o++++& @#*%%%$#@O..+++XO#%%***%$@@OOoooooooooo@$%*%#Oo&&&&&..ooooOO@#**%$@o&&&&. .++XoO$%*o &+++&&  &++&&  Xo*%%%@Oo. O#@@.X.O#$%*",
+"****%%#@o...X@%*****o.+++++..O#$%%#####**%$#@OoXX.XXoo@$%%**@. ++++++++++++++O#**%%$@.. & o#$%******$@o.+++&&&&&&+++.X@*%$###@#@OX.++.Xo#$%**%$@O.  ++&&++Xo@%**%$@OoXXX.+++..XO@#$*******%$#OX++++&&@#*%$#@@Oo. +++Xo@#$%%*$#OXXXX.XXX.X..XO#$*$@oX&&&&&  .X.XXXo@*%$#@X&&&&   ++.XO#%*O &+++&&& &++&&& .X**%$OoX  XOOo...XO#$*",
+"****%%#X.++ .O$*****@o..+++& O@$$#Oo.X@*%%#@.. ++++++.X@$%%*@OXX....+++...XXO@$***%$@X.&&&o@$%******$OoX++++++++++++.XO*$#oXXXXooX.++ .X@$%*%$#@o.  +&..++XX@$%*$@X.&&&&&+++&&& .X#*******%$@oX&&&&.o@#*$#oX... &&&&.XoO@#$*#O  ++++++++++++oO$*@O &++++++++++++++O*%#@X.&&&&. .++.XX@$*@oX   ++   &&++&&XX**%$OX.++.XoX+++..O#*",
+"****%$#o.++ .o$%****#oX.+++& o@##@XX..@*%#@o.  ++++++..O@$%*#OXXXX..+++...XOO#$***$$OX.&&&o@$%******#OX.++++++++++++.XO*#OX....XX..++...O#%*$#@oX   ++  ++.Xo#$*#@..&&+&&+++&&&&..@******%%#OX.&&&&.o@$*#OX.... &&&&.X.Xo@#*#O &++++++++++++XO#*#O &++++++++++++++o*$@O..&&&& . ++..XO#*#OX.  ++   &&+++&.o*%%$OX.++..X.+++ .O#*",
+"****%$#X.++& o$%****#@X.+++& oO@@O.. .O*$@oX  &++++++ .XO@$*@OoXX.X.+++.XXoO@#$***%$OX.&&&oO$%******@oX.++++++++++++..O*#o........ ++ ..O@$*#@oXX   ++..++..XO#*#O..+++&&+++&&&&..O******%#@oX.&&&&Xo@$*@o...  &&&&&....Xo@*@O&&++++++++++++Xo#*#O &++++++++++++++O*#Oo..&&&&. .++ ..o@*#Oo.. ++ . &&+++&Xo*%%$OX.++....+++  o@*",
+"****%%#@X &++X#$%***$@oX+++  XOOOX++ .O*#O. +++..++&&&&..O#*@.......+++..XXO@@#**%%$OX.&&&X@$%%*****o.&++++++&&+++++& o*@O+++++++++++++&X@$*XX.&&++++++&++&&& @*@o &+++&&+++&&++  o*****%$#O &&++++.o@$*@o+++++++++++++++.X*#oX.+++....  +++.o@*$#OX...++++++...XoO*oX.++++++++++++++..*#@X&&&++.....++..XO**%$#OX++ .  ++++&o@*",
+"****%%#@o. ++X#$%***%#OX+++  XoooX++ .O*@o. +++..++&&+&  o@*O. .....+++ ..XXoO@***%$@X.&&&oO$%******o.&++++++&&+++++& o*@O++++++++++++++XO#*X..&++++++&&++&&& O*@o&&+++&&+++&&++& o*****%$@o&&+++++.o@$*OX+++++++++++++++..*#@X.+++.XX.. +++.o@*%#@OX..++++++.XoO@#*OX.++++++++++++++.X*#OX &&++..XX.++..O@**%%#OX++    +++++O#*",
+"****%%#@oX.++.O$%***%#@X&&&++XXX..++Xo@*@X++&& ..  ++..++XO*o &&&&&&++++&&&& ..**%%$OX.&&&X@#%******OX &&&&&&&&+++++  O*#OoX.. ++   .+++.o@*.. &&&++++&&++&&& o*@o &+++..+++..&&& o*****%$@o&&+++& .o@$*OX&+&&&..+++&&  .oO*#OX.+++.XXX. +++Xo@*%%$#@OXX.++  XoO@$$*#@oX.&&&& . ++ ..X@*@X.+++++.XXXX&& .o#**%%#@X  ++++   Xo@#*",
+"**%%$##OoX.++.o#%%**%$@O &&++.XX. ++Xo#*OX++&& .X. ++..++Xo*O &&&&&&++++&&&&&..***%$@X.&&&XO#%******@o &&&&&&&&+++++ .O*$#Oo...++.. .+++.X@*X. &&+++++&&++&&& O*@o&&+++..+++..&&& o*****%$@o&&+++& .X@$*@X&&&&&..+++&& ..O@*$@X.+++.XOX. +++Xo@**%%$$@OX.&+& XO#$%%*$#OoX&&&&. .++ ..O@*OX.+++++.XXoX&& .o@***%$@o  ++++ ..XO#$*",
+"*%%##@OoXX.++.o@$%***%#O. &++.....++o@$*OX++ &..X. ++  ++.o*O. &&&&&++++&&&&...**%%$OX.&&&XO#%******@O &&&&&&&&+++++ .O*%$$@XX.++  . ++&.X@*X..&&+++++&&++&&&.@*@o &+++..+++..&&& o*****%$#o&&&++& .XO@*Oo&&&&&..+++& ..X@$*#@X.+++XoOo. +++Xo@****%%$@OX++  X@#%%**%$#oX&&&& . ++..X@#*O..+++++.XoXX&&  o@**%%$@o.&++++ ..O#$%*",
+"%%$@oXX&&X.&+ .@#$***%$@OX.++   X.XoO#$*oX++&  XXX.++..++..*#OooXX..+++..XXooO@***%$@X.+++XO#%%*****#@XX+++++++++++&Xo@**%$$@oX&+&&.....  @*@OOXX  &++..++..XO#*@o&&++++++++++++& o*****%$#OX..++++&&o@*@o &+++..+++ &XXO#$*$@X.+++XXOo..+++.X#****%%%#OX&&& X@#%***%%#Oo&&&&. .++..X@$*O &&&&++.XXXX &&&o@**%%$@oX.+++&.XO##%%*",
+"%$@oX..+&X.++ .O@$%**%%$@oX++ & XXO@#$%*oX++&& XoX.++..++ .*$##@OoX.++&.XXO@###***%$@X.+++Xo#$******$@o.+++++++++++&Xo#***%$#OX&&&&.X.XX  @*$#@OX.  ++  ++..X@#*@o &+++&&++++&++& O**%%%%$#@X..++++&&o@*#o &+++..+++& Xo@$%*$@X.+++XoOo. +++.o@******%$#o && X@#%%**%%$@o &&& . ++.XX#$*@ &&&&++..XXX &&&o@**%$#OX..+++&.XO#$%**",
+"$#oX+++  .X  +&XO#$***%$#@X. +++.o@#$%%*OX++&&&XXoX&+&&&+  *%%$##OoX+++.XO@#$$%***%$#oX+++XX@$%*****%@OX+++ &..  +&&XO$****%$#O..++..XoO@@$*%$#@O.. ++..++ ..@$*#O. +++..+++..& ..O*%%$$$#@OoX.++++++X@*#OX.+++ .&&&++Xo@$%*$@X.+++.XoX. +++Xo@******%%#O..+&Xo#$%***%$@o&&&& . ++..o#$*#OoXX.&&   ..  &&o@*%##oXX++++++.Xo@$%**",
+"#OX.+++ ...  +&Xo@#****%$#O..+++.X@#$%**OX++&&&XXXX&&&&++ .**%%%##XX++&.XO#$%%*****$#oX+++XX@#%%****%#oX+++ &..  &&&o@$****%%#@X.++..oO@#$$**%$#O.  ++..++ ..@$*#@..+++..+++.. ..X@*$##@OOOXX..+++++&XO*$OX.+++  &&&++.XO@$*#@X.+++.XXX. +++Xo@******%%$#X.++Xo@#%%**%$@o &&&. .++.Xo#%*$#@OXX&&&  X. && o@*$@OX..++++++..X@#$%*",
+"#OX.+++  ..  ++.Xo@****%%#@X.+++.XO@$$%*@o&+&&&.XX.&+&&++ .***%*%#OX+++.Xo@#%%****%%#OX+++.Xo@$%****%#@X+++ &... && O#$*****%$@o.++..XO##$%***%#@...++..++  .O#*$@X.&++..+++.X..Xo#*#@OoXXXX...+++++&o@*$@X.+++. &&&++.XoO#*$@X.+++....  +++Xo@*******%$#oX++.Xo@$$**%$@o &&&. .++..o#%*%%##OX & & ..  & O#*@OX...++++++..Xo@#$*",
+"OX&++++++&+++++&&.X*****%$#OX&&&++Xo@#$*#OX.+++&&....++++Xo****%$#OX+++& XO@%%%***%%#OX+++&&XO@$%%**%#@o&&&++&&..XoO@$%*****%%#@o. &&Xo@$%%**%%$@X. +&..  +++o@*%$@OoXX..+++.XO@@#$*@.  &&+++++++++..o@*%#OX&++++   &&&&&o@*$@X.+++&&&++++++.o@*******%%$@o&&&  O@$**%$@o &&+&&&++.Xo#%**%%$#O..+++++++.X@#*@. +++++..&&+++Xo@#*",
+"@X+++++++++++++&&..******%##o &&++.Xo@$*$@oX+++&&... ++++XO*****%#OX+++&&Xo@$%*****%$@o&++&&XXO#$%**%$@O &&++&&..o@#$$%*****%%%#OX.&&XoO#$%***%$@X. +&XX. +++XO*%%$#@OoX.+++.o@#$$%*O &&&&+++++++++..o@*%$@o&&+++  .&&&&&Xo*$#X.++++&++&++++.o#********%%#@&&&& oO#**%%@O &&+&&&++.XX#%**%%%#@X.+++&+++Xo@$*O &+++++XX& +++.XO@*",
+"OX++&& ..&&&&&&++.X******%%#@OXX  ++.X@*%#@OXX.&&++....XoO@****%%#OX&&&+&.o@$%%****%%#@XX.++& .@$%%**%#OX..+++&Xo@#$%%********%$#OX   ..@$%**%%$#X..&&XoXX   &O**%%$$#OoX+++Xo$$%*%*@..&&&&&. .....&&o#*%$#OX..&&XXXX.&&&&&*%#oX & ..XX..++&XO#*********%$@X.&&&..@***$#O.  +&&&++.Xo#%****%%#@X.. &&..o@#%*@..   .XXoXX...++.o*",
+"@X++   .. &&&&&++..*******%%#@OX  ++.X@*%%##OoX &++XX.XoO#$*****%$@o&&&+&Xo@$*******%$#OoX++&  O#%%**%$#oX.+++&XO#$%%*********%%$#o..  .@$%***%$#oX.  o@Oo.  &o**%*%%$#oX+++XO$%%***@X.&&&&&...oX..& O#**%$@OXX  Xoooo  && *%#OX   XoooX.&+&XO#**********%$oX&&&.X@**%%#@.  +&&&++.XO#%****%%$#O...&&.XO#$%*@X. ..XoO@OO...++.X*",
+"@o++ ..oX.  &&&++XX********%%##O..++..@**%%$#Oo. ++XoXo##$%*****%%#O &&&&XO@%%******%%$#OX&+& .O#%***%%#OXX++&&O@$%%************%$@.....#$%****%$OoX..@#@@...&O*****%%#Oo+++X@%*****#X.  &  .XXOOXX  @#**%%$@Oo..@@@@O.. & *%$@o...O@@OoX&&&O@$**********%$OX &&.X#***%$@X. &&&&++.XO$%*****%%$#XX.  Xo#$%**#XX...O##$##oX.++Xo*",
+"#@OoooOOOOoooXXXoo@*********%%$#OoXX.X@***%%%#@OoXoO@##$%%*******%$@OooXO@#$%%*******%%$#OoX...@#%%***%$#@oXXoo@#%%**************%##@O@##%%****%%$#@@@#$$##OOO#*****%%$#O.X.O#%*****$#@OoooOO@####O@@#$**%%%$##@##$$##OOOo@*%%$#@O@##$##OOoO@$%***********%#@OoOO@#***%%#@OoXXX.  o@#%%******%%##@OOOO#$%%**$#@@@##$%%$$#@OoOO@*",
+"$##@@##$##@@@@@O@##**********%%$#@OoXX#****%%%$#@@@##$%%%%******%%%$#@@@@#$%**********%%$#@O..X#$%*****%%$#@@@@#%%****************%$####%%******%%$$#$$%%$$#@#$******%%##Xoo##%*****$$##@@@@#$$$%$$##$%****%%$$$$$%%%$##@##**%%$$#$$%%%$####$$%************$$##@#$%****%%$#@ooOo..O#$%********%%$$####%%****%%$#$$%%%*%%$$##@#$*",
+"%$$$$$%%%%$$#$$#$$%***********%%%$####$******%%%$#$$%%************%%$$$$$%%%***********%%$$##@##%%******%%$$#$$%%*****************%%%%%%%%******%*%%%%%*%%%%$$%*******%%$###$%%*****%%%$$$$%$%%%%%%%%%%******%%%%%%*%%%%$%$**%%%%%%%%%%%%$$$%%*************%%$$$%%%****%%%%$$#@@@##$%%*********%%%%%%%%%****%%%%%%%****%%%$$$%%*"
+};
diff --git a/hacks/images/matrix2b.xbm b/hacks/images/matrix2b.xbm
new file mode 100644 (file)
index 0000000..0cfc10e
--- /dev/null
@@ -0,0 +1,308 @@
+/* Created with The GIMP */
+#define matrix2b_width 160
+#define matrix2b_height 182
+static unsigned char matrix2b_bits[] = {
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe,
+   0xc3, 0x8f, 0xbf, 0xff, 0xff, 0xf7, 0x0f, 0x1f, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0xbe, 0xf2, 0xa9, 0x43, 0x1f, 0xff,
+   0xfd, 0xeb, 0xd7, 0x2f, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
+   0xff, 0x5f, 0x7c, 0xe8, 0xa1, 0x07, 0x3e, 0xbe, 0xf8, 0xe3, 0x87, 0x3f,
+   0xfe, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0x1f, 0xf2,
+   0x80, 0x91, 0x0f, 0x7d, 0xfa, 0xf1, 0xd7, 0x3f, 0x1d, 0xf0, 0xf5, 0xff,
+   0xff, 0xff, 0xff, 0xa7, 0xff, 0x3f, 0x7c, 0xf0, 0x82, 0xa3, 0x3e, 0x7c,
+   0xf0, 0xe7, 0xc7, 0x7f, 0x7e, 0xe0, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xe7,
+   0xff, 0x1f, 0xbf, 0xfb, 0xa0, 0x03, 0x8f, 0x3a, 0xfd, 0xfd, 0xe7, 0x3f,
+   0xbe, 0x74, 0xa0, 0xff, 0x07, 0xfc, 0xff, 0xf1, 0xff, 0x3f, 0xfe, 0xff,
+   0xc5, 0x17, 0x1e, 0x7a, 0xe0, 0xff, 0xc7, 0x7f, 0xbc, 0xf0, 0x80, 0xff,
+   0x0f, 0xf8, 0xff, 0xe3, 0xff, 0x3f, 0xff, 0x7f, 0x80, 0x23, 0x1e, 0x1c,
+   0xf0, 0xff, 0xab, 0x3f, 0x7f, 0xfb, 0xa2, 0xff, 0xaf, 0xfa, 0xff, 0xf8,
+   0xff, 0x7f, 0xfe, 0xff, 0xa1, 0x07, 0xbe, 0x38, 0xe1, 0xff, 0xc7, 0x3f,
+   0x7c, 0xf7, 0xe7, 0x8f, 0xff, 0xff, 0xf8, 0xf1, 0xff, 0xbf, 0xff, 0x7f,
+   0xe4, 0xa1, 0x3e, 0x3a, 0xe8, 0xff, 0x57, 0x5f, 0xff, 0xff, 0xf1, 0xd7,
+   0xff, 0x7f, 0x7d, 0xfc, 0xff, 0x3f, 0xfe, 0xff, 0xc1, 0x8f, 0x7f, 0x7a,
+   0xe1, 0xff, 0x8f, 0x3f, 0xfe, 0xff, 0xe7, 0x8f, 0xff, 0x7f, 0xf9, 0xf9,
+   0xff, 0xff, 0xff, 0xff, 0xf4, 0xc7, 0xff, 0xbf, 0xff, 0xff, 0x5f, 0x8f,
+   0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xeb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xaf,
+   0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0x5f, 0xff,
+   0xf5, 0xf6, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0x4b, 0x2f, 0xfe, 0xf4, 0xd2, 0x1f, 0x5f, 0xfc, 0xeb, 0xc4, 0x4b, 0x3f,
+   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x87, 0x8e, 0x1f, 0xe8,
+   0xc0, 0xa7, 0x07, 0x3a, 0x70, 0xd0, 0x03, 0x4f, 0xfc, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xe2, 0x83, 0x0e, 0xbe, 0xe0, 0x82, 0x0f, 0x1f, 0xfc,
+   0x60, 0x81, 0x0b, 0x1e, 0xf8, 0xff, 0xff, 0x5f, 0xbe, 0xaf, 0xfe, 0xc0,
+   0x29, 0x3e, 0x3f, 0xe5, 0x94, 0x83, 0x47, 0x3d, 0xfa, 0xc5, 0x21, 0x46,
+   0x7c, 0xfd, 0xd3, 0x17, 0x57, 0x1d, 0xfa, 0xc4, 0x53, 0x3e, 0xfd, 0xe2,
+   0x87, 0x17, 0x0f, 0x58, 0xf0, 0xcf, 0x4b, 0xce, 0xf8, 0xf4, 0xc7, 0x87,
+   0x0e, 0x78, 0xf0, 0xca, 0x11, 0x1e, 0x7f, 0xe9, 0xa1, 0x83, 0x4f, 0x3c,
+   0xf4, 0xe3, 0x03, 0x0f, 0x7c, 0xfc, 0xf3, 0x52, 0x17, 0x7c, 0xe5, 0xc5,
+   0x73, 0x3e, 0x7e, 0xf1, 0x8b, 0x13, 0xde, 0x58, 0xe0, 0xc7, 0x27, 0x5e,
+   0xf0, 0xfd, 0xef, 0xc1, 0x4f, 0x78, 0xe1, 0xd3, 0x21, 0x3e, 0x7f, 0xfc,
+   0xc6, 0x02, 0x6f, 0x3c, 0xf1, 0xf1, 0x12, 0x0e, 0xfc, 0xff, 0xff, 0x49,
+   0x07, 0xf9, 0xe8, 0xf1, 0x43, 0x3e, 0x7a, 0xf0, 0x8c, 0x03, 0xce, 0x58,
+   0xe2, 0xe3, 0x43, 0xbe, 0xf8, 0xfa, 0xeb, 0x8b, 0x1e, 0x58, 0xf4, 0xe3,
+   0x0b, 0x07, 0x1c, 0x6a, 0xc0, 0x0b, 0x15, 0x3c, 0xf0, 0xf3, 0x09, 0x0e,
+   0x7e, 0xfc, 0xe3, 0x2f, 0xf7, 0x1f, 0xfd, 0xfb, 0x97, 0x2e, 0x38, 0xe8,
+   0xa2, 0x2f, 0x96, 0xfc, 0xe2, 0xe6, 0x97, 0xbf, 0xfc, 0xf8, 0xc7, 0xbf,
+   0xbe, 0xfd, 0xfe, 0xf3, 0xaf, 0xaf, 0x5e, 0xf1, 0xd5, 0x4f, 0x5f, 0x7f,
+   0xfc, 0xfb, 0xa7, 0x0f, 0xff, 0xfe, 0xf1, 0xff, 0xff, 0xbf, 0xff, 0xfb,
+   0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xd7, 0xaf, 0xff, 0xfa, 0xab, 0xd5, 0x6f, 0x7d,
+   0xf5, 0xd5, 0xb5, 0x5e, 0xbd, 0xeb, 0xd6, 0xd5, 0xdf, 0x7b, 0xeb, 0xf5,
+   0xa7, 0x0f, 0x0f, 0x74, 0xa1, 0x41, 0x07, 0x0c, 0xe0, 0xa2, 0x51, 0x26,
+   0x7c, 0x70, 0xc8, 0xa1, 0xa3, 0x18, 0xf5, 0xd2, 0x07, 0x1f, 0x3c, 0x60,
+   0x85, 0x02, 0x0e, 0xbc, 0x60, 0x81, 0x03, 0x0e, 0xf8, 0xe0, 0x80, 0xc3,
+   0x47, 0x31, 0x61, 0xc1, 0x91, 0x0e, 0x1e, 0x71, 0xa8, 0x11, 0x47, 0x18,
+   0x62, 0xa4, 0x11, 0x5e, 0x7d, 0xb1, 0xc4, 0xe5, 0x87, 0x18, 0x60, 0x84,
+   0x83, 0x3e, 0x3c, 0xa2, 0x94, 0x32, 0x8e, 0x3a, 0xe5, 0x8c, 0x53, 0x3e,
+   0xfe, 0xe3, 0xc4, 0xc7, 0x0f, 0x18, 0x65, 0x9c, 0x03, 0x8f, 0x5a, 0x70,
+   0xfe, 0x29, 0x16, 0x5e, 0x38, 0xaa, 0x01, 0x1e, 0x7f, 0x79, 0xf0, 0xf3,
+   0x87, 0x18, 0x70, 0xc6, 0x03, 0x1e, 0x5a, 0x60, 0xfa, 0x71, 0x16, 0x3a,
+   0x70, 0x8c, 0x03, 0x3e, 0xee, 0xf1, 0xc0, 0xa7, 0x0f, 0x98, 0x60, 0x9c,
+   0x09, 0x0b, 0x3c, 0x25, 0xae, 0x29, 0x4e, 0x1c, 0x7d, 0xc2, 0x29, 0x3e,
+   0x1f, 0x69, 0xe0, 0x63, 0x0b, 0x19, 0x32, 0x86, 0x23, 0xa6, 0x28, 0x62,
+   0x98, 0x69, 0x8a, 0x38, 0x79, 0x8c, 0x53, 0x3e, 0x1c, 0xf1, 0x0a, 0x07,
+   0xae, 0x98, 0x60, 0x9c, 0x83, 0x07, 0x18, 0x68, 0xc4, 0x00, 0x07, 0x1a,
+   0x7e, 0x80, 0x01, 0x0e, 0x9d, 0x7c, 0xc0, 0x11, 0x43, 0x19, 0x71, 0xc0,
+   0x0f, 0x97, 0x58, 0xe1, 0x81, 0x13, 0x57, 0x38, 0xf8, 0xab, 0x53, 0x2c,
+   0x38, 0xf0, 0x9a, 0x23, 0x8f, 0x30, 0xe3, 0xc9, 0xeb, 0xef, 0xbb, 0xfe,
+   0xff, 0xed, 0xaf, 0xdd, 0xfe, 0xf5, 0xba, 0xdf, 0xff, 0x7f, 0x6d, 0xab,
+   0xf7, 0x5f, 0xff, 0xf7, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xfe, 0xff, 0x57, 0xbf, 0xbe, 0xfa,
+   0xd7, 0xad, 0xae, 0x7a, 0x6b, 0xdd, 0xab, 0xae, 0x7a, 0xf5, 0xe2, 0xe9,
+   0xbf, 0xfe, 0xfa, 0xff, 0x41, 0x17, 0x0d, 0x78, 0xc1, 0x03, 0x43, 0x0c,
+   0x65, 0x84, 0x10, 0x46, 0x98, 0xe0, 0xf9, 0xf5, 0x1f, 0xff, 0xfc, 0xff,
+   0x02, 0x16, 0x3c, 0xe0, 0x80, 0x03, 0x8e, 0x18, 0xc2, 0x94, 0x23, 0x8c,
+   0x38, 0xe0, 0xe1, 0xd3, 0x3f, 0xfc, 0xf0, 0xff, 0x25, 0x46, 0x98, 0x32,
+   0xc9, 0x48, 0xa2, 0x98, 0x72, 0x80, 0x21, 0x47, 0x38, 0xe5, 0xf9, 0xe5,
+   0x5f, 0x3e, 0xf8, 0xff, 0x53, 0xc6, 0x39, 0x62, 0x88, 0x03, 0x46, 0x39,
+   0xc2, 0x92, 0x07, 0x8e, 0x7a, 0xe0, 0xe1, 0x87, 0x7f, 0x7c, 0xea, 0xff,
+   0x21, 0xa6, 0x18, 0xf0, 0xe0, 0x4b, 0xe7, 0x9c, 0x72, 0x80, 0x43, 0x1f,
+   0x5c, 0xf9, 0xfa, 0xe7, 0x3f, 0x7f, 0xf9, 0xff, 0x07, 0xa6, 0xb9, 0xe0,
+   0x85, 0x4f, 0x87, 0x38, 0xe2, 0x80, 0x0f, 0x3f, 0xfd, 0xf0, 0xf1, 0x0f,
+   0x7f, 0xfc, 0xf7, 0xff, 0x21, 0x4b, 0x18, 0xba, 0xc0, 0x8b, 0x67, 0x7c,
+   0xb8, 0x84, 0x43, 0x1f, 0x3f, 0xf4, 0xfa, 0xcf, 0x3f, 0x7e, 0xff, 0xff,
+   0xa3, 0x07, 0x38, 0x60, 0x8a, 0x4f, 0x87, 0x78, 0xf1, 0x08, 0x0b, 0x3c,
+   0xbc, 0xe0, 0xe1, 0x1f, 0x7e, 0xfc, 0x7f, 0xd2, 0xc1, 0x0f, 0x0d, 0x61,
+   0xc0, 0x83, 0x4f, 0x7c, 0x78, 0xc0, 0x21, 0x2e, 0x3e, 0xe4, 0xf8, 0x5f,
+   0x1f, 0xff, 0xbf, 0x88, 0x8b, 0x1f, 0x38, 0xc6, 0x82, 0x0f, 0x1f, 0xf8,
+   0xf0, 0x8d, 0x21, 0x1e, 0x7a, 0xe0, 0xe1, 0x3f, 0x3e, 0xfc, 0x7f, 0x80,
+   0xf5, 0x17, 0xbc, 0x7f, 0xfd, 0xf7, 0xef, 0xff, 0xff, 0xfe, 0xef, 0xff,
+   0xde, 0xed, 0xd1, 0x3f, 0x2f, 0xff, 0x7f, 0xa9, 0xff, 0xff, 0xfd, 0xfd,
+   0xff, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0x7f,
+   0xff, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xdf, 0xff, 0x5f, 0xff, 0xff, 0x5f, 0xff, 0x7f, 0xe9, 0xff, 0xf5, 0xbf,
+   0xfe, 0xf9, 0xfa, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x1f, 0xff,
+   0xff, 0x2f, 0xff, 0xff, 0xe0, 0xff, 0xf0, 0x1f, 0x7f, 0x39, 0xfc, 0xc3,
+   0xff, 0xff, 0xff, 0xff, 0x0f, 0x7f, 0x3f, 0xfc, 0xeb, 0x1f, 0xbe, 0xfe,
+   0xe8, 0xd7, 0xd3, 0x3f, 0xfe, 0xf1, 0xe8, 0x4f, 0xdf, 0xbe, 0xfd, 0xfb,
+   0xcf, 0x97, 0x1e, 0x75, 0xd5, 0x23, 0x57, 0x1d, 0xf0, 0xa8, 0x41, 0x1f,
+   0x3f, 0x78, 0xd5, 0xc7, 0x23, 0x5d, 0x79, 0xe5, 0x1f, 0x0f, 0x3c, 0xe0,
+   0x80, 0x05, 0x0e, 0x78, 0x61, 0x81, 0x03, 0x3e, 0xfe, 0xe0, 0xc0, 0x8f,
+   0x07, 0x18, 0xe0, 0xc0, 0xff, 0x0f, 0x1a, 0x60, 0xc0, 0x01, 0x07, 0x38,
+   0x68, 0xc0, 0x21, 0x17, 0x3f, 0x78, 0xc4, 0xcf, 0x07, 0x2c, 0x32, 0xc4,
+   0xff, 0x2f, 0x3a, 0x66, 0x8c, 0x11, 0x4e, 0x79, 0x79, 0x86, 0x23, 0x3e,
+   0xfd, 0xe3, 0xd0, 0x8f, 0x4f, 0x38, 0xe2, 0x88, 0xff, 0x07, 0x3c, 0xa1,
+   0xd6, 0x19, 0x07, 0x78, 0x7c, 0xc4, 0x13, 0x1e, 0xff, 0x79, 0xf1, 0x57,
+   0x03, 0x19, 0x61, 0xc6, 0xff, 0x4f, 0x34, 0x65, 0x98, 0x21, 0x8e, 0xf0,
+   0xf4, 0x40, 0x73, 0x3e, 0xfc, 0xe3, 0xa0, 0x8f, 0x2f, 0x38, 0x66, 0x8c,
+   0xff, 0x87, 0x18, 0x60, 0xc4, 0x11, 0x07, 0x1a, 0x68, 0xc5, 0x01, 0x0e,
+   0x7d, 0x79, 0xc4, 0x43, 0x83, 0x94, 0x20, 0xc0, 0xff, 0x1f, 0x39, 0xe9,
+   0x80, 0x07, 0x5e, 0x78, 0xe1, 0x89, 0x53, 0x2c, 0x78, 0xe1, 0x88, 0x07,
+   0x8a, 0x98, 0xe2, 0xd2, 0xff, 0xaf, 0xae, 0xfa, 0xef, 0xb5, 0x5f, 0xbf,
+   0x7c, 0xe0, 0xb5, 0xdf, 0x3f, 0x78, 0xd7, 0xdd, 0xb7, 0xbe, 0xee, 0xf5,
+   0xff, 0xff, 0xfe, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff,
+   0xfe, 0xfa, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xdf, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xf5, 0xcf, 0x5f, 0xff, 0xff, 0xff, 0xb7, 0xbf, 0xff, 0xf6,
+   0xf7, 0xa7, 0xef, 0x7e, 0xf7, 0xff, 0x6f, 0xdf, 0xfb, 0xfd, 0xe3, 0x8f,
+   0x3f, 0xfe, 0xff, 0xff, 0x55, 0x57, 0x5c, 0xf5, 0xca, 0xc1, 0xd6, 0x5a,
+   0xb5, 0x84, 0xa9, 0x56, 0x1d, 0xf5, 0xf1, 0xcf, 0x1f, 0xff, 0xff, 0xff,
+   0x01, 0x16, 0x38, 0xe0, 0x81, 0x03, 0x87, 0x18, 0x60, 0x98, 0x03, 0x86,
+   0x30, 0xe0, 0xe3, 0x4f, 0x3f, 0xbd, 0xea, 0xff, 0x01, 0x87, 0xb8, 0xd0,
+   0x88, 0xc5, 0xa7, 0x18, 0xa1, 0x80, 0x25, 0x86, 0x18, 0xf8, 0xf8, 0x97,
+   0x3f, 0x5e, 0xe4, 0xff, 0x23, 0x26, 0x38, 0xf5, 0xa1, 0x4b, 0x4f, 0x39,
+   0xa2, 0x82, 0x47, 0x9f, 0xb8, 0xf0, 0xe1, 0x97, 0x7f, 0x3c, 0xe0, 0xff,
+   0x51, 0x42, 0x7c, 0x7c, 0xc0, 0xe5, 0x47, 0xb9, 0xf8, 0x90, 0x8b, 0x07,
+   0x5e, 0xfc, 0xf1, 0xcf, 0x1f, 0x9f, 0xf4, 0xff, 0x03, 0x4e, 0xb8, 0xf4,
+   0x84, 0x85, 0x0e, 0x78, 0xf1, 0x80, 0x07, 0x3e, 0x3c, 0xe0, 0xe3, 0x8f,
+   0x3f, 0xbe, 0xeb, 0xff, 0xc3, 0x0f, 0x3c, 0xf8, 0x80, 0x07, 0x4f, 0x78,
+   0x78, 0xc9, 0x22, 0x1f, 0x1f, 0xf1, 0xf9, 0xcf, 0x3f, 0xff, 0xff, 0xff,
+   0x49, 0xff, 0x38, 0xe8, 0xa4, 0x17, 0x1e, 0xf1, 0xf4, 0xc9, 0x03, 0x0e,
+   0x3d, 0xf0, 0xe3, 0x9f, 0x3f, 0xfe, 0xff, 0xff, 0xe1, 0x1f, 0xf8, 0xfb,
+   0xdb, 0xdf, 0x7f, 0xfd, 0xff, 0xff, 0x7f, 0x27, 0xbf, 0xf7, 0xeb, 0xef,
+   0x4f, 0xff, 0xff, 0xff, 0xcb, 0xff, 0x7a, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xfe, 0xfb, 0xfb, 0x6f, 0xff, 0xfe, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa,
+   0xeb, 0xff, 0x57, 0xfd, 0xff, 0xab, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff,
+   0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xe9, 0xaa, 0xff, 0x4f, 0xf5,
+   0xf4, 0xc0, 0x57, 0xaf, 0x7e, 0xf5, 0xff, 0xff, 0xff, 0x7f, 0xf4, 0xe9,
+   0xff, 0xff, 0x7f, 0xf1, 0xc1, 0x53, 0x0e, 0xf8, 0xfc, 0x83, 0x6f, 0x0f,
+   0xf8, 0xf0, 0xff, 0xef, 0xff, 0xbf, 0xe0, 0xc1, 0xff, 0x7f, 0xbf, 0xe8,
+   0xe8, 0x01, 0x47, 0x7c, 0x79, 0xc8, 0x57, 0x07, 0x3c, 0xfa, 0xd5, 0x5d,
+   0xff, 0x1f, 0xf8, 0xf5, 0xff, 0x7f, 0x3e, 0xe0, 0xd1, 0x07, 0x9e, 0xf8,
+   0xf8, 0x80, 0xff, 0x0f, 0x78, 0xe8, 0x93, 0x03, 0x6e, 0x3d, 0xc0, 0xeb,
+   0xff, 0x5f, 0x3f, 0x75, 0xf4, 0x11, 0x0e, 0xfe, 0x7e, 0xa0, 0xff, 0x43,
+   0x38, 0x70, 0xc0, 0x01, 0x9e, 0x0a, 0xe0, 0xff, 0xff, 0x7f, 0x3e, 0xea,
+   0xe0, 0x53, 0x3e, 0xfa, 0xf8, 0x81, 0xff, 0x0f, 0x79, 0xe1, 0x84, 0x5f,
+   0x16, 0x58, 0xe4, 0xff, 0xff, 0x1f, 0x3f, 0xf0, 0xd0, 0x01, 0x0f, 0x7e,
+   0x7c, 0x82, 0xff, 0x07, 0x38, 0x78, 0xe0, 0x37, 0xae, 0x1e, 0xf0, 0xff,
+   0xff, 0x3f, 0xfc, 0xe0, 0xa9, 0x03, 0x3e, 0xf8, 0xf8, 0x8a, 0xff, 0x17,
+   0xfa, 0x72, 0x85, 0xff, 0xfe, 0x7d, 0xe0, 0xff, 0xff, 0x1f, 0x7f, 0x7d,
+   0x80, 0xb7, 0x0e, 0xfe, 0xfc, 0xa0, 0xff, 0x2f, 0x7e, 0xff, 0xc0, 0x7f,
+   0xbf, 0x9f, 0xf8, 0xff, 0xff, 0x3f, 0xfc, 0xf1, 0x80, 0xef, 0x5f, 0xfc,
+   0xf9, 0xe2, 0xff, 0xaf, 0xfc, 0xff, 0x8d, 0xff, 0xff, 0x7f, 0xf5, 0xff,
+   0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xf4, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f,
+   0xeb, 0xff, 0xbf, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff,
+   0x8b, 0xff, 0xff, 0xf9, 0xd5, 0xdf, 0xff, 0xdf, 0xe2, 0xff, 0xff, 0xbf,
+   0xbe, 0xfd, 0xff, 0xf1, 0xd3, 0x2f, 0xfe, 0xff, 0xa7, 0xbf, 0x3e, 0xf4,
+   0xe1, 0xaf, 0xff, 0x3f, 0xe8, 0xff, 0xff, 0x2f, 0x7f, 0xfa, 0xff, 0xf4,
+   0xe3, 0x8e, 0xf6, 0xf3, 0x05, 0xbf, 0xfe, 0xf8, 0xc5, 0x9f, 0xff, 0xbf,
+   0xe0, 0xff, 0xff, 0x3f, 0x7e, 0xf0, 0xff, 0x61, 0xc7, 0x29, 0xc4, 0xe7,
+   0x53, 0x2f, 0x3d, 0xf9, 0xe1, 0xcb, 0xa7, 0x1a, 0xe8, 0xff, 0xff, 0x1f,
+   0x1f, 0x79, 0xf5, 0x39, 0x22, 0x9c, 0xf2, 0xf5, 0x07, 0x0f, 0x78, 0xf0,
+   0x89, 0xff, 0x8f, 0xb8, 0xe8, 0xe5, 0xff, 0x3f, 0x3c, 0x71, 0xc5, 0x51,
+   0xc6, 0x1a, 0xe4, 0xe3, 0xef, 0x07, 0x78, 0xfa, 0xe4, 0xef, 0xa3, 0x18,
+   0xf0, 0xf3, 0xff, 0x5f, 0x3f, 0x74, 0xd0, 0x00, 0x03, 0x8c, 0xf0, 0xf0,
+   0xff, 0x3f, 0xfd, 0xf4, 0xe5, 0xff, 0x4f, 0xb9, 0xe0, 0xe3, 0xff, 0x3f,
+   0xfc, 0x78, 0x81, 0x13, 0x0a, 0x18, 0xe8, 0xe5, 0xff, 0x2f, 0x7d, 0xff,
+   0xff, 0xff, 0x87, 0xf8, 0xf8, 0xfd, 0xef, 0xdf, 0x1f, 0xe8, 0xc8, 0x0a,
+   0x27, 0xb9, 0x70, 0xd8, 0xff, 0x3f, 0xfd, 0xff, 0xfd, 0xff, 0x0f, 0xf8,
+   0xe0, 0xfb, 0x8f, 0xff, 0x7f, 0xf9, 0x81, 0x23, 0x46, 0x38, 0xe2, 0xc8,
+   0xff, 0x87, 0xfc, 0xff, 0xff, 0xff, 0x07, 0xb8, 0xe0, 0xff, 0x47, 0xff,
+   0xff, 0x3e, 0xe4, 0x01, 0x53, 0x8d, 0x70, 0xa0, 0xff, 0x0f, 0xf8, 0xff,
+   0xff, 0xff, 0xaf, 0x7b, 0xe0, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xca, 0x2b,
+   0x66, 0x98, 0xe2, 0xe3, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xcf, 0xbf,
+   0xea, 0xff, 0xa7, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xbf, 0x7e, 0xf5, 0xed,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xdf, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xfe,
+   0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xfe, 0xfe, 0xf6, 0xfb,
+   0xff, 0xff, 0xfd, 0xff, 0xd7, 0xff, 0xfc, 0xf8, 0xe2, 0xff, 0x3f, 0xbe,
+   0xea, 0x8a, 0xd7, 0xdf, 0xfc, 0xf8, 0xd5, 0xc7, 0xbf, 0xfc, 0x74, 0xc9,
+   0xe3, 0x2f, 0x3e, 0xfa, 0xa9, 0x93, 0x4f, 0x7f, 0x68, 0xa1, 0x4b, 0x3f,
+   0x5f, 0x74, 0xa9, 0xd7, 0xbf, 0x3e, 0xf8, 0xd2, 0x87, 0xaf, 0x7e, 0x78,
+   0xe1, 0x27, 0x1f, 0x7d, 0x60, 0x04, 0x03, 0x07, 0xb8, 0xe0, 0xc0, 0x8b,
+   0x2e, 0xf8, 0xe2, 0x80, 0xcb, 0x0f, 0x3f, 0xf9, 0xd0, 0xc3, 0x2f, 0xbf,
+   0x68, 0xda, 0x21, 0x06, 0x1c, 0x30, 0x80, 0x03, 0x0f, 0x1d, 0xe8, 0xd2,
+   0x03, 0x1f, 0x3c, 0xf0, 0xe2, 0x07, 0x0f, 0x7c, 0x60, 0xac, 0x25, 0x9e,
+   0x38, 0x72, 0x95, 0x8f, 0x3e, 0xba, 0xf0, 0xe3, 0x87, 0x2f, 0x7e, 0xf9,
+   0xa1, 0x8b, 0x1f, 0x5e, 0x30, 0xfe, 0x83, 0x47, 0x5c, 0xf1, 0xc0, 0xcb,
+   0x2f, 0xfd, 0xfc, 0xf1, 0x97, 0x1e, 0x78, 0xe8, 0xc5, 0x27, 0x5e, 0x3a,
+   0x60, 0xd8, 0x13, 0x0f, 0x3a, 0x70, 0xd1, 0x8f, 0x3f, 0xff, 0xf4, 0xe3,
+   0x01, 0x47, 0x1a, 0x71, 0xa0, 0x81, 0x06, 0x1c, 0x74, 0x56, 0x85, 0x16,
+   0x1d, 0x75, 0xa4, 0x4f, 0x1f, 0x7d, 0xf9, 0xf3, 0x03, 0x0e, 0x38, 0xe0,
+   0x80, 0x03, 0x0e, 0x98, 0x60, 0x80, 0x11, 0x4e, 0x38, 0xe0, 0x84, 0x8b,
+   0x3f, 0xfe, 0xe8, 0xc3, 0x11, 0x86, 0x18, 0xa2, 0x84, 0x11, 0x46, 0x08,
+   0xe0, 0xc0, 0x01, 0x02, 0x18, 0x60, 0x80, 0x03, 0x0e, 0x38, 0x70, 0xa0,
+   0x23, 0x8c, 0x30, 0x60, 0x08, 0x23, 0x8c, 0x58, 0xe5, 0xe3, 0x43, 0x0e,
+   0x39, 0xe5, 0x90, 0x97, 0x5e, 0xba, 0xe4, 0xc5, 0xa9, 0x26, 0x9d, 0x66,
+   0xa9, 0xa9, 0xa6, 0x5a, 0xf1, 0xf9, 0xad, 0xb7, 0x5a, 0xba, 0xea, 0xab,
+   0x57, 0x7d, 0xf5, 0xb2, 0xbb, 0xff, 0xfd, 0xfd, 0xff, 0xef, 0xef, 0xfe,
+   0xff, 0xeb, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xdf, 0x7f, 0xff, 0xeb, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xdf,
+   0xff, 0xfd, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdb, 0x1f, 0xfc, 0xfc,
+   0xef, 0xa7, 0x3f, 0xf8, 0xfb, 0xff, 0x6f, 0x1f, 0xff, 0xfb, 0xe3, 0xb7,
+   0xff, 0xbc, 0xfe, 0xe5, 0x41, 0x2f, 0x3d, 0xf6, 0xe1, 0x47, 0x8f, 0xbe,
+   0xf6, 0xff, 0x05, 0x9f, 0x7f, 0xf8, 0xf2, 0xd7, 0x5f, 0x2e, 0xfd, 0xf1,
+   0x09, 0x0e, 0xf8, 0xfc, 0xd3, 0x47, 0x1f, 0x7c, 0xf0, 0xad, 0x0b, 0x36,
+   0xfa, 0xf0, 0x81, 0x16, 0x5e, 0x38, 0xf9, 0xc2, 0x21, 0x53, 0x1a, 0x70,
+   0xc0, 0x12, 0x87, 0x1c, 0x55, 0xca, 0x20, 0x06, 0x1c, 0x65, 0xa4, 0x41,
+   0x03, 0x0d, 0xf4, 0xc8, 0x01, 0x46, 0x38, 0x61, 0x89, 0x01, 0x0e, 0x38,
+   0xe0, 0x88, 0x03, 0xce, 0x18, 0x61, 0x88, 0x11, 0x4e, 0x78, 0xe0, 0xc1,
+   0x32, 0x06, 0x19, 0x63, 0x86, 0x39, 0xe2, 0x88, 0xe3, 0xe0, 0x48, 0xa2,
+   0x2c, 0x73, 0xd6, 0x29, 0x8f, 0x1c, 0x65, 0xc0, 0x41, 0x0e, 0x98, 0x66,
+   0x9c, 0x71, 0xc6, 0x19, 0xe7, 0xc3, 0x49, 0xc6, 0x18, 0x63, 0x8a, 0x31,
+   0x1e, 0x38, 0xe1, 0x8a, 0x39, 0x22, 0x8c, 0x23, 0x96, 0x28, 0xa6, 0x98,
+   0xe2, 0xa0, 0x01, 0xa6, 0x2c, 0x65, 0xcc, 0x29, 0x5f, 0x1f, 0xe4, 0x90,
+   0x51, 0xa6, 0x18, 0x64, 0x88, 0x51, 0x86, 0x18, 0xe2, 0x84, 0x51, 0x86,
+   0x2c, 0xe2, 0x88, 0x29, 0x3e, 0x7c, 0xe0, 0x92, 0x01, 0x07, 0x1c, 0xf1,
+   0xa4, 0x03, 0x17, 0x5d, 0xb4, 0xac, 0x01, 0x4f, 0x5c, 0x78, 0xc0, 0x03,
+   0x0f, 0x1e, 0x7a, 0x80, 0x81, 0xce, 0x78, 0xe8, 0xc1, 0x0b, 0x2e, 0x78,
+   0xf0, 0xdd, 0x03, 0x1e, 0x78, 0xe0, 0x83, 0x07, 0x2e, 0x18, 0xfc, 0x88,
+   0x7f, 0xb7, 0x7f, 0xf7, 0xf6, 0xef, 0xdf, 0xbf, 0xfd, 0xff, 0xfd, 0xef,
+   0xbf, 0xfb, 0xfa, 0xfb, 0xbf, 0xff, 0xff, 0xf7, 0xed, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xeb, 0x7f, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfe, 0xff, 0xff,
+   0xef, 0xff, 0x7e, 0xfd, 0xeb, 0xff, 0x5f, 0xfe, 0xff, 0xff, 0xef, 0x7f,
+   0x7d, 0xfd, 0xff, 0xef, 0xff, 0xfd, 0xfd, 0xff, 0xd3, 0xbf, 0xfe, 0xf4,
+   0xea, 0xb7, 0x3f, 0xff, 0xff, 0xff, 0xd3, 0x7f, 0xfe, 0xf4, 0xed, 0xd3,
+   0xbf, 0x7e, 0xfc, 0xf5, 0x8f, 0x3f, 0xbd, 0xf8, 0xa1, 0xa7, 0x5f, 0xfe,
+   0xf6, 0xf7, 0x8f, 0xff, 0xfc, 0xf8, 0xa9, 0x8f, 0x7f, 0xfc, 0xf0, 0xe5,
+   0xd3, 0x17, 0x3f, 0x7a, 0xe4, 0x8b, 0x2f, 0x9d, 0x75, 0xd5, 0x53, 0x0f,
+   0x3e, 0x72, 0xe5, 0xe7, 0x1f, 0x5f, 0xfc, 0xea, 0x07, 0x1f, 0x7c, 0xf0,
+   0xc0, 0x0b, 0x0f, 0x1d, 0xe0, 0x80, 0x07, 0x1e, 0x74, 0xe0, 0x80, 0x87,
+   0x2f, 0xbe, 0xf4, 0xe1, 0x81, 0x46, 0x1c, 0xf1, 0xa2, 0x21, 0x4f, 0x5c,
+   0x22, 0xc2, 0x21, 0x45, 0x18, 0x62, 0x84, 0xcb, 0x1f, 0x7f, 0xfc, 0xf2,
+   0x97, 0x0e, 0x38, 0xe1, 0xa4, 0x07, 0x0e, 0x18, 0x64, 0x9c, 0x03, 0x8e,
+   0x38, 0xe2, 0x88, 0x4f, 0x3f, 0xfe, 0xf8, 0xe3, 0x01, 0x57, 0x5e, 0xb8,
+   0xc0, 0x91, 0x96, 0x2c, 0x60, 0xd2, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc7,
+   0x3f, 0x7f, 0xfc, 0xf5, 0x2b, 0x46, 0x18, 0xe1, 0x88, 0x93, 0x8e, 0x8c,
+   0xe0, 0x80, 0x43, 0x0e, 0x39, 0xe4, 0x90, 0x0f, 0x2f, 0xfc, 0xf0, 0xc1,
+   0x01, 0x0f, 0x38, 0x70, 0x80, 0x01, 0x06, 0x28, 0x60, 0xa1, 0x09, 0x06,
+   0x18, 0x60, 0x80, 0x83, 0x0e, 0x3a, 0xe8, 0xd0, 0x03, 0x0c, 0x39, 0xe1,
+   0x92, 0x47, 0x1e, 0x19, 0xe5, 0xe3, 0x8b, 0x3e, 0xfa, 0xe8, 0xa3, 0x17,
+   0x5e, 0x78, 0xe1, 0xc2, 0xaf, 0xbf, 0xbe, 0xfa, 0xea, 0x55, 0x57, 0xbd,
+   0xfa, 0xf1, 0xaf, 0xaf, 0x7e, 0xfd, 0xf5, 0xa5, 0xaf, 0xbe, 0xfa, 0xd5,
+   0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff,
+   0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+   0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xbf, 0xff, 0xff, 0xa9, 0xbe, 0xfe, 0xfe, 0xfb, 0xbf, 0x5f, 0xfd,
+   0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xf7, 0xff, 0x7f, 0xbd, 0xfe, 0xff,
+   0x01, 0x17, 0x3d, 0xfe, 0xc7, 0x83, 0x3f, 0xfa, 0xff, 0xf7, 0xff, 0x47,
+   0xff, 0xf8, 0xd2, 0xb7, 0xbf, 0x0a, 0xff, 0xed, 0x03, 0x2e, 0xfc, 0xf8,
+   0xcb, 0x0f, 0x1f, 0x5c, 0xe8, 0xf5, 0x57, 0x1f, 0xbe, 0xf1, 0xd1, 0x27,
+   0x37, 0x3c, 0xf4, 0xc9, 0x91, 0x86, 0x3e, 0xf8, 0xe0, 0xa3, 0x2f, 0xba,
+   0xf2, 0xe3, 0x8b, 0xa6, 0x2c, 0xb2, 0xc4, 0x28, 0x47, 0x15, 0x68, 0x94,
+   0x03, 0x0e, 0xf8, 0xe0, 0x83, 0x07, 0x1d, 0x3c, 0xe4, 0xd2, 0x13, 0xa6,
+   0x5c, 0x62, 0x88, 0x23, 0x8e, 0x78, 0xe0, 0x88, 0x01, 0x82, 0x2c, 0xb0,
+   0xc0, 0x01, 0x86, 0x18, 0x70, 0xd5, 0x00, 0x43, 0x1c, 0x61, 0xc4, 0x10,
+   0x46, 0x1c, 0x65, 0xc8, 0x53, 0x8e, 0x98, 0x62, 0x0a, 0x2b, 0x8e, 0x38,
+   0x62, 0x80, 0x09, 0x8e, 0x38, 0xe6, 0x8c, 0x53, 0x9e, 0x38, 0xe2, 0x81,
+   0x29, 0x46, 0x38, 0x65, 0x94, 0x51, 0x46, 0x99, 0xe5, 0xd2, 0x21, 0x63,
+   0x9c, 0x61, 0x94, 0x31, 0x2e, 0x5e, 0xd0, 0xea, 0x53, 0x8e, 0x31, 0xe2,
+   0x88, 0x23, 0x8e, 0x38, 0xe2, 0xe5, 0x03, 0x86, 0x38, 0xe5, 0x88, 0x43,
+   0x1e, 0x3e, 0xf0, 0xe1, 0x01, 0x4b, 0x1c, 0x70, 0xc4, 0x82, 0x46, 0x18,
+   0xd0, 0xf3, 0x10, 0x4f, 0x1c, 0xe0, 0x80, 0x13, 0x0e, 0x9f, 0xf6, 0xe2,
+   0x0b, 0x06, 0xb8, 0xe0, 0x81, 0x0b, 0x1e, 0xba, 0xf0, 0xe7, 0x01, 0x0f,
+   0x78, 0xc1, 0x0b, 0x07, 0x1c, 0x1e, 0xfc, 0xe0, 0xf7, 0xef, 0xfd, 0xfe,
+   0xfe, 0xb7, 0xef, 0x7e, 0xff, 0xfd, 0xf9, 0xbf, 0xfd, 0xfe, 0xea, 0xdf,
+   0x47, 0x5f, 0x7e, 0xf9, 0xdf, 0xdf, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff,
+   0xf5, 0xff, 0xab, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0x7f, 0xdf, 0xfd, 0xf7,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff,
+   0xee, 0xff, 0x4f, 0xf8, 0xff, 0xe1, 0xdf, 0xff, 0xfd, 0xff, 0xff, 0xff,
+   0xdf, 0x4f, 0xfb, 0xff, 0xdf, 0x6b, 0xff, 0x7f, 0xa9, 0xf7, 0x07, 0xfc,
+   0x79, 0xe5, 0x47, 0xbf, 0x7e, 0xfd, 0xd5, 0xe9, 0x2f, 0x0e, 0xf5, 0xee,
+   0x9f, 0xc3, 0x5b, 0x74, 0x80, 0xc7, 0x8f, 0x78, 0xf1, 0xc1, 0x8f, 0x7e,
+   0xb0, 0xb8, 0xaa, 0x03, 0x4e, 0x1c, 0xc0, 0xcc, 0xc7, 0x87, 0x3a, 0xb8,
+   0xf1, 0xf3, 0x07, 0x8c, 0x68, 0xa8, 0x01, 0xbf, 0x5c, 0x74, 0xc0, 0x01,
+   0x16, 0x5a, 0xf2, 0xc9, 0x9f, 0x8f, 0xa9, 0x60, 0xa2, 0xc7, 0x0b, 0x98,
+   0x70, 0x81, 0x01, 0x3c, 0x1c, 0xe0, 0x80, 0x45, 0x06, 0x18, 0xe1, 0x81,
+   0x97, 0x97, 0x1c, 0x31, 0x41, 0xe3, 0x27, 0x18, 0xa2, 0xa0, 0x52, 0x3e,
+   0x4c, 0x28, 0xce, 0x97, 0x57, 0x1a, 0x72, 0xd1, 0x17, 0x97, 0x18, 0x62,
+   0x82, 0xcf, 0x07, 0x78, 0xa4, 0x80, 0x41, 0xbe, 0x98, 0xf0, 0x88, 0x4f,
+   0x4f, 0x2c, 0xe6, 0xd3, 0x51, 0x1f, 0x4f, 0xe1, 0xf9, 0xe3, 0x4f, 0x7e,
+   0xea, 0xea, 0x02, 0x5e, 0x1c, 0x79, 0xc4, 0x8f, 0x0f, 0x1a, 0x61, 0xe1,
+   0x13, 0x3f, 0x1e, 0xc5, 0xe3, 0xa7, 0x4f, 0xf8, 0xf8, 0xc1, 0x92, 0x5a,
+   0x38, 0xe0, 0x8c, 0x3f, 0x5f, 0x7c, 0xe5, 0xd0, 0x01, 0x3e, 0x1a, 0xf1,
+   0xd2, 0xc7, 0x07, 0xff, 0xfa, 0x8a, 0xc7, 0x07, 0x2c, 0x69, 0xc0, 0x9f,
+   0x0e, 0x3a, 0x30, 0xc4, 0x21, 0xfc, 0x78, 0xe4, 0xe3, 0x1f, 0x2f, 0xfe,
+   0xe3, 0x99, 0x8f, 0x8b, 0x78, 0xc5, 0x8a, 0x3f, 0x3e, 0xfc, 0xf5, 0x94,
+   0x5d, 0xff, 0xfa, 0xfa, 0xeb, 0x8f, 0x9f, 0xff, 0xfd, 0xdb, 0xef, 0xd7,
+   0xbf, 0xf6, 0xee, 0x7f, 0x4f, 0xff, 0xba, 0xdf, 0xdd, 0xff, 0xff, 0xff,
+   0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0xfd, 0xff, 0xdf, 0xff,
+   0xff, 0xfc, 0xff, 0xff };
diff --git a/hacks/images/matrix2b.xpm b/hacks/images/matrix2b.xpm
new file mode 100644 (file)
index 0000000..d7e0373
--- /dev/null
@@ -0,0 +1,201 @@
+/* XPM */
+static char * matrix2b_xpm[] = {
+"160 182 16 1",
+".     c #000000",
+"+     c #A7E7A7",
+"@     c #E0F7E0",
+"#     c #0F390F",
+"$     c #81DD81",
+"%     c #061406",
+"&     c #5AD25A",
+"*     c #030E03",
+"=     c #081E08",
+"-     c #0B2A0B",
+";     c #165016",
+">     c #217A21",
+",     c #34BB34",
+"'     c #1B641B",
+")     c #2BA02B",
+"!     c #279027",
+".............%--=*....*%=%%%....*-;''#=*..%-;'#=*....%==%.................==%......%;>'#*..*#'>;%......%=-=*...............................................=;;#*",
+"............%#>!'-%..%#;';'#-%.%=>,&&);%.%->&$!;=%.%=;>>#=.....%%%%%....%-;>;=....%#!@&>=..=>&@!#=....%#'!;=%....%*=......................................%;&$'%",
+".*..*..*..**-!+@,;%.%->&&,$);%.%#,++@&>%*-'&@@$);%.=;,$$>-%.*.=;'';-%.*.=;,$)#%.**-!&+)'%..%')@&!-%.*=#>$@!;-%.*.=;;#%.*..*..*..*..*..*..*..*..*..*..*..**->$@>=",
+"...........*#,+@$>=.%#,++$@&>%.-'&++@$,-='&+@@+&>%*-!$++,;%..=;,$+&'%...-!$@&;%..*;&++!#%..%#!++&;*.*#)&+@&,'%..%;&+>-...................................*#,++>=",
+"..*..*.....%;&+@$>=.=;&++$@&>%%#&+@@@+&#->+++$+&>%%#,$++$>-.%#)$+$$'=..%#&++)#%..%;&+$'=....='$+&'%.=;&+@@+$)=..='$@)#%.*..*..*..*..%%%%%*.*..*..*...*...='$+&'%",
+"...*..**...*#&+@$>=.%;&+$&@,;%='&+@@@@&#->@+$&$,'%*#)$+++);%*#,++&&'-%..#,$&'=...='$@,;=....%;)@$'=.%;&+@@@$!=%-;!+@,>#*.*..*..*..%-#;;;;;#**..*...*....%;)$$!#*",
+"........*..*#,+@$'%.*#!,))&'-.%;&+@@@+&#='$+++$&>=*-'&+++&>**#,++$,!;%.*-'>;-*...=>$@)#..*..*#)@$>=.%#!&+@$,'%='&&+@$&)-..........='&&&&&&)-.....*...*..#>++,;%.",
+".*.*........->$@,;=..%-####-*.=',++$@&!-%;!&+@@+,#.-'&@@+,>%=;,+@@&$)-..*==%..*..=>$@)#%....*#)@$>=..-!++$@,>*#!@@@@@@$#.*..%%**..#!@@@@@@$#.*..**.....%;)@+)-*.",
+".....*..*...='$@!#*...******..-!+@@@@+&-='&$$$+@$#*-)&+@@$,-=>$+@@@+&-...%......*=>$@,;%...**;)@$'=.*-!&&)$);*=',&+@$&)-...=#;#%.*=',&&&&,!-..*-#;-%.*.->++&;%..",
+"............%;),>-............->$+@++&>=->+@++@+&#*='!$+$+&-->@+++@$,#......*....%'&+&'=*...='&@&'=..=#;';';=**=;!+@,>#%..%#)&!#*.*=;;;;;;#%..=',&'%..=;)@&!-...",
+".*...*.*.*..%#,&'=.*..........='&+@++!#%->++@+@$)=.%-'&+$+&-->++++@$&#.*.....*...*#,++!-*..*#!+$&;*...*==*%%*...-'$@!#%.*.=>$+,;*...*.*.%%..*%-!$+>-..-!&@);=.*.",
+"..*.........*#&$;=...*..*..*..%;&+@@$>-.%#)&+@$>#*..*#)$$&!=%;&$+$$$&#..*.*......*-!&+,'%..%',+&!-%.............%;&$>-...*#,++,#%............*-!$$'=%.#,++>-....",
+"........*.*..=#;-%............=#,+++$'%..*-'&+>#*...*=#;;;#%*=;'>>>>;%......*.*...%#!@&>%..='&@!#%..*........*...=#;-%*..%#&$&'=*.*.*.*...*...%-;;-%*.#)&,;%....",
+"*..*.*........%%*.*.*.*.*..*..*=;>>>'-=....=;'#=......*=%%*...%%====%.*.*..........=;>'#=..%#'>;=.....*.*..*..*...%%*....*->)'-*...............*%=*...='>'-**...",
+"..%-##-=%.*.%-##=.....=##;#=%...=-#;#=*....%-#-=%.*%-#;;#-%....%=###=**-#;;;;-=*.**-###=*...%=###%%......*.....*.*.....*..............*...*.*.......*...%%==%%..",
+".=#>,&)'-**#'!,&;=..*=;)&&,'#%.=;!&&,'#=..%#>,,;%.%#>&&&&)#%..=#>,&,'%->,&&&&,;*.=;>,&)'#%.%#'&,)'#**.*....*........*..........*.*.*...*......*.*......=#'>>;-%.",
+"*#)$+@+,'%='$+++!-*.=;&++@+&!==;&++@+&!=..->$++>-*=>&@@@+$'%.=#)++++!=#&+@@+++>%=;&$+@+&!=*->$+++$'%.........*.*.*.....*.*.*%=#-=*..........%-#-=%..*.%#!$++&>-*",
+"='$+@+@$,-='+@@@)#*.=>++@@@+&#='$+@@@+&#.*#,+@@!#*-!$@@@+$'**->&@@++>=#&+@+@@@!%=>++@@@+&#=;)@@@@@!-...=--=%......=#-=.....-#'!)'=.%-------.-')!'#=*..=',@@@+&'%",
+"-!@+&,$@$#%#>)+@!#%.='$$&,$@$#=;&&,&+@$#.='$++@)#*-)$@$$&)'%=;)@+$&);%=;>!)$++>%->@+$&$@$#->&@&&+@,#*.='!);=.....='!);=..%#')&+@,-%#>)))!!'%#&@+&)'-%.=>&@&$+@!=",
+"#!@+,)&@$#.%#!$@)#*.*-'>!,+@$#.-;>)&@+&#%#)++$@)#*#!&@@@+$>%-!&@++$,;%.=-#>$+&'%->++$&++&#-)$@,,+@,#.%-)+@>#*.*.%#)+@>#.-;>&@@+,'==>++++++$-=')+@+&>;%=',&,&+@!-",
+"#!@+,!&@$#*.=>$@)#%..%-')&@$,-.%-!$+@$,#='$+$$@,;%=',+$+@@!--)$@@@@+>-.*%#!+$!#*->&+@+@$,#->&@&&+@,#.%-!$+>-*....#)++>-.#,$++$,'-%#!+@@@@@&#.-',$+++,-%-')&+++>%",
+"#!@+,!&@$#..=>$@)#...*#!$@$);=.%#'&$++&##!@@++@&)==#>)),+@,--)$@$$+@,#..%;&+$'=.->+++$+@&#=;)++@@@,#..=;!!;=..*..=;!!;%.'$@@$&>#=.#)++++++&#.*->,+@@&#.*#!@+&);%",
+"#!@+,!&@$#*.->$@);%**->&+@&>-*%#>>!,+@$##!@@@+@+,-=;!>')+@,#-)$@&&+@,#..=>$+&;%.-!@+$&+@$#*->$++@@,-..%-#;-%.....%-#;-%.;&+++$)'-%#)++++++&#%-;)$+++&#.*#!@$);=.",
+"->@+&,&@$#.-;!+@,>#*=;,+@$,>#%='&&),$@$#-!+@@@@+&-#)&,!,+@,#-!&@&&+@,-**#>++&#%.-!@+$&$@$#*=',&$+@!-*.%#>>#%..*..=;>'#%.-;!&@@$,'=-!+@++++&#=')$@@&!;%.*->+&'-..",
+"='&+++@$)-=;,$+@+&!=#>@@@++&!=#!@+++@+&-=;)&++@+&##)+@$+@@!==;)@@+@@)-..#!@$!-*.->++++@+&-*;!$++++>=.*-!$@>=....%#)+@>=..%#>)$+@,-=;!!)))!>=#&@+&,>#=..%->+&;%..",
+"*#>&$+$!;%='$+@@+$,-#!+@@@+$,-='&+@++)'=.=;)$+@+&--',+++$);%.-'&+++&>%.*->+&'=..%#!$+++)'%=',++$&!;%.*-!++>-%...='$+$>-....-;>!)'=.=-####-=*->)!>;-%....=>$&#%..",
+".*#>&&,;=.%#,&$$&&>%=>&$&$&&>%%#>&&&&'-*.*=',&&&>%*-'&&&);=..*#>&&&>#%..=;,!#**..=;)&&&'-*%#!&&&>#=..*='&&;=.*..-!$$,#%*....%-#--.....***...*#;#-%..*...%;)>-...",
+"..*=#;#%**.=#;;;;;-*%-#;';;#-*.%-#;;#-*..**=#;;#-*.%=#;##=.*..*-#;#=%*.**=#-%.....%-;;#=*..%-;;#-%.*..%%##=*...%=')!;=...*....*%.............***........*=--%*..",
+"...%%%*.....%===%....%=-===*.....%====%.%==-==%....%=-=-==%.*%==-=-=%....%===%%%*====%===%..===--=%...*=-=-==..==-%====..%====*..*.%%%.%%==%.%=%*%==%%...%%=%...",
+"*%=;'';=..*=;>>'#**.=;>>!>'#=..%-;>>>';%#'>!>>;-*.=;>>!>>'#*=;>!>!>>;%.%-;>>>';%=;>>';'>'-%-;>>!>'#%.*-;>>>>;%=;>>';>>;%=;>>>'#%..=;';#-#''-=;';##'>;%.%-;>>;-%.",
+".-',$$&;=.%#,$+$>#**#,$+++&!#%%#>,$+$&,->&+++$,>#%#,$++++$>%#,$++++$&-%#>,$+$&,-;,$$&,$+&;=;&$+++&!%.=;&++++,-#,++&,+$,-#)+++&'=..;,+&>'!$$;#,$&>)&$,-%#>,$$,>#*",
+"%;,$@@$!#*%;&+@@&'=.;&@@@@++>=#)&+++++$;)+@@+@++>-;&@@@@@@)-;&@@@@@@+;#)&+@+@+$;;&@@$&@@+>=;&++@+$)-.='$+@@@$#'&@@$&@@$#;&+@@$>=.*'&@+&)$@+>'$@+,&+@&##)&+@+++>-",
+"=>++$$@,>%%#,+@@+>-.;&+@$$+@,-'$@+&&$++;!+@+&$+@&##&+@$$+@,#;&+@$$+++;'$@+&&+++;;,@+$&+@+;%#!&+@$,'%.%#)&+++)-;,@+++@$!=#!&@$,;%..'&@@$&@@+'>$@@&$+@&#'$@+$&+@&#",
+"#!@++@@$)=*#!$@@+);*#)$@&$+@,#>$@&!>)$$#>$@$!!$@$;#)$@&&++)-#)$@&&$$$#>$@&!!&$$##)@+$&+@$;.%#!+@)'-%..=#!$+&>%#)@++@+!;%%;)@&>-%..',@@+&@@+;'$@@+$+@,#>$@&!!$@$;",
+"#!@@@@@$)-*#)++$@&>%#)$@+@@@,#>+@,'-#;;='$@&>'&++;#)$@$++,'%#)$@$+$!'=>+@,>!,&)##!@@++@@$#..=>$@)#*.%%=->$+&'*#!@@@@,>-.*#)@,'=%..;,@@+$@@+;'$@+@++@,#>+@)''&++;",
+"#!@@@@@$,-='&++&@$,-#)$@@@@@&;>+@);==-=%'$@&''&$+;#)$@@@+!;%#)$@@@$>-*>+@,>&++&##!@@@@@@$;..=>$@)#*.-;';>$+&'*#!@@@@&>-**#)@,>##-*;,@@@@+@+;'$@$@++@,#>+@);'&$+;",
+"#!@++@@+&-#!+@@@@+&#-)$@$&$++;>+@,'#;';='$@&>>&$+;#)$@$++&)-#)$@$+$'%.>+@&!$@@$;#)@+$&$@$#..=>$@);%.'&+!!$+&;*#)@+++@,'%*#)@&!)&'%;,@++@&@+;'$@$++@@,#>+@,>>&++;",
+"#!@++$@$)-;,@+$$+@+;#,$@&,$++;'$@$!>&$$#>$@$))$@&##,$@&$$$$;#,$@&&)#**'$@$,&$++;;)@+&,$@$;*=;!+@,>-%>+@&,++&;*#)@+$&@$,#=',@&,$@,-;,@+&,&@+''$@$&+@@,#'$@$))+@&;",
+"='$++$+&>='&@@$$+@+>;&+@$$++$;;&++$$++$#!+@+$$+@,-'&+@$$+++;;&+@$&!-..;&++$$++$#;&@+$&+@+'%#,$+@$&>%'$@$$+$)#*'&@+$&++$'#,$@$$+@,-'&@+,)&@+'>$@+,$@@,#;&++$$++,#",
+"%;,$@@@,'%;&++$&++$';&++++++!--')$+++$!-!$++++$$'%'&++++++$#;&+++&>=*.-')$+++$!-;&++$,++$'%;&++++$!=#)$+++,;=.;&++&),+$'#&++++++!=;&+$,!$+$';&++),$+!--')$++$&'%",
+".=;>,&)'#*#>)!>'!)!#-'))))!>#%%-#'!)>'#%#>)),)>;-*->),,,)!>=->),)>#%*.%-#>))!'#%#>)!>'!)!#*#'!,,,!;%=#>),!;=*.#>))>#'>>#->),,),!;%#>)!';>!>#->)!;;>!;%%=#'!!>;-*",
+"..%-###=*.*-##---#-%*=###---%...%=-#-=%.%-###-=%*.*=-####-=*.=###=%.....%=---=*.%=##-----%.%=-###-=..%=-#-=...%=-#-%%--**=#####-%.%---===--%%=--=%--%*..%=--=%..",
+".%=%==%%.....%%%%*...%=%=%%...*.%%%=%%%..*=%===%%..%=%*%%=%..%%%**%%%%.%%%%*%=%*.%==%%%%=%.%%=%%%%%%..%%===%%...%-##=*..%-#-%.......%-##-*...*.%--=%............",
+"-;'>>>';=*.=#;'>;#%.-;'>>>;#%..=#''>''#%=#'>>>>>;%=;'';;'';%-;'';#;''=-;'';#;''=-;''';'''=-;''';'''=%-;'>>>>;%.*-!,&'-%.-!&>#%..*..%->,,!-%...%#!);=...*....*...",
+";&++++$&'%%;!$++$)#%;&++++$>#%%;!$+++$>=->$+++++&#;&++)&$+&#;&+$,>$+$';&+$,!$+$';&++&,++$';&++&,++$'='$$++++&#.=;&++);%.#,$$>=.....=;,++&;%*.*->$+);%....*....*.",
+"'$@@@@++,##!&+@@+$!-'$@@@@+&!-#!&@@@@@,-#,@@@@@@$;>$@@&$@@+#'+@+&)+@+>'$@@$&+@+>'$@@+&@@+>'$@@+&@@+>->+@@@@@+;*=>$@+)#%.-)&+!;%..*.%;,@@$>%..%#,+@&'=*.*........",
+";,$@$&+@+;'$@+&&+@&#',@+$$+@&#;&+@$$+@,-;,@++@$@+;>$@$))+@&#'&@+,!&@+''&@+$+$@+';,@+$&+@$;;,@+$&+@$;->++$$+@$;.=>$@,'=%.%;)@$>-%...%-',@$>=*.='$+@+!#*..*.*.*...",
+"#)$@&)&++;>+@&!!$@+;#)@+&&$@$#;&@+&&$+)-#)@++@&@+;'$@&>!$@,##)@+,!&@$;',@++@$@+;->&+@+@$)#->&++$@$)-='$$&$@$)-.=>$@);%...->$+&'%....*;)@$>=.*-!++&@);*..........",
+"#)$@&,$++;>+@,''&++;#!@+$$@+&##,$@++$$>=->&&+@&$)#'$@&>>$@,##>++&)$@&#;,@++@@@+;*#!$@@+,'=%#!$@+@,'%%#!,$+@,'%.=>$@)#*...%;,@+!-*....#)@$>=.%-!&&,$);*....*.*...",
+"#)$@++@@&#>+@,>>&++;#!@@@@@&!-#>,$+@@+!-%-'!+@,>#%'$@&>>$@,#='&+$&@$,-;,@@++@@+;*->&@@+);%.%;,+@&>-..=',+@$!;%.=>$@)#..*..#>++&#%.*.*#)@$>=..=#'';>;-%.*....*...",
+"#)$@++++!->$@$&&+@$;#)@@++@&!-;)&&$+@@)-.%#>+@,'=.'$@&!!+@,#%#,++&@&>%#,@@+$@@+;=;)$+++&>=.%#!+@,'%.%->&+@&&)-.%>$@)#%....*;)+$>#*..%#)@$>=...%====%*.%=#-#-##-%",
+";&+@$$,>#%;&+@++@@,#;,@+$&@+&#>$@$$$+@,#.%;)+@&>-.;&@+&&+@,-.->$++@!;*#!@@+$@@$;#)+@+&@+&;.*;)+@&>-.='&+@+$@$;.=>$@,'=..*.*='$+&'%..=',@$>%*.*........#>))))))>-",
+";&@@+$!#=.-!&@@@+$&#;&@@$,+@+;>+@+++@@)-*=>&+@$!;*#)$@++@@!-.=;&@@+!-*#!@@+&@@$#'&@@+&@@+>%=>&@@$!;%=>+@@++@+;.=>$@$!#%....%#,++>=**#!$@$>%....*....*.>&$+$$++&#",
+";&@++$>-..->&@@@@@&#;&@@&!,@$>'&++@@+&>=.=>&@@+);*=;)+@@+&'%.*-)+@&'=.='$$&)$$,-;&@@$&@@$>*-!$@@@);*='$+@@@@&;.%'$@+,;%.....->$@)-.=',+@$'=......*....)+@@@@@@+;",
+"#'!!!>#%*.%',+++++,--'!!';'>>-#'>!)!!'#%.%#>!)!'=**=;>!)>'-%..=;>>'-*.%#'>';'>;%#'!!>>>!>#.%#>!)!;-*%#'!)))!>=.%;&++,'=*....%;&$>=.=;,+@&;%*........*.>&$$$$$$&#",
+"%=----*...%-;!>!)!;%%=--=%%--**=-#---%%...*=---=*...%----=...*.%--%*...*%=%===%*%=-----#-%.**----=*..%=-###-=%..=;>>;-%...*..-'>#%.*-;>!'-%..*.*.*....-#'''''';=",
+"...%%%*........*....*-#-%.............*.*..**---%...*..........%=-##-%..........%-#-%........=--=.......==-%..%-#-%......%%-#-=.....................*...*.......",
+"*.%-;'#%.*.*.*..*...#>!>#=......*.*.*......%#>!>#%.......*.*.*%#'!))>=.*..*.....#>!>#=......=;>!;=.*...=;!!;=*#>!>#%....%=;>)!;=.*...............*........*.....",
+"..='&$>-*....***.*.*;$@+!-%.*.....**%......=>$@+>%..*%.%*....*->$+@@$#....%%%%..;$@+>-%.*.**-)+@>-*..**#>@+)-*;$@+>-%*...=!+@@!-*..%.%%.%.*.*%%**%..*....*.%.*..",
+"..-!+@,;%..%-#;;-%..;,@+,'#-%.*%-#;;;#=%*%-;>&@@!=..=#;;#-%..=;,+@$&,-.%-#;;;;-%;,@+,'#=*..%#,+@!#...*=')@+,#.;,$@!'##%..%;,+@!#%.-#;;;;;#%.*-#####=*.*%-#;;#=%.",
+"..=>$+$'=.*#>,&&!;=.#)@+$&,>;%=#>,&&&,;%=#>,&$@@!-%-')&&&>;%%#,$@@+$)-=#>,&&&&!-#)@++&,'#%.='&++!#*..-',+++,#%#,$@,,,)#%..-!+@)#..')$&&&$);*#!$,,$,'#%=#>,&&)'#*",
+"*.*#>&$'=*='$+@@+!#*#!@@@@+$,-#,$+@@@+)-#,$+@@@@!-='$+@@@+,-='$+@@@+,-#,$+@@@@$##!@@@@+&!=%-!$@@!#%.%#)$@@@$'*-)$@++++'%*.=>$@)#%.)++@@@@+,-'$@++@+&!-#,$+@@+$'%",
+"...%-;,;%.=>$@@@@&'%#!@@@+@@$#'$@@++@@,#'$@@+@@@!-#)+@++@@$#=;$+@@+$)-'&@@+@@@$##!@@@+@+&#.->$@@)#..*#!$++@$'%#)$@+++$;*..=>$@)#%.)+@@@@@+&#'$@@@+@+&#'&@@++@+)-",
+"*...*=-=..=>$+++@$)=#!@@$,$@+;>+@&),$+)->+@&,$@@!-;,@++$+@+;.->&++,>#%>+@&,$@@,##!@@$&$@+#.%#!+@)#%..=#'!&+$>%#)$@@+&>#%..=>$@)#..>$@+++++&#;!@@$,$@$#>+@&,&+@,#",
+"..*.....*.#!@@@@@$)-#!@+&)&@+;>+@,>>)&>=>+@&)&+@!-;,@@@@@@+;.='&++!;=.>+@&,&+@!-#!@+,)$@$#.%->$@);%...*=#)+$>%#)$@@+,'=*..=>$@);%.>$@$++++&##)@+,)$@$#>+@,!)+@,#",
+"....*.....#,@+$$@$,-#)@@$,$@+;>+@$)!,&)->+@$,$@@)#;,@@+$++$;.-'&++)'-%;&+@@@@@!-#)@+,)&@$;.=;!+@,>-%..*=#!+$'%#,$@++$!;**%;!+@,>-*>$@$++++&;;)@+,)$@$;>+@$)&+@,-",
+"........*.#,@+$$@+&#;&@@+$+@$;'$@+$$+$&#'$@+$+@@&##)@@++++$#%;&+++$&>%->,$$++@!-;&@+$&$@+'%;,$+@$&>%.%-;>,+$'%;&+@$++$)-*#,$+@$&>%!+@++++@$;;,@+$&+@+''$@+$+@@!=",
+"*.*..*....-!++++++&#;&+++++$)-#)$+++++&-#)$+++++&#='&$++++&#=;$++++$)=%;)$++++>*;&++$,++$'=;&++++$)%*-!&$+@&;%;&+$,$++&#%;&++++$)=)$++$+$+$';&++&,++$'#)$+++$&'%",
+"........*.=#!,,,,,>=->,,,,,'#%=#>),,,!;%=#>),,,,>=%-;!,,,!'=%#!,&&,!;%=',@@@$!;%->,,!>,,!#*#>),,,!;%*#,+@@+!#*-!,!'!,,>=%#!),,,!;%;),)),),)##>,,)>,,)#=#>),,!;-*",
+"..*..*.....%-#####-*%-#####=*..%=####-=*.%=#####-*..=-####=%.=-#;;##=.%#!&$$);=.=-;#--###%.=-####-=**->&$$,;%**-##-###-*.*-#;###=.=########%%-######-%.%=###-%*.",
+"........*.....*.*...........*..........*.*%*......................................................................%%%*.....%%%**....%%%*..............*.........",
+"*.*..*.............*...*.......*.........*=#-%....*......*...*..*...*.........*..........*.......................=#''#%*...='>#*...%#''#=................*......",
+"..%..%..*.*....%........%%..*....*.*....%->)!#%*....*.*........%......*.*.*.....*.*%.*%....*.%.*.*.*.*%.%.*.*.*.%;!,,;%...%#)&'-*..%;),!;=*.*.*.*.*...*.....*.*.",
+"%-#;;##-*..%-#;;##-**%-##-##-%..%-#;##=*%;,++>;-%.%-#-==-#=%%-##--#;#%*-##-=###%.=##--##-*%-##-=##-%*=#;;;;-%...->++,#%...='$@!#%..*#,++>-...............*......",
+"#!,,,,)>;%=;>),,,,!-%#!))),)>-*=;!,,))>%->$++&)'#*#!)!''))>=#!,,)!,,)##!,)>'!,)#='),)!,,!-#!,)>'!,)#=>),,,)!;%.%#!@$>-%...=>$@)#....->$@!#%...%%=%%%%.*...*.*...",
+"'+@@@@@$!-#)&@@@@@$#='+@++@@&#*#!+@@@+&-#)@@@@@,;*'$@+)!@+$#'$@@+$@@+>'$@@$,+@+>#!@@+&@@+#'+@@&)+@+>#&+@@@@+'%.*;)@$>=..*.=>$@)#%*..=>+@);..%-;''''';%..........",
+";&@@@+@@$#'++@++@@&#='&+@@++&#='$@++@@$##!+@++$!#*;&@+,)+@$#;&@@$&+@+''+@+++$@+'->$@+$@+&#;&@@+,+@+';&@++@+&'%.='&@$>=....=>$@)#*...=>$@&'=.='$$+$&$&#*.*..*....",
+";)@@$,$@+;>+@$&+@@)#*#!++$,)>-%'$+@@+$,-=>$++)>;=.#)@+,!$@$##!$++&@+&#;)@++@+@+;%;)$+@+,>%#!$@+&@+&##)$$@@$!#%.=>+@$>=*...=>$@)#..*.=>$@+>=.#!@@@@+@&#.......*..",
+"#!@@$&$@$;>+@$&$@@!-.->++&>;-%='&+@@+$&#='&+$!';-%#!@+,)&@$;=;&+$&@&!-#!@@@@+@$#*->&@@+);*%;,++$@&>=->&+@+&!#%.%'&@$>%..*.=>$@!#%...=>$@&'=.-!+$+++$,-...*.*....",
+"#!@@@+@+&#;&+@+@@@!-%;)++&)'-*='$+++@@$#%;&++&&,>=#!@+$&+@$;*#>$++@);*-!+@@+@@&#%;,++++&>=.%>$@@+);*#)$@+$$$'%.*#)@+>=....=>$@)#%...=>$@)#%.=#!!!!)>;%*.....*...",
+"#)@@++$,>%-',$++@@)-='&+@$$!;*->@@+++@$;*#)+++@+,-->+@+$@@+'.=;&@@+>-.='&++&@$,-->$@+$@+&#%='&@@&'-*;&+@++@@>%.*#)@$>-....='$@!#%..%->$@!#%..%------%........*..",
+";,@+$)>;-**-;>)$+@)#->@@@@@);*=>$++@@$,#*='&+@+&>%%;!$@@+@+>.*->$@,;%.*#,$$,+,>%->@@$&@@$#='$+@@!#*.#&+@@@@+>%.*=!@+!#%.*.%;&+>=%..*#!+@!-*....*.%....*.*.*.....",
+";$@@+&;=....='&+@@$#%;>))!!;-.%#>>!!!>;%.*=;>!>'#%.=#>!!!!>-..%#>>;=%.*=#'';';-%=;>!>>!!>==>++++>-%.=;!)))!>#%.*=;&&&'%...*-'>#%...%'&$,'=.*.................*..",
+"#!&&,>-*....*->,&&!-*=-###-=*..%=--##=%..**%---%*...%=-###-%...%=-%*....*=%%=%*.*%-#---#=**#>!!>-*..*=-###-=%...*-;';-%....*==%..*.%-;';-*...*......*...........",
+".......*.*..............=-=%.....%%%=*...........*.%=%%*==%.*...*%..*...*=-##-%*.............%%%*.......%%*..........*.*......*..........*....%%%%%...*.*.%.*.*.",
+".......................%;>'#%*..=#'';#%*..%.....%.*#'>;;'';%..%%##-*..**-'!))!'%...%%==%**.%=#;;#-%...%-;;#=%.*..........*.................*.%=#''#=%...%-##-%..",
+".*.*.....*.*.*.*.*.*.*=;!@$>#*.=#!&&&>#%.=------=*->$$&)&&)#..%#)$'-..*='&+@@+&-*%-;';';-.%#')&&)'-%.%->,&);=...*..*.......*..*.*.*.*.......%#>,$&)>#%.=#!))>;=.",
+"......*......*%%%....%#>&@+,>%%->+@@@,'%=#)!>>!)>=#)@@+&@@$;..='$@!#%.%;,+@++@$#.%;!&>&&#*-'&+@@+$'=.=;&++@!-....%%%%%%*.%==---=*......*.*..-'&+@@+$'%.='+@@+!-.",
+"...*........%=;;#%..%#!&+@@$,-*;,++$$);*=>+++++$,--!+@+&@+&#..=>$@)#..->&+@+$$&-.%#>)>)!#.#)+@@@@+)-.->$++@!#%..-;;;;;#%%#'>>>>>;%..*.%***..#)+@@@@+)-.='&$$&>-*",
+"*......*.*..%#,$>=..*;&@+$+$,-='&+$,!;-.#>+@@+@@&#%',++$@&!-*.=>$@!#*.#)@@@@+&,-..=###;#=.'$@@@@@+$#%#,+++@,;*%-'&+&&+,-->++++++$#.%-#;;;#-%'$+@@@@++#.%-'!!'#%.",
+"...*........=;,&)#..%'$@$&&&!=->$++&!#%.#!@@+$@@&#*#!$@+@,'%..%'$+!#*.#,@@+@@$&#...%%*%*..>+@@+++++;*#,+++@,'%->,++++@&#-!++@@@@+;%#!,$&&&!->++@@@+++;..%=--%%..",
+"*....*...*..='&$)#%.%;$@$&&,>=-!+@@@&;=.#!@+$&+@$#*->$@@+,'%..%'&+!#..#!+@@+@@+;*.......*.>+@@+++++;%#)+@@@$>%;&+@$+@+!-=;)&&&$@+;%;&+@@++&=>++@@@+++;.....%....",
+"............=>$+&;%.%;&+@$+$!=->$+@$,'-*-!@@+$@@&#*-!$@@+,'%..%'$@!#..=',+@@+@+;..........'&@@@@@@&#*#)+@@@&>%;$@++@+&>=.=#;;')@+;%#)&&&&&!='&@@@+@@&#..........",
+".*.*...*.*.*#!++&'%..#>&@@@$>%->$@+&&,!-->+@@@@+&#*-!&+@$,'%*.%>$@!#*.=;)&$+@@+#..*.*.*...#!+@@@@+!-*->&$$&!;*#&$@$+@@!-..**%-'&,#.%#;''''#%#!+@@@@+!-*.*.*..*..",
+"...........%#!@@$'=..%#>,@+);%#)@@@@@@$#%',&,,,&!=*#!+@@@&>*..%'$@!#%.->+++$@&!=........*.=;,$@@$,'%.%-;>>'#=.-')++$+@&#.....*-;#%*.%====%%.=;,$@@$,;%.....*....",
+"....*.*....*#!@@$'=*..%#!+&'=.-!++++++&#.-;';;;'#%*-!$+++,'%..%;&+>-..=>+++++!#%*.........*-')$$,'-*..*==-=%...=;,&&&+)-*......%%...........*-')$$,'-%..........",
+"*.......*..*->$+&;%....=#>'-*.=;!,,,,)'=.%==**%=%**=;>,,)'#%..%->,;=..%#)&&,!;=...*.*...*..%=#;;#=*...........*%=#;;;;#%..*.............*....*=#;;#=*..*..*.*...",
+"..*.........%-'';=.*....%==%...=-####-=%............%-##-=*....%--=.*..%#;;;-%...............*%%%...*......*.....******......*...*.*.*....*....*%%*..........*..",
+"..%-##-*.*...........*%-##-*....%###-%........%.............**=#;;;;#%........*.*...*...*....=--=%....*%%%..............-##-%.....-##=......-;;#-*...*..*.%*....",
+"*%#>,)'-%....%==%*...*#>,,>#%*.%#>,,>#%...*%-#-**.*.........*-'),&&,!=...............*.....%=;!);=...*-#;##%*.*.*.......'&$>-%*.%.)$,'=*%%%%>&&,>-%%=*...=##-%..",
+"*#>+$+&;=.*.%-'>;%.*.='$$+&>=..='$$+&>=*..=#!)>-....*.*.*...->$$++++&#*.*.*.*...*.*.....*..%;)$+>-*.%=;,$&!#%.....*.*...!$+,;=%--%&+$!--;';%,++$,'#;'-...#)&;=..",
+"=',@$++)-%.*='$+!#=..='$$+$!-%.='$+@+!#%..->$+!-%.%---==---.#)@++@@+$#...............*.....*;)+@!#..=;,+$++!-%.%%%**%.*.)+@$'-;>)=&@+,;')&,=&$++$>!&$;*.%#,$>-..",
+"=>&@&+$,#**#')+@,!;%.='&$+$>-%.='&+@+)#%.%#!+&'=..#>)!'')!'=;,@++@@$,-...%---.*...*.....*..*->+@)#%.->&@$++,#*=#;;;;;-*.>$@$>',++#)@+,>,+$)-!$@+&)$$&#..%',$>-..",
+"*;!+$++>-*=>$$+@++,-.='&@+&>-..=>$+++,#*..='!'#%..;$@+)!@+$##,@+@@@$)-..-;!);%.......*.....*#!+@,;%.=>&@&++,#*#)&,,$,>#*>$@$),$+&#)@+$,$+&!-&$+++$+$!-.%#!+@!#..",
+".-;)&,'#*.-!@@@@@@$#.=>@++$!-%.->@$++)#%..%%-=*...;&@+,)+@$##>+@@@@$)-.%-!+@>-%.*.*.....*...#)+@&'=.=',@$++!-.;$@@$++&'=,+@+$+++,#$@@++@@+,#&@@++@+$>%%#>&@@!#%.",
+".*%#''-%..%',&+@$&!-.%'&$$,'=..=;&&$,'%%....*.....;)@+,)$@$#=;)&+@@&)-.*-)+@>#......%%%....*#)$$&'-.=;)+++&>#*-)$@+++@,#)$+++@@+,#$+@@@@++&#!++++@+$>%='$++$>#%.",
+"...*=%*..*%-'!$@,>#%.%-'>>;-...%-;'';=%...*...*...#!@+$&+@$;.=;!+@@$)-..=;!);=.....-;;#%*..%-;>>'#%.=>&@@@$,#%->&@@++@&#;!,$@+@@,#>&$+$$++&#;!&+@+@+>=-!+@$,,>#*",
+".*........*=>,$+&!;%..*====.*...*===%...........*.#!@@+$@@+;.*#>+@@$)-...%--=..*.*%;&+>#%....==-%%..=;)+++$!-.#)$@+++@,##!&@++@@,#>$+$)&@+,-#!$@++@+!--!@+$&+,>%",
+"....*.*...='&$$$$&>-..................*...*.*.....#!@@@@@@+'%=>,+@@+$#*.....*....%-)+@&;%........*..*=#'>>;#=.;&@@$++&>=#&++++@@$#,@$,)++$,-'$++++@+,-->+@+$@&>%",
+".*......*.=>@@@@@@+#*.....*...*...............*...#!@+&)!!>-*#,+@@@@$;...........*#,+@$'%..*.........*%===%*..#)$),&,>#*#)$&&$+@$#)$,>)+++,#'$$&&$@+,-%;)+@@@,;%",
+"..........%;>))))!>%..*.....*...*.*..*.*..........->+$!#%%%.*->&$$$$&#.*....*....%#)++,;%....*...*............=#;;;;#-%.='>''>&$,-'';;>&&&)=#>'''!$&>%.=;>!!!;=*",
+"..*.*.*.*.*%-#####=%....*.................*.*...*.%;)>#%.....%-;'>>'#%...*....*...%',&'-.*.........*.......*.*.**%%%%...*====-#;#*===%-;;;#%%==%=#;;-*..*-##-=*.",
+".%-;#=*......%-#;-*.*.%-;;#%.*..%=##-%.*.....%......%#''#%*...%=---==%.%%-####-%.%-;;=*....*.%=;;-%..*%-;;-*...%=####=*..*-;;=*.......%#;#=...%#'>;=.*.*=#----%.",
+".='$,;=**...*->)$;=..%->&+'-...-#!)!!#%..%--#--=...*-!$$!-%..*-'!!>>'=%=;!&,&)>=*=;&)>-%....%-'&$'=..%#>+&>-%.*-'&!))'-..=',,'-**....=#>$!#%.*->&+);%.*->)!>,>#%",
+".=>&$&;%..*%-'&$&;%..='$++,#%.%#)++++>-.%-'))>$#=*.=;,$$,#%..='&&$$&$#-!,++++++-%#>&@$!;-*%-'!++&>-%%#!$+@$>#.=',+&$$,;%*-'&$&'#%.*%=;)&$!#%.='&+++>#*=;,$$&$&>=",
+"*#!&++>-..*-',++)#%.*#!$++$;=.='&++++>-%*#)+$&&'%.%#!&++);%..->@@@@@@;;$++$$+++;#)$$++$$'%#)&$++$&>%#)$++++$>=;,$++++$>=*#)&++&!;%*->)$+$,'%*;,$+$+&>%='&++$+$,-",
+"=;&$++);%.%;,$++);%.='&+++&'=.='$+++&'=.='&$+$&'=.=;&$++,;%.%-!+@@$&@;'$@$>!&$$;'+@@@@@@,-;+@@@@@@,-;$@@@@@@,-'$@@@@@@,-='$+@@+$)=%;$+@@+$)=='$+@+@+,-='$+@@@$)-",
+"*;$+@@$>=.%;$+@@$>-.=;$+@@$>-.='$+@@$>=.=;$+@@$>=.=;$+@@$>=.*#!@@@++&#>+@,'#>!)=#,$@&&+@)--,$@&&+@)-#,$@&&+@)-;,$@&&+@,-*#)&+@$,>=%#)&+@$,>=%#)&+@$,>=*-')+@&!;%",
+"*->$+@+!#.%->$+@+!#*%->$+@+!#.%=>$+@+!#.%#!$+@+!#%*->$+@+!#.=',@@@@@,#>+@);=-##%#)$@&$++>=#)$@&$++>-#)$@&$+$>=#)$@&$+$>=.=#!+@,'-..=;!+@,'-%.=#!+@,'-*.%->$@);=.",
+"%#)++$@,'%*#!++$@,'%*#)$+$@,'%%#)++$@,'%*#,++$@,'%%#)++$@,'%#)$@@@@+,->+@,'#;;#%#)$@+@+);%#)$@+@+);*#)$@+@+);%#)$@+@+);*.*=>+@,#%...->$@);%...=>$@);%...=>$@)#*.",
+"='$++$@$,-='$++$@$,-='$++$@$,-='$++$@+,-%'$++$@$,-='$++$@+,-;&+@@@+$!#>$@+!),&,-#)$@+@+,>=#)$@+@+,>=#)$@+@+,>=#)$@+@+)>=.%->$@);=*.%->+@);%*.%->$@);%*..->$@);%.",
+"#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;#)@@@@@@$;>+@$++$&+;;&+@@@@@&#;,$@&$+$+#;,$@&$$$+#;,$@&$$$+#;,$@&$$$+#.-')+@&>#*.-')+@&>#*.-')+@&>;*%-')+@&>#%",
+"'&@@+$+@+''&@@+$+@+''&@@+$+@+''&@@+$+@+''&@@+$+@+''&@@+$+@+',+@+@@@@@;-!&+@@++)-'$@@@@@@+;'$@@@@@@+;'$@@@@@@+;'$@@@@@@+;=;&+@@@$)=%;&+@@@$)=%;&+@@@$)=%;&+@@@$)=",
+"'$@@+&@@+>'$@@+&@@+>'$@@+&@@+>'$@@+&@@+>'$@@+&@@@>'$@@+&@@+>)++$+++@+;*=>&@@&'-*;&+@++++$#'&+@++++$#'&+@++++$#;&+@++++$#%;&++++$!-%;&++++$)-=;&++++$)=%;&++++$!-",
+";,$$&,$$&;;,$$&,$$&;;,$$&,&$&;;,$$&,&$&;;,$$&,$$&;;,$$&,&$&;;),,,&&&,-.%'$@$>-*.->,&&&&,>=->,&&&&,>=->,&&&&,>-->,&&&,,>=%#>,&&,)'%%#>,,,,)'%%#>,,&,)'%%#>,&&,)'%",
+"=#'';;'';==#'';;'';==#'';;'';=%#'';;'';-=#'';;'';==#'';;'';==-#######%.*-'>'#%..*-######-*%=######-*%=######-**=######-%.%-####-=%.%-####-=*.%-####-=..%--###-=*",
+".%*%%%%.....=#;;##=..*-;;-%..*...*-##=....%#';#%....=#;;##=*....***..*.............*%=--%..*-;;-%......%-##=*...%#''#%......%**.......=#;-%..*=%%........-##=*..",
+"-;'''';#%.%=;,$&&,#%.%;&&!-%....*->,,;%..%->$&!-%..=;,$&&,#%.%=#-##=*....*....*..%-;''!>#%.%;&&!-%....*->,,;%..%#>$&!-%..%-#-##=%....=;!$>-*=#';;-**.*.%-'),'#%.",
+">&+++$&!;%%;!$@+$&'%.='$+&'=.*..='&+&'=..=',@+&'=.%#>$@+$&;*.=;!>!!;-*.=-=%*=-=%%#>&++++>=.-'$+&'-%*.%-'&+$>-%*=',@+&'-%*=;!>!!'-%.%=;!&+!;%#,$$&!#**..=;&++$>#*",
+"!+@+++++!--!&+@@+&>=%=',+$)#=..=;!@+,'=.%->+$+$)#*=',+@@+);*%#>+&$$,#%%#)>;#;)>%#)$++@@@,-=;!,@$,';%=;>)@+&!;%=')+$+$&'%=')+&$$&'%=;'!$@$,>=;&+@$&>#=%*#)+++@&'%",
+")+@+$++@&#;&++$+++&-#!$+++++>=#!$+++++>=#)$@++++!=#,+@++++!=#)$@$+++!-=>$&)!,$,-'&+@++@@&##,$+$$++,-#,++$$++&-#&+@&$++&-#&+@&$++&##,$++$++&'#&+@++&,'=%;&++&@$)=",
+"!+@+&&+@+;'$@@&$+@&#'&+@$$+@&#'&+@$$+@&#'$@@$$+@&#'$@@$$+@&#'$@@$$+@&#->+@$$++&->+@$+++@+;'$@+,&+@&#'$@+,&+@&#'$@+,&+@&#'$@+,,+@&#;&+@$&+@+'#)$@++@@&#%;&+++@$)-",
+",+@@$&&++;'$@@+$+@&#>+@&!!$@+;>+@&!!+@+;>+@&!!$@+;>+@&!!$@+;>+@&!!$@+;=',+@@@&>=>+@&@+$++;'$@&>!$@,#'$@$!!$@,#'$@&!!$@,#'$@$!!$@,##>$+$&++&##)$@&&$++;=;&+@@@$,#",
+",+@+&,&++;'$@+@++@,#>+@)';&$+;>$@)';,$+;>+@);'&$+;>$@);'&$+;>+@);'&$+;*#!$@@+,'%>+@&@+$++;>$@&>!$@,#'$@&>>$@,#'$@&>!$@,#'$@&>!$@,#%#)$++@,>=#)$@&&$++;%;&++$+@$;",
+">+@$))&++;>$@$++@@,#>+@,''&++;>+@,'>&++;>+@,''&++;>+@,''&++;>+@,''&++;%;&+@+@&!=>+@@+$+@+;'$@&>!$@,#'$@&>!$@,#'$@&>!$@,#'$@&>!$@,#.=;&+@$>-*#)$@+++@$#='&++&&@+;",
+">$@$,,$+$#'$@$$+@@,#>$@$,,$@$#>$@$,,$@$;'$@$,,+@$#'$@$,,+@$#>$@$,,+@$#->$++$++&->+@@$$+@$#;$@$,,+@)-;&@$,,+@,-;$@$,,+@,-;&@$,,+@)-.*;)+@&>-.#,$@@@++,-='&++&&@+;",
+")+@+$+++)->$@+&$@@,#;,+@++++)-;,++++++)-#,$@++++)-;,+@++++)-;,+@++++)-->+$,!&+&-'$@@++++)-#)$@$+++!-#)$@$+++!-#)$@$+++!-#)$@$+++!-%-!&+@+);*'&+@+$,!;%#!+@+++@$;",
+",@@@@@+&'%>$@@,&+@!--',+@@+&'%-',+@@+&'%=',+@@+&'%-',+@@+&'%-',+@@+&'%%;!>;#'!'%;&+@@@+&'%=',@@@@$'%=',@@@@$'%=',@@@+$'%=',@@@+$'%*#)+@@@&>*'$@@+&'#%.#)@@+$@@$#",
+";!),))!'-*#>!!>'!!;%*-;!)!>;-*%-;!))!'-**-;>)!>;-**-;>)!>;-**-;!))!'-*.=--%*=--%#!&,))!'#**-;!))!>#**-'!))!>#*%-;!))!>#%*-'!))!>#%.=;>))!>#*#>)!>;=%..=;!)!!!!>=",
+"=-####-=*.*=##==--=%.%==##-=*..*==##-=%..*%-##-=*..*%-##-%%..*==##-%%...*%...*..=-#;##-=...*=-###=%...=-##-=%..*=-###=*...=-##-=*..*==##-=*.*=##-%*...*=-##-##=*",
+"..%--%........%==%.....%=-%.....*.***...............*=##=*........................=--%........%=-=*....%=-%...............%--%...*....%=-=%....%=-%.............",
+".%;!>#%.*...%%#')#%...=#>!;%.*.*=#;;;=%...%%%=%..*..=')&;=............*....*..*..%;!>#%*.*...*=;)'-**.%->!;=....%=%=%%..*%;!>#%......*=;)'-*..%#>!#=..*.%=%==%..",
+"*='&&!#%....%#!,&;=*.%#>&$!#%.%-'),,)'-*.=#;;;;-%..%-)$+>#%.*.%.*.%.*...*.%.%...%='&&!#*.....=;)$!#*..-'&$);%*.=#;;#;#=%*='&&!#%.*...=;!$!#%.*#>&$>#%..=#;;;;-%.",
+".=;&+$>-.*.%->$+,;%.*='&@@&'=.%;,+@@+!#*%-!,,)&;=..%;,$$,#%..-##-###=%.%=####-%..=;&+$>#%..*=;,$+>#%.%;,+@+>#*%->,,!$!;*.=;&++'=...*=;,$$>=.*='$@@&;=.%->,,)&;=.",
+"*->,$+);=.*-',$$,'=.%#)$$&+>-.='$$$+$!#.%#)&+&$>-.%->&++)'=.-'))!!))'==#')),)!;%*->,$+,>#%*-'!$+&!;%%->&$+$,'%%;)&&&$,>%.=;,$+>#...=#!$+);%.*-!&$$$'%.*#!&$&&'%.",
+"=;&+@@+>#%=;&+@@+!#*='$+@@@)#*=>$+@@@!#%='$+@@@!#%=;&+@@+!#%;$++++++&##)$+++++)-='&+@@+$)-='&+@@+$)-='$+@@@$,-->$+@+@$,-%-!$@@!#%*.-!$@@)#*.*#)$@+,;%.*#)$@+,;%.",
+"=>$++$@&>%=>$++$@&>%=>$+$$@&>%='$++$@&>%=>$+$$@&>%='$+$$@$>*'&++@++$@;'$@+$+@@,##!@@+$+@$;#)@@+$+@$;#!@@+$+@$##)@@+$+@$#.=',+@)#*..=',+@)#%..-',+@)#*..->&+@);%.",
+"->$+++@$)-=>$+++@$)-->$+$+@$)-->$+++@$)-->$+$+@$)-->$+++@$)-'&++@++$@;>+@&!)&$!-#)@@+$+@+;;,@@+$+@+;#)@@+$+@+;;,@@+$+@+;.*-!+@)#%..%#>+@)#*..%#!+@)#%..%#>+@)#*.",
+"#)++++@$)-#)++++@$)-#)++++@$)-#)++++@$)-#)++++@$)-#)++++@$)-)+@+@@@@@;>+@&)),&!-;,@@@@@@$;;,@@@@@@$;;,@@@@@@$;;,@@@@@@$;.%->+@);%..*->+@);%*.*->+@);=..*#>$@);%.",
+"#,@+&&@$,#;,@+&&@$,-#,@+&&@$,-#,@+&&@$,-#,@+&&@$,-#,@+&&@$,#&++&@@+++;'&+@+++@$#;,@@@+++$;#,@@@+++$;#,@@@+++$;#,@@@+++$;*-')+@&>#*%-')+@,>#**-')+@,>#*%-')+@,>#%",
+"#,@@@@@@$##,@@@@@@$##,@@@@@@&##,@@@@@@$##,@@@@@@&##,@@@@@@$#&+@@@@@@@;-',$@@+$!--!@@@@@@$;#!@@@@@@$;#!+@@@@@$;-!@@@@@@$;%;&$@@+$)=%;&$@@+$)=%;&$@@+$)=%;&$@@+$)=",
+"#>$+++++&##>$+++$+&#->$+++$+&#->$+++$+&##>$+++$+&#->$+++$+&#>$++$$++,#.='&@@&'-*=;!&+++&)-=;)$+++&!-%;!&+++&!-=;!&+++&!-%;&$+++$)=%;&$+++$)=%;&$+++$)-%;&$+++$)-",
+"%;!,&&&,>=%#),&&,,>==;),&&,,>==;),&&,,>=%;),&&,,>==;),&&,,>=;!,&!)&,;%.='$@+!#*..=#>,&,>;%.=;!&&,>;%.=#!,&,>#%.=#>,&,>;%%#>,&&&)'%%#>,&&&)'%%#>,&&&)'%%#>,&&&)'%",
+".=-##;##=%.==#####=%.==#####=%.==#####=**==#####=*.==#####=*%=##-###=..%#'!>#%....*=###-%...%-###=%...%=###-%...*=###-%..%-###;#=*.%-###;#=*.%-#;;##=*.%-#;###=*",
+"*-#####-=....====%....%==%.........=%=*....=##-*.....%=--%%.*.................*..........*.%%=%*...*....%-=%.....%=-=.................*%==**=###=...............",
+"->),,),!;%.%-;>>>#=..%#''#=......%-;>;=%..=;!)>#**..=#>!>'#*..%%.%%..*...*%%....*.........*=;>;=%......=;>!#%.*.=;>>;=.*..*%%.%%.*..*%=;>;=*#!,!;=...*...%*%*%..",
+";&@@@@@$)=%-'&$$$!#%.=>&$!#%*.*.%->,@!#*.%#)+@&'-..%#)$+&&>%.%-;####=%..%=;;-%....%%%%%%..=;)+,>#%.*.%=;,&+'-..=;)++!;=..=#;#;;-%...=-',@!;*'$@@!#=....%-#;#;#-%",
+"'$+@@@@$!-='&++@+!#%.='&++!#*...='&++!#**=>&+++!#**=>&@@+&>%%-!,&!+!;%.%='&&'=%..%-;''';#%#>,$+&>;=%=#'!$+$!;%=;!$+++!#%-')&,)+>#%=#;>&++,>=;&+@&)>;=%-#>&&!&,>-",
+";&++++@$,-;&+++++);%*->&+@$>#%%='&+@+!;%*#!$+++)'%*->$@@+,>%%#)$+$+,'%.*#)+@!#%.%#>+$+$$,->&$&$$$&;%;,$&&$++!-;,$+$$+$)=;,$$&&+$)-#,$$$$$$&'#)$@++$,'%#,$+$,++$'",
+"#,@+$$@+$#'&@++++&>==',$@@+&!-=',$@@+&!-='&+@@+&!-=',+@@+&!-='&+@@+&!-%-',+@!'-%#!&+++++$#)++&)$++>='&+$,,@+&#'&@+&&++$#'&@$,&@+&#'&++&,$@$'#)$@@@@+,#'&@+&,+@+>",
+"#!+@@@@@+;'&@@@+@+&##>@@@+@@$##>@@@+@@$##!@@@+@@$##>@@@+@@$##!@@@+@@$#-')&&&,)>='$@@+@@@)#)+@&)&@@!-;&@+,)+@$#;&@+,)+@$#'&@+,)@@$##!+@$&@+$;#)$@$&+@$;;,@@$&+@$;",
+"#,@+$$$@+;;,@@$&$@$##,@+&&$@+;#,@+&&$@+;;,@+&&$@+;;,@+&&$@+;#,@+&&$@+;;&+@@@@+&#>+@$+@@@,#>$@$)&+@!-#)@+,)$@$##,@+,)$@$#;,@+,)$@$#=',++$@&!-#)$@&,$++;#>$++&@$,#",
+"#,@+,)&@+;#)@+&)$@$##,@+)),@+;;,@+)),@+;;,@+)),@+;#,@+)),@+;#,@+)),@+;#!,&$$&&!->+@$@++@,#'$@$),+@!-#!@+,)&@$##)@+,)&@$;#!@+,)&@$#*=>&@@+!#*#)$@+$+@&#*#!$++@,'%",
+"#,@+&,$@$;;)@+&)$@$;#,@+&,$@$;;,@+&,$@$;#,@+&,$@$;#,@+&,$@$;#,@+&)$@$;=#')$$!'#*>$@++++@,-'$@$,&+@)-#!@+&,$@$##!@+&,$@$;#!@+&,$@$;*->&+@,'%.#)$@@@@+)-.='&+@$>-.",
+"#!+@+$++$#'&@@$&+@+'#)+@+$++$##!+@+$++$##!+@+$++$##!+@+$++$##!+@+$++&#.*#)++!-%.>$@@++@+!-#,++$+@@&#=>$++$+@+'->$++$+@+'=>$++$+@+'=;&+@@)#*.#,$@&&,!;%*#!$+@,;=.",
+"='&+@@@$,='+@@+&@@@>='&+@@@$)-='&+@@@$)-='&+@@@$)-='&+@@@$)-='&+@@@$)-.*=>&$'=..>$@@@@+&;%->&@@@@@$#%#)+@@@@@>%#!$@@@@@>%#!$@@@@@>=>+@@@!#..'$@@+&'#%.='+@@@!#%.",
+"*-'!)))>;%#>))!!))!#%-'!)))>;%*-'!)))>;%*-'!)))>;%%-'!)))>;%*-'!),)>#%..*-;;-%..!$+,,)!'#**-'!))))>-*=;>))))!#.=;>))))!#.=;>),))!#='$++$'-*.#&++$,#*..='$++$'=..",
+".*=-###=%.%=###-##-%.*==###-%..*=-###=%..*==###=%..*=-###-%.**=-###=%%..**=%%.*.#''';#-=*..*=#####=*..%-####-%..*=####-%..%-#####%*-'>>'-*..-;>>';=%..*-'>>'-*..",
+"..........=--%*..................***.*............%-;'''';#*.....%=*...%=###-=*....%-#=*........*............*.........*............*%*%%.*.#';#-%*.............",
+"....%%..*.;)>'=%...*.........*=#;#;;;#=%..%==%....=>$$$$$$>=....=;'#%..=',,,,;%...*#!,;=.*....%-##=%*..=--=......**%%%...=---=%%...%#;;#;#*.)$$,'';#=%..%=*%==..",
+".*.-;;#%..!$&,;=%%%*.%-#;;-%..'),,,,,)>=*=#>>#%*..#!@@++@@,-*%%=#,&>-%*#)$+$+>=**=#>&+!#=%.*.%#>,)'%.%-'!!;-**%#;;;;;;=%-;!!!';;#%*#>,)!&'-.&@@$,,,!'-%=;'##';-%",
+"..=;,$>%..,@@+)#=;;=%#>)$,);=.!+@@@@@+&-*-!$$'=...;,@@++@@,#-;;'!++)#*%;,$@+@!#.-'),+@&!'%...='$@+,--;>,+@);-*#!,&,&&&'%;)+++$&,)#='&+$$@,'%,+@+$+@+&;%;)$!>&&'%",
+"..=>++,=..>&@@&;;)&##>&+@@+)#%'),&@+&!'%.-!$+>-*..',@@@@@@,#',&,,++&'%#>&$@&@,'%;&++@@++&#..%#!$+$>=',&$++,,>-'$@@@@@@!='+@@@@@@@#;)$+$$@&!-',$@$$@@$;=;,@&,@+,-",
+"*.='&+$#%.;)@+&>!+$#'&@++@++)-!&&&@+,!'-%-!$+>-%..)+@@@@@@$;>++++@@+>=!&+@@+@$$#>$@@@@+@+;..='$+@$>%>++@@@++$;'&@+$$+@,-;)$+@@+$&#!$@@@+@+$;'&+@&&++&#%#)@&$@@&#",
+".*-')++;%.#>++$)&@,#>@+$&+++$#&+$+@@$$&'*-!$+!#...!++++@@@$#'&$++++@,#&$+@@+@+$#>+@++@&+$;..->+@@$>%!++++@+$&;',@+),+@)#=#>,++&>;=',$++$@$&#>$@@,)$+,-%#>+@@$$!-",
+"%#'),$+>-.%'&++&&+>=!@+&,++++;)$$$@@$$&'*-!$+!#.*.'$+++@@@&#=;)$+$$+&#)&+@@$@$&#>+@++@$+$;*.->$+@$)->++$+@+&>=;,@$!,+@)-.%->$+&'=.->&+$$@&!-)+@@,)&+&#*->&@@&)#%",
+"->$+&$+,;%*->$++,>#%!@+&)$+++>#;>,@$)>;=.->+@)#%..;)@@++@+!-.='&+$,)&-#',$@&@&!=>$@++@+@$#%=-',+@@$#'$@+$@+);%;,@$!,+@,#..%#&+&'=.=;&+$$@&>%)$$@&,&+&#=;!$@@,'-.",
+"',@+&&++>-.%#)+@,'-*!@+$)$+++>*=;)@$!;=..='$@)'=..#!@+$&++>%.*-!++,'#%*#)$@&@$)=;&@++@&&,##'>!,+@@&#;,@+$+@,>=;,@+,&+@)#..*->$$>#%*;&+$$@&>%#')+$&$+&-;)&@@@&!;%",
+"!+@@@@@+$'..='$+@)'%',@+$&+@$;.*#!@+&>=%.%;$@+!;=.->+++$,>#%..=;,$&>#**-!&@,$@$#-'!,+@,>;%)$+@@@@+,#-!+@+$++&##,@@+@@@,-*..=;&+$>=*;&+++@,>%%-'&@@@$>=)+@@&+@$>-",
+"!@+$$++@+'..*=')$@,#-')$+$&,>-.*-!+@$>=%.*->,@+)-%%;,+@&>#=....=;&$&;**->&+!)$$#%=#>$@!-%%!$++&&&$&-=;,$&),++>#!$&,,+@!-....=>$+&#*#)$@+@,'*.%->&$$);%!$$,!!&++;",
+"'$&))&&$&;..**-;,$&#*=;!&&>;-*..%;&&);=...%#>$$)#**->&$)#%.*....=>))#*.%#>);;)&#..=;&$>%..',&&)>>)!=%=;!>;',&'=')!;',&'%*...%;)&)-.=>,&$+);*..=#>,);=.'!);-#>&&#",
+"-##-#;;;#=....*=#'>=.*%-;#-**...*=#;#=.....%-;)'=..%=#;#%....*...=##=...%=-==-#%..*-;>#%..=#;#-==--*.*===%=##=*=-===##=*..*..%-#-*.*=#'>);=....%=##=..=-=%*%=##%"};
index afeefc86899b57462b8366590e9929d33e3fd919..bdbe44684a79929531e4a8658e04342a276cd443 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997, 1998 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997, 1998, 2001 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -190,6 +190,14 @@ jigsaw_init(Display *dpy, Window window)
   x_border = (xgwa.width  - (width  * GRID_WIDTH)) / 2;
   y_border = (xgwa.height - (height * GRID_WIDTH)) / 2;
 
+  if (width < 4 || height < 4)
+    {
+      fprintf (stderr, "%s: window too small: %dx%d (need at least %dx%d)\n",
+               progname, xgwa.width, xgwa.height,
+               GRID_WIDTH * 4, GRID_HEIGHT * 4);
+      exit (1);
+    }
+
   if (!state)
     state = (XPoint *) malloc(width * height * sizeof(XPoint));
   gc = XCreateGC (dpy, window, 0, &gcv);
index 7e8839265c602c46ed0ffe957c49f8ed30b13c27..b7004851d85aab09641235987fc35539dfc3b7be 100644 (file)
@@ -50,7 +50,7 @@ char *progclass="Kumppa";
 char *defaults [] ={
        ".background:           black",
        "*speed:                0.1",
-       "*delay:                0",
+       "*delay:                10000",
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
         /* leave this off by default, since it slows things down.  -- jwz. */
         "*useDBE:              False",
index ea872be7190d1b79ca7545c4215c0e45629324c3..0584dd9581906f3281781ab5df9843bac311e13f 100644 (file)
@@ -216,7 +216,8 @@ char *defaults [] = {
 };
 
 XrmOptionDescRec options [] = {
-  { "-random",         ".random",      XrmoptionSepArg, 0 },
+  { "-random",         ".random",      XrmoptionNoArg, "True" },
+  { "-no-random",      ".random",      XrmoptionNoArg, "False" },
   { "-delay",          ".delay",       XrmoptionSepArg, 0 },
   { "-ncolors",                ".ncolors",     XrmoptionSepArg, 0 },
   { "-offset",         ".offset",      XrmoptionSepArg, 0 },
index 1853b93760d0f9b36aadd429a06374fd37db7305..621a0bd066ed2534fd2582b6d969d6ae71465776 100644 (file)
@@ -32,7 +32,6 @@ static const char sccsid[] = "@(#)mountain.c  4.04 97/07/28 xlockmore";
 # define mountain_opts xlockmore_opts
 # define DEFAULTS      "*delay: 0 \n"          \
                                        "*count: 30 \n"         \
-                                       "*cycles: 100 \n"       \
                                        "*ncolors: 64 \n"
 # define SMOOTH_COLORS
 #include "xlockmore.h"         /* in xscreensaver distribution */
index 16bd267040e822e70fcb58088f1cedab6b3f7451..3c058c6dd806d8020ba3ec8247386df7a9c68d5b 100644 (file)
@@ -1,4 +1,4 @@
-/* nerverot, nervous rotation of random thingies, v1.3
+/* nerverot, nervous rotation of random thingies, v1.4
  * by Dan Bornstein, danfuzz@milk.com
  * Copyright (c) 2000-2001 Dan Bornstein. All rights reserved.
  *
@@ -162,7 +162,7 @@ static int itersTillNext;
 
 
 /*
- * blot setup stuff
+ * generic blot setup and manipulation
  */
 
 /* initialize a blot with the given coordinates and random display offsets */
@@ -231,6 +231,58 @@ static void randomlyReorderBlots (void)
     }
 }
 
+/* randomly rotate the blots around the origin */
+static void randomlyRotateBlots (void)
+{
+    int n;
+
+    /* random amounts to rotate about each axis */
+    FLOAT xRot = RAND_FLOAT_PM1 * M_PI;
+    FLOAT yRot = RAND_FLOAT_PM1 * M_PI;
+    FLOAT zRot = RAND_FLOAT_PM1 * M_PI;
+
+    /* rotation factors */
+    FLOAT sinX = sin (xRot);
+    FLOAT cosX = cos (xRot);
+    FLOAT sinY = sin (yRot);
+    FLOAT cosY = cos (yRot);
+    FLOAT sinZ = sin (zRot);
+    FLOAT cosZ = cos (zRot);
+
+    for (n = 0; n < blotCount; n++)
+    {
+       FLOAT x1 = blots[n].x;
+       FLOAT y1 = blots[n].y;
+       FLOAT z1 = blots[n].z;
+       FLOAT x2, y2, z2;
+
+       /* rotate on z axis */
+       x2 = x1 * cosZ - y1 * sinZ;
+       y2 = x1 * sinZ + y1 * cosZ;
+       z2 = z1;
+
+       /* rotate on x axis */
+       y1 = y2 * cosX - z2 * sinX;
+       z1 = y2 * sinX + z2 * cosX;
+       x1 = x2;
+
+       /* rotate on y axis */
+       z2 = z1 * cosY - x1 * sinY;
+       x2 = z1 * sinY + x1 * cosY;
+       y2 = y1;
+
+       blots[n].x = x2;
+       blots[n].y = y2;
+       blots[n].z = z2;
+    }
+}
+
+
+
+/*
+ * blot configurations
+ */
+
 /* set up the initial array of blots to be a at the edge of a sphere */
 static void setupBlotsSphere (void)
 {
@@ -266,8 +318,6 @@ static void setupBlotsSphere (void)
     }
 }
 
-
-
 /* set up the initial array of blots to be a simple cube */
 static void setupBlotsCube (void)
 {
@@ -322,20 +372,26 @@ static void setupBlotsCube (void)
 
     scaleBlotsToRadius1 ();
     randomlyReorderBlots ();
+    randomlyRotateBlots ();
 }
 
-
-
 /* set up the initial array of blots to be a cylinder */
 static void setupBlotsCylinder (void)
 {
     int i, j, n;
-
-    /* derive blotsPerEdge from blotCount, but then do the reverse
-     * since roundoff may have changed blotCount */
-    int blotsPerEdge = requestedBlotCount / 32;
     FLOAT distBetween;
 
+    /* derive blotsPerEdge and blotsPerRing from blotCount, but then do the
+     * reverse since roundoff may have changed blotCount */
+    FLOAT reqRoot = sqrt ((FLOAT) requestedBlotCount);
+    int blotsPerRing = ceil (RAND_FLOAT_PM1 * reqRoot) / 2 + reqRoot;
+    int blotsPerEdge = requestedBlotCount / blotsPerRing;
+
+    if (blotsPerRing < 2)
+    {
+       blotsPerRing = 2;
+    }
+
     if (blotsPerEdge < 2)
     {
        blotsPerEdge = 2;
@@ -343,15 +399,15 @@ static void setupBlotsCylinder (void)
 
     distBetween = 2.0 / (blotsPerEdge - 1);
 
-    blotCount = blotsPerEdge * 32;
+    blotCount = blotsPerEdge * blotsPerRing;
     blots = calloc (sizeof (Blot), blotCount);
     n = 0;
 
     /* define the edges */
-    for (i = 0; i < 32; i++)
+    for (i = 0; i < blotsPerRing; i++)
     {
-       FLOAT x = sin (2 * M_PI / 32 * i);
-       FLOAT y = cos (2 * M_PI / 32 * i);
+       FLOAT x = sin (2 * M_PI / blotsPerRing * i);
+       FLOAT y = cos (2 * M_PI / blotsPerRing * i);
        for (j = 0; j < blotsPerEdge; j++)
        {
            initBlot (&blots[n], x, y, j * distBetween - 1);
@@ -361,10 +417,9 @@ static void setupBlotsCylinder (void)
 
     scaleBlotsToRadius1 ();
     randomlyReorderBlots ();
+    randomlyRotateBlots ();
 }
 
-
-
 /* set up the initial array of blots to be a squiggle */
 static void setupBlotsSquiggle (void)
 {
@@ -426,8 +481,6 @@ static void setupBlotsSquiggle (void)
     randomlyReorderBlots ();
 }
 
-
-
 /* set up the initial array of blots to be near the corners of a
  * cube, distributed slightly */
 static void setupBlotsCubeCorners (void)
@@ -451,10 +504,9 @@ static void setupBlotsCubeCorners (void)
     }
 
     scaleBlotsToRadius1 ();
+    randomlyRotateBlots ();
 }
 
-
-
 /* set up the initial array of blots to be randomly distributed
  * on the surface of a tetrahedron */
 static void setupBlotsTetrahedron (void)
@@ -511,9 +563,78 @@ static void setupBlotsTetrahedron (void)
            initBlot (&blots[n + c], x, y, z);
        }
     }
+
+    randomlyRotateBlots ();
+}
+
+/* set up the initial array of blots to be an almost-evenly-distributed
+ * square sheet */
+static void setupBlotsSheet (void)
+{
+    int x, y;
+
+    int blotsPerDimension = floor (sqrt (requestedBlotCount));
+    FLOAT spaceBetween;
+
+    if (blotsPerDimension < 2)
+    {
+       blotsPerDimension = 2;
+    }
+
+    spaceBetween = 2.0 / (blotsPerDimension - 1);
+
+    blotCount = blotsPerDimension * blotsPerDimension;
+    blots = calloc (sizeof (Blot), blotCount);
+
+    for (x = 0; x < blotsPerDimension; x++)
+    {
+       for (y = 0; y < blotsPerDimension; y++)
+       {
+           FLOAT x1 = x * spaceBetween - 1.0;
+           FLOAT y1 = y * spaceBetween - 1.0;
+           FLOAT z1 = 0.0;
+
+           x1 += RAND_FLOAT_PM1 * spaceBetween / 3;
+           y1 += RAND_FLOAT_PM1 * spaceBetween / 3;
+           z1 += RAND_FLOAT_PM1 * spaceBetween / 2;
+
+           initBlot (&blots[x + y * blotsPerDimension], x1, y1, z1);
+       }
+    }
+
+    scaleBlotsToRadius1 ();
+    randomlyReorderBlots ();
+    randomlyRotateBlots ();
 }
 
+/* set up the initial array of blots to be a swirlycone */
+static void setupBlotsSwirlyCone (void)
+{
+    FLOAT radSpace = 1.0 / (requestedBlotCount - 1);
+    FLOAT zSpace = radSpace * 2;
+    FLOAT rotAmt = RAND_FLOAT_PM1 * M_PI / 10;
+
+    int n;
+    FLOAT rot = 0.0;
+
+    blotCount = requestedBlotCount;
+    blots = calloc (sizeof (Blot), blotCount);
+
+    for (n = 0; n < blotCount; n++)
+    {
+       FLOAT radius = n * radSpace;
+       FLOAT x = cos (rot) * radius;
+       FLOAT y = sin (rot) * radius;
+       FLOAT z = n * zSpace - 1.0;
+
+       rot += rotAmt;
+       initBlot (&blots[n], x, y, z);
+    }
 
+    scaleBlotsToRadius1 ();
+    randomlyReorderBlots ();
+    randomlyRotateBlots ();
+}
 
 /* forward declaration for recursive use immediately below */
 static void setupBlots (void);
@@ -598,6 +719,10 @@ static void setupBlotsDuo (void)
 
 
 
+/*
+ * main blot setup
+ */
+
 /* free the blots, in preparation for a new shape */
 static void freeBlots (void)
 {
@@ -620,12 +745,10 @@ static void freeBlots (void)
     }
 }
 
-
-
 /* set up the initial arrays of blots */
 static void setupBlots (void)
 {
-    int which = RAND_FLOAT_01 * 8;
+    int which = RAND_FLOAT_01 * 11;
 
     freeBlots ();
 
@@ -650,14 +773,19 @@ static void setupBlots (void)
            setupBlotsTetrahedron ();
            break;
        case 6:
+           setupBlotsSheet ();
+           break;
        case 7:
+           setupBlotsSwirlyCone ();
+           break;
+       case 8:
+       case 9:
+       case 10:
            setupBlotsDuo ();
            break;
     }
 }
 
-
-
 /* set up the segments arrays */
 static void setupSegs (void)
 {
index fa3203cdeff135a263514bbea2ae71166cb19c43..0bf10d82899aee773bee6174e58bc8f9910b1bbf 100644 (file)
@@ -620,7 +620,7 @@ char *defaults [] = {
 #else
   "*mode:              string",
 #endif
-  "*program:           " ZIPPY_PROGRAM,
+  "*program:           " FORTUNE_PROGRAM,
   "noseguy.font:       -*-new century schoolbook-*-r-*-*-*-180-*-*-*-*-*-*",
   0
 };
index fac5235db969bb6c532f6e7e9ae7d02d7c6a8fab..8298cf2551ee67f265563eee839493923b346fbc 100644 (file)
@@ -779,7 +779,7 @@ char *defaults [] = {
   "*ticks:                20",
   "*delay:                50000",
   "*cursor:               333",
-  "*program:            " ZIPPY_PROGRAM,
+  "*program:            " FORTUNE_PROGRAM,
   "*relaunch:             5",
   0
 };
index e46e93fa97be4cb7247726d7eaafcc07c1c0b09c..c2297636dda26fabfc2fc96600013178a340a41d 100644 (file)
@@ -105,6 +105,13 @@ launch (int xlim, int ylim, int g,
   p->fuse = ((((random () % 500) + 500) * abs (p->dy / g)) / 1000);
   p->primary = True;
 
+  /* cope with small windows -- those constants assume big windows. */
+  {
+    int div = 1000000 / ylim;
+    if (div > 1)
+      p->fuse /= div;
+  }
+
   if (! mono_p)
     {
       hsv_to_rgb (random () % 360, 1.0, 1.0,
index eded66ee4d73c3f224dd9e1f9bbeb419d1c9f633..be3268387b30ba7a93645143cf845cd80de42a9b 100644 (file)
@@ -436,12 +436,20 @@ setup_X(Display * disp, Window win)
   bigheight = xwa.height;
   visual = xwa.visual;
 
-#if 1 /* I'm not entirely sure if I need this */
+
+  /* This causes buffer_map to be 1 pixel taller and wider than orig_map,
+     which can cause the two XImages to have different bytes-per-line,
+     which causes stair-stepping.  So this better not be necessary...
+     -jwz, 23-Nov-01
+   */
+#if 0 /* I'm not entirely sure if I need this */
   if (bigwidth % 2)
     bigwidth++;
   if (bigheight % 2)
     bigheight++;
 #endif
+
+
   width = bigwidth / 2;
   height = bigheight / 2;
 
index 430fa9dfb3373464428651dd90fd56ddef1da39e..d9b0010ae85317239327d0bbbe7fd8c8ce009369 100644 (file)
@@ -1,4 +1,5 @@
-/* xscreensaver, Copyright (c) 1992, 1996, 1998 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992, 1996, 1998, 2001
+ *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -125,6 +126,8 @@ XrmOptionDescRec options [] = {
   { "-offset",         ".offset",      XrmoptionSepArg, 0 },
   { "-xsymmetry",      ".xsymmetry",   XrmoptionNoArg, "true" },
   { "-ysymmetry",      ".ysymmetry",   XrmoptionNoArg, "true" },
+  { "-no-xsymmetry",   ".xsymmetry",   XrmoptionNoArg, "false" },
+  { "-no-ysymmetry",   ".ysymmetry",   XrmoptionNoArg, "false" },
   { "-erase-speed",    ".eraseSpeed",          XrmoptionSepArg, 0 },
   { "-delay",           ".delay",               XrmoptionSepArg, 0 },
   { 0, 0, 0, 0 }
index efc906a5a3d9eecb7d7d7d6db20f29ccf36463fb..acdb181ecd25e88a43a1ea0da73a298865980f46 100644 (file)
@@ -311,9 +311,9 @@ static void setup_X (Display * disp, Window win)
        visual = xwa.visual;
 
        if (width % 2)
-               width++;
+               width--;
        if (height % 2)
-               height++;
+               height--;
 
        gcv.function = GXcopy;
        gcv.subwindow_mode = IncludeInferiors;
index e2becbe4b4ac652b34cf20aaa4667bac4e8403ac..7c11b35b04be6f5b9209b3ff63e806582a007498 100644 (file)
@@ -77,6 +77,7 @@ static XrmOptionDescRec default_options [] = {
   { "-install",        ".installColormap",     XrmoptionNoArg, "True" },
   { "-noinstall",".installColormap",   XrmoptionNoArg, "False" },
   { "-visual", ".visualID",            XrmoptionSepArg, 0 },
+  { "-window-id", ".windowID",         XrmoptionSepArg, 0 },
   { 0, 0, 0, 0 }
 };
 
@@ -86,6 +87,7 @@ static char *default_defaults[] = {
   "*mono:              false",
   "*installColormap:   false",
   "*visualID:          default",
+  "*windowID:          ",
   "*desktopGrabber:    xscreensaver-getimage %s",
   0
 };
@@ -275,9 +277,9 @@ pick_visual (Screen *screen)
 
 
 /* Notice when the user has requested a different visual or colormap
-   on a pre-existing window (e.g., "-root -visual truecolor") and 
-   complain, since when drawing on an existing window, we have no 
-   choice about these things.
+   on a pre-existing window (e.g., "-root -visual truecolor" or
+   "-window-id 0x2c00001 -install") and complain, since when drawing
+   on an existing window, we have no choice about these things.
  */
 static void
 visual_warning (Screen *screen, Window window, Visual *visual, Colormap cmap,
@@ -346,6 +348,7 @@ main (int argc, char **argv)
   Visual *visual;
   Colormap cmap;
   Bool root_p;
+  Window on_window = 0;
   XEvent event;
   Boolean dont_clear /*, dont_map */;
   char version[255];
@@ -404,7 +407,8 @@ main (int argc, char **argv)
       int i;
       int x = 18;
       int end = 78;
-      Bool help_p = !strcmp(argv[1], "-help");
+      Bool help_p = (!strcmp(argv[1], "-help") ||
+                     !strcmp(argv[1], "--help"));
       fprintf (stderr, "%s\n", version);
       for (s = progclass; *s; s++) fprintf(stderr, " ");
       fprintf (stderr, "  http://www.jwz.org/xscreensaver/\n\n");
@@ -427,7 +431,44 @@ main (int argc, char **argv)
          if (argp) fprintf (stderr, " <arg>");
          if (i != merged_options_size - 1) fprintf (stderr, ", ");
        }
+
       fprintf (stderr, ".\n");
+
+#if 0
+      if (help_p)
+        {
+          fprintf (stderr, "\nResources:\n\n");
+          for (i = 0; i < merged_options_size; i++)
+            {
+              const char *opt = merged_options [i].option;
+              const char *res = merged_options [i].specifier + 1;
+              const char *val = merged_options [i].value;
+              char *s = get_string_resource ((char *) res, (char *) res);
+
+              if (s)
+                {
+                  int L = strlen(s);
+                while (L > 0 && (s[L-1] == ' ' || s[L-1] == '\t'))
+                  s[--L] = 0;
+                }
+
+              fprintf (stderr, "    %-16s %-18s ", opt, res);
+              if (merged_options [i].argKind == XrmoptionSepArg)
+                {
+                  fprintf (stderr, "[%s]", (s ? s : "?"));
+                }
+              else
+                {
+                  fprintf (stderr, "%s", (val ? val : "(null)"));
+                  if (val && s && !strcasecmp (val, s))
+                    fprintf (stderr, " [default]");
+                }
+              fprintf (stderr, "\n");
+            }
+          fprintf (stderr, "\n");
+        }
+#endif
+
       exit (help_p ? 0 : 1);
     }
 
@@ -439,7 +480,24 @@ main (int argc, char **argv)
 
   root_p = get_boolean_resource ("root", "Boolean");
 
-  if (root_p)
+  {
+    char *s = get_string_resource ("windowID", "WindowID");
+    if (s && *s)
+      on_window = get_integer_resource ("windowID", "WindowID");
+    if (s) free (s);
+  }
+
+  if (on_window)
+    {
+      XWindowAttributes xgwa;
+      window = (Window) on_window;
+      XtDestroyWidget (toplevel);
+      XGetWindowAttributes (dpy, window, &xgwa);
+      cmap = xgwa.colormap;
+      visual = xgwa.visual;
+      visual_warning (screen, window, visual, cmap, True);
+    }
+  else if (root_p)
     {
       XWindowAttributes xgwa;
       window = RootWindowOfScreen (XtScreen (toplevel));
@@ -550,7 +608,7 @@ main (int argc, char **argv)
       XClearWindow (dpy, window);
     }
 
-  if (!root_p)
+  if (!root_p && !on_window)
     /* wait for it to be mapped */
     XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window);
 
index 69f67df6a51174671f943ebf83cd3ab3c58e6f82..e31bcf0dda9e60ba20d340c02f1c576e9ba83d5b 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1996, 1997, 1998 
+/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1996, 1997, 1998, 2001 
  * Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -48,6 +48,12 @@ init_slide (Display *dpy, Window window)
   pix_inc = get_integer_resource ("pixelIncrement", "Integer");
   border = get_integer_resource ("internalBorderWidth", "InternalBorderWidth");
 
+  /* Don't let the grid be smaller than 3x3 */
+  if (grid_size > xgwa.width / 3)
+    grid_size = xgwa.width / 3;
+  if (grid_size > xgwa.height / 3)
+    grid_size = xgwa.height / 3;
+
   {
     XColor fgc, bgc;
     char *fgs = get_string_resource("background", "Background");
@@ -140,7 +146,7 @@ init_slide (Display *dpy, Window window)
   if (delay < 0) delay = 0;
   if (delay2 < 0) delay2 = 0;
   if (pix_inc < 1) pix_inc = 1;
-  if (grid_size < 1) grid_size = 1;
+  if (grid_size < 10) grid_size = 10;
 
   gcv.foreground = fg;
   gcv.function = GXcopy;
index c80b2b0d7054657dd9e513363119fee10476d00e..1988821bd3612c32dc99aceef288711daeba2d32 100644 (file)
@@ -448,47 +448,91 @@ findNode(Bogie *bl, char *name)
 static int
 lookupHost(ping_target *target) 
 {
-
   struct hostent *hent;
+  struct sockaddr_in *iaddr;
 
-    /* Local Variables */
+  int iip[4];
+  char c;
 
-    struct sockaddr_in *iaddr;
+  iaddr = (struct sockaddr_in *) &(target->address);
+  iaddr->sin_family = AF_INET;
 
-    /* Set up the target address we first assume that the name is the
-       IP address as a string */
+  if (4 == sscanf(target->name, "%d.%d.%d.%d%c",
+                  &iip[0], &iip[1], &iip[2], &iip[3], &c))
+    {
+      /* It's an IP address.
+       */
+      unsigned char ip[4];
 
-    iaddr = (struct sockaddr_in *) &(target->address);
-    iaddr->sin_family = AF_INET;
-    if ((iaddr->sin_addr.s_addr = inet_addr(target->name)) >= 0) {
-      char ip[4];
-      ip[3] = iaddr->sin_addr.s_addr >> 24 & 255;
-      ip[2] = iaddr->sin_addr.s_addr >> 16 & 255;
-      ip[1] = iaddr->sin_addr.s_addr >>  8 & 255;
-      ip[0] = iaddr->sin_addr.s_addr       & 255;
+      ip[0] = iip[0];
+      ip[1] = iip[1];
+      ip[2] = iip[2];
+      ip[3] = iip[3];
+
+      if (ip[3] == 0)
+        {
+          if (debug_p > 1)
+            fprintf (stderr, "%s:   ignoring bogus IP %s\n",
+                     progname, target->name);
+          return 0;
+        }
+
+      iaddr->sin_addr.s_addr = ((ip[3] << 24) |
+                                (ip[2] << 16) |
+                                (ip[1] <<  8) |
+                                (ip[0]));
       hent = gethostbyaddr (ip, 4, AF_INET);
-      if (hent && hent->h_name && *hent->h_name) {
+
+      if (debug_p > 1)
+        fprintf (stderr, "%s:   %s => %s\n",
+                 progname, target->name,
+                 ((hent && hent->h_name && *hent->h_name)
+                  ? hent->h_name : "<unknown>"));
+
+      if (hent && hent->h_name && *hent->h_name)
         target->name = strdup (hent->h_name);
-        return 1;
-      }
     }
+  else
+    {
+      /* It's a host name.
+       */
+      hent = gethostbyname (target->name);
+      if (!hent)
+        {
+          fprintf (stderr, "%s: could not resolve host:  %s\n",
+                   progname, target->name);
+          return 0;
+        }
 
-    /* Conversion of IP address failed, try to look the host up by name */
+      memcpy (&iaddr->sin_addr, hent->h_addr_list[0],
+              sizeof(iaddr->sin_addr));
 
-    hent = gethostbyname(target->name);
-    if (hent == NULL) {
-      fprintf(stderr, "%s: could not resolve host %s\n",
-              progname, target->name);
-      return 0;
+      if (debug_p > 1)
+        fprintf (stderr, "%s:   %s => %d.%d.%d.%d\n",
+                 progname, target->name,
+                 iaddr->sin_addr.s_addr       & 255,
+                 iaddr->sin_addr.s_addr >>  8 & 255,
+                 iaddr->sin_addr.s_addr >> 16 & 255,
+                 iaddr->sin_addr.s_addr >> 24 & 255);
     }
-    memcpy(&iaddr->sin_addr, hent->h_addr_list[0],
-           sizeof(iaddr->sin_addr));
+  return 1;
+}
 
-    /* Done */
 
-    return 1;
+static void
+print_host (FILE *out, unsigned long ip, const char *name)
+{
+  char ips[50];
+  sprintf (ips, "%d.%d.%d.%d",
+           (ip)       & 255,
+           (ip >>  8) & 255,
+           (ip >> 16) & 255,
+           (ip >> 24) & 255);
+  if (!name || !*name) name = "<unknown>";
+  fprintf (out, "%-16s %s\n", ips, name);
 }
 
+
 /*
  * Create a target for a host.
  *
@@ -523,15 +567,29 @@ newHost(char *name)
     if (! lookupHost(target))
        goto target_init_error;
 
+    /* Don't ever use loopback (127.0.0) hosts */
+    {
+      struct sockaddr_in *iaddr = (struct sockaddr_in *) &(target->address);
+      unsigned long ip = iaddr->sin_addr.s_addr;
+      if ((ip         & 255) == 127 &&
+          ((ip >>  8) & 255) == 0 &&
+          ((ip >> 16) & 255) == 0)
+        {
+          if (debug_p)
+            fprintf (stderr, "%s:   ignoring loopback host %s\n",
+                     progname, target->name);
+          goto target_init_error;
+        }
+    }
+
     /* Done */
 
     if (debug_p)
       {
         struct sockaddr_in *iaddr = (struct sockaddr_in *) &(target->address);
         unsigned long ip = iaddr->sin_addr.s_addr;
-        fprintf (stderr, "%s:   added host %d.%d.%d.%d (%s)\n", progname,
-                 ip & 255, ip >> 8 & 255, ip >> 16 & 255, ip >> 24 & 255, 
-                 target->name);
+        fprintf (stderr, "%s:   added ", progname);
+        print_host (stderr, ip, target->name);
       }
 
     return target;
@@ -605,8 +663,8 @@ readPingHostsFile(char *fname)
        /* Get the name and address */
 
        name = addr = NULL;
-       if ((addr = strtok(buf, " \t\n")) != NULL)
-           name = strtok(NULL, " \t\n");
+       if ((addr = strtok(buf, " ,;\t\n")) != NULL)
+           name = strtok(NULL, " ,;\t\n");
        else
            continue;
 
@@ -624,7 +682,22 @@ readPingHostsFile(char *fname)
               addr = NULL;
             }
         }
-        /*printf ("\"%s\" \"%s\"\n", name, addr);*/
+
+        /* If the name is all digits, it's not a name. */
+        if (name)
+          {
+            const char *s;
+            for (s = name; *s; s++)
+              if (*s < '0' || *s > '9')
+                break;
+            if (! *s)
+              {
+                if (debug_p > 1)
+                  fprintf (stderr, "%s:  skipping bogus name \"%s\" (%s)\n",
+                           progname, name, addr);
+                name = NULL;
+              }
+          }
 
        /* Create a new target using first the name then the address */
 
@@ -672,8 +745,10 @@ delete_duplicate_hosts (ping_target *list)
               if (ip1 == ip2)
                 {
                   if (debug_p)
-                    fprintf (stderr, "%s: deleted duplicate: %s\n",
-                             progname, rest2->next->name);
+                    {
+                      fprintf (stderr, "%s: deleted duplicate: ", progname);
+                      print_host (stderr, ip2, rest2->next->name);
+                    }
                   rest2->next = rest2->next->next;
                 }
             }
@@ -757,6 +832,17 @@ subnetHostsList(int base, int subnet_width)
               (((unsigned char) hent->h_addr_list[0][2]) <<  8) |
               (((unsigned char) hent->h_addr_list[0][3])));
 
+    if (base == ((127 << 24) | 1))
+      {
+        fprintf (stderr,
+                 "%s: unable to determine local subnet address: \"%s\"\n"
+                 "       resolves to loopback address %d.%d.%d.%d.\n",
+                 progname, hostname,
+                 (base >> 24) & 255, (base >> 16) & 255,
+                 (base >>  8) & 255, (base      ) & 255);
+        return NULL;
+      }
+
     for (i = 255; i >= 0; i--) {
         int ip = (base & 0xFFFFFF00) | i;
       
@@ -841,6 +927,19 @@ init_ping(void)
     pi->targets = delete_duplicate_hosts (pi->targets);
 
 
+    if (debug_p)
+      {
+        ping_target *t;
+        fprintf (stderr, "%s: Target list:\n", progname);
+        for (t = pi->targets; t; t = t->next)
+          {
+            struct sockaddr_in *iaddr = (struct sockaddr_in *) &(t->address);
+            unsigned long ip = iaddr->sin_addr.s_addr;
+            fprintf (stderr, "%s:   ", progname);
+            print_host (stderr, ip, t->name);
+          }
+      }
+
     /* Make sure there is something to ping */
 
     if (pi->targets == NULL) {
@@ -1396,6 +1495,9 @@ init_sonar(Display *dpy, Window win)
                      si->sweep_colors, &si->sweep_segs,
                      False, True, False);
 
+    if (si->sweep_segs <= 0)
+      si->sweep_segs = 1;
+
     /* Done */
 
     return si;
index 8c76fc74e7faa698e036d0f5f0384f83b3fc03f3..209a67c80351a7d6b5500d41db0597116342b87d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * spotlight - an xscreensaver module
- * Copyright (c) 1999 Rick Schultz <rick@skapunx.net>
+ * Copyright (c) 1999, 2001 Rick Schultz <rick@skapunx.net>
  *
  * loosely based on the BackSpace module "StefView" by Darcy Brockbank
  */
@@ -93,6 +93,10 @@ init_hack (Display *dpy, Window window)
   radius = get_integer_resource ("radius", "Integer");
   if (radius < 0) radius = 125;
 
+  /* Don't let the spotlight be bigger than 1/4 of the window */
+  if (radius > xgwa.width  / 4) radius = xgwa.width  / 4;
+  if (radius > xgwa.height / 4) radius = xgwa.height / 4;
+
   /* do the dance */
   gcv.function = GXcopy;
   gcv.subwindow_mode = IncludeInferiors;
index 698aad34707c87a760aea41635a09e65e8c88c9a..8b7ee7ed6f64b3cfad0a012f5fc552eeb2bad99a 100644 (file)
@@ -801,7 +801,8 @@ XrmOptionDescRec options [] = {
   { "-wobble",         ".wobble",      XrmoptionSepArg, 0 },
   { "-cycle",          ".cycle",       XrmoptionSepArg, 0 },
   { "-mag",            ".mag",         XrmoptionSepArg, 0 },
-  { "-minutes",                ".minutes",     XrmoptionSepArg, 0 },
+  { "-minutes",                ".minutes",     XrmoptionNoArg, "True" },
+  { "-no-minutes",     ".minutes",     XrmoptionNoArg, "False" },
   { "-delay",          ".delay",       XrmoptionSepArg, 0 },
   { "-fast",           ".fast",        XrmoptionSepArg, 0 },
   { "-colcycle",       ".colcycle",    XrmoptionSepArg, 0 },
index fdaa563c6f55402f778209c1f13de899e3d2498d..abfc9378b0e5af3acfa6441d2bb437597784ab60 100644 (file)
@@ -384,7 +384,10 @@ pickbank (void)
        case ' ':
          bank[++bankt - 1] = thr;
          break;
-       case '1'...'9':
+       case '1': case '2': case '3':
+        case '4': case '5': case '6':
+        case '7': case '8': case '9':
+
          bank[++bankt - 1] = ch - '0';
          if (bank[bankt - 1] > threads)
            bankt--;
@@ -405,7 +408,10 @@ pickbank (void)
          ch = readkey ();
          switch (ch)
            {
-           case '1'...tmodes:
+           case '1': case '2': case '3':
+            case '4': case '5': case '6':
+            case '7': case '8': case '9':
+
              {
                int c;
                for (c = 1; c <= threads; c++)
@@ -820,7 +826,9 @@ vermiculate_main (void)
                            ch = readkey ();
                            switch (ch)
                              {
-                             case '1'...tmodes:
+                              case '1': case '2': case '3':
+                              case '4': case '5': case '6':
+                              case '7': case '8': case '9':
                                thread[++threads - 1].tmode = ch - '0';
                                break;
                              case 'R':
@@ -849,7 +857,9 @@ vermiculate_main (void)
                          ch = readkey ();
                          switch (ch)
                            {
-                           case '1'...'9':
+                            case '1': case '2': case '3':
+                            case '4': case '5': case '6':
+                            case '7': case '8': case '9':
 /* Careful!  The following macro needs to be at the beginning of any
 block in which it's invoked, since it declares variables: */
 #define forallinbank(LDP) linedata *LDP; int bankc; \
@@ -884,7 +894,10 @@ block in which it's invoked, since it declares variables: */
                                {
                                  switch (ch)
                                    {
-                                   case '0'...'9':
+                                    case '0':
+                                    case '1': case '2': case '3':
+                                    case '4': case '5': case '6':
+                                    case '7': case '8': case '9':
                                      L->tslen++;
                                      L->turnseq[L->tslen - 1] = ch - '0';
                                      if (oldch == '-')
@@ -924,7 +937,9 @@ block in which it's invoked, since it declares variables: */
                              {
                                switch (ch)
                                  {
-                                 case '1'...tmodes:
+                                  case '1': case '2': case '3':
+                                  case '4': case '5': case '6':
+                                  case '7': case '8': case '9':
                                    L->tmode = ch - '0';
                                    break;
                                  case 'R':
@@ -970,7 +985,9 @@ block in which it's invoked, since it declares variables: */
                          {
                            forallinbank (L) switch (ch)
                              {
-                             case '1'...'9':
+                              case '1': case '2': case '3':
+                              case '4': case '5': case '6':
+                              case '7': case '8': case '9':
                                L->circturn = 10 - (ch - '0');
                                break;
                              case 'R':
@@ -1032,7 +1049,9 @@ block in which it's invoked, since it declares variables: */
                case '\33':
                  halted = True;
                  break;
-               case '1'...tmodes:
+                case '1': case '2': case '3':
+                case '4': case '5': case '6':
+                case '7': case '8': case '9':
                  {
                    int c;
                    for (c = 1; c <= thrmax; c++)
index 2540fd9f1acb0632d3b09863b3db56185a251125..d64bdd519f5f336cb60b0514fc90217c31a320f7 100644 (file)
@@ -187,7 +187,8 @@ char *defaults [] =
 XrmOptionDescRec options [] =
 {
     { "-advance", ".advance", XrmoptionSepArg, 0 },
-    { "-circles", ".circles", XrmoptionSepArg, 0 },
+    { "-circles", ".circles",   XrmoptionNoArg, "True" },
+    { "-no-circles",".circles", XrmoptionNoArg, "False" },
     { "-density", ".density", XrmoptionSepArg, 0 },
     { "-length",  ".length",  XrmoptionSepArg, 0 },
     { "-delay",   ".delay",   XrmoptionSepArg, 0 },
index c1b68ba106002a7464f3bb00277bbcf7bf36b8bd..330a363d5d395848565071aa945af2acaddc8cd2 100755 (executable)
@@ -9,7 +9,7 @@
 # the above copyright notice appear in all copies and that both that
 # copyright notice and this permission notice appear in supporting
 # documentation.  No representations are made about the suitability of this
-# software for any purpose.  It is provided "as is" without express or 
+# software for any purpose.  It is provided "as is" without express or
 # implied warranty.
 
 # To run this as a display mode with xscreensaver, add this to `programs':
@@ -35,7 +35,7 @@ use POSIX qw(strftime);
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.78 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.82 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 my $copyright = "WebCollage $version, Copyright (c) 1999-2001" .
     " Jamie Zawinski <jwz\@jwz.org>\n" .
     "            http://www.jwz.org/xscreensaver/\n";
@@ -56,12 +56,11 @@ my @search_methods = (  30, "imagevista", \&pick_from_alta_vista_images,
                      #   0, "hotbot",     \&pick_from_hotbot_text,
                       );
 
-#@search_methods=(100, "lycos",     \&pick_from_lycos_text);
-@search_methods=(100, "googleimgs",\&pick_from_google_images);
+#@search_methods=(100, "googleimgs",\&pick_from_google_images);
 
 # programs we can use to write to the root window (tried in ascending order.)
 #
-my @root_displayers = ( 
+my @root_displayers = (
   "xloadimage -quiet -onroot -center -border black",
   "xli        -quiet -onroot -center -border black",
   "xv         -root -quit -viewonly +noresetroot -rmode 5" .
@@ -79,10 +78,10 @@ my %cookies = (
   "www.altavista.com"  =>  "AV_ALL=1",   # request uncensored searches
   "web.altavista.com"  =>  "AV_ALL=1",
 
-                                         # log in as "cpunks"
-  "www.nytimes.com"    =>  "NYT-S=104nv1sChNnnWAvTLGx6eiDhzQcbSoN" .
-                                 "6zOMB7s0Qm8MlMaa8It.2/BlXTrpbBk" .
-                                 "jinV68IcqxOvAABDyKdciIJ8O000",
+                                         # log in as "cipherpunk"
+  "www.nytimes.com"    =>  'NYT-S=18cHMIlJOn2Y1bu5xvEG3Ufuk6E1oJ.' .
+                           'FMxWaQV0igaB5Yi/Q/guDnLeoL.pe7i1oakSb' .
+                           '/VqfdUdb2Uo27Vzt1jmPn3cpYRlTw9',
 );
 
 
@@ -102,6 +101,9 @@ my %poisoners = (
                                    # Since Akamai is super-expensive, let's
                                    # go out on a limb and assume that all of
                                    # their customers are rich-and-boring.
+  "bartleby.com"            => 1,  # Dictionary, cluttering altavista.
+  "encyclopedia.com"        => 1,  # Dictionary, cluttering altavista.
+  "onlinedictionary.datasegment.com" => 1,  # Dictionary, cluttering altavista.
 );
 
 
@@ -155,6 +157,9 @@ my $min_width = 50;
 my $min_height = 50;
 my $min_ratio = 1/5;
 
+my $min_gif_area = (120 * 120);
+
+
 my $no_output_p = 0;
 my $urls_only_p = 0;
 
@@ -262,9 +267,8 @@ sub get_document_1 {
         $hdrs .= "Referer: $referer\r\n";
       }
       if ($cookie) {
-        foreach (split(/\r?\n/, $cookie)) {
-          $hdrs .= "Cookie: $_\r\n";
-        }
+        my @cc = split(/\r?\n/, $cookie);
+        $hdrs .= "Cookie: " . join('; ', @cc) . "\r\n";
       }
       $hdrs .= "\r\n";
 
@@ -581,6 +585,15 @@ sub pick_image_from_body {
         next;
       }
 
+      # skip GIFs with a small number of pixels -- those usually suck.
+      if ($width && $height &&
+          m/\.gif$/io &&
+          ($width * $height) < $min_gif_area) {
+        LOG ($verbose_filter, "  skip small GIF $_ (${width}x$height)");
+        next;
+      }
+      
+
       my $url = $_;
 
       if ($unique_urls{$url}) {
@@ -589,7 +602,7 @@ sub pick_image_from_body {
       }
 
       LOG ($verbose_filter,
-           "  image $url" . 
+           "  image $url" .
            ($width && $height ? " (${width}x${height})" : "") .
            ($was_inline ? " (inline)" : ""));
 
@@ -615,13 +628,13 @@ sub pick_image_from_body {
   $_ = undef;
   $body = undef;
 
+  @urls = depoison (@urls);
+
   if ( $#urls < 0 ) {
     LOG ($verbose_load, "no images on $base" . ($fsp ? " (frameset)" : ""));
     return ();
   }
 
-  @urls = depoison (@urls);
-
   # pick a random element of the table
   my $i = int(rand($#urls+1));
   $url = $urls[$i];
@@ -656,7 +669,6 @@ sub pick_dictionary {
 # returns a random word from the dictionary
 #
 sub random_word {
-    
     my $word = 0;
     if (open (IN, "<$wordlist")) {
         my $size = (stat(IN))[7];
@@ -700,6 +712,20 @@ sub random_words {
 }
 
 
+sub url_quote {
+  my ($s) = @_;
+  $s =~ s|([^-a-zA-Z0-9.\@/_\r\n])|sprintf("%%%02X", ord($1))|ge;
+  return $s;
+}
+
+sub url_unquote {
+  my ($s) = @_;
+  $s =~ s/[+]/ /g;
+  $s =~ s/%([a-z0-9]{2})/chr(hex($1))/ige;
+  return $s;
+}
+
+
 # Loads the given URL (a search on some search engine) and returns:
 # - the total number of hits the search engine claimed it had;
 # - a list of URLs from the page that the search engine returned;
@@ -750,6 +776,12 @@ sub pick_from_search_engine {
     $search_count = $1;
   } elsif ($body =~ m@About ((\d{1,3})(,\d{3})*) images@i) { # imagevista
     $search_count = $1;
+  } elsif ($body =~ m@We found ((\d{1,3})(,\d{3})*|\d+) results@i) { # *vista
+    $search_count = $1;
+  } elsif ($body =~ m@ of about <B>((\d{1,3})(,\d{3})*)<@i) { # googleimages
+    $search_count = $1;
+  } elsif ($body =~ m@<B>((\d{1,3})(,\d{3})*)</B> Web sites were found@i) {
+    $search_count = $1;    # lycos
   } elsif ($body =~ m@WEB.*?RESULTS.*?\b((\d{1,3})(,\d{3})*)\b.*?Matches@i) {
     $search_count = $1;                          # hotbot
   } elsif ($body =~ m@no photos were found containing@i) { # imagevista
@@ -909,7 +941,7 @@ sub pick_from_yahoo_random_link {
     return;
   }
 
-  LOG ($verbose_load, "redirected to: $base"); 
+  LOG ($verbose_load, "redirected to: $base");
 
   my $img = pick_image_from_body ($base, $body);
   $body = undef;
@@ -940,7 +972,6 @@ my $alta_vista_images_url = "http://www.altavista.com/cgi-bin/query" .
                             "&mmW=1" .        # unknown, but required
                             "&q=";
 
-
 # imagevista
 sub pick_from_alta_vista_images {
   my ( $timeout ) = @_;
@@ -959,6 +990,12 @@ sub pick_from_alta_vista_images {
 
   my @candidates = ();
   foreach my $u (@subpages) {
+
+    # altavista is encoding their URLs now.
+    next unless ($u =~
+    m@^/r\?ck_sm=[a-zA-Z0-9]+\&ref=[a-zA-Z0-9]+(\&uid=[a-zA-Z0-9]+)?\&r=(.*)@);
+    $u = url_unquote($2);
+
     next unless ($u =~ m@^http://@i);    #  skip non-HTTP or relative URLs
     next if ($u =~ m@[/.]altavista\.com\b@i);     # skip altavista builtins
     next if ($u =~ m@[/.]doubleclick\.net\b@i);   # you cretins
@@ -1034,8 +1071,12 @@ sub pick_from_google_images {
 ############################################################################
 
 
-my $alta_vista_url = "http://www.altavista.com/cgi-bin/query?pg=q" .
-                     "&text=yes&kl=XX&stype=stext&q=";
+my $alta_vista_url_1 = "http://www.altavista.com/cgi-bin/query?pg=q" .
+                       "&text=yes&kl=XX&stype=stext&q=";
+my $alta_vista_url_2 = "http://www.altavista.com/sites/search/web?pg=q" .
+                       "&kl=XX&search=Search&q=";
+
+my $alta_vista_url = $alta_vista_url_2;
 
 # altavista
 sub pick_from_alta_vista_text {
@@ -1061,8 +1102,9 @@ sub pick_from_alta_vista_text {
     # onMouseOver to make it look like they're not!  Well, it makes it
     # easier for us to identify search results...
     #
-    next unless ($u =~ m@^/r\?ck_sm=[a-zA-Z0-9]+\&ref=[a-zA-Z0-9]+\&r=(.*)@);
-    $u = $1;
+    next unless ($u =~
+      m@^/r\?ck_sm=[a-zA-Z0-9]+\&ref=[a-zA-Z0-9]+\&uid=[a-zA-Z0-9]+\&r=(.*)@);
+    $u = url_unquote($1);
 
     LOG ($verbose_filter, "  candidate: $u");
     push @candidates, $u;
@@ -1201,7 +1243,7 @@ sub pick_from_yahoo_news_text {
 
 
 # Picks a random image on a random page, and returns two URLs:
-# the page containing the image, and the image. 
+# the page containing the image, and the image.
 # Returns () if nothing found this time.
 # Uses the url-randomizer 1 time in 5, else the image randomizer.
 #
@@ -1254,8 +1296,8 @@ sub blurb {
 }
 
 sub error {
-  ($_) = @_;
-  print STDERR blurb() . "$_\n";
+  my ($err) = @_;
+  print STDERR blurb() . "$err\n";
   exit 1;
 }
 
@@ -1534,7 +1576,7 @@ sub jpeg_size {
       # We must skip variables, since FFs in variable names aren't
       # valid JPEG markers.
       my $s = substr($body, $i, 2); $i += 2;
-      my ($c1, $c2) = unpack ("C"x2, $s); 
+      my ($c1, $c2) = unpack ("C"x2, $s);
       my $length = ($c1 << 8) | $c2;
       return () if ($length < 2);
       $i += $length-2;
@@ -1626,7 +1668,7 @@ sub x_cleanup {
 #
 sub nontrapping_system {
   $! = 0;
-    
+
   $_ = join(" ", @_);
   s/\"[^\"]+\"/\"...\"/g;
 
@@ -1654,7 +1696,7 @@ sub nontrapping_system {
 
 
 # Given the URL of a GIF or JPEG image, and the body of that image, writes a
-# PPM to the given output file.  Returns the width/height of the image if 
+# PPM to the given output file.  Returns the width/height of the image if
 # successful.
 #
 sub image_to_pnm {
@@ -1995,10 +2037,10 @@ sub paste_image {
   }
 
   if (rand() < $crop_chance) {
-    
+
     my $ow = $crop_w;
     my $oh = $crop_h;
-    
+
     if ($crop_w > $min_width) {
       # if it's a banner, select the width linearly.
       # otherwise, select a bell.
@@ -2013,7 +2055,7 @@ sub paste_image {
       $crop_h = $min_height + int (bellrand() * ($crop_h - $min_height));
       $crop_y = int (rand() * ($oh - $crop_h));
     }
-    
+
     if ($crop_x != 0   || $crop_y != 0 ||
         $crop_w != $iw || $crop_h != $ih) {
       LOG ($verbose_pbm,
@@ -2033,13 +2075,13 @@ sub paste_image {
       $y < 0 ||
       $x + $crop_w > $img_width ||
       $y + $crop_h > $img_height) {
-    
+
     LOG ($verbose_pbm,
          "cropping for effective paste of ${crop_w}x$crop_h \@ $x,$y");
-    
+
     if ($x < 0) { $crop_x -= $x; $crop_w += $x; $x = 0; }
     if ($y < 0) { $crop_y -= $y; $crop_h += $y; $y = 0; }
-    
+
     if ($x + $crop_w >= $img_width)  { $crop_w = $img_width  - $x - 1; }
     if ($y + $crop_h >= $img_height) { $crop_h = $img_height - $y - 1; }
   }
@@ -2097,7 +2139,7 @@ sub paste_image {
     my $tsize = (stat($target))[7];
     if ($tsize > 200) {
       $cmd = "$ppm_to_root_window_cmd $target";
-      
+
       # xv seems to hate being killed.  it tends to forget to clean
       # up after itself, and leaves windows around and colors allocated.
       # I had this same problem with vidwhacker, and I'm not entirely
@@ -2109,14 +2151,14 @@ sub paste_image {
       # to do anyway.
       #
       $cmd .= " &";
-      
+
       $rc = nontrapping_system ($cmd);
-      
+
       if ($rc != 0) {
         LOG (($verbose_pbm || $verbose_load), "display failed: \"$cmd\"");
         return;
       }
-      
+
     } else {
       LOG ($verbose_pbm, "$target size is $tsize");
     }
index d12f7350150d8a45a338f5d70ac52c011fa9bdfc..b3b5f93cd20422434a078714861bc6940139a1fa 100644 (file)
@@ -83,7 +83,7 @@ static Bool init_whirlwindwarp(Display *dpy, Window window) {
   return 1;
 }
 
-static float myrnd() { /* between -1.0 and +1.0 */
+static float myrnd(void) { /* between -1.0 and +1.0 */
   return 2.0*((float)((random()%10000000)/10000000.0)-0.5);
 }
 
index 1b19041dcc30a65c77ed3721fd59e19128864fb5..b6ae538db35c125d0dee66e717ee2a1bf941fbb6 100644 (file)
@@ -77,10 +77,11 @@ ERROR!  Sorry, xlockmore.h requires ANSI C (gcc, for example.)
 #define MI_BATCHCOUNT(MI)      ((MI)->batchcount)
 #define MI_SIZE(MI)            ((MI)->size)
 #define MI_IS_DRAWN(MI)                ((MI)->is_drawn)
-#define MI_IS_DRAWN(MI)                ((MI)->is_drawn)
+#define MI_IS_FPS(MI)          ((MI)->fps_p)
 #define MI_NCOLORS(MI)         ((MI)->npixels)
 #define MI_NAME(MI)            (progname)
 
+#define MI_COLORMAP(MI)                (MI_WIN_COLORMAP((MI)))
 #define MI_WIDTH(MI)           (MI_WIN_WIDTH((MI)))
 #define MI_HEIGHT(MI)          (MI_WIN_HEIGHT((MI)))
 #define MI_IS_ICONIC(MI)       (MI_WIN_IS_ICONIC((MI)))
index c9f2222fb8c71679b06b711344ef2f36a5b68c71..1a6bebf158c8b857a436e5298e4e20abd6d1ad41 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1999 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999, 2001 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  *     ==========================================================
  *
- * One thing I would like to add (to "-trace" mode) is an intro like at the
- * beginning of the movie, where it printed
- *
- *        Call trans opt: received. 2-19-98 13:24:18 REC:Log>_
- *
- * then cleared, then
- *
- *        Trace program: running_
- *
- * then did the trace.
- *
- * I was also thinking of sometimes making the screen go blank and say
- * "Knock, knock."  
- *
- * However, the problem with both of these ideas is, I made the number images
- * by tooling around in GIMP until I got something that looked good (blurring
- * and unblurring and enlarging and shrinking and blurring some more...) and I
- * couldn't reproduce it if my life depended on it.  And to add anything other
- * than roman digits/katakana, I'd need to matrixify a whole font...
  */
 
 #include "screenhack.h"
 
 #ifdef HAVE_XPM
 # include <X11/xpm.h>
-# include "images/matrix.xpm"
+# include "images/matrix0.xpm"
+# include "images/matrix1.xpm"
 # include "images/matrix2.xpm"
+# include "images/matrix0b.xpm"
+# include "images/matrix1b.xpm"
+# include "images/matrix2b.xpm"
 #endif
 
-#include "images/matrix.xbm"
+#include "images/matrix0.xbm"
+#include "images/matrix1.xbm"
 #include "images/matrix2.xbm"
+#include "images/matrix0b.xbm"
+#include "images/matrix1b.xbm"
+#include "images/matrix2b.xbm"
 
-#define CHAR_ROWS 27
-#define CHAR_COLS 3
-#define FADE_COL  0
-#define PLAIN_COL 1
-#define GLOW_COL  2
+#define CHAR_COLS 16
+#define CHAR_ROWS 13
+#define CHAR_MAPS 3
+#define FADE_MAP  0
+#define PLAIN_MAP 1
+#define GLOW_MAP  2
 
 typedef struct {
-  unsigned int glyph   : 8;
            int glow    : 8;
+  unsigned int glyph   : 9;  /* note: 9 bit characters! */
   unsigned int changed : 1;
   unsigned int spinner : 1;
 } m_cell;
@@ -92,6 +82,40 @@ typedef struct {
   int y;
 } m_feeder;
 
+#define countof(x) (sizeof(x)/sizeof(*(x)))
+
+static int matrix_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+                                 192, 193, 194, 195, 196, 197, 198, 199,
+                                 200, 201, 202, 203, 204, 205, 206, 207 };
+static int decimal_encoding[]  = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };
+static int hex_encoding[]      = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+                                   33, 34, 35, 36, 37, 38 };
+static int binary_encoding[] = { 16, 17 };
+static int dna_encoding[]    = { 33, 35, 39, 52 };
+static unsigned char char_map[256] = {
+    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  /*   0 */
+    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  /*  16 */
+    0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,  /*  32 */
+   16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,  /*  48 */
+   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,  /*  64 */
+   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,  /*  80 */
+   64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,  /*  96 */
+   80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,  /* 112 */
+    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  /* 128 */
+    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  /* 144 */
+   96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,  /* 160 */
+  112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,  /* 176 */
+  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,  /* 192 */
+  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,  /* 208 */
+  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,  /* 224 */
+  176,177,178,195,180,181,182,183,184,185,186,187,188,189,190,191   /* 240 */
+};
+
+typedef enum { TRACE0, TRACE1, TRACE2,
+               KNOCK0, KNOCK1, KNOCK2, KNOCK3,
+               KNOCK4, KNOCK5, KNOCK6, KNOCK7,
+               MATRIX, DNA, BINARY, HEX } m_mode;
+
 typedef struct {
   Display *dpy;
   Window window;
@@ -104,24 +128,28 @@ typedef struct {
   int nspinners;
   Bool small_p;
   Bool insert_top_p, insert_bottom_p;
-  Bool trace_p;
+  m_mode mode;
   signed char *tracing;
   int density;
 
-  Pixmap images;
+  Pixmap images[CHAR_MAPS];
   int image_width, image_height;
+
   int nglyphs;
+  int *glyph_map;
 
 } m_state;
 
 
 static void
-load_images (m_state *state)
+load_images_1 (m_state *state, int which)
 {
 #ifdef HAVE_XPM
   if (!get_boolean_resource ("mono", "Boolean") &&
       state->xgwa.depth > 1)
     {
+      
+
       XpmAttributes xpmattrs;
       int result;
       xpmattrs.valuemask = 0;
@@ -144,35 +172,32 @@ load_images (m_state *state)
 # endif
 
       result = XpmCreatePixmapFromData (state->dpy, state->window,
-                                        (state->small_p
-                                         ? matrix2_xpm
-                                         : matrix_xpm),
-                                        &state->images, 0 /* mask */,
+                (which == 0 ? (state->small_p ? matrix0b_xpm : matrix0_xpm) :
+                 which == 1 ? (state->small_p ? matrix1b_xpm : matrix1_xpm) :
+                              (state->small_p ? matrix2b_xpm : matrix2_xpm)),
+                                        &state->images[which], 0 /* mask */,
                                         &xpmattrs);
       if (!state->images || (result != XpmSuccess && result != XpmColorError))
-        state->images = 0;
+        state->images[which] = 0;
 
       state->image_width = xpmattrs.width;
       state->image_height = xpmattrs.height;
-      state->nglyphs = CHAR_ROWS;
     }
   else
 #endif /* !HAVE_XPM */
     {
       unsigned long fg, bg;
-      state->image_width =  (state->small_p ? matrix2_width  : matrix_width);
-      state->image_height = (state->small_p ? matrix2_height : matrix_height);
-      state->nglyphs = CHAR_ROWS;
-
+      state->image_width  = (state->small_p ? matrix0b_width :matrix0_width);
+      state->image_height = (state->small_p ? matrix0b_height:matrix0_height);
       fg = get_pixel_resource("foreground", "Foreground",
                               state->dpy, state->xgwa.colormap);
       bg = get_pixel_resource("background", "Background",
                               state->dpy, state->xgwa.colormap);
-      state->images =
-        XCreatePixmapFromBitmapData (state->dpy, state->window,
-                                     (state->small_p
-                                      ? (char *) matrix2_bits
-                                      : (char *) matrix_bits),
+      state->images[which] =
+        XCreatePixmapFromBitmapData (state->dpy, state->window, (char *)
+                (which == 0 ? (state->small_p ? matrix0b_bits :matrix0_bits) :
+                 which == 1 ? (state->small_p ? matrix1b_bits :matrix1_bits) :
+                              (state->small_p ? matrix2b_bits :matrix2_bits)),
                                      state->image_width, state->image_height,
                                      bg, fg, state->xgwa.depth);
     }
@@ -180,30 +205,49 @@ load_images (m_state *state)
 
 
 static void
-flip_images (m_state *state)
+load_images (m_state *state)
 {
-  XImage *im = XGetImage (state->dpy, state->images, 0, 0,
+  load_images_1 (state, 0);
+  load_images_1 (state, 1);
+  load_images_1 (state, 2);
+}
+
+
+static void
+flip_images_1 (m_state *state, int which)
+{
+  XImage *im = XGetImage (state->dpy, state->images[which], 0, 0,
                           state->image_width, state->image_height,
                           ~0L, (state->xgwa.depth > 1 ? ZPixmap : XYPixmap));
-  int x, y, i;
-  int w = state->image_width / CHAR_COLS;
-  unsigned long *row = (unsigned long *) malloc (sizeof(*row) * w);
+  int x, y, xx;
+  int ww = state->char_width;
+  unsigned long *row = (unsigned long *) malloc (sizeof(*row) * ww);
 
   for (y = 0; y < state->image_height; y++)
-    for (i = 0; i < CHAR_COLS; i++)
-      {
-        for (x = 0; x < w; x++)
-          row[x] = XGetPixel (im, (i * w) + x, y);
-        for (x = 0; x < w; x++)
-          XPutPixel (im, (i * w) + x, y, row[w - x - 1]);
-      }
+    {
+      for (x = 0; x < CHAR_COLS; x++)
+        {
+          for (xx = 0; xx < ww; xx++)
+            row[xx] = XGetPixel (im, (x * ww) + xx, y);
+          for (xx = 0; xx < ww; xx++)
+            XPutPixel (im, (x * ww) + xx, y, row[ww - xx - 1]);
+        }
+    }
 
-  XPutImage (state->dpy, state->images, state->draw_gc, im, 0, 0, 0, 0,
+  XPutImage (state->dpy, state->images[which], state->draw_gc, im, 0, 0, 0, 0,
              state->image_width, state->image_height);
   XDestroyImage (im);
   free (row);
 }
 
+static void
+flip_images (m_state *state)
+{
+  flip_images_1 (state, 0);
+  flip_images_1 (state, 1);
+  flip_images_1 (state, 2);
+}
+
 
 static void
 init_spinners (m_state *state)
@@ -251,8 +295,9 @@ init_trace (m_state *state)
 
   for (i = 0; i < strlen(state->tracing); i++)
     state->tracing[i] = -state->tracing[i];
-  state->nglyphs = 10;
-  flip_images (state);
+
+  state->glyph_map = decimal_encoding;
+  state->nglyphs = countof(decimal_encoding);
 
   return;
 
@@ -263,7 +308,7 @@ init_trace (m_state *state)
   if (s) free (s);
   if (state->tracing) free (state->tracing);
   state->tracing = 0;
-  state->trace_p = False;
+  state->mode = MATRIX;
 }
 
 
@@ -271,14 +316,22 @@ static m_state *
 init_matrix (Display *dpy, Window window)
 {
   XGCValues gcv;
-  char *insert;
+  char *insert, *mode;
   m_state *state = (m_state *) calloc (sizeof(*state), 1);
+
   state->dpy = dpy;
   state->window = window;
 
   XGetWindowAttributes (dpy, window, &state->xgwa);
 
-  state->small_p = get_boolean_resource ("small", "Boolean");
+  {
+    const char *s = get_string_resource ("small", "Boolean");
+    if (s && *s)
+      state->small_p = get_boolean_resource ("small", "Boolean");
+    else
+      state->small_p = (state->xgwa.width < 300);
+  }
+
   load_images (state);
 
   gcv.foreground = get_pixel_resource("foreground", "Foreground",
@@ -299,6 +352,9 @@ init_matrix (Display *dpy, Window window)
   state->grid_width++;
   state->grid_height++;
 
+  state->glyph_map = matrix_encoding;
+  state->nglyphs = countof(matrix_encoding);
+
   state->cells = (m_cell *)
     calloc (sizeof(m_cell), state->grid_width * state->grid_height);
   state->feeders = (m_feeder *) calloc (sizeof(m_feeder), state->grid_width);
@@ -336,11 +392,53 @@ init_matrix (Display *dpy, Window window)
   if (insert)
     free (insert);
 
-  state->trace_p = get_boolean_resource ("trace", "Trace");
-  if (state->trace_p)
+  mode = get_string_resource ("mode", "Mode");
+  if (mode && !strcasecmp(mode, "trace"))
+    state->mode = TRACE0;
+  else if (mode && !strcasecmp(mode, "dna"))
+    state->mode = DNA;
+  else if (mode && !strcasecmp(mode, "binary"))
+    state->mode = BINARY;
+  else if (mode && (!strcasecmp(mode, "hex") ||
+                    !strcasecmp(mode, "hexadecimal")))
+    state->mode = HEX;
+  else if (!mode || !*mode || !strcasecmp(mode, "matrix"))
+    state->mode = MATRIX;
+  else
+    {
+      fprintf (stderr,
+           "%s: `mode' must be matrix, trace, dna, binary, or hex: not `%s'\n",
+               progname, mode);
+      state->mode = MATRIX;
+    }
+
+  if (state->mode == DNA)
+    {
+      state->glyph_map = dna_encoding;
+      state->nglyphs = countof(dna_encoding);
+    }
+  else if (state->mode == BINARY)
+    {
+      state->glyph_map = binary_encoding;
+      state->nglyphs = countof(binary_encoding);
+    }
+  else if (state->mode == HEX)
+    {
+      state->glyph_map = hex_encoding;
+      state->nglyphs = countof(hex_encoding);
+    }
+  else if (state->mode == HEX)
+    {
+      state->glyph_map = hex_encoding;
+      state->nglyphs = countof(hex_encoding);
+    }
+  else if (state->mode == TRACE0)
     init_trace (state);
   else
-    init_spinners (state);
+    {
+      flip_images (state);
+      init_spinners (state);
+    }
 
   return state;
 }
@@ -389,6 +487,14 @@ feed_matrix (m_state *state)
 {
   int x;
 
+  switch (state->mode)
+    {
+    case TRACE2: case MATRIX: case DNA: case BINARY: case HEX:
+      break;
+    default:
+      return;
+    }
+
   /* Update according to current feeders. */
   for (x = 0; x < state->grid_width; x++)
     {
@@ -400,7 +506,7 @@ feed_matrix (m_state *state)
         }
       else if (f->remaining > 0)       /* how many items are in the pipe */
         {
-          int g = (random() % state->nglyphs) + 1;
+          int g = state->glyph_map[(random() % state->nglyphs)] + 1;
           insert_glyph (state, g, x, f->y);
           f->remaining--;
           if (f->y >= 0)  /* bottom_feeder_p */
@@ -442,11 +548,171 @@ densitizer (m_state *state)
 }
 
 
+static void
+hack_text (m_state *state)
+{
+  int i;
+  int x = 0;
+  const char *s;
+  switch (state->mode)
+    {
+    case TRACE0: s = "Call trans opt: received.\n"
+                     "2-19-98 13:24:18 REC:Log>_"; break;
+    case TRACE1: s = "Trace program: running_"; break;
+
+    case KNOCK0: s = "Wake up, Neo..."; break;
+    case KNOCK1: s = ""; break;
+    case KNOCK2: s = "The Matrix has you..."; break;
+    case KNOCK3: s = ""; break;
+    case KNOCK4: s = "Follow the white rabbit..."; break;
+    case KNOCK5: s = ""; break;
+    case KNOCK6: s = "Knock knock, Neo."; break;
+    case KNOCK7: s = ""; break;
+
+    default: abort(); break;
+    }
+
+  for (i = 0; i < state->grid_height * state->grid_width; i++)
+    {
+      m_cell *cell = &state->cells[i];
+      cell->changed = (cell->glyph != 0);
+      cell->glyph = 0;
+    }
+
+  if (state->mode == TRACE0 || state->mode == TRACE1)
+    i = 0;
+  else
+    {
+      int y;
+      x = ((int)state->grid_width - (int)strlen(s)) / 2;
+      y = (state->grid_height / 2) - 1;
+      if (y < 0) y = 0;
+      if (x < 0) x = 0;
+      i = (y * state->grid_width) + x;
+    }
+
+  while (*s)
+    {
+      if (*s == '\n')
+        {
+          i = ((i / state->grid_width) + 1) * state->grid_width;
+          x = 0;
+        }
+      else
+        {
+          m_cell *cell = &state->cells[i];
+          if (x < state->grid_width-1)
+            {
+              cell->glyph = char_map[(unsigned char) *s] + 1;
+              if (*s == ' ' || *s == '\t') cell->glyph = 0;
+              cell->changed = 1;
+              i++;
+            }
+          x++;
+        }
+      s++;
+    }
+}
+
+static void
+roll_state (m_state *state)
+{
+  int delay = 0;
+  switch (state->mode)
+    {
+    case TRACE0:
+      delay = 3;
+      state->mode = TRACE1;
+      break;
+
+    case TRACE1:
+      delay = 2;
+      state->mode = TRACE2;
+      break;
+
+    case TRACE2:
+      {
+        Bool any = False;
+        int i;
+        for (i = 0; i < strlen(state->tracing); i++)
+          if (state->tracing[i] < 0) any = True;
+
+        if (!any)
+          {
+            XSync (state->dpy, False);
+            sleep (3);
+            state->mode = MATRIX;
+            state->glyph_map = matrix_encoding;
+            state->nglyphs = countof(matrix_encoding);
+            flip_images (state);
+            free (state->tracing);
+            state->tracing = 0;
+          }
+        else if ((random() % 10) == 0)
+          {
+            int x = random() % strlen(state->tracing);
+            if (state->tracing[x] < 0)
+              state->tracing[x] = -state->tracing[x];
+          }
+        break;
+      }
+
+    case KNOCK0: delay = 1; state->mode++; break; /* wake */
+    case KNOCK1: delay = 4; state->mode++; break;
+    case KNOCK2: delay = 2; state->mode++; break; /* has */
+    case KNOCK3: delay = 4; state->mode++; break;
+    case KNOCK4: delay = 2; state->mode++; break; /* rabbit */
+    case KNOCK5: delay = 4; state->mode++; break;
+    case KNOCK6: delay = 4; state->mode++; break; /* knock */
+    case KNOCK7:
+      state->mode = MATRIX;
+      state->glyph_map = matrix_encoding;
+      state->nglyphs = countof(matrix_encoding);
+      flip_images (state);
+      break;
+
+    case MATRIX:
+      if (! (random() % 5000))
+        {
+          state->mode = KNOCK0;
+          flip_images (state);
+        }
+      break;
+
+    case DNA: case BINARY: case HEX:
+      break;
+
+    default:
+      abort();
+      break;
+    }
+
+  if (delay)
+    {
+      XSync (state->dpy, False);
+      sleep (delay);
+    }
+}
+
+
 static void
 hack_matrix (m_state *state)
 {
   int x;
 
+  switch (state->mode)
+    {
+    case TRACE0: case TRACE1:
+    case KNOCK0: case KNOCK1: case KNOCK2: case KNOCK3:
+    case KNOCK4: case KNOCK5: case KNOCK6: case KNOCK7:
+      hack_text (state);
+      return;
+    case TRACE2: case MATRIX: case DNA: case BINARY: case HEX:
+      break;
+    default:
+      abort(); break;
+    }
+
   /* Glow some characters. */
   if (!state->insert_bottom_p)
     {
@@ -482,7 +748,7 @@ hack_matrix (m_state *state)
       if ((random() % 4) != 0)
         f->remaining = 0;
 
-      if (state->trace_p)
+      if (state->mode == TRACE2)
         bottom_feeder_p = True;
       if (state->insert_top_p && state->insert_bottom_p)
         bottom_feeder_p = (random() & 1);
@@ -495,7 +761,7 @@ hack_matrix (m_state *state)
         f->y = -1;
     }
 
-  if (!state->trace_p &&
+  if (!state->mode == TRACE2 &&
       ! (random() % 500))
     init_spinners (state);
 }
@@ -518,17 +784,21 @@ draw_matrix (m_state *state)
         if (cell->glyph)
           count++;
 
-        if (state->trace_p)
+        if (state->mode == TRACE2)
           {
             int xx = x % strlen(state->tracing);
             Bool dead_p = state->tracing[xx] > 0;
 
             if (y == 0 && x == xx)
-              cell->glyph = (dead_p ? (state->tracing[xx]-'0'+1) : 0);
+              cell->glyph = (dead_p
+                             ? state->glyph_map[state->tracing[xx]-'0'] + 1
+                             : 0);
             else if (y == 0)
               cell->glyph = 0;
             else
-              cell->glyph = (dead_p ? 0 : (random() % state->nglyphs) + 1);
+              cell->glyph = (dead_p ? 0 :
+                             (state->glyph_map[(random()%state->nglyphs)]
+                              + 1));
 
             cell->changed = 1;
           }
@@ -543,16 +813,22 @@ draw_matrix (m_state *state)
                           state->char_width,
                           state->char_height);
         else
-          XCopyArea (state->dpy, state->images, state->window, state->draw_gc,
-                     ((cell->glow > 0 || cell->spinner)
-                      ? (state->char_width * GLOW_COL)
-                      : (cell->glow == 0
-                         ? (state->char_width * PLAIN_COL)
-                         : (state->char_width * FADE_COL))),
-                     (cell->glyph - 1) * state->char_height,
-                     state->char_width, state->char_height,
-                     x * state->char_width,
-                     y * state->char_height);
+          {
+            int cx = (cell->glyph - 1) % CHAR_COLS;
+            int cy = (cell->glyph - 1) / CHAR_COLS;
+            int map = ((cell->glow > 0 || cell->spinner) ? GLOW_MAP :
+                       (cell->glow == 0) ? PLAIN_MAP :
+                       GLOW_MAP);
+
+            XCopyArea (state->dpy, state->images[map],
+                       state->window, state->draw_gc,
+                       cx * state->char_width,
+                       cy * state->char_height,
+                       state->char_width,
+                       state->char_height,
+                       x * state->char_width,
+                       y * state->char_height);
+          }
 
         cell->changed = 0;
 
@@ -571,35 +847,12 @@ draw_matrix (m_state *state)
 
         if (cell->spinner)
           {
-            cell->glyph = random() % CHAR_ROWS;
+            cell->glyph = (state->glyph_map[(random()%state->nglyphs)] + 1);
             cell->changed = 1;
           }
       }
 
-  if (state->trace_p)
-    {
-      Bool any = False;
-      int i;
-      for (i = 0; i < strlen(state->tracing); i++)
-        if (state->tracing[i] < 0) any = True;
-
-      if (!any)
-        {
-          XSync (state->dpy, False);
-          sleep (3);
-          state->trace_p = False;
-          state->nglyphs = CHAR_ROWS;
-          flip_images (state);
-          free (state->tracing);
-          state->tracing = 0;
-        }
-      else if ((random() % 10) == 0)
-        {
-          int x = random() % strlen(state->tracing);
-          if (state->tracing[x] < 0)
-            state->tracing[x] = -state->tracing[x];
-        }
-    }
+  roll_state (state);
 
 #if 0
   {
@@ -628,10 +881,10 @@ char *progclass = "XMatrix";
 char *defaults [] = {
   ".background:                   black",
   ".foreground:                   green",
-  "*small:                False",
+  "*small:                ",
   "*delay:                10000",
   "*insert:               both",
-  "*trace:                false",
+  "*mode:                 Matrix",
   "*tracePhone:            (212) 555-0690",
   "*spinners:             5",
   "*density:              75",
@@ -646,8 +899,11 @@ XrmOptionDescRec options [] = {
   { "-bottom",         ".insert",              XrmoptionNoArg, "bottom" },
   { "-both",           ".insert",              XrmoptionNoArg, "both" },
   { "-density",                ".density",             XrmoptionSepArg, 0 },
-  { "-trace",          ".trace",               XrmoptionNoArg, "True" },
+  { "-trace",          ".mode",                XrmoptionNoArg, "trace" },
   { "-phone",          ".tracePhone",          XrmoptionSepArg, 0 },
+  { "-dna",            ".mode",                XrmoptionNoArg, "DNA" },
+  { "-binary",         ".mode",                XrmoptionNoArg, "binary" },
+  { "-hexadecimal",    ".mode",                XrmoptionNoArg, "hexadecimal"},
   { 0, 0, 0, 0 }
 };
 
index 18a0bda8ae1499715dcb253cf8996332ae31c99f..5e7672a2b03366f53a9e5fb3118d7198ed8c031f 100644 (file)
@@ -186,7 +186,7 @@ XrmOptionDescRec options[] = {
   { "-pixwidth", ".pixwidth", XrmoptionSepArg, 0 },
   { "-pixheight", ".pixheight", XrmoptionSepArg, 0 },
   { "-pixspacex", ".pixspacex", XrmoptionSepArg, 0 },
-  { "-pixspacey", ".pixspacex", XrmoptionSepArg, 0 },
+  { "-pixspacey", ".pixspacey", XrmoptionSepArg, 0 },
   { "-lensoffsetx", ".lensoffsetx", XrmoptionSepArg, 0 },
   { "-lensoffsety", ".lensoffsety", XrmoptionSepArg, 0 },
   { 0, 0, 0, 0 }
index 618b29ed17e84ff310b9cfc8cd8dbd7aed0e4ea6..e08a77772ecb30b926b9d3e63eb87cbe5ed4ac51 100644 (file)
--- a/setup.com
+++ b/setup.com
@@ -54,8 +54,8 @@ $ lissie      :== $'mydir'lissie
 $ lmorph       :== $'mydir'lmorph
 $ loop         :== $'mydir'loop
 $ maze         :== $'mydir'maze
-$ moire                :== $'mydir'moire
 $ moire2       :== $'mydir'moire2
+$ moire                :== $'mydir'moire
 $ mountain     :== $'mydir'mountain
 $ munch                :== $'mydir'munch
 $ nerverot     :== $'mydir'nerverot
index b711c56f1762905887809da505c46a8c1400d2bf..42e673ee730125a850e0fb51a80294dc18d3520f 100644 (file)
@@ -111,8 +111,10 @@ OBJS               = alpha.o colors.o fade.o grabscreen.o grabclient.o hsv.o \
 HDRS           = alpha.h colors.h fade.h grabscreen.h hsv.h resources.h \
                  spline.h usleep.h utils.h version.h visual.h vroot.h xmu.h \
                  yarandom.h erase.h xshm.h xdbe.h colorbars.h
-LOGOS          = logo-180.gif logo-180.xpm logo-50.gif logo-50.xpm \
-                 logo-big.gif logo.eps
+STAR           = *
+LOGOS          = images/$(STAR).xpm \
+                 images/$(STAR).gif \
+                 images/$(STAR).eps
 EXTRAS         = README Makefile.in ad2c
 VMSFILES       = compile_axp.com compile_decc.com vms-gtod.c vms-gtod.h \
                  vms-strdup.c
@@ -265,8 +267,8 @@ xmu.o: ../config.h
 logo.o: $(srcdir)/utils.h
 logo.o: ../config.h
 logo.o: $(srcdir)/resources.h
-logo.o: $(srcdir)/logo-50.xpm
-logo.o: $(srcdir)/logo-180.xpm
+logo.o: $(srcdir)/images/logo-50.xpm
+logo.o: $(srcdir)/images/logo-180.xpm
 yarandom.o: ../config.h
 yarandom.o: $(srcdir)/yarandom.h
 erase.o: $(srcdir)/utils.h
index 1fadffd597b14b597aa2b0695555ec6ad60ad70d..a10edcc07e38f8dce7fa888226900be1ab7903ed 100644 (file)
@@ -11,8 +11,8 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) OVERLAY.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) RESOURCES.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) SPLINE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) USLEEP.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-GTOD.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-STRDUP.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XDBE.C
index fe09afa10f1cfdaa6a6967515c67c72e3ebcd2c2..d8aed70b135a3dbf369919de3887addde76eaaea 100644 (file)
@@ -11,8 +11,8 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) OVERLAY.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) RESOURCES.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) SPLINE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) USLEEP.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-GTOD.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-STRDUP.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XDBE.C
index 3df6bc9edfdb64abeecc5d0c2de616a1b03a4660..00eb9d1ad0610aec7c0fc5a94b72602f6fe0ea5e 100644 (file)
@@ -659,6 +659,7 @@ xf86_gamma_fade (Display *dpy,
           if (!XF86VidModeGetGamma(dpy, screen, &info[screen].vmg))
             goto FAIL;
         }
+# ifdef HAVE_XF86VMODE_GAMMA_RAMP
       else if (ext_ok == 2)  /* have ramps */
         {
           if (!XF86VidModeGetGammaRampSize(dpy, screen, &info[screen].size))
@@ -682,6 +683,7 @@ xf86_gamma_fade (Display *dpy,
                                        info[screen].b))
             goto FAIL;
         }
+# endif /* HAVE_XF86VMODE_GAMMA_RAMP */
       else
         abort();
     }
index 0a1d2ac72630aafbf4971baece2d4819a484ec4e..4155d8ff2a6370cf22848511b4e86d17dcda1add 100644 (file)
@@ -101,6 +101,26 @@ checkerboard (Screen *screen, Window window)
       }
 }
 
+static void
+hack_subproc_environment (Display *dpy)
+{
+  /* Store $DISPLAY into the environment, so that the $DISPLAY variable that
+     the spawned processes inherit is what we are actually using.
+   */
+  const char *odpy = DisplayString (dpy);
+  char *ndpy = (char *) malloc(strlen(odpy) + 20);
+  strcpy (ndpy, "DISPLAY=");
+  strcat (ndpy, odpy);
+
+  /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems
+     any more, right?  It's not Posix, but everyone seems to have it. */
+#ifdef HAVE_PUTENV
+  if (putenv (ndpy))
+    abort ();
+#endif /* HAVE_PUTENV */
+}
+
+
 void
 grab_screen_image (Screen *screen, Window window)
 {
@@ -134,6 +154,7 @@ grab_screen_image (Screen *screen, Window window)
   checkerboard (screen, window);
 
   XSync (dpy, True);
+  hack_subproc_environment (dpy);
   system (cmd);
   free (cmd);
   XSync (dpy, True);
index 328029e33eb2d785753cdf97e33ec5d30fb6ca2a..5ef32e1e9c899005abfb0805ba572f1bdde30ecb 100644 (file)
@@ -131,6 +131,59 @@ xscreensaver_window_p (Display *dpy, Window window)
 
 
 
+/* Whether the given window is:
+   - the real root window;
+   - the virtual root window;
+   - a direct child of the root window;
+   - a direct child of the window manager's decorations.
+ */
+Bool
+top_level_window_p (Screen *screen, Window window)
+{
+  Display *dpy = DisplayOfScreen (screen);
+  Window root, parent, *kids;
+  Window vroot = VirtualRootWindowOfScreen(screen);
+  unsigned int nkids;
+
+  if (window == vroot)
+    return True;
+
+  if (!XQueryTree (dpy, window, &root, &parent, &kids, &nkids))
+    return False;
+
+  if (window == root)
+    return True;
+
+  /* If our direct parent is the root (or *a* root), then yes. */
+  if (parent == root || parent == vroot)
+    return True;
+  else
+    {
+      Atom type = None;
+      int format;
+      unsigned long nitems, bytesafter;
+      unsigned char *data;
+
+      /* If our direct parent has the WM_STATE property, then it is a
+         window manager decoration -- yes.
+      */
+      if (XGetWindowProperty (dpy, window,
+                              XInternAtom (dpy, "WM_STATE", True),
+                              0, 0, False, AnyPropertyType,
+                              &type, &format, &nitems, &bytesafter,
+                              (unsigned char **) &data)
+          == Success
+          && type != None)
+        return True;
+    }
+
+  /* Else, no.  We're deep in a tree somewhere.
+   */
+  return False;
+}
+
+
+
 static XErrorHandler old_ehandler = 0;
 static int
 BadWindow_ehandler (Display *dpy, XErrorEvent *error)
@@ -259,6 +312,16 @@ grab_screen_image (Screen *screen, Window window)
       fprintf (stderr, "\n");
     }
 
+
+  if (!root_p && !top_level_window_p (screen, window))
+    {
+      if (grab_verbose_p)
+        fprintf (stderr, "%s: not a top-level window: 0x%08lX: not grabbing\n",
+                 progname, (unsigned long) window);
+      return;
+    }
+
+
   if (!root_p)
     XSetWindowBackgroundPixmap (dpy, window, None);
 
@@ -470,24 +533,38 @@ read_display (Screen *screen, Window window, Pixmap into_pixmap,
   /* Check to see if the server supports the extension, and bug out if not.
    */
   if (! XReadDisplayQueryExtension (dpy, &rd_event_base, &rd_error_base))
-    return False;
+    {
+      if (grab_verbose_p)
+        fprintf(stderr, "%s: no XReadDisplay extension\n", progname);
+      return False;
+    }
 
   /* If this isn't a visual we know how to handle, bug out.  We handle:
-      = TrueColor in depths 8, 12, 16, and 32;
+      = TrueColor in depths 8, 12, 15, 16, and 32;
       = PseudoColor and DirectColor in depths 8 and 12.
    */
   XGetWindowAttributes(dpy, window, &xgwa);
   class = visual_class (screen, xgwa.visual);
   if (class == TrueColor)
     {
-      if (xgwa.depth != 8  && xgwa.depth != 12 && xgwa.depth != 16 &&
-         xgwa.depth != 24 && xgwa.depth != 32)
-       return False;
+      if (xgwa.depth != 8  && xgwa.depth != 12 && xgwa.depth != 15 &&
+          xgwa.depth != 16 && xgwa.depth != 24 && xgwa.depth != 32)
+        {
+          if (grab_verbose_p)
+            fprintf(stderr, "%s: TrueColor depth %d unsupported\n",
+                    progname, xgwa.depth);
+          return False;
+        }
     }
   else if (class == PseudoColor || class == DirectColor)
     {
       if (xgwa.depth != 8 && xgwa.depth != 12)
-       return False;
+        {
+          if (grab_verbose_p)
+            fprintf(stderr, "%s: Pseudo/DirectColor depth %d unsupported\n",
+                    progname, xgwa.depth);
+          return False;
+        }
       else
        /* Allocate a TrueColor-like spread of colors for the image. */
        remap_p = True;
@@ -500,9 +577,15 @@ read_display (Screen *screen, Window window, Pixmap into_pixmap,
   image = XReadDisplay (dpy, window, xgwa.x, xgwa.y, xgwa.width, xgwa.height,
                        hints, &hints);
   if (!image)
-    return False;
+    {
+      if (grab_verbose_p)
+        fprintf(stderr, "%s: XReadDisplay() failed\n", progname);
+      return False;
+    }
   if (!image->data)
     {
+      if (grab_verbose_p)
+        fprintf(stderr, "%s: XReadDisplay() returned no data\n", progname);
       XDestroyImage(image);
       return False;
     }
@@ -543,7 +626,11 @@ read_display (Screen *screen, Window window, Pixmap into_pixmap,
                                     xgwa.width, xgwa.height,
                                     8, 0);
       if (!image2)
-       return False;
+        {
+          if (grab_verbose_p)
+            fprintf(stderr, "%s: out of memory?\n", progname);
+          return False;
+        }
 
       if (grab_verbose_p)
         fprintf(stderr, "%s: converting from depth %d to depth %d\n",
@@ -565,8 +652,9 @@ read_display (Screen *screen, Window window, Pixmap into_pixmap,
              pixel = ((r >> 5) | ((g >> 5) << 3) | ((b >> 6) << 6));
            else if (xgwa.depth == 12)
              pixel = ((r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8));
-           else if (xgwa.depth == 16)
-             pixel = ((r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10));
+           else if (xgwa.depth == 16 || xgwa.depth == 15)
+              /* Gah! I don't understand why these are in the other order. */
+             pixel = (((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3)));
            else
              abort();
 
index 6d2503a1fcf38c0a4179466954e58377737edfc0..416c6b2b97f4386aaa94040e509740807aa4126d 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1997
+/* xscreensaver, Copyright (c) 1992, 1993, 1994, 1997, 2001
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -24,4 +24,12 @@ extern void grab_screen_image (Screen *, Window);
    total kludge. */
 extern Bool use_subwindow_mode_p(Screen *screen, Window window);
 
+/* Whether the given window is:
+   - the real root window;
+   - the virtual root window;
+   - a direct child of the root window;
+   - a direct child of the window manager's decorations.
+ */
+extern Bool top_level_window_p(Screen *screen, Window window);
+
 #endif /* __GRABSCREEN_H__ */
diff --git a/utils/images/logo-180.gif b/utils/images/logo-180.gif
new file mode 100644 (file)
index 0000000..1355767
Binary files /dev/null and b/utils/images/logo-180.gif differ
diff --git a/utils/images/logo-180.xpm b/utils/images/logo-180.xpm
new file mode 100644 (file)
index 0000000..ab9c59b
--- /dev/null
@@ -0,0 +1,207 @@
+/* XPM */
+
+/* XScreenSaver Logo, designed by Angela Goodman <rzr_grl@yahoo.com>
+   Copyright (c) 2001 by Jamie Zawinski <jwz@jwz.org>
+   Unauthorized use or reproduction prohibited.
+
+   http://www.jwz.org/xscreensaver/
+ */
+
+static unsigned const char * const logo_180_xpm[] = {
+"180 180 16 1",
+"      c None    m None",
+".     c #020204 m #000000",
+"+     c #929291 m #000000",
+"@     c #A30204 m #000000",
+"#     c #604D28 m #000000",
+"$     c #600204 m #000000",
+"%     c #37332D m #000000",
+"&     c #2D0C05 m #000000",
+"*     c #A46E04 m #000000",
+"=     c #DBDBDA m #000000",
+"-     c #ED9E04 m #FFFFFF",
+";     c #797977 m #000000",
+">     c #B0B0AE m #000000",
+",     c #FEFEFC m #FFFFFF",
+"'     c #4F3504 m #000000",
+")     c #FD0204 m #FFFFFF",
+"                                                                                                                                                                                    ",
+"                                                                    .                                                                                                               ",
+"                                                                   ..                                                                                                               ",
+"                                                                   ...                                                                                                              ",
+"                                                                 . ...                                                                                                              ",
+"                                                                 .. ...                                                                                                             ",
+"                                                                 .&.....                                                                                                            ",
+"                                                                  &&....                                                                                                            ",
+"                                                                  .@&....                                                                                                           ",
+"                                                                   $).....                                                                                                          ",
+"                                                                   .)@....                                                                                                          ",
+"                                                                   .@)@....                                                                                                         ",
+"                                                                    &))$....                                                                                                        ",
+"                                                                    .)))&...                                                                                                        ",
+"                                                                    .@))@&...                                                                                                       ",
+"                                                                     $)))@....                                                                                                      ",
+"                                                                     &))))$....                                                                                                     ",
+"                                                                     .)))))&...                                                                                                     ",
+"                                                                      @))))@....                                                                                                    ",
+"                                                                      $)))))$&...                                                                                                   ",
+"                                                                      .)))))).&..                                                                                                   ",
+"                                                                      .))))))@....                     ..                                                                           ",
+"                                                                      .)))))))&'...                .. ...                                                                           ",
+"                                                                      .@)))))))%'..                .  ...                                                                           ",
+"                                                                       @)))))))$#&..              .. ...                                                                            ",
+"                                                                       $))))))))&#...            .& ....                                                                            ",
+"                                                                       &))))))))$*%..            &. ....                                                                            ",
+"                                                                       $))))))))@#*...          .$.....                                                                             ",
+"                                                                       &)))))))))&-'..         .@$.....                                                                             ",
+"                                                                       $)))))))))&-*..         &)......                                                                             ",
+"                                                                       &)))))))))@*-...       .@@.....                                                                              ",
+"                                                                       .)))))))))$*-&..       &)@.....                                                                              ",
+"                                                                       .)))))))))$**...      .@)$..&..                                                                              ",
+"                                                                       .)))))))))&-'..       &))$.&'..                                                                              ",
+"                                                                       $))))))))$'-...      .@))$.*'..                                                                              ",
+"                                                                       $)))))))).-'..       $)))&%-...                                                                              ",
+"                                                                       @)))))))$#-...      .))))&*-..                                                                               ",
+"                                                                      .@)))))))&-#..       &))))&-*..                                                                               ",
+"                                                                      .)))))))$*-...      .@))))&--...                                                                              ",
+"                  ....................................................$)))))))&-*.........&)))))&-*...............................................................                  ",
+"                 .....................................................@))))))$#-&.........$)))))&--.................................................................                ",
+"                .....................................................&)))))))&-*..........))))))$--..................................................................               ",
+"                .....................................................@))))))$*-'.........$))))))$*-..................................................................               ",
+"               .....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+&))))))).--..;,,,,,,#@))))))@*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=#....               ",
+"               ....%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&)))))))@'-#..=,,,,,=&)))))))$*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%@)))))))&--&.%,,,,,,+$)))))))@#-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%$)))))))@'-*..+,,,,,,%)))))))))&-%.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+$))))))))$*-'.&=,,,,,=&)))))))))&-'.&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>.)))))))))&--..#,,,,,,;@)))))))))$-#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&@))))))))$*-*..>,,,,,,#@)))))))))$**..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=%@)))))))))&--'.&,,,,,,=&))))))))))@#-..+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;$))))))))))%--..;,,,,,,>$)))))))))))%-&.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&))))))))))@#--..+,,,,,,;@)))))))))))&-'.%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>=,,,,,,,%@))))))))))$--#..=,,,,,,%))))))))))))$*#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;.>,&&=,,+$)))))))))))&--'.%,,,,,,,&))))))))))))@'*..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,=>>>>>>+>>>>+>>>>+&$;#..;>>&)))))))))))@'--..%>>>>>>+&)))))))))))))&-&.%>>>>+>>>>+>>>>+>>>>+>>>>+>>>>+>>>>>>>>>>>>>>=,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,+...................@&.......$)))))))))))@#--..........$)))))))))))))$*#...............................................%>,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,#...................&)........@)))))))))))@*-*..........@)))))))))))))@#*.................................................+,,,,,,,,=....               ",
+"               ....+,,,,,,,,+....................@@.......$))))))))))))$*-*..........@))))))))))))))&-&.................................................=,,,,,,,=....               ",
+"               ....+,,,,,,,=....................&)@.......)))))))))))))$--#..........@))))))))))))))$*#.................................................%,,,,,,,=....               ",
+"               ....+,,,,,,,>....................@)$......&)))))))))))))$*-*..........)))))))))))))))@'*..................................................,,,,,,,=....               ",
+"               ....+,,,,,,,+....................)).......$)))))))))))))@*-#..........))))))))))))))))&-..................................................>,,,,,,=....               ",
+"               ....+,,,,,,,+...................@)).......@)))))))))))))@#-*..........))))))))))))))))$#'.................................................>,,,,,,=....               ",
+"               ....+,,,,,,,+...................@)@......&)))))))))))))))%-*..........)))))))))))))))))&-.................................................>,,,,,,=....               ",
+"               ....+,,,,,,,+..................$))$......$)))))))))))))))&--..........)))))))))))))))))$*'................................................>,,,,,,=....               ",
+"               ....+,,,,,,,+..................@))&......$)))))))))))))))$*-&.........)))))))))))))))))@%-................................................>,,,,,,=....               ",
+"               ....+,,,,,,,+..................))).......@))))))))))))))))&-#.........))))))))))))))))))&*'...............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................$))).......@))))))))))))))))$*-.........))))))))))))))))))@'*...............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................@))@.......))))))))))))))))))&-&........)))))))))))))))))))$*'..............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................)))@.%.....))))))))))))))))))$#*........@))))))))))))))))))@&-..............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+................$)))$.*.....)))))))))))))))))))&*&.......$)))))))))))))))))))$*#.............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+................@)))$'*.....@)))))))))))))))))))&*.......&))))))))))))))))))))&-&............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............&))))$**..&%&@)))))))))))))))))))@%#...%&%.))))))))))))))))))))$#*...&%%&%%&%%&%%&%%&%%&%%....................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............$))))$*-..+,;@))))))))))))))))))))$#%..+,,#@))))))))))))))))))))&-#..%,,,,,,,,,,,,,,,,,,,,=+..................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............@))))$--..+,+@)))))))))))))))))))))&#...=,=&))))))))))))))))))))).-&..#,,,,,,,,,,,,,,,,,,,,,=.................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............)))))$*-%.#,>$))))))))))))))))))))))&#...=,'@))))))))))))))))))))@%-%..;,,,,,,,,,,,,,,,,,,,,,#................>,,,,,,=....               ",
+"               ....+,,,,,,,+..............$)))))$--&.#,,&))))))))))))))))))))))@&'..%,>$)))))))))))))))))))))$#-...+,,,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+..............@)))))@*-#.%,,#@))))))))))))))))))))))@&'..%=%))))))))))))))))))))))&**...>,,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+..............@)))))@#-#..,,+$)))))))))))))))))))))))@&%..;+$)))))))))))))))))))))@&--..#,,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............&))))))@#-*..=,=&))))))))))))))))))))))))$'&..;%))))))))))))))))))))))@'-#..>,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............&)))))))&--..+,,'@))))))))))))))))))))))))&#...#$))))))))))))))))))))))&*-..#,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............@)))))))&--..#,,>$)))))))))))))))))))))))))&#....)))))))))))))))))))))))&-#..>,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............@)))))))@#-#.&=,,&)))))))))))))))))))))))))@&#...$))))))))))))))))))))))$#-..#,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............)))))))))#-*..>,,;@)))))))))))))))))))))))))@''...)))))))))))))))))))))))&-'..,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............&)))))))))&--&.#,,=&))))))))))))))))))))))))))&*&..&))))))))))))))))))))))@#*..>,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............@)))))))))$*-'.&,,,#@))))))))))))))))))))))))))&*...@))))))))))))))))))))))&-..#,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............@)))))))))@#-*..>,,=&))))))))))))))))))))))))))$##..$))))))))))))))))))))))@##..=,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............@))))))))))%--..#,,,%)))))))))))))))))))))))))))&-&..@))))))))))))))))))))))&*..+,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............)))))))))))$*-#..=,,>&))))))))))))))))))))))))))@#*..$))))))))))))))))))))))$*&.#,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............))))))))))))&--..#,,,%@))))))))))))))))))))))))))&-&..@)))))))))))))))))))))@''.%,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........$))))))))))))&*-'..=,,+$))))))))))))))))))))))))))@#*..$))))))))))))))))))))))&#..=,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........$))))))))))))@'-*..;,,,&)))))))))))))))))))))))))))&-&..))))))))))))))))))))))$#..>,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........$)))))))))))))&*-'..=,,+$))))))))))))))))))))))))))$**..$))))))))))))))))))))))&..;,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........@)))))))))))))@'-*..;,,,.))))))))))))))))))))))))))@%-...))))))))))))))))))))))&%.%,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........@))))))))))))))$*-%..=,,;$))))))))))))))))))))))))))&-'..@)))))))))))))))))))))$&..,,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........@)))))))))))))))&-*..%,,=&))))))))))))))))))))))))))@'-..$)))))))))))))))))))))@&..>,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........@)))))))))))))))$#-#..>,,;@))))))))))))))))))))))))))&*&.&))))))))))))))))))))))...;,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........@))))))))))))))))&*-&.&=,=.)))))))))))))))))))))))))))&&..))))))))))))))))))))))$..%,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........@))))))))))))))))@&-#..+,,#@)))))))))))))))))))))))))))$.$))))))))))))))))))))))@...=,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........$)))))))))))))))))$#-%..=,>&)))))))))))))))))))))))))))))))))))))))))))))))))))))...>,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........$))))))))))))))))))$**..#,,#@))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...........&))))))))))))))))))@&-'..>,>$))))))))))))))))))))))))))))))))))))))))))))))))))))$..#,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............)))))))))))))))))))@%-..%,,&))))))))))))))))))))))))))))))))))))))))))))))))))))@..%,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............@)))))))))))))))))))$##..;,#@)))))))))))))))))))))))))))))))))))))))))))))))))))@...,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+............$))))))))))))))))))))&*&.&=>$))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............)))))))))))))))))))))%#..;,&))))))))))))))))))))))))))))))))))))))))))))))))))))&..>,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............@))))))))))))))))))))$''..=#@)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.............&)))))))))))))))))))))&#..#+$)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+..............@))))))))))))))))))))@&'..=$)))))))))))))))))))))))))))))))))))))))))))))))))))@..&,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+..............$)))))))))))))))))))))$'..+&)))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............))))))))))))))))))))))...#%))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............$)))))))))))))))))))))$....))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+................))))))))))))))))))))))....))))))))))))))))))))))))))))))))))))))))))))))))))))...;,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+................$)))))))))))))))))))))$...@)))))))))))))))))))))))))))))))))))))))))))))))))))&&.#,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................))))))))))))))))))))))&..))))))))))))))))))))))))))))))))))))))))))))))))))))$%.%,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................$))))))))))))))))))))))&&))))))))))))))))))))))))))))))))))))))))))))))))))))$'..,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$#..=,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................+$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................=%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,+&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-..;,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-%.#,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'.%,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@'-#.&,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,&@))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@*-*..=,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,>$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&--&..=,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'..#,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,,=&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$**..%,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).*..&=,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$'...=,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................,,,,,,,,%@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).&..;,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................=,,,,,,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$...#,,,,,,,,,,,,,>................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................>,,,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))...%,,,,,,,,,,,,,,+................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................;,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&..&=,,,,,,,,,,,,,,%................>,,,,,,=....               ",
+"               ....+,,,,,,,+..................+,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,,,,,;.................>,,,,,,=....               ",
+"               ....+,,,,,,,+...................#+>>>>>>>>%@))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...#>>>>>>>>>>>>>+#..................>,,,,,,=....               ",
+"               ....+,,,,,,,+...............................@)))))))))))))))))))))))))))))))))))))))))))))))))))))))&.....................................>,,,,,,=....               ",
+"               ....+,,,,,,,+................................@)))))))))))))))))))))))))))))))))))))))))))))))))))))&......................................>,,,,,,=....               ",
+"               ....+,,,,,,,+................................&@)))))))))))))))))))))))))))))))))))))))))))))))))))$.......................................>,,,,,,=....               ",
+"               ....+,,,,,,,+.................................&@)))))))))))))))))))))))))))))))))))))))))))))))))@........................................>,,,,,,=....               ",
+"               ....+,,,,,,,+..................................&@)))))))))))))))))))))))))))))))))))))))))))))))$.........................................>,,,,,,=....               ",
+"               ....+,,,,,,,+...................................&@)))))))))))))))))))))))))))))))))))))))))))))$..........................................>,,,,,,=....               ",
+"               ....+,,,,,,,+....................................&@)))))))))))))))))))))))))))))))))))))))))))$...........................................>,,,,,,=....               ",
+"               ....+,,,,,,,+......................................@)))))))))))))))))))))))))))))))))))))))))&............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+.......................................$))))))))))))))))))))))))))))))))))))))@..............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+.........................................@)))))))))))))))))))))))))))))))))))&...............................................>,,,,,,=....               ",
+"               ....+,,,,,,,+..........................................$))))))))))))))))))))))))))))))))@.................................................=,,,,,,=....               ",
+"               ....+,,,,,,,=............................................$))))))))))))))))))))))))))))$&.................................................&,,,,,,,=....               ",
+"               ....+,,,,,,,,%.............................................$@))))))))))))))))))))))@$&...................................................;,,,,,,,=....               ",
+"               ....+,,,,,,,,=................................................$@@))))))))))))))@@@&'#%..................................................%,,,,,,,,=....               ",
+"               ....+,,,,,,,,,=&...................................................$$@@@@@@@$$&''**'...................................................%=,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,=+%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%..................#----'............%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%##+,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&..................&''..............=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+....................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&.....................................=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#......................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+........................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>&.........................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>............................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>..............................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#................................................#=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%..................................................&+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%......................................................%>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;%..........................................................&;=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>................................................................+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................................................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%................................................................#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
+"               ....&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>....               ",
+"                ....%;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;.....               ",
+"                .....................................................................................................................................................               ",
+"                 ...................................................................................................................................................                ",
+"                 ..................................................................................................................................................                 ",
+"                   ...............................................................................................................................................                  ",
+"                                                                                                                                                                                    ",
+"                                                                                                                                                                                    ",
+"                                                                                                                                                                                    "};
diff --git a/utils/images/logo-50.gif b/utils/images/logo-50.gif
new file mode 100644 (file)
index 0000000..fcfcfd7
Binary files /dev/null and b/utils/images/logo-50.gif differ
diff --git a/utils/images/logo-50.xpm b/utils/images/logo-50.xpm
new file mode 100644 (file)
index 0000000..5ca5d63
--- /dev/null
@@ -0,0 +1,77 @@
+/* XPM */
+
+/* XScreenSaver Logo, designed by Angela Goodman <rzr_grl@yahoo.com>
+   Copyright (c) 2001 by Jamie Zawinski <jwz@jwz.org>
+   Unauthorized use or reproduction prohibited.
+
+   http://www.jwz.org/xscreensaver/
+ */
+
+static unsigned const char * const logo_50_xpm[] = {
+"50 50 16 1",
+"      c None    m None",
+".     c #050305 m #000000",
+"+     c #989798 m #000000",
+"@     c #A30805 m #000000",
+"#     c #5E4D34 m #000000",
+"$     c #A6531B m #000000",
+"%     c #620805 m #000000",
+"&     c #FA0204 m #FFFFFF",
+"*     c #A63013 m #000000",
+"=     c #CCCBCB m #000000",
+"-     c #B1B0AE m #000000",
+";     c #707070 m #000000",
+">     c #523410 m #000000",
+",     c #FCFCFA m #FFFFFF",
+"'     c #AC6C44 m #000000",
+")     c #24221C m #000000",
+"                                                  ",
+"                  ..                              ",
+"                  ..                              ",
+"                   @.                             ",
+"                   @@.                            ",
+"                   %&%                            ",
+"                    &&.     .                     ",
+"                    &&*.   ..                     ",
+"                    &&@>  %.                      ",
+"                    &&*.  @)                      ",
+"                   %&&#. @&#                      ",
+"     ..............@&*)..&&#.................     ",
+"    .+,,,,,,,,,,,,'&&$;,'&@#=,,,,,,,,,,,,,,,-.    ",
+"    .+,,,,,,,,,,,-&&*#=,@&&>-,,,,,,,,,,,,,,,-.    ",
+"    .+,,,,,,,,,,,@&&$#,=&&&*;,,,,,,,,,,,,,,,-.    ",
+"    .+,,=;;;;;>)*&&&'>;#&&&*>;;;;;;;;;;;;+,,-.    ",
+"    .+,=.....%..&&&&'..%&&&&>.............+,-.    ",
+"    .+,-.....@..&&&&$..%&&&&*.............;,-.    ",
+"    .+,+....%@.%&&&&$..%&&&&@)............;,-.    ",
+"    .+,-....@@.%&&&&&).%&&&&&*............;,-.    ",
+"    .+,-....&*>$&&&&&@);&&&&&@>#==-==;....;,-.    ",
+"    .+,-....&*>-&&&&&&%#*&&&&&*>-,,,,,....;,-.    ",
+"    .+,+...%&@#=&&&&&&&%)&&&&&&*#,,,,,....;,-.    ",
+"    .+,-...@&&$;'&&&&&&&)@&&&&&@>=,,,,....;,-.    ",
+"    .+,-...&&&$>=&&&&&&&@)&&&&&&*;,,,,....;,-.    ",
+"    .+,-...&&&&#-$&&&&&&&>@&&&&&@#,,,,....;,-.    ",
+"    .+,+...&&&&$>-&&&&&&&*%&&&&&&),,,,....;,-.    ",
+"    .+,-...&&&&&#+*&&&&&&&@&&&&&&%=,,,....;,-.    ",
+"    .+,-...&&&&&@>+&&&&&&&&&&&&&&%+,,,....;,-.    ",
+"    .+,-...@&&&&&%#&&&&&&&&&&&&&&@;,,,....;,-.    ",
+"    .+,+....&&&&&&)@&&&&&&&&&&&&&&>,,,....;,-.    ",
+"    .+,-....@&&&&&%%&&&&&&&&&&&&&&),,,....;,-.    ",
+"    .+,-....%&&&&&&&&&&&&&&&&&&&&&),,,....;,-.    ",
+"    .+,-....;*&&&&&&&&&&&&&&&&&&&&>=,,....;,-.    ",
+"    .+,+....;=&&&&&&&&&&&&&&&&&&&@#-,,....;,-.    ",
+"    .+,-....;,'&&&&&&&&&&&&&&&&&&*#,,,....;,-.    ",
+"    .+,-....;,,*&&&&&&&&&&&&&&&&@),,,,....;,-.    ",
+"    .+,-.....#;#@&&&&&&&&&&&&&&&.#;;;)....;,-.    ",
+"    .+,+.........@&&&&&&&&&&&&&%..........;,-.    ",
+"    .+,-..........@&&&&&&&&&&&............;,-.    ",
+"    .+,-...........%&&&&&&&&@.............;,-.    ",
+"    .+,,#)))))))))))..%@@@*)...))))))))))>,,-.    ",
+"    .+,,,,,,,,,,,,,,).........;,,,,,,,,,,,,,-.    ",
+"    .+,,,,,,,,,,,,,#...........-,,,,,,,,,,,,-.    ",
+"    .+,,,,,,,,,,,=#.............+,,,,,,,,,,,-.    ",
+"    .+,,,,,,,,,,#.................-,,,,,,,,,-.    ",
+"    .+,,,,,,,,,,==-=-=-=-=-=-=-=-=,,,,,,,,,,-.    ",
+"    .;++++++++++++++++++++++++++++++++++++++;.    ",
+"     ........................................     ",
+"                                                  "};
diff --git a/utils/images/logo-big.gif b/utils/images/logo-big.gif
new file mode 100644 (file)
index 0000000..5ea3da2
Binary files /dev/null and b/utils/images/logo-big.gif differ
diff --git a/utils/images/logo.eps b/utils/images/logo.eps
new file mode 100644 (file)
index 0000000..4843e79
--- /dev/null
@@ -0,0 +1,8058 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Adobe Illustrator(R) 8.0
+%%AI8_CreatorVersion: 8
+%%For: (rzr Grl) (evol engel)
+%%Title: (xscreensaver.eps)
+%%CreationDate: (1/30/01) (8:38 PM)
+%%BoundingBox: 179 249 429 531
+%%HiResBoundingBox: 179.3335 249.9619 428.666 530.8477
+%%DocumentProcessColors: Black
+%%DocumentFonts: Device
+%%DocumentSuppliedFonts: Device
+%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0
+%%+ procset Adobe_typography_AI5 1.0 1
+%%+ procset Adobe_ColorImage_AI6 1.3 0
+%%+ procset Adobe_Illustrator_AI5 1.3 0
+%%+ procset Adobe_cshow 2.0 8
+%%+ procset Adobe_shading_AI8 1.0 0
+%AI5_FileFormat 4.0
+%AI3_ColorUsage: Color
+%AI3_IncludePlacedImages
+%AI7_ImageSettings: 1
+%%DocumentCustomColors: (PANTONE 152 CVC)
+%%+ (PANTONE 485 CVC)
+%%CMYKCustomColor: 0 0.51 1 0 (PANTONE 152 CVC)
+%%+ 0.91 0.01 0.93 0 (PANTONE 354 2X CVC)
+%%+ 0 1 0.91 0 (PANTONE 485 CVC)
+%%CMYKProcessColor: 1 1 1 1 ([Registration])
+%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) 
+%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1
+%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () 
+%AI3_TemplateBox: 306.5 395.5 306.5 395.5
+%AI3_TileBox: 30 31 582 761
+%AI3_DocumentPreview: Header
+%AI5_ArtSize: 612 792
+%AI5_RulerUnits: 2
+%AI5_ArtFlags: 1 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 4
+%AI8_OpenToView: -109 667 1 718 623 18 0 1 153 44 0 0
+%AI5_OpenViewLayers: 3733
+%%PageOrigin:30 31
+%%AI3_PaperRect:-30 761 582 -31
+%%AI3_Margin:30 -31 -30 31
+%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI7_Thumbnail: 116 128 8
+%%BeginData: 12612 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FD2BFF2727FD71FF2052F87DFD70FF76F8F8F8A8FD6FFFA8FD04F8
+%FD70FF4B69F8F852FD6FFFA84468F8F87DFD6FFF27FC44F827A8FD6EFF27
+%8C8C20F827A8FD6DFFA844B08C27F852FD6DFFA820FCFC4426F87DFD6DFF
+%20B0FCB0204AF8FD09FFA1FFA8FD61FF4B8CFCFC8CF8F827FD07FF7DF87D
+%F87DFD60FF528DFCB0FC4B26F8A8FD06FF204B27F8FD61FF7D68FCFCFC8C
+%4AF827FD05FF27F827F852FD61FFA869FCB0FCB02074F8FD04FFA8204BF8
+%F8A8FD61FFA844FD04FC4492F87DFFFFFF2068F8F8F8FD62FF7D69FCB0FC
+%B02050F8A8FFFF526944F8F852FD62FF7668FCFCFC684AF827FFFFA8208C
+%68F8F852FD62FF27B0FCB0FC274AF87DFFFF7644B02050F87DFD45FFA852
+%FD1B2720FCFCFC6820F8F8272727F8FCFC206EF8F8FD202752A8FD22FF7D
+%FD1CF82044B0FCB0F874FD04F82069FCB0449EFD23F827FD22FF27F8F8F8
+%FD1927F8FCFCFC4474F8F8272727208CFCFC6844F8F8FD1F27F8F8F87DFD
+%21FFF8F8F8FD19FF4B69FCB08C206EF852FFFFA844B0FCB06898F87DFD1F
+%FFA8F8F827FD21FFF8F827FD18FF2744FCFCFC684426F8A8FFFF4B68FCFC
+%FC8C44F827FD20FFF8F827FD21FFF8F827FD17FF764BFCB0FCB0F8C0F852
+%FFFFFF27FCB0FCB0FC4B2027FD20FFF8F827FD21FFF8F827FD16FF7D20FD
+%04FC8C4A44F87DFFFFA844FD05FC204AF8FD20FFF8F827FD21FFF8F827FD
+%16FF278CB0FCB0FC696E26F8FFFFFF768DFCB0FCB0FC444AF87DFD1FFFF8
+%F827FD21FFF8F827FD10FF4BA1A8FFFF5268FD05FC20C0F852FFFFFF4B8C
+%FD05FC6844F852FD1FFFF8F827FD21FFF8F827FD05FF7D52275227522752
+%2752274B27F8F85220B0FCB0FCB0FC4B92F8F852275220B0FCB0FCB0FCB0
+%2026F852275227522752275227522752275227522752275227522752A8FD
+%05FFF8F827FD21FFF8F827FD04FF52FD0AF8206820F8F8F88CFD05FC8C44
+%74FD05F820FD07FC44FD1CF87DFD04FFF8F827FD21FFF8F827FFFFFFA8FD
+%0AF8204444F826F820FCB0FCB0FCB08C744AFD05F844B0FCB0FCB0FCB068
+%4AFD1BF827FD04FFF8F827FD21FFF8F827FFFFFFA8FD0BF88CF8F8F82068
+%FD06FC8C444AFD05F868FD08FC2020FD1BF8FD04FFF8F827FD21FFF8F827
+%FFFFFFA8FD0AF8458C20F8F820B0FCB0FCB0FCB0FC266EFD05F844B0FCB0
+%FCB0FCB0FC6944FD1BF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F820
+%6868F8F8F820FD08FC449EFD05F868FD08FC8C20FD1BF8FD04FFF8F827FD
+%21FFF8F827FFFFFF7DFD0AF8B044F8F8F820B0FCB0FCB0FCB0FC8D2026FD
+%04F844B0FCB0FCB0FCB0FCB0446EFD1AF8FD04FFF8F827FD21FFF8F827FF
+%FFFFA8FD09F844FC20F8F8F820FD09FC4420FD04F820FD0AFC2020FD19F8
+%FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F8218CB02026F8F820B0FCB0
+%FCB0FCB0FCB0FC20FD04F820B0FCB0FCB0FCB0FCB0FC6944FD19F8FD04FF
+%F8F827FD21FFF8F827FFFFFFA8FD09F8FCFC444AF85220FD0AFC8C20F8F8
+%274B8CFD0AFC2020F8F87D527D527D527D527D527D27FD0AF8FD04FFF8F8
+%27FD21FFF8F827FFFFFFA8FD08F845FCB02074F8A820B0FCB0FCB0FCB0FC
+%B0FCB06820F827A84BFCB0FCB0FCB0FCB0FCB08C2020F852FD0BFF27FD09
+%F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F82068FCFC206EF87D4B8C
+%FD0BFC4420F827208CFD0AFC6820F8F852FD0AFFA8FD09F8FD04FFF8F827
+%FD21FFF8F827FFFFFFA8FD07F820B0FCB0209EF87D7D69FCB0FCB0FCB0FC
+%B0FCB0FCB0444BF87620B0FCB0FCB0FCB0FCB0FCB0685120F8A8FD09FFA8
+%FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F844FCFCFC686EF827
+%FF20FD0DFC2026F82068FD0BFC2074F852FD09FFA8FD09F8FD04FFF8F827
+%FD21FFF8F827FFFFFF7DFD06F82068B0FCB0686E26F8A87668B0FCB0FCB0
+%FCB0FCB0FCB0FCB0204AF820FCB0FCB0FCB0FCB0FCB0FCB0204AF8FD09FF
+%7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F88CFD04FCF874F8
+%7DA820FD0DFC8CF8F8F868FD0BFC4420F852FD08FFA8FD09F8FD04FFF8F8
+%27FD21FFF8F827FFFFFFA8FD06F820FCB0FCB0FC4B98F827FF4B8DFCB0FC
+%B0FCB0FCB0FCB0FCB0FC8D44F8F8B0FCB0FCB0FCB0FCB0FCB0FC27F827FD
+%08FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F820FD05FC68
+%4A44F87DFF20FD0EFC20202044FD0BFC444AF8A8FD07FFA8FD09F8FD04FF
+%F8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0209EF827FF4C8C
+%B0FCB0FCB0FCB0FCB0FCB0FCB0684AF820FCB0FCB0FCB0FCB0FCB0FCB020
+%F87DFD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F844FD
+%06FC684426F8A8A820FD0EFCF84AF868FD0BFC20F852FD07FFA8FD09F8FD
+%04FFF8F827FD21FFF8F827FFFFFFA8FD06F869FCB0FCB0FCB0FC4B74F827
+%FF4B8DFCB0FCB0FCB0FCB0FCB0FCB0FC694AF820B0FCB0FCB0FCB0FCB0FC
+%B0684AF8FD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F8
+%44FD07FC8C2644F87DFF20FD0DFC8C20F820FD0BFC8C20F8A8FD06FFA8FD
+%09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD06F869FCB0FCB0FCB0FCB0
+%4474F826A84B8CB0FCB0FCB0FCB0FCB0FCB0FCB08C2020B0FCB0FCB0FCB0
+%FCB0FCB0FC20F87DFD06FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFF
+%A8FD06F844FD09FCF874F8527D44FD0EFC8C8CFD0CFC44F827FD06FFA8FD
+%09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0FCB0
+%FCB0204AF8A821B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
+%FCB0FCB0FC8DF827FD06FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF
+%A8FD07F8FD0AFC8C20F8F87D44FD1BFC8C20F8FD06FFA8FD09F8FD04FFF8
+%F827FD21FFF8F827FFFFFFA8FD06F82068B0FCB0FCB0FCB0FCB0FC6920F8
+%5227FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
+%20F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F820
+%FD0BFC20F8F820FD1CFC44F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8
+%F827FFFFFFA8FD07F8208DFCB0FCB0FCB0FCB0FCB08C26F8528CB0FCB0FC
+%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB044F852FD05FFA8
+%FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F820FD0BFC44F8F868
+%FD1BFC68F827FD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD
+%08F8208CB0FCB0FCB0FCB0FCB0FCB020F844B0FCB0FCB0FCB0FCB0FCB0FC
+%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0684AF8FD05FF7DFD09F8FD04FFF8F8
+%27FD21FFF8F827FFFFFFA8FD09F820FD0BFC8CF868FD1BFC8CF8F8FD05FF
+%A8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F8208DFCB0FCB0FC
+%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC
+%B0FCB0FCB08C4BF8A8FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFF
+%FFA8FD09F82720FD28FC8C20F87DFD04FFA8FD09F8FD04FFF8F827FD21FF
+%F8F827FFFFFFA8FD09F8277644B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
+%FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB08C74F87DFD04FFA8
+%FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827FF278CFD26FC44
+%6EF827FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827
+%FFA84BFCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC
+%B0FCB0FCB0FCB0FCB0FCB02074F852FD04FFA8FD09F8FD04FFF8F827FD21
+%FFF8F827FFFFFFA8FD09F827FFFF5268FD24FC684AF8F8A8FD04FFA8FD09
+%F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD09F827FFFFFF208DFCB0FCB0
+%FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
+%FC20F827A8FD05FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09
+%F827FD04FFF88CFD21FC8CF8F87DFD06FFA8FD09F8FD04FFF8F827FD21FF
+%F8F827FFFFFFA8FD08F82727FD04FFA820B0FCB0FCB0FCB0FCB0FCB0FCB0
+%FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB020F852FD07FF52FD09F8
+%FD04FFF8F827FD21FFF8F827FFFFFFA8FD0AF8277D7DA87D7DF8FD1FFC20
+%2027A87DA87DA87DA852FD0AF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD
+%10F82020B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC
+%B0FCB06820FD14F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD11F82020FD
+%1BFC6820FD15F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD12F82120B0FC
+%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB06821FD16F8FD04
+%FFF8F827FD21FFF8F827FFFFFFA8FD13F820F88CFD16FC4420FD17F8FD04
+%FFF8F827FD21FFF8F827FFFFFF7DFD14F820F88DFCB0FCB0FCB0FCB0FCB0
+%FCB0FCB0FCB0FCB0FC8DF820FD18F8FD04FFF8F827FD21FFF8F827FFFFFF
+%A8FD17F82068FD0FFC8C44FD1BF8FD04FFF8F827FD21FFF8F827FD04FF27
+%FD17F82120698CB0FCB0FCB0FCB0FCB0FC8D4427FD1BF852FD04FFF8F827
+%FD21FFF8F827FD04FF7DFD1AF820F820446844684444202620FD1CF827A8
+%FD04FFF8F827FD21FFF8F827FD05FFA87D527D527D527D527D527D527D52
+%7D527D527D527D527DFD0AF82050FD07F827527D527D527D527D527D527D
+%527D527D527D527D52A8FD06FFF8F827FD21FFF8F827FD1CFFFD15F8A8FD
+%1BFFF8F827FD21FFF8F827FD1BFF52FD16F8FD1BFFF8F827FD21FFF8F827
+%FD1AFF52FD18F8FD1AFFF8F827FD21FFF8F827FD19FF2727FD19F8A8FD18
+%FFF8F827FD21FFF8F827FD17FF7DFD1DF827A8FD16FFF8F827FD21FFF8F8
+%27FD15FFFD23F8A8FD14FFF8F827FD21FFF8F827FD14FF52FD24F8FD14FF
+%F8F827FD21FFF8F827FD15FF2727F827F827F827F827F827F827F827F827
+%F827F827F827F827F827F827F827F827F8A8FD14FFF8F827FD21FFF8F827
+%FD4DFFF8F827FD21FFF8F827FD4DFFF8F827FD21FFF8F8F8277D527D527D
+%527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D
+%527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D
+%527D527D527D527D527D27F8F852FD21FF52FD51F87DFD22FF52FD4EF827
+%7DFD25FFFD4CA8FD91FFCACACAFFFFFF9AC3CAFFFFCA93B59ACAFD05FFCA
+%FD06FFCACACAFD04FFCA93B593BC6FFFFFCA93B593BC93FFCABC9AFFFFFF
+%93BCFFFFFFCA9AB593CAFD05FFB6A1FFFFFF94CAFD04FFCAFFFFFF93B593
+%BC93FD04FFCAC4FD13FF9A448DCAFFA18C44BCFFBC6820F8208CCAFFFF93
+%93688D93FFFFFF8C68448D8CCAFFCA8C20F8F8F8449ACA8C20F8F8F8449A
+%BC448CCAFF9A6868CAFFBC6820F84468FD04FFCA688CCAFF9A6868CAFFFF
+%8C688DFF8C20F8F8F82093FF9AB044688CBCCAFD10FFCA6944BCFFB62068
+%CAFF8CF82069444493FF8C44F820F8689AFF9320F86944208CFFCA68F893
+%8CB58CCACA68F8938CB58CCA9A4420BCFFC32069CAFF8CF82068204593FF
+%FFFF9A4444C3FFC320459AFFCA6920B6FF93F8938CB58CBCFFB5F8444445
+%68C3FD11FF8CF88CFF8CF88CFFC368F8B0C3B0F8B5FF8DF8208C68F8B5FF
+%B5F88C9ABC208DFFCA442093FD04FFCA442093FD04FFBC20F88CFF762020
+%CAA144F8B5C38CF8B5FFFFFFB5F8208CFFC368F8B5FFC4442093FF8CF88C
+%FD04FFCA68208CCA8C208CFD11FFB5F893C393F8B5FFCA44449AFF934493
+%FF68F88CFF93B59AFF68F88CFF764444CAC46920BCFD04FFC46920BCFD04
+%FF9320F893A1BC204493CA204493FF934493FFFFFF8CF8F8B5FFFF8CF88C
+%FF932044CAFF8DF8B5FD04FFCA68F8B5FFB5F893FD11FF9A4420FC20449A
+%FFC368F8BCFFCA93CAC368F8B0FD05FF69F88DFFA12068C3CA442093FD04
+%FFCA442093FD04FF93F8F82093932020BCC34420BCFFCA93A1FFFFCA8DF8
+%F844CAFFB5F88CFF93F88CCAFF68F88CFD04FFCA44F88CFF8CF88CFD12FF
+%8CF844F88CFFFFCA44F894FD04FFCA44F88DFD05FF68F88CFFCA4544CACA
+%6920BCFD04FFCA6920BCFD04FF8CF8F8F88CBD20449ACA442093FD06FFCA
+%44F8F8449AFF932068CA8CF88CFFFF68F8B5FD04FFCA68F8B5FFB5F8B5FD
+%12FF93F8F8F8B5FFFFC368F8B093CACAFFC36820BCFD05FF6FF88DC39320
+%68CACA44208CCAC3CAFFCA20208CCAC3CAFFB5F8F8F8688C2020BCC368F8
+%FC6FCACAFFFFFF93202044F8B5FFBD20449393F893FFCA44F88CCAC3CAFF
+%CA44F88CCA8CF88CFD12FFA144F84493FFFFFF8C20F84444B5CAFF444493
+%FD05FF68F8446920F88CFFCA44F84444688CFFA144F84444688CFF8DF820
+%4420B020449AFF8C20204444B5FFFFFFB5F89368F88CFFC46920B544449A
+%FFC469F82044698CFFC469F868442020BCFD12FFCA44F844CAFFFFFFC38C
+%68202020BCFF682093FD05FF6FF8F8F82068BCFFCA20F8F820688DFFA120
+%F8F820688DFFB5F86868F88C2020BCFFC38C68442020BCFFFF8CF88C8CF8
+%68C3FF8CF88C2044CAFFCA44F8F82044B0CACA44F8F8F8208DCAFD12FFA1
+%68F8699BFD05FFCACA8C2093FF44F88CFD05FF69F8F8F844BCFFFFCA44F8
+%4593CAFFFFA144F84593CAFFFF8DF844B5F868F8459AFFFFFFCAC38C2093
+%FFCA93F8938C2044C3FFB5F868F893CAFFCA69F8208CCAFFFFCA69F8F8F8
+%93CAFD13FF9420F8F8B5FD07FFB5F893C368F8B5FD05FF9AF8F8F8208CFF
+%FFCA44208CFD04FFCA20208CFD04FFB5F8689344F8F820BCFD05FFB5F8B5
+%FFBC202093BC202093FF8C20F8F88CFFFFCA44F88CFD04FFCA44F8F8F844
+%C3FD13FF8CF868208CFFFFFFA1C3FFFF8CF868CA44F88DFD05FF6FF86893
+%F8B5FFFFC46920BCFD04FFC46820BCFD04FF8CF88CCA68F8F84493FF9AC3
+%CAFF8DF86FFF932068B58C44F8B5FFBC20F8F8B5FFFFCA68F8B5FD04FFCA
+%68F8B0442093FD12FFCA68F8FC44449AFFC38C44BCFF93F88DC368F8B5FF
+%FF68B0FF93F86F8CF844CAFFCA442093FD04FFCA442093FD04FF93F88DFF
+%93F8F820BCC38C449AFFB5F869FFB0FD06F868FFA168F82093FFFFFF44F8
+%8CFD04FFCA4420938DF88DFD12FFBC2045BC93F8B5FFCA442193FF8CF88C
+%CA44F893FF9A4568FF6FF88CC3444593FFCA69209AFD04FFCA69209AFD04
+%FF8CF88CFF9321F8449ACA442093FF8DF868FF8CF820934420F8699BFF8C
+%F844C3FFFFFF6FF8B5FD04FFCA6820BD8D2068CAFD11FF8CF868FF8CF868
+%FFCA68F8B09BFCF88DC368F8B593B5F868C39AF88DCA68F8B5FFCA442093
+%FD04FFCA442093FD04FFB5F88DFFCA44F820BCC368F88C9AB5F86F9A4420
+%93CAC38C20F893FF93F868C3FFFFFF68F88CFD04FFCA442093BD204493FD
+%10FFCA93F8B5FFBC20449AFF8CF8206920208CFF8CF8204444F88CFF6FF8
+%8CFF8CF868FFCA68F8938C8D8CC3CA68F8938C8D8CC38DF88CFFFFB5F844
+%9AFF8CF82068F82093BC2093CAFFFFCA68F88CFF8DF88CFD04FFB5F8938C
+%B568B5C469F8BCCA93F8B5FD10FFCA688DA1FFCA8D2093FFBC6820F82068
+%A1FFBC44F8F8204493FFB5F88DFF93204494CA44FD05F88CCA44FD05F88C
+%93208CFFFF934444BCFFBC6820F82068CA9A8C93FD04FFB020FCCABC4493
+%FD04FF8CFD05F868CA682093FF8CF868CAFD10FFB5CAFFFFFFBCB59AFFFF
+%CA93B593CAFFFFFFC38DB593C3FFFF9AB59AFFCAB593FFFFB58CB58DB58C
+%CAFFB58CB58DB58CCACAB59AFFFFFF93CAFFFFFFCA93B593CAFFFFC3FD05
+%FFCAB5CAFFFFB59AFD04FFBC8DB58CB58DBCFFB68DCAFFCA8CBCFDFCFFFD
+%FCFFFDFCFFFDFCFFFDFCFFFDFCFFFDECFFFF
+%%EndData
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset Adobe_level2_AI5 1.2 0
+%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation)
+%%Version: 1.2 0
+%%CreationDate: (04/10/93) ()
+%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
+userdict /Adobe_level2_AI5 26 dict dup begin
+       put
+       /packedarray where not
+       {
+               userdict begin
+               /packedarray
+               {
+                       array astore readonly
+               } bind def
+               /setpacking /pop load def
+               /currentpacking false def
+        end
+               0
+       } if
+       pop
+       userdict /defaultpacking currentpacking put true setpacking
+       /initialize
+       {
+               Adobe_level2_AI5 begin
+       } bind def
+       /terminate
+       {
+               currentdict Adobe_level2_AI5 eq
+               {
+                end
+               } if
+       } bind def
+       mark
+       /setcustomcolor where not
+       {
+               /findcmykcustomcolor
+               {
+                       (AI8_CMYK_CustomColor)
+                       6 packedarray
+               } bind def
+               /findrgbcustomcolor
+               {
+                       (AI8_RGB_CustomColor)
+                       5 packedarray
+               } bind def
+               /setcustomcolor
+               {
+                       exch 
+                       aload pop dup
+                       (AI8_CMYK_CustomColor) eq
+                       {
+                               pop pop
+                               4
+                               {
+                                       4 index mul
+                                       4 1 roll
+                               } repeat
+                               5 -1 roll pop
+                               setcmykcolor
+                       }
+                       {
+                               dup (AI8_RGB_CustomColor) eq
+                               {
+                                       pop pop
+                                       3
+                                       {
+                                               1 exch sub
+                                               3 index mul 
+                                               1 exch sub
+                                               3 1 roll
+                                       } repeat
+                                       4 -1 roll pop
+                                       setrgbcolor
+                               }
+                               {
+                                       pop
+                                       4
+                                       {
+                                               4 index mul 4 1 roll
+                                       } repeat
+                                       5 -1 roll pop
+                                       setcmykcolor
+                               } ifelse
+                       } ifelse
+               }
+               def
+       } if
+       /setAIseparationgray
+       {
+               false setoverprint
+               0 setgray
+               /setseparationgray where{
+                       pop setseparationgray
+               }{
+                       /setcolorspace where{
+                               pop
+                               [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace
+                               1 exch sub setcolor
+                       }{
+                               setgray
+                       }ifelse
+               }ifelse
+       } def
+       
+       /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def
+       userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put
+       userdict /level2?
+       systemdict /languagelevel known dup
+       {
+               pop systemdict /languagelevel get 2 ge
+       } if
+       put
+/level2ScreenFreq
+{
+ begin
+               60
+               HalftoneType 1 eq
+               {
+                       pop Frequency
+               } if
+               HalftoneType 2 eq
+               {
+                       pop GrayFrequency
+               } if
+               HalftoneType 5 eq
+               {
+                       pop Default level2ScreenFreq
+               } if
+ end
+} bind def
+userdict /currentScreenFreq  
+       level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put
+level2? not
+       {
+               /setcmykcolor where not
+               {
+                       /setcmykcolor
+                       {
+                               exch .11 mul add exch .59 mul add exch .3 mul add
+                               1 exch sub setgray
+                       } def
+               } if
+               /currentcmykcolor where not
+               {
+                       /currentcmykcolor
+                       {
+                               0 0 0 1 currentgray sub
+                       } def
+               } if
+               /setoverprint where not
+               {
+                       /setoverprint /pop load def
+               } if
+               /selectfont where not
+               {
+                       /selectfont
+                       {
+                               exch findfont exch
+                               dup type /arraytype eq
+                               {
+                                       makefont
+                               }
+                               {
+                                       scalefont
+                               } ifelse
+                               setfont
+                       } bind def
+               } if
+               /cshow where not
+               {
+                       /cshow
+                       {
+                               [
+                               0 0 5 -1 roll aload pop
+                               ] cvx bind forall
+                       } bind def
+               } if
+       } if
+       cleartomark
+       /anyColor?
+       {
+               add add add 0 ne
+       } bind def
+       /testColor
+       {
+               gsave
+               setcmykcolor currentcmykcolor
+               grestore
+       } bind def
+       /testCMYKColorThrough
+       {
+               testColor anyColor?
+       } bind def
+       userdict /composite?
+       1 0 0 0 testCMYKColorThrough
+       0 1 0 0 testCMYKColorThrough
+       0 0 1 0 testCMYKColorThrough
+       0 0 0 1 testCMYKColorThrough
+       and and and
+       put
+       composite? not
+       {
+               userdict begin
+               gsave
+               /cyan? 1 0 0 0 testCMYKColorThrough def
+               /magenta? 0 1 0 0 testCMYKColorThrough def
+               /yellow? 0 0 1 0 testCMYKColorThrough def
+               /black? 0 0 0 1 testCMYKColorThrough def
+               grestore
+               /isCMYKSep? cyan? magenta? yellow? black? or or or def
+               /customColor? isCMYKSep? not def
+        end
+       } if
+ end defaultpacking setpacking
+%%EndResource
+%%BeginResource: procset Adobe_typography_AI5 1.0 1
+%%Title: (Typography Operators)
+%%Version: 1.0 1
+%%CreationDate:(6/10/1996) ()
+%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
+currentpacking true setpacking
+userdict /Adobe_typography_AI5 68 dict dup begin
+put
+/initialize
+{
+ begin
+ begin
+       Adobe_typography_AI5 begin
+       Adobe_typography_AI5
+       {
+               dup xcheck
+               {
+                       bind
+               } if
+               pop pop
+       } forall
+ end
+ end
+ end
+       Adobe_typography_AI5 begin
+} def
+/terminate
+{
+       currentdict Adobe_typography_AI5 eq
+       {
+        end
+       } if
+} def
+/modifyEncoding
+{
+       /_tempEncode exch ddef
+       /_pntr 0 ddef
+       {
+               counttomark -1 roll
+               dup type dup /marktype eq
+               {
+                       pop pop exit
+               }
+               {
+                       /nametype eq
+                       {
+                               _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll
+                               put
+                       }
+                       {
+                               /_pntr exch ddef
+                       } ifelse
+               } ifelse
+       } loop
+       _tempEncode
+} def
+/havefont
+{
+       systemdict /languagelevel known
+               {
+               /Font resourcestatus dup
+                       { exch pop exch pop }
+               if
+               }
+               {
+               systemdict /FontDirectory get 1 index known
+                       { pop true }
+                       {
+                       systemdict /fileposition known
+                               {
+                               dup length 6 add exch
+                               Ss 6 250 getinterval
+                               cvs pop
+                               Ss exch 0 exch getinterval
+                               status
+                                       { pop pop pop pop true }
+                                       { false }
+                               ifelse
+                               }
+                               {
+                               pop false
+                               }
+                       ifelse
+                       }
+               ifelse
+               }
+       ifelse
+} def
+/TE
+{
+       StandardEncoding 256 array copy modifyEncoding
+       /_nativeEncoding exch def
+} def
+/subststring {
+       exch 2 index exch search
+       {
+               exch pop
+               exch dup () eq
+               {
+                       pop exch concatstring
+               }
+               {
+                       3 -1 roll
+                       exch concatstring
+                       concatstring
+               } ifelse
+               exch pop true
+       }
+       {
+               pop pop false
+       } ifelse
+} def
+/concatstring {
+       1 index length 1 index length
+       1 index add
+       string
+       dup 0 5 index putinterval
+       dup 2 index 4 index putinterval
+       4 1 roll pop pop pop
+} def
+%
+/TZ
+{
+       dup type /arraytype eq
+       {
+               /_wv exch def
+       }
+       {
+               /_wv 0 def
+       } ifelse
+       /_useNativeEncoding exch def
+       2 index havefont
+       {
+               3 index
+               255 string
+               cvs
+               
+               dup
+               (_Symbol_)
+               eq
+               {
+                       pop
+                       2 index
+                       findfont
+                       
+               }
+               {
+                       1 index 0 eq
+                       {
+                               dup length 1 sub
+                               1 exch
+                               getinterval
+                               
+                               cvn
+                               findfont
+                       }
+                       {
+                               pop 2 index findfont
+                       } ifelse
+               } ifelse
+       }
+       {
+               dup 1 eq
+               {
+                       2 index 64 string cvs
+                       dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring
+                       {
+                               exch pop dup havefont
+                               {
+                                       findfont false
+                               }
+                               {
+                                       pop true
+                               } ifelse
+                       }
+                       {
+                               pop     dup
+                               (-90ms-RKSJ-) (-Ext-RKSJ-) subststring
+                               {
+                                       exch pop dup havefont
+                                       {
+                                               findfont false
+                                       }
+                                       {
+                                               pop true
+                                       } ifelse
+                               }
+                               {
+                                       pop pop true
+                               } ifelse
+                       } ifelse
+                       {
+                               1 index 1 eq
+                               {
+                                       /Ryumin-Light-Ext-RKSJ-V havefont
+                                       {/Ryumin-Light-Ext-RKSJ-V}
+                                       {/Courier}
+                                       ifelse
+                               }
+                               {
+                                       /Ryumin-Light-83pv-RKSJ-H havefont
+                                       {/Ryumin-Light-83pv-RKSJ-H}
+                                       {/Courier}
+                                       ifelse
+                               } ifelse
+                               findfont
+                               [1 0 0.5 1 0 0] makefont
+                       } if
+               }
+               {
+                       /Courier findfont
+               } ifelse
+       } ifelse
+       _wv type /arraytype eq
+       {
+               _wv makeblendedfont
+       } if
+       dup length 10 add dict
+ begin
+       mark exch
+       {
+               1 index /FID ne
+               {
+                       def
+               } if
+               cleartomark mark
+       } forall
+       pop
+       /FontScript exch def
+       /FontDirection exch def
+       /FontRequest exch def
+       /FontName exch def
+       counttomark 0 eq
+       {
+               1 _useNativeEncoding eq
+               {
+                       /Encoding _nativeEncoding def
+               } if
+               cleartomark
+       }
+       {
+               /Encoding load 256 array copy
+               modifyEncoding /Encoding exch def
+       } ifelse
+       FontName currentdict
+ end
+       definefont pop
+} def
+/tr
+{
+       _ax _ay 3 2 roll
+} def
+/trj
+{
+       _cx _cy _sp _ax _ay 6 5 roll
+} def
+/a0
+{
+       /Tx
+       {
+               dup
+               currentpoint 3 2 roll
+               tr _psf
+               newpath moveto
+               tr _ctm _pss
+       } ddef
+       /Tj
+       {
+               dup
+               currentpoint 3 2 roll
+               trj _pjsf
+               newpath moveto
+               trj _ctm _pjss
+       } ddef
+} def
+/a1
+{
+W B
+} def
+/e0
+{
+       /Tx
+       {
+               tr _psf
+       } ddef
+       /Tj
+       {
+               trj _pjsf
+       } ddef
+} def
+/e1
+{
+W F 
+} def
+/i0
+{
+       /Tx
+       {
+               tr sp
+       } ddef
+       /Tj
+       {
+               trj jsp
+       } ddef
+} def
+/i1
+{
+       W N
+} def
+/o0
+{
+       /Tx
+       {
+               tr sw rmoveto
+       } ddef
+       /Tj
+       {
+               trj swj rmoveto
+       } ddef
+} def
+/r0
+{
+       /Tx
+       {
+               tr _ctm _pss
+       } ddef
+       /Tj
+       {
+               trj _ctm _pjss
+       } ddef
+} def
+/r1
+{
+W S
+} def
+/To
+{
+       pop _ctm currentmatrix pop
+} def
+/TO
+{
+       iTe _ctm setmatrix newpath
+} def
+/Tp
+{
+       pop _tm astore pop _ctm setmatrix
+       _tDict begin
+       /W
+       {
+       } def
+       /h
+       {
+       } def
+} def
+/TP
+{
+ end
+       iTm 0 0 moveto
+} def
+/Tr
+{
+       _render 3 le
+       {
+               currentpoint newpath moveto
+       } if
+       dup 8 eq
+       {
+               pop 0
+       }
+       {
+               dup 9 eq
+               {
+                       pop 1
+               } if
+       } ifelse
+       dup /_render exch ddef
+       _renderStart exch get load exec
+} def
+/iTm
+{
+       _ctm setmatrix _tm concat
+       _shift aload pop _lineorientation 1 eq { exch } if translate
+       _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale
+} def
+/Tm
+{
+       _tm astore pop iTm 0 0 moveto
+} def
+/Td
+{
+       _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto
+} def
+/iTe
+{
+       _render -1 eq
+       {
+       }
+       {
+               _renderEnd _render get dup null ne
+               {
+                       load exec
+               }
+               {
+                       pop
+               } ifelse
+       } ifelse
+       /_render -1 ddef
+} def
+/Ta
+{
+       pop
+} def
+/Tf
+{
+       1 index type /nametype eq
+       {
+               dup 0.75 mul 1 index 0.25 mul neg
+       } if
+       /_fontDescent exch ddef
+       /_fontAscent exch ddef
+       /_fontSize exch ddef
+       /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef
+       /_fontHeight _fontSize ddef
+       findfont _fontSize scalefont setfont
+} def
+/Tl
+{
+       pop neg 0 exch
+       _leading astore pop
+} def
+/Tt
+{
+       pop
+} def
+/TW
+{
+       3 npop
+} def
+/Tw
+{
+       /_cx exch ddef
+} def
+/TC
+{
+       3 npop
+} def
+/Tc
+{
+       /_ax exch ddef
+} def
+/Ts
+{
+       0 exch
+       _shift astore pop
+       currentpoint
+       iTm
+       moveto
+} def
+/Ti
+{
+       3 npop
+} def
+/Tz
+{
+       count 1 eq { 100 } if
+       100 div exch 100 div exch
+       _scale astore pop
+       iTm
+} def
+/TA
+{
+       pop
+} def
+/Tq
+{
+       pop
+} def
+/Tg
+{
+       pop
+} def
+/TG
+{
+       pop
+} def
+/Tv
+{
+       /_lineorientation exch ddef
+} def
+/TV
+{
+       /_charorientation exch ddef
+} def
+/Ty
+{
+       dup /_yokoorientation exch ddef 1 sub neg Tv
+} def
+/TY
+{
+       pop
+} def
+/T~
+{
+       Tx
+} def
+/Th
+{
+       pop pop pop pop pop
+} def
+/TX
+{
+       pop
+} def
+/Tk
+{
+       _fontSize mul 1000 div
+       _lineorientation 0 eq { neg 0 } { 0 exch } ifelse
+       rmoveto
+       pop
+} def
+/TK
+{
+       2 npop
+} def
+/T*
+{
+       _leading aload pop
+       _lineorientation 0 ne { exch } if
+       Td
+} def
+/T*-
+{
+       _leading aload pop
+       _lineorientation 0 ne { exch } if
+       exch neg exch neg
+       Td
+} def
+/T-
+{
+       _ax neg 0 rmoveto
+       _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse
+} def
+/T+
+{
+} def
+/TR
+{
+       _ctm currentmatrix pop
+       _tm astore pop
+       iTm 0 0 moveto
+} def
+/TS
+{
+       currentfont 3 1 roll
+       /_Symbol_ findfont _fontSize scalefont setfont
+       
+       0 eq
+       {
+               Tx
+       }
+       {
+               Tj
+       } ifelse
+       setfont
+} def
+/Xb
+{
+       pop pop
+} def
+/Tb /Xb load def
+/Xe
+{
+       pop pop pop pop
+} def
+/Te /Xe load def
+/XB
+{
+} def
+/TB /XB load def
+currentdict readonly pop
+end
+setpacking
+%
+/X^
+{
+       currentfont 5 1 roll
+       dup havefont
+               {
+               findfont _fontSize scalefont setfont
+               }
+               {
+               pop
+               exch
+               } ifelse
+       2 index 0 eq
+       {
+               Tx
+       }
+       {
+               Tj
+       } ifelse
+       pop     pop
+       setfont
+} def
+/T^    /X^     load def
+%%EndResource
+%%BeginProcSet: Adobe_ColorImage_AI6 1.3 0
+userdict /Adobe_ColorImage_AI6 known not
+{
+       userdict /Adobe_ColorImage_AI6 53 dict put 
+} if
+userdict /Adobe_ColorImage_AI6 get begin
+/initialize { 
+       Adobe_ColorImage_AI6 begin
+       Adobe_ColorImage_AI6 {
+               dup type /arraytype eq {
+                       dup xcheck {
+                               bind
+                       } if
+               } if
+               pop pop
+       } forall
+} def
+/terminate { end } def
+currentdict /Adobe_ColorImage_AI6_Vars known not {
+       /Adobe_ColorImage_AI6_Vars 41 dict def
+} if
+Adobe_ColorImage_AI6_Vars begin
+       /plateindex -1 def
+       /_newproc null def
+       /_proc1 null def
+       /_proc2 null def
+       /sourcearray 4 array def
+       /_ptispace null def
+       /_ptiname null def
+       /_pti0 0 def
+       /_pti1 0 def
+       /_ptiproc null def
+       /_ptiscale 0 def
+       /_pticomps 0 def
+       /_ptibuf 0 string def
+       /_gtigray 0 def
+       /_cticmyk null def
+       /_rtirgb null def
+       /XIEnable true def
+       /XIType 0 def
+       /XIEncoding 0 def
+       /XICompression 0 def
+       /XIChannelCount 0 def
+       /XIBitsPerPixel 0 def
+       /XIImageHeight 0 def
+       /XIImageWidth 0 def
+       /XIImageMatrix null def
+       /XIRowBytes 0 def
+       /XIFile null def
+       /XIBuffer1 null def
+       /XIBuffer2 null def
+       /XIBuffer3 null def
+       /XIDataProc null def
+       /XIColorSpace /DeviceGray def
+       /XIColorValues 0 def
+       /XIPlateList false def
+end
+/ci6colorimage /colorimage where {/colorimage get}{null} ifelse def
+/ci6image systemdict /image get def
+/ci6curtransfer systemdict /currenttransfer get def
+/ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def
+/ci6foureq {
+       4 index ne {
+               pop pop pop false
+       }{
+               4 index ne {
+                       pop pop false
+               }{
+                       4 index ne {
+                               pop false
+                       }{
+                               4 index eq
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6testplate {
+       Adobe_ColorImage_AI6_Vars begin
+               /plateindex -1 def
+               /setcmykcolor where {
+                       pop
+                       gsave
+                       1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
+                       0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
+                       0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
+                       0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub
+                       grestore
+                       1 0 0 0 ci6foureq { 
+                               /plateindex 0 def
+                       }{
+                               0 1 0 0 ci6foureq { 
+                                       /plateindex 1 def
+                               }{
+                                       0 0 1 0 ci6foureq {
+                                               /plateindex 2 def
+                                       }{
+                                               0 0 0 1 ci6foureq { 
+                                                       /plateindex 3 def
+                                               }{
+                                                       0 0 0 0 ci6foureq {
+                                                               /plateindex 5 def
+                                                       } if
+                                               } ifelse
+                                       } ifelse
+                               } ifelse
+                       } ifelse
+                       pop pop pop pop
+               } if
+               plateindex
+ end
+} def
+/ci6concatprocs {
+       /packedarray where {
+               pop dup type /packedarraytype eq 2 index type
+               /packedarraytype eq or
+       }{
+               false
+       } ifelse
+       {
+               /_proc2 exch cvlit def
+               /_proc1 exch cvlit def
+               _proc1 aload pop
+               _proc2 aload pop
+               _proc1 length
+               _proc2 length add
+               packedarray cvx
+       }{
+               /_proc2 exch cvlit def
+               /_proc1 exch cvlit def
+               /_newproc _proc1 length _proc2 length add array def
+               _newproc 0 _proc1 putinterval
+               _newproc _proc1 length _proc2 putinterval
+               _newproc cvx
+       } ifelse
+} def
+/ci6istint {
+       type /arraytype eq 
+} def
+/ci6isspot {
+       dup type /arraytype eq {
+               dup length 1 sub get /Separation eq
+       }{
+               pop false
+       } ifelse
+} def
+/ci6spotname {
+       dup ci6isspot {dup length 2 sub get}{pop ()} ifelse
+} def
+/ci6altspace {
+       aload pop pop pop ci6colormake
+} def
+/ci6numcomps {
+       dup /DeviceGray eq {
+               pop 1
+       }{
+               dup /DeviceRGB eq {
+                       pop 3
+               }{
+                       /DeviceCMYK eq {
+                               4
+                       }{
+                               1
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6marksplate {
+       dup /DeviceGray eq {
+               pop plateindex 3 eq
+       }{
+               dup /DeviceRGB eq {
+                       pop plateindex 5 ne
+               }{
+                       dup /DeviceCMYK eq {
+                               pop plateindex 5 ne
+                       }{
+                               dup ci6isspot {
+                                       /findcmykcustomcolor where {
+                                               pop
+                                               dup length 2 sub get
+                                               0.1 0.1 0.1 0.1 5 -1 roll
+                                               findcmykcustomcolor 1 setcustomcolor
+                                               systemdict /currentgray get exec
+                                               1 ne
+                                       }{
+                                               pop plateindex 5 ne
+                                       } ifelse
+                               }{
+                                       pop plateindex 5 ne
+                               } ifelse
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6colormake {
+       dup ci6numcomps
+       exch 1 index 2 add 1 roll
+       dup 1 eq {pop}{array astore} ifelse
+       exch
+} def
+/ci6colorexpand {
+       dup ci6spotname exch
+       dup ci6istint {
+               ci6altspace
+               exch 4 1 roll
+       }{
+               1 3 1 roll
+       } ifelse
+} def
+/ci6colortint {
+       dup /DeviceGray eq {
+               3 1 roll 1 exch sub mul 1 exch sub exch
+       }{
+               dup /DeviceRGB eq {
+                       3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch
+               }{
+                       dup /DeviceCMYK eq {
+                               3 1 roll {1 index mul exch} forall pop 4 array astore exch
+                       }{
+                               3 1 roll mul exch
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6colortocmyk {
+       dup /DeviceGray eq {
+               pop 1 exch sub 0 0 0 4 -1 roll 4 array astore
+       }{
+               dup /DeviceRGB eq {
+                       pop aload pop _rgbtocmyk 4 array astore
+               }{
+                       dup /DeviceCMYK eq {
+                               pop
+                       }{
+                               ci6altspace ci6colortint ci6colortocmyk
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6makeimagedict {
+       7 dict begin
+               /ImageType 1 def
+               /Decode exch def
+               /DataSource exch def
+               /ImageMatrix exch def
+               /BitsPerComponent exch def
+               /Height exch def
+               /Width exch def
+       currentdict end
+} def
+/ci6stringinvert {
+       0 1 2 index length 1 sub {
+               dup 2 index exch get 255 exch sub 2 index 3 1 roll put
+       } for
+} def
+/ci6stringknockout {
+       0 1 2 index length 1 sub {
+               255 2 index 3 1 roll put
+       } for
+} def
+/ci6stringapply {
+       0 1 4 index length 1 sub {
+               dup
+               4 index exch get
+               3 index 3 1 roll
+               3 index exec
+       } for
+       pop exch pop
+} def
+/ci6walkrgbstring {
+       0 3 index
+       dup length 1 sub 0 3 3 -1 roll {
+               3 getinterval {} forall
+               5 index exec
+               3 index
+       } for
+       
+        5 {pop} repeat
+} def
+/ci6walkcmykstring
+{
+       0 3 index
+       dup length 1 sub 0 4 3 -1 roll {
+               4 getinterval {} forall
+               
+               6 index exec
+               
+               3 index
+               
+       } for
+       
+       5 { pop } repeat
+       
+} def
+/ci6putrgbtograystr
+{
+       .11 mul exch
+       
+       .59 mul add exch
+       
+       .3 mul add
+       
+       cvi 3 copy put
+       
+       pop 1 add
+} def
+/ci6putcmyktograystr
+{
+       exch .11 mul add
+       
+       exch .59 mul add
+       
+       exch .3 mul add
+       
+       dup 255 gt { pop 255 } if
+       
+       255 exch sub cvi 3 copy put
+       
+       pop 1 add
+} def
+/ci6rgbtograyproc {    
+       Adobe_ColorImage_AI6_Vars begin 
+               sourcearray 0 get exec
+               XIBuffer3
+               dup 3 1 roll 
+               
+               /ci6putrgbtograystr load exch
+               ci6walkrgbstring
+ end
+} def
+/ci6cmyktograyproc {   
+       Adobe_ColorImage_AI6_Vars begin
+               sourcearray 0 get exec
+               XIBuffer3
+               dup 3 1 roll 
+               
+               /ci6putcmyktograystr load exch
+               ci6walkcmykstring
+ end
+} def
+/ci6separatecmykproc { 
+       Adobe_ColorImage_AI6_Vars begin
+               sourcearray 0 get exec
+               
+               XIBuffer3
+               
+               0 2 index
+               
+               plateindex 4 2 index length 1 sub {
+                       get 255 exch sub
+                       
+                       3 copy put pop 1 add
+                       
+                       2 index
+               } for
+               pop pop exch pop
+ end
+} def
+       
+/ci6compositeimage {
+       dup 1 eq {
+               pop pop image
+       }{
+               /ci6colorimage load null ne {
+                       ci6colorimage
+               }{
+                       3 1 roll pop
+                       sourcearray 0 3 -1 roll put
+                       3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load
+                       image
+               } ifelse
+       } ifelse
+} def
+/ci6knockoutimage {
+       gsave
+       0 ci6curtransfer exec 1 ci6curtransfer exec
+       eq {
+               0 ci6curtransfer exec 0.5 lt
+       }{
+               0 ci6curtransfer exec 1 ci6curtransfer exec gt
+       } ifelse
+       {{pop 0}}{{pop 1}} ifelse
+       systemdict /settransfer get exec
+       ci6compositeimage
+       grestore
+} def
+/ci6drawimage {
+       ci6testplate -1 eq {
+               pop ci6compositeimage
+       }{
+               dup type /arraytype eq {
+                       dup length plateindex gt {plateindex get}{pop false} ifelse
+               }{
+                       {
+                               true
+                       }{
+                               dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse
+                       } ifelse
+               } ifelse
+               {
+                       dup 1 eq {
+                               pop pop ci6image
+                       }{
+                               dup 3 eq {
+                                       ci6compositeimage
+                               }{
+                                       pop pop
+                                       sourcearray 0 3 -1 roll put
+                                       /ci6separatecmykproc load
+                                       ci6image
+                               } ifelse
+                       } ifelse
+               }{
+                       ci6curoverprint {
+                               7 {pop} repeat
+                       }{
+                               ci6knockoutimage
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6proctintimage {
+       /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store
+       /_pticomps _ptispace ci6numcomps store
+       /_ptiscale _pti1 _pti0 sub store
+       level2? {
+               _ptiname length 0 gt version cvr 2012 ge and {
+                       [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace
+                       [_pti0 _pti1] ci6makeimagedict ci6image
+               }{
+                       [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace
+                       [0 255] ci6makeimagedict ci6image
+               } ifelse
+       }{
+               _pticomps 1 eq {
+                       {
+                               dup
+                               {
+                                       255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put
+                               } ci6stringapply
+                       } ci6concatprocs ci6image
+               }{
+                       {
+                               dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse
+                               _ptibuf {
+                                       exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc
+                                       _pticomps 2 add -2 roll
+                                       _pticomps 1 sub -1 0 {
+                                               1 index add 2 index exch
+                                               5 -1 roll
+                                               255 mul cvi put
+                                       } for
+                                       pop pop
+                               } ci6stringapply
+                       } ci6concatprocs false _pticomps
+                       /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse
+               } ifelse
+       } ifelse
+} def
+/ci6graytintimage {
+       /_gtigray 5 -1 roll store
+       {1 _gtigray sub mul 1 exch sub} 4 1 roll
+       /DeviceGray ci6proctintimage
+} def
+/ci6cmyktintimage {
+       /_cticmyk 5 -1 roll store
+       {_cticmyk {1 index mul exch} forall pop} 4 1 roll
+       /DeviceCMYK ci6proctintimage
+} def
+/ci6rgbtintimage {
+       /_rtirgb 5 -1 roll store
+       {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll
+       /DeviceRGB ci6proctintimage
+} def
+/ci6tintimage {
+       ci6testplate -1 eq {
+               ci6colorexpand
+               3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll
+               dup /DeviceGray eq {
+                       pop ci6graytintimage
+               }{
+                       dup /DeviceRGB eq {
+                               pop ci6rgbtintimage
+                       }{
+                               pop ci6cmyktintimage
+                       } ifelse
+               } ifelse
+       }{
+               dup ci6marksplate {
+                       plateindex 5 lt {
+                               ci6colortocmyk plateindex get
+                               dup 0 eq ci6curoverprint and {
+                                       7 {pop} repeat
+                               }{
+                                       1 exch sub
+                                       exch {1 0}{0 1} ifelse () ci6graytintimage
+                               } ifelse
+                       }{
+                               pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage
+                       } ifelse
+               }{
+                       ci6curoverprint {
+                               8 {pop} repeat
+                       }{
+                               pop pop pop
+                               {pop 1} 0 1 () /DeviceGray ci6proctintimage
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/XINullImage {
+} def
+/XIImageMask {
+       XIImageWidth XIImageHeight false
+       [XIImageWidth 0 0 XIImageHeight neg 0 0]
+       /XIDataProc load
+       imagemask
+} def
+/XIImageTint {
+       XIImageWidth XIImageHeight XIBitsPerPixel
+       [XIImageWidth 0 0 XIImageHeight neg 0 0]
+       /XIDataProc load
+       XIType 3 eq XIColorValues XIColorSpace ci6tintimage
+} def
+/XIImage {
+       XIImageWidth XIImageHeight XIBitsPerPixel
+       [XIImageWidth 0 0 XIImageHeight neg 0 0]
+       /XIDataProc load
+       false XIChannelCount XIPlateList ci6drawimage
+} def
+/XG {
+       pop pop
+} def
+/XF {
+       13 {pop} repeat
+} def
+/Xh {
+       Adobe_ColorImage_AI6_Vars begin
+               gsave
+               /XIType exch def
+               /XIImageHeight exch def
+               /XIImageWidth exch def
+               /XIImageMatrix exch def
+               0 0 moveto
+               XIImageMatrix concat
+               XIImageWidth XIImageHeight scale
+               
+               /_lp /null ddef
+               _fc
+               /_lp /imagemask ddef
+ end
+} def
+/XH {
+       Adobe_ColorImage_AI6_Vars begin
+               grestore
+ end
+} def
+/XIEnable {
+       Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put
+} def
+/XC {
+       Adobe_ColorImage_AI6_Vars begin
+               ci6colormake
+               /XIColorSpace exch def
+               /XIColorValues exch def
+ end
+} def
+/XIPlates {
+       Adobe_ColorImage_AI6_Vars begin
+               /XIPlateList exch def
+ end
+} def
+/XI
+{
+       Adobe_ColorImage_AI6_Vars begin
+               gsave
+               /XIType exch def
+               cvi dup
+               256 idiv /XICompression exch store
+               256 mod /XIEncoding exch store
+               pop pop
+               /XIChannelCount exch def
+               /XIBitsPerPixel exch def
+               /XIImageHeight exch def
+               /XIImageWidth exch def
+               pop pop pop pop
+               /XIImageMatrix exch def
+               XIBitsPerPixel 1 eq {
+                       XIImageWidth 8 div ceiling cvi
+               }{
+                       XIImageWidth XIChannelCount mul
+               } ifelse
+               /XIRowBytes exch def
+               XIEnable {
+                       /XIBuffer3 XIImageWidth string def
+                       XICompression 0 eq {
+                               /XIBuffer1 XIRowBytes string def
+                               XIEncoding 0 eq {
+                                       {currentfile XIBuffer1 readhexstring pop}
+                               }{
+                                       {currentfile XIBuffer1 readstring pop}
+                               } ifelse
+                       }{
+                               /XIBuffer1 256 string def
+                               /XIBuffer2 XIRowBytes string def
+                               {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if}
+                               /ASCII85Decode filter /DCTDecode filter
+                               /XIFile exch def
+                               {XIFile XIBuffer2 readstring pop}
+                       } ifelse
+                       /XIDataProc exch def
+                       
+                       XIType 1 ne {
+                               0 setgray
+                       } if
+                       XIType 1 eq {
+                               XIImageMask
+                       }{
+                               XIType 2 eq XIType 3 eq or {
+                                       XIImageTint
+                               }{
+                                       XIImage
+                               } ifelse
+                       } ifelse
+               }{
+                       XINullImage
+               } ifelse
+               /XIPlateList false def
+               grestore
+ end
+} def
+end
+%%EndProcSet
+%%BeginResource: procset Adobe_Illustrator_AI5 1.3 0
+%%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog)
+%%Version: 1.3 0
+%%CreationDate: (3/7/1994) ()
+%%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved)
+currentpacking true setpacking
+userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin
+put
+/_?cmyk false def
+/_eo false def
+/_lp /none def
+/_pf
+{
+} def
+/_ps
+{
+} def
+/_psf
+{
+} def
+/_pss
+{
+} def
+/_pjsf
+{
+} def
+/_pjss
+{
+} def
+/_pola 0 def
+/_doClip 0 def
+/cf currentflat def
+/_lineorientation 0 def
+/_charorientation 0 def
+/_yokoorientation 0 def
+/_tm matrix def
+/_renderStart
+[
+/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0
+] def
+/_renderEnd
+[
+null null null null /i1 /i1 /i1 /i1
+] def
+/_render -1 def
+/_shift [0 0] def
+/_ax 0 def
+/_ay 0 def
+/_cx 0 def
+/_cy 0 def
+/_leading
+[
+0 0
+] def
+/_ctm matrix def
+/_mtx matrix def
+/_sp 16#020 def
+/_hyphen (-) def
+/_fontSize 0 def
+/_fontAscent 0 def
+/_fontDescent 0 def
+/_fontHeight 0 def
+/_fontRotateAdjust 0 def
+/Ss 256 string def
+Ss 0 (fonts/) putinterval
+/_cnt 0 def
+/_scale [1 1] def
+/_nativeEncoding 0 def
+/_useNativeEncoding 0 def
+/_tempEncode 0 def
+/_pntr 0 def
+/_tDict 2 dict def
+/_hfname 100 string def
+/_hffound false def
+/Tx
+{
+} def
+/Tj
+{
+} def
+/CRender
+{
+} def
+/_AI3_savepage
+{
+} def
+/_gf null def
+/_cf 4 array def
+/_rgbf 3 array def
+/_if null def
+/_of false def
+/_fc
+{
+} def
+/_gs null def
+/_cs 4 array def
+/_rgbs 3 array def
+/_is null def
+/_os false def
+/_sc
+{
+} def
+/_pd 1 dict def
+/_ed 15 dict def
+/_pm matrix def
+/_fm null def
+/_fd null def
+/_fdd null def
+/_sm null def
+/_sd null def
+/_sdd null def
+/_i null def
+/_lobyte 0 def
+/_hibyte 0 def
+/_cproc null def
+/_cscript 0 def
+/_hvax 0 def
+/_hvay 0 def
+/_hvwb 0 def
+/_hvcx 0 def
+/_hvcy 0 def
+/_bitfont null def
+/_bitlobyte 0 def
+/_bithibyte 0 def
+/_bitkey null def
+/_bitdata null def
+/_bitindex 0 def
+/discardSave null def
+/buffer 256 string def
+/beginString null def
+/endString null def
+/endStringLength null def
+/layerCnt 1 def
+/layerCount 1 def
+/perCent (%) 0 get def
+/perCentSeen? false def
+/newBuff null def
+/newBuffButFirst null def
+/newBuffLast null def
+/clipForward? false def
+end
+userdict /Adobe_Illustrator_AI5 known not {
+       userdict /Adobe_Illustrator_AI5 100 dict put
+} if
+userdict /Adobe_Illustrator_AI5 get begin
+/initialize
+{
+       Adobe_Illustrator_AI5 dup begin
+       Adobe_Illustrator_AI5_vars begin
+       /_aicmykps where {pop /_?cmyk _aicmykps def}if
+       discardDict
+       {
+               bind pop pop
+       } forall
+       dup /nc get begin
+       {
+               dup xcheck 1 index type /operatortype ne and
+               {
+                       bind
+               } if
+               pop pop
+       } forall
+ end
+       newpath
+} def
+/terminate
+{
+ end
+ end
+} def
+/_
+null def
+/ddef
+{
+       Adobe_Illustrator_AI5_vars 3 1 roll put
+} def
+/xput
+{
+       dup load dup length exch maxlength eq
+       {
+               dup dup load dup
+               length 2 mul dict copy def
+       } if
+       load begin
+       def
+ end
+} def
+/npop
+{
+       {
+               pop
+       } repeat
+} def
+/hswj
+{
+       dup stringwidth 3 2 roll
+       {
+               _hvwb eq { exch _hvcx add exch _hvcy add } if
+               exch _hvax add exch _hvay add
+       } cforall
+} def
+/vswj
+{
+       0 0 3 -1 roll
+       {
+               dup 255 le
+               _charorientation 1 eq
+               and
+               {
+                       dup cstring stringwidth 5 2 roll
+                       _hvwb eq { exch _hvcy sub exch _hvcx sub } if
+                       exch _hvay sub exch _hvax sub
+                       4 -1 roll sub exch
+                       3 -1 roll sub exch
+               }
+               {
+                       _hvwb eq { exch _hvcy sub exch _hvcx sub } if
+                       exch _hvay sub exch _hvax sub
+                       _fontHeight sub
+               } ifelse
+       } cforall
+} def
+/swj
+{
+       6 1 roll
+       /_hvay exch ddef
+       /_hvax exch ddef
+       /_hvwb exch ddef
+       /_hvcy exch ddef
+       /_hvcx exch ddef
+       _lineorientation 0 eq { hswj } { vswj } ifelse
+} def
+/sw
+{
+       0 0 0 6 3 roll swj
+} def
+/vjss
+{
+       4 1 roll
+       {
+               dup cstring
+               dup length 1 eq
+               _charorientation 1 eq
+               and
+               {
+                       -90 rotate
+                       currentpoint
+                       _fontRotateAdjust add
+                       moveto
+                       gsave
+                       false charpath currentpoint
+                       5 index setmatrix stroke
+                       grestore
+                       _fontRotateAdjust sub
+                       moveto
+                       _sp eq
+                       {
+                               5 index 5 index rmoveto
+                       } if
+                       2 copy rmoveto
+                       90 rotate
+               }
+               {
+                       currentpoint
+                       _fontHeight sub
+                       5 index sub
+                       3 index _sp eq
+                       {
+                               9 index sub
+                       } if
+       
+                       currentpoint
+                       exch 4 index stringwidth pop 2 div sub
+                       exch _fontAscent sub
+                       moveto
+       
+                       gsave
+                       2 index false charpath
+                       6 index setmatrix stroke
+                       grestore
+       
+                       moveto pop pop
+               } ifelse
+       } cforall
+       6 npop
+} def
+/hjss
+{
+       4 1 roll
+       {
+               dup cstring
+               gsave
+               false charpath currentpoint
+               5 index setmatrix stroke
+               grestore
+               moveto
+               _sp eq
+               {
+                       5 index 5 index rmoveto
+               } if
+               2 copy rmoveto
+       } cforall
+       6 npop
+} def
+/jss
+{
+       _lineorientation 0 eq { hjss } { vjss } ifelse
+} def
+/ss
+{
+       0 0 0 7 3 roll jss
+} def
+/vjsp
+{
+       4 1 roll
+       {
+               dup cstring
+               dup length 1 eq
+               _charorientation 1 eq
+               and
+               {
+                       -90 rotate
+                       currentpoint
+                       _fontRotateAdjust add
+                       moveto
+                       false charpath
+            currentpoint
+                       _fontRotateAdjust sub
+                       moveto
+                       _sp eq
+                       {
+                               5 index 5 index rmoveto
+                       } if
+                       2 copy rmoveto
+                       90 rotate
+               }
+               {
+                       currentpoint
+                       _fontHeight sub
+                       5 index sub
+                       3 index _sp eq
+                       {
+                               9 index sub
+                       } if
+       
+                       currentpoint
+                       exch 4 index stringwidth pop 2 div sub
+                       exch _fontAscent sub
+                       moveto
+       
+                       2 index false charpath
+       
+                       moveto pop pop
+               } ifelse
+       } cforall
+       6 npop
+} def
+/hjsp
+{
+    4 1 roll
+    {
+        dup cstring
+        false charpath
+        _sp eq
+        {
+            5 index 5 index rmoveto
+        } if
+        2 copy rmoveto
+    } cforall
+    6 npop
+} def
+/jsp
+{
+       matrix currentmatrix
+    _lineorientation 0 eq {hjsp} {vjsp} ifelse
+} def
+/sp
+{
+    matrix currentmatrix
+    0 0 0 7 3 roll
+    _lineorientation 0 eq {hjsp} {vjsp} ifelse
+} def
+/pl
+{
+       transform
+       0.25 sub round 0.25 add exch
+       0.25 sub round 0.25 add exch
+       itransform
+} def
+/setstrokeadjust where
+{
+       pop true setstrokeadjust
+       /c
+       {
+               curveto
+       } def
+       /C
+       /c load def
+       /v
+       {
+               currentpoint 6 2 roll curveto
+       } def
+       /V
+       /v load def
+       /y
+       {
+               2 copy curveto
+       } def
+       /Y
+       /y load def
+       /l
+       {
+               lineto
+       } def
+       /L
+       /l load def
+       /m
+       {
+               moveto
+       } def
+}
+{
+       /c
+       {
+               pl curveto
+       } def
+       /C
+       /c load def
+       /v
+       {
+               currentpoint 6 2 roll pl curveto
+       } def
+       /V
+       /v load def
+       /y
+       {
+               pl 2 copy curveto
+       } def
+       /Y
+       /y load def
+       /l
+       {
+               pl lineto
+       } def
+       /L
+       /l load def
+       /m
+       {
+               pl moveto
+       } def
+} ifelse
+/d
+{
+       setdash
+} def
+/cf
+{
+} def
+/i
+{
+       dup 0 eq
+       {
+               pop cf
+       } if
+       setflat
+} def
+/j
+{
+       setlinejoin
+} def
+/J
+{
+       setlinecap
+} def
+/M
+{
+       setmiterlimit
+} def
+/w
+{
+       setlinewidth
+} def
+/XR
+{
+       0 ne
+       /_eo exch ddef
+} def
+/H
+{
+} def
+/h
+{
+       closepath
+} def
+/N
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       _eo {eoclip} {clip} ifelse /_doClip 0 ddef
+               } if
+               newpath
+       }
+       {
+               /CRender
+               {
+                       N
+               } ddef
+       } ifelse
+} def
+/n
+{
+       N
+} def
+/F
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc
+                       /_doClip 0 ddef
+               }
+               {
+                       _pf
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       F
+               } ddef
+       } ifelse
+} def
+/f
+{
+       closepath
+       F
+} def
+/S
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc
+                       /_doClip 0 ddef
+               }
+               {
+                       _ps
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       S
+               } ddef
+       } ifelse
+} def
+/s
+{
+       closepath
+       S
+} def
+/B
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               gsave F grestore
+               {
+                       gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc
+                       /_doClip 0 ddef
+               }
+               {
+                       S
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       B
+               } ddef
+       } ifelse
+} def
+/b
+{
+       closepath
+       B
+} def
+/W
+{
+       /_doClip 1 ddef
+} def
+/*
+{
+       count 0 ne
+       {
+               dup type /stringtype eq
+               {
+                       pop
+               } if
+       } if
+       newpath
+} def
+/u
+{
+} def
+/U
+{
+} def
+/q
+{
+       _pola 0 eq
+       {
+               gsave
+       } if
+} def
+/Q
+{
+       _pola 0 eq
+       {
+               grestore
+       } if
+} def
+/*u
+{
+       _pola 1 add /_pola exch ddef
+} def
+/*U
+{
+       _pola 1 sub /_pola exch ddef
+       _pola 0 eq
+       {
+               CRender
+       } if
+} def
+/D
+{
+       pop
+} def
+/*w
+{
+} def
+/*W
+{
+} def
+/`
+{
+       /_i save ddef
+       clipForward?
+       {
+               nulldevice
+       } if
+       6 1 roll 4 npop
+       concat pop
+       userdict begin
+       /showpage
+       {
+       } def
+       0 setgray
+       0 setlinecap
+       1 setlinewidth
+       0 setlinejoin
+       10 setmiterlimit
+       [] 0 setdash
+       /setstrokeadjust where {pop false setstrokeadjust} if
+       newpath
+       0 setgray
+       false setoverprint
+} def
+/~
+{
+ end
+       _i restore
+} def
+/_rgbtocmyk
+{
+       3
+       {
+               1 exch sub 3 1 roll
+       } repeat
+       3 copy 1 4 1 roll
+       3
+       {
+               3 index 2 copy gt
+               {
+                       exch
+               } if
+               pop 4 1 roll
+       } repeat
+       pop pop pop
+       4 1 roll
+       3
+       {
+               3 index sub
+               3 1 roll
+       } repeat
+       4 -1 roll
+} def
+/setrgbfill
+{
+       _rgbf astore pop
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _rgbf aload pop setrgbcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               _eo {eofill} {fill} ifelse
+       } ddef
+       /_psf
+       {
+               _fc
+               hvashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               hvawidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/setrgbstroke
+{
+       _rgbs astore pop
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _rgbs aload pop setrgbcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/O
+{
+       0 ne
+       /_of exch ddef
+       /_lp /none ddef
+} def
+/R
+{
+       0 ne
+       /_os exch ddef
+       /_lp /none ddef
+} def
+/g
+{
+       /_gf exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _gf setgray
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               _eo {eofill} {fill} ifelse
+       } ddef
+       /_psf
+       {
+               _fc
+               hvashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               hvawidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/G
+{
+       /_gs exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _gs setgray
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/k
+{
+       _cf astore pop
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _cf aload pop setcmykcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               _eo {eofill} {fill} ifelse
+       } ddef
+       /_psf
+       {
+               _fc
+               hvashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               hvawidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/K
+{
+       _cs astore pop
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _cs aload pop setcmykcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/Xa
+{
+       _?cmyk {
+               3 npop k
+       }{
+               setrgbfill 4 npop
+       } ifelse
+} def
+/XA
+{
+       _?cmyk {
+               3 npop K
+       }{
+               setrgbstroke 4 npop
+       } ifelse
+} def
+/Xs
+{
+       /_gf exch ddef
+       5 npop
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _gf setAIseparationgray
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               _eo {eofill} {fill} ifelse
+       } ddef
+       /_psf
+       {
+               _fc
+               hvashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               hvawidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/XS
+{
+       /_gs exch ddef
+       5 npop
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _gs setAIseparationgray
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/Xx
+{
+       exch
+       /_gf exch ddef
+       0 eq {
+               findcmykcustomcolor
+       }{
+               _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse
+               {
+                       4 1 roll 3 npop
+                       findcmykcustomcolor
+               }{
+                       8 -4 roll 4 npop
+                       findrgbcustomcolor
+               } ifelse
+       } ifelse
+       /_if exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _if _gf 1 exch sub setcustomcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               _eo {eofill} {fill} ifelse
+       } ddef
+       /_psf
+       {
+               _fc
+               hvashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               hvawidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/XX
+{
+       exch
+       /_gs exch ddef
+       0 eq {
+               findcmykcustomcolor
+       }{
+               _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse
+               {
+                       4 1 roll 3 npop
+                       findcmykcustomcolor
+               }{
+                       8 -4 roll 4 npop
+                       findrgbcustomcolor
+               } ifelse
+       } ifelse
+       /_is exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _is _gs 1 exch sub setcustomcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/x
+{
+       /_gf exch ddef
+       findcmykcustomcolor
+       /_if exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _if _gf 1 exch sub setcustomcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               _eo {eofill} {fill} ifelse
+       } ddef
+       /_psf
+       {
+               _fc
+               hvashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               hvawidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/X
+{
+       /_gs exch ddef
+       findcmykcustomcolor
+       /_is exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _is _gs 1 exch sub setcustomcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/XK
+{
+       3 -1 roll pop
+       0 eq
+       {
+               1 exch sub
+               3 {dup 3 1 roll mul 5 1 roll} repeat
+               mul 4 1 roll
+               K
+       }
+       {
+               1 exch sub 4 1 roll
+               3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat
+               4 -1 roll pop
+               XA
+       } ifelse
+} def
+/Xk
+{
+       3 -1 roll pop
+       0 eq
+       {
+               1 exch sub
+               3 {dup 3 1 roll mul 5 1 roll} repeat
+               mul 4 1 roll
+               k
+       }
+       {
+               1 exch sub 4 1 roll
+               3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat
+               4 -1 roll pop
+               Xa
+       } ifelse
+} def
+/A
+{
+       pop
+} def
+/annotatepage
+{
+userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse
+} def
+/XT {
+       pop pop
+} def
+/Xt {
+       pop
+} def
+/discard
+{
+       save /discardSave exch store
+       discardDict begin
+       /endString exch store
+       gt38?
+       {
+               2 add
+       } if
+       load
+       stopped
+       pop
+ end
+       discardSave restore
+} bind def
+userdict /discardDict 7 dict dup begin
+put
+/pre38Initialize
+{
+       /endStringLength endString length store
+       /newBuff buffer 0 endStringLength getinterval store
+       /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store
+       /newBuffLast newBuff endStringLength 1 sub 1 getinterval store
+} def
+/shiftBuffer
+{
+       newBuff 0 newBuffButFirst putinterval
+       newBuffLast 0
+       currentfile read not
+       {
+       stop
+       } if
+       put
+} def
+0
+{
+       pre38Initialize
+       mark
+       currentfile newBuff readstring exch pop
+       {
+               {
+                       newBuff endString eq
+                       {
+                               cleartomark stop
+                       } if
+                       shiftBuffer
+               } loop
+       }
+       {
+       stop
+       } ifelse
+} def
+1
+{
+       pre38Initialize
+       /beginString exch store
+       mark
+       currentfile newBuff readstring exch pop
+       {
+               {
+                       newBuff beginString eq
+                       {
+                               /layerCount dup load 1 add store
+                       }
+                       {
+                               newBuff endString eq
+                               {
+                                       /layerCount dup load 1 sub store
+                                       layerCount 0 eq
+                                       {
+                                               cleartomark stop
+                                       } if
+                               } if
+                       } ifelse
+                       shiftBuffer
+               } loop
+       } if
+} def
+2
+{
+       mark
+       {
+               currentfile buffer {readline} stopped {
+                       % assume error was due to overfilling the buffer
+               }{
+                       not
+                       {
+                               stop
+                       } if
+                       endString eq {
+                               cleartomark stop
+                       } if
+               }ifelse
+       } loop
+} def
+3
+{
+       /beginString exch store
+       /layerCnt 1 store
+       mark
+       {
+               currentfile buffer {readline} stopped {
+                       % assume error was due to overfilling the buffer
+               }{
+                       not
+                       {
+                               stop
+                       } if
+                       dup beginString eq
+                       {
+                               pop /layerCnt dup load 1 add store
+                       }
+                       {
+                               endString eq
+                               {
+                                       layerCnt 1 eq
+                                       {
+                                               cleartomark stop
+                                       }
+                                       {
+                                               /layerCnt dup load 1 sub store
+                                       } ifelse
+                               } if
+                       } ifelse
+               }ifelse
+       } loop
+} def
+end
+userdict /clipRenderOff 15 dict dup begin
+put
+{
+       /n /N /s /S /f /F /b /B
+}
+{
+       {
+               _doClip 1 eq
+               {
+                       /_doClip 0 ddef _eo {eoclip} {clip} ifelse
+               } if
+               newpath
+       } def
+} forall
+/Tr /pop load def
+/Bb {} def
+/BB /pop load def
+/Bg {12 npop} def
+/Bm {6 npop} def
+/Bc /Bm load def
+/Bh {4 npop} def
+end
+/Lb
+{
+       6 npop
+       7 2 roll
+       5 npop
+       0 eq
+       {
+               0 eq
+               {
+                       (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard
+               }
+               {
+                       
+                       /clipForward? true def
+                       
+                       /Tx /pop load def
+                       /Tj /pop load def
+                       
+                       currentdict end clipRenderOff begin begin
+               } ifelse
+       }
+       {
+               0 eq
+               {
+                       save /discardSave exch store
+               } if
+       } ifelse
+} bind def
+/LB
+{
+       discardSave dup null ne
+       {
+               restore
+       }
+       {
+               pop
+               clipForward?
+               {
+                       currentdict
+                end
+                end
+                begin
+                                       
+                       /clipForward? false ddef
+               } if
+       } ifelse
+} bind def
+/Pb
+{
+       pop pop
+       0 (%AI5_EndPalette) discard
+} bind def
+/Np
+{
+       0 (%AI5_End_NonPrinting--) discard
+} bind def
+/Ln /pop load def
+/Ap
+/pop load def
+/Ar
+{
+       72 exch div
+       0 dtransform dup mul exch dup mul add sqrt
+       dup 1 lt
+       {
+               pop 1
+       } if
+       setflat
+} def
+/Mb
+{
+       q
+} def
+/Md
+{
+} def
+/MB
+{
+       Q
+} def
+/nc 4 dict def
+nc begin
+/setgray
+{
+       pop
+} bind def
+/setcmykcolor
+{
+       4 npop
+} bind def
+/setrgbcolor
+{
+       3 npop
+} bind def
+/setcustomcolor
+{
+       2 npop
+} bind def
+currentdict readonly pop
+end
+/XP
+{
+       4 npop
+} bind def
+/XD
+{
+       pop
+} bind def
+end
+setpacking
+%%EndResource
+%%BeginResource: procset Adobe_cshow 2.0 8
+%%Title: (Writing System Operators)
+%%Version: 2.0 8
+%%CreationDate: (1/23/89) ()
+%%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved)
+currentpacking true setpacking
+userdict /Adobe_cshow 14 dict dup begin put
+/initialize
+{
+       Adobe_cshow begin
+       Adobe_cshow
+       {
+               dup xcheck
+               {
+                       bind
+               } if
+               pop pop
+       } forall
+ end
+       Adobe_cshow begin
+} def
+/terminate
+{
+currentdict Adobe_cshow eq
+       {
+ end
+       } if
+} def
+/cforall
+{
+       /_lobyte 0 ddef
+       /_hibyte 0 ddef
+       /_cproc exch ddef
+       /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef
+       {
+               /_lobyte exch ddef
+               _hibyte 0 eq
+               _cscript 1 eq
+               _lobyte 129 ge _lobyte 159 le and
+               _lobyte 224 ge _lobyte 252 le and or and
+               _cscript 2 eq
+               _lobyte 161 ge _lobyte 254 le and and
+               _cscript 3 eq
+               _lobyte 161 ge _lobyte 254 le and and
+       _cscript 25 eq
+               _lobyte 161 ge _lobyte 254 le and and
+       _cscript -1 eq
+               or or or or and
+               {
+                       /_hibyte _lobyte ddef
+               }
+               {
+                       _hibyte 256 mul _lobyte add
+                       _cproc
+                       /_hibyte 0 ddef
+               } ifelse
+       } forall
+} def
+/cstring
+{
+       dup 256 lt
+       {
+               (s) dup 0 4 3 roll put
+       }
+       {
+               dup 256 idiv exch 256 mod
+               (hl) dup dup 0 6 5 roll put 1 4 3 roll put
+       } ifelse
+} def
+/clength
+{
+       0 exch
+       { 256 lt { 1 } { 2 } ifelse add } cforall
+} def
+/hawidthshow
+{
+       {
+               dup cstring
+               show
+               _hvax _hvay rmoveto
+               _hvwb eq { _hvcx _hvcy rmoveto } if
+       } cforall
+} def
+/vawidthshow
+{
+       {
+               dup 255 le
+               _charorientation 1 eq
+               and
+               {
+                       -90 rotate
+                       0 _fontRotateAdjust rmoveto
+                       cstring
+                       _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow
+                       0 _fontRotateAdjust neg rmoveto
+                       90 rotate
+               }
+               {
+                       currentpoint
+                       _fontHeight sub
+                       exch _hvay sub exch _hvax sub
+                       2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if
+                       3 2 roll
+                       cstring
+                       dup stringwidth pop 2 div neg _fontAscent neg rmoveto
+                       show
+                       moveto
+               } ifelse
+       } cforall
+} def
+/hvawidthshow
+{
+       6 1 roll
+       /_hvay exch ddef
+       /_hvax exch ddef
+       /_hvwb exch ddef
+       /_hvcy exch ddef
+       /_hvcx exch ddef
+       _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse
+} def
+/hvwidthshow
+{
+       0 0 3 -1 roll hvawidthshow
+} def
+/hvashow
+{
+       0 0 0 6 -3 roll hvawidthshow
+} def
+/hvshow
+{
+       0 0 0 0 0 6 -1 roll hvawidthshow
+} def
+currentdict readonly pop end
+setpacking
+%%EndResource
+%%BeginResource: procset Adobe_shading_AI8 1.0 0
+%%Title: (Adobe Illustrator 8 Shading Procset)
+%%Version: 1.0 0
+%%CreationDate: (12/17/97) ()
+%%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved)
+userdict /defaultpacking currentpacking put true setpacking
+userdict /Adobe_shading_AI8 10 dict dup begin put
+/initialize {
+       Adobe_shading_AI8 begin
+       Adobe_shading_AI8 bdprocs
+       Mesh /initialize get exec
+} def
+/terminate {
+       currentdict Adobe_shading_AI8 eq {
+        end
+       } if
+} def
+/bdprocs {
+       {
+               dup xcheck 1 index type /arraytype eq and {
+                       bind
+               } if
+               pop pop
+       } forall
+} def
+/X! {pop} def
+/X# {pop pop} def
+/Mesh 40 dict def
+Mesh begin
+/initialize {
+       Mesh bdprocs
+       Mesh begin
+               /emulate? /AI8MeshEmulation where {
+                       pop AI8MeshEmulation
+               }{
+                       systemdict /shfill known not
+               } ifelse def
+ end
+} def
+/bd {
+       shadingdict begin
+} def
+/paint {
+       emulate? {
+        end
+       }{
+               /_lp /none ddef _fc /_lp /none ddef
+               
+               /AIColorSpace AIColorSpace tocolorspace store
+               /ColorSpace AIColorSpace topsspace store
+               
+               version_ge_3010.106 not systemdict /setsmoothness known and {
+                       0.0001 setsmoothness
+               } if
+               
+               composite? {
+                       /DataSource getdatasrc def
+                       Matrix concat
+                       currentdict end
+                       shfill
+               }{
+                       AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and {
+                        end
+                       }{
+                               /ColorSpace /DeviceGray store
+                               /Decode [0 1 0 1 0 1] store
+                               /DataSource getplatesrc def
+                               Matrix concat
+                               currentdict end
+                               shfill
+                       } ifelse
+               } ifelse
+       } ifelse
+} def
+/shadingdict 12 dict def
+shadingdict begin
+       /ShadingType 6 def
+       /BitsPerCoordinate 16 def
+       /BitsPerComponent 8 def
+       /BitsPerFlag 8 def
+end
+/datafile null def
+/databuf 256 string def
+/dataptr 0 def
+/srcspace null def
+/srcchannels 0 def
+/dstchannels 0 def
+/dstplate 0 def
+/srctodstcolor null def
+/getplatesrc {
+       /srcspace AIColorSpace store
+       /srcchannels AIColorSpace getnchannels store
+       /dstchannels 1 store
+       /dstplate getplateindex store
+       /srctodstcolor srcspace makesmarks {
+               dstplate 4 eq {
+                       {1 exch sub}
+               }{
+                       {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat}
+               } ifelse
+       }{
+               {srcchannels {pop} repeat 1}
+       } ifelse store
+       /datafile getdatasrc store
+       /rdpatch168 load DataLength () /SubFileDecode filter
+} def
+/getdatasrc {
+       /rdcmntline load /ASCII85Decode filter
+} def
+/rdpatch168 {
+       /dataptr 0 store
+       49 rdcount
+       4 {
+               dup {pop srcchannels getint8} if
+               dup {pop srctodstcolor dstchannels putint8 true} if
+       } repeat
+       {databuf 0 dataptr getinterval}{()} ifelse
+} def
+/rdpatch3216 {
+       /dataptr 0 store
+       97 rdcount
+       4 {
+               dup {pop srcchannels getint16} if
+               dup {pop srctodstcolor dstchannels putint16 true} if
+       } repeat
+       {databuf 0 dataptr getinterval}{()} ifelse
+} def
+/rdcount {
+       dup 0 gt {
+               datafile databuf dataptr 4 -1 roll getinterval readstring
+               exch length dataptr add /dataptr exch store
+       }{
+               true
+       } ifelse
+} def
+/getint8 {
+       mark true 3 -1 roll
+       {
+               dup {pop datafile read} if
+               dup {pop 255 div true} if
+       } repeat
+       {
+               counttomark 1 add -1 roll pop true
+       }{
+               cleartomark false
+       } ifelse
+} def
+/putint8 {
+       dup dataptr add /dataptr exch store
+       dataptr exch
+       {
+               1 sub exch
+               255 mul cvi
+               databuf 2 index
+               3 -1 roll put
+       } repeat
+       pop
+} def 
+/getint16 {
+       mark true 3 -1 roll
+       {
+               dup {pop datafile read} if
+               dup {pop 256 mul datafile read} if
+               dup {pop add 65535 div true} if
+       } repeat
+       {
+               counttomark 1 add -1 roll pop true
+       }{
+               cleartomark false
+       } ifelse
+} def
+/putint16 {
+       dup 2 mul dataptr add /dataptr exch store
+       dataptr exch
+       {
+               2 sub exch
+               65535 mul cvi dup
+               256 idiv databuf 3 index 3 -1 roll put
+               256 mod databuf 2 index 1 add 3 -1 roll put
+       } repeat
+       pop
+} def 
+/srcbuf 256 string def
+/rdcmntline {
+       currentfile srcbuf readline pop
+       (%) anchorsearch {pop} if
+} def
+/getplateindex {
+       0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall
+} def
+/aicsarray 4 array def
+/aicsaltvals 4 array def
+/aicsaltcolr aicsaltvals def
+/tocolorspace {
+       dup type /arraytype eq {
+               mark exch aload pop
+               aicsarray 0 3 -1 roll put
+               aicsarray 1 3 -1 roll put
+               dup aicsarray 2 3 -1 roll put
+               gettintxform aicsarray 3 3 -1 roll put
+               counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store
+               aicsaltcolr astore pop pop
+               aicsarray
+       } if
+} def
+/subtintxform {aicsaltcolr {1 index mul exch} forall pop} def
+/addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def
+/gettintxform {
+       /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load
+} def
+/getnchannels {
+       dup type /arraytype eq {0 get} if
+       colorspacedict exch get begin Channels end
+} def
+/makesmarks {
+       composite? {
+               pop true
+       }{
+               dup dup type /arraytype eq {0 get} if
+               colorspacedict exch get begin MarksPlate end
+       } ifelse
+} def
+/markingplate {
+       composite? {
+               pop true
+       }{
+               dup type /arraytype eq {
+                       dup length getplateindex gt {getplateindex get}{pop false} ifelse
+               } if
+       } ifelse
+} def
+/tocmyk {
+       dup dup type /arraytype eq {0 get} if
+       colorspacedict exch get begin ToCMYK end
+} def
+/topsspace {
+       dup dup type /arraytype eq {0 get} if
+       colorspacedict exch get begin ToPSSpace end
+} def
+/colorspacedict 5 dict dup begin
+       /DeviceGray 4 dict dup begin
+               /Channels 1 def
+               /MarksPlate {pop black?} def
+               /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def
+               /ToPSSpace {} def
+ end def
+       /DeviceRGB 4 dict dup begin
+               /Channels 3 def
+               /MarksPlate {pop isCMYKSep?} def
+               /ToCMYK {pop _rgbtocmyk} def
+               /ToPSSpace {} def
+ end def
+       /DeviceCMYK 4 dict dup begin
+               /Channels 4 def
+               /MarksPlate {pop isCMYKSep?} def
+               /ToCMYK {pop} def
+               /ToPSSpace {} def
+ end def
+       /Separation 4 dict dup begin
+               /Channels 1 def
+               /MarksPlate {
+                       /findcmykcustomcolor where {
+                               pop dup 1 exch ToCMYK 5 -1 roll 1 get
+                               findcmykcustomcolor 1 setcustomcolor
+                               systemdict /currentgray get exec
+                               1 ne
+                       }{
+                               pop false
+                       } ifelse
+               } def
+               /ToCMYK {
+                       dup 2 get mark exch 4 2 roll
+                       3 get exec
+                       counttomark -1 roll tocmyk
+                       5 -1 roll pop
+               } def
+               /ToPSSpace {} def
+ end def
+       /Process 4 dict dup begin
+               /Channels 1 def
+               /MarksPlate {
+                       isCMYKSep? {
+                               1 exch ToCMYK 4 array astore getplateindex get 0 ne 
+                       }{
+                               pop false
+                       } ifelse
+               } def
+               /ToCMYK {
+                       dup 2 get mark exch 4 2 roll
+                       3 get exec
+                       counttomark -1 roll tocmyk
+                       5 -1 roll pop
+               } def
+               /ToPSSpace {
+                       4 array copy dup 0 /Separation put
+               } def
+ end def
+end def
+/isoverprint {
+       /currentoverprint where {pop currentoverprint}{_of} ifelse
+} def
+/version_ge_3010.106 {
+   version {cvr} stopped {
+      pop
+      false
+   }{
+      3010.106 ge
+   } ifelse
+} def
+end
+end
+defaultpacking setpacking
+%%EndResource
+%%EndProlog
+%%BeginSetup
+userdict /_useSmoothShade false put
+userdict /_aicmykps true put
+userdict /_forceToCMYK true put
+Adobe_level2_AI5 /initialize get exec
+Adobe_cshow /initialize get exec
+Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec
+Adobe_ColorImage_AI6 /initialize get exec
+Adobe_shading_AI8 /initialize get exec
+Adobe_Illustrator_AI5 /initialize get exec
+%AI3_BeginRider
+currentpacking true setpacking
+%%BeginFont: Device
+%!PS-AdobeFont-1.0: Device 001.000
+%%CreationDate: 3/28/94 at 10:55:02 PM
+%%VMusage: 1024 52339  
+% Generated by Fontographer 4.0.2
+% Â©1994 InFonts. 619-234-9400. Created by Gary Hustwit
+% ADL: 800 200 0
+%%EndComments
+FontDirectory/Device known{/Device findfont dup/UniqueID known{dup
+/UniqueID get 4115447 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+20 dict begin
+/FontInfo 16 dict dup begin
+  /version (001.000) readonly def
+  /FullName (Device) readonly def
+  /FamilyName (Device) readonly def
+  /Weight (Medium) readonly def
+  /ItalicAngle 0 def
+  /isFixedPitch false def
+  /UnderlinePosition -133 def
+  /UnderlineThickness 20 def
+  /Notice (©1994 InFonts. 619-234-9400. Created by Gary Hustwit) readonly def
+  /em 1000 def
+  /ascent 800 def
+  /descent 200 def
+end readonly def
+/FontName /Device def
+/Encoding 256 array
+dup 0/NUL put
+dup 1/Eth put
+dup 2/eth put
+dup 3/Lslash put
+dup 4/lslash put
+dup 5/Scaron put
+dup 6/scaron put
+dup 7/Yacute put
+dup 8/yacute put
+dup 9/HT put
+dup 10/LF put
+dup 11/Thorn put
+dup 12/thorn put
+dup 13/CR put
+dup 14/Zcaron put
+dup 15/zcaron put
+dup 16/DLE put
+dup 17/DC1 put
+dup 18/DC2 put
+dup 19/DC3 put
+dup 20/DC4 put
+dup 21/onehalf put
+dup 22/onequarter put
+dup 23/onesuperior put
+dup 24/threequarters put
+dup 25/threesuperior put
+dup 26/twosuperior put
+dup 27/brokenbar put
+dup 28/minus put
+dup 29/multiply put
+dup 30/RS put
+dup 31/US put
+dup 32/space put
+dup 33/exclam put
+dup 34/quotedbl put
+dup 35/numbersign put
+dup 36/dollar put
+dup 37/percent put
+dup 38/ampersand put
+dup 39/quotesingle put
+dup 40/parenleft put
+dup 41/parenright put
+dup 42/asterisk put
+dup 43/plus put
+dup 44/comma put
+dup 45/hyphen put
+dup 46/period put
+dup 47/slash put
+dup 48/zero put
+dup 49/one put
+dup 50/two put
+dup 51/three put
+dup 52/four put
+dup 53/five put
+dup 54/six put
+dup 55/seven put
+dup 56/eight put
+dup 57/nine put
+dup 58/colon put
+dup 59/semicolon put
+dup 60/less put
+dup 61/equal put
+dup 62/greater put
+dup 63/question put
+dup 64/at put
+dup 65/A put
+dup 66/B put
+dup 67/C put
+dup 68/D put
+dup 69/E put
+dup 70/F put
+dup 71/G put
+dup 72/H put
+dup 73/I put
+dup 74/J put
+dup 75/K put
+dup 76/L put
+dup 77/M put
+dup 78/N put
+dup 79/O put
+dup 80/P put
+dup 81/Q put
+dup 82/R put
+dup 83/S put
+dup 84/T put
+dup 85/U put
+dup 86/V put
+dup 87/W put
+dup 88/X put
+dup 89/Y put
+dup 90/Z put
+dup 91/bracketleft put
+dup 92/backslash put
+dup 93/bracketright put
+dup 94/asciicircum put
+dup 95/underscore put
+dup 96/grave put
+dup 97/a put
+dup 98/b put
+dup 99/c put
+dup 100/d put
+dup 101/e put
+dup 102/f put
+dup 103/g put
+dup 104/h put
+dup 105/i put
+dup 106/j put
+dup 107/k put
+dup 108/l put
+dup 109/m put
+dup 110/n put
+dup 111/o put
+dup 112/p put
+dup 113/q put
+dup 114/r put
+dup 115/s put
+dup 116/t put
+dup 117/u put
+dup 118/v put
+dup 119/w put
+dup 120/x put
+dup 121/y put
+dup 122/z put
+dup 123/braceleft put
+dup 124/bar put
+dup 125/braceright put
+dup 126/asciitilde put
+dup 127/DEL put
+dup 128/Adieresis put
+dup 129/Aring put
+dup 130/Ccedilla put
+dup 131/Eacute put
+dup 132/Ntilde put
+dup 133/Odieresis put
+dup 134/Udieresis put
+dup 135/aacute put
+dup 136/agrave put
+dup 137/acircumflex put
+dup 138/adieresis put
+dup 139/atilde put
+dup 140/aring put
+dup 141/ccedilla put
+dup 142/eacute put
+dup 143/egrave put
+dup 144/ecircumflex put
+dup 145/edieresis put
+dup 146/iacute put
+dup 147/igrave put
+dup 148/icircumflex put
+dup 149/idieresis put
+dup 150/ntilde put
+dup 151/oacute put
+dup 152/ograve put
+dup 153/ocircumflex put
+dup 154/odieresis put
+dup 155/otilde put
+dup 156/uacute put
+dup 157/ugrave put
+dup 158/ucircumflex put
+dup 159/udieresis put
+dup 160/dagger put
+dup 161/degree put
+dup 162/cent put
+dup 163/sterling put
+dup 164/section put
+dup 165/bullet put
+dup 166/paragraph put
+dup 167/germandbls put
+dup 168/registered put
+dup 169/copyright put
+dup 170/trademark put
+dup 171/acute put
+dup 172/dieresis put
+dup 173/notequal put
+dup 174/AE put
+dup 175/Oslash put
+dup 176/infinity put
+dup 177/plusminus put
+dup 178/lessequal put
+dup 179/greaterequal put
+dup 180/yen put
+dup 181/mu put
+dup 182/partialdiff put
+dup 183/summation put
+dup 184/product put
+dup 185/pi put
+dup 186/integral put
+dup 187/ordfeminine put
+dup 188/ordmasculine put
+dup 189/Omega put
+dup 190/ae put
+dup 191/oslash put
+dup 192/questiondown put
+dup 193/exclamdown put
+dup 194/logicalnot put
+dup 195/radical put
+dup 196/florin put
+dup 197/approxequal put
+dup 198/Delta put
+dup 199/guillemotleft put
+dup 200/guillemotright put
+dup 201/ellipsis put
+dup 202/nbspace put
+dup 203/Agrave put
+dup 204/Atilde put
+dup 205/Otilde put
+dup 206/OE put
+dup 207/oe put
+dup 208/endash put
+dup 209/emdash put
+dup 210/quotedblleft put
+dup 211/quotedblright put
+dup 212/quoteleft put
+dup 213/quoteright put
+dup 214/divide put
+dup 215/lozenge put
+dup 216/ydieresis put
+dup 217/Ydieresis put
+dup 218/fraction put
+dup 219/currency put
+dup 220/guilsinglleft put
+dup 221/guilsinglright put
+dup 222/fi put
+dup 223/fl put
+dup 224/daggerdbl put
+dup 225/periodcentered put
+dup 226/quotesinglbase put
+dup 227/quotedblbase put
+dup 228/perthousand put
+dup 229/Acircumflex put
+dup 230/Ecircumflex put
+dup 231/Aacute put
+dup 232/Edieresis put
+dup 233/Egrave put
+dup 234/Iacute put
+dup 235/Icircumflex put
+dup 236/Idieresis put
+dup 237/Igrave put
+dup 238/Oacute put
+dup 239/Ocircumflex put
+dup 240/apple put
+dup 241/Ograve put
+dup 242/Uacute put
+dup 243/Ucircumflex put
+dup 244/Ugrave put
+dup 245/dotlessi put
+dup 246/circumflex put
+dup 247/tilde put
+dup 248/macron put
+dup 249/breve put
+dup 250/dotaccent put
+dup 251/ring put
+dup 252/cedilla put
+dup 253/hungarumlaut put
+dup 254/ogonek put
+dup 255/caron put
+ readonly
+ def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+/UniqueID 4115447 def
+/FontBBox{12 -148 648 974}readonly def
+currentdict end
+currentfile eexec
+d8061d93a824652cab7761a8dac65b57ec3fe6381b068e57a586b08ef37fe40b49b7d7633b8ad558cfeda279bfa8db2693a95b593a4473e0e0f38e654ad86ce1231549719ea44878ff49585a89f37ddb79b56f99b7d19a6f1acf5bae20ca0c10d8ed181b136c268f5815bb0b476c700d50e8d29a6c215ecd2f8dc20a8607af
+2d7ea45a72aa45d6134609a1958b1c5eb3371c235e02c89fc6c20f6d9d89e7de177924fa6330368f5fe19f98a087d7eca80136d901279d0a430b7318a2c7cd321fae1e0a6d7b61e387f08c3ef3c1af63d5b419648455e43086bc0f48779a66c5282b6305c0ba8613d66f3fb7dcbf4f6993d06a8341171e0b6716dec273b955
+3282dbdf7725e2adbfeecc4cb50c0bc17354017a7ed420764d36644dc641e5ad23b874d1afce9e0d21c8a51de06eb32f7596def184be868771c0b9c40f9f473a95b361a8f9440635cbfbdc756e9ab670bb141d723e2d00b774782034fc49c519e7c63b4e3c831b0b3c7940a6b493ed4d7b2f633f0e953d09d843ba3fd0a6c4
+1820e5ca93a99ded985442f057bf442caf1ffbdbbf70cf5788351bd1445566488a9beb9419fa93b418dfbee8ca9752a50f79165b62281a7a17ed89c099d068ba53d667d632f5cebcd874b18d88b90f0254fc7f8567a15a50b4a183b123a054cebc9ea1a7ce89bd58774ff507d6eb0e11a447f7527679ff9665257d5f9a7518
+be658907cdad9d68c196bc411b35395d66cc9ef105609942dca7a1833b182aa820c6490eba6c87a1acc52a7391465235c249598578cdfdd7bf1219c8ea8496efec282c08b54127cb1675aced783aca8f6e2520857d1692c18f6a60881693c0e3811089aff3e70ab7e72de2b1f4ad0e3a664dfd0858970ddbeba4e8ab877322
+26616c2f7dabd2421d5efcd3666728fc69fcaebf926af2c3174aab7bdec6e0d8431449eb938d33b68992e6c36984e05fd2d74e837708b42d4899c0614df95303b2b33e22a3b0dc6883d6516e6804b2d5ba6ce94db57ee254b840490b82ee2a847fbc1e2957d3ffa335f026167c05562a79c4ca7467990ab22f816c47061417
+cf969ca6f300a72c7d2e3aacc12dba2477170a4999e8624d924717f9cd83dab168eab77a1b41631f986be5587beee9ffa5c9ea5cac6cc6d3429d57a10149fe4d81a8a5a27e68f193765cc7c1db653647271ceb9ee3ab6be87989888457ce0861f3ecfb57abb2b33776cc54ca83c846ddfcb0d31065224b0735a85536e334ba
+7cfe1f29ec0a17c3c0120bb269f115213d4e2cc9bba6a6188dcb51efe797904b6953943b7c823c9966437973cf0da10d500db5b19f492119b5f8dc1efb27c38666a1982ab013ca68654b6de603f315ba15c9056260935613fc97312d41a8f6c36e31e3df887a73065d555cb3fb914d03b0f6e0fa179e1330bddcf8461c400e
+ec3c58c0279ab5226cc73f3376db7ff98d3aac32808b595120873be783c9a56690a01dff3b5cf183490cb8200318bffac052eef361834649ea9430efefbd981dbb5aa7052f67fb96399fab7070195a8a85989b4565d136fc4ee2f5060a6d48823041f44bb3e27415f81538b2dfa16afcce8ad23e885d4bead26c16fbe97f14
+40cc98ab1a5af166133fab2ed572f805b4084b21e4cd289bc2c93b44e01200d1b0611d704e814b856d48c6377128fa2f90e4dc173f97e5a677f44084b6dbc25014ab7ae1e8539511c2ad200cb4b9e1f60b3c82a22434a8bff68779166190883f9624580d26230e61d06a692b09101c1f60fab7672b5d6a168519f9061f1311
+c662b6033166660875692c7cb400a45f49a9058d0eec60158000c1b3ff6cb6ada7e3cb0f549696060766d6c88417de185e8f92fd0b95b3e60a8d5d92d3eb3fa7ff4e0268ef612cd93e6b70f2fa393ebf3f15cb105696464ea23e7ee2c467539c3df167859fb8318cedd23cfbf8d8acb1cd7cf1d07e6023873d0f7d6236c412
+79de21b2cfff6b2c22c5fb824880bb115bd80bdc923c6d0aec0d30ff65024fb9fd55b0eb0163055138b9f140dc7fc02a7206b3d48f240bdaed454e73798e57e898ede3c3c90cebf437a11d2587322a026889cecae0580f851c3b24f776ecc40454fa2a4a18d6a9f7acf0eb1ed77aa874666426892829b27806d58bfcbb2fe8
+bfaa8ffbe9af08035a80e38fec7d365f7bbb0252c977b6067ca276c7f8eb1fedd4992730ac0bf1eb423e11f23110c40a05f2962a58e6f945caa0353668c1a748bc96ebbc31dcf33811139bb4a09bd798670ecd4bf27b69632f24c43a7e9932d23b3c5ac161b588e5510bd34aa9fca0effdb0d04648d0938f0604bee4053952
+889b115efb5874087ea4d968898243af4f823470154a5ff87bd5b7ff15e503a202b7c1a6ea95972f6e41cb541e4d64b51cc9cde37dc8829d0dd5c5e15de63b23b275ab2a2dd8677909a97f2b7298a88f01934587e99dbab11efaedd8ffbcf7cc71dd15d6899c6b9b5d0c116ce2905164a99526068aa57b92e5288128a75759
+9f51a287484491c727e258bc146e14e139ade61d957b2bccfdbf1d7251c9c6c11bb59ea4896c9ab6901a11454acc95098ec9b1072bc3043fbb0f532ba75aa47aa61e340f1cf1d679648c3b5d0eecef05212c571dcdee915e54fddeb48574433f25ec49b5e51aff9096dcc37f3ecc251e324ab189c0d9900873e4a25af639f9
+9cd818f0bf3b2e7ccfc9eef7094b49ad6e912cdcce96189cb646369683084148de4c6a4f5e6e55a322164f063072ab7010367f3b0d7f544ad8072f54badd32cc5bf51e0f7203780041db263fe150af7300895f1fb7be300853c264a2777076fee6f9e56619a1b7d44154b95c3a3e0433ce02a1db6262f3d9f5438838ffb362
+b963da4f4e438a1a01d74ff6ecc56bfc4cb4b1a135ab81431dc7c81ace913fbd056e5f2266ef565d4464c9ecab8094d638bfbe0a640f7f892a46572b5db1f618e6a71b727937a672c95e604a6bad1977a907616c8aa3af17ace4d9530d02a992314728455be5f207c13cf209499c748ce2f7c4bcc8756e9579bac1ce84eebb
+02d9fe35ed80ac2a4323bbd15d91e2c214c4bdb0e1dc8101f349f0328c371754eb08f5508d3b6a14afde9181e85611ecb2de720c2bb332ee6b6eeb928a5e3cc5a1b7a0bc72116aba7cc9684c7d3bb96203ab60f550bdb279129576aba4b2657aae837efcb4e56a711c56d6ac6777bf68b91a4fdeda09f9ea528f532a45f291
+258957255cca6ebd4534ede89c2bc397c91388ceb8655995b8ce792a4d617063645bcbe7a2770be9cda1a0161cd5f33e36a71ca94883a1067ea9c97571832a8892cfc6ac2c9fee7f115b306817f3d2f8eba2c52f9150503087bd7c6d118980418e0682767c287b23ac1474cb820d17b9991335c3ab932cecc7901c50daaa83
+8aedd750d8f2655f2500151319600e3ec08d1ab3d4e529bcca3e87fcdff2fa0eb4903c23e7ca155e7dc021bdfd981581303ddcd133563ab65e99b93dffe49fc52a394e6650ae60df8bf615237b78aa426d3da8b8db58dbc54c38543771a0ed633d5ee39cfdcaeb824f266348c21d4e456cee8ded74af8d20e73186f1228258
+7ecfa09ea725b674ba887e7efb22a5644abbeb890670f6263e3b9eb011f6940148f46c29b4145192521d8247a4c6066a02dd4d90353c170ab70163269e12972640b34efcd9298f86e9fe6b83ad0628ec8b803c32bf2c2a550f8e89c71d47f2a63c0792677373048be1c8729ac277545334e7b460958491daae755f6af3c06a
+8b848ca70336e5b585908d93422f3da947090ffd9175c98b08e523fde5ccc9043acc4c9960af2ecef6aaebcd12ff4c9af27f0a5e3b3a772195c1bace42a568a535e30b5aab6729fa405de74d4a649af84d70e10ba0b69f76e0234c4fbcc5ec377d0ffb49c67208ef3f0aac2c477e726009fcd49bdb0387d134983d12f51df2
+21057c51753a0ecdca14ae8c9f2eaf2b4ac7516d72d8ae78e950cbfb19aa676dfc03e3c923c4d8ce25e4a7c9cadfe5fbf9fadfa382da04cbb47829b988ed99f208d60f915f52a3564efd3462d68e54aebe58cb5678817415f2e00d698c1469bbabfbf6919d7ef821dfc497df4b8db1dd53c70906f8e518f3b7f34c8b26171b
+590829a68bd7be76dab9db6239955c04942e2b261be108aaeeedbe77f2f4d05e4902ae99eba1cd4f482bd36f72fffc124e3c90ed48ade35a25e673841c149113ad0da2fe2bab1207bd002323509ba5d29ae00285e8909dfbe7ea3bcc73998346dde576a41ac98939c174a973b41e1a0666dd247ebd5e00a4e408d39503f490
+de243866ea7893643495cf9bf551bca3200baeac4e0f1955adb174416b29900bdc2def860e7ab7bd013de0dcd8679e183aa2e7693a86659caae141afe8ec7f357e9713b0e7d07de7e38e2259e558643413ed046fa3aeb75fb7fabcbcc3dd89ea664f5e5e811041a31384f420656c62f5128ceb1289cb807d0cc41359d61cda
+741f98f967e29eae00fd8dc3741869e37d84734817f8d8efe8289ddcac1cf7453a5f847817f1904a3d12c06c6ec290df8136fbc0234f4e3408d1470c3ecbe6e5f5667974b01eb6ee6e59dd577375bf21696bfa4d5e4a3941a326187dd3ac06f6612bc53dc31bd7199f13a4fc3bc565b7aeb3ab7715c6d54441e8a88ba29ca9
+4c1afba6770d72d0e20710c4bd382b1ffe3d47a6c54be048d93d7da86f8f385eb30f79d6821087ac542a1da642a1fca38c7236eb55471a55f85d95e3325c145623d017167eca2909721302bfc6a6023967c6c3513c2c69ccbaf875801138640fc1f47fe28b9d8bcdb948135e74050d60db4b3b583dbf2c6a627d1b46d39ca6
+88b8413c95d0935ff58d8b5ced048fa04a5890dc4e1e257c0ab5a8200532ea3a11611c170d7834b23ded19d0f6438906b7a7d6ca1ec1b3216a5e651e270583970b96da93617b82932dabe11feaf993a93ead759dfb34f4cb9bda39c2b5910808a8ab41168c2773a0fbbcb896a85913ddbc41446d1a2fa208df5ff3660e2095
+fe17138d0b735eca1aebeb34fe0311c4df5ff111f6f5d7e2be085afc3f231f2cabd5a4e7b7fe5996e7ee2fc56ec6a4b593b400c3707ec7d954807fc1f8013174286daf55d9d03c0b1a6e6de0af0067b4f42b13b767777398f6fa494ab448c08d603238434c8b2de9c140e890b9da0cb80529c58eaccb50eb7a560eaa32c9d9
+e179b39fb7d8b18b523966763d2cb6bbc0273db6ad7a29b31fdb9ced9943d9f2c3348d3a5fb22939f84609af0cbd5078bfce54b52c45cdfffafba11f221bb43b31848dee06579182715fa0aaee8492ba378f03afcee8823e00c06a4012ababe9a78a3a3288ace313061084dde37b21d34cdcd02ea1117d3acfa3245eccf86c
+6315e71e446687e6d9517910c440c838aafba25779151e4a64fa43f39abec747260a6ede4ae9b8a38c94ea57ee4ad5734d4d8a32d3b087c1331bed493f5482552252aeb7de7c0d9adb11882b96f074ff1b41f558987af3f081d64704721d3c0219f9e762f74c65d7420067527328b1e2913b772e82330d22ac35b7677c96ee
+8eaed8b99f2d7b8c28a42b3a7d22e79a2c3818c8bedfb3e3ef42215c21e338cb8cbedc151ba547f7c6592bf7e13cfb8081ff8fcdc1e54fcb6708f3e28374fb366953157eeee486f706253ba18af4623f38c1a74cd46dc01fa49a12dff6a6fe59ef589c2c0b55b7c16e35fa8184b1aab386ae793bea13fa656a8fdfbf712831
+5c4806d00cd2df4afb6a5e84b237b5a68415479531a47afbd5a00bc1ccd5fd1f4f9c95a426a553ef445615de74bc01dcd1226971233099ee75d0ee5cb06321e0c96aafde7ca90b8153d0c81758238af7c55402116abdb470ef76e025125bbe6d91ffbe99263494c65c59eb9cba650c957bee2250e79757eee857f07bea6023
+569590e1348049bf932e0422edfc51751310368da04e96ce80729eacb63fa140fa83e759655153a590fd44840abc6ec60aef47489fecd48fa953103a5f642aee55e28cab055da0d15e3d750e93e08cbe9d5277e61fd55312f518c293c1cf98fc9eea0d2f6d7b0c26df869b36bc869664bef19b6d2577106d7dc9b15a69bdc1
+d0b2263926b249bcbbd392c7b55e59aa9066022733ee075a7ac0d407c56659660bbf4d051c793fc4ae5f3984fc8bad99d5d8aa6141501960c52efb0a75219c934e4e989f23844fc319bade151406a45afe6a34450367bc34cce43fb8f18e20a3451d999548121cc552abf976489c60ce14b164321285e67c76ffe46211e557
+109742bd3861b74fbc28a26e16cc367f83eb08f3399d01114b78c615757f768934edf990fdbcbe160ba0be780723dd5558ab3274c09e76b4086efaffa891826e5c94c4355aec9caf4eec8b557b28163b809180a7754ed0edc212a4e6e7aa42cfd842202c320341889709b351309fe55e2d96c3b433ca7e70a4c68cdd424b88
+0f9c9379b41075bfa77f72808718a26a509f708427be64c8c9d82f5eb45f64079ef03613a19e6ad4a231d1e5dce672cc69a8ccec7773bd07c5d29a78c17797831ff7111f73a47fc637f32eed55d42c869eda61049308d43a1854ce98a2ba7b2819911beaa1b375a52cf825364681f7b9d0aa55e377fd7792db37c59b3193e7
+b7203b5764616b5efe8bb2f63c248118fe52aaf104f2a0554dbc013ff95753f7a64da8d877f265870c0ec98e9eab430286d0b8616c5e1731d32ffd85888b904b1861f2ba9e74dc3f2a4f3faa8f6425ff88aa2f1498a98be44748d6100f20c704323ec200a47f3de3a850097410674ebc0de4c0bbd6c781dfacf665c18f327e
+f6166d933838aec0583fa35fd3321db29f27af50b4d158e5d9a875b45286c19c675d92d56936c603c5cc533da08683e13bd35e2a1a02690cf4b0c9e25d2357fda47dec700321e4e2b9a1afe0b9210736b970cdb25bb9b4802d06697892aad68e825b9d2efe0be08593279d78271c42f2f7ec281c009c6cf34f2b71e8adb0b7
+39431882a521cff5001ca81a1fce7f46b87b6a7e793e4327a244f3ef16019febd705c463979b60ee6ea6f87c2c9202c060bf5521ed2b61a729697fadb707fd2eca5b5bb74580228a7cac3579a0707175bf10e35b6f5a4f72497390564d2c0a9e30614bfd1982cd528faf0081ddf57e2311315cd5b21de66f5eb01582c6c9d5
+7c4bc18687638c120c9dfe0fa4565f7f4ff2facdbc455ead34703595dec11b94c866791ec7594471a2addb3fe7e3a4ff3baffa0e4793e2fc6b6d2a991baa3d2277ae71d3e200c9e66f9acc298793021e0146019a0be4f7f393d6530bc397b71b6a4b6bd57d25deb41dd8748b6a49bf110615acafe1924be715616af387267c
+3032c9dc819206d67bf16c005b8406697e31dcc27cb978896c86d151043a6284bcdbd3491adfaed4d752ab0545040722dc822ebeb86aabc704547026c5f7ed488a96e40c80fd1318a12d1f08807ccdffc4ca2f28c7a6e4610d31879be015f6e5dc654e13ac2e6c978a3e8caefa23b84ea909f82af078f9bdb6efb13f614107
+7a70a9cbb32f3c44858aada1fc329e53fed7b91dfc087e9e99ead0add11e1f6f1b64f8c01f63f0f66d8b0e72532131fa0e5a8491d9104a8e469165466b51381ad969ba3f40180d0d248b2b12d3e7400dcf7f6a79a773e237318ce8da78cca61f8d47e916f87e5c796be484cc75ca49e111e8669516de77ddb5f11e33f60205
+5654b1bca7cade5774593cc239cd4fcb3d5e4f3a92992dbaeb54823260f6b39a9b5ccc95dcc870f5b06ddebd1d5efd8793d69d30abac25586345ff9c770a92e65a04105b21198e72fff5bb2701511cac912935a3ae9633a4fcf046db1ccd4d95b5223d62a452ce58a5df0382f0caf9021490c540c4bdcbf4e93ce337781069
+82268503d6238c5c738884f95bdd5ff4a21c0c09afc08d520dd5811066a94707911fb57ee495284aafd51f747924b1bc7dbe035a81b5cf83b8307830e760271dc5f23e8892a55d8dcf43bdc5fbe96b1107f6059318260a090882912cb9bb134d19bad158f23d9d7524d75b0c4895a2c51d0fd8d727b6830bce8bf2a946206d
+4bde47d871d2f2e0765768d751c3c176f142b7c935e9b56a9eb4629ebcca59b11fc4e8ee672e8dd7b86c32ca8b14ac3cfd38010f11b24bd8195861bf04af8406c846305993922fca7525e2d41a2155df3ce5e69d65b023fc516e122aeea9a60fddfa366671530867c9ea775560ede353f845f069a97f99bf0fd36a745aa244
+efe7a6cdefd3223fa50b4c7202ff06cdd500957d22ef4ceb99f7209f47edbad226d803c59060522cb64d75d33a0a528234a5a08624295588ee5f43571b6eb3005ffd9f3c6aa25b47ccc54899f8d2c92e873eb8428cd87224253f7425d921a88e0274a5ecc536845f4109dcb58d549be8ecde36fc996a681142d9eaf8eeb6a1
+860e88a98ef857f4b85d247cdb4c320f39a565b568b5fabbe86cfe097c6500ddcaa28216422c0b3f59d1c965cf0d75b487f1fd16a22815cacec8cac0f87e9eae79c0bfd4b60750dcd740bde980a11f4ad2499505a259f7619151fd5c0ae1eef55eac375251121f9651994c31534632458c92d3ef9549ba7556a8c65bf13d70
+e20583b41c57a460ebcb92fb2f36c567763f1e40da89ac94c4b89aa148431e294854a85835e73a730cd6c53202b5065ddf04d784f8d4326b7adc1e9b2a4e0265fd236f6d186cfa6c93a469486bc341ce64b12fb2f4c2e8c981e208888b748d944231dc1fb5362db890ef1edfdc15420a10020d15fa3ba1acc41c3ed0a0e295
+b366ffb47505aff24ee0ade40f070260c863515afbcd8a93637f2f7a82b7802c05a310b6b4c0da22a4c1e8ff47e739656282a57f97af84c04d645b5dba2d9a763fe2e18d7a92d00b4c95b314726889ff51543429de1d2d8a3819dfbe42cccda4466d20569e3d036f86428a1ed1b801fe287da0c91060e14b149dafba38ee6d
+fb2a790cdbeb4747b89d2afb44d86100a9f228a00f8019812d4d79bd400dd2643bf59475c882c83fa8837d8ddf5c602cda009303a7344576bd14db7cf1f42a9915e49586dd6216d86d53f644a245fbacabb985ce746169509ef0067a98528ab696b88814d791dac614373e7a14761e7c860bb86e7016ae11c3fd99aa935dbe
+e4773b2fa8317da780ee188914274b3cb4b2ab2590b0478abadba0f6db801be4488bae80e0bd16425d8a10f3975c5b0e4eaa3c17e30343aa04fcfb0d1bd3a5c6ad6ec33174ecfd9cc6ceaf1ddd0a0c2763be7ba3aa580ec4c0e4efe578fffd37dd044285ee207e728469a8f79d541945a70141851ab25530bb5a09be0e2d40
+3b56e6a5152dc75a59d70afb83af949c13898b3ae3da49455c92b2ee0337fca9613d147c492df5ea23e9a72d3e003b374c409ecb50d8f5895df1f017c30e8095573ee46395195961a5addd97c2237c54d3086e430da34ee6e1ae85b32a98d7212a6e072ffe73e57d065e2497508c0899e3309945a8e0c48f6b908fe569911e
+f443a5a39f72a474536945731a0358a18aacb46df1c1e8b27857aa9dbff6322c7ee3555f657daa27e78aa1f57a67b2b3286ed4d5c50446e0c8116acfa2350633acf375471b0328708854e7d6e92265f3e74e0a16c6bbaa81544e9cca44c351a477b2202d64b47fa89bafb043b2b704c4848eb349cdbff9cf31ea28a813918c
+117b259d343aa5f03a2bad1724bff9cc7dc9686eae637673438c20de1ec832eba488006c16b771a4be83c2880d378a73312a0ba07c246a72f03fb55214e205b59b2cf1826fa459c2f1d55a420ab9bdf1ce11f8fd7c659e3d43edcfeec64f591651ee7e7ca23c4b78f6f17362f6ab27701b8c84db6ce89c571603d2171cf5b7
+3300357abb2920e5652bd859ee437581870eb729858f65e8356856956fe1dcf617de21f80cb69977f0aaa02260e306d672f5f9196c06b08a4126be7cbf431bea44e03a3ab86bfbd685099658369680a307313fa23e4ed89b02b4062fbd40fe42d270344a916530749c56ddc245183607b4a07d4f1ffb4599e8460ce525d6ab
+19af4b561fa987401d2160cfc9e78ff4d211d84863e09d3f8c6f906c1c42c3dd8bdd0ecd709a5e90cbc4679d0ecedd20014694015f36a20eadfca4c818b0a2fc0353d4c576e7e94c308c08ed67236858bb88f180611dcf38cae8d14bdc3ad0f40a5f9695c11f584d4801390b885b544c3f3a5b07a6d3821724c09137260dde
+72224f90f206921b38768da87d0df7721b7a5cde0735d7164a4cf429ce3584da362454c6e389c8c2073e49564b245aac532e0a3631e868a3ac174f7a62c0e8cd8e4b6932e7cecd5618ba937e637ba20ea131863012a5688315520270e866b85c0ef3a450a292f9fc8052766240f632263fee77f3538b5e1058787cb65295af
+7e5eea99d41a84beadfdccff9f4fab6879ee0eb54654ac5cb345e830ef22a5bf9a00026e526086a27264d70e181aa2336e96e987d341ea74c7212048092af199b711cad5195e64ff60789ee873d301dc3fac7b681ed94aff52490ee6aeba217d5861a39a148dda37e2ccb876065c47818e49ae05272f6038b3a58f3f4824b9
+5538d791c678305ebd5c5aaa346658bae0c2d3f4f0f1f04a2941a1fa7c3e14ff067e9ad1e1e95a72d267c6394353320c4b4d31ab1d090a0d53bdc3df6dfba09642adb22c18a5d66dba104bd9a6331efaa34853f299fc0e9d435fb251b48bfbc56acfb79bd032dbe2ab2303538bdddb3c8083ef4696b569b070de832afe8e99
+d8869d408702e052001e5b39280136384653693b35ace3fc01c9f859f709d1078c17c75d32c9a00fb3db97c4d3ae4445507e238e5c0b7806d9c8492b9b843e3f0cc5e2cc5dd817e081c00d6d83378297f27c4131a29b9437323175bf5b9d3cf86e250578387df3e342f97e7cccafcd0bc229e22a9cf8fd48a3b28f82adff7b
+65e654706d8d79fa6b0d4e6754651dc2235f37ba47984e6e26cb99f46056ab74da43b1cc76561fe82aa233263b05126e66cf6f4f6aa3c52c3c6bafac90494e266fc7f47212f164e041761211f73514363cef69d5e1fe3155d19260fa622e41431584bf71212f42cdb6ecc2bce920591e6a06abc72c70863a116877aec33aed
+235f43f01bbb320ec12da7c95744f604544988ad2b68936db008c324e500b1e614c5035559957d3307d8d57028da029826e09a601d667ff635dac374e390e70b968511b5b859a029a3d80b22eba03bb4d4dda966139e927d62fa9869f6bc3b65d19fb81d1509a23bb396e6ec9df76555781ff2e595648c73a05133476f8339
+e71c97b2e7478e15e11c553178dc901a5b5aedcfe928cbbf46db104402d1b0224893c67f3efed78acd7193fc4a960850b6c4c167594a528576d1ae64c0e88ea5b57bffd4e1bfb56cea85436ef0bbb8846076dcbd88be89727c6277bfa4502c121d6eafc514332daecf17f681a36d1860263f9e3bb24483f84451acdf849067
+2f497e5c656dea475d9df57046c0ce4577e2f5f76ec273aacf56b12cd527db47bf88c7dec117b9500a3c4d1842a1b61fc7bd430de6d563526fca71b341fd97613802812b4c1b77ddced234619b459867b3201a9f1da37b8db636ad07c70968976e5e33df49d4bb2c74bb6d2c472f624032d47f1309d5139dfe6e6804987058
+a227fc0adc716e6ceb2401b4158929e5634e8b329facdea8c8f6edf33d52c5ccce8db18bae293c19bce6a1caff9af9d3a1a4c9125735d97090e212427c5cd2462127b1756f9b2b1968517f9b06ecedfa1a890328a7a68554f727240e7828e9bb54b788fd49ccb0ab90386f1ceea196e588a6ad17155b25fcd5071a4cd4fc98
+1a2ac8a930f85d9e70ccc6f5f2eef51c144e5f4c1523f5cc9de9027a6a96b14280ffbfa12bdf07ddae577b7b0559a500451ed1e254b05e29b7fbcb09a908ef2dc5054224ea7f9c91288d1f4c1bfdce151331e0a8841cb41296525e2d51ff2bc7ee6430b40f15c64f0ab35ba1917e35e0a2c9c1afddfd64049cd3b1544bc1f8
+95cb3e653160b62c93046dba6c49bce6d0026f06cc771e462c9796c6657ccdf4c9db0d346e1574a5181e52493bd08c7196845359be3f837eeeb3ab445c348502da48d840b8887d239a51f84ef32cc9699d27f4f783ee311f8639dfa8a5ce0c33c518a45c5f6474a8d7765d25e0453f3f60f88bb40ed5e2dc2344160c171b6b
+66d8894342502baf13f63532314bf2ed29576a7584df8e3d5a44eea8185fd3ec095e8bed72520b9334d1431d9f3004f17202b98b3409419b6f8747854a104a5f0afb9da9bc8c93bc4391e33cf99c3c8b9bdb3ccb251341c5979be14d8a9b1213219c2947e2604cab41f00a7226db4c1ae3d65739afdefd62ce3d268d854540
+549fceb1c46a3d37fec17a3bd01631ebc63cfc36c576bd41118ff2524bc6361bb52799425c93f2dc275c1a988b2083c82a2cdb5d6aa311b135a38721e46e57e00e518a0f06e09622d86301727a3ee674aab7267fd680f2b4c0379d96818422e41634d568ff18538a4eb4aa309bc1bd174dd987047b817733424d4392ed9236
+3dd395f517c2ba622ea25dda82738e9a942558bdf278f96508a6ef4c2a457e845667caa84173b11c46e8a8a4f9c33aaabe426295baebaae0eac62f8dbd68b71362d4076a503cfe9f95b26d744fc9a7186953cac74a4b5ebd605e702278a5c6f5b6311fd50a39625e63319d932cbc5353833822fec28824eed4a8793eda8d5c
+081711ddeb87a5f915eb07189931ef1b015af1cf555c99208ca09d3c802b2f1593a23a8774410947c39c116697e4edeb29954fee933d2c46f1c2f61449e08a0df628f100bd986869b4812e259dc5ef37a59b56e938da476ca294a430f1fe1e836aed44fcdba589689e90dd6e1e215eff05e70c0df258056303238260b26797
+48aa26a396d7bcf99a086e5ed03c1a48ea3fd63d61daf7c1c56faa45f824f011b594af1569f2c1ebf0fc4cf99c692442c0957fbe6561728774c0860debc7e265a98297f6bdab8d18b0938993777bf50ecd3ca6395074ea555fc3a925b8433bcd68ea6366c9bc148268f68dbd9c292d8c821a108c3a1b8a194e7f3e745d1428
+7441c7e9c8895b15c6a9abbc42292bc373056079083360cb3481d749ef439e788303d500ac098dd88903f487ab6b198126675dcf021367d32e24680d58dbf551ec5c92acc019ac5e170705190dd7b89338514c3f102afce6409fd3ac4d95ad85b809f920579a2b6697d2424cd7a6324e2fcb6daa2a5f4c5e80970275567393
+4a599e605aed017aba72d3b84390d7336c1c39f2199f732befcdb6532bc2bdfbc92ce17316e5519b53abce88d54f6877fd0a00bba4192197a89b61e6076d521ef6bacf588d19aed7cbdba39819c9a4019ab0641227eea491e5a0aee1eef458571ba706342fe0876d0419704118b18d1ee9e4e055c286c1fa59ca2fd375346a
+fb75570429922b44b376006e2a23c3228dff653e6ee6ae109c82655c18c02908efe8f447784e5719f3aef0ea4040774200ecb72e96f7752c3d89a7bac7b1da38452f820315b39441e0300944c657cded958620ed0178b0901e03e349bced5bb23ae9e4294deb84e5031116633483e5af73d30e221d1b9d0bc05d6a7507fd52
+f6f6db80bcc9116adc6c34eb6e037d4bf40bf04f282005d8539bcc32ff7719a5256e0cc263724a645973a8be965cb20a5d87b53ee0ac408af6c89dc54f79f04ded7cde96a166c30bef69fb320ca5ceafbbdf8252ffb2c0ac82558f65bffb8022bc9c7c8f373e1cd7819a3375c29646557ac306b47f9ff2cb91e0679029110f
+a583655f8d29a7def1e84ae42480a4b79d23c9d7b1e000a913d26522ed86aa3497d93345139dd461ee93bad486fb47229ea75607c51206cc994e3efb187aafaadc9ec1a905eac775ea8debe6faabd7ff22b11e06fe8554576575b337065ac891761a25975b9b59284f842dbbb3b2c1a27016113a1c13bcb6e552d5204a1f41
+a0775987910fee7eaf8cfadf31c537b85bb4853ba8a3fe6aa222f09233cf8d72f573b1651c90ca32aa7ba49185b8afd79c483e0a6241a89aa7dc18ba9d9ed6576b2e81e0168d57c496bcae44e9d07875a6f3c447c622d1d9004020acbe566047055435279a093cebd7c4bd6ed9a29721f1eec21c4ae24199876541d113f744
+6219637f4477e6977287e704ef7edfa1bdde7fd4be8ff57439ea8f2146b0629d8e98a5a80c2b8763f7189bcbfdb3222b9003d92dcc07bb7f1215b27c1b5a9a6b3595eca046df1ca827400c216f2f6da33bbcd47300ba4c4bf6d5b61fa5172f0813868d7a684e1adc3740e4e22a9e430141d68db63d6c40b5b8b837a9a27e3b
+a41eb6cfdc48765ca00b5f88b5ca84f19dc5b7e481a9fdafa504a673f0871c5a44f2d44f726d6f042cfd5b76828bee85dfada1a721533771e995d24ac9bef9e40dec0c0d0ab444dfeb55cd83048eedef09501f1f0e3b7ceb5f96686d571eac8f5c710e551c350560a85b68931d3ec66bba5c3673e59ac0cef367f9bb5b63a2
+98c1900e13569a540affc04c8a42768636c45469ca2d2173073e40a743d78cd8f58449efd6662978a3d58d73d05ecde6daad772894d9d2b27ceb04afae35f3a18854c61968cc052943109c2358b66a31aeeffae17b9112758796e41470498ccba8009bdb2e400d8177af4ab29e57c67e2a816a7a682e6f89ac9d4c0d3c5fcd
+c353523354221aa5f227d902a8fd6ea1ee63fc6df9cdadd1373d516c6d00a80d46472eee97d0393100db54a0034635d772766b1533a0b41186d87727a64c3e90e02d0a00deda7e91b72f752661a5e8da1ee320c97781f804b4fc9169a67ad3713eaf027e64dba1b4c1ac04ebb31b91b0b287e235f9ed9786e5b509d8b73b80
+75f74c95c8e269af91c5d38e45486fcec38e00abdd2c82f241142331709d78d7ad32c0237ac3e04eb79d78962d9bd014e2c1a58803b17ef22f0e05e234253b665ec0a813ed61e93733414c065693b7f6d78ee298356ff8f7a275ed990fa6d2ed7e52e9a5465acbfdd07be9affd4b4731314b5e80d1564212863e5498ba1eaf
+7508a899fc41ac1b33e7b20aec88de070c9a490d7a573f11bbc260ec929478cdd1348ee0a9356e16a22563222f89cc049828d3d07bfcd566f2e075915a7b709375ea963ae4a226d430200e227f8e7b602496fae39d595d9e34a642dc8c16efbb51f13e8f3026d4c4adbc7f6ff14321066e996f256a9cc9b6115a9ffa9aae77
+e794ddfb7d5efd704c61adfab6588dd8e42b988e332757a4876eae9aac89e7f86b89f48ccae16adb137eb79a9289cf391a95dd4e73719ea2ccec34bcb59754b939b5a99d3077de748cb4df3b8b534dce94ac3b7a709a3ee13859d215ebfad213687f75a9988f23607b2dd603c2cd3e2af8d49d659bf1e7d214fd6b92db86cd
+af8878d0002e2a050009d9db2d4a0700728870d2d3165e7611d7eb20058f27fb7f7922db96a92b8573fdc8b6e0d1bb9e8df799621a1615bc5dfb089eb220fc4a8085efa031436c767a63731200728aff1c8047848108becb8e554e05f6140159a40b1073bede345010aeade337f2d502383fbd036a500bb5c1ddf42204f2b8
+4b5c339bc5e269c1704bc1b95661d4b633540c50162f56661689cfcfcee775de2126d729a37c31bdc4fcc06c540ef8f6cc9ba978f85bf8270c1bbb9c2d49707c1695d4fa8381520b2511e40d890a50282376639e70b2145f1ba4738275951bd6e1427f9612c78260bdab1e2315d41c6f5ccb7ebcd9e9b6ab9be818a3485604
+2369744103a0210c2ab48be9235c2344efb570e82e16ebe934790d6acfa8606db201ba275cd3592a0c2b7c627808a0f08e181af74e4dd0dcff9a54fc1af11688e3b550991700b3693dfdf834657ac3e4977f75cc120679b35e4b0d82359e57b4a6ad12b3199e6e54068bc65dee5760ca3a813df048bd8503348a660bc4550a
+8f504649dfedb69031ea44343daeb2f994022cd2d70f828f355f0f35d5fd031408b6f0be5876da5e993c23e8d3118f2436408b99aee857a02824b2c66591f31bfd41e91fa3252739ac5359bfb1212fbb8a244b6d41354c42fdf0c3109e950ba4bc24124caaaeac7ba166b8c8c67198ece4dc222bfa6b866325e792d552a5e0
+ede88df12921b03d1ef2fe0aa5201b294582ffd3f132739afcf97e2a1feb9dbf490173530dbd7155da05e86b3e1fcf1237ad6ddc2059633b6134bdaa312427327958fe100989d4043219275b63a00612dcf4e50cc5ab5c9d634906bab562e5303f2fca751eb973bd8cbe505db334f5952aac5bb4eed480196d3b8556226b98
+6f2bd57a77fae30252e1c6de72cdaeefe3c23897dc796ece0bf11aa3cc72ee4c54481f426e2d4934dfbe34798961855bfcaa2174fee48565da40c617c84070dbda70ceea64631821f11183d25cfa78f0a7b4d6a50908a39cd090ca5c932f4c96b92ddb0933867be413dde51d795aed8e9abb4559ed0ef83fb6676f353fc383
+52ed0fab4da9d5cc60701b83e6e67640233a6d47b33063f08f758960d8b0efaf21a1843a771c760fd9dc4169f4464ac7a2c6ddaf0fb748ef6f66d541c669f2f3a3fdda3f638517c74925e8780901e61eebcbac3db53c36e6848e16e4b99dd9fe3c0d4f42aec5218f4cb6c9ba80153d53e77726fa110b61b137718e608da99d
+4fe056bb4b05d69143fc87f52d4aa130ab026b5c8afae8df0be26c260f807e1626f38ea644865ff8a6838eca7c0dd98314cbdc861bd06ffe8d8b8fc1b5ed1f4e643a4bbff318f16aa5f1e122a18ccf5becda91b97c3ff4b068a71d8b1492718c282e84932578fa10d3500c35a25f62781e3f85b5ce786530a5e95a815e6a58
+df70cd2bf2fcff4003152bebd49e7191a31a298b124407e39097335e5559b67415c7c695128caad080553ebc9dcf39f80fdb4b1e6f119ae487f809130e177586307004c46ca5d6e669fca92251d598577a9b53975f19a3748b23c429e033e27dcb4b79309f02a07063e4e5c085984a436cc61d86ac36692066c49522ca78c4
+4d0f4e94bed0327104958798f1c1e813727b4e5a1f722921b210d9e55debf6b0165b4139082bd20126c5f07bb145974c776bfbde92bd0b258ecbf6484bc8e7fc85594a68f8f21a48651044d367f0dc843963d4676f5ab892a4b2b54c8ad5f3e6ad73d32247495e2df10a4b937d6a0b3bce9828bf147f845e2edf9290c605a0
+24452fab80be623d1415433a48a2fda1ef272133cd4ad4cef69ff078b3d1036abef3121014e89456446c115a7b5d5ea3233173239ad9677ac6f2bf1afafb2c47c83443ab90b8e6558b7861d38f1b77f121ed2a4825e9f5a41f12ab36e1520244d790ca5823aae2a74efc30982a47c761bd8870699e70ccdb5dc90388b2fba2
+fc13f32c15ea3db5ec31cdc76c19c1ffd71590a2a0867e30674d9e0f71239f36e5afec527e3b67bd50c2c0ad98a96ea16e1306ed31f807a2b08bb72adf690974e8fc148b559731b0a2cb98b7ca2d610db0ea0c875891ec8e12be3ff4d16658596399332244d9a6468e501622caa053ca43ae0e7b9fcb9fd98b99d964478b93
+793ceefea54a96bdf2663c64eee639375f7d4ad7127f0f816ec8a7512b83b3cb83e5b40c7ab4fb1afd590008a522e548e39b64f5d31e42b15989e736f9b0e1e542b0b0acd5e1df5fb712d66e939fc2359f720587e24d7046f39ebeb464dbb353d19cc64ebbd2a3463064d9b4ab3b9b5de3d8805aa62cf477a18359c661a199
+0d27393a1dbbd7b38b4b56a13e9be9cac64b5edf3465db6f0773d65e86dae5dbe5b6dd4b579c532866fa94775ad1d992e20e6b828a68536a7baed097965941f92130d454a17f1740cdf1b2fb7537d1c02e1ffb06e30104bbbd7957c83a5bdd3af99819c0d2e95894fc463a6111532457c72e61bc801e1869d4175b2a6d031c
+82bd15c12fff28c31f766dd362ef74960e2ef41852b21d5b052bceab43de4d7501cd80d0ed60613cca8b875fada6d3746b8e6cea1f0d507d80a2f89bc42e75caa36da8f7095189f81c87fd24fd533e0528b942cccaca578b8481785edb2845063012ce78aa93afa6a8b39139b1cdac135d1a30a59a3130275f28ab74be35cf
+8fcf6cead29c4295bb3db61feadc8f6e5d333c81c133ad9c765f3f432cf31f0ad3a1806fd34f409dc6537c998ef3b63253012ccbe3edac76663602bedd2c28abfb1f3f883b7383ac09dc42802639ebb83db822802b53214963eb988e4d1fb430c86445d4cb24d2bb3d7fd7e191a62221a4e0c24d2af499655d79ee67d642aa
+49f63fd82a7cc170500f964c7c33165291bef814a1cc0362f9b36e733049e9c0030fb2679c75b5f4c36d7e7b4b86230f8ef88467f39b772b646344e0c3f010c3d1e0e32f58d91f2501f47184f5106ff250b431816d4de7c09b0355718cd7722e531cfd1cd922730b7f71db7b882fb52f495c241bf1cf4f0ec77a059757d2c9
+7a9fb187d48e997086c55bc2bd04a061db81985b6a37f721d7c55aebbc36b5fdf99558d07823f53b007858e38146a62e5ca25f100e0d26f644d2c5e5949afa8b03d322f626eef137a54ba8ba9937233509e3db69ef2ab64518e57ddad3cf3f230b7b889f613e9037c49ee18c0ed3fa60dbd4ffb887d08619711e2926f57f27
+1dbc112d9cb068f7346236d0b168e31728f3c005ed22beb18f0708c345c23582e86e4306c944e1b2183013dcf7ae4d72dd6705671f6566440ed19622d619822c643e98c7c361c78aa1cf4d216493854fb3ef4635c3c265fbd43c6096f3eb459cbc8474a44998492bdd286c14e328df8a73e421ff5ea5ba8003fdbba9cff842
+2e0a8e32f7ea5c60be79ba96d87242201c0e83cb1db0582c5e548acd0e5c79b0f6025521a22af244b7490a8aab533fae10d22655c08f65f36ff668811de6cbcd6912b88f1df605ee4ed92606e405d44338a781cf0c55b55e1c61dca12c5b6714e23963712a6f6cc39976d3cd3f5156b0af67d59fb1f394a0909eda39c97cf7
+e96cb1a12606dd36ba6c07c41b00f5528c20bbce7acebdffd14d298ba83dd3af61a1da522b4ee302a811df4878806395249ae13345294501640f8e5c9192b616a49d5d1bf30c48315b33def4ac77ad6291be2be111c8bceb45463d961c5da3a0dbc6e7618c7478781c84320bcc32ba0c725f599ea2fca47c9480617c03bb23
+9426619c2caab2547fc917066e9ad80ef1d0b365b859ebfe662c81fe19d3f7beb819c3c122a1b88d6df0d4afafef05ddf49cdc2e8802432d29eacfa8f3d7dfdbe3776179aba4dc7fa113b1a63bb6ba896516adf6a6ab2e09feee2b93a493f0e65f969d255e24f72671a3f76b27cd20a86d0438a0ddc70f7501973235d99949
+14224f86bb91bbe36c9a60fc43dc75ee6901914cd332e1d511c2167e748f2f8b2399f33d52782b6a587617d6eb0877ce02123b097af276d012eef72e8e785477cd37dd04a287a0d1f9d32ea95e12a30408dfe61efae276b3569aa9cc355b3cbed0b56e671fbdfcad47b3249ad477ce7e823669a8e0f317f1b9f8f9c5a7a787
+0d5d87e057747e2bb07378064e3b1fcf2cebf2ef865c1bb9fcb567c5c2d6ecbfdf9ec7805e4bf36e09f3ec3c4e696a2910d382497b1ea650aca0291965be3f893994626769aebfb03d19f9ca084d62d8453a637c4791211f9e4a4b9efdc6669e4b0328a33274cc3de6248132b01ea2ac56160497a19f1759057ecf9d0daf9f
+054f10d9203c2cb2f2d53d357ccc1fc400be9f20481f0e2c095e2df843d8d393521d3b2d6ffd8db68c1468e75f15c4378d07783a7d3a956b4f5a9698f368059e84f406cbf60a9157cd734e81ad0b07e8c67f96a408bb246d2d47f6bed1af8c9df5bc2263d9ce0418ca8e57ec7030bc820c1fdc8f8e0ef1703d3eaad05d19db
+e49d20a80b44e6b5fbe8f1dca5b53e7de7a0d699a64b35ba61546e8aefe6f608dcaf4ca7e202726d1f118773d4e161da4dc6867956439bfc4da4e1b4d45d98674c395d01be779a22c12f1b9f77628399acd7e9f9f100669d57aa992434523f8a1942dd69ea3b1090474c3b9e1482f53a9e0c9d43517165416327f98b6424b8
+1e37aa1dbf1d976c809a8fce1a713b625883b2233ae2e7949196d41785307e538bf1c2b1f1dcc71ac96d76bd34f26085752a616930940a2cd6fe5d1ea6599d6f3a92fa9272fbd899f4d6ae7d6173b933cbb95c49ed8ba27cbb20d639b692d9160d4d41543f504ff04ace06759403db8bd42abb37225b1b72c04a6367e2edd8
+aeaa29249bafb5353331f4cd42b373f45184c5bbedadc4b31ddb226c607e1e68f82070850194d31e9368bd2881e2a9fc7760378b44f7ade27aec4ba4a74de72d2753558ef5840b8f1ca013afb4eb9272ea0a6e9916817ab0ba9691a015e348fa3d500685ff999f91c74a9a72ed499b8efe4b8e5bebdb6bf6557dfc8fee44ea
+c6c9c94a28191c714b524c3c62eb285b0b93dc4162d13c1fd1c3ea2a6209566f2b8d8725ba60ee78231fc7f7d54b8f7095575453850fa30fc4f35ed7d13b624d9d4f1ed0c624ea561d8362ef397d31610e06fb18c2a64dbab31df2779af4134756f1e1a0de30f9bf9a12a3377e72717fcabb6de9e207ddc511eec03dae3f3b
+9d710b9c5df8eee0773ab5af103d383a83ff26f92d29702802d3dc7e33c53626d41c06459de547d9bfe8d62e4adc9aca779aac7048954a42a97de0c13aa3298f2d4a1bcf6c3b012f49ecb90fc37a17c16e35a81d04d5fdd3a8ebad6292a1cd5edf831a7d3ae35045c12e3e7ecf9fbe2331dd8b7650987da815f01f9e0dc261
+1fcee1b811987a752ebedd4857bf39c2688ebc2235c997ffc2e2aa833f132b61241c48b4b84c61ffd4fcd3cbf7b569e42624e02e80f471fb1fed83e9c6eafac8ea5bd0d33b033661bf1ac89a13056a21a42349a37bb094fc5097b306087a77cde8f9b85df6082d62938f539cacd3bb3eb690c729767712801c272ffd0bcede
+ae1f2dc6808322930287a020a2d843058e4b562cde75b0f37ac94fc9abf0cd7f8248a1f0fc70c3d58c21064018c3ee44272fd8d56c6527af50e47cda397ac4cd3bcc365fd8f441af41edc41fcf081f7e73f38f98872cf95f1915e66c43f06c68cce9868e69c570ac36a2bb4d818a46c985804fce150637749cde4495cb2620
+7dc942dbc2c929f80313b14d27327fba035214d915282d319d8e36e243632f71cf917ff964b97d26a00f793e452e64fd4aa229b40755011c6016984fb12375b74397f7ed824ebdf86648d9997ec708f30f985ef7f100fb309148eb12dcf8a6582c1a1cae6ada5e06acf0a562d79b78008575a547505182630390d4e0c4e1fd
+def9e529d96a92bb602962f54866a7b29107c949f1388013093c3e34e7ac8351249d90b30a60587cf4aa7411b1f526f991d72a631a2105307b12008283f5ee36baa88345d3859d821b03c097ded9df4122b0a4b294350fa3404179ff2daac414a973fc51fb4a250d320aae115ab384726b2e1b9096e26c864df7360b516cbc
+0afcdca17101fb4f65d0895aa2ab801a97e26cf024b656ee6785e1847cf2b135287987b9ac2efbb673883317ec4886551a892e83f1be0c61febfaec860736509d9e9b4c756e7a0b5ad5993266aa6d1ee11be77d8b90f3fe2e8a0f9917ab42d28609db7fa218000d840d7714a9fc30c41cf0a7b0b3e78f7ca7c907b289b5fef
+f4619e200ce56090a0de35544137c83aee3c6289f99fbaae9ad8ead6416206b1c03ec59062ddf5ed123b37e34948cd2b2ea8164b06be73d0d54cc98304d6432a3f6f3bf3f6d8ebbffdee3e47bd9bd22c4f9dbe42a926c09199a6b17db66b61c0593d766b7bf2aa63241384c0f32d61e020082118e08dac70f5034dafbde839
+db49b6826cf37832ac11829f2aebba2e06bcb179c2e6fa5b3a1a4976081469d50d64ab44e8e2f94764bf3c1a3454f057fd45ede47c9ebfc034cd07cb5d6eb2a27057af83d6b123402de65ee88fd55c30795270d122fade06b80cc4b237818085e62e2b8603638b910baa4e5f688cb31238568b3e6e307ced895a6684eb7fca
+bb54c91ea12e6a8d996868adae73cac1237425c00ca1c09a1f29bbc89e59fff8d2069916b51976c89aaa64bc58116e49d92bfc8140644210bcf4b3e785a2b6485ddd2157815fd425d421dc69e1b8f1ea1bb6fa6380b9e27fe67c792b05333acb05aa8f95323eae7ebb406ecf96cdd213231c943b02e3c3385df462e6c1b504
+6d58f94cdd30ed7747797ee142d44968ce450dd46352003b858e73e4d07b0f1d3fa872d2419a88be3889f87d7ba0d31052cfd4f0c6644f24dee7fab7c9bac7d8043a253c83d4fa4f6a5da82868e43064d50924cd155ec5751f44768e249c96e78bf703fee7b49c63cc57a8097125e11878e8410487860481077a950605a604
+a65c43e955eff1dcafbdb807afcc4d780b9cf39188e217698a0e09b761b3cac7bd578ec4bf5169b45a5d82506b019b93598d01521a00eba75863aba9e360fa24e90bb62a02f64bd9caf4339f787ed8f2a0e6be587e622caf7c9994336a16f96c1f1e82e932895100f49cba410bc594506b6142c2af6aba49dedfcb99e3bd23
+f6e1013c96f3163c55411a4b64ecdcfe9c718c931ddfe9599bcd6670e831f6d7c3451381a44e6c83827aa688e1be4e002ba0251555756bcdee6488229d4ff0b6462a38acd17990788293df3405b667a9466a954275bd1c148125fcb5623da03027a61ef99523cc99ba5718f25e3c124fab4f38ec79b5157739bcad24e069af
+bd59ef843125a07bd83745d9664f79b412b40ce53254308be8672f73f7f1e047107f5e385534c881479fff9d713d26f1286de459c153c6328ba44e526d3bbba2b6475799e84499195aec9da34be296b21002c2182f826bed70ded6c5234c13ed40653c88da4e2685afc022e22f6b33989d19d6cf06cb6025106e42892c2655
+24071a67147c254a904a10bd7abfe3eb13bf474ddd385753e537c97a5ff42fe7d6409eabfefda62e14e58fbe4e6a961b55475ee469f97cd04437b0fe4375a95a33730aad517b540173e42042e4bb38bce522f68138fd35cd036a986e36e9e5e9b2d2aa9f6fc2ba39816738104bc9d3d12843773f51a1e227e949bb7981bb16
+b1423ab3cc0dee9a025971722e0078f8e2a505dc93d8f5793ddc91683637c7892041a465be94741c335c7cb30f8d4a195c6fc350a99f665afb964248d63dc236fab7e201dc6400043213437147fce4f849f598fa21735aed8a5e42a8bfbd786137044fadbe0c41d982f312ffbefcf9341f6f1e8d18374d933fc20f2a5e82c7
+08e707763f9330014b7b6339c71d5f08041fe1500e268da79ac61e24bb4ffa3967242a8c688edec625ae14379ad5532b33be8d513db0405915da79141c23d0f46299e4e39fbcdd4704f9b618b1e73b8b618f1b9d53b31d34f11c91fd786331c0bce3a63575a616d949044fc241a125b4426f185c8cde39d68c0d094da11440
+76e777c9958e3e9db8e80afdc36f30f1596766bc7357c5bf4400f843038f0e9dcf43b0207227875e306b44bfa7e2c92288880e76ca80a24975be7a55bf27bfbedf0234c20e5f3a5dfa7cb174e4533d7f685f61dbf1ef23318537332896866275b60ebd8a036a1d01d9cfd8bc6e7814c18e928ff189405ae91707ba995b6a5e
+a0aecabd94029b34e09aca3adef0c9f48e362feb00caf969c5922a54003394abeac728b7d68f17b3ae58f6503b8697ca4668ff9df3f328d922f7d6e3a58172db6d1bf9a1dc110059e25bfb18829a0121c417420676bf90f37bf7e3c9eb7e3b65bab1e6484935ab1cd496932676a33c02829cc39bd386074c9639be07b4859b
+64af2b428c79c25ed460ccbee77725afae2119b1f9196cc30ecfae5a9effa104eb71689f2e0afa38ae1a5b08045886aab635e6a62646a1526890cc276b00828db6abfab88dc2f14ce5966dff518693813396d8d0f8cb1f437a800e5150b8fdec1d431f81ec7cddb4eadf22eb3e9c0116d36e175093391668d3befe49194bf7
+fd4dc5a27dec66c19d88bf40e0abab2297ac18e63daaff6cd571c717cfcd79e8c0811f4ba50d191d7b0b92bf93228b3a288cc363beb68a055520e8e1bad3b65b7c9acd753e11df768a763dbeb8df640a788dbd8659f44342cd17128ff47e1b372c95c562f1d31211ba6871c8a877ad39b4edbe382499b254b778d6c01720c4
+b86f8c3da6f212cc62ae297721212d9e033935ec7130c7a6f98bd28a8028c8cc5644dc06a1fddedbc0c6ca77370ac2f016025bc2f53663a7c83a55cd1d21fbdd983fcec08660c881ba1d01b2d2685eaa278213f71a58e07eb2892a0493cf269963854584f1c452d6762aaa05d482c75f61bd2d13952e3b04eb359d6204ce4f
+1abd87f33581b93305f67bc32fd92779ed3f95ef120fd44207fc47b3e8ad65f7ba4a22885b9d0d217bf34bc169b738abe0a2abb7a0d2465c95d6d16526937db61b8563af385706f1c2f970f13e321e7d8621edb9e444f2a3a9f46b2d9d17228d670e2a131e016672049161b837730cafc10617b0d20b562dc85b97516a64e2
+0a38952519dc5d8bd2827a8b8ab6555e2c86a8a3e07447e0bf8e0d393eae352435a70ad83f38bd657820e028c40e2c7267c91b9826f5210737b6999ce841410b526f8782c8816a612c8b9457fd19e41c9ce4972946738f6461d33302be7978e8bbf9aaad56f02ab4e8ec01364ceca2bfa62dacc60e7abd9fe72a55420f7c89
+a9a326b55d239a3070fc4c316cb852c7f28e4481236af2caa71ed3a8088a3e77e027f8b42d1bdd7e7334cf2ad3be330510ff3ab45f16cf114415a14e104c900e3b87afbdc3f0f3af28f25306c1416f314138da6e4585d16cab538c6255284c4d05520a1aa959b62d9d8b917b44997ad2abf563ed70ef00beab3bb9562839ae
+f7e4abb3dc9f5e5734b44bf7dcb257795891325bf746a9ced8ceeeff486769ebcfa27fac8a2353947b2bd378327dbfddba3a67a378099809b6c6fc5f4e18ffb8a7d3e1af912381dab3113ac87a24adbc08f1b6dc8076a29b88932918e8fcbe52b705daac632e176e6044ee7f4587d6d0370532c702c9dc92eb3ee8938c08e1
+e23a9e1ceefbd05dcc3f048ac631e38c6b46ace97e893ec455dffd1bb3873b1a85703126d7bf0a47f5e0633bd0e7dca7f174137cdd5508bd1c6493cb7b619f482c541ebe705f83c03719de967e083f1c9e3a4e357155a4b20553fec360ea773258ef477f8952c5172b10062958f72f2964f653ead7d3e1c4b1c9efb2bfc324
+ac2de310776b8cd5d910afa419c441ad7d239fe39f6179d20e0bb0db05f89ef02baaae6d53f39522fbc48e613aea450926d42560cb970b2d18c9ef992aa73843242fd5b3730ccb7da14e6dacd48cf0e08a22750ab9046034f494e4909c07b0e9de13794247f497e5a0e9c1354bbcbb71625f19a5ce5d94cf5af1ef5ca0feb1
+7c0a097882d41b7889a1e4da2476abf38521c490bdf845ea0e246da370a2f68029f4ba1ad7c183b442d63eaff498aa2b33604edb786030d033a37a251b09f55fa77b88ca7e77b0f9fa91e323049b344c82ce7d79acbeb379c4b23a8510e20566878268b2d835273cf5b36614528a4693960b27df4f0b93458dabca1badfd74
+0c380d30512e68713b88d193899de03552567267a9f99deac408fbb832258bdba1765bf12c0ab5e020ba228363170cda6aafbe8eaf50596aa41635d6a32dd60ae3ea3dc2d2850184fc2e9567e2d827c2509386b01a10d255e317a2b5d7354d325d52c542b3b3fc740c9872bced1b4833e7f2788e959847a002eececa271dbf
+fca11fb781880c82f5ab623456e8f70264de2a8ca5297ee960cedb48de05f41a66a5b4a60d427f281e71e19a5c2c176a004ba276f6e2fb8023227a8a46354938c656e0d1fc9b6d825584b43b73ab00f3b2b265af5a56208f8b8392cb954e207ee90e73782592cccf684d7d3a4982fa925195df7b21cebacee35227e9d58a84
+f6f035ceb665160084ba5dd53a2a1f5614a5830c28ad191886692067d5e2a505db188afc8e074a0c8d31c6a8726440f841c53a93f87f0ca724a6a7f4dcf166a376df218596050473e3eee63a9d0a1f40f9a59dc400dc6688d3fad7c7637ed6bacd16dbd80b27f4f8161d38c70f2f776519abca443e2ea6f6668080ffffc680
+81d96a16fe53a299cddc74f53169a10bf4c09613d88a6a12730e9728d00f1bd91efe8bf2331885589c047b1a94be3350d3afe43b35892c45c4d7dde587c1adbfe18afd376aab2ba652c512eed5ebf8f2da844fb30ac4c86dc0838f204847db7420deb9e059e185f968d134a4a7a6bfc09ab4b93e6e1cae167f6c984cc99b97
+c1feb59e31e3f5c87979ad351a5497554dcaa314aa4d35cd296d372e6f9344655cdac01a7c804e6aa229fb65684e7693dccdb7bdc018e9eb5d7c4eb739cde06ae9833ec2aa9d437e226e0adc91b6e0f15e848c36d7f61214daf57bc1bb10c51f8e2d99b0d8d04c68572da6b5ac1871911f18f024e80cd1c77e2b1596b221ac
+c4da476a4a54c91097d77393a51626b2ab5ebefc17e69c47c854b856a5b17402c55ad9c587509116eb49b3f7629b64ebd9d6a49fdb03318238de4a7a7351394225a80f28bba86937399ab6b1b02464958ebb832d3c1843713309ddbdda3afbcd1f2abdd6510075388585635cbdcfd6d3c59f71e90b287daaff8689d0a3266c
+f1470d27051f024eb406dd6861b2212026cb1cc188c309dc1659309c970b6316b066796844e605e606c7c050b548fcd702a7de57df2656ad727fa271f9ef79393c3fc8b2bbdc43214616c3db1587e317676750a3c0ab61b2160d55d18614e35276cbc77d0bcf0a5b14301dc7d6b5ca78876fcd00d843d6023b52fed7c390c6
+4c68850bca9f1623ff9508c312fe2d6e597850bebd23f705295e606651f021e1554810229fc9a98ed50c9a61bbc464ae8c5c6563a0ac09ba85a33f7ad555b51e59c32c7147b140822b9182d29521652ea64a22e40b2456c6044d28cc00f835e83d7560a146a7ca3d76911e72d01d69d0eb8a139c1fa62f69aee3c9642c08af
+6cba103bbfe56fc46451d775a826f54a949011924ea3ced9d739643c9ce3a45ce94998c69b6baaeb5c17e12119ddbeae483ede540c1912b153ee7522fe3f8bdfa76db94eba99005440ddd907c59aebf5cc76a7c5e1a60d40eb9e56a028c5293356a7bbe3cfb02350dfa177525c7637d885f3eced08dbbfbb365d1cca0a60db
+572d07e0a6829ce8ffe562c04553258b7ae406546b8d9a676d931f30355e17963a3f11eb4c9e190ce2c28347c164faeb9051a815d47c2986ba2cf3094caf2c5f64a2422f2222743c1700a21b79b1ffd8ce31a3589239af38be807dcdcd355c8e7cf3e8671764bb23031b5ada1acabb63928267cd26b2c9cacd1b4f4b0a71c9
+426161788e7ee7f32fb5520ab759938beefa4fcdd968bd53701ae9c27429b5d6e059342b9adef7b56b4c5eee2f46e0cd472d48f4b9d47d04dd0a390f88a2be3e275b65c3b7049431f94d850d63b2b2154105edb0527a4f712cf523b75aec52c4816683d59ecccb03a26e151114dae625f446a713af28d7d8173e4c44624ec3
+30f84446f46752fb18ca83e19392b1570739b4d02cef8427ae082b2cc31d8115bc18f2d71940437f77c1f98046b243b41f0ec5b8db811f1e8785fa163b58703e813161ea55c4ec7bd96206f318d2ca177d2d00df885cde32a2c589323bb40ff941da9726655daded4d7758dcca859606892ffbddb1889a4a0b2cca0470051a
+799292acbcf80ec3d459dc25208c73b0923bfa81e73e558c0a86c805bc450293ae9fd058a5f860074c6a200517a59c51582ef0c3ff883ab42cf184e7501919c9249e4cf3cee68a5df88e6c3d25f865df22ab77383427e73fc409cc5f24112251389c58d40dce86648cbb4abe34ca5aa1627202e281aa2261a37f6ab2e46856
+cb978aec861908094a865447eb1db7460287e2c4aade4853895eccbab40eeb427631087b3602286d2d2756894d74753afd3a82e61d33cb0cf748dc9321d7909abf4c362a3d00f1fb2bdb29ffe13427db353790f94629ff9756b2c3a4fdb544946d95d67f0b8e4253bc0272e7bdf1b84ea04aaab353a83bc2db356ef30f14d6
+ca7c6a280e8305a8874ac689d49c297c6a71fe61caa17ca8c1912701dced09cfc9436ec44c18b239c173e9f235e301a9aa2b23011d64a84a78d6f279e836257dee1dd4b6e44c92b06cd5a1a14a6dda6b7edaa4581203049333fa934279f0f4978f3c4508e78d348fd9f19ed2c0e7e39338b724ef376e351659dd0ced44defe
+1eae9b5e53a8b71726c08ba2660a50c5a2dfab6453d60d03662addd8aeac2453a1366b46f3d8133896382636aa4b401005a3fc9dd7722badea24dc1388fcb9ce23bf480621b513ee70e2d2cf1493a7a32343bf24cca354f6bda4ce719baae7d2563529f3026a6df7fcc843f735d1ada133f59f131053bce12b4d5f28bf87f9
+52034379a9759ea86ba5ae959d98408305b3c4e03142868ec2e9a7474a17d67964c115ab811f7a6b11425c1ca749effafcd6fe5e2cd8f709460902a2cb94111691d1f775142590fef526b3c7c12d0c525b7c95ac270a7375918c01b10bd5c0fb9479d4d4ec1cbbf11b893a6f78dbef8aa7e59cb014951015c89341c09e09a3
+e498cf9d17653bd0d93f4ff0457e499988e5109dde6b58d09491910869d7fd39d11a9d5223116b05bb766fcc9083f5f70a9d061d678c1655261b98b0697253b5e141a9d47d119384361241f3a1bbc7d80e6a454762e54400ba253cc72a37e27504731399a4d0b32316c32ca317bb22b4663f464dcbbe0bf81e1e0192c24365
+cca2cf7f329ea990a8657775a2bdea4773d2f61f4d0c75e3c5d85064ee3b042204b77feab4e3cfcb7877e8019c7a94c69e309c617dd1fe9faac9975e52cac77342e5fe156a5660abac1c3b4717779650c8d347322e8df24f47dbe690a78683bf67c01fff514f6317f8e52f78bfd780459818f32ece4124f16c6d43877e9d81
+e2061bbdcf8dc6aa52b9381528ea453ca9ff79a476a157cd2c5fd48f21421ae7d1447158ba806dffcc23cc37182a1ec042d8c9ccdc1457e579a1d07fb1ea4b76656e725a1cd26d675ba20ca83500ce9833da0c6125722f676c181164d442058ec5554c11ed6e4fdcbaba1241ff49bae20dce32e390bb0b50c2b815903a8e8a
+ffecc0676f6e5e86fdd36360040c9910faf0444df024d5c7bda00c59a4515f928c93d21a94ee872fe678059c8630bf7f81e9ae18c367456942f630c06cd0964b9684277cd2be69ec352ecfcdaf9b831dde441bc3ea50b8017590e68a79ba7eb827756e43d0ef9930cf498081a35546779536fba79bf3a27f05d32a905e7059
+f9f021026254d242c6660df02c95013c117c6d24ebe13841361d37bd46ae35e9666fe1d038ab598d9d9b390cb84f392160e25118164d28c6fd26ba993a34e9c43438f23f3a0ba3ca8bc64930ea374933d1e78303222529ce0e863b6b23e986bf56273f3fb30e0713e480e10db649efbaaf6e1639d350b248774b104e7faebc
+be52194905e54e132b02bcf999fa2467d0d35b913f81b23b6779ca937d80d225935e3c84bc5d0351789b514e08a6371a092a3745c36a6047173ee1c00f08acb111bb0d51ff4636fdd5278aa4c47980cf4782747aa0f5c48f95554977acd04e4bc95e9f3e57c04add8299fde93cf0ce05f03d5f795572892abf04d5e9350c9b
+d5ab7dfed8a30a55b73abcd420552acfe07a306333e4cee21e14eb790d3275e85af87db5ebdf952ce6a87fd1ff3413a7dc2ae3239f5ba51638e0ddc0e8bf8cbd73352856d0c71286c4670b24bc7e45f9e94afa897b24fb32dde0adad6edecfda7ed4ad98e2d3b3ab70fb48146dbbdbba0cd135c5eafe5a39edcf57ef873d52
+cf6924d2b449d199e3b902bbb475b7753ddd39f211a7fc6846b6d47203c4560a9b2304c86dc7a45dd5764d150ebcd4154e03410c453ee7e50b9156b7c1100534be5febc06046f1c2b7b28a17d1bc83a812ac100233b08daf42fe4130b7f650ba2e456f83c54b688f57fc4577dc2433aa2003dafa0390fd8d554e01b4863d64
+55e65dfdca016c9cc4df2749a736829211c192258e278f8e7b93089554647c545f50f5e7e2dd6addf75c20574c96f8182f102feead3f2fedeb26ac1dc75d93296d87c2983402551d21ec439ab0221a2c8be1f6ce0de9e44eef0a2e21f7471cc2f2ad9be8682b4f48e91aa07c49743225705e541b09015788e511ca78a1d537
+044e211b7b69d6c3f1e5d1489f9d909b08ad05a6488c79ab27578375b4ce7187646501dd31e0bcf7eefe884cb43ffff02dd9d0495f9c896bf2bedaa1fd88cf2f81a2626e6b9ff3640458b833ad44c6611695a9bd5ccbd6bb0f119d394b2ab32afb571a9cf3aa3119eb6b653d746dd90a8a79375474d96fc8bc274ebb15525f
+de953cb11a30556cc9c158f28d274a1b0bba86edcb16deccf8ceaad0e6e296296d3650eeb9e31977631147dc46b4ee8e98a8f2dd98dda6bc34160a90b0853aee24b31fb51bb9e59648d491708295e22c9428539deba079170f84a0956e8e6d85aac3218b2c0cb14d86af8512bfa0ee21b8dd8461716d539129fd604def7e0d
+64299308cda32c03bb63a5bae0465938d656fbbee6218080c3646853e30553b4b7e413be75334c607ade51b0111342419e48abf43a336fc56d27f1d826e3814376c7981dacc200a068fcd1bfa7e5466766fde52d26e23f05de090b134f6abc8e7891685670b646e3f08c5938c058a0d28463643895137745ef1cb9ec10d96c
+99deb3909b48b545d9f105e115e339543e058fef584a5eb28c465bce0972d57704db6b7a9a76deb1e0b09ef4102586e99c01f8e5b4ddb6871ee426e2b14464d4b0f9fb6efa1d26cefd389e7e3abe64f472a7b26cfd2d01e925e55d8e16b1a3f724cc03564f4b02a95c1159b9bbca97b698489861f971def07536dca84e9893
+9f49e1481e717384e4af2a3d8401434857c6afd424518f073a0c6611d0640b381c7ecfd17e1ffe8ffeeaf029991aa8b94814ad301cee7f9ab2f81471747d55c3bc61ba3de62827cab35b11c70f6dae3ecae2ac474b7cbfa5f39e382e979b63bd4a11de546c8be9b31773711b5e67913c18226f84643afa17b91d9b324a7330
+9a38ca8d98cb7f004bf1e9b587463cf9210a0a7ceed051573e312322712f5229a7a6d560c3503fa045a0682266b92c0136e0b3c29cbfd6fbd95c6c9c4be00480e892590bb12cc2240c98813283f65ed0886f781f520d36b037a7d08ca5513d4a90e4a883829999943f2a7fea006f074c898e7116176671691a2c95ae13f83e
+394c79c281dda817b542b762a39ee76e224af79c6a43776f09ec76604d3b4b240f0bad91e4d856e61011dfbd53c06141def0d1d0ec98123831c693cec547a0194ab274a7a2b9397b490f2dc1da0ec2d0c180cbed2ee5fe7e366070fffb3627eb8ef42eb9469828472769c2ad188584487254cd2af779be1f6730684cbfff9e
+e6c1b7bf5ac833e7fc34b7193f9d51296c0d719003471533da36f1130855177b7ed3e60760155c86377b20ab674b69e32365967e28703e3922b23a15b021091e07c0b75fa538090b235dd96be442c3baa1ea8add831b97d211c2ff5b3fe53f038a1c12144dcc8361c31ffbcbab2167a4f0e51da23642480214498125011a1d
+711771b41153fcf6b934c0c25c35d5dcd02db5349dd083518aaa14f32543ed076e9fd2ebf53d4e88892feca7b3a5189470b21d142b154d75e1ede154bdc78592ecb14d82c6715ba1624088c2b90357f3416c01b34397aaa942bab61df55396ec5ce23407d3dd3c2eda7f107a401017f232dfbd1b150f6c0ec3b93152c74e9d
+2591f3c6909f378b4947de867eba25f89d9e69de798b652103bad8bd49260f8492b622c282d635270144a12d58e0492713ed4609b1d609dfa57b9201939e9f18f524b019357f3cafd9f6c12679d8d9400475f66b93ce1135667370068a5b527dffad644143fe8741d56807e046368b91dd66e75a88f74637d0b5a59c04baab
+6dbf44b5b89e702e074d7dc6feffc48697a74797d773f4d8c960bb99344bd458751c4754cc2b4eab9c563b750098110697e586fd3b9c4bb33296e34de4ec1eb86d8974722e53559e301495d26c3197e65440582e5f54dccc5dad10a14cce792602c8c6c7c617f55a759981e358bd1d33e659d5c77cf30687e502126429171d
+da8c596be3395a78af1bd6cf2b643c2de81ba7e1e22078c91746a3bb40adf99553ed61c621e2b24387394f18a66d7caeb16daa0ffb60ad9b9d425090a9b6a5e0d035303b137fd254cd27733d8b67058685fb62e343f874a7941162fd5580cadad88c7608ac4487a0f14058a9196d884da3a1916d7079617213d5f89db244fc
+ab39c41bd7f51b18d9c9257b16ab12b8d921020105007a5b2d02421a34af52bcd2ddde0f344d50d90565119b889595dc8dbb37c9c9b8cfb965ba3839e735ff91f72374c1eeeab92d472733a3d6978840ed61465fe61979ba2379029ba59c50aef02892a39d8320113f019d32c34c27312089826ccc562fb970982fdd14de3b
+dfe77f5ae32d49c99adfd6978d6aa7fd7fa6071073f8f9bba55fbc95b54e7992b953da492bed8a5728d14393bab1f54e739de8c3025a5f8b61d171255e3517ef9e19314b8d107c6ad9d41f1e40ee4bde3dfb0efd4ab519007a77b0e023e08492a6de7155233d041d5cf7b7e9e82039906ddc523cb8810217bcc199925f31b5
+0fb6a8d47d3ebeb1560f5ede57d549b0763e0c67a40295b84e8ab7692d05c13989967e616a427dd96f4e077428125be951b10b1e5817cdd22bd232ff958c526d256a5670e3219e6d2a3ddeb6e1ab790176bada7032aeec3a9aabcc2ace9aeac918c01f337455ed11cb724e5e258d0628853eca184210dabb0c6ed6b95023be
+9057833399b78aa2aeff5dde3f0aaa2c2009f9efbc48eb0d9d4765dbf07b4663f228ed941f59a76d55fc9f67c07810748456b8e334e77e6d4f74277e9261d9ffc2da1cdd3128bf863691fce8cc48a100359b65666ba38069d3b29912546ea0a16e305db0d1545226c50628d4f6a08c408d64f2474eaccc41695dc2aef0d4bc
+683c40a3f0f94f9948d58efe7822a240e172491acdd6e8ca1b68f271ac6dfaf2e1705951485f15f8b9432b9a72e8c1bfbd0402a0e50bd3e71cbe8cf62503794ca877ebe9dbfbab545adaf15cc37a2a97d01449214036423409ff042a1dc07ad4882dd5a8d10b141153e451a4af2c2662bdc8a79061c9603b38e9b5ac67f5cd
+aacf5fcd6836a2de4d2ce94d9cfff1c2bbe4f98ada627d7f27b8d44b7f0e37393c19ee16038dd6346f5e7bf07e0cd51f3604732359109b8996146c40ece11bdb91c86f4b6e7e74d8d8918b625705ae75ff05bff1dc185fdbd897241b0b74d37591875cf7dffbd6da4a4fb3bb516e141f0f7ead76025343d328965e3315df4f
+56217f9f55afbe29bb5523ccf7ff4aa3f42889a5f3e85a7a22f0475aacc8c4fab17c4443ae7a72024749c5a40a5bf8c82b4f58a8c09f9a4ee0cba8f21f1e178e8232600a43e2ff86c61c5982227f95c93cee2d4674058d2127bf050fa113d478cd1485934eb9e37b55aeed7cd56e4db12cbebe8e666f679824c09ecf92aa2e
+09fc84edd85473d49de862a62f78ac63d87d53e61dbbe5b74932fe27e2b8fb73d60b154f8a456bd2f570e94ed58bd8201e460eef859d800c58c3b59d8cffc122d6a334d96f52cd88491ecaabbc25b414fc2b9efee56a0ba1c673151ff35de2d810dc1c7b0f9ec2c823a8b8d835210cdb55cb2e959533ee6b54dfda46722d85
+e3794c50c5c9dcf1dd618b2035e8bb8f0d99520a9864f2e96021aa1db1aab35f3e32e45c0bb457e5e117f313fcfe6938b9974207c10775f906eeffc4176fce43c79cc555edb26dbd02c54cd3df65838b6ce17a6604ac71036e882eca31325344fcde4371b928e47b55595bc299827908e617bb4b82e5bcd954c439c84fadfb
+0bfc9cb00ee1e5d41dac337699fa4c49b1a3d2214aada8a7dd63dfa83663660094d6d753493c1310da086f069ecac792e1e8598850af44f9719912be8463fed1d7ec2544245f70b1833d1af7114596ee3063e3ddaee634022a6fb39a0a2137681fc136ff3a21ff9d032089b9089a7dbcacf55945108f30607bab327a9de8c1
+31d1484c2463a8ec2e7072a2c0b14617e2bdbc332113a1f3c5d6f680af024929045070fd4d49f1d12015f8049a449835457b4b9eeebf04ed5f805020a428d607d7e4b8c8c406ef9faad69fcbed1ae04e4d69eaaff06b91d73b6aafa2f6d5378daccd9c6681dce4383e48501681ad611917f734b3d97174c2fc5c32bd3cc987
+172ac14aea7ed03f4ee707ccbfcc64b29d2909379bd95c96caa59217e8e33b6ac95e1218d6c3ebcdf6479c7f7fece2905e402a85df4430e44fe77e8d6ce4e4ada1031482c5e423dcc6c1a7b6dcf308b2f5a88e8c617acd02644ac99ce42beae85ab78473d01cf6a4830e8e83febacfad50fe475ad206654e567d26abf4766d
+cb8e75a9f62aaed4cb0d65d6af505e05dcb6f2e9b54f76f2f40f6dbc25b60d647d96133edeeb0673f74bcf1a3bda8c9c74f92f7f3f9026ee2b84ddf074d5b0d305d45253a56b33cd66b515e4a747c2ea5b53956044bdbab253d8a52fccaf0d6aa108b793840f6d0daccf8839204daaa69b3cb2cadfd063417168cbe3bebf55
+719fc878f02aaa2cdd1d32ee97747b5f5adc46d13d15e986360ac7991e65075b2cf47dfe8d35c9d47ae8d20cf5fa1b235852660722e87179910378bb654f214666338884eb2f0bb7524bc12dc072cbc192520c7c62a193b5649b3993578d799eae9cb034044e93b61f80946ec63ce375443d8054620fadb5d3c894f1e15b13
+7adcdc4de399976680989537b849876eeaa2b443433a4db069e42eeec7c596ed6bcb020dab6a476fd5aaf4c3c2a3bbf301b249f5a0a8bbdd54b328d13f6f930f4a0fee218be4f192a8854fd9ba70b99a30f1709988abf51cd282896a4542f5835ffa7b9188cbdcc381a9400911ec727fa7942d47405a469f09552f51a60179
+81a7fc216110b492662e23919146a0baee38a5526705a1434306031d4914041964763c55f4214b07a5a43bf6917f34a7b00cbd233ec93a2d4500a601b25a0b215ce4d6405e1aa53a459e6e4ecede606ec4b8ba535e27d7df3902f0517f6eeeead89841d1b32095348bb19178169740fbfc3cf2f8619efea7dcbf4b0f95a4ad
+15939056f09a9eb4f79783d82c2e18a5686eaed7ff7381bdfed64f2b364c0329745148b86911cde3e293f30ae05db48637bd22d0bd8e2fe5a236229213736068513b9c8e691f7b2a659495c81a6b70774140c628586d25588f3e6d16434ec06c058fba057b593151d10c869f55797d313e06afb3fb16d01c4c291058e7583d
+6398ea0cb269ac8d2aed9c9b14b5054cd1410d61f4aece806a6b3cb7d6db1394153b6e46d755c148b7f9a923db78a9ddd36df5dcdaa70d40c12fe125935765ce3297a24b50acc37cd98d05b49c141e19c71c55b9a807a0788b79d6b6fb3bbfc4312e76f50ca414895430419ada545ac3b632cb9aedfae267e75fba42d213d6
+50ea89afc6259499bf1ab0cc9cc47e8a323ceaa6018b1f14561f66e6e450be7b99ef54b39eed97b9674dd6ff5967b450f3ea40f26f222605a07c5235683b8709165a57324fb8b68b0b328f083505ed8f18a67be25c64c5c837fd218f85580d31bc4a88a296a07d0f8052f86944fceb8492ad0baf0bd911e927088853a01ff5
+a2fdbecccfc31abcbd7f50dd1a958512bdbb34a0df4c08fa597f1e736e3c118b2d1b3c79f199cb3adf45782c514134ae761e0b74bf3a1cb791212bd92b5d90a097425ee12161e0073ae64eb111bb2443fa5faa7b22aa1735a4eb83dfca07c7dd90aeb8fbc357ca7af634dbcb9ede0751e9196657ccecbfc8e5eacf760965d2
+ca09cf01259945f5fd92f5ccbe2f63bd939ee89f2eb4bf6ffee83a1d04b6fbe2676f5a266d06b7e9d762e79f280f3acced9672c9dde6aa50c68a4627c59abd96460a3839f5a7ef734c1021f4aad7a481911e71ed9f8c7fce0dde8f1d68fc7d2ce95947ac080378954246b8a09a1c53c11111323b1f04ffc08fc330ff65c590
+f5b186342c0618d617c9a9b3ad4a58a37fd8e2f96d8c7f8be066eaea8db5155607b6e0678b9f8c1d20100d4b1e5f8063f90484747f5ba080f40cc0ab075e5b6605a296c1effdd9a3db89b9c564fa2e5033737d084929ec3402e5dfb594b9c69e57e9aa53b12f242303ec7c3acfaffb3bd4a23718a5b4ccebb09e0c4c770a7c
+131233f6e402e1fa7f8f9fe3b8572a7fcf5074735c984e4d7d26ae626c609ffec1e1342df9cd6c2409b1c9dfb7945914ad4571bf97b6ccfbdb527f749f09c1ceaf3edb56f06e2bb4f75a99f35145fbaa2604f339a095e734dc504e3a017c1a69c0f545d61a0b2e5eb476e64ec60e7f5f101b6d1c2039c58a383b337d57b31e
+49bbf407c98f2cb09f45bbf07c9f6d43636f61f6fb9cc72b0a1e66665c3bfadc795b274b28c862fefbd8c9df6415494712f4d39b6c9e8b6840ff6a53d06c00b89fd41bb3155c38d873e9da1fdeb144c40bed42d56b7d9369f7bf4edfbb9a7335cf9cd8f9dd7d1cbd555eb8e0dfa95599d3e8cb39852de35f3fca0f6d1d24a9
+56f93f4fd1a6619d112f30822c0a7fe9c2c844c5bbd59b6fbd8a056d88d22af574c272a8b0be09d988d37472d4094585e837f36ab119aeb02b9d3b4d4454f19f755c41dd926a4856bfa3c2ba360f72ad13e8d18506e30a9b01b83deb9c89b09184dc68a2bd29c54ede5444c90fb369e0ca546255d1b25a97ddc37092ccaf79
+8a4df6ae1ab1f6fe5978f58ab0f12d3a18253a661a527db5e4bb6b68b35ab57f4d351b0c3143b6231ddd0ae6fc7781da577a421b15c9adcfa0b7a850be966de93ac1a1e7f0aadfb026d2d275c3d37604b2174dd3bb7982ec4430122462c21591313e0aa701a10e8f580712abc662a71fcae9baf937b67c16195c040f02aaf6
+de17db5b302c189eb0cd7dde487eb7a897a006c5506af24f65c42d639d82fb78499b8c6212e32e14079c420c86ef3f0acccddf7ae63921adcb7f64cc084e6aeaea1f5c0b2b67ff411b86c6e788da96c68bfa68c6093219b2d9d80f854cb946cd702d076ce093e5d2cb2943540a45d145c0e22c52a3dc69ff278a46751e1ba4
+db39a4c5246714fccf80a49a520d887a8f2e33f5e6dec99cb3d8b717b95ec797b7f7ba2691485154171352c4d8d348faaa50f72168a0a8ac4922761cdac42e9f97305e253730d6ce6bf2e72e5c88b30d86e9d0372bf385fd5864b4aa9b492333e0eb6d90e194fad705b9a9800239b53f3055eb976d6372431e9694c4e9b469
+6d49a3e4182f09e34758fb925efa2e6b89fc2e7b820e8ff605df9446a6960d099f014a2c541950a71aee75677a871c2d81ecc8654518e3e13226dd0e7ed9c6e0aaa7b2be4c2af2118bd4c3058e0ca8d6043eda24c69c3751524493a1787c20c3780c51230fad06300cd2d161906190ba01956b4aed0b0b2b1938d12bd12c3c
+6ebcb75fb6e0ce53dc25429733cb2bc11542715ddf9aed35302f942c9ac1bc0ea1ee18a4d1b09c32a7501c45a91881b60cea11ef61ddfe0cac4bc73caf3a8ef7a0fd5c8e6bcfbb81dc0adec060503519b151e1a7504a53cfe8f0704044c4cbf6a4c06eccc11f7aef476aaf8319488be982467bf55917a403726930d92a240d
+c3af32db6f83e06f3964f8b22329b7eab6c51b419ecacec0cb45e82eea7af08890a85df3dd8a078c94352cc9bb22de7cfbf06fdc59ce5198d62138d563c5ea959d6950ab0334134c3deb6b78babc9746ef3d66ada708edcc4f70d20252ea79b4c195e9710f558a60b0bbf28ff9d34a400a76ba580cbf8f2f2aea376a82d740
+22bb9ea003a3b5962948ccbfb92574683c45db36edf0376cd8a5a83c9032044e23f695d700014054ad65037a273fd8c876f229902e4b64d6f660d28e412276cad4971f1927d85f8c89e7c7afdb59fc341aa415e83d9fee5a0b9b2dba23b499a4593e564758333700aee0565348d981cdb87d394b5bd72eae7ce76c4208e044
+9cea3a959243051bb44583223bce68b50719a47f783c9705f461ff40f40de2d284bec99048f8b9558b5aa3bd55771eb45a04d94555e6fdf1be530c1d0d39b8e112704b41ce0d7f86540165aa9dfcfc6aac9e2c1f1adaf871a937aea0b5cb6ecdaf64042d33e4b8e67a8e27ab68946c23a69703eaa4cdf02977273b775e7cac
+1071ed89fe72282620873c5c8f501060b6a5a4478f43b19f63833372b5a45b0bb8ba292c97acc3ae6ea644c0bf01565c1a4324a6ef5420dc3b1058c186d5b373ef3cf7e5606b6fffdeebe23d36a634f3d5a87543d2e79b7c4d56c424fcfb06629fa126e6b5b7efa57b809cf83cf078b13ae067da2f9ca4e17c43c413cc4db0
+4865b15989d63481cd055414b4d35abec549c0b8d0ccc748d0b617481e44accf8136072a0a736a35f55467fb482d56d5c6115078eb2fdfa1b35d9262fe7efa40cbcffa8548463afc1bd47062a66598269b4af1a3c4ae0bf91f759b9dc51cc18e9205268436b29100e529424aec36e21b34c5b1a81480115a0fb0abc00bf73e
+b90761bd52b1253382752af2916ea7a938e26843ee420dcd820b5ae0c32f3a96c586e3ac08b55adaa81f8887410a7e4b00db81f2143c59074627753055bdc3c7a2e6146823e7dd932bd4e4ded28bc218ed865c9f8d7a69c760d00dbac27bc455c254d539066ea5551e2654afc675cfd2e17acab2123ab0c65e3e99521ca52f
+dcb7d5c044fdbd8871d447e395e1de2c9362e8eaef9065c1176a1995d70020318caed30d4edf4ab45986cd3e7cd64d57783523c3b892d27410a3d4bcad5c01a0ef6a92694c9a98b7c040b2783f9a1074d9e16fe6853af21d2ab3e985d904a0e04749565c956ec0ca450c67e6f826c4480c339b6b732909db08ab4550c0cd80
+5a585b9d3c52673bbe79f23e0083d1135030dea216596a2ca5e2f4feaf6783238197c21dfe92075a556a793d1aac9d2ebee27da1294665ea9b1edb71c15de79fec422c9d516511315742c97fd880f6717f303d058ff1ea803578291eecc227366d3361f08ac7ba33c47ff14739421098d38eb1da367104667607eb192cc561
+e8a80f2ce7726a65ed75f5f0c0b18bbb676cf82a468251d983352bd1a147134294762579018705cb98379c606754bf75149dd2e300aa5ecc8812edbac86a622cef1f51b8cd2b6cb8bdc081f730abbcb33091d4ac5a90d183e16278c69192247db4882da8c58b75dd93a77ce01fc76f55caadaa7017f91c6f4b2e2e7a3f0bb3
+f0c839f13d73cc8d8293bc981eb9c5866b9a3b1534c064384e1437023528fa6e6169775882522275040c3e373cda0c2743d078d7a04f5d29b622ff4e55c460909d18ed428078916824488bb49f197ed81d96b67cbb7f36f03039fd1d9bfc5b4bb7091c6584fa240d6d706d43f68c1643524cb0ce831ea345309574cab2ee1f
+bf1567a9760e4975b57af854ad3f8b95a76718a01d1a5fa977ee6f7d41db653f822953e52cffb8d914143b7cf599e4935b73426e8d55eb7f630d3c2fbf03358cd08fdf9ec23fc4b759455f5ad2936344c2cb4709cf5778bbe53c42a2fdff9df9494e08c26b099fd64e58f06b7b044283b34b220d6f223ca0765396c432a3bc
+662e21925679e63e149ea48b0a3591ff9d03a973b74fcf109ba19483eb66187a9556df04bfc88980079080025539219b580c7f7b6f85595f017729a426a4c670ef41ed5570c74b1d6dee3c1a20d6dd4117737519fe81496dbceb0cb6f54326786efd14eeae887cd226f7398a3e316d25f52d5f37b323828d416a50517b6e4a
+e7dcdebe12cd7ace92823aea4e3e99c39b2b45e978f3e3d4b68576f4a57b28b5c8e3a9925c600cf28170750cb89793543045690d32248b9ba3c7f592cabb34b6cb49fcb022bd128739dd758b432a5ef1bd01c110e6ba2fe7e90c8c3aceae45189eddac411090e34ea00b76969ec399e84948b8b317af70d4e8e429e46fbc8c
+ee535d79e72056f14fdf84bdd95fb6f1418ec8cf97b48880f7f91ff7e7d12f1988d8d17d70176643d880a2ce377d27f9efcd971d19dfa6b8f17ab7bc4ef1a90192c5d9a21b4bda44adb6b2e57933a60d2f7f44679ab7f59f86530aac0813920c24baa47e3a8cc1e6e2cb49d4968668564624e310230851723e309660ef3ded
+dca8cb501c6ba2fe14b086d96344fddeb0e209b7877d7bd5d4fe878cb6082de69d5d5f6d516a06932aaa40411633b4b7e3feb851f94394845c661074094cecda80d302d2a5a7e9cb683b9c34fc4cec21092322933fd6bdb6835282ad8e20e0c46ef3601704b4e0153fe1a08d08c4846dcc8d77fa464b899b7d3c06be15dd62
+7dea14d40c447fdc6f80a18a1264c480895d8b03d8e660366cf34e526451f0146bfbd5b34d8f85a1597f298ada965187780d0d2f280889b50c00d18e4ea710c1d03b361d0a7b4b9a8d4725dd9d92a40f8b817f7dd7257f2d15795688d36ccaa4c5ca2758acda97542f24232bb30b92d4f4992d788c6904e848b5ffd60d3e77
+ded7ea6165f84978c879f8f453710bbb5d19198b38c563cf9670d91cff10d6d381172febce3335bd186995e3673e8920fa73b43cb5fe34d301ab247e9fd7f795f67b2805947ac022cfda235665598aaf238b887cf84fa4cbc8214fb930166fcfc30a921c1f123338101d1d1679ecb7bb3b1e51e00dafa82bb986f9f61406c9
+b571aeb79066a84cdcd6cdcfd70d98bf53799a1a1269a888ba4c24e470840a498f101764f5d92a5d6f575894bc6be6527ea89f2b0e387251c9c8a34af1fb6478f49a482de89dfb5215fd77bcd1dd94ebb068b062a9992a4108f3f1ebf313440394f09fb2715d95c9e995c157330702fcac08a1366d675630eb6bb8402f8327
+e54a8022b1409e5594c3649ff14443058e5a0ddccb421ffd1697979a900d924be3c6f7568483802f119da1686738079b96e3d6aa432f9c2eb233af9d8c0adf1c257da8d5b7ee0388e51817fe50b0d7a5f9dd8649c3f8283ff52034f2e6828436b9b29876d9ecb6fa0a3cb8f861380e482bf56dffa994f7225d3d1dc03b667f
+a65ee3a1298b8ff5f5315abef5de514b3f58cd2b83c28aab17f8581d146fbf9e248f4eb056f01ec41e689739ac72d6f055382420743fbb279a1f855121511cd17971580ea4b1a809df10ecec464444acafc6e7e2d96014198ed9bf3a891c61d71db5b00d451550adda9c225aac412be9aa65dbb1539c8918117458307cf0e3
+3a50d04720b30c752bab5774028dec340a53c9b9ccd62d6ecb9142fd0f598a4cf4a0c26c8d5f7e5ec8bb283d13201a17b449cfd95405b1d3b8860aad3796fab1e3a3a94805013bf17764cc230a97428bafd855b045fb04095783a84908670a6dab743a0d3318270dde32fe787fb352932e219cad6e02b6072b2e0f69949313
+c12f95a256c71ae06d285756dac443fa7a6e6332f640e48fae5948b4528a1aa9947825c8ee43ca95b59b0eace71574c07dacd10c01916fa61e3c4904b5baf81ddaf8157ed27600b1f547efe0b17478a90c4b41f139a427e06a4afdaea2d49fc65769bef1b1a31d789de62f6f657eb1819cc684018018b1bbc0e050c0f4d074
+f176760a6a834dbe624c63951e6977b09bb28c7f928c787b01ae8101b77f022617e010e2a13e137468a7dee42d2534eeddcf7b5f377f621e3e653f98a964da7f375991b063ae81bd4586b89a5559bccf1e9deb68966857375a3f312fb7f595d5f1cef91ae58bae549a5e054b4c247bef7bfd3b829124e3e39b6993c9f168e8
+65e7dea0b0063052efbbb22b01ed459cd09770b71ece09a6a115667d9e86028ce21c696ef46920c230f478ff62a4fadd93bd3dc09e9436141650b6251e01259fcc48800c883665b7ed6abe106ac781f96f5913154eadf17a95fe937ab883b7119c03ed1b77210646c088c0c569c73398ecda80aafea7a07dcce9e4b4119859
+336ab79ddb8aa826afe882b6ac8549042726aaeb294081568aa220e6b264ec8333f1363a848e965c913c860d8f468b57b2e963a42f28cbf4871ac8419e297b4bea4ebbb9663ffa1fe6159250a214c88258756d90c83747e84ba9555511d02adb9bd5be7910763cc502509a2c0909ae5adb592ad760dadc9b5cabd6b5425e6a
+dfca15a0904ed052af61e409d77976009a5b9bc2a262cfce4ea086857ec043c20c8129e20e5649c838895aec54af9d0bf4dc6c464d9b6b67b24667e6b36e699e135a92a51bfa85f8c7e530a50641582ce89baa2d8596664e83d2d52f55618f0303d589b91ddadda7b87fdfe331a88a7dd29f47f00ed3bf3bcc8021cb63c90a
+802dd8dfc62104c58df37b0270ba95037b82402a3ecb6898f1474bf51b91f97c420e0c517f03b61e3b6544856c4bb4c5e426e167e314b4f77323125794f0786ca00081ae0345ef0075ad9a454ec3b38add9ef11c2f31fcaad866f7cd5cb6d20d07b514795dbdc89f77a00ab8af90634a3cb8d31bce450e8ce5ef362bda0b3f
+cb25aa983c21fd82a4ee68a45fa2e5c1483fd27e02455142371614b5633e5aa22b2dcf4607ec925d60a461c8598a8dd4f66f7d8f274f11ef129373624add11a097334630e43873a9eb99ac8495b0dc83dc20d2756892ae42b6730f228ed47b7672cbae329052454b1e7e0febb380adc51ba89d0743c908c263f1b4b60e4b7f
+4844cc8d24c342b8fca2be5395ede85f872bf99f71d9289a721719b48eecc37d16e512cf94e30270e592d2b9ea12db08607f1c3033b0bd0cb65a045466a8e454e2d0b1d619b6767ea791a5022f7caa72f9568f3244f47b38c2f3ce4ba191c09cfaed4d6777c6c3fb54e1b45f272e3cda7c94fa8a23da81061880beb0925e01
+622d6a4d1ab1d637a0e35a27ed1ae46d4501d511b3e0616e7f4f791b9fa8725d194aed5b0496c00a7c87f376fc5befcd54375d96c8907c58ab707c6c004a5d263d22ca106d6744d8b9af3fecdb292941d00646ec96c9e9b4c75eb7b2c636d5a9eaa7e209ed2f2608bd14f54a9f313c7551ee688489699f4f523d427fe02797
+481e69dc8063dffbec8f76136a32dbb93ff555f631e54a21ce87d2751333c1b5059265c8715229a5fe02fa731ae37a5b7dd0142f353b4434cb1e693b0119bd31c7ca7d211703bc1df0bcadc6a33ae167889d8d6fe2a22884766546911956febdc6661ec3ffc59b4fcd0fa7c3b0775887f251f919a35f941aa56488dc98dc62
+5ef65019913809e33e5abda90d4fe37120a4da79d61e3676cdeb6f895bc46e012228bb306beef82e2e6ad40ee1da4cd8dc5919e626c31c8a3e6754422f35770fee9659cb742cf8f7642362fe2bb9752bf15158d6d5c67e42b617050818d1709629475ba093335c2687f3cf90a04805af3528211dfa3c9ac93ccfd78cf82abb
+21c8b717c5bbe37d6741acf7b2c17fe0ff1ea23f9a538f0aa76d89bea204b5d054f336551779300e51faddb9ef11b680d21a7430512b5ffc9ebe6d684b3bc9cda6025e9ac6460c51f374e36d4c35522eb5176697c2e03c9d213e12ec32f1b7187dfb4066c3ca80ceee0923c01075fc1c9862a206b45ba3021bd7f4147fd0f6
+bccd893602d07fde9976e33be17bec186af2870e312625f9832364613345263fb4d98813b39dee77cccca0410613f7a9f538a70131245f6d1289ff2002bd21994253d5f1c58180c1e8a2b8fa5fca661260043c7a9d5d8a525bddd960cc9e158d6cd58e51e9053800941fc906a4bb969f096196a48c100b7378afcd56372f17
+aa8deb5c891ae09bd79af8b6453622b2697a84d494064acfe74e09cee528dfe3b218b96f0beec9d41b53f6e648705ccccfaaf72eb00028edf3d4fb0fe4c7633bb93999e2fcfae53ff072468a8ada44e0090e7dc3b5dd4fa284a936e72e2f9fc600ef23e24364f2c17ae8ad548b4e19ce7082be7439d9e948f31b939d0cbca5
+21a24ef72cec3eae0b3bf708fd3313c5a60aa5d60defc56eea51508fdf5c02a366d76699ff03d5e86f3451313cee71c3d7413c441ce9f00b2bc5959e0e2dc4e5288caf3cadf7f4af729471acc283d5db5cc63dd26a6389508784c7320b6c5f0e48e8978070cbf418edb7ba5b84a28aac19b345ce4c50a1f066413c24b5df9c
+1fa9d26d73749c1af1af0eecb0d7549820cc7d3796f15e98e1a9ec2f03dc864f6e57a3e7c6e714e170a5aeacdf02a02279fd4c68b683c83192ecd3b459775c81acb661689e65542e5466a9524a03774a20547758d5cf86daac6b0fb47b4eb0ec9d007645ed2a3a1282583789c5c615b32affc5085561091317cf53e64d7d9a
+688f5c61608b042ce2902af5cf42c0799e35aaef0a7b2da4453135a8b08d9d051ed73aa1b64388c8469242ad2fe61154d3715b4aea1cc9c055824c28a3aa05cec976484569b3086b43e22e7d656bb263f5402c8d6509f8e165589098638b4eb466b85026521d70bfa96f1890ad481d2f12ca27fcb75ad53138a430232f5d03
+b68024be7d4063a26fb5812606d295577a1cc0d642536882b16d70c95a69027a8ebea67c2ed63fa51e5f2687e35337eb6afdf9ff763d6b7155d5616d1f66df53f264ee1ceb52143cb481aff34aad961beb6a466f011a97906f7235ac1482b59caf4f35bf10c106a17849b9eab63dee84e84389ca872f0c55f9c88122b6d6f0
+c758d0dbb717bf7c66b04db20b2ba106bb7b51a01f4f60a45431157c3767fbf164604167583f3ebffa0d874d78e54e673d922091584593f45c0653eec563a7115b497984ade01c733126c968a156d562f14b9d1bc3555565f84af0cbf9b67d390d1eea546bf8f53abce45dcb31de4e15aecb10c71437efc777537e89c2d906
+249d55ac4d17fe2346b1b68a1696953fa4484d0408e2c8ca96d0b6a04bf78cdf672d99c3d8697a6c388c31bba5f487d68d516e0f5f9d0f71f7d0c12d9030c7440f3f8219d1fce3cd87f1ab5a2ab38288b99f98253a648a350bd78bef72ca7f334c1e92a2cf4f274827648efe4d4c986d6b28683878990269e0d695cc93a18c
+7f8f64c4a1a89e4568e43c8e0118bc039c271146e047511ea911a4afe7e01885f69d310c37d0ba5257f0d1a025dc9dc32d23c9580a0ee224ed267bfd6501907720b19126f43b5844267e73aa9ff473382388810eb339c7ab6766fc56ccf74caa2a7c0d66294a6c5cb210fcfb6232584cf7016c3328c54295ede965bf88a6e5
+e0cc3d5bb9e023da53ceaed73ab6053f58f0c31258a1b74c90d2402dbc638e4f7e235c9a81c91adbe55f2e4f9cf8de445a6fcf0c7f4d33cf5e7eb89fb1fe6bf6e8aaaa3cba72b90965807ec54d18617b0af0bb4a1308aac8e957b52e5d395f0831f2906557f1ece3c17063cd73e1c31c50f2e2f81aae3412be4fa3c08164f4
+d8803936644a984eced76fc2fd3eb150d8f5792bb61351b84d59b9d01b32391848c87932d99074424d0824db25a0c994646c66115f9c47ee44477893342ae1a7b7031ce6d859470e583b8c75e71f34463ea780c87c50db3623b344013bbb98fc8172fe9018487921ed239a9bcb44acfa7f8a69fbcb6131f883be0483fdaf75
+6bc76e3eb32e3b353272e9d8187398ae8114e6874319adecb93bc38f2f8c1aa0e10ee71d69d64f3a149a7ec6a80663d80fa5e2253df2b2b4489713f10c337ef9d480854742234e6b715daebea54b2719546999fa791dcaf99c162962a488a0b54de92543bdd0dc09ca49ed58afb252476e3933cace812e910ddf8d88ff4a77
+292928b547a23ac37e2fdcf1595f6183c6b69b5fcb4af16ee950750819842d44457a4ecfa9b0401c914116ad58d5b73a4573d22a029c3693b6ecb62e13d7e788181facbfb7ca5dae15be9386758149d49a3565af847ce37e8b9f4f2b1c9f3da84b4c6fe37d03479da226e7feaa71fb1ea7b6ac7fa1ded0f474337888f6df18
+1f2adb07179da391f95b5663712ed86bcceae06626b53408b89a00e9ab7d97866bec9f47fc4be2885d7c5757438a886866500f803d0e228ee3e5f83287415814e0525b5c12ccf748b34fa769bf76001fbcc764bdcaef33f75a2fb1a064f9893842385111a6116879c29686939c8682071adbb78c6f7c28e57ffae6568419e2
+6b58505a631092c46b49a64951e05d0be79d2034598f03587a322c214c064413810072f4ba8cb847c9b1a6fef06a55a2dc915edff4308e911cdb1f1d09ccf9be8481a014670dd438b17773d8cfa065bb84aaeb476a5467905da4980b7a1c9311fdea5b6a627977041bf74aaa1bd0b239455118899f53291a0c0e4b3c8d0d58
+f01ac3c7fac9530025720609865d9f242573414f23a4c184884cadabfe4b5409e7ca3e607a1ea0868217e77f404570388cc484df144649a0504abd9e8c06ef4e8fe3ca6863842bebff55fff6751dd3c17e0083b9eaa3bc6e5ca60fd81f82fd2b2a662563a6dbce2cedc61d270ee9c96b543226f900e720f0c60b784b258c9e
+5499f664312b77d1e4eb6d92709c306f796e7027228be42b5b900e414736aa94c8a2f9b8a9c5099751b720a0b1417ded6fcf1d4e091aa8c3e474b7b111b1e51c6caf82c8af141d425e65475af041335ef8cdb22c4816e0518759982776fbd91378a2c98eecdc23d36ebb93a6af735e063f9f0698ca7a24a098b9fea98f0c71
+c8abd33b6df1bc8cf2c1f387aa6480c32b978b31a8e72fa9724f7ffa07dbcd1058da143c6110ae8626d427f1efc6bf7e61d98c79b860e468aa22c5dbad1db9d6c81c4cd6c2c0ffdd78ec68b23eb64031b17725b6d59176340fcd113cb6af9ad9825851c82dac499f01669f541364a978ecbc8f0596b218accb1b4fa860130a
+2cc6cc108b71d54b78092469172096c9d3d81b502f747355cbacc6747573b002da8d63a30bb08be6565e77e6f8de66aef8c388ba228022bb054d0c6bde488fedbde7bc556e29ac4f6c3335597f5379ebfd24c3e36cde88b49a4e72ac4980da7c17a6492b4193c04827e3bfe7795107e25df2121aaed1886060640777d8fd46
+dafa1d4ebe76d5d7b45f8a6a907e69cc66d55c38e7a3071e67ad47fa326c3a6efadf5aafbb5b76eb4658ad84d52d563cd5e53a4558085af5005ad11036c67f96680d882d24a611fea4cde2fd25cf6c925a94071f4bf6ff3322f8129d8660a73328b20287bc2e80157fcb64990b3a2ee994ea93b4666d2968b9624902e9366a
+c1d297b2b1c71b2a03c61121bd42e8513960ca64d54aac073b72b965b3d20f3fd355d21317eb15698c8a8b9a4f84f8d61040ab20b90bb6c82645f7d261c825e874f25a3dcb1f10b4db4bd43abab67b4b7061f419cb350c923208e8ca8c65398a7c7928209fc6abf82d08c913f9373fb5faeff071e79ff75fb7937e5e276195
+8b37f6b0c6c17462fbcc88ddf758bdf1fd344e36cd4d6947a6ba2cc35c0a9939d36cce7683e58641eef683ea29b30e311f128f695950be5e83d892a004678ebde3c8f8d8d8916a7f12d65ef50df425196285b0be8ff4b8b939342dbd843e3cab919212178e2fc5c3627a225e41274485dc7f28e4642410382a5c92438cb4e3
+2ddc7263e3afbb76362d6e9542504dc427950df6a80336d76165d5b93774319dd6428f3dd5ce365801b75252ac934856cf75c69f9dcdae1209c6c2cfae1f139911d92d0f154a5d5f21c00c0cde4ba030af503e424827c1b7057399e5f1503d170242cb3bffa736f5f4966fbeb8c9333fcdcb91486800f6d13462bdceca6282
+45abddbb1cece414f8107ce640512c1360a01e8784a14155ffa9be5ba9422312bf08ee622683841bb42f561188876d072be23fb02646e63161119f01a691faf0655e6875928f12d461d352ec5018ea94678f74a18bf610d3080f0264f31b6ab50741493db8c0805037c7308954b2657b5d3c2f6f982a8a86537cbfd551cb4c
+4c1bddc2ecaf4b800084462464c52380b756fe9d323ac82868f0b476843b6b12cf7888d7e45be3fe8ab2168d0a4b9cf1a9c82d2c53d94097dcc8a9c95ba808757b8ad42bdf4f525419a27d16619e30ff31be2b5464165507bf1be59a66fa379db86d16ce98c6a95e3d27825fa01c90d16c88ff86755cbbac54579b637e94b1
+e8db989c65b8b4af9daf4e71d15f75aa65be4e79a9440a62e7021bd412ff18cbba097a341526d66eb035eae1a541db3b21f5cbbc4b8cb2c4b6f0e5e45e0927811242e0f4d2863be6933bdbb87179f354d99e899e3e1d010085c50c59d23653bdf35e881a9ae4352f176e9938931d724d7e5e795ef8e8cd2b47cc8f9eb253c9
+02591b57fb345d48ae00d8cd5d8fdd82db9b92ccbb66d9b4f89d5133abec9e5a933f89452426cae8c2bb4984e64f6790f410cc4cc113ce680fbd43cab83886c2a31ede57811e61da4dc51c0e9d965f36a45983041057252632fe7e38a20ba5fc66bfb02349a1321667c6a07f6fef33a97a8e2e9f3e3348c8fc32f230fc2473
+feb6169e1448deaf125ba0e0742830bcb698b1f992d1f3a07a6bc286a52aa03e65aa72b4ac989951e8dfa34c6cd1984f180f7175ed611dc5ab87303c7a2961de9bb50dfd1a789b6c048b3bff4a36cc8756007ad771d9c09d6ea718a6fc42618f94e619332eec80de01d30bb169318a19e44fb6852097238d221d4102f76285
+cc3df433b21150c0f400537aa52056aea9cb5f8030c5e5b49d8210753f5926f6d85ef9006b3ebdc4f66f4b23270edc9663303a27abc38ef56020b3fdc01716585747456c9cac8987305fee9786bf59170f4241b38c1ad0d4294b84cea35b015bf52a0a73f142d278df4f1011c8696c38a2fc0867240a5190a5730a582874f9
+fe454c49bd989be6952ac9bfd7d219d718d2d08547defb57e793e339bfa32a3e44425a365776a1df8e568d1b838855e826f7822427d99a82f19bcb8aa14b5ecb6570fa85871c10e59c10074793aec3e0e22bc98d709780758687e5cb818aa59f3f759401c7a5ed92298d5f59b74f6b184eea9b9168c908609e1d8245e44a33
+727679c49f9ee78371843ff1105bcd8ab15a1bb52926bbe0f81dcf9666299bb89f3237e60077c5bb2fcff808839b3be0991161f62794929f9aeb5e5459e97e24496f2e1af05000a6d12957ffadfde6d6d2bc67404f04faec739caabc9fc004ecb08937af3a110e3d341c7d865303c3741a74e02c937403137a4f37cdbbbca9
+24c1252efabdb73adddc933bfb6d7eee605e79262f98d747d4f5e62c0ead33d2778c1559889ed63125ef5ba53b6cea71e9ee844101eefdc455c2d11dc6d1252670124a168c55fd43aedec416ed01856344966e70c89f6a6f372eeee25884bf84d52d563cd5e53a4558095906115b7b6e942ec369d377d18000da1dbe1cc4be
+ad068874d9222d0d3a3f266639ac0466fc5f6a672f176640b42b761954ad82a7574fb389d0ca69c0715c30e72b37d7178dc2b00092c0bb689b400e91c7433951133627bd61b23221c6deb012414d4c3550a061f6c37515a0f23c54e46aadcb641c5d8bed81f511c801c7e13b54398ef8a2e5df59f82df5dd075349fba603ff
+0271319f79f573bcee0ec9f545e49f9b083b8d61c33c55f2286dcaf20fcd22a7bc94e8bc193707ec31eeab18a57c5619d815f1bb17860c1f8732465a574a668e35f47b1d2a805878309f59f5b64a5217b399215a0076384ba874beafb8135caea2185ade836552d1495389b0ec6f230272a507ebf00f33c4ca1c5b85a395ae
+5b924065aecaa169085c2864ad4329bc054731a8b510e814443d091027fdd6c35e100d46967a2fb9f2a6018a3e9a973dc91fd9e8741bf4f6d1f4ccf29f35aa37ba439587f04ed97e0bd53624028156bc5ae38bc65325143672f08b41ef2196e2d47a60fc778332054765a60bcbda40ef1a192faff26a811d65a729325db934
+d95838e444b51fe5d2780eeae5fe444028f9e291c637aa64e988402eb2e7d4d6d32925f93d18eab3ade01ecb66fa8eb298202a94c9e3f24024030dd162897b08c66756bf2cd92f3fdc294012500bd2383313376ba6e559593f9ba2437d420c173fb60b3274c4ccd091ca96d276d63435563fea10663753c3bb859c07a8b8b5
+d60b723aba33dad8d1926092dddae3e31010acc1d69900c2cc66a029a91e10e018b3cbaabd813eb1202714b1f221dbcd735fdd75ad90d32036197a8f7684dee75171d9eafb518dfcb3870cac88eae93b509302f3da384ab4250de9ae074495135cacda458861b8478d7bae74bed7b035cb268c04ae5488ab9fb86d839b69f1
+38705abbf82f01b0f7139b976bdc09f80a9cf584725a39b2735415ee4a1cacaa3da06e242d339382ec35949be25dd673a2c62995df7d0ac79a45bde93b91f400821eabcd3aa1c5534d3f8e79770de25c76e28460c65162756e55b9f3bb137c74710722aa0468598a3cb7afebb1dbfe77cad22e9654f93790f94629e0d4882b
+24b79ee955fec15120b0f2cd29f59ca860ea833e7023ab716d3a15e43fc5130ac41161bc94fa860d077964e589210ee8e383e3fc2222ce1486f0b52634f6a7f003b7a1a37f1ed3bfc0ff5336c36a3ab2910f513b98cc1df9acc3c5d0585245e605cf2ddeb6b07bb822d5f72796b17ff35e822e523dd24a6069ef8baf345175
+d46225f77a129154e9dc985cc74238d307a4d8272aa2ff736c428e1a3ff734badbeebaf7114d1afe2c7dcf390eabcc5d54686b1a3ddca593eac4b9a5737a14e6f16cc20c4986070da4b9431d8efb42f6003792044b5984073be785906d74ba0bbfb2a19bc1d465d1024af069c2e6092628ec67feb230f288829b8b83633925
+b9242a35a44fb2f946795c125917c9554063cb6e740b7e6d56ed4e070861dffecf723a2ca1dac1ed59a642cc55afb63a54e41fc27ed61ce27ba656107e25fbb53d779201e62034a95a07618666940e42357e342dfdfed3c38d448b9f0f818098ba08dbb645c85e0107c1d4912ac2a3445fadf63731721aec26fd81bcc7859e
+1058c9dd448f5eadef0a47915598bf58db577f172c462ee5ec69d3b1e3e8dbee0d46b5196c36dac3140889b89a8f53b11b92caf302f71a62a5c3909806ae315866f4ebe2c05773898697443ace1a3757a79f96b713dca1ec16e053d11e6ed5f27b1ac42a877f32fd2eecda6e44e04808bf109b777702c6c3b9d10c06ca4210
+5f15a31995a472a811348b3f68671ac7760af3b5b9eca0d80f3a3cba3fc4f008cae55b377f7ab315dbe2338ebc38b165ad38d4ac6aaea58f46a0882defb5aa4fce2c2c13749a5115bf210197ed59107f58be06cf234b82dbb7ceeb9da3c8b7a1f055f3009dd620c6a43eba73d1b21b5435d5389274dfd82460cf63a26a2c54
+8d75a402913c812aa2974ce87850a4560c24ddeef1ec53a1ea9356ab26b148a6aa4e9e30c3fd94effb017d41e5a1c9b11b1e92d25874a17239f0ebfb8e131a7465b09946d9ca665a78d940f0d367e73b18768809eeda4c4365230cce7ffee67d5e850ca8754c97bd579ac36c6605f2121995b6f0d1d212fece438ade5d7525
+56024bcc58acaa3338299c419d99d3ece454ca23064139d89dd65937e12eee7d859fd6bbaeb697fb074015e5e10719b3aa0de6e02e38425e9970403bd58286dd868063efc25d08418a9856b8649ce4a9e7d7d7c5510ca5858f3faa4387d4bb11177772747a78e928bb36b3879b2ef749f9b7a831ce5761ef228e660eb8aeb1
+f0ae24433d9af3a555afc08c3dfbdc9f74f1db0cd64b8101453a2944364d902fef71d1cac0f97515f39601157dbf76a310bd8bf13c4690e85bcf962507848a27be29cb7ff0e0fc7230b141f8558d06a194c5e799fc0e803a8b9bd5f9558bdfc955d2146ea5ef9f05759590437cf0571f942a71e9643ef081de4c80a096ca0f
+bb5a234109311865c88bff1eccd8be1dc394d9f099a8600c3e1d850568d2b54fc758d88b6af9e960a18162cd793a8de95fd0a58392e26e6cd662c9cc1a12589a8e0bfa1df1f466c9c575d7b7868d0d3ba22782a6a0f63a50f03d10e606749377e6672f606e32b55022fc9b329f6d50334994cc53c13fed75053054095e66fc
+5fc6297fa80154541c5b34afab967fda3dcdaf387074a99f3ba7767bc2a20ed0391f07c17e5b0bc3235d88324859d01a2ebb6b72d3eb0b6aaafc3df45da43651c331be0f4e5ff8c8f0974d98b97678aebee35bc3d66f46306150e8fef0690732ea21975a05668b1aec7dc955b0a3a2a02c8c75dfb1a3138b5711e2a8d920f3
+185ff967e4a7ce7df4343a5f642480a2807be5c686aec981ddec06bcf5c46619c51d4cb34ec0de9325a6ee9693d6f3849efce363c4e6d187c0b1095aecd2a9c29caeeb9627465f6fbabeb7c63a2650f6f77d636012445690c032459661e9f4c330f733744626646af8dd235a4ae2e841a3c0637ddc3cb3e93fa48c51a84206
+0ccbe19ded9d784571db78235115dd2bacf6fa0579b1e77fcbf19fd1b88aa57551e869f0aaed338d2db14d0968fab6a02907e0e5aefc2fb8aff9748576d2fd1490e50425e6ea36e3536d696709f072e0046a271fb772b8d9c0812834ae6b42124d29ef360ac09152de058adc9afaacbca9f9012247b74459bd84ff3aabc1ae
+de433d7a4efbb169fc51e12f2b9bee837e4888ac1b76739d82e99e8d8056479cbb9a957cfa8499594bcaac8899d270e149d664c55648af1ca0d56de23aad43be627bc3ee7051cd1e17cf12caef2f4de2578e06170a13c01ef38ff72ca985114212dc6aff41c50f87150f2fd3db8c6273f2ca478a19a7cb92427c9c339447da
+84b6297c2f95d04ddb2440d227e55023f2d2fdfda574404e0b274b7dafcf4d993756b8b56094da880ed11be1dcada1080cf8a912c0f6e206307590f797414ecfec6c691254f520a2516610697817a4ef0e1354b7f3b66226c8b403f4955426a651c0237b54da17e15598f62977a0f0a4bafa09f64c730c016ec8b163413749
+2d0429e247d1374e3d1cac75fbc0e8820158e776004e542e7f50934c9f4b477776ff5c567561a2100f08af0343d4131e5713fd49c996aab67c0b1c0947c280fb78973c06bd9f590f9cb25cdbda2e342aa22f9d45cd441f130d206dcc38ad026ecd85c0258ee98de88cf1ac5a8c038ddf87c48ac6c5e64708759968b9887a4e
+fc00e5d08ce8842b3c1649b5e54a00411b1587d76acb57e3dbded888141e4c3f90ced5b3c5ade78e6b6d12297584eda04e1ff673ef825437abb45f32f721b2803bbbfeb31d93d7573ce70f8f61391e3a1af911375434db1054fff2a0503529b48b891680e15e3f16d46556365314dd5d81629dcb31ed07dc32c2b1bfeb1935
+685e406fb5fc31ca37a306c213053ade935c9bea95fc2f6227fb3e10d5d617f3d64b31641d8ff54ce1c6c960061e02908b3c1e4f088c457f345ceac29cb05986c09b51565ae11d89c807376503c6a152642b693367326a0ce6e65b48b2b07d9395e3daa04d30d5fa14b0c4d35ef65db3519aa866cfbd9035d157639259a34c
+21bf729e12537bd5107566b8d089a6fc47fd3ebe25e9884cfd77579d3ac5f9d5f3d0f26ddde548193f8df07fad054a6145dcd353a53aa7b4134dc06df0a7431d92e4e826be68def13a2c904595d08bb71360a29a5e915a0320d019ae20f0cbe9c215fbab7313bfad387ac60f766e26ced406062dc33e908be782abacc9bb16
+f68a468b4edf4dd11bcdda9712575249c2aef455a6c4281426df8fd595ae3543a33b8ac9ff42f202b11472bf35006ca1e953f3f8cbdf4828402ccbc7351409193d18bbedc5e44d4359cd46dd6af0dff1ab9c361a319e628e7daae57d145b5633325c4454d821ebcd57f14e8d475f157e7b7e32ce47fd0d1c2c5b6d46005e93
+5cad8e4b9736db6533ad14736270d8ebd87172293a1ba351ebb1b49df031f97b4db7d2bc8b7c8b660a4fe78af4816a5e123651eb5e804ae2e94ae54c17b5be968a5af1438a965a57e9f2f9ba168e55c346c11dafc8d2f4bbde2afa19d0576340a865a3da4cc556ff2a7e620333b6e5a83c601d4ceeeb6242ed3a07e0b18dc3
+c1aed25b27a74e8e5d5ecd5afe2bdcd57f0248b1d0c6e26bbcb040f7f20d1149884aef92014465eb9a205716577ca2e93cbb953711317884960ed05d4896c6419ccbf960e7a29790a14ea30390614a4f843c22f253c070c41e70e67e323f74452b6c4f1a598f8b84d9353443db4fc7721b5f3e6432f68fd9619aca2cb8fa0b
+e2f56c57d004f068e4780940a4f7986d26beab8c6bd3753feef6dc34e0957f1265438c1f5279630eabcdeed9ed7e8d22efc60fa98761fa930b7cc14a2fa087ace3dc45473459298f61820cc6f7a9028585ea1fed8d25528ff063d8d4c131da0b99b03a8414bfb286a3e41c013ce5055e93b2889a8034f0cb51b00e657970c5
+de52e263dede0861497404b86694437ac2643a753f1682002e947a5822e0b52c1cf9c9f52904f6e2b1998c0e0f880327e35eac4252d52e52ab2c5f4d440a40a69ec8bd2b0efa87f4283ef1ef9ad3414429d572bef98a6df87c0d24c0b8d9f33c5430cf12d627f9372e0fdb25a28af925c1ec95921813bdacacf7c1f6195a9a
+1ed7d7fed7df9a3df68b1366f9eea34fc437b4dd78738c2701c6322bf732d61ea1dd3eeb38c3ac10de840fb4a7cfb03c1b23d815d51fc77ad6551c6782e2a1206adeac949ed0ae6cdbbb1f20150f2e1a75a8730d70f0083c070fce79541ec0b2c6e6f1a91ec8c509a525b0be7f76ea7f4f17981a0eaf9c0af95d8e45da4be9
+8a07e567d7b5a31b161c14ba138a29fc704fffeb42d1f2f7d6ee3e31adcf5f323ba3b6466e77e1751e390ef49f682f865ae68788c7da3c2bff07828010b072bc1fb9a163c6e2796adaa6e2a623cdadcfbab371c2bcaf7adb2f8da46c07692cd097013c8fc2377c15a75b5e8cecfbcb8483def7a4cc62e2305e26df4b0a8e1c
+79de4361a16586a4f1bfcad1b44aa103ea3bb553094d689f5532bebdfd6e0cb21b0d071656a69d5321679712e3957547a4e6bbe527a734ba59af93ae82b803e0b0ccbb1d5c771ea0ca8602b51b89c22fba82cda89ef3dde6dadf07ecbdc3ee1528a40566b22bef138eb95985da8e2e9b9a8b6d839999b048d481a460914b61
+75a3f8dbe10d7e44acd6b7e7c394bd717e7edf4e670858c0d84c5bbff06c9fffb0231fc4d7563cd79320729e8d03ab47ccc8d7016f13ac6ce5862bfbac90eaec0ae22222bd838a9be96d2fa24cf80636e5ad658f45a3ea63a588a14550ef3a81f898b4afe83c8bc2f04954471feb715374712539158ee5567b2b3d3e454ffe
+d3c0eab4202ae27cfaadd673da7f9655888efe008a07f50168d1e8ae5368f5af3b9eef2a2fbb0808773a22149815bc5902aadbf6ab7bffe6e1cab56a99d671fbb2d8375614388bc2f452d46aca0d318afba07ffc17831ce7f8da474c995aba7af56583a2425236b568b7aaf216131bcfcf099aa14db701854218e746b40dca
+a974b9f3b63a7f6b8dc348ccab4fd21edb7150876f27ffd5d09d27dc365f5e08468f178f8005133a14459059cffb60dc48da774b7583344395ecf7a274caee349725143548875cd9cfc74e14e8c4a5c7c03cda2baea7b463724cc6028addd5bd71d2630574a5fc96f8c13a75cc2804f1b1f7f195c1166900157466537f761f
+f51eb0db89174a040bf2dd160f92f24896c998139a115ce941ec46e1aeefbaac7b0cbfa26d764070acdf094cad687f209090f98d38d4f3918b2acad3b5b342c94d2114acc977e40990e2ef16413e03c8442d8186987b0adf0bbe2836aa434a6d44f3ccd7eae175fc02abb0db726ce79c65cee83c9ac23ee37e3bba34d8c03d
+fcdc68c7a130b13e566ea129d8af8cb271fc2519421e9c4c55c6d029a99093f3290a9bafa66ae6a22882731e6cb62d16c6c23590583c0c21e6e0ffbe466f15e0cace20727ec72e06c7b03a3db3620b8cb12123f8f2648e7c606ee233404462681b8979e20fd8e47e6c42f0e4705f60b444c299b6e4f9200dd60b086b166e3b
+05c3aa67bf2625eea32fa4facc8fe18f980d2871a0fa6cec81e90c0c7d0d88fac1d91af8377917bb8834c6d428d7e6dd0febcf651ff687ca55a6d207003f30e1d1da0a19e560f0121b3da29e3ba68248728f453a7829ef70993743e153dba668df62c043bd8904406c80f4b396a7a134b1addc90934cf3ee949fd26a6ff9e5
+e01d72540caf415f97f26dab45d861b70129187c07bc667856c74c39f9d27b6060f47f5e16df2e611574b3148cb4ce1e7c431142d4a992f3ca7b66e524c0aade577dc4c22d27ef10aae6dc4bb0a106a2fe2fe379c752f91dd4a98146ed35d4470746a9fb8949cbef8b6017f960baa82db48f5f71142e9442bcb5452980b9a0
+c7e699a663bd99e8df94f5591aca08b8e1031952e1a8d0c141b819f9cdcb39f952b27e2026a18e8e3f6ec026c987f4a124d18a383f9ba4f9dc883e3f1b8c9262687a84cb854c7764699538519fa10a804a54aa7feb1426d80919f8ed1cfda18ee5cd138afd66a9ae0f0882a28a207fe355a2270701057e40e7f83d43ebd5b8
+3aa2e6c1435e4e3f12f2540e70b2da3e356163586ea6a41be1a782b0e460d5e1a3cc317b96435c3ce0e1f147959bcb5f74e42fef522cabf2334b8fa3971c894ea0842306f4a9dea99e46163557ca4c93c3eb10493643782bda19511e8e763faf815051af4b30dd72ad3fb775fd29e33b9109b22a8682426e36671366b0f615
+def2a72b09286139acd2cf7dcd487d068485c559b0d5adf247bcffc542c9bacca6271a46e9a5906db57ea691fb85cfd966f40422997d9c67a39117804f4da3a9158add2cdb25a98ffedb70fb947c221b0ca1f3d24a89871fc16cd1fa0aa5dd312f8153ec3c1bb9ff62ced28f56a064947bd0559221a9c478e341b5681569d3
+35444b2b357d2f142c34fb86e5bd5df49c1837034c95b12b3979cf08f54330a1ea420e597bbefaadddf284671057e243f2a48a3e7993a116c0b806ba232b0e31897349961ba6516bca4c3bcf482b0f05f27bd36b30580623048de317b82f7dc41c9b45091044a51db54fb1fa728a70ea90ebf6f7f812b5fbc9a3cafdbfa54f
+16d53f2c155129bb21d94c22a7f9c444ed47c87f0a0988ce25c802ffb20da648085e706fe36c01b8baa3371fa2f11df97aa9d08b7fa819049b607cce3c16a7a5ed4848778105724f7bf2ea2d7b04d0368284b143a3e7e03ca448e4ad7765bac6718a6fcb285fa415671c24159fe77788d9b4213f27ecd65935f0d2d4c92b18
+37ecfd8b513c5b77a5aef7d3102ce4b862671a13b1fc29284e36652744aa7c9545499008d56e6d1b42c8ffbe54586a464a0a834b95fbbdb449164c8dcd4cf18c7150f78d6420257c1ba47ad7b86d1bd91aa88b284f604d455852c3551fd10cb4917835965e87a0a42f86eaea2d4571876df9d5237965dca6e4332efc683e3a
+6376b09c4ab9c9cac459910044dde61b776f87b9353f9c93e68072f9947a54fe6ad8ff874a12653badfe2f6f1a21d47dab6c808bbf32cf3dd3ceb95a2bd0b273ccc79549c590377df9c4d1b2e056033cd694b3ca7923abc563d9aa27f85fd895b69a3f1152410cbe526e704ac4d568548893b0a16fdb7645aef7ad09c33064
+e82a457f5ee84634032f63e229792b952b65c909513ac03ecd1a4a22ae605e087fccdd1e17a22586248ffbae45cd3b8c80814722bc46451d15e97ded57ca354d85ba70bff0cdca4a47d876593eaf84c59e9abb3b10aedeb9e8aac86ce8019b5c7831b1a3241d88f56e8d436620503fb86d035da5068a34f7a6ef6f1d25d695
+9e8451a7cad54bf85624eeb2355978713578dbb847ec7605d1ebe0aa238a4de8545ee6d4d6d9b719044a39989867ce69bbc8445c20466a7e4f5161d0a6ae263717db731e1eb08f4e1f24d28ea2d55a63d6d2b1c717e4c171511b51c3ee46b039179fbf69fcd3c5c84318add0a76771650e8d1d3ba948abd048e2281d5a0ed8
+ca90a7196ba4fdcb202265f0b6faa659267a492009a28dba3787f07f4af3770d64301ed11e13a9ab9762b1a110729f9db5d39562a1a5aa96e34082fcd4279c7a0646e3fad1380269d0d9cdf546a08ecc22b9a6dbe08d75568de8540e9c1e6a4795bd39bc712810a80a6fdea258e4936481c7a4b7d293eab715a331af11df78
+4a66f2ca8241982d24e5ccdc3bd775bd08e00d873ed022384b63a5f023ff9cc9cc5c60f3ecb64bac383f380cc3de3a2746b4225db983663d179bbb063fd5bf8cd6a3a7a84b9a273087691e1e89b7c7d65f18d2454d3704993843b285cfb54557cfc8647ec40f90234ef022576dd05ba17b07c45caf035873a18647618962c0
+f37583a907bbdce2afee783a8a8b46bfae16c33e19b34ab8c2926e568b3e16ba66feb54ffab3c3fd353d15cf35085f1d59cbead0192698e5c26bfe498119340df867ab86ff3e58f061ba5a061d274e809aae1f7513a28eed3d279f3f34f2de44cfa12aab0303d311b7c0e4b4cb66dc3959fb21b9c26348068311738cf2258d
+5381f9dc01cdc49dcff5e588d9fe854fa4759395cb1dc51b58c83d4b55fcd3da70272881575b5acd9c11de97b79702ef417d0ac199bd5185533911dc5b4c8ec0db6e96e1a3c00477ce553b81a0f610d19c837699cbbf9c0bc4ed8dd9ffe6d13a8008b20d4c52135b6a9e515ea4fdf2057d9d4312ac75337abe16da9d7ef1bf
+07aa4e4e8a5dff5381619fd1f2353a4de0ca3330417f3ebf9f86cb5921a1635f2da48f8aea9fba25db2f4d86ea8ff54ad165b68a0f30c1835b944221e4a674e9f805857bf7c93298f147a529636ce2b6aab94e37abef08e8261d74633ceaf5ae110455a53ac96a14637677d4f9392b8927a6031d0eee4b004ea1d41cd5c4f8
+904c389bcf5c7ae18f77dc22438742eef46e018040a03144134968c92b82f88e22a9f9846f506444d5fd43f72c9272235fbf0845b5a0676c803bc61d66d5a18a2fbd447761c41fb79a30c90cbcab35840fb14a9bc8d5d6edb19f70b420d81df60713b6cac192bc9ef006f7af35114461cc87fc50a2323cf30af4788312239e
+8546618038952f0e93de5ac06ad51551b8e968d49c16e7d59c7738e7e69798bc9f04b2b6175d24f33ba2eafa0bc36a5226b368c6636bc33334ab4b94ae08c4f9370bb31da42f53c3b76cee0da4146e99ae0f57086c479500c6d2342297e3d4f49f556d6934c312bd3ddc9beb1c07119dc1d91c20f678e7e52d1e0494859f6c
+9dacb7ec450aa2047ac38fc0d3f1fb9b794eefb18e62daedafaac5bc083c5a8a0ef03c176195dab2c5dbc8aae1803e3a811369d1ea946c0eba323ff60e5affc5b60194997eaf8be304b65256d10ad5bfde7da1378a94902ee2005981d9c9ca902875fb9354c1ddd201484fbfb851e86a5d6dc541819e67d8ba415912f7f2e7
+b1def89c663dedf9b5f2633f1c45f5529f944466bb5c0cd03ae26c78ab1c5491ff310f335d53d967214b2a5e2f0ac75a66048ebab664c15a69ea7c256c40783cc9f001aedfb315e16607a06f4c9cde1034f27e05a0e6a73381d83a5e678ba952308a6c9b73c98cefa070d3c52b2ecaf706b9b247fc88028c710c8d5d0aa49e
+b35b5f4006d43e554937605e1f5712667e46e63eff3f1082257c82669b1cfc8815b3c3e87069977dc980d23a145e33f43dbf5e90cdbdb684f7db8d66f84c50a594f6f4b4057b58e6c5e27b34df4ea6849d4668efd8d402eaf6dfcbf5c54e4f52d15f7236def60a892a9e300091e438d447fa6fd26435692a457e5eea4e2d69
+ef8bb74daf6aecf57616fb6be91598ac5fa15d4dcb0c5806d4e43db6e526564cc3e2122b6ce50b5c637de8fb1b5bafffdf51214a8355f74cadd668f0d9b20e5bcee2a1485f2599088cfade4f5496f612de6f7607bd76d152c3f26944de667ca264af64eaba6f6f0fa1841e860a73075cb8e98792361b23a4cc2150cb9842d2
+59f78e62959a21a5873e190356117a31e75377908e48f249345f9727c0c9d1231bb2ac7a4533b9f2f3c2f479fb24f38cde23dd8e29a7d1d381b92ca4557225b4a796cd5abe2cdb90d032189388fcbf9848b0602efd6aa662162b53a8c83ce3cf06a9dfd0f0ecd017e7c0a1c1adb88f64c85809fead4bea4b639ce4e74e008d
+a9f35970a1e9b973a878d5d419b43b8073c3dbbd829f07c45694edaa1ab98dfdd823830d663930ac316ea0c52f5e290e02b26fbb07d18f57d7bc4e572822f494304d6458efa42222bc6486acb53674595a913d613952fdba9e59f433641f01dbb7a7a2a16ca96480c229feaac7242ec15a7291637f09a99b3160c6ada9a478
+e1b276f6d77329cb2f9569b539b24f174e2ff12218aafd06abd1b663dd42d1089ee817719ea0e7bba089e167bec881b68a59bab6556106b128126bfcc1be67017a2beb29e307d5a9ca5e6d916b2f829964f13a06249e1bbc41264eb0217462365451e96f4e9ac13941d9fd2fc1fd8d4aa2e6f14ef4b99d9b4c16a3850e2423
+a84130f218a5cf5a64d467f7fe0f027c12f79c1ec8db81a4e4d584559d169ce624cad2d3c53bc2293e4de6e70a1f516e28d96710fcdade6a305816673be3f463cf03e98941162c265ba8dc5b88d2cd7d6e9ce00857cd7fa9498655eefa74e85a2b8ef749ce35ae966a9064052ad5a192bf7c5d9e9f7bf0f4254dbfed25b52d
+c0c98ea598b6decd079783a2524a25e7054e0280923537f3e00d05baab5bc51d67442e6bb14986248a6543e90ea9b14f777b6d575bb07a11996c311c98ae4a90d983415e0e6d14b2f509acb555e605644dc9cde6968e290fa223441dee889d832773e4b0b66404d7b583fb76bfc4a9b5a708c852613ab2212032ae4c59c922
+2cf397dca566147a468838e2267fd4a55f2daf9b54f0cc55db9ca1ecc1a997a596a82812de11f0770b5eb5dde5412df05e9e02039e6d5e7d428c493b36d76b8208375861343469c5af66ff26ef2ee0e8b21f6c81be86d5bfe42d563901d8efd57f9ac0cf1acba4ca506b3499a790677792a528890c0562f44b6aa0b1608ee3
+fc66c4e0e0b8432ea1b2c8adf009c14d6bd099e5d55457d0143628b907d3aa00fb6dfd690b7f6fc45c60cc937e99a3945719987c4108186762dfe0140731e12169d6b3cf6fc5cbcf1db786aa88068044b5260aa9bf8fd767f50691b123208d7cfd3d8805076a456b3455d36c569a3e7fc38d466f57f29e38aa97d030e0f4c2
+fcaf77081fb37259948ef21c4c51b5b2661acb8b8e5e230346e19b03233fff6ed14c73092237cc8becda676e0c3d4205689d9b506bd0a079ab0f9ca49bb06e383896fb00f2a6b9b3485849fa6f8b3dd14946dcf5c5dc260800d54365fc619f594733f55fbb7e6b8c208d09a480a1ba1193f48f56416d6c36351861eff0ccf2
+3990ff8a012f1652d082d061011cfc98bfa9d089fad96f48b275267710da5ec1e1ce243b609bcb72ef943521be21fdda9f24a9da985a6df8f0300ded2c5416313dff090042b1434952fe7ba55f07c19d97b2a8587e90431ab7375dff1a818e218340116c51c0a2c96ce249221a3f9c29f1f9bd7cb7b6e4595fa7764640ab41
+9a2d69249c0fd1a2fd964f101bb46e61680bc62b1f55ae93a027b7c777611891566d89c1a33b999317c2a196cbfd4a6f8ec7f53ea3a9ca213f6dfe86f6ee51dff65aaa56612b1d78d55b23834a629c1f8b5347e8179e33ce883e0540d1a3036c163f2ce26ee6042fed8eede235251acc8904d71825ba22be8e34c2e06b0b01
+6cb4584614c59abc462ddec40a9d43cb74e1d61b99e60a1dad094a33528cfb83bad8e7ce451c41b2a9c1c0fb554c62793e27553534ecf0af92ff48492fb4565f05cfdc2ff70f3299833c5c62912601ed94572c03430f4906d9d9298619d22b421b198f8323d5dc6c48a193a856f22b2a3f7adc218733d2dd9e6540879bb5c8
+aa75b45fd299a6711eadb04410121076e0372b3cf7e22c949b51bf5c1d02f6fddd7a997fe2dfbb863bb96314cf130fd0a76dcdb21ea3d04f24d2948d4bb54e5070161f92e5212bec9da48827d791a83390aef110183038837cb513d717bc6b5619047157185121910a60cd0d6ebd5e6139d630be33d660e5380c11dadf1275
+2f34d2cd155aa8d6e38553dfa89e2dd9964e0ade344e0d8ce50ece046db1496839859b4bdd3b4971af731ab12da964b0f7d4f220ad692c94473e176eeac031f237d8f0d576076ea791a6b670cd5fb4936a10acddeb44f4275183424b437245ec1729004edfe5e7e60d9ff533a606c69c52adb0d78732997f4d62551faaec01
+e49094465d6fcf339ffe4b841fb20bb75f67f54d5e30993d1e24502d602b55948720411530024b3e5d8ac52f9a840fc5c7c15a2a9f652261e5d144eed3fca65d283db21c90cf1bc9c98dbbf6d2b0113a7d4c237d255b2704c5f7cd8d1f575d11bfcb3cd27a416605388b500681e3a41ebc1125a8a3fffda2db0dd3c7ca9eab
+670823e8afe16f5628a879482838c09f00e780288bc2b470f39298d666e33142cb8068c4c99434368fc19638844e2fb241a18fdea88a6578cd9c311f6b36125d953c9d1d6850c006d1a9ad0bba7c4bed86b92befc612414e6ad90f8b1380a7d22a48f1cafd8cc6f8cd3f7dd17a61a5336caaa3a7d8ba40925585d41d4f1172
+ecdcc2c3f613d6b2c0bce2c177b3445337fa2ac0038cb13e5636e5af3f5e82b387d6aed0814370dce2899abd93db3f6c576f7e3c9564c89dfbe904ab963e41716d9bd730cd79916a3de3b72fc19a4bbf350050388c7aa3b3a7f6bbb92208e09d48401d9e5af523aced2e3663abb00f34aada3e7a234e9f316bdf66dc19f95a
+c5d434e7c0f669524cf617426aacec209138d160d0ebce8ffa1f36a308937c09b84babf87a9e12ce22dcf4f74d766690c538bfd7e2f12c2507a9b8ef2941ba1103452b860c89d9e9ce5856eb68724d0e179a7c56509973502700879fc3c62dfbf427d9fddbb826884e4ecec9b9fbf52ac0550e9754ec76a5714a12a8832e10
+755e0952b3f4758af045dd6050a930512f9b3120949349b9e8b88fe8d8f95650687ecca00e5882bace4deaf25ea5215cd4d150b675a5e74118e40b0647e54590262e0aa4b01a7cc80401ca6b3f064d9ebae831e5b4a318e0a3fc710887f3877ecbaf0d8a379ab23bc9b19d9478ed552c1bcb5f70e03b34ed8429af033fa1b0
+8d99da8c61c26bedfdbbd22bad46b97a731d94ef4c8641e0d7f2734f6ab08c896d2c0b1d4531bad9d880882d5cde429616015ca37bf416e2b5fa7c68cb32af6d16d1980f1baf477d6a5205c640ee82f29df0eb4c4522b54a01989ba42fe0bf94912cb426ce2da3d0fcaa730b9cecbbf12a9577
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark{restore}if
+
+%%EndFont
+setpacking
+%AI3_EndRider
+[
+39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+/hungarumlaut/ogonek/caron
+TE
+%AI55J_Tsume: None
+%AI3_BeginEncoding: _Device Device
+[/NUL
+/Eth
+/eth
+/Lslash
+/lslash
+/Scaron
+/scaron
+/Yacute
+/yacute
+/HT
+/LF
+/Thorn
+/thorn
+/CR
+/Zcaron
+/zcaron
+/DLE
+/DC1
+/DC2
+/DC3
+/DC4
+/onehalf
+/onequarter
+/onesuperior
+/threequarters
+/threesuperior
+/twosuperior
+/brokenbar
+/minus
+/multiply
+/RS
+/US
+/space
+/exclam
+/quotedbl
+/numbersign
+/dollar
+/percent
+/ampersand
+/quotesingle
+/parenleft
+/parenright
+/asterisk
+/plus
+/comma
+/hyphen
+/period
+/slash
+/zero
+/one
+/two
+/three
+/four
+/five
+/six
+/seven
+/eight
+/nine
+/colon
+/semicolon
+/less
+/equal
+/greater
+/question
+/at
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+/X
+/Y
+/Z
+/bracketleft
+/backslash
+/bracketright
+/asciicircum
+/underscore
+/grave
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+/x
+/y
+/z
+/braceleft
+/bar
+/braceright
+/asciitilde
+/DEL
+/Adieresis
+/Aring
+/Ccedilla
+/Eacute
+/Ntilde
+/Odieresis
+/Udieresis
+/aacute
+/agrave
+/acircumflex
+/adieresis
+/atilde
+/aring
+/ccedilla
+/eacute
+/egrave
+/ecircumflex
+/edieresis
+/iacute
+/igrave
+/icircumflex
+/idieresis
+/ntilde
+/oacute
+/ograve
+/ocircumflex
+/odieresis
+/otilde
+/uacute
+/ugrave
+/ucircumflex
+/udieresis
+/dagger
+/degree
+/cent
+/sterling
+/section
+/bullet
+/paragraph
+/germandbls
+/registered
+/copyright
+/trademark
+/acute
+/dieresis
+/notequal
+/AE
+/Oslash
+/infinity
+/plusminus
+/lessequal
+/greaterequal
+/yen
+/mu
+/partialdiff
+/summation
+/product
+/pi
+/integral
+/ordfeminine
+/ordmasculine
+/Omega
+/ae
+/oslash
+/questiondown
+/exclamdown
+/logicalnot
+/radical
+/florin
+/approxequal
+/Delta
+/guillemotleft
+/guillemotright
+/ellipsis
+/nbspace
+/Agrave
+/Atilde
+/Otilde
+/OE
+/oe
+/endash
+/emdash
+/quotedblleft
+/quotedblright
+/quoteleft
+/quoteright
+/divide
+/lozenge
+/ydieresis
+/Ydieresis
+/fraction
+/currency
+/guilsinglleft
+/guilsinglright
+/fi
+/fl
+/daggerdbl
+/periodcentered
+/quotesinglbase
+/quotedblbase
+/perthousand
+/Acircumflex
+/Ecircumflex
+/Aacute
+/Edieresis
+/Egrave
+/Iacute
+/Icircumflex
+/Idieresis
+/Igrave
+/Oacute
+/Ocircumflex
+/apple
+/Ograve
+/Uacute
+/Ucircumflex
+/Ugrave
+/dotlessi
+/circumflex
+/tilde
+/macron
+/breve
+/dotaccent
+/ring
+/cedilla
+/hungarumlaut
+/ogonek
+/caron
+/_Device/Device 0 0 0 TZ
+%AI3_EndEncoding AdobeType
+[161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal
+181/mu/partialdiff/summation/product/pi/integral 189/Omega 
+195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple
+/_Symbol_/Symbol 0 0 0 TZ
+%AI5_Begin_NonPrinting
+Np
+%AI3_BeginPattern: (Brick)
+(Brick) 0 0 72 72 [
+%AI3_Tile
+(0 O 0 R 0.3 0.85 0.85 0 k
+ 0.3 0.85 0.85 0 K
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+0 0 m
+0 72 L
+72 72 L
+72 0 L
+0 0 L
+f
+%AI6_EndPatternLayer
+) &
+(0 O 0 R 1 g
+ 1 G
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 0.3 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+0 68.4097 m
+72 68.4097 l
+S
+0 61.209 m
+72 61.209 L
+S
+0 54.0088 m
+72 54.0088 L
+S
+0 46.8076 m
+72 46.8076 L
+S
+0 39.6084 m
+72 39.6084 L
+S
+0 32.4072 m
+72 32.4072 L
+S
+0 25.207 m
+72 25.207 L
+S
+0 18.0059 m
+72 18.0059 L
+S
+0 10.8057 m
+72 10.8057 L
+S
+0 3.6064 m
+72 3.6064 L
+S
+68.4102 68.4097 m
+68.4102 61.2217 l
+S
+54.0098 68.4097 m
+54.0098 61.2217 L
+S
+39.6094 68.4097 m
+39.6094 61.2217 L
+S
+25.21 68.4097 m
+25.21 61.2217 L
+S
+10.8105 68.4097 m
+10.8105 61.2217 L
+S
+68.4102 53.9717 m
+68.4102 46.7842 l
+S
+54.0098 53.9717 m
+54.0098 46.7842 L
+S
+39.6094 53.9717 m
+39.6094 46.7842 L
+S
+25.21 53.9717 m
+25.21 46.7842 L
+S
+10.8105 53.9717 m
+10.8105 46.7842 L
+S
+68.4102 39.5967 m
+68.4102 32.4092 l
+S
+54.0098 39.5967 m
+54.0098 32.4092 L
+S
+39.6094 39.5967 m
+39.6094 32.4092 L
+S
+25.21 39.5967 m
+25.21 32.4092 L
+S
+10.8105 39.5967 m
+10.8105 32.4092 L
+S
+68.4102 25.2217 m
+68.4102 18.0342 l
+S
+54.0098 25.2217 m
+54.0098 18.0342 L
+S
+39.6094 25.2217 m
+39.6094 18.0342 L
+S
+25.21 25.2217 m
+25.21 18.0342 L
+S
+10.8105 25.2217 m
+10.8105 18.0342 L
+S
+68.4102 10.7842 m
+68.4102 3.5967 l
+S
+54.0098 10.7842 m
+54.0098 3.5967 L
+S
+39.6094 10.7842 m
+39.6094 3.5967 L
+S
+25.21 10.7842 m
+25.21 3.5967 L
+S
+10.8105 10.7842 m
+10.8105 3.5967 L
+S
+61.1973 3.5967 m
+61.1973 0 L
+S
+46.7969 3.5967 m
+46.7969 0 L
+S
+32.3965 3.5967 m
+32.3965 0 L
+S
+17.9971 3.5967 m
+17.9971 0 L
+S
+3.5967 3.5967 m
+3.5967 0 l
+S
+61.1973 18.0342 m
+61.1973 10.8467 L
+S
+46.7969 18.0342 m
+46.7969 10.8467 L
+S
+32.3965 18.0342 m
+32.3965 10.8467 L
+S
+17.9971 18.0342 m
+17.9971 10.8467 L
+S
+3.5967 18.0342 m
+3.5967 10.8467 l
+S
+61.1973 32.4092 m
+61.1973 25.2217 L
+S
+46.7969 32.4092 m
+46.7969 25.2217 L
+S
+17.9971 32.4092 m
+17.9971 25.2217 L
+S
+3.5967 32.4092 m
+3.5967 25.2217 l
+S
+61.1973 46.7842 m
+61.1973 39.5967 L
+S
+46.7969 46.7842 m
+46.7969 39.5967 L
+S
+32.3965 46.7842 m
+32.3965 39.5967 L
+S
+17.9971 46.7842 m
+17.9971 39.5967 L
+S
+3.5967 46.7842 m
+3.5967 39.5967 l
+S
+61.1973 61.2217 m
+61.1973 54.0347 L
+S
+46.7969 61.2217 m
+46.7969 54.0347 L
+S
+32.3965 61.2217 m
+32.3965 54.0347 L
+S
+17.9971 61.2217 m
+17.9971 54.0347 L
+S
+3.5967 61.2217 m
+3.5967 54.0347 l
+S
+61.1973 71.959 m
+61.1973 68.4717 L
+S
+46.7969 71.959 m
+46.7969 68.4717 L
+S
+32.3965 71.959 m
+32.3965 68.4717 L
+S
+17.9971 71.959 m
+17.9971 68.4717 L
+S
+3.5967 71.959 m
+3.5967 68.4717 l
+S
+32.3965 32.4092 m
+32.3965 25.2217 L
+S
+%AI6_EndPatternLayer
+) &
+] E
+%AI3_EndPattern
+%AI3_BeginPattern: (Confetti)
+(Confetti) 4.85 3.617 76.85 75.617 [
+%AI3_Tile
+(0 O 0 R 1 g
+ 1 G
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+4.85 3.617 m
+4.85 75.617 L
+76.85 75.617 L
+76.85 3.617 L
+4.85 3.617 L
+f
+%AI6_EndPatternLayer
+) &
+(0 O 0 R 0 g
+ 0 G
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 0.3 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+10.6 64.867 m
+7.85 62.867 l
+S
+9.1 8.617 m
+6.85 6.867 l
+S
+78.1 68.617 m
+74.85 67.867 l
+S
+76.85 56.867 m
+74.35 55.117 l
+S
+79.6 51.617 m
+76.6 51.617 l
+S
+76.35 44.117 m
+73.6 45.867 l
+S
+78.6 35.867 m
+76.6 34.367 l
+S
+76.1 23.867 m
+73.35 26.117 l
+S
+78.1 12.867 m
+73.85 13.617 l
+S
+68.35 14.617 m
+66.1 12.867 l
+S
+76.6 30.617 m
+73.6 30.617 l
+S
+62.85 58.117 m
+60.956 60.941 l
+S
+32.85 59.617 m
+31.196 62.181 l
+S
+47.891 64.061 m
+49.744 66.742 l
+S
+72.814 2.769 m
+73.928 5.729 l
+S
+67.976 2.633 m
+67.35 5.909 l
+S
+61.85 27.617 m
+59.956 30.441 l
+S
+53.504 56.053 m
+51.85 58.617 l
+S
+52.762 1.779 m
+52.876 4.776 l
+S
+45.391 5.311 m
+47.244 7.992 l
+S
+37.062 3.375 m
+35.639 5.43 l
+S
+55.165 34.828 m
+57.518 37.491 l
+S
+20.795 3.242 m
+22.12 5.193 l
+S
+14.097 4.747 m
+15.008 8.965 l
+S
+9.736 1.91 m
+8.073 4.225 l
+S
+31.891 5.573 m
+32.005 8.571 l
+S
+12.1 70.367 m
+15.6 68.867 l
+S
+9.35 54.867 m
+9.6 58.117 l
+S
+12.85 31.867 m
+14.35 28.117 l
+S
+10.1 37.367 m
+12.35 41.117 l
+S
+34.1 71.117 m
+31.85 68.617 l
+S
+38.35 71.117 m
+41.6 68.367 l
+S
+55.1 71.117 m
+58.35 69.117 l
+S
+57.35 65.117 m
+55.35 61.867 l
+S
+64.35 66.367 m
+69.35 68.617 l
+S
+71.85 62.867 m
+69.35 61.117 l
+S
+23.6 70.867 m
+23.6 67.867 l
+S
+20.6 65.867 m
+17.35 65.367 l
+S
+24.85 61.367 m
+25.35 58.117 l
+S
+25.85 65.867 m
+29.35 66.617 l
+S
+14.1 54.117 m
+16.85 56.117 l
+S
+12.35 11.617 m
+12.6 15.617 l
+S
+12.1 19.867 m
+14.35 22.367 l
+S
+26.1 9.867 m
+23.6 13.367 l
+S
+34.6 47.117 m
+32.1 45.367 l
+S
+62.6 41.867 m
+59.85 43.367 l
+S
+31.6 35.617 m
+27.85 36.367 l
+S
+36.35 26.117 m
+34.35 24.617 l
+S
+33.85 14.117 m
+31.1 16.367 l
+S
+37.1 9.867 m
+35.1 11.117 l
+S
+34.35 20.867 m
+31.35 20.867 l
+S
+44.6 56.617 m
+42.1 54.867 l
+S
+47.35 51.367 m
+44.35 51.367 l
+S
+44.1 43.867 m
+41.35 45.617 l
+S
+43.35 33.117 m
+42.6 30.617 l
+S
+43.85 23.617 m
+41.1 25.867 l
+S
+44.35 15.617 m
+42.35 16.867 l
+S
+67.823 31.1 m
+64.823 31.1 l
+S
+27.1 32.617 m
+29.6 30.867 l
+S
+31.85 55.117 m
+34.85 55.117 l
+S
+19.6 40.867 m
+22.1 39.117 l
+S
+16.85 35.617 m
+19.85 35.617 l
+S
+20.1 28.117 m
+22.85 29.867 l
+S
+52.1 42.617 m
+54.484 44.178 l
+S
+52.437 50.146 m
+54.821 48.325 l
+S
+59.572 54.133 m
+59.35 51.117 l
+S
+50.185 10.055 m
+53.234 9.928 l
+S
+51.187 15.896 m
+53.571 14.075 l
+S
+58.322 19.883 m
+59.445 16.823 l
+S
+53.1 32.117 m
+50.6 30.367 l
+S
+52.85 24.617 m
+49.6 25.617 l
+S
+61.85 9.117 m
+59.1 10.867 l
+S
+69.35 34.617 m
+66.6 36.367 l
+S
+67.1 23.617 m
+65.1 22.117 l
+S
+24.435 46.055 m
+27.484 45.928 l
+S
+25.437 51.896 m
+27.821 50.075 l
+S
+62.6 47.117 m
+65.321 46.575 l
+S
+19.85 19.867 m
+20.35 16.617 l
+S
+21.85 21.867 m
+25.35 22.617 l
+S
+37.6 62.867 m
+41.6 62.117 l
+S
+38.323 42.1 m
+38.823 38.6 l
+S
+69.35 52.617 m
+66.85 53.867 l
+S
+14.85 62.117 m
+18.1 59.367 l
+S
+9.6 46.117 m
+7.1 44.367 l
+S
+20.6 51.617 m
+18.6 50.117 l
+S
+46.141 70.811 m
+47.994 73.492 l
+S
+69.391 40.561 m
+71.244 43.242 l
+S
+38.641 49.311 m
+39.35 52.117 l
+S
+25.141 16.811 m
+25.85 19.617 l
+S
+36.6 32.867 m
+34.6 31.367 l
+S
+6.1 68.617 m
+2.85 67.867 l
+S
+4.85 56.867 m
+2.35 55.117 l
+S
+7.6 51.617 m
+4.6 51.617 l
+S
+6.6 35.867 m
+4.6 34.367 l
+S
+6.1 12.867 m
+1.85 13.617 l
+S
+4.6 30.617 m
+1.6 30.617 l
+S
+72.814 74.769 m
+73.928 77.729 l
+S
+67.976 74.633 m
+67.35 77.909 l
+S
+52.762 73.779 m
+52.876 76.776 l
+S
+37.062 75.375 m
+35.639 77.43 l
+S
+20.795 75.242 m
+22.12 77.193 l
+S
+9.736 73.91 m
+8.073 76.225 l
+S
+10.1 23.617 m
+6.35 24.367 l
+S
+73.217 18.276 m
+71.323 21.1 l
+S
+28.823 39.6 m
+29.505 42.389 l
+S
+49.6 38.617 m
+47.6 37.117 l
+S
+60.323 73.6 m
+62.323 76.6 l
+S
+60.323 1.6 m
+62.323 4.6 l
+S
+%AI6_EndPatternLayer
+) &
+] E
+%AI3_EndPattern
+%AI3_BeginPattern: (Leaves - Fall )
+(Leaves - Fall ) 0 0 64.0781 78.9336 [
+%AI3_Tile
+(0 O 0 R 0.05 0.2 1 0 k
+ 0.05 0.2 1 0 K
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+64.0781 78.9336 m
+64.0781 0 L
+0 0 L
+0 78.9336 L
+64.0781 78.9336 L
+f
+%AI6_EndPatternLayer
+) &
+(0 O 0 R 0.83 0 1 0 k
+ 0.83 0 1 0 K
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+1 D
+0 XR
+29.7578 0.9902 m
+30.4346 1.1914 30.7246 1.3428 V
+29.2559 4.0547 33.707 8.3359 34.627 9.0762 C
+35.2275 8.8506 35.3477 6.3184 34.6699 4.9805 C
+35.5137 5.1035 37.7031 3.7256 38.4609 2.4365 C
+38.5254 3.125 40.0957 6.0664 40.9219 6.4434 C
+40.002 6.8408 39.3359 8.3135 38.5742 9.7617 C
+39.5957 9.9287 40.9961 9.0078 42.4668 8.1025 C
+42.9814 8.9043 44.3555 9.875 45.6143 10.3916 C
+44.5264 11.0781 44.0313 11.8203 43.5352 13.2793 C
+42.4922 12.7139 40.3057 12.5645 39.7764 12.8516 C
+40.291 13.9648 42.5371 14.5078 43.2676 14.4551 C
+43.0137 15.3164 42.8652 17.4697 43.0391 20.0625 C
+41.3789 18.7461 39.834 17.4297 38.1738 17.4883 C
+38.4434 16.0664 37.8076 14.2607 37.4307 13.7676 C
+36.8574 14.5117 36.4463 15.3389 36.8008 17.3164 C
+35.3486 17.8008 34.1113 18.3467 32.7373 19.6045 C
+32.7373 17.7734 32.166 16.5723 31.2969 15.2959 C
+32.5576 14.8076 33.8301 13.6045 33.8252 12.5664 C
+32.9775 12.7178 31.2852 13.4619 30.793 14.4551 C
+30.0742 13.707 28.3906 12.3984 26.7871 12.3945 C
+27.9746 11.5391 28.8945 10.5059 28.9893 8.5938 C
+30.2422 9.5645 32.6953 10.1797 34.0752 9.582 C
+29.2344 5.3457 29.7031 2.3125 29.7578 0.9902 C
+f
+13.8525 29.9844 m
+13.3281 29.5127 13.1309 29.25 V
+15.623 27.4326 13.3691 21.6074 12.8555 20.5439 C
+12.2168 20.4883 10.8096 23.2285 10.8457 24.7266 C
+9.7129 23.9707 8.0488 24.0918 6.4463 24.3779 C
+7.0186 23.2891 6.6172 21.3447 5.8164 20.5439 C
+6.8184 20.5801 8.1699 19.8652 9.4785 18.8838 C
+8.6436 18.0645 6.8164 18.2246 4.9004 18.8838 C
+4.9004 17.5107 4.0781 15.7734 3.2412 14.5918 C
+4.5576 14.6484 5.7031 13.9629 6.5605 12.9316 C
+7.2256 14.5 9.2598 15.6133 10.166 15.5645 C
+10.1826 14.1992 8.6094 12.1094 7.5879 11.7109 C
+8.1875 11.041 9.207 9.5107 10.166 7.0947 C
+10.9648 9.0205 12.1348 10.2627 13.3672 11.1953 C
+12.2256 12.7578 12.3994 13.6289 12.7988 15.1074 C
+13.541 14.5664 14.5723 14.1338 14.7441 12.1309 C
+16.4609 12.416 17.5957 12.3447 19.0938 11.4434 C
+18.6387 13.1055 18.6348 14.707 18.9551 16.4063 C
+17.1055 16.2666 15.5449 16.4795 14.5156 17.9688 C
+15.3457 18.1953 17.6055 18.2549 18.4795 17.3223 C
+18.8066 18.3047 19.7012 19.7109 21.1475 20.4043 C
+19.707 20.6641 18.7227 21.7637 17.8135 23.4492 C
+17.1006 22.0332 14.873 20.3691 13.3711 20.3145 C
+15.373 24.3779 15.373 27.2959 13.8525 29.9844 C
+f
+41.2324 26.0742 m
+41.5518 26.7021 41.7549 26.959 V
+44.1523 25.0176 48.958 28.3262 49.8535 29.0957 C
+49.7432 29.7266 47.6182 30.8643 45.9004 29.834 C
+46.3408 31.123 45.4395 33.084 44.2402 34.126 C
+45.9805 34.0254 48.126 35.3867 48.6484 36.1289 C
+48.8701 35.1514 50.0527 33.8809 51.3379 32.8672 C
+51.6895 33.8398 50.9941 35.958 50.0781 37.5605 C
+51.3125 38.0605 52.4248 38.9912 52.8828 40.25 C
+53.3398 38.9336 54.3428 38.2598 55.6875 37.5039 C
+54.5273 36.0762 53.7471 33.9023 54.0273 33.0391 C
+55.3496 33.374 56.9209 36.0918 57.0439 37.1816 C
+57.9189 36.415 59.4727 35.7285 62.0537 35.4219 C
+60.3535 34.3438 59.9902 32.3516 59.4063 30.9219 C
+58.2588 31.3682 56.0898 31.4277 55.1152 30.8643 C
+55.8281 30.2852 57.168 29.7344 59.1777 29.7207 C
+59.1777 28.1758 59.6406 27.043 60.8945 25.8281 C
+59.1719 25.8418 57.0723 25.3555 55.5762 24.9629 C
+55.3281 26.292 54.4844 27.8887 53.3398 28.2891 C
+53.334 27.4277 53.5996 25.1797 54.4844 24.5117 C
+53.6201 23.9443 52.3672 22.5674 51.9102 20.8496 C
+51.2881 22.1758 50.4268 23.4805 48.5645 23.9238 C
+49.749 24.9766 50.584 26.9941 50.25 28.4609 C
+45.1973 24.4785 42.5215 25.7773 41.2324 26.0742 C
+f
+27.7578 38.7324 m
+28.4346 38.9316 28.7246 39.084 V
+27.2559 41.7969 31.707 46.0776 32.627 46.8169 C
+33.2275 46.5918 33.3477 44.0586 32.6699 42.7227 C
+33.5137 42.8457 35.7031 41.4678 36.4609 40.1787 C
+36.5254 40.8652 38.0957 43.8066 38.9219 44.1846 C
+38.002 44.582 37.3359 46.0547 36.5742 47.5039 C
+37.5957 47.6709 38.9961 46.7485 40.4668 45.8438 C
+40.9814 46.6445 42.3555 47.6177 43.6143 48.1328 C
+42.5264 48.8198 42.0313 49.5615 41.5352 51.0205 C
+40.4922 50.4556 38.3057 50.3057 37.7764 50.5938 C
+38.291 51.7056 40.5371 52.2485 41.2676 52.1958 C
+41.0137 53.0576 40.8652 55.2109 41.0391 57.8037 C
+39.3789 56.4878 37.834 55.1719 36.1738 55.2285 C
+36.4434 53.8076 35.8076 52.002 35.4307 51.5088 C
+34.8574 52.2529 34.4463 53.0796 34.8008 55.0576 C
+33.3486 55.5425 32.1113 56.0879 30.7373 57.3467 C
+30.7373 55.5146 30.166 54.314 29.2969 53.0366 C
+30.5576 52.5488 31.8301 51.3467 31.8252 50.3076 C
+30.9775 50.46 29.2852 51.2036 28.793 52.1958 C
+28.0742 51.4497 26.3906 50.1396 24.7871 50.1357 C
+25.9746 49.2817 26.8945 48.2466 26.9893 46.335 C
+28.2422 47.3057 30.6953 47.9209 32.0752 47.3237 C
+27.2344 43.0869 27.7031 40.0547 27.7578 38.7324 C
+f
+13.5195 70.3916 m
+12.9941 69.9209 12.7988 69.6587 V
+15.2891 67.8418 13.0352 62.0146 12.5225 60.9517 C
+11.8828 60.8955 10.4766 63.6367 10.5117 65.1348 C
+9.3809 64.3789 7.7148 64.4995 6.1133 64.7856 C
+6.6855 63.6987 6.2842 61.7529 5.4834 60.9517 C
+6.4854 60.9878 7.8359 60.2729 9.1455 59.2925 C
+8.3105 58.4717 6.4834 58.6338 4.5674 59.2925 C
+4.5674 57.9189 3.7461 56.1816 2.9082 54.9995 C
+4.2246 55.0576 5.3691 54.3706 6.2275 53.3408 C
+6.8926 54.9097 8.9258 56.0215 9.832 55.9727 C
+9.8496 54.6079 8.2764 52.5176 7.2539 52.1187 C
+7.8545 51.4497 8.873 49.9189 9.832 47.5039 C
+10.6309 49.4297 11.8008 50.6719 13.0342 51.6045 C
+11.8926 53.1655 12.0664 54.0366 12.4648 55.5146 C
+13.209 54.9746 14.2393 54.5415 14.4102 52.5386 C
+16.127 52.8247 17.2637 52.7529 18.7598 51.8525 C
+18.3057 53.5137 18.3027 55.1147 18.623 56.8149 C
+16.7725 56.6748 15.2129 56.8887 14.1826 58.377 C
+15.0117 58.6035 17.2725 58.6626 18.1465 57.731 C
+18.4736 58.7129 19.3691 60.1187 20.8145 60.8125 C
+19.375 61.0728 18.3896 62.1719 17.4805 63.8579 C
+16.7676 62.4429 14.541 60.7769 13.0371 60.7227 C
+15.041 64.7856 15.041 67.7046 13.5195 70.3916 C
+f
+41.2324 64.4824 m
+41.5518 65.1113 41.7549 65.3682 V
+44.1523 63.4272 48.958 66.7354 49.8535 67.5034 C
+49.7432 68.1362 47.6182 69.2725 45.9004 68.2422 C
+46.3408 69.5313 45.4395 71.4922 44.2402 72.5342 C
+45.9805 72.4341 48.126 73.7954 48.6484 74.5371 C
+48.8701 73.5601 50.0527 72.29 51.3379 71.2754 C
+51.6895 72.249 50.9941 74.3662 50.0781 75.9683 C
+51.3125 76.4692 52.4248 77.3994 52.8828 78.6582 C
+53.3398 77.3423 54.3428 76.667 55.6875 75.9111 C
+54.5273 74.4844 53.7471 72.3101 54.0273 71.4473 C
+55.3496 71.7822 56.9209 74.5 57.0439 75.5903 C
+57.9189 74.8232 59.4727 74.1372 62.0537 73.8311 C
+60.3535 72.7534 59.9902 70.7612 59.4063 69.3301 C
+58.2588 69.7773 56.0898 69.8364 55.1152 69.2725 C
+55.8281 68.6934 57.168 68.1431 59.1777 68.1284 C
+59.1777 66.583 59.6406 65.4512 60.8945 64.2373 C
+59.1719 64.249 57.0723 63.7632 55.5762 63.3721 C
+55.3281 64.7002 54.4844 66.2974 53.3398 66.6973 C
+53.334 65.8364 53.5996 63.5874 54.4844 62.9214 C
+53.6201 62.353 52.3672 60.9751 51.9102 59.2583 C
+51.2881 60.583 50.4268 61.8882 48.5645 62.333 C
+49.749 63.3862 50.584 65.4033 50.25 66.8691 C
+45.1973 62.8872 42.5215 64.1851 41.2324 64.4824 C
+f
+%AI6_EndPatternLayer
+) &
+] E
+%AI3_EndPattern
+%AI3_BeginPattern: (Stripes)
+(Stripes) 8.45 4.6001 80.45 76.6001 [
+%AI3_Tile
+(0 O 0 R 1 0.07 1 0 k
+ 1 0.07 1 0 K
+) @
+(
+%AI6_BeginPatternLayer
+800 Ar
+0 J 0 j 3.6 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+8.2 8.2 m
+80.7 8.2 L
+S
+8.2 22.6001 m
+80.7 22.6001 L
+S
+8.2 37.0002 m
+80.7 37.0002 L
+S
+8.2 51.4 m
+80.7 51.4 L
+S
+8.2 65.8001 m
+80.7 65.8001 L
+S
+8.2 15.4 m
+80.7 15.4 L
+S
+8.2 29.8001 m
+80.7 29.8001 L
+S
+8.2 44.2 m
+80.7 44.2 L
+S
+8.2 58.6001 m
+80.7 58.6001 L
+S
+8.2 73.0002 m
+80.7 73.0002 L
+S
+%AI6_EndPatternLayer
+) &
+] E
+%AI3_EndPattern
+%AI5_End_NonPrinting--
+%AI5_Begin_NonPrinting
+Np
+%AI8_BeginBrushPattern
+(New Pattern 1)
+0 A
+u
+1 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7834.75 8587 m
+-7834.75 8563 L
+-7884.75 8563 L
+-7884.75 8587 L
+-7834.75 8587 L
+n
+u
+0 Ap
+0 O
+1 g
+-7854.75 8585 m
+-7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C
+F
+-7844.75 8585 m
+-7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C
+F
+-7884.75 8565 m
+-7864.75 8560 -7854.75 8590 -7834.75 8585 C
+F
+-7874.75 8565 m
+-7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C
+F
+-7864.75 8565 m
+-7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C
+F
+-7844.75 8565 m
+-7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C
+F
+-7874.75 8585 m
+-7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C
+F
+-7844.7817 8565.125 m
+-7850.9009 8563.6162 -7854.7817 8565.125 V
+-7858.877 8563.6484 -7864.7817 8565.125 V
+-7869.7446 8563.4492 -7874.7817 8565.125 V
+-7880.7969 8563.5742 -7884.7817 8565.125 V
+-7884.7817 8584.8096 L
+-7881.6958 8585.7842 -7878.2969 8585.9912 -7874.3799 8584.9082 C
+-7868.2134 8586.4912 -7864.4634 8584.9082 V
+-7859.4634 8586.4912 -7854.3799 8584.8242 V
+-7850.0474 8586.4082 -7844.3799 8584.9082 V
+-7838.8799 8586.3242 -7834.7817 8585.125 V
+-7834.7817 8565.4404 L
+-7837.5254 8564.4287 -7840.6514 8563.9287 -7844.7817 8565.125 C
+f
+0 R
+0 G
+1 J 1 j 0.5 w
+-7864.75 8585 m
+-7872.54 8586.9473 -7878.813 8583.585 -7884.75 8579.0488 C
+S
+-7854.75 8585 m
+-7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C
+S
+-7844.75 8585 m
+-7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C
+S
+-7884.75 8565 m
+-7864.75 8560 -7854.75 8590 -7834.75 8585 C
+S
+-7874.75 8565 m
+-7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C
+S
+-7864.75 8565 m
+-7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C
+S
+-7854.75 8565 m
+-7846.96 8563.0527 -7840.687 8566.415 -7834.75 8570.9512 C
+S
+-7844.75 8565 m
+-7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C
+S
+-7874.75 8585 m
+-7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C
+S
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 2)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884 8586 m
+-7819.187 8586 L
+-7819.187 8521.9023 L
+-7884 8521.9023 L
+-7884 8586 L
+n
+u
+0 O
+0 g
+-7849.6978 8544.4297 m
+-7851.6094 8521.9023 L
+-7853.5215 8544.4297 L
+-7852.9033 8544.3066 -7852.2642 8544.2402 -7851.6094 8544.2402 c
+-7850.9551 8544.2402 -7850.3159 8544.3066 -7849.6978 8544.4297 C
+f
+-7861.2402 8552.3975 m
+-7884 8554.3301 L
+-7861.1138 8556.2734 L
+-7861.2856 8555.5469 -7861.3848 8554.793 -7861.3848 8554.0156 c
+-7861.3848 8553.4629 -7861.3281 8552.9248 -7861.2402 8552.3975 C
+f
+-7856.519 8545.5723 m
+-7870.1626 8536.8047 L
+-7860.2153 8549.377 L
+-7859.3574 8547.791 -7858.0718 8546.4766 -7856.519 8545.5723 C
+f
+-7853.481 8563.6074 m
+-7851.5786 8586 L
+-7849.6768 8563.5967 L
+-7850.3018 8563.7227 -7850.9473 8563.791 -7851.6094 8563.791 c
+-7852.25 8563.791 -7852.873 8563.7246 -7853.481 8563.6074 C
+f
+-7841.9609 8555.5068 m
+-7819.187 8553.5732 L
+-7842.083 8551.6289 L
+-7842.083 8551.8506 L
+-7841.9258 8552.5488 -7841.834 8553.2695 -7841.834 8554.0156 c
+-7841.834 8554.5234 -7841.8848 8555.0195 -7841.9609 8555.5068 C
+f
+-7860.1138 8558.8262 m
+-7870.1641 8571.5293 L
+-7856.2778 8562.6055 L
+-7857.8823 8561.7305 -7859.2114 8560.416 -7860.1138 8558.8262 C
+f
+-7842.9961 8549.3945 m
+-7832.875 8536.6055 L
+-7846.7666 8545.5313 L
+-7845.1768 8546.4414 -7843.8633 8547.7793 -7842.9961 8549.3945 C
+f
+-7846.6895 8562.4512 m
+-7832.873 8571.3281 L
+-7842.9658 8558.5732 L
+-7843.8198 8560.1895 -7845.1152 8561.5313 -7846.6895 8562.4512 C
+f
+-7842.8887 8558.6133 m
+-7842.3862 8557.6641 -7842.043 8556.6211 -7841.875 8555.5195 c
+-7841.7993 8555.0293 -7841.748 8554.5273 -7841.748 8554.0156 c
+-7841.748 8553.2637 -7841.8398 8552.5352 -7841.998 8551.8311 c
+-7842.1958 8550.957 -7842.5049 8550.124 -7842.918 8549.3545 c
+-7843.7954 8547.7246 -7845.1191 8546.374 -7846.7241 8545.4561 c
+-7847.6294 8544.9375 -7848.6226 8544.5537 -7849.6802 8544.3457 c
+-7850.3047 8544.2207 -7850.9497 8544.1523 -7851.6094 8544.1523 c
+-7852.2695 8544.1523 -7852.915 8544.2207 -7853.5391 8544.3457 c
+-7854.623 8544.5605 -7855.6382 8544.957 -7856.5625 8545.4961 c
+-7858.1313 8546.4102 -7859.4282 8547.7363 -7860.291 8549.335 c
+-7860.7969 8550.2695 -7861.145 8551.2969 -7861.3262 8552.3828 c
+-7861.415 8552.916 -7861.4727 8553.459 -7861.4727 8554.0156 c
+-7861.4727 8554.8008 -7861.3711 8555.5605 -7861.1978 8556.293 c
+-7860.981 8557.207 -7860.6406 8558.0732 -7860.187 8558.8701 c
+-7859.2793 8560.4727 -7857.939 8561.8008 -7856.3174 8562.6826 c
+-7855.4487 8563.1553 -7854.5 8563.498 -7853.4961 8563.6934 c
+-7852.8848 8563.8115 -7852.2554 8563.8779 -7851.6094 8563.8779 c
+-7850.9414 8563.8779 -7850.29 8563.8086 -7849.6602 8563.6826 c
+-7848.5786 8563.4668 -7847.5664 8563.0654 -7846.6455 8562.5273 c
+-7845.0566 8561.5977 -7843.751 8560.2441 -7842.8887 8558.6133 c
+f
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 3)
+0 A
+u
+1 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7874.75 8587 m
+-7874.75 8563 L
+-7884.75 8563 L
+-7884.75 8587 L
+-7874.75 8587 L
+n
+u
+u
+0 Ap
+0 O
+1 g
+-7875.4058 8578.5361 m
+-7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c
+-7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 c
+-7877.897 8566.9736 -7881.0898 8565 -7884.75 8565 C
+-7884.75 8585 L
+-7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 c
+-7881.9121 8584.7754 -7880.1807 8584.0645 -7878.7441 8582.9824 c
+-7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 c
+f
+0 R
+0 G
+1 J 1 j 0.5 w
+-7884.75 8565.3174 m
+-7881.7207 8566.2744 -7878.8926 8567.9326 -7876.1543 8569.9072 C
+S
+-7884.75 8570.9512 m
+-7881.5991 8573.3564 -7878.543 8576.0869 -7875.4058 8578.5361 C
+S
+-7878.7441 8582.9824 m
+-7880.8105 8581.8916 -7882.7993 8580.5342 -7884.75 8579.043 C
+S
+-7883.8018 8584.9521 m
+-7884.1191 8584.8682 -7884.4375 8584.7852 -7884.75 8584.6865 C
+S
+-7878.7441 8582.9824 m
+-7880.1807 8584.0645 -7881.9121 8584.7744 -7883.8018 8584.9521 C
+S
+-7875.4058 8578.5361 m
+-7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c
+-7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 C
+S
+-7884.75 8585 m
+-7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 C
+S
+-7878.7441 8582.9824 m
+-7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 C
+S
+-7876.1543 8569.9072 m
+-7877.8975 8566.9736 -7881.0898 8565 -7884.75 8565 C
+S
+U
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 5)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7726.3994 8587 m
+-7726.3994 8573.4199 L
+-7885 8573.4199 L
+-7885 8587 L
+-7726.3994 8587 L
+n
+u
+u
+0 O
+0.285 0.228 0.171 0 k
+-7741.0786 8585.4844 m
+-7741.043 8586.6895 L
+-7727.5103 8587.5176 -7726.8418 8586.2822 v
+-7726.7441 8586.1016 -7726.647 8585.7148 -7726.561 8585.1934 C
+-7728.584 8585.8242 -7738.291 8585.5713 -7741.0786 8585.4844 C
+f
+0.44 0.352 0.264 0 k
+-7741.4063 8574.0234 m
+-7741.3711 8575.2676 L
+-7738.4912 8575.0488 -7728.1914 8574.3164 -7726.543 8574.8652 C
+-7726.7031 8574.2188 -7726.9199 8573.7646 -7727.2046 8573.6152 c
+-7728.8306 8572.7656 -7741.4063 8574.0234 Y
+f
+0.145 0.116 0.087 0 k
+-7741.3711 8575.2676 m
+-7741.0786 8585.4844 L
+-7738.291 8585.5713 -7728.584 8585.8242 -7726.561 8585.1934 C
+-7726.1519 8582.7773 -7725.9258 8577.3604 -7726.543 8574.8652 C
+-7728.1914 8574.3164 -7738.4912 8575.0488 -7741.3711 8575.2676 C
+f
+U
+u
+0.155 0.124 0.093 0 k
+-7766.9375 8579.2734 m
+-7765.897 8579.6563 L
+-7747.0728 8575.1465 L
+-7747.481 8574.3145 L
+-7766.3633 8576.7246 L
+-7767.252 8577.0059 L
+-7767.6504 8576.8936 -7768.1934 8576.8242 V
+-7767.6094 8577.2373 -7767.1426 8578.1406 -7766.9375 8579.2734 C
+f
+u
+0.085 0.068 0.051 0 k
+-7771.7993 8583.666 m
+-7772.5977 8583.7217 -7769.749 8583.6641 Y
+-7770.3481 8583.0176 -7770.771 8581.8203 -7770.8105 8580.4375 c
+-7770.8169 8580.2246 -7770.8105 8580.0176 -7770.7993 8579.8135 C
+-7771.041 8579.707 -7771.0918 8579.7734 -7771.6289 8579.5645 C
+-7771 8583.6113 -7771.7993 8583.666 v
+f
+0.305 0.244 0.183 0 k
+-7770.3442 8576.8672 m
+-7770.5527 8576.8105 -7770.4937 8578.9307 Y
+-7769.4785 8579.7588 L
+-7767.8359 8578.9434 L
+-7766.9375 8579.2734 L
+-7767.1426 8578.1406 -7767.6094 8577.2373 -7768.1934 8576.8242 C
+-7768.6094 8576.7715 -7769.874 8576.7998 -7770.3442 8576.8672 C
+f
+U
+0.115 0.092 0.069 0 k
+-7766.9375 8579.2734 m
+-7767.8359 8578.9434 L
+-7769.4785 8579.7588 L
+-7770.4937 8578.9307 L
+-7770.793 8579.708 -7770.7993 8579.8135 V
+-7769.5137 8580.3789 -7768.1831 8580.7402 -7766.8398 8580.9258 C
+-7766.79 8580.7275 -7766.7842 8580.543 -7766.79 8580.3369 c
+-7766.7998 8579.9717 -7766.8218 8579.6182 -7766.9375 8579.2734 C
+f
+0.41 0.328 0.246 0 k
+-7747.4512 8575.3965 m
+-7749.377 8576.6426 -7758.3862 8582.0986 -7766.8398 8580.9258 C
+-7766.9038 8582.0928 -7767.248 8583.0908 -7767.75 8583.6631 C
+-7767.1895 8583.6621 L
+-7746.7402 8586.7559 L
+-7747.0366 8576.4258 L
+-7747.0728 8575.1465 L
+-7747.2046 8575.2373 -7747.4512 8575.3965 v
+f
+0.395 0.316 0.237 0 k
+-7770.8105 8580.4375 m
+-7770.771 8581.8203 -7770.3481 8583.0176 -7769.749 8583.6641 C
+-7767.6807 8583.6631 L
+-7767.1782 8583.0908 -7766.8218 8582.0713 -7766.8398 8580.9258 C
+-7768.1831 8580.7402 -7769.5137 8580.3789 -7770.7993 8579.8135 C
+-7770.8105 8580.0176 -7770.8169 8580.2246 -7770.8105 8580.4375 c
+f
+U
+u
+0 0 0 0.11 k
+-7741.2642 8574.2012 m
+-7740.2407 8574.0352 L
+-7741.2642 8574.2012 L
+-7741.2642 8574.2012 L
+f
+0 0 0 0.34 k
+-7747.481 8574.3145 m
+-7747.0728 8575.1465 L
+-7745.6714 8574.918 L
+-7744.5234 8574.7314 L
+-7742.6758 8574.4307 L
+-7741.2642 8574.2012 L
+-7740.2407 8574.0352 L
+-7740.2954 8573.7168 -7740.3672 8573.498 -7740.4648 8573.4199 C
+-7747.481 8574.3145 L
+f
+0 0 0 0.32 k
+-7745.8042 8579.207 m
+-7746.041 8586.8613 L
+-7740.7144 8587 L
+-7739.7266 8583.5146 -7740.1816 8579.1543 V
+-7745.8042 8579.207 L
+f
+U
+0.025 0.02 0.015 0 k
+-7739.3223 8576.3848 m
+-7736.373 8576.9199 -7733.2402 8577.1602 -7730.3159 8576.3613 c
+-7730.2856 8576.3496 -7730.2754 8576.3184 -7730.2871 8576.2969 c
+-7730.2881 8576.2656 -7730.3198 8576.2559 -7730.3418 8576.2559 c
+-7733.2422 8577.0645 -7736.375 8576.8242 -7739.3042 8576.2783 c
+-7739.3262 8576.2793 -7739.3574 8576.291 -7739.3672 8576.3223 c
+-7739.3662 8576.3438 -7739.355 8576.375 -7739.3223 8576.3848 c
+-7739.3223 8576.3848 l
+f
+-7737.8374 8575.3076 m
+-7737.7295 8575.3789 -7737.6313 8575.4941 -7737.5234 8575.502 c
+-7733.7886 8575.832 -7730.1631 8575.7813 -7726.4746 8575.6641 c
+-7726.4526 8575.6641 -7726.4209 8575.6426 -7726.4214 8575.6211 c
+-7726.4214 8575.5879 -7726.4551 8575.5684 -7726.4766 8575.5684 c
+-7729.3223 8575.6816 -7732.1401 8575.6992 -7735.0039 8575.5352 c
+-7735.9336 8575.4766 -7736.9082 8575.7402 -7737.7778 8575.2207 c
+-7737.7993 8575.2109 -7737.8306 8575.2109 -7737.8506 8575.2334 c
+-7737.8618 8575.2559 -7737.8594 8575.2871 -7737.8374 8575.3076 c
+-7737.8374 8575.3076 l
+f
+-7733.373 8577.3672 m
+-7731.5098 8578.6797 -7729.3022 8579.374 -7727.1001 8579.8867 c
+-7727.0679 8579.8965 -7727.0474 8579.8848 -7727.0366 8579.8535 c
+-7727.0273 8579.8203 -7727.0488 8579.8008 -7727.0703 8579.79 c
+-7729.2617 8579.2656 -7731.459 8578.6035 -7733.3105 8577.2803 c
+-7733.3433 8577.2598 -7733.375 8577.2715 -7733.3848 8577.293 c
+-7733.4058 8577.3145 -7733.3945 8577.3457 -7733.373 8577.3672 c
+-7733.373 8577.3672 l
+f
+-7738.9321 8584.0566 m
+-7736.7295 8584.5703 -7734.5298 8585.0303 -7732.2798 8585.2754 c
+-7732.2598 8585.2852 -7732.229 8585.2637 -7732.229 8585.2422 c
+-7732.2183 8585.209 -7732.2407 8585.1777 -7732.2729 8585.1787 c
+-7734.5122 8584.8809 -7736.7305 8584.5176 -7738.9126 8583.9502 c
+-7738.9351 8583.9512 -7738.9673 8583.9629 -7738.9766 8583.9941 c
+-7738.9751 8584.0156 -7738.9648 8584.0479 -7738.9321 8584.0566 c
+-7738.9321 8584.0566 l
+f
+-7738.439 8583.3604 m
+-7736.3457 8584.1973 -7734.1016 8583.9297 -7731.9023 8583.9629 c
+-7731.8706 8583.9609 -7731.8496 8583.9395 -7731.8506 8583.9082 c
+-7731.8521 8583.875 -7731.873 8583.8555 -7731.8945 8583.8555 c
+-7734.0928 8583.8438 -7736.3374 8584.0996 -7738.4209 8583.2529 c
+-7738.4434 8583.2539 -7738.4746 8583.2656 -7738.4834 8583.2969 c
+-7738.4834 8583.3184 -7738.4722 8583.3506 -7738.439 8583.3604 c
+-7738.439 8583.3604 l
+f
+-7737.707 8584.7051 m
+-7736.3833 8584.752 -7735.1504 8584.5469 -7733.8271 8584.209 c
+-7733.3594 8584.0996 -7732.9199 8584.2266 -7732.4609 8584.2129 c
+-7731.897 8584.1973 l
+-7731.874 8584.1963 -7731.8633 8584.1855 -7731.8535 8584.1738 c
+-7731.834 8584.1523 -7731.8442 8584.1211 -7731.8662 8584.0996 c
+-7732.0625 8583.9453 l
+-7732.0742 8583.9453 -7732.085 8583.9355 -7732.0962 8583.9355 c
+-7732.5 8583.9473 l
+-7733.9551 8584.1914 -7735.457 8584.6719 -7736.8926 8584.0742 c
+-7736.9258 8584.0645 -7736.957 8584.0859 -7736.9673 8584.1074 c
+-7736.9673 8584.1396 -7736.9551 8584.1602 -7736.9336 8584.1709 c
+-7735.647 8584.6992 -7734.1714 8584.4756 -7732.8818 8584.0547 c
+-7732.0918 8584.043 L
+-7732.124 8584.0332 L
+-7731.9282 8584.1875 L
+-7731.8984 8584.0898 L
+-7732.4639 8584.1064 l
+-7732.9321 8584.1406 -7733.3848 8583.9834 -7733.8398 8584.1035 c
+-7735.1543 8584.4609 -7736.3975 8584.625 -7737.71 8584.5986 c
+-7737.7422 8584.5996 -7737.7642 8584.6211 -7737.7617 8584.6533 c
+-7737.7617 8584.6855 -7737.7402 8584.7061 -7737.707 8584.7051 c
+-7737.707 8584.7051 l
+f
+-7738.5718 8585.0605 m
+-7735.8711 8586.2207 -7732.9023 8585.5703 -7730.1279 8585.1816 c
+-7729.7832 8585.2891 l
+-7729.7617 8585.2988 -7729.7417 8585.2871 -7729.7207 8585.2656 c
+-7729.71 8585.2441 -7729.7217 8585.2129 -7729.7422 8585.2021 c
+-7730.0801 8585.0098 l
+-7732.7754 8584.3926 -7735.5391 8584.7813 -7738.271 8584.7852 c
+-7738.3022 8584.7871 -7738.3232 8584.8086 -7738.3223 8584.8398 c
+-7738.3198 8584.8721 -7738.2983 8584.8926 -7738.2681 8584.8926 c
+-7735.6738 8584.9355 -7733.0303 8584.4434 -7730.4727 8585.0742 c
+-7729.7954 8585.2891 L
+-7729.7534 8585.1914 L
+-7730.1406 8585.0859 l
+-7732.9058 8585.4424 -7735.8418 8586.1348 -7738.5313 8584.9746 c
+-7738.5537 8584.9648 -7738.585 8584.9648 -7738.5962 8584.998 c
+-7738.6055 8585.0195 -7738.605 8585.0508 -7738.5718 8585.0605 c
+-7738.5718 8585.0605 l
+f
+-7735.6895 8578.3945 m
+-7734.3945 8578.9004 -7732.9834 8578.6465 -7731.6802 8578.3438 c
+-7731.647 8578.3418 -7731.6367 8578.3203 -7731.6382 8578.2891 c
+-7731.6504 8578.2568 -7731.6714 8578.2461 -7731.7031 8578.248 c
+-7732.998 8578.5303 -7734.377 8578.8154 -7735.6504 8578.2969 c
+-7735.6826 8578.2871 -7735.7144 8578.2988 -7735.7246 8578.3311 c
+-7735.7222 8578.3525 -7735.7114 8578.3848 -7735.6895 8578.3945 c
+-7735.6895 8578.3945 l
+f
+-7736.1401 8580.2207 m
+-7734.2266 8580.6895 -7732.3145 8581.1035 -7730.355 8581.3242 c
+-7730.3242 8581.334 -7730.3022 8581.3125 -7730.293 8581.2803 c
+-7730.2954 8581.2598 -7730.3159 8581.2285 -7730.3374 8581.2285 c
+-7732.2959 8581.0078 -7734.209 8580.582 -7736.1206 8580.1133 c
+-7736.1426 8580.1152 -7736.1738 8580.126 -7736.1831 8580.1582 c
+-7736.1831 8580.1797 -7736.1719 8580.2109 -7736.1401 8580.2207 c
+-7736.1401 8580.2207 l
+f
+-7736.9336 8582.6348 m
+-7734.499 8583.4609 -7731.8647 8583.0547 -7729.3457 8583.0879 c
+-7729.313 8583.0879 -7729.293 8583.0664 -7729.293 8583.0332 c
+-7729.2954 8583.0117 -7729.3159 8582.9922 -7729.3481 8582.9922 c
+-7731.8574 8582.916 -7734.481 8583.3848 -7736.8945 8582.5264 c
+-7736.9282 8582.5273 -7736.959 8582.5391 -7736.9688 8582.5605 c
+-7736.9678 8582.5918 -7736.9561 8582.624 -7736.9336 8582.6348 c
+-7736.9336 8582.6348 l
+f
+-7732.0542 8583.8496 m
+-7730.6582 8584.5449 -7729.0503 8584.4033 -7727.5342 8584.4668 c
+-7727.502 8584.4648 -7727.4824 8584.4434 -7727.4824 8584.4121 c
+-7727.4834 8584.3906 -7727.5054 8584.3594 -7727.5366 8584.3594 c
+-7729.0137 8584.2207 -7730.6489 8584.5234 -7732.0039 8583.7617 c
+-7732.0366 8583.7529 -7732.0679 8583.7637 -7732.0786 8583.7861 c
+-7732.0879 8583.8076 -7732.0767 8583.8398 -7732.0542 8583.8496 c
+-7732.0542 8583.8496 l
+f
+-7731.3418 8580.4248 m
+-7730.3926 8580.3975 -7729.4336 8580.3701 -7728.4839 8580.3428 c
+-7728.4526 8580.3418 -7728.4312 8580.3203 -7728.4336 8580.2881 c
+-7728.4336 8580.2559 -7728.4551 8580.2354 -7728.4878 8580.2363 c
+-7729.437 8580.2637 -7730.397 8580.291 -7731.3457 8580.3184 c
+-7731.377 8580.3184 -7731.3975 8580.3418 -7731.3975 8580.373 c
+-7731.397 8580.4043 -7731.374 8580.4258 -7731.3418 8580.4248 c
+-7731.3418 8580.4248 l
+f
+-7729.1592 8578.0361 m
+-7728.6895 8578.0645 -7728.209 8578.0723 -7727.7383 8578.0918 c
+-7727.7168 8578.0908 -7727.6855 8578.0684 -7727.6865 8578.0371 c
+-7727.687 8578.0039 -7727.71 8577.9844 -7727.7417 8577.9844 c
+-7728.2114 8577.9873 -7728.6816 8577.9375 -7729.1514 8577.9395 c
+-7729.1831 8577.9297 -7729.2031 8577.9512 -7729.2134 8577.9844 c
+-7729.2129 8578.0156 -7729.1914 8578.0371 -7729.1592 8578.0361 c
+-7729.1592 8578.0361 l
+f
+-7736.9702 8580.2344 m
+-7736.5688 8580.5107 -7736.125 8580.6797 -7735.645 8580.751 c
+-7735.6113 8580.7607 -7735.5918 8580.7383 -7735.5806 8580.7168 c
+-7735.5703 8580.6855 -7735.5928 8580.6543 -7735.6152 8580.6543 c
+-7736.0854 8580.5723 -7736.5176 8580.4023 -7736.9209 8580.1475 c
+-7736.9521 8580.1377 -7736.9849 8580.1387 -7736.9946 8580.1709 c
+-7737.0039 8580.1934 -7736.9922 8580.2246 -7736.9702 8580.2344 c
+-7736.9702 8580.2344 l
+f
+-7738.1904 8586.085 m
+-7735.7344 8586.5273 -7733.2983 8587.001 -7730.7993 8586.7266 c
+-7730.7778 8586.7266 -7730.7568 8586.7041 -7730.7578 8586.6719 c
+-7730.7578 8586.6406 -7730.7798 8586.6191 -7730.8022 8586.6191 c
+-7733.291 8586.873 -7735.7344 8586.4844 -7738.1719 8585.9775 c
+-7738.1934 8585.9785 -7738.2256 8585.9902 -7738.2344 8586.0215 c
+-7738.2344 8586.043 -7738.2222 8586.0752 -7738.1904 8586.085 c
+-7738.1904 8586.085 l
+f
+0.195 0.156 0.117 0 k
+-7738.166 8574.6445 m
+-7735.7969 8574.2676 -7733.4058 8574.3477 -7731.0298 8574.5898 c
+-7730.998 8574.5879 -7730.9766 8574.5664 -7730.9766 8574.5352 c
+-7730.9785 8574.5137 -7731 8574.4824 -7731.0215 8574.4824 c
+-7733.4082 8574.2422 -7735.791 8574.1602 -7738.1694 8574.5391 c
+-7738.2026 8574.5391 -7738.2222 8574.5605 -7738.2217 8574.5938 c
+-7738.2207 8574.625 -7738.1992 8574.6465 -7738.166 8574.6445 c
+-7738.166 8574.6445 l
+f
+0.335 0.268 0.201 0 k
+-7737.4351 8574.1113 m
+-7734.9282 8574.1152 -7732.4146 8574.2773 -7729.918 8573.8965 c
+-7729.8862 8573.8945 -7729.8647 8573.873 -7729.8662 8573.8418 c
+-7729.8672 8573.8086 -7729.8896 8573.7891 -7729.9209 8573.7891 c
+-7732.418 8574.1699 -7734.9297 8574.0293 -7737.4375 8574.0059 c
+-7737.46 8574.0059 -7737.481 8574.0273 -7737.4785 8574.0596 c
+-7737.4785 8574.0918 -7737.457 8574.1123 -7737.4351 8574.1113 c
+-7737.4351 8574.1113 l
+f
+0.205 0.164 0.123 0 k
+-7738.9766 8574.3262 m
+-7737.5039 8574.668 -7736.0078 8574.4023 -7734.5391 8574.2207 c
+-7734.5078 8574.2207 -7734.4873 8574.1973 -7734.499 8574.166 c
+-7734.5 8574.1348 -7734.5215 8574.1133 -7734.5537 8574.125 c
+-7736.0103 8574.2842 -7737.4961 8574.583 -7738.9473 8574.2188 c
+-7738.9785 8574.2207 -7739.0103 8574.2324 -7739.0098 8574.2637 c
+-7739.019 8574.2852 -7738.998 8574.3164 -7738.9766 8574.3262 c
+-7738.9766 8574.3262 l
+f
+-7732.3535 8573.7949 m
+-7731.1978 8573.9219 -7730.0273 8573.8145 -7728.8926 8573.5898 c
+-7728.8711 8573.5781 -7728.8506 8573.5566 -7728.8618 8573.5244 c
+-7728.8623 8573.5029 -7728.8945 8573.4824 -7728.916 8573.4941 c
+-7730.0503 8573.7402 -7731.1914 8573.7939 -7732.3462 8573.6885 c
+-7732.3794 8573.6895 -7732.3984 8573.7109 -7732.4087 8573.7324 c
+-7732.4082 8573.7646 -7732.3862 8573.7852 -7732.3535 8573.7949 c
+-7732.3535 8573.7949 l
+f
+0.335 0.268 0.201 0 k
+-7739.2681 8576.4473 m
+-7737.9214 8577.1885 -7736.3066 8576.5977 -7734.855 8576.6416 c
+-7734.8223 8576.6406 -7734.8022 8576.6191 -7734.8022 8576.5859 c
+-7734.8042 8576.5654 -7734.8262 8576.5449 -7734.8574 8576.5449 c
+-7736.2886 8576.4902 -7737.8823 8577.0801 -7739.2168 8576.3506 c
+-7739.2383 8576.3398 -7739.2695 8576.3516 -7739.291 8576.374 c
+-7739.3008 8576.3955 -7739.2886 8576.4277 -7739.2681 8576.4473 c
+-7739.2681 8576.4473 l
+f
+-7737.8945 8578.5645 m
+-7735.6719 8579.0449 -7733.3896 8578.6162 -7731.1504 8578.5625 c
+-7731.1177 8578.5615 -7731.0977 8578.5391 -7731.0977 8578.5078 c
+-7731.1001 8578.4863 -7731.1318 8578.4668 -7731.1519 8578.4668 c
+-7733.3833 8578.4775 -7735.6519 8578.9805 -7737.875 8578.457 c
+-7737.8975 8578.457 -7737.9287 8578.4688 -7737.9375 8578.502 c
+-7737.9375 8578.5225 -7737.9258 8578.5547 -7737.8945 8578.5645 c
+-7737.8945 8578.5645 l
+f
+-7732.0273 8575.1406 m
+-7730.3496 8575.9688 -7728.499 8576.502 -7726.603 8576.3613 c
+-7726.5718 8576.3613 -7726.5513 8576.3389 -7726.5527 8576.3066 c
+-7726.5527 8576.2754 -7726.5742 8576.2539 -7726.6074 8576.2559 c
+-7728.481 8576.416 -7730.3198 8575.8604 -7731.9873 8575.0547 c
+-7732.0078 8575.0449 -7732.041 8575.0449 -7732.0503 8575.0781 c
+-7732.061 8575.0996 -7732.061 8575.1309 -7732.0273 8575.1406 c
+-7732.0273 8575.1406 l
+f
+u
+0.5 0.85 1 0.45 k
+-7885 8581.9082 m
+-7885.0254 8582.4883 -7884.5664 8583.1875 -7883.167 8583.9902 C
+-7882.8521 8584.0029 -7881.3945 8584.0234 -7879.0889 8584.0488 C
+-7879.0889 8581.8223 L
+-7881.1382 8581.8457 -7883.1177 8581.8867 -7885 8581.9082 C
+f
+-7884.5088 8580.9688 m
+-7879.0889 8580.8447 L
+-7879.0889 8579.8145 L
+-7882.644 8579.959 L
+-7883.8145 8580.3301 -7884.5088 8580.9688 V
+f
+0.5 0.85 1 0.32 k
+-7879.0889 8580.8252 m
+-7884.4746 8580.9434 L
+-7884.7695 8581.2148 -7884.9849 8581.5566 -7885 8581.9277 C
+-7883.1177 8581.9063 -7881.1382 8581.8848 -7879.0889 8581.8613 C
+-7879.0889 8580.8252 L
+f
+0.5 0.85 1 0.45 k
+-7774.1504 8580.6172 m
+-7852.3584 8581.541 -7879.1079 8581.8418 V
+-7879.1079 8584.0488 L
+-7862.8145 8584.2324 -7803.9902 8584.707 Y
+-7769.749 8583.6641 L
+-7770.457 8580.5684 L
+-7774.1504 8580.6172 L
+f
+0.5 0.85 1 0.12 k
+-7879.1079 8579.8145 m
+-7879.1079 8580.8447 L
+-7770.4258 8579 L
+-7770.3833 8576.8633 L
+-7803.6553 8576.7129 L
+-7879.1079 8579.8145 L
+f
+u
+0.065 0.052 0.039 0 k
+-7747.0728 8575.1465 m
+-7747.0366 8576.4258 L
+-7747.2954 8575.1172 L
+-7765.897 8579.6563 L
+-7766.9375 8579.2734 L
+-7766.8794 8579.6055 -7766.8398 8579.957 -7766.8306 8580.3223 c
+-7766.8242 8580.5283 -7766.8281 8580.7285 -7766.8398 8580.9258 C
+-7758.3862 8582.0986 -7748.9634 8577.6719 -7747.0366 8576.4258 C
+-7746.7402 8586.7559 L
+-7746.041 8586.8613 L
+-7745.8042 8579.207 L
+-7740.1816 8579.1543 L
+-7740.0898 8577.0137 -7740.0718 8575.0215 -7740.2407 8574.0352 C
+-7747.0728 8575.1465 L
+f
+0.4 0.7 1 0 k
+-7770.457 8580.5879 m
+-7770.4258 8578.9805 L
+-7879.1079 8580.8252 L
+-7879.1079 8581.8613 L
+-7852.3584 8581.5605 -7770.457 8580.5879 Y
+f
+U
+U
+0.025 0.02 0.015 0 k
+-7734.7344 8583.0293 m
+-7734.7344 8583.0625 -7734.7129 8583.082 -7734.6802 8583.082 c
+-7731.6714 8583.1133 -7729.4214 8582.9453 -7726.415 8582.8594 C
+-7726.4087 8582.7656 L
+-7729.3262 8582.8701 -7731.7607 8583.0078 -7734.6841 8582.9746 C
+-7734.7168 8582.9766 -7734.7358 8582.998 -7734.7344 8583.0293 C
+f
+-7726.3994 8582.7656 m
+-7726.4082 8582.7441 L
+-7726.4087 8582.7656 L
+-7726.4063 8582.7656 -7726.4033 8582.7656 -7726.3994 8582.7656 C
+f
+-7730.4487 8581.4238 m
+-7731.4458 8581.292 -7732.3394 8581.7656 -7733.2114 8582.1973 C
+-7733.2441 8582.208 -7733.2534 8582.2402 -7733.2422 8582.2715 C
+-7733.2305 8582.293 -7733.1982 8582.3027 -7733.1777 8582.291 c
+-7732.3262 8581.8301 -7731.4312 8581.4199 -7730.4678 8581.5195 c
+-7729.1079 8581.6621 -7727.9038 8582.375 -7726.5254 8582.4531 C
+-7726.4463 8582.3594 L
+-7728.04 8582.2656 -7728.8647 8581.623 -7730.4487 8581.4238 c
+f
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 6)
+0 A
+u
+1 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884.75 8563 m
+-7884.75 8587 L
+-7874.75 8587 L
+-7874.75 8563 L
+-7884.75 8563 L
+n
+0 Ap
+0 O
+1 g
+-7874.75 8565 m
+-7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 c
+-7877.5879 8565.2256 -7879.3198 8565.9346 -7880.7559 8567.0176 c
+-7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 c
+-7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c
+-7884.75 8576.8623 -7884.2319 8578.5996 -7883.3457 8580.0918 c
+-7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C
+-7874.75 8565 L
+f
+0 R
+0 G
+1 J 1 j 0.5 w
+-7874.75 8584.6816 m
+-7877.7793 8583.7256 -7880.6074 8582.0674 -7883.3457 8580.0918 C
+S
+-7874.75 8579.0488 m
+-7877.8999 8576.6436 -7880.957 8573.9131 -7884.0942 8571.4639 C
+S
+-7880.7559 8567.0176 m
+-7878.6904 8568.1084 -7876.7017 8569.4668 -7874.75 8570.957 C
+S
+-7875.6982 8565.0479 m
+-7875.3809 8565.1309 -7875.063 8565.2148 -7874.75 8565.3145 C
+S
+-7880.7559 8567.0176 m
+-7879.3193 8565.9355 -7877.5879 8565.2256 -7875.6982 8565.0479 C
+S
+-7884.0942 8571.4639 m
+-7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c
+-7884.75 8576.8623 -7884.231 8578.5996 -7883.3457 8580.0918 C
+S
+-7874.75 8565 m
+-7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 C
+S
+-7880.7559 8567.0176 m
+-7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 C
+S
+-7883.3457 8580.0918 m
+-7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C
+S
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 8)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7883.9521 8584.3125 m
+-7776.7954 8584.3125 L
+-7776.7954 8570.1855 L
+-7883.9521 8570.1855 L
+-7883.9521 8584.3125 L
+n
+u
+0 O
+0 0 0 1 k
+-7882.2832 8583.623 m
+-7882.8535 8586 -7882.8184 8582.0039 V
+-7883.0479 8578.8027 L
+-7883.6167 8576.4551 L
+-7883.4502 8574.123 L
+-7881.9502 8573.4551 -7865.2832 8572.123 V
+-7858.6167 8570.7891 -7849.6167 8570.7891 V
+-7784.3936 8571.4766 -7779.4912 8572.8848 v
+-7820.3882 8570.875 -7822.9688 8571.5117 v
+-7783.8569 8573.1602 -7780.8545 8574.4316 v
+-7818.79 8572.5469 -7822.167 8574.1777 v
+-7787.249 8575.9102 -7783.021 8577.5313 v
+-7789.7217 8576.8828 -7791.5127 8577.082 v
+-7788.3896 8577.5703 l
+-7793.4194 8577.502 l
+-7796.3218 8577.1289 l
+-7788.4521 8578.2422 -7787.9033 8578.8086 v
+-7784.3154 8578.1309 -7798.5186 8578.3848 v
+-7832.1177 8574.4551 -7882.2832 8583.623 V
+f
+/BBAccumRotation (5.805971) XT
+0 R
+0 0 0 0.5 K
+0.025 w
+-7883.9502 8573.123 m
+-7863.667 8571.2949 -7843.9727 8570.2207 v
+-7801.1514 8570.502 -7796.5737 8570.9004 v
+-7784.1631 8571.0313 -7776.7959 8572.0273 v
+S
+/BBAccumRotation (5.805971) XT
+0 0 0 1 K
+-7821.8369 8570.4082 m
+-7825.2959 8570.0273 -7851.2607 8570.2793 Y
+-7861.627 8570.1602 -7883.9502 8573.123 Y
+S
+/BBAccumRotation (5.805971) XT
+-7820.9873 8573.6641 m
+-7790.3608 8574.582 -7783.6606 8575.2324 v
+S
+/BBAccumRotation (5.805971) XT
+0 0 0 0.5 K
+-7829.6201 8578.2051 m
+-7794.3706 8579.6172 -7791.4058 8580.1406 v
+S
+/BBAccumRotation (5.805971) XT
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 10)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884 8586 m
+-7833.8921 8586 L
+-7833.8921 8529.9756 L
+-7884 8529.9756 L
+-7884 8586 L
+n
+u
+0 O
+0.1 1 1 0 k
+-7846.9014 8551.5752 m
+-7848.7178 8545.0957 -7858.8247 8548.4658 Y
+-7858.791 8548.5303 L
+-7868.8999 8545.1611 -7870.7144 8551.6396 V
+-7876.6758 8569.0068 -7871.4922 8575.7451 V
+-7864.7529 8585.3369 -7860.6055 8585.3369 V
+-7857.0103 8585.2705 L
+-7852.8638 8585.2705 -7846.125 8575.6816 Y
+-7840.9409 8568.9424 -7846.9014 8551.5752 Y
+f
+u
+0 0 0 1 k
+-7851.3926 8529.9756 m
+-7852.1167 8531.4199 -7852.9238 8532.4756 V
+-7852.4058 8532.0635 -7851.5151 8531.1924 -7851.3926 8529.9756 C
+f
+-7865.064 8532.4854 m
+-7865.8711 8531.4307 -7866.5942 8529.9863 Y
+-7866.4727 8531.2021 -7865.582 8532.0732 -7865.064 8532.4854 C
+f
+U
+0 0.61 0.74 0 k
+-7850.5977 8554.4609 m
+-7851.9038 8549.7959 -7859.1816 8552.2217 Y
+-7859.1567 8552.2686 L
+-7866.436 8549.8428 -7867.7417 8554.5078 V
+-7872.0337 8567.0117 -7868.3018 8571.8633 V
+-7863.4487 8578.7686 -7860.4634 8578.7686 V
+-7857.875 8578.7227 L
+-7854.8887 8578.7227 -7850.0366 8571.8174 Y
+-7846.3042 8566.9639 -7850.5977 8554.4609 Y
+f
+u
+1 Ap
+0.73 0.43 1 0.22 k
+0 R
+0 0 0 1 K
+-7854.6226 8557.2754 m
+-7853.813 8557.2754 -7853.1558 8556.6182 -7853.1558 8555.8096 c
+-7853.1558 8555 -7853.813 8554.3428 -7854.6226 8554.3428 c
+-7855.4321 8554.3428 -7856.0889 8555 -7856.0889 8555.8096 c
+-7856.0889 8556.6182 -7855.4321 8557.2754 -7854.6226 8557.2754 c
+b
+-7854.3638 8568.9971 m
+-7853.0806 8568.9971 -7852.0415 8568.1201 -7852.0415 8567.042 c
+-7852.0415 8565.9619 -7853.0806 8565.0869 -7854.3638 8565.0869 c
+-7855.645 8565.0869 -7856.6846 8565.9619 -7856.6846 8567.042 c
+-7856.6846 8568.1201 -7855.645 8568.9971 -7854.3638 8568.9971 c
+b
+-7853.834 8580.7861 m
+-7852.2817 8580.7861 -7851.0239 8580.1299 -7851.0239 8579.3213 c
+-7851.0239 8578.5117 -7852.2817 8577.8545 -7853.834 8577.8545 c
+-7855.3862 8577.8545 -7856.645 8578.5117 -7856.645 8579.3213 c
+-7856.645 8580.1299 -7855.3862 8580.7861 -7853.834 8580.7861 c
+b
+-7849.6104 8552.5264 m
+-7848.8687 8552.5264 -7848.2671 8551.8154 -7848.2671 8550.9365 c
+-7848.2671 8550.0596 -7848.8687 8549.3477 -7849.6104 8549.3477 c
+-7850.353 8549.3477 -7850.9546 8550.0596 -7850.9546 8550.9365 c
+-7850.9546 8551.8154 -7850.353 8552.5264 -7849.6104 8552.5264 c
+b
+-7848.0034 8574.083 m
+-7848.8818 8573.7354 -7849.1494 8572.335 -7848.603 8570.9541 c
+-7848.0566 8569.5752 -7846.9014 8568.7363 -7846.0234 8569.085 c
+-7845.145 8569.4326 -7844.877 8570.833 -7845.4233 8572.2139 c
+-7845.9702 8573.5947 -7847.125 8574.4316 -7848.0034 8574.083 c
+b
+u
+-7863.0566 8557.1592 m
+-7863.8662 8557.1592 -7864.5239 8556.502 -7864.5239 8555.6934 c
+-7864.5239 8554.8828 -7863.8662 8554.2266 -7863.0566 8554.2266 c
+-7862.248 8554.2266 -7861.5913 8554.8828 -7861.5913 8555.6934 c
+-7861.5913 8556.502 -7862.248 8557.1592 -7863.0566 8557.1592 c
+b
+-7863.3159 8568.8799 m
+-7864.5991 8568.8799 -7865.6382 8568.0049 -7865.6382 8566.9248 c
+-7865.6382 8565.8447 -7864.5991 8564.9697 -7863.3159 8564.9697 c
+-7862.0342 8564.9697 -7860.9951 8565.8447 -7860.9951 8566.9248 c
+-7860.9951 8568.0049 -7862.0342 8568.8799 -7863.3159 8568.8799 c
+b
+-7863.8457 8580.6709 m
+-7865.3975 8580.6709 -7866.6558 8580.0146 -7866.6558 8579.2041 c
+-7866.6558 8578.3936 -7865.3975 8577.7383 -7863.8457 8577.7383 c
+-7862.293 8577.7383 -7861.0352 8578.3936 -7861.0352 8579.2041 c
+-7861.0352 8580.0146 -7862.293 8580.6709 -7863.8457 8580.6709 c
+b
+-7868.0679 8552.4092 m
+-7868.811 8552.4092 -7869.4121 8551.6982 -7869.4121 8550.8213 c
+-7869.4121 8549.9443 -7868.811 8549.2334 -7868.0679 8549.2334 c
+-7867.3262 8549.2334 -7866.7241 8549.9443 -7866.7241 8550.8213 c
+-7866.7241 8551.6982 -7867.3262 8552.4092 -7868.0679 8552.4092 c
+b
+-7869.6758 8573.9678 m
+-7868.7983 8573.6201 -7868.5298 8572.2188 -7869.0762 8570.8379 c
+-7869.6226 8569.457 -7870.7778 8568.6201 -7871.6558 8568.9678 c
+-7872.5342 8569.3164 -7872.8032 8570.7178 -7872.2568 8572.0967 c
+-7871.7104 8573.4775 -7870.5552 8574.3154 -7869.6758 8573.9678 c
+b
+U
+U
+0 Ap
+0 0 0 1 k
+-7859.1318 8552.6553 m
+-7859.1318 8585.3145 l
+F
+u
+-7843.3906 8538.5303 m
+-7844.0815 8537.8369 -7847.019 8538.7021 Y
+-7848.229 8538.874 -7848.0562 8541.2939 Y
+-7847.019 8543.3682 -7847.7104 8543.1943 Y
+-7848.2998 8543.1943 -7849.855 8543.1143 -7850.7822 8543.0635 C
+-7851.1226 8541.6689 -7852.6128 8540.4756 -7854.7217 8539.7695 C
+-7852.7578 8536.4775 -7854.5176 8535.7949 -7856.2935 8535.79 C
+-7856.3096 8535.7021 -7856.332 8535.6162 -7856.3599 8535.5332 C
+-7854.1089 8535.5791 -7853.6392 8533.2588 Y
+-7853.4048 8533.0635 -7853.1606 8532.7861 -7852.9238 8532.4756 C
+-7853.1416 8532.6475 -7853.2944 8532.7393 Y
+-7854.2583 8532.7393 -7855.8774 8534.4941 -7856.4966 8535.207 C
+-7856.9194 8534.4434 -7857.853 8533.9111 -7858.9434 8533.9111 c
+-7860.0698 8533.9111 -7861.0322 8534.4795 -7861.4312 8535.2852 C
+-7861.9985 8534.624 -7863.6968 8532.751 -7864.6943 8532.751 C
+-7864.8462 8532.6572 -7865.064 8532.4854 V
+-7864.8281 8532.7939 -7864.583 8533.0732 -7864.3481 8533.2686 C
+-7863.8638 8535.6563 -7861.5254 8535.5342 V
+-7861.5449 8535.5889 -7861.5674 8535.6436 -7861.5806 8535.7021 C
+-7864.9238 8535.6924 -7863.937 8538.3174 -7863.2104 8539.6602 C
+-7865.5918 8540.376 -7867.2646 8541.7012 -7867.5239 8543.25 C
+-7868.4473 8543.2998 -7869.6729 8543.3584 -7870.1802 8543.3584 C
+-7870.8726 8543.5313 -7869.835 8541.458 V
+-7869.6626 8539.0391 -7870.8726 8538.8662 V
+-7873.8096 8538.002 -7874.501 8538.6934 V
+-7875.1919 8539.5566 -7876.0562 8538.3467 V
+-7875.1919 8540.0752 -7873.291 8539.5566 V
+-7870.6982 8538.8662 -7871.3906 8540.5938 V
+-7871.9087 8544.0498 -7870.1802 8544.7402 V
+-7868.0342 8545.8545 -7866.2822 8546.0889 V
+-7865.9087 8546.4141 -7865.4639 8546.7109 -7864.958 8546.9766 C
+-7867.5562 8547.0469 -7870.2246 8547.9209 -7871.0752 8550.9561 C
+-7871.5151 8552.2432 -7872.0518 8554.2432 V
+-7873.1025 8554.8252 -7874.3022 8556.0078 -7875.541 8558.2627 C
+-7876.394 8561.4502 -7877.167 8556.7129 V
+-7878.3975 8553.6494 -7879.6504 8553.5381 V
+-7878.4702 8555.2871 -7878.9038 8556.416 V
+-7877.2998 8560.917 -7875.6138 8559.8994 V
+-7874.0986 8559.2197 -7872.688 8556.8154 V
+-7873.0698 8558.4971 -7873.4326 8560.417 -7873.6743 8562.3906 C
+-7874.4888 8562.3975 L
+-7876.3506 8561.4795 -7876.3262 8564.959 V
+-7877.1226 8568.9453 -7876.3594 8571.6826 V
+-7875.647 8574.1504 -7878.1274 8572.9307 V
+-7879.2842 8573.3242 -7879.9839 8572.7881 V
+-7882.3882 8571.4131 -7884 8573.124 V
+-7882.147 8572.8799 -7881.4482 8573.417 V
+-7879.9785 8573.5615 -7879.897 8574.1787 V
+-7876.9561 8574.8555 -7876.188 8574.0771 V
+-7874.417 8573.2139 -7875.1304 8570.3604 V
+-7875.8799 8562.4814 -7874.3198 8564.4053 V
+-7874.1182 8564.4219 -7873.8784 8564.5176 V
+-7874.1519 8568.4326 -7873.8018 8572.3252 -7871.9961 8574.8516 C
+-7875.4536 8567.333 -7870.2974 8552.3037 Y
+-7868.9609 8547.5303 -7863.127 8548.1016 -7860.145 8548.7344 C
+-7860.0718 8550.1299 -7859.8374 8551.9492 -7859.1318 8552.6553 C
+-7858.2134 8550.6963 -7858.2358 8549.0732 V
+-7857.0762 8548.7217 -7850.2817 8546.8447 -7847.4487 8550.3369 C
+-7848.4312 8547.8135 -7850.8262 8547.0186 -7853.2007 8546.9189 C
+-7852.667 8546.6318 -7852.2041 8546.3047 -7851.8257 8545.9502 C
+-7850.041 8545.7861 -7847.7104 8544.5771 Y
+-7845.9814 8543.8857 -7846.5015 8540.4307 Y
+-7847.1919 8538.7021 -7844.5991 8539.3936 Y
+-7842.7002 8539.9111 -7841.835 8538.1836 Y
+-7842.7002 8539.3936 -7843.3906 8538.5303 Y
+f
+-7837.9082 8572.9521 m
+-7838.6074 8573.4893 -7839.7632 8573.0938 Y
+-7842.2446 8574.3135 -7841.5327 8571.8467 Y
+-7840.769 8569.1104 -7841.564 8565.1221 Y
+-7841.541 8561.6445 -7843.4014 8562.5596 Y
+-7844.0342 8562.5557 L
+-7844.3198 8560.6123 -7844.7046 8558.7549 -7845.0898 8557.1699 C
+-7843.7129 8559.4199 -7842.2778 8560.0635 Y
+-7840.5913 8561.082 -7838.9878 8556.5791 Y
+-7839.4214 8555.4502 -7838.2417 8553.7021 Y
+-7839.4937 8553.8125 -7840.7246 8556.876 Y
+-7841.4976 8561.6152 -7842.3511 8558.4268 Y
+-7843.5776 8556.1904 -7844.769 8555.0098 -7845.814 8554.4229 C
+-7846.2026 8553.0635 -7846.4858 8552.2393 Y
+-7846.7002 8551.4727 -7847.0337 8550.8486 -7847.4487 8550.3369 C
+-7847.3799 8550.5127 -7847.3174 8550.6982 -7847.2632 8550.8916 C
+-7841.3022 8568.2588 -7846.4858 8574.9971 V
+-7853.2246 8584.5869 -7857.3721 8584.5869 V
+-7860.9663 8584.6514 L
+-7865.1138 8584.6514 -7871.853 8575.0615 Y
+-7871.9038 8574.9961 -7871.9463 8574.9219 -7871.9961 8574.8516 C
+-7871.7378 8575.4141 -7871.437 8575.9404 -7871.0752 8576.4092 C
+-7864.3359 8586 -7860.189 8586 V
+-7856.5942 8585.9346 L
+-7852.4482 8585.9346 -7845.709 8576.3447 Y
+-7843.5801 8573.5771 -7843.3306 8569.0176 -7843.7769 8564.6055 C
+-7843.6553 8564.5752 -7843.5698 8564.5684 Y
+-7842.0112 8562.6475 -7842.7598 8570.5244 Y
+-7843.4746 8573.3789 -7841.7026 8574.2402 Y
+-7840.9351 8575.0186 -7837.9946 8574.3428 Y
+-7837.9136 8573.7256 -7836.4434 8573.5811 Y
+-7835.7446 8573.0449 -7833.8921 8573.2881 Y
+-7835.5024 8571.5771 -7837.9082 8572.9521 Y
+f
+U
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 34)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884.0254 8586.0264 m
+-7828.0542 8586.0264 L
+-7828.0542 8524.5342 L
+-7884.0254 8524.5342 L
+-7884.0254 8586.0264 L
+n
+u
+u
+0 O
+0.0745 0.9 0.9019 0.18 k
+0 R
+0 0 0 1 K
+1 J 1 j 0.0518 w
+-7857.5991 8562.7217 m
+-7857.3594 8573.5215 -7862.8794 8583.8398 v
+-7862.4009 8586 -7860.959 8586 v
+-7861.2002 8582.6406 -7860.2393 8582.1611 v
+-7855.9199 8570.1602 -7856.6382 8562.2402 v
+-7857.5991 8562.7217 l
+b
+-7857.5991 8562.7217 m
+-7859.2793 8568 -7871.0391 8569.2012 v
+-7875.3594 8569.6807 -7875.5991 8571.1211 v
+-7869.1206 8561.5195 -7868.1602 8561.7607 v
+-7881.3594 8556.001 -7884 8550.7197 v
+-7878.959 8553.6006 -7875.5991 8551.4404 v
+-7867.6802 8551.2012 -7862.6406 8553.3613 v
+-7858.8008 8555.2813 -7866.7202 8539.2012 v
+-7862.8794 8550.9609 -7859.2793 8524.5605 v
+-7858.3198 8529.8408 -7856.8799 8531.2813 v
+-7850.8799 8538.9609 -7851.8398 8541.1211 v
+-7852.3198 8544.9609 -7847.7598 8538.7207 v
+-7848 8548.3213 -7850.4009 8551.6807 v
+-7852.5591 8555.2813 -7846.5591 8553.1211 v
+-7840.5591 8551.2012 -7835.2793 8552.8809 v
+-7829.7598 8554.3203 -7828.0801 8551.4404 v
+-7839.8398 8563.9209 -7845.5991 8563.6807 v
+-7843.9194 8567.2813 l
+-7841.519 8572.0811 -7842 8573.2813 v
+-7857.2681 8563.8828 -7857.5991 8562.7217 v
+b
+-7857.5991 8562.7217 m
+-7854.959 8544.2402 -7857.5991 8536.5605 v
+-7859.998 8526.001 -7859.2793 8524.5605 v
+S
+-7856.1602 8551.4404 m
+-7850.1602 8546.6406 -7848.959 8541.3604 v
+S
+-7856.1602 8550.7197 m
+-7865.0391 8543.041 -7866.7202 8539.2012 v
+S
+-7828.0801 8551.4404 m
+-7829.2793 8553.6006 -7857.3594 8561.7607 y
+-7862.4009 8556.2422 -7873.9199 8553.8408 v
+-7881.5986 8552.8809 -7884 8550.7197 v
+S
+-7874.6382 8569.6807 m
+-7863.1191 8560.5615 -7857.3594 8561.7607 y
+-7843.1992 8568 -7842 8573.2813 v
+S
+U
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 36)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7883.8496 8585.9961 m
+-7833.96 8585.9961 L
+-7833.96 8534.9258 L
+-7883.8496 8534.9258 L
+-7883.8496 8585.9961 L
+n
+u
+0 O
+0.025 0.1 0.475 0 k
+-7862.1504 8553.9043 m
+-7864.4766 8552.8125 -7866.6914 8552.4434 -7868.373 8552.9238 c
+-7869.0518 8553.1172 -7869.645 8553.4473 -7870.123 8553.9238 c
+-7870.6006 8554.4023 -7870.9297 8554.9951 -7871.123 8555.6729 c
+-7872.0088 8558.7715 -7870.0103 8563.6777 -7865.9233 8567.7666 c
+-7861.834 8571.8535 -7856.9297 8573.8516 -7853.8286 8572.9668 c
+-7853.1519 8572.7715 -7852.5586 8572.4424 -7852.0806 8571.9658 c
+-7851.603 8571.4883 -7851.2754 8570.8955 -7851.082 8570.2168 c
+-7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c
+-7853.582 8561.21 -7854.791 8559.6133 -7856.2793 8558.123 c
+-7858.1504 8556.2539 -7860.1914 8554.8242 -7862.1504 8553.9043 c
+f
+u
+0.0035 0.014 0.0665 0 k
+-7861.2183 8552.9727 m
+-7863.8306 8552.0215 -7866.3975 8551.9688 -7868.373 8552.9238 C
+-7866.6914 8552.4434 -7864.4766 8552.8125 -7862.1504 8553.9043 c
+-7861.6191 8554.1543 -7861.0806 8554.4434 -7860.543 8554.7676 C
+-7858.8984 8554.0537 L
+-7859.667 8553.6172 -7860.4434 8553.2539 -7861.2183 8552.9727 c
+f
+0.015 0.06 0.285 0 k
+-7858.8984 8554.0537 m
+-7860.543 8554.7676 L
+-7859.0962 8555.6348 -7857.6426 8556.7607 -7856.2793 8558.123 c
+-7856.1538 8558.25 -7856.0327 8558.3779 -7855.9102 8558.5059 C
+-7855.2153 8556.8633 L
+-7856.3706 8555.7236 -7857.6191 8554.7813 -7858.8984 8554.0537 C
+f
+U
+u
+0.039 0.156 0.741 0 k
+-7849.687 8541.4043 m
+-7849.9746 8541.6914 -7861.2183 8552.9727 Y
+-7860.4434 8553.2539 -7859.667 8553.6172 -7858.8984 8554.0537 C
+-7845.4146 8540.5703 L
+-7847.061 8540.0996 -7848.6406 8540.3555 -7849.687 8541.4043 c
+f
+0.025 0.1 0.475 0 k
+-7845.4146 8540.5703 m
+-7858.8984 8554.0537 L
+-7857.584 8554.8027 -7856.2969 8555.7754 -7855.1143 8556.957 c
+-7855.084 8556.9863 -7855.0586 8557.0156 -7855.0278 8557.0449 C
+-7841.3408 8543.3574 L
+-7841.5264 8543.1328 -7841.7202 8542.9141 -7841.9302 8542.7012 c
+-7843.0103 8541.623 -7844.2305 8540.9082 -7845.4146 8540.5703 C
+f
+U
+u
+0.0115 0.046 0.2185 0 k
+-7835.9346 8550.3926 m
+-7833.5337 8547.9893 -7833.335 8544.0898 -7835.1382 8540.6973 C
+-7836.2954 8541.1182 L
+-7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c
+f
+0.015 0.06 0.285 0 k
+-7843.5337 8535.5957 m
+-7842.582 8534.9258 L
+-7845.2046 8534.3516 -7847.8306 8534.9141 -7849.6206 8536.7061 c
+-7848.1719 8535.2578 -7845.9082 8534.9307 -7843.5337 8535.5957 C
+f
+0.0295 0.118 0.5605 0 k
+-7843.5337 8535.5957 m
+-7845.9082 8534.9307 -7848.1719 8535.2578 -7849.6206 8536.7061 c
+-7851.019 8538.1055 -7851.3706 8540.2637 -7850.7954 8542.5469 C
+-7848.8672 8539.5449 -7845.4082 8540.5537 V
+-7843.585 8535.6309 L
+-7843.5337 8535.5957 L
+f
+*u
+0.048 0.192 0.912 0 k
+1 D
+-7835.9346 8550.3926 m
+-7837.2817 8551.7383 -7839.332 8552.1133 -7841.5234 8551.627 C
+-7851.6714 8561.7734 L
+-7851.7695 8561.5684 -7851.7695 8561.5684 -7851.6714 8561.7734 c
+-7850.2246 8564.8145 -7849.9702 8567.916 -7851.082 8570.2168 C
+-7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c
+-7853.5054 8561.3438 -7854.5918 8559.8848 -7855.9102 8558.5059 C
+-7855.2153 8556.8633 L
+-7855.1816 8556.8945 -7855.1465 8556.9238 -7855.1143 8556.957 c
+-7855.084 8556.9883 -7855.0566 8557.0176 -7855.0273 8557.0469 c
+-7855.0278 8557.0469 -7855.0278 8557.0469 -7855.0278 8557.0449 C
+-7841.3408 8543.3574 L
+-7836.3262 8541.1289 L
+-7836.2954 8541.1182 L
+-7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c
+f
+*U
+0.0215 0.086 0.4085 0 k
+0 D
+-7842.582 8534.9258 m
+-7843.5337 8535.5957 L
+-7841.6846 8536.1113 -7839.7656 8537.2285 -7838.1138 8538.8828 c
+-7837.4063 8539.5889 -7836.7998 8540.3418 -7836.2954 8541.1182 C
+-7835.1382 8540.6973 L
+-7835.6553 8539.7246 -7836.3374 8538.793 -7837.1802 8537.9512 c
+-7838.7695 8536.3594 -7840.6758 8535.3428 -7842.582 8534.9258 C
+f
+0.0205 0.082 0.3895 0 k
+-7836.2954 8541.1182 m
+-7836.7998 8540.3418 -7837.4063 8539.5889 -7838.1138 8538.8828 c
+-7839.7656 8537.2285 -7841.6846 8536.1113 -7843.5337 8535.5957 C
+-7843.585 8535.6309 L
+-7845.4082 8540.5537 L
+-7844.2114 8540.9219 -7842.9878 8541.6436 -7841.9302 8542.7012 c
+-7841.7202 8542.9141 -7841.5264 8543.1328 -7841.3408 8543.3574 C
+-7836.3262 8541.1289 L
+-7836.2954 8541.1182 L
+f
+U
+u
+0.445 0.356 0.267 0 k
+-7883.8496 8585.9961 m
+-7861.957 8562.9688 L
+-7862.2007 8562.6494 -7862.5752 8562.6133 -7862.8887 8562.6592 C
+-7867.1802 8567.2891 -7878.3145 8579.4561 -7882.7266 8584.2793 C
+-7883.5649 8585.3516 -7884 8585.9932 -7883.8496 8585.9961 C
+f
+0.15 0.12 0.09 0 k
+-7883.834 8585.9961 m
+-7882.6606 8585.7031 -7861.6934 8564.0029 Y
+-7861.6934 8563.502 -7861.7993 8563.1758 -7861.957 8562.9688 C
+-7883.8496 8585.9961 L
+-7883.8442 8585.9961 -7883.8418 8586 -7883.834 8585.9961 c
+f
+0.2 0.16 0.12 0 k
+-7882.7266 8584.2793 m
+-7878.3145 8579.4561 -7867.1802 8567.2891 -7862.8887 8562.6592 C
+-7863.2002 8562.7041 -7863.4526 8562.8301 Y
+-7864.603 8563.1328 -7878.5742 8578.9619 -7882.7266 8584.2793 C
+f
+U
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 37)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7882.9502 8585.2324 m
+-7833.0391 8585.2324 L
+-7833.0391 8521.1152 L
+-7882.9502 8521.1152 L
+-7882.9502 8585.2324 L
+n
+u
+0 O
+0 0 0 1 k
+0 R
+0 0 0 1 K
+0 w
+-7833.2358 8521.1152 m
+-7833.6064 8521.248 -7833.9858 8521.2832 -7834.3833 8521.2031 c
+-7834.4863 8521.168 l
+-7834.5254 8521.1602 -7834.5703 8521.1787 -7834.6025 8521.1992 c
+-7834.9434 8521.3926 l
+-7838.7129 8523.2959 -7842.0962 8525.8965 -7844.5 8529.4473 c
+-7845.9634 8531.5918 -7847.123 8533.8789 -7848.7993 8535.8564 c
+-7849.1729 8536.209 -7849.1758 8536.7725 -7848.834 8537.1309 c
+-7848.4951 8537.501 -7847.918 8537.5078 -7847.561 8537.165 c
+-7847.4038 8537.21 l
+-7847.2642 8537.1289 -7847.0742 8537.0703 -7847.0234 8536.957 c
+-7845.853 8534.2031 -7845.1895 8531.5137 -7843.4336 8529.1387 c
+-7841.1719 8526.0947 -7838.1777 8523.9941 -7835.0298 8522.0234 c
+-7834.3672 8521.6055 L
+-7834.4966 8521.6348 L
+-7833.7695 8521.6426 l
+-7833.791 8521.6113 -7833.8008 8521.5957 -7833.8223 8521.5645 C
+-7833.6064 8521.5234 -7833.377 8521.4746 -7833.1626 8521.4336 c
+-7833.0762 8521.4238 -7833.0186 8521.3389 -7833.0391 8521.2383 c
+-7833.0503 8521.1523 -7833.1382 8521.1084 -7833.2358 8521.1152 c
+-7833.2358 8521.1152 l
+b
+-7849.2222 8534.9951 m
+-7849.5742 8534.8066 -7849.9658 8534.6719 -7850.248 8534.3887 c
+-7856.4521 8528.1719 -7866.6802 8527.2734 -7874.0488 8533.6855 C
+-7874.1582 8533.7813 -7874.1582 8533.957 -7874.063 8534.0645 C
+-7871.0527 8532.9434 -7862.8838 8534.375 -7859.3223 8537.4121 C
+-7859.2534 8537.4668 -7859.1465 8537.4531 -7859.1055 8537.3711 C
+-7859.0503 8537.3047 -7859.0664 8537.1953 -7859.1328 8537.1563 C
+-7862.5625 8534.0859 -7867.0674 8532.29 -7871.6729 8532.748 C
+-7868.8535 8531.1855 -7865.6313 8530.4941 -7862.3984 8530.6885 c
+-7857.7144 8530.9717 -7853.4634 8533.1191 -7849.3711 8535.2793 c
+-7849.291 8535.3193 -7849.1978 8535.293 -7849.1553 8535.2109 C
+-7849.1016 8535.1309 -7849.1426 8535.0352 -7849.2222 8534.9951 c
+b
+-7858.647 8536.3359 m
+-7860.2266 8540.3613 -7862.3911 8544.3203 -7865.8018 8547.0762 c
+-7865.9648 8547.2119 -7865.9946 8547.4492 -7865.8711 8547.6055 c
+-7865.7344 8547.7676 -7865.5049 8547.7793 -7865.3481 8547.6563 c
+-7861.123 8545.5967 -7858.1904 8541.1309 -7858.1626 8536.4014 c
+-7858.1626 8536.4014 l
+-7858.1328 8536.2676 -7858.2354 8536.1348 -7858.3633 8536.1221 c
+-7858.5039 8536.1055 -7858.6318 8536.1973 -7858.647 8536.3359 c
+-7858.647 8536.3359 l
+b
+-7852.9414 8541.0176 m
+-7853.042 8541.1816 -7853.1152 8541.3838 -7853.2617 8541.4824 c
+-7856.0806 8543.3906 -7858.9785 8544.6309 -7861.8848 8546.1328 c
+-7862.0503 8546.209 -7862.1118 8546.418 -7862.0313 8546.5703 c
+-7861.9512 8546.7227 -7861.7559 8546.7793 -7861.5898 8546.7041 c
+-7858.439 8545.3232 -7854.313 8544.5 -7852.6729 8541.1797 c
+-7852.6289 8541.1113 -7852.6455 8541.0146 -7852.7266 8540.9648 c
+-7852.7959 8540.9199 -7852.897 8540.9492 -7852.9414 8541.0176 c
+-7852.9414 8541.0176 l
+b
+-7852.6602 8541.918 m
+-7852.4438 8542.4297 -7852.1431 8542.8896 -7852.0503 8543.4355 c
+-7851.2183 8548.2773 -7851.1152 8553.042 -7852.248 8557.6875 c
+-7852.248 8557.6875 l
+-7852.3418 8557.9531 -7852.2114 8558.2441 -7851.9438 8558.3389 c
+-7851.6777 8558.4336 -7851.3882 8558.3125 -7851.2935 8558.0479 c
+-7849.293 8552.8115 -7849.897 8546.7373 -7852.3711 8541.7832 c
+-7852.4063 8541.7002 -7852.498 8541.6689 -7852.582 8541.6914 c
+-7852.6641 8541.7275 -7852.6978 8541.835 -7852.6602 8541.918 c
+-7852.6602 8541.918 l
+b
+-7851.5352 8557.5938 m
+-7848.8984 8555.2275 -7846.6816 8552.252 -7845.853 8548.7363 c
+-7845.853 8548.7363 l
+-7845.7246 8548.1816 -7846.0742 8547.623 -7846.6416 8547.4902 c
+-7847.1992 8547.375 -7847.7578 8547.7246 -7847.8862 8548.2793 c
+-7848.5649 8551.5313 -7849.8711 8554.6729 -7851.7954 8557.3867 c
+-7851.7954 8557.3867 l
+-7851.8462 8557.4551 -7851.834 8557.5576 -7851.7695 8557.6201 c
+-7851.6992 8557.6699 -7851.5977 8557.6582 -7851.5352 8557.5938 c
+-7851.5352 8557.5938 l
+b
+-7836.3711 8550.1826 m
+-7837.7114 8545.8301 -7840.2598 8542.0693 -7843.689 8539.1533 C
+-7843.729 8539.0723 -7843.8242 8539.0322 -7843.9038 8539.0859 C
+-7843.9863 8539.127 -7844.0122 8539.2207 -7843.9722 8539.3018 C
+-7843.957 8539.7891 -7843.7144 8540.2334 -7843.4458 8540.5313 c
+-7838.4063 8546.1621 -7834.9902 8554.7197 -7837.3433 8561.9551 C
+-7837.0762 8556.4512 -7838.7241 8550.3008 -7842.1362 8545.6738 c
+-7843.1606 8544.2695 -7844.7422 8544.1211 -7846.3081 8544.2031 C
+-7846.4023 8544.1895 -7846.4834 8544.2432 -7846.4961 8544.3369 c
+-7846.5098 8544.4189 -7846.4551 8544.5137 -7846.3623 8544.5254 C
+-7843.1479 8545.7695 -7841.4878 8549.2246 -7840.084 8552.1943 c
+-7838.415 8555.7441 -7837.7017 8559.6387 -7838.0054 8563.5 C
+-7838.0454 8563.6777 -7838.1138 8565.3975 -7837.9775 8565.4102 C
+-7837.8306 8565.4395 -7837.709 8565.3438 -7837.6802 8565.1943 C
+-7837.645 8565.0449 -7834.6426 8555.7988 -7836.3711 8550.1826 c
+b
+-7844.4863 8537.4912 m
+-7843.3945 8533.6211 -7841.1094 8530.251 -7838.4824 8527.2383 c
+-7838.3306 8527.1045 -7838.3145 8526.8867 -7838.4502 8526.7354 c
+-7838.5752 8526.6006 -7838.8047 8526.582 -7838.957 8526.7178 c
+-7842.3306 8529.332 -7843.4487 8533.541 -7844.7954 8537.375 c
+-7844.7954 8537.375 l
+-7844.8262 8537.4648 -7844.7754 8537.5586 -7844.6982 8537.5869 c
+-7844.6094 8537.6191 -7844.5166 8537.5684 -7844.4863 8537.4912 c
+-7844.4863 8537.4912 l
+b
+-7838.5313 8562.1094 m
+-7838.5991 8562.0566 -7838.707 8562.083 -7838.748 8562.1504 C
+-7838.9634 8562.4746 -7840.6914 8564.5195 -7841.3926 8565.1406 c
+-7846.1719 8569.3945 -7849.5137 8573.9609 -7857.5391 8577.7227 c
+-7864.4512 8580.9639 -7867.1113 8583.5957 -7874.3862 8581.8262 c
+-7877.687 8581.0293 -7879.0313 8580.5313 -7880.4351 8575.4551 C
+-7881.9473 8569.2988 -7880.8672 8571.7832 -7881.084 8564.4385 c
+-7881.2222 8559.6973 -7884 8548.4551 -7871.5254 8534.2598 C
+-7871.4199 8534.1484 -7871.4336 8533.9961 -7871.5337 8533.9072 C
+-7871.6328 8533.8027 -7871.7959 8533.8164 -7871.8862 8533.916 C
+-7877.5786 8538.7168 -7881.0234 8545.6582 -7882.3145 8552.9424 c
+-7883.2871 8558.4668 -7882.9199 8563.25 -7882.666 8569.6367 c
+-7882.5688 8572.0938 -7883.6855 8579.0723 -7878.9102 8583.0625 c
+-7875.3926 8586 -7870.3911 8585.5469 -7866.3545 8584.1563 c
+-7860.6992 8582.2119 -7855.9727 8579.1465 -7850.8711 8575.6094 c
+-7847.2656 8573.125 -7839.2881 8563.2852 -7838.4785 8562.3262 C
+-7838.4351 8562.2588 -7838.4502 8562.1504 -7838.5313 8562.1094 C
+b
+-7873.0503 8549.3057 m
+-7872.168 8548.5029 -7871.7017 8549.8457 -7871.4297 8550.6016 c
+-7871.1626 8551.3574 -7870.189 8551.25 -7870.5127 8551.5732 c
+-7870.8369 8551.8975 -7870.8369 8551.9521 -7871.3232 8551.5195 c
+-7871.8086 8551.0879 -7871.8086 8551.7363 -7872.5649 8551.25 c
+-7873.3198 8550.7627 -7873.645 8549.8457 -7873.0503 8549.3057 c
+b
+-7865.6519 8553.9492 m
+-7865.3657 8553.5918 -7864.6802 8553.5723 -7864.4648 8553.8945 c
+-7864.25 8554.2197 -7863.3306 8554.2734 -7863.4937 8554.5967 c
+-7863.6543 8554.9219 -7863.6016 8555.1387 -7864.0874 8554.9219 c
+-7864.5737 8554.7051 -7864.4121 8555.2998 -7864.897 8555.084 c
+-7865.3833 8554.8672 -7865.8687 8554.2197 -7865.6519 8553.9492 c
+b
+-7857.6074 8559.0791 m
+-7857.1206 8558.7559 -7855.8794 8559.5117 -7856.4727 8559.5117 c
+-7857.0674 8559.5117 -7856.311 8560.2676 -7856.8521 8560.4834 c
+-7857.3906 8560.6992 -7857.2832 8560.4297 -7857.6074 8560.6445 c
+-7857.9297 8560.8613 -7858.3633 8561.2393 -7858.5239 8560.4297 c
+-7858.6855 8559.6191 -7858.3633 8559.6191 -7857.9849 8559.3496 c
+-7857.6074 8559.0791 -7857.6074 8559.0791 y
+b
+-7872.2402 8559.3496 m
+-7871.1074 8559.2422 -7871.8633 8559.998 -7871.269 8560.4834 c
+-7870.6738 8560.9697 -7869.918 8561.6172 -7870.729 8561.4004 c
+-7871.5391 8561.1855 -7872.9961 8561.6719 -7872.9434 8560.5381 c
+-7872.8887 8559.4033 -7872.6328 8559.3867 -7872.2402 8559.3496 c
+b
+-7866.5703 8567.6113 m
+-7866.1016 8567.3438 -7866.6802 8567.7197 -7866.0303 8567.6113 c
+-7865.3833 8567.5039 -7864.7886 8567.6113 -7865.2207 8567.8281 c
+-7865.6519 8568.0439 -7866.3008 8568.1523 -7866.4634 8567.9893 c
+-7866.625 8567.8281 -7866.9473 8567.8281 -7866.5703 8567.6113 c
+b
+-7857.0674 8567.1797 m
+-7857.4785 8566.1797 -7856.0962 8566.4238 -7855.4473 8566.7461 c
+-7854.7998 8567.0723 -7853.8262 8566.4775 -7854.4209 8566.9102 c
+-7855.0137 8567.3418 -7854.7998 8566.9102 -7855.3926 8567.2334 c
+-7855.9873 8567.5566 -7856.6895 8568.0977 -7857.0674 8567.1797 c
+b
+-7872.6738 8573.0664 m
+-7872.7222 8572.0752 -7871.8086 8572.957 -7871.269 8573.0117 c
+-7870.729 8573.0664 -7870.0801 8573.0664 -7870.2432 8573.2813 c
+-7870.4038 8573.498 -7870.459 8573.498 -7871.1626 8573.7129 c
+-7871.8633 8573.9297 -7872.6191 8574.1445 -7872.6738 8573.0664 c
+b
+-7873.1582 8567.6113 m
+-7874.0664 8567.9746 -7874.293 8567.8809 -7874.5625 8568.2051 c
+-7874.834 8568.5293 -7875.1558 8569.2314 -7875.5352 8568.0977 c
+-7875.9121 8566.9629 -7875.4282 8565.7764 -7875.0479 8565.9375 c
+-7874.6714 8566.0996 -7874.293 8566.7461 -7873.8618 8566.9629 c
+-7873.4297 8567.1797 -7872.6191 8567.3945 -7873.1582 8567.6113 c
+b
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 41)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884 8586 m
+-7803 8586 L
+-7803 8481 L
+-7884 8481 L
+-7884 8586 L
+n
+u
+u
+u
+0 O
+0 0 0 1 k
+-7865.8057 8498.4258 m
+-7866.0742 8496.6621 -7867.1602 8495.291 -7868.5239 8495.3965 c
+-7869.8862 8495.502 -7870.707 8497.0234 -7870.7432 8498.8066 c
+-7870.748 8499.0693 -7870.6743 8500.2441 -7870.6304 8500.4775 C
+-7870.6382 8500.582 -7870.6191 8500.6738 -7870.6104 8500.7803 c
+-7870.5142 8502.0254 -7869.3574 8503.3604 -7867.9414 8503.25 c
+-7866.5249 8503.1406 -7865.4897 8501.8613 -7865.6367 8500.4727 c
+-7865.644 8500.4072 -7865.6958 8499.626 -7865.707 8499.5625 C
+-7865.6816 8499.2852 -7865.7598 8498.7256 -7865.8057 8498.4258 c
+f
+-7876.2646 8507.7334 m
+-7876.9946 8515.916 -7871.5015 8515.1191 v
+-7868.3682 8514.0186 -7869.4414 8511.1211 v
+-7869.6426 8509.752 -7871.7847 8508.498 v
+-7872.146 8508.25 -7872.7632 8507.1016 v
+-7873.1294 8505.5977 -7874.5186 8505.2979 v
+-7876.0762 8505.251 -7876.2646 8507.7334 v
+f
+-7850.7646 8516.4971 m
+F
+-7850.0762 8514.3408 m
+-7850.7847 8513.1934 -7853.8848 8513.6279 Y
+-7854.811 8513.6885 -7855.3799 8513.1113 Y
+-7857.8394 8509.0918 -7861.0386 8509.8857 -7861.4082 8509.9932 C
+-7861.4097 8509.9863 L
+-7864.999 8510.6045 -7865.2666 8515.6035 V
+-7865.4912 8516.3828 -7866.335 8516.7695 V
+-7869.2695 8517.8613 -7869.3481 8519.208 V
+-7869.8999 8521.1152 -7867.6006 8521.7422 V
+-7865.6792 8522.2568 -7863.7886 8519.8945 V
+-7862.6113 8518.6797 -7859.5762 8517.9395 V
+-7859.5728 8517.9531 L
+-7856.3594 8517.0459 -7854.6392 8517.5889 Y
+-7851.8521 8518.7676 -7850.4063 8517.4014 Y
+-7848.6826 8515.7559 -7850.0762 8514.3408 Y
+f
+-7863.9834 8497.8789 m
+-7864.5854 8496.2002 -7864.2822 8494.4775 -7863.0327 8493.9229 c
+-7861.7842 8493.3672 -7860.3384 8494.3164 -7859.4585 8495.8672 c
+-7859.3286 8496.0957 -7858.8359 8497.165 -7858.7632 8497.3906 C
+-7858.7065 8497.4785 -7858.6792 8497.5684 -7858.6362 8497.667 c
+-7858.1289 8498.8086 -7858.5122 8500.5303 -7859.8105 8501.1074 c
+-7861.1089 8501.6855 -7862.6279 8501.0527 -7863.1582 8499.7617 c
+-7863.1831 8499.7002 -7863.5078 8498.9883 -7863.5298 8498.9268 C
+-7863.6831 8498.6963 -7863.8809 8498.166 -7863.9834 8497.8789 c
+f
+-7849.7129 8500.9316 m
+-7845.1802 8507.7822 -7850.3911 8509.6943 v
+-7853.6714 8510.2168 -7854.103 8507.1572 v
+-7854.5786 8505.8564 -7853.29 8503.7354 v
+-7853.0903 8503.3447 -7853.0938 8502.04 v
+-7853.4858 8500.5449 -7852.4082 8499.6182 v
+-7851.0591 8498.8359 -7849.7129 8500.9316 v
+f
+U
+u
+-7824.7358 8550.1074 m
+-7824.3687 8548.3623 -7824.9048 8546.6963 -7826.2183 8546.3164 c
+-7827.5322 8545.9375 -7828.8345 8547.0752 -7829.4937 8548.7324 c
+-7829.5903 8548.9775 -7829.9326 8550.1025 -7829.9746 8550.3369 C
+-7830.0176 8550.4326 -7830.0322 8550.5244 -7830.0625 8550.6279 c
+-7830.4087 8551.8271 -7829.7935 8553.4805 -7828.4282 8553.875 c
+-7827.063 8554.2695 -7825.645 8553.4365 -7825.2969 8552.085 c
+-7825.2793 8552.0205 -7825.0552 8551.2705 -7825.0425 8551.207 C
+-7824.9214 8550.9551 -7824.7983 8550.4053 -7824.7358 8550.1074 c
+f
+-7838.2705 8554.6172 m
+-7841.8242 8562.0244 -7836.3999 8563.2061 v
+-7833.0801 8563.2754 -7833.0688 8560.1846 v
+-7832.7778 8558.8311 -7834.3433 8556.9072 v
+-7834.5942 8556.5459 -7834.7695 8555.2539 v
+-7834.5854 8553.7188 -7835.7793 8552.9492 v
+-7837.2222 8552.3594 -7838.2705 8554.6172 v
+f
+-7817.4648 8571.7695 m
+F
+-7816.063 8569.9912 m
+-7816.3247 8568.6689 -7819.3799 8567.9883 Y
+-7820.27 8567.7197 -7820.5986 8566.9795 Y
+-7821.4922 8562.3535 -7824.7666 8561.9746 -7825.1494 8561.9453 C
+-7825.1494 8561.9395 L
+-7828.7271 8561.2588 -7830.731 8565.8467 V
+-7831.2153 8566.4961 -7832.1416 8566.5625 V
+-7835.272 8566.5557 -7835.8169 8567.7891 V
+-7837.0039 8569.3809 -7835.0713 8570.7764 V
+-7833.4526 8571.9316 -7830.853 8570.3818 V
+-7829.3242 8569.6582 -7826.2222 8570.0293 V
+-7826.2231 8570.042 L
+-7822.896 8570.3213 -7821.4766 8571.4326 Y
+-7819.2793 8573.5146 -7817.4463 8572.7432 Y
+-7815.2554 8571.8057 -7816.063 8569.9912 Y
+f
+-7822.8374 8550.2354 m
+-7822.813 8548.4512 -7821.9258 8546.9453 -7820.5601 8546.8633 c
+-7819.1943 8546.7803 -7818.1743 8548.1768 -7817.895 8549.9385 c
+-7817.854 8550.1973 -7817.7666 8551.3711 -7817.7778 8551.6094 C
+-7817.7559 8551.7109 -7817.7617 8551.8037 -7817.7559 8551.9121 c
+-7817.6807 8553.1592 -7818.644 8554.6367 -7820.0625 8554.7217 c
+-7821.4814 8554.8066 -7822.6826 8553.6826 -7822.7246 8552.2871 c
+-7822.7271 8552.2217 -7822.7822 8551.4404 -7822.7798 8551.375 C
+-7822.8433 8551.1045 -7822.8423 8550.54 -7822.8374 8550.2354 c
+f
+-7811.0186 8557.5625 m
+-7809.1777 8565.5684 -7814.7271 8565.5303 v
+-7817.9834 8564.8691 -7817.3154 8561.8516 v
+-7817.3032 8560.4668 -7815.353 8558.9326 v
+-7815.0278 8558.6377 -7814.5742 8557.415 v
+-7814.417 8555.876 -7813.083 8555.3877 v
+-7811.5454 8555.1279 -7811.0186 8557.5625 v
+f
+U
+U
+1 Ap
+-7884 8586 m
+-7884 8481 L
+-7803 8481 L
+-7803 8586 L
+-7884 8586 L
+n
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 42)
+0 A
+u
+0 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7857.4609 8559.085 m
+-7885 8559.085 L
+-7885 8586.624 L
+-7857.4609 8586.624 L
+-7857.4609 8559.085 L
+n
+0 O
+0 0.55 1 0.12 k
+-7871.7598 8577.3623 m
+-7871.7598 8587 L
+-7870.6343 8587 L
+-7870.6343 8577.3623 L
+-7871.7598 8577.3623 L
+f
+0 0.55 1 0.3 k
+-7875.4233 8572.876 m
+-7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c
+-7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C
+-7857.5718 8572.874 L
+-7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c
+-7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C
+f
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 45)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7885 8543.918 m
+-7885 8587 L
+-7798.2217 8587 L
+-7798.2217 8543.918 L
+-7885 8543.918 L
+n
+u
+u
+0 O
+0 0 0 1 k
+-7825.2217 8573.2363 m
+-7825.2217 8581.0742 L
+-7813.2217 8574.1445 L
+-7801.2217 8567.2168 L
+-7813.2217 8560.2891 L
+-7825.2217 8553.3613 L
+-7825.2217 8561.4824 L
+-7883.9351 8547.7168 L
+-7870.9878 8566.8027 L
+-7885 8587 L
+-7825.2217 8573.2363 L
+f
+0 1 1 0.1 k
+0 R
+0 0 0 1 K
+-7823.2217 8570.2363 m
+-7823.2217 8578.0742 L
+-7811.2217 8571.1445 L
+-7799.2217 8564.2168 L
+-7811.2217 8557.2891 L
+-7823.2217 8550.3613 L
+-7823.2217 8558.4824 L
+-7881.9351 8544.7168 L
+-7867.2754 8564.3594 L
+-7881.9351 8584 L
+-7823.2217 8570.2363 L
+b
+U
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 50)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884 8586 m
+-7756.877 8586 L
+-7756.877 8538.415 L
+-7884 8538.415 L
+-7884 8586 L
+n
+u
+*u
+0 O
+0.9529 0.949 0.1961 0.0745 k
+-7857.793 8570.417 m
+-7857.8232 8570.2676 L
+-7859.9849 8564.3643 -7860.9438 8561.6377 -7861.2754 8560.2891 c
+-7861.3657 8560.2891 L
+-7861.6953 8561.6074 -7862.7754 8564.335 -7864.9673 8570.2676 c
+-7864.9966 8570.417 L
+-7857.793 8570.417 l
+f
+1 D
+-7868.1182 8578.9678 m
+-7869.6191 8582.5371 -7870.3994 8584.709 -7868.1182 8584.917 c
+-7868.1182 8585.9678 L
+-7870.6992 8585.9375 -7873.5806 8585.917 -7876.3418 8585.917 c
+-7880.0649 8585.917 -7882.5273 8585.9375 -7884 8585.9678 c
+-7884 8584.917 L
+-7882.1064 8584.709 -7881.0542 8582.5674 -7873.5513 8565.5029 c
+-7861.6953 8538.415 L
+-7859.8638 8538.415 L
+-7848.1582 8565.5029 L
+-7840.8047 8582.5078 -7839.7246 8584.709 -7837.8887 8584.917 c
+-7837.8887 8585.9678 L
+-7839.5142 8585.9375 -7841.916 8585.917 -7845.5767 8585.917 c
+-7848.5488 8585.917 -7851.6694 8585.9375 -7854.7026 8585.9678 c
+-7854.7026 8584.917 L
+-7852.481 8584.709 -7853.3218 8582.5078 -7854.7617 8578.9678 C
+-7868.1182 8578.9678 l
+f
+*U
+*u
+0 D
+-7813.0762 8554.0811 m
+-7813.0762 8550.4717 -7815.3535 8548.0947 -7819.1294 8548.0947 c
+-7820.2383 8548.0947 -7821.0767 8548.2158 -7821.5273 8548.2451 c
+-7821.5273 8560.5479 L
+-7820.8672 8560.6084 -7820.208 8560.6084 -7819.729 8560.6084 c
+-7818.2002 8560.6084 -7816.7026 8560.127 -7815.6841 8559.4053 c
+-7814.3945 8558.5332 -7813.0762 8556.7881 -7813.0762 8554.1416 C
+-7813.0762 8554.0811 l
+f
+1 D
+-7832.0806 8558.3926 m
+-7832.0806 8542.6445 -7832.0806 8540.4287 -7834.542 8540.2783 c
+-7834.542 8539.3184 L
+-7833.042 8539.2588 -7830.3174 8539.1992 -7827.5664 8539.1689 c
+-7825.6538 8539.1084 -7822.3945 8539.0186 -7820.1479 8538.9775 c
+-7816.582 8538.9775 -7813.585 8539.4258 -7811.0049 8540.2627 c
+-7806.353 8541.8477 -7801.9702 8545.8525 -7801.9702 8553.6602 c
+-7801.9702 8558.7432 -7804.4014 8562.3193 -7806.5034 8564.0605 c
+-7807.583 8565.0215 -7808.8135 8565.832 -7809.7744 8566.3125 c
+-7809.7744 8566.4629 L
+-7807.5234 8569.4912 -7805.6025 8572.0625 -7799.3906 8580.6426 c
+-7797.5 8583.0645 -7795.9102 8584.7383 -7794.7402 8584.9775 c
+-7794.7402 8586 L
+-7796.6602 8586 -7799 8585.8848 -7801.1294 8585.8848 c
+-7803.3511 8585.8848 -7804.8521 8586 -7806.4424 8586 c
+-7807.6729 8586 -7808.7241 8585.9404 -7809.5039 8585.2725 c
+-7813.0151 8579.8477 -7816.9121 8573.7559 -7820.1182 8568.7139 c
+-7820.5078 8568.7139 -7820.957 8568.7139 -7821.5273 8568.7139 c
+-7821.5273 8571.2852 L
+-7821.5273 8582.5264 -7821.437 8584.7686 -7819.1895 8584.9775 c
+-7819.1895 8585.9697 L
+-7820.6279 8585.9404 -7823.9194 8585.915 -7826.6992 8585.915 c
+-7829.9287 8585.915 -7832.8921 8585.9404 -7834.5122 8585.9697 c
+-7834.5122 8584.9775 L
+-7832.0518 8584.7686 -7832.0806 8582.5264 -7832.0806 8565.5918 C
+-7832.0806 8558.3926 l
+f
+*U
+*u
+0 D
+-7781.4561 8565.5928 m
+-7781.4561 8582.4941 -7781.4561 8584.6484 -7784.2832 8584.9775 C
+-7784.2832 8585.9697 l
+-7782.3887 8585.9404 -7779.0542 8585.915 -7775.7822 8585.915 c
+-7772.6294 8585.915 -7769.5688 8585.9404 -7767.2881 8585.9697 C
+-7767.2881 8584.9775 l
+-7770.2578 8584.9775 -7770.2881 8582.5244 -7770.2881 8565.5928 C
+-7770.2881 8548.1514 L
+-7762.8193 8548.1514 l
+-7759.999 8548.1514 -7758.5298 8548.96 -7757.8994 8551.2627 C
+-7756.9072 8551.2627 l
+-7756.9072 8546.4697 -7756.877 8542.415 -7756.877 8539.1709 c
+-7761.3486 8539.2012 -7766.748 8539.2314 -7772.0601 8539.2314 C
+-7779.7446 8539.2314 l
+-7784.5537 8539.2314 -7789.9966 8539.2012 -7794.9614 8539.1709 c
+-7794.9614 8542.3848 -7794.9326 8546.4697 -7794.9326 8551.2627 C
+-7793.9072 8551.2627 l
+-7793.3657 8549.1094 -7791.771 8548.1514 -7788.9438 8548.1514 C
+-7781.4561 8548.1514 l
+-7781.4561 8565.5928 L
+f
+*U
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 62)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7885 8587 m
+-7885 8548.7305 L
+-7846.7305 8548.7305 L
+-7846.7305 8587 L
+-7885 8587 L
+n
+0 O
+1 0.14 0.09 0 k
+-7846.7305 8569.9043 m
+-7846.7305 8561.3408 L
+-7885 8561.3408 L
+-7885 8569.9043 L
+-7846.7305 8569.9043 L
+f
+-7846.7305 8573.0967 m
+-7846.7305 8572.4229 L
+-7885 8572.4229 L
+-7885 8573.0967 L
+-7846.7305 8573.0967 L
+f
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 63)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7885 8587 m
+-7885 8548.7305 L
+-7846.7305 8548.7305 L
+-7846.7305 8587 L
+-7885 8587 L
+n
+0 O
+1 0.14 0.09 0 k
+-7846.7305 8565.8262 m
+-7846.7305 8574.3896 L
+-7859.3408 8574.3896 L
+-7859.3408 8587 L
+-7867.9038 8587 L
+-7867.9063 8565.8262 L
+-7867.9038 8565.8262 L
+-7867.9038 8565.8252 L
+-7846.7305 8565.8262 L
+f
+-7846.7305 8563.3076 m
+-7870.4233 8563.3076 L
+-7870.4233 8587 L
+-7871.0967 8587 L
+-7871.0977 8562.6328 L
+-7846.7305 8562.6328 L
+-7846.7305 8563.3076 L
+f
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 64)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7885 8586.999 m
+-7885 8548.7285 L
+-7846.7305 8548.7285 L
+-7846.7305 8586.999 L
+-7885 8586.999 L
+n
+0 O
+1 0.14 0.09 0 k
+-7846.7305 8561.3389 m
+-7872.3896 8561.3389 L
+-7872.3896 8586.999 L
+-7863.8262 8587 L
+-7863.8262 8569.9033 L
+-7846.7305 8569.9033 L
+-7846.7305 8561.3389 L
+f
+-7846.7305 8572.4219 m
+-7861.3081 8572.4219 L
+-7861.3081 8587 L
+-7860.6338 8587 L
+-7860.6338 8573.0957 L
+-7846.7305 8573.0957 L
+-7846.7305 8572.4219 L
+f
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 65)
+0 A
+u
+1 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7857.0625 8559.4609 m
+-7884.6025 8559.4609 L
+-7884.6025 8587 L
+-7857.0625 8587 L
+-7857.0625 8559.4609 L
+n
+0 O
+0 0.55 1 0.12 k
+-7856.8418 8572.7002 m
+-7885 8572.7002 L
+-7885 8573.8252 L
+-7856.8418 8573.8252 L
+-7856.8418 8572.7002 L
+f
+u
+0 0.55 1 0.3 k
+-7883.9814 8560.5215 m
+-7884.4102 8562.5254 -7883.1865 8566.1514 -7880.0874 8569.251 c
+-7876.9878 8572.3496 -7873.3457 8573.6602 -7871.3594 8573.1455 C
+-7871.3594 8573.1455 L
+-7870.875 8571.1895 -7872.1519 8567.5117 -7875.25 8564.4141 c
+-7878.3457 8561.3184 -7882.0122 8560.1064 -7883.9814 8560.5215 C
+f
+0 0.39 0.7 0.12 k
+-7883.9814 8585.9912 m
+-7884.4102 8583.9883 -7883.1865 8580.3613 -7880.0874 8577.2617 c
+-7876.9878 8574.1641 -7873.3457 8572.8535 -7871.3594 8573.3672 C
+-7871.3594 8573.3672 L
+-7870.875 8575.3242 -7872.1519 8579.001 -7875.25 8582.0996 c
+-7878.3457 8585.1953 -7882.0122 8586.4063 -7883.9814 8585.9912 C
+f
+U
+u
+0 0.55 1 0.3 k
+-7870.1782 8585.9912 m
+-7870.6074 8583.9883 -7869.3838 8580.3613 -7866.2842 8577.2617 c
+-7863.1855 8574.1641 -7859.543 8572.8535 -7857.5576 8573.3672 C
+-7857.5566 8573.3672 L
+-7857.0718 8575.3242 -7858.3496 8579.001 -7861.4473 8582.0996 c
+-7864.543 8585.1953 -7868.209 8586.4063 -7870.1782 8585.9912 C
+f
+0 0.39 0.7 0.12 k
+-7870.1782 8560.5215 m
+-7870.6074 8562.5254 -7869.3838 8566.1514 -7866.2842 8569.251 c
+-7863.1855 8572.3496 -7859.543 8573.6602 -7857.5576 8573.1455 C
+-7857.5566 8573.1455 L
+-7857.0718 8571.1895 -7858.3496 8567.5117 -7861.4473 8564.4141 c
+-7864.543 8561.3184 -7868.209 8560.1064 -7870.1782 8560.5215 C
+f
+U
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 67)
+0 A
+u
+0 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7857.4609 8559.085 m
+-7885 8559.085 L
+-7885 8586.624 L
+-7857.4609 8586.624 L
+-7857.4609 8559.085 L
+n
+0 O
+0 0.55 1 0.12 k
+-7871.7598 8577.3623 m
+-7871.7598 8587 L
+-7870.6343 8587 L
+-7870.6343 8577.3623 L
+-7871.7598 8577.3623 L
+f
+0 0.55 1 0.3 k
+-7875.4233 8572.876 m
+-7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c
+-7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C
+-7857.5718 8572.874 L
+-7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c
+-7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C
+f
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 69)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7857.4609 8559.4609 m
+-7885 8559.4609 L
+-7885 8587 L
+-7857.4609 8587 L
+-7857.4609 8559.4609 L
+n
+0 O
+0 0.55 1 0.3 k
+-7875.4233 8573.252 m
+-7874.3096 8571.5313 -7870.8809 8569.833 -7866.4966 8569.833 c
+-7862.1152 8569.833 -7858.6138 8571.4824 -7857.5718 8573.25 C
+-7857.5718 8573.25 L
+-7858.6138 8574.9766 -7862.1152 8576.6738 -7866.4966 8576.6738 c
+-7870.875 8576.6738 -7874.3242 8574.9375 -7875.4233 8573.252 C
+f
+U
+%AI8_EndBrushPattern
+%AI8_BeginBrushPattern
+(New Pattern 83)
+0 A
+u
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+-7884 8585.9355 m
+-7670.4009 8585.9355 L
+-7670.4009 8578.1348 L
+-7884 8578.1348 L
+-7884 8585.9355 L
+n
+0 O
+0 0 0 1 k
+-7884 8582.0352 m
+-7873.9858 8584.5273 -7867.187 8585.875 -7855.2007 8585.9355 c
+-7842.2183 8586 -7777.2002 8585.9355 y
+-7712.1816 8586 -7699.2002 8585.9355 v
+-7687.2129 8585.875 -7680.415 8584.5273 -7670.4009 8582.0352 C
+-7680.415 8579.543 -7687.2129 8578.1953 -7699.2002 8578.1348 c
+-7712.1816 8578.0693 -7777.2002 8578.1348 y
+-7842.2183 8578.0693 -7855.2007 8578.1348 v
+-7867.187 8578.1953 -7873.9858 8579.543 -7884 8582.0352 C
+f
+U
+%AI8_EndBrushPattern
+%AI5_End_NonPrinting--
+%AI5_Begin_NonPrinting
+Np
+4 Bn
+%AI5_BeginGradient: (Black, White)
+(Black, White) 0 2 Bd
+[
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+0 %_Br
+[
+0 0 50 100 %_BS
+%_0 0 50 100 Bs
+1 0 50 0 %_BS
+%_1 0 50 0 Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Chrome)
+(Chrome) 0 6 Bd
+[
+0
+<
+464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B
+3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130
+3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272626262625
+2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1B1B1B1B1A
+1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F
+0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504
+04040403030302020202010101010000
+>
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+<
+1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A
+1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515
+15151515151414141414141414131313131313131312121212121212121211111111111111111010
+1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C
+0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707
+07060606060606060606050505050505050504040404040404040303030303030303030202020202
+02020201010101010101010000000000
+>
+1 %_Br
+0
+0.275
+1
+<
+6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544
+434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F
+>
+1 %_Br
+0
+<
+00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B
+0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516
+161617171717181818181919191A1A1A1A1B1B1B1C1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021
+212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C
+2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637
+373738383838393939393A3A3A3B3B3B3B3C3C3C3D3D3D3D3E3E3E3E3F3F3F404040404141414142
+42424343434344444444454545464646
+>
+<
+000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
+505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
+78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
+A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
+F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
+>
+<
+00000101020203030304040505050606070708080809090A0A0B0B0B0C0C0D0D0D0E0E0F0F101010
+1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121
+222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232
+32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243
+434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354
+54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5E5F5F606061616162626363646464
+6565666666676768686969696A6A6B6B
+>
+1 %_Br
+1
+0 %_Br
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+<
+4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141
+414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535
+35343434333333323232323131313030302F2F2F2E2E2E2E2D2D2D2C2C2C2B2B2B2B2A2A2A292929
+282828282727272626262525252524242423232322222222212121202020201F1F1F1E1E1E1D1D1D
+1D1C1C1C1B1B1B1A1A1A1A1919191818181717171616161615151514141413131313121212111111
+101010100F0F0F0E0E0E0D0D0D0D0C0C0C0B0B0B0A0A0A0A09090908080807070707060606050505
+04040404030303020202010101010000
+>
+0
+0
+1 %_Br
+[
+1 0 50 92 %_BS
+%_1 0 50 92 Bs
+0 0.275 1 0.12 1 50 59 %_BS
+%_0 0.275 1 0.12 1 50 59 Bs
+0 0.275 1 0.42 1 50 50 %_BS
+%_0 0.275 1 0.42 1 50 50 Bs
+1 0 50 49 %_BS
+%_1 0 50 49 Bs
+1 0 50 41 %_BS
+%_1 0 50 41 Bs
+1 0.3 0 0 1 50 0 %_BS
+%_1 0.3 0 0 1 50 0 Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Rainbow)
+(Rainbow) 0 6 Bd
+[
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+1
+0
+0
+1 %_Br
+1
+<
+0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E
+2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556
+5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E
+7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6
+A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE
+CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6
+F7F8F9FAFBFCFDFEFF
+>
+0
+0
+1 %_Br
+1
+<
+00000000000000000000000000000000000001010101010101010101010101010101010101010101
+01010101010101010101010101010202020202020202020202020202020202020202020202020202
+02020202020202020202030303030303030303030303030303030303030303030303030303030303
+03030303030304040404040404040404040404040404040404040404040404040404040404040404
+04040505050505050505050505050505050505050505050505050505050505050505050505050606
+06060606060606060606060606060606060606060606060606060606060606060607070707070707
+07070707070707070707070707070707
+>
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+0
+1 %_Br
+<
+000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
+505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
+78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
+A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
+F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
+>
+0
+1
+0
+1 %_Br
+0
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+1
+0
+1 %_Br
+[
+0 1 0 0 1 50 100 %_BS
+%_0 1 0 0 1 50 100 Bs
+1 1 0 0 1 50 80 %_BS
+%_1 1 0 0 1 50 80 Bs
+1 0.0279 0 0 1 50 60 %_BS
+%_1 0.0279 0 0 1 50 60 Bs
+1 0 1 0 1 50 40 %_BS
+%_1 0 1 0 1 50 40 Bs
+0 0 1 0 1 50 20 %_BS
+%_0 0 1 0 1 50 20 Bs
+0 1 1 0 1 50 0 %_BS
+%_0 1 1 0 1 50 0 Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Yellow & Orange Radial)
+(Yellow & Orange Radial) 1 2 Bd
+[
+0
+<
+0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122
+232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748
+494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F
+707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C
+>
+<
+FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9
+F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2
+F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB
+EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E6
+>
+0
+1 %_Br
+[
+0 0 1 0 1 52 19 %_BS
+%_0 0 1 0 1 52 19 Bs
+0 0.55 0.9 0 1 50 100 %_BS
+%_0 0.55 0.9 0 1 50 100 Bs
+BD
+%AI5_EndGradient
+%AI5_End_NonPrinting--
+%AI5_BeginPalette
+0 0 Pb
+0 0 0 0 k
+(WHITE) Pc
+1 1 1 1 ([Registration]) 0 Xs
+([Registration]) Pc
+0 0 0 1 k
+(C=0 M=0 Y=0 K=100) Pc
+Bb
+2 (Black, White) -7885 8587 0 0 1 0 0 1 0 0 Bg
+0 BB
+(Black, White) Pc
+Bb
+2 (Chrome) -7885 8587 0 0 1 0 0 1 0 0 Bg
+0 BB
+(Chrome) Pc
+Bb
+2 (Rainbow) -7885 8587 0 0 1 0 0 1 0 0 Bg
+0 BB
+(Rainbow) Pc
+Bb
+0 0 0 0 Bh
+2 (Yellow & Orange Radial) -7885 8587 0 0 1 0 0 1 0 0 Bg
+0 BB
+(Yellow & Orange Radial) Pc
+(Brick) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
+(Brick) Pc
+(Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
+(Confetti) Pc
+(Leaves - Fall ) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
+(Leaves - Fall ) Pc
+(Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
+(Stripes) Pc
+0.91 0.01 0.93 0 (PANTONE 354 2X CVC) 0 x
+(PANTONE 354 2X CVC) Pc
+0 1 0.91 0 (PANTONE 485 CVC) 0 x
+(PANTONE 485 CVC) Pc
+0 0.51 1 0 (PANTONE 152 CVC) 0 x
+(PANTONE 152 CVC) Pc
+PB
+%AI5_EndPalette
+%AI5_Begin_NonPrinting
+Np
+%AI8_BeginPluginObject
+(Adobe Brush Manager Order)
+(Adobe Brush Manager Order)
+( Adobe Calligraphic Brush Tool/ 6 pt Flat / Adobe Calligraphic Brush T) -
+(ool/ 10 pt Oval/ Adobe Calligraphic Brush Tool/ 12 pt Oval / Adobe Cal) -
+(ligraphic Brush Tool/ 20 pt Oval/ Adobe Calligraphic Brush Tool/ 25 pt) -
+( Round / Adobe Calligraphic Brush Tool/ 50 pt Flat/ Adobe Scatter Brus) -
+(h Tool/ Dog Tracks/ Adobe Scatter Brush Tool/ Fall Leaf/ Adobe Scatter) -
+( Brush Tool/ Ladybug/ Adobe Scatter Brush Tool/ Push Pin/ Adobe Scatte) -
+(r Brush Tool/ Strawberry/ Adobe Scatter Brush Tool/ Twinkle Star / Ado) -
+(be ArtOnPath Brush Tool/ Marker/ Adobe ArtOnPath Brush Tool/ Tapered S) -
+(troke/ Adobe ArtOnPath Brush Tool/ Arrow/ Adobe ArtOnPath Brush Tool/ ) -
+(Paintbrush/ Adobe ArtOnPath Brush Tool/ Type/ Adobe PatternOnPath Brus) -
+(h Tool/ Double Lines/ Adobe PatternOnPath Brush Tool/ Laurel/ Adobe Pa) -
+(tternOnPath Brush Tool/ Rope /) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Calligraphic Brush Tool)
+(6 pt Flat )
+(1 4 8 10 10 90 90 2 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Calligraphic Brush Tool)
+(10 pt Oval)
+(1 1 19 15 15 130 130 2 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Calligraphic Brush Tool)
+(12 pt Oval )
+(1 7 17 45 45 0 0 2 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Calligraphic Brush Tool)
+(20 pt Oval)
+(1 20 20 20 100 40 80 0 2 1 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Calligraphic Brush Tool)
+(25 pt Round )
+(1 10 40 100 100 0 0 2 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Calligraphic Brush Tool)
+(50 pt Flat)
+(1 40 60 0 0 44 44 0 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe ArtOnPath Brush Tool)
+(Arrow)
+(1 / New Pattern 45/ / / / / 5 0.898039 0 0 /  2 0 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe ArtOnPath Brush Tool)
+(Marker)
+(1 / New Pattern 8/ / / / / 0 0 /  1 1 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe ArtOnPath Brush Tool)
+(Paintbrush)
+(1 / New Pattern 5/ / / / / 1 0.5 0.85 1 0.45 /  0 0 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe ArtOnPath Brush Tool)
+(Tapered Stroke)
+(1 / New Pattern 83/ / / / / 1 0 0 0 1 /  1 1 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe ArtOnPath Brush Tool)
+(Type)
+(1 / New Pattern 50/ / / / / 1 0.952941 0.94902 0.196078 0.0745098 /  1) -
+( 0 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe PatternOnPath Brush Tool)
+(Double Lines)
+(1 / New Pattern 62/ New Pattern 63/ New Pattern 64/ / / 1 1 0.14 0.09 ) -
+(0 /  1 0 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe PatternOnPath Brush Tool)
+(Laurel)
+(1 / New Pattern 65/ New Pattern 42/ New Pattern 67/ / New Pattern 69/ ) -
+(1 0 0.55 1 0.3 /  1 0 1 0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe PatternOnPath Brush Tool)
+(Rope )
+(1 / New Pattern 1/ / / New Pattern 3/ New Pattern 6/ 5 0 0 0 /  1 0 1 ) -
+(0 1 0 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Scatter Brush Tool)
+(Dog Tracks)
+(1 /New Pattern 41/ 1 0 0 0 1 / 0 1 1 0 1 1 0 0 0 0 -90 -90 0 1 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Scatter Brush Tool)
+(Fall Leaf)
+(1 /New Pattern 34/ 1 0.0745 0.9 0.9019 0.18 / 0 0.602793 1 1 0.1 1 1 -) -
+(1 1 1 -180 180 1 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Scatter Brush Tool)
+(Ladybug)
+(1 /New Pattern 10/ 5 0.898039 0 0 / 0 1 1 0 0.803911 1.2 1 -1.55 1.55 ) -
+(1 -180 180 1 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Scatter Brush Tool)
+(Push Pin)
+(1 /New Pattern 36/ 1 0.025 0.1 0.475 0 / 0 1 1 0 0.401676 1 1 -1.06145) -
+( 1.06 1 -180 180 1 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Scatter Brush Tool)
+(Strawberry)
+(1 /New Pattern 37/ 1 0 0 0 1 / 0 0.803911 1 1 0.803911 1 1 -0.5 0.5 1 ) -
+(-75 75.419 1 0 0) .
+%AI8_EndPluginObject
+%AI8_BeginPluginObject
+(Adobe Scatter Brush Tool)
+(Twinkle Star )
+(1 /New Pattern 2/ 0 1 / 1 0.5 1 1 0.25 1 1 -0.5 0.5 1 0 0 0 0 0) .
+%AI8_EndPluginObject
+%AI5_End_NonPrinting--
+%AI5_Begin_NonPrinting
+Np
+%AI8_PluginGroupInfo
+(Adobe Path Blends) (Adobe Blends Plugin) (Live Blends)
+%AI8_PluginGroupInfo
+(Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool)
+%AI8_PluginGroupInfo
+(Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool)
+%AI8_PluginGroupInfo
+(Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool)
+%AI8_PluginGroupInfo
+(Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool)
+%AI5_End_NonPrinting--
+%%EndSetup
+%AI5_BeginLayer
+1 1 0 1 0 0 1 8 0 0 0 0 50 Lb
+(border) Ln
+0 A
+1 Ap
+0 R
+0 0 0 1 K
+800 Ar
+0 J 0 j 5.2327 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+390.7588 335.9102 m
+390.7588 333.4834 388.5283 331.5156 385.7754 331.5156 C
+220.209 331.5156 L
+217.457 331.5156 215.2256 333.4834 215.2256 335.9102 C
+215.2256 481.3916 L
+215.2256 483.8184 217.457 485.7856 220.209 485.7856 C
+385.7754 485.7856 L
+388.5283 485.7856 390.7588 483.8184 390.7588 481.3916 C
+390.7588 335.9102 L
+s
+LB
+%AI5_EndLayer--
+%AI5_BeginLayer
+1 1 0 1 0 0 1 20 102 102 0 0 50 Lb
+(tv) Ln
+0 A
+0 O
+0 0 0 1 k
+0 R
+0 0 0 1 K
+800 Ar
+0 J 0 j 3 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+377.3408 366.4893 m
+377.3408 363.1758 374.6543 360.4893 371.3408 360.4893 C
+234.6743 360.4893 L
+231.3608 360.4893 228.6743 363.1758 228.6743 366.4893 C
+228.6743 461.1563 L
+228.6743 464.4697 231.3608 467.1563 234.6743 467.1563 C
+371.3408 467.1563 L
+374.6543 467.1563 377.3408 464.4697 377.3408 461.1563 C
+377.3408 366.4893 L
+b
+0 0 0 0 k
+360.3711 382.1641 m
+360.3711 378.8506 357.6846 376.1641 354.3711 376.1641 C
+253.0381 376.1641 L
+249.7246 376.1641 247.0381 378.8506 247.0381 382.1641 C
+247.0381 444.1641 L
+247.0381 447.4775 249.7246 450.1641 253.0381 450.1641 C
+354.3711 450.1641 L
+357.6846 450.1641 360.3711 447.4775 360.3711 444.1641 C
+360.3711 382.1641 L
+b
+u
+0 Ap
+0 0 0 1 k
+1 w
+325.7354 369.5391 m
+322.2354 375.0391 318.2354 351.5391 342.2354 344.5391 c
+265.4619 344.5391 l
+289.4619 351.5391 285.4619 375.0391 281.9619 369.5391 c
+325.7354 369.5391 l
+b
+1 Ap
+1.0096 w
+342.9453 343.0273 m
+342.9453 342.1924 342.2539 341.5156 341.4043 341.5156 C
+266.0039 341.5156 L
+265.1523 341.5156 264.4639 342.1924 264.4639 343.0273 C
+264.4639 343.0273 L
+264.4639 343.8623 265.1523 344.5391 266.0039 344.5391 C
+341.4043 344.5391 L
+342.2539 344.5391 342.9453 343.8623 342.9453 343.0273 C
+342.9453 343.0273 L
+b
+U
+LB
+%AI5_EndLayer--
+%AI5_BeginLayer
+1 1 1 1 0 0 1 1 255 79 79 0 50 Lb
+(flames!) Ln
+0 A
+u
+0 Ap
+0 O
+0 0.51 1 0 (PANTONE 152 CVC) 0 x
+0 R
+0 0 0 1 K
+800 Ar
+0 J 0 j 3 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+268.1118 375.1055 m
+278.0723 371.9902 285.0166 362.1172 307.6953 356.7012 C
+328.5361 364.6758 339.9619 383.5098 345.8936 389.666 C
+343.8018 403.9888 340.0576 432.1499 332.6553 443.0522 C
+319.5771 453.9092 308.0566 485.27 318.7891 505.4521 C
+325.9775 515.9902 288.2168 468.6289 304.229 442.3589 C
+318.9365 416.1494 313.5049 417.688 311.5088 418.7856 C
+306.4565 424.1489 308.7578 428.8916 297.6426 440.9727 C
+282.4565 457.4297 280.1528 461.7734 296.6025 495.0522 C
+301.0166 499.0298 277.292 523.6685 275.7539 530.4106 C
+277.292 523.6685 293.3374 492.3101 277.8828 480.4922 C
+265.1763 462.8696 265.939 450.7354 264.7095 445.1323 C
+268.3765 438.5493 275.417 425.7495 278.5762 413.9326 C
+284.3765 406.5493 284.7471 391.6973 275.8027 404.2261 C
+273.8164 414.5488 252.376 431.5088 257.4292 460.0386 C
+269.9766 491.3496 240.8564 433.4292 244.603 410.4658 C
+256.2168 392.4688 270.3921 380.3086 268.1118 375.1055 C
+b
+0 1 0.91 0 (PANTONE 485 CVC) 0 x
+1 w
+263.0464 378.707 m
+271.0464 370.041 280.3799 358.707 303.0464 360.041 c
+325.7129 361.373 339.7129 382.041 341.7129 392.707 c
+343.7129 403.374 337.7129 432.708 327.0459 444.041 c
+316.3799 455.374 304.3794 488.041 313.7129 504.041 c
+323.0469 520.041 283.7129 470.707 299.7129 443.374 c
+315.7129 416.041 310.0547 417.644 306.7129 420.7075 c
+302.7129 424.374 305.1094 429.314 293.3799 442.041 c
+277.7129 459.041 275.3135 463.5659 292.3799 494.041 c
+297.0464 502.374 272.333 528.0396 y
+289.0469 495.3745 274.3799 480.041 v
+259.7129 464.7075 260.5073 452.0679 261.7129 446.041 c
+263.0464 439.374 270.3799 426.041 275.0464 416.041 c
+279.7129 406.041 280.0986 390.5684 272.3799 406.7075 c
+268.7129 414.374 246.3794 432.0405 254.7129 460.374 c
+264.7129 494.374 234.3799 434.041 242.3799 412.7075 c
+250.3799 391.373 263.0464 378.707 y
+b
+U
+LB
+%AI5_EndLayer--
+%AI5_BeginLayer
+1 1 0 1 0 0 1 2 79 255 79 0 50 Lb
+(text) Ln
+0 A
+1 To
+1 0 0 1 179.3335 327.2939 0 Tp
+0 Tv
+1 Ap
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+0 XR
+428.666 249.9619 m
+428.666 327.2939 L
+179.3335 327.2939 L
+179.3335 249.9619 L
+428.666 249.9619 L
+n
+TP
+14.3068 -43.125 Td
+2 Tr
+0 O
+0 0 0 1 k
+0 R
+0 1 0.91 0 (PANTONE 485 CVC) 0 X
+%_ 0 50 XQ
+/_Device 48 46.752 -7.1038 Tf
+0 Ts
+100 100 Tz
+0 Tt
+%_0 0 100 100 Xu
+%AI55J_GlyphSubst: GlyphSubstNone 
+1 TA
+%_ 0 XL
+0 TY
+0 TV
+36 0 Xb
+XB
+0 0 5 TC
+100 100 200 TW
+25 TG
+0 0 0 Ti
+1 Ta
+0 1 2 2 3 Th
+0 Tq
+240 Tg
+0 0 Tl
+0 Tc
+0 Tw
+(XSCREENSA) Tx 1 91 Tk
+(VER) Tx 1 0 Tk
+(\r) TX 
+TO
+LB
+%AI5_EndLayer--
+%%PageTrailer
+gsave annotatepage grestore showpage
+%%Trailer
+Adobe_Illustrator_AI5 /terminate get exec
+Adobe_shading_AI8 /terminate get exec
+Adobe_ColorImage_AI6 /terminate get exec
+Adobe_typography_AI5 /terminate get exec
+Adobe_cshow /terminate get exec
+Adobe_level2_AI5 /terminate get exec
+%%EOF
diff --git a/utils/images/screensaver-cmndln.xpm b/utils/images/screensaver-cmndln.xpm
new file mode 100644 (file)
index 0000000..1ac62dd
--- /dev/null
@@ -0,0 +1,357 @@
+/* XPM */
+static char * screensaver_cmndln_xpm[] = {
+"24 24 330 2",
+"      c None",
+".     c #878583",
+"+     c #000000",
+"@     c #85817B",
+"#     c #D8D6CE",
+"$     c #DBD8D0",
+"%     c #DEDBD3",
+"&     c #DFDCD5",
+"*     c #E0DDD6",
+"=     c #DEDBD4",
+"-     c #DCD8D1",
+";     c #DAD7D0",
+">     c #D8D4CC",
+",     c #D4D0C9",
+"'     c #D0CDC5",
+")     c #CCC8C0",
+"!     c #C6C2BA",
+"~     c #C0BCB4",
+"{     c #B9B5AC",
+"]     c #B2AEA5",
+"^     c #ABA79E",
+"/     c #A39F96",
+"(     c #9E9A91",
+"_     c #DAD7CF",
+":     c #787B72",
+"<     c #62695D",
+"[     c #676E62",
+"}     c #686F63",
+"|     c #6C7367",
+"1     c #6E7468",
+"2     c #70766C",
+"3     c #71766C",
+"4     c #70766B",
+"5     c #6F756A",
+"6     c #6E7268",
+"7     c #6C7066",
+"8     c #666A61",
+"9     c #62675D",
+"0     c #5C6058",
+"a     c #565A51",
+"b     c #50544C",
+"c     c #4A4D46",
+"d     c #83837B",
+"e     c #98948B",
+"f     c #D9D6CE",
+"g     c #454B45",
+"h     c #444B44",
+"i     c #3A433A",
+"j     c #414941",
+"k     c #474E47",
+"l     c #4E554E",
+"m     c #505750",
+"n     c #545A54",
+"o     c #515751",
+"p     c #4D534D",
+"q     c #494E49",
+"r     c #444A44",
+"s     c #3D423D",
+"t     c #373C37",
+"u     c #2F342F",
+"v     c #898983",
+"w     c #938E85",
+"x     c #D6D2CB",
+"y     c #EEEEEE",
+"z     c #B4B4B4",
+"A     c #747874",
+"B     c #555C55",
+"C     c #5A605A",
+"D     c #5E645E",
+"E     c #606660",
+"F     c #616761",
+"G     c #616661",
+"H     c #5E635E",
+"I     c #5B605B",
+"J     c #565A56",
+"K     c #4D524D",
+"L     c #484D48",
+"M     c #414641",
+"N     c #393D39",
+"O     c #92928B",
+"P     c #8C887F",
+"Q     c #D1CDC5",
+"R     c #3A423A",
+"S     c #E8E8E8",
+"T     c #FAFAFA",
+"U     c #828782",
+"V     c #636963",
+"W     c #696F69",
+"X     c #6B716B",
+"Y     c #6E746E",
+"Z     c #6C716C",
+"`     c #6A6E6A",
+" .    c #656A65",
+"..    c #606460",
+"+.    c #4E524E",
+"@.    c #464A46",
+"#.    c #3E423E",
+"$.    c #858178",
+"%.    c #CBC8C0",
+"&.    c #EAECEA",
+"*.    c #A2A9A2",
+"=.    c #686E68",
+"-.    c #6E736E",
+";.    c #717671",
+">.    c #747974",
+",.    c #737873",
+"'.    c #707470",
+").    c #6A6F6A",
+"!.    c #656965",
+"~.    c #5C5F5C",
+"{.    c #515551",
+"].    c #4A4E4A",
+"^.    c #404540",
+"/.    c #91908A",
+"(.    c #7E7A71",
+"_.    c #C4C0B8",
+":.    c #505650",
+"<.    c #525852",
+"[.    c #646A64",
+"}.    c #6D736D",
+"|.    c #767B76",
+"1.    c #797E79",
+"2.    c #797D79",
+"3.    c #787C78",
+"4.    c #737773",
+"5.    c #6B6F6B",
+"6.    c #666966",
+"7.    c #5E615E",
+"8.    c #565956",
+"9.    c #4C4F4C",
+"0.    c #434743",
+"a.    c #8F8E88",
+"b.    c #76736A",
+"c.    c #BEB9B0",
+"d.    c #4A514A",
+"e.    c #565C56",
+"f.    c #5F655F",
+"g.    c #707570",
+"h.    c #787B78",
+"i.    c #6D716D",
+"j.    c #666A66",
+"k.    c #5D615D",
+"l.    c #555855",
+"m.    c #444744",
+"n.    c #8E8D87",
+"o.    c #706C63",
+"p.    c #B5B0A8",
+"q.    c #4C524C",
+"r.    c #565B56",
+"s.    c #686C68",
+"t.    c #727672",
+"u.    c #777A77",
+"v.    c #767976",
+"w.    c #6C706C",
+"x.    c #646764",
+"y.    c #545754",
+"z.    c #4C4E4C",
+"A.    c #8D8C85",
+"B.    c #6A665D",
+"C.    c #AEA99F",
+"D.    c #4B514B",
+"E.    c #666C66",
+"F.    c #757975",
+"G.    c #767A76",
+"H.    c #747774",
+"I.    c #6E726E",
+"J.    c #626462",
+"K.    c #595C59",
+"L.    c #525452",
+"M.    c #4B4E4B",
+"N.    c #424642",
+"O.    c #8B8A84",
+"P.    c #646057",
+"Q.    c #A4A096",
+"R.    c #484E48",
+"S.    c #535853",
+"T.    c #595E59",
+"U.    c #626662",
+"V.    c #696D69",
+"W.    c #717571",
+"X.    c #6F726F",
+"Y.    c #646864",
+"Z.    c #484C48",
+"`.    c #414441",
+" +    c #898881",
+".+    c #5E5B52",
+"++    c #9B978D",
+"@+    c #434943",
+"#+    c #555A55",
+"$+    c #636763",
+"%+    c #676B67",
+"&+    c #6B6E6B",
+"*+    c #676A67",
+"=+    c #646664",
+"-+    c #5F625F",
+";+    c #535653",
+">+    c #464846",
+",+    c #3F423F",
+"'+    c #86857E",
+")+    c #59564D",
+"!+    c #928E84",
+"~+    c #3E443E",
+"{+    c #464C46",
+"]+    c #505550",
+"^+    c #616561",
+"/+    c #616461",
+"(+    c #5A5D5A",
+"_+    c #4D504D",
+":+    c #474A47",
+"<+    c #424542",
+"[+    c #3C403C",
+"}+    c #85847C",
+"|+    c #535047",
+"1+    c #8A867B",
+"2+    c #393F39",
+"3+    c #3F453F",
+"4+    c #4F544F",
+"5+    c #585C58",
+"6+    c #5A5F5A",
+"7+    c #5C605C",
+"8+    c #5B5F5B",
+"9+    c #575A57",
+"0+    c #525552",
+"a+    c #484B48",
+"b+    c #3E413E",
+"c+    c #383C38",
+"d+    c #828079",
+"e+    c #4E4A41",
+"f+    c #908C83",
+"g+    c #272E27",
+"h+    c #4A4F4A",
+"i+    c #505350",
+"j+    c #515451",
+"k+    c #505450",
+"l+    c #494C49",
+"m+    c #464946",
+"n+    c #3D403D",
+"o+    c #383B38",
+"p+    c #262A26",
+"q+    c #7F7E76",
+"r+    c #4B483E",
+"s+    c #939088",
+"t+    c #999589",
+"u+    c #A29D93",
+"v+    c #A39D93",
+"w+    c #A19C91",
+"x+    c #9F9B8F",
+"y+    c #9D978D",
+"z+    c #9A958A",
+"A+    c #969186",
+"B+    c #938D83",
+"C+    c #8F8B7F",
+"D+    c #8D887C",
+"E+    c #898579",
+"F+    c #868175",
+"G+    c #837E72",
+"H+    c #817D70",
+"I+    c #7F7B6D",
+"J+    c #7D796C",
+"K+    c #959186",
+"L+    c #8D8A82",
+"M+    c #706C62",
+"N+    c #726D62",
+"O+    c #716C62",
+"P+    c #706C61",
+"Q+    c #6E6A60",
+"R+    c #6C675D",
+"S+    c #69645A",
+"T+    c #656156",
+"U+    c #615E53",
+"V+    c #5E5A50",
+"W+    c #5B584C",
+"X+    c #58554A",
+"Y+    c #565348",
+"Z+    c #545046",
+"`+    c #524E44",
+" @    c #504C42",
+".@    c #4E4A40",
+"+@    c #4D493F",
+"@@    c #78756B",
+"#@    c #6B665C",
+"$@    c #6A665C",
+"%@    c #6B675C",
+"&@    c #6A665B",
+"*@    c #68645A",
+"=@    c #666157",
+"-@    c #625F54",
+";@    c #5F5B51",
+">@    c #5D584E",
+",@    c #5B574C",
+"'@    c #58544A",
+")@    c #504D43",
+"!@    c #4F4B40",
+"~@    c #4D4A40",
+"{@    c #4C483E",
+"]@    c #21201D",
+"^@    c #4B4741",
+"/@    c #4F4D46",
+"(@    c #4E4A45",
+"_@    c #504D48",
+":@    c #53514C",
+"<@    c #514F48",
+"[@    c #4E4A46",
+"}@    c #4A4843",
+"|@    c #46433E",
+"1@    c #43413B",
+"2@    c #403D38",
+"3@    c #3C3933",
+"4@    c #383630",
+"5@    c #35332D",
+"6@    c #35332C",
+"7@    c #36342E",
+"8@    c #13120F",
+"9@    c #46443E",
+"0@    c #4E4C46",
+"a@    c #55544E",
+"b@    c #5D5B56",
+"c@    c #64625E",
+"d@    c #65635D",
+"e@    c #62605B",
+"f@    c #5F5D58",
+"g@    c #5C5A55",
+"h@    c #595752",
+"i@    c #54534D",
+"j@    c #4F4D47",
+"k@    c #484640",
+"l@    c #42403A",
+"m@    c #3F3D36",
+"n@    c #3D3B33",
+"o@    c #3E3B34",
+"                                                ",
+". + + + + + + + + + + + + + + + + + + + + + @   ",
+"+ # $ % & * * * = - ; > , ' ) ! ~ { ] ^ / ( +   ",
+"+ _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e +   ",
+"+ f 5 g h i j k l m n n n o p q r s t u v w +   ",
+"+ x 5 g y z A B C D E F G H I J K L M N O P +   ",
+"+ Q 5 R I S T U V W X Y Z `  ...J +.@.#.O $.+   ",
+"+ %.5 g &.*.Y =.-.;.>.>.,.'.).!.~.{.].^./.(.+   ",
+"+ _.5 :.<.C [.}.,.|.1.2.3.4.5.6.7.8.9.0.a.b.+   ",
+"+ c.5 d.e.f.=.g.,.|.3.3.h.A i.j.k.l.9.m.n.o.+   ",
+"+ p.5 q.r.f.s.g.t.3.2.u.v.t.w.x.~.y.z.m.A.B.+   ",
+"+ C.5 D.n H E.w.'.F.G.4.H.I.s.J.K.L.M.N.O.P.+   ",
+"+ Q.5 R.S.T.U.V.I.'.W.I.X.` Y.7.l.+.Z.`. +.++   ",
+"+ ++5 @+K #+I $+%+&+` s.*+=+-+K.;+].>+,+'+)++   ",
+"+ !+5 ~+{+]+r.k...U.U.^+/+7.(+y._+:+<+[+}+|++   ",
+"+ 1+5 2+3+R.4+J 5+6+7+8+K.9+0+9.a+0.b+c+d+e++   ",
+"+ f+5 g+2+^.@.h+4+i+j+{.k+9.l+m+<+n+o+p+q+r++   ",
+"+ s+t+u+v+u+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+r++   ",
+"+ L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@r+r++   ",
+"+ @@#@$@%@&@*@=@-@;@>@,@'@Y+Z+`+)@!@~@{@r+r++   ",
+"]@+ + ^@/@(@_@:@:@<@[@}@|@1@2@3@4@5@6@7@+ + 8@  ",
+"  + + 9@0@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@+ +     ",
+"    + + + + + + + + + + + + + + + + + + +       ",
+"                                                "};
diff --git a/utils/images/screensaver-colorselector.xpm b/utils/images/screensaver-colorselector.xpm
new file mode 100644 (file)
index 0000000..486c019
--- /dev/null
@@ -0,0 +1,250 @@
+/* XPM */
+static char * screensaver_colorselector_xpm[] = {
+"24 24 223 2",
+"      c None",
+".     c #000000",
+"+     c #FEFDFD",
+"@     c #FAE2DD",
+"#     c #F2AEA1",
+"$     c #274AFF",
+"%     c #5F79FF",
+"&     c #607BFF",
+"*     c #637CFF",
+"=     c #7B90FF",
+"-     c #FCF8E9",
+";     c #FAF4DF",
+">     c #FAF5E1",
+",     c #F6EBC5",
+"'     c #F4BBAF",
+")     c #EB8672",
+"!     c #A7B5FF",
+"~     c #A8B7FF",
+"{     c #AAB8FF",
+"]     c #F5E7B8",
+"^     c #F5E8BA",
+"/     c #F5E8BC",
+"(     c #EDD37C",
+"_     c #ADBAFF",
+":     c #EDD47E",
+"<     c #E88975",
+"[     c #8590C8",
+"}     c #090600",
+"|     c #8791C8",
+"1     c #A4B0F2",
+"2     c #F9F4E0",
+"3     c #F2E6BB",
+"4     c #F1E5BB",
+"5     c #F5E8BD",
+"6     c #F6E9BD",
+"7     c #EB8773",
+"8     c #A6B3F9",
+"9     c #574F4F",
+"0     c #FDFDFC",
+"a     c #8791C6",
+"b     c #E3DFD3",
+"c     c #F6EABF",
+"d     c #F1A89A",
+"e     c #EC8773",
+"f     c #D83C1D",
+"g     c #778DFF",
+"h     c #96A2E0",
+"i     c #575050",
+"j     c #FDFAF8",
+"k     c #7A83B1",
+"l     c #D8CEAE",
+"m     c #ECD47F",
+"n     c #E7C652",
+"o     c #6D6767",
+"p     c #F9F1EA",
+"q     c #F6F2ED",
+"r     c #F2ECE5",
+"s     c #F2EDE7",
+"t     c #D7C5B2",
+"u     c #D6D6D6",
+"v     c #BCBCBC",
+"w     c #625C5B",
+"x     c #F9EEE4",
+"y     c #4F4D4A",
+"z     c #868077",
+"A     c #B6AEA3",
+"B     c #EDE2D3",
+"C     c #FBF0E0",
+"D     c #F8D39F",
+"E     c #E1D3C4",
+"F     c #E1D4C6",
+"G     c #E2D5C7",
+"H     c #CAB197",
+"I     c #9C9C9C",
+"J     c #615C5B",
+"K     c #F9F0E4",
+"L     c #746C67",
+"M     c #FEFDFC",
+"N     c #FFFEFD",
+"O     c #131210",
+"P     c #897C69",
+"Q     c #D8C3A5",
+"R     c #F5C27A",
+"S     c #CBB298",
+"T     c #F3F2F2",
+"U     c #98948F",
+"V     c #F9EFE3",
+"W     c #A09489",
+"X     c #766D68",
+"Y     c #736961",
+"Z     c #A3A3A2",
+"`     c #B3A188",
+" .    c #DAAC6D",
+"..    c #E3D6C8",
+"+.    c #E8E5E2",
+"@.    c #97938E",
+"#.    c #F6E9D8",
+"$.    c #84817A",
+"%.    c #FBF3EA",
+"&.    c #908C86",
+"*.    c #F1EDE7",
+"=.    c #7B7975",
+"-.    c #878786",
+";.    c #070000",
+">.    c #928470",
+",.    c #CEA468",
+"'.    c #E4D7C9",
+").    c #CBB39A",
+"!.    c #E2DFDC",
+"~.    c #A8A199",
+"{.    c #F0E0CE",
+"].    c #C8BFB4",
+"^.    c #D5CCBF",
+"/.    c #DFD7CD",
+"(.    c #DAD3C9",
+"_.    c #DDCFC4",
+":.    c #928C84",
+"<.    c #8F816E",
+"[.    c #CFA56A",
+"}.    c #DBCAB8",
+"|.    c #AF8A62",
+"1.    c #040000",
+"2.    c #D9D5D2",
+"3.    c #D9CABB",
+"4.    c #D7C8B8",
+"5.    c #DECFBF",
+"6.    c #D8C9B9",
+"7.    c #E3D3C2",
+"8.    c #C9BBAC",
+"9.    c #D9CEC2",
+"0.    c #7F766D",
+"a.    c #887C6A",
+"b.    c #D39B49",
+"c.    c #060100",
+"d.    c #C0BDBA",
+"e.    c #8C8782",
+"f.    c #C2B5A7",
+"g.    c #BFB4A6",
+"h.    c #B8AB9D",
+"i.    c #BAAD9E",
+"j.    c #BEB0A2",
+"k.    c #948A7F",
+"l.    c #716860",
+"m.    c #FDFCFC",
+"n.    c #F5E7E6",
+"o.    c #E0B2AD",
+"p.    c #93B48E",
+"q.    c #332C2B",
+"r.    c #5D5954",
+"s.    c #79736C",
+"t.    c #958C80",
+"u.    c #8D8379",
+"v.    c #988D82",
+"w.    c #706760",
+"x.    c #55565D",
+"y.    c #ADB0BC",
+"z.    c #94A0EB",
+"A.    c #E9C8C4",
+"B.    c #E9C9C6",
+"C.    c #EACBC7",
+"D.    c #D69B95",
+"E.    c #AACFA4",
+"F.    c #6A8166",
+"G.    c #201A1A",
+"H.    c #57514F",
+"I.    c #625C59",
+"J.    c #625A53",
+"K.    c #6B625A",
+"L.    c #585251",
+"M.    c #696764",
+"N.    c #080000",
+"O.    c #545666",
+"P.    c #BCC1E1",
+"Q.    c #8D9AEA",
+"R.    c #EACCC9",
+"S.    c #C4EFBD",
+"T.    c #ABD0A5",
+"U.    c #A3AB9C",
+"V.    c #050000",
+"W.    c #0C0303",
+"X.    c #080100",
+"Y.    c #030000",
+"Z.    c #2C2A30",
+"`.    c #545665",
+" +    c #6B6E80",
+".+    c #C5CBED",
+"++    c #8E9BEB",
+"@+    c #F6E9E7",
+"#+    c #EBCDCA",
+"$+    c #EBCFCC",
+"%+    c #D79C96",
+"&+    c #CBF5C4",
+"*+    c #BADFB4",
+"=+    c #ECE4E2",
+"-+    c #DED7D5",
+";+    c #D8D1D0",
+">+    c #E0DBD7",
+",+    c #E9E6E3",
+"'+    c #FCFBFA",
+")+    c #030500",
+"!+    c #7E8195",
+"~+    c #CACFEE",
+"{+    c #929EEB",
+"]+    c #D89E97",
+"^+    c #CCF5C6",
+"/+    c #C8EFC1",
+"(+    c #0B0505",
+"_+    c #14100F",
+":+    c #090806",
+"<+    c #000100",
+"[+    c #8B8EA3",
+"}+    c #CED3F3",
+"|+    c #7D8CE8",
+"1+    c #F0DAD7",
+"2+    c #BA554B",
+"3+    c #96EB88",
+"4+    c #97EC89",
+"5+    c #8FDF82",
+"6+    c #74B369",
+"7+    c #6A74B0",
+"8+    c #5E679A",
+"9+    c #6971A9",
+"0+    c #5B6EE2",
+"                                                ",
+"  . . . . . . . . . . . . . . . . . . . . . .   ",
+"  . + @ @ @ @ # . $ % & & * = . - ; > > > , .   ",
+"  . @ ' ' ' ' ) . % ! ! ~ ~ { . ; ] ] ^ / ( .   ",
+"  . @ ' ' ' ' ) . % ! ~ { { _ . > ] ^ / / : .   ",
+"  . @ ' ' ' ' < . & ~ [ } | 1 . 2 3 4 5 6 : .   ",
+"  . @ ' ' ' ' 7 . * 8 9 0 . a . b / / 5 c : .   ",
+"  . d ) ) ) e f . g h i j . k . l ( : m : n .   ",
+"  . . . . . . . . . . o p . . . . . . . . . .   ",
+"  . 0 q r r s t . u v w x y . . . z A B C D .   ",
+"  . r E F F G H . I . J K L M . N O . P Q R .   ",
+"  . r F F G G S . . T U V W + X M Y Z . `  ..   ",
+"  . s F G G ..S . . +.@.#.$.%.&.*.=.-.;.>.,..   ",
+"  . s G G ..'.).. . !.~.{.].^./.(._.:.;.<.[..   ",
+"  . }.S S ).).|.. 1.2.3.4.5.6.7.8.9.0.;.a.b..   ",
+"  . . . . . . . . c.d.e.f.g.h.i.j.k.l.;.. . .   ",
+"  . m.n.n.n.n.o.. p.q.r.s.t.u.k.v.w.. x.y.z..   ",
+"  . n.A.B.C.C.D.. E.F.G.H.I.J.K.L.M.N.O.P.Q..   ",
+"  . n.B.C.C.R.D.. S.T.U.V.W.N.X.Y.Z.`. +.+++.   ",
+"  . @+R.#+#+$+%+. &+*+1.=+-+;+>+,+'+)+!+~+{+.   ",
+"  . @+#+#+$+$+]+. ^+/+1.(+V._+Y.:+. <+[+}+|+.   ",
+"  . 1+D.%+%+]+2+. 3+4+4+4+5+6+. 7+7+8+9+z.0+.   ",
+"  . . . . . . . . . . . . . . . . . . . . . .   ",
+"                                                "};
diff --git a/utils/images/screensaver-diagnostic.xpm b/utils/images/screensaver-diagnostic.xpm
new file mode 100644 (file)
index 0000000..d1bc0a6
--- /dev/null
@@ -0,0 +1,296 @@
+/* XPM */
+static char * screensaver_diagnostic_xpm[] = {
+"24 24 269 2",
+"      c None",
+".     c #000000",
+"+     c #F8F8F8",
+"@     c #D8D8D8",
+"#     c #D1D1D1",
+"$     c #E0E0E0",
+"%     c #797979",
+"&     c #373737",
+"*     c #3F3F3F",
+"=     c #424242",
+"-     c #444444",
+";     c #4E4E4E",
+">     c #474747",
+",     c #464646",
+"'     c #4A4A4A",
+")     c #484848",
+"!     c #4B4B4B",
+"~     c #737373",
+"{     c #BCBCBC",
+"]     c #BABABA",
+"^     c #939393",
+"/     c #A2A2A2",
+"(     c #959595",
+"_     c #383838",
+":     c #36442C",
+"<     c #5F7751",
+"[     c #68815A",
+"}     c #758F67",
+"|     c #708A62",
+"1     c #748D64",
+"2     c #6D8660",
+"3     c #6D875E",
+"4     c #617951",
+"5     c #5C724B",
+"6     c #4F663F",
+"7     c #4B5F3A",
+"8     c #141B0E",
+"9     c #E5E5E5",
+"0     c #FAF7EC",
+"a     c #D2D2D2",
+"b     c #5A5A5A",
+"c     c #3E3E3E",
+"d     c #4E6443",
+"e     c #FBFEF6",
+"f     c #C2D9B7",
+"g     c #A0BD93",
+"h     c #98B48A",
+"i     c #9CBA8D",
+"j     c #92AE85",
+"k     c #92AF81",
+"l     c #839E72",
+"m     c #769363",
+"n     c #6D8957",
+"o     c #65814F",
+"p     c #222C1A",
+"q     c #CDCDCD",
+"r     c #E4E3E3",
+"s     c #A8A8A7",
+"t     c #748A66",
+"u     c #FAFFF4",
+"v     c #D2E2C8",
+"w     c #C6E2BA",
+"x     c #B3CFA8",
+"y     c #B7D4A9",
+"z     c #CEE1C6",
+"A     c #A4C096",
+"B     c #89A379",
+"C     c #83A06E",
+"D     c #B5C8A7",
+"E     c #88A86F",
+"F     c #293520",
+"G     c #EAEAEA",
+"H     c #696969",
+"I     c #515151",
+"J     c #141414",
+"K     c #505050",
+"L     c #454545",
+"M     c #728664",
+"N     c #DFF4D6",
+"O     c #FDFFFB",
+"P     c #E8F3E1",
+"Q     c #B2CCA8",
+"R     c #B9D4AF",
+"S     c #FCFFFA",
+"T     c #D1E2C8",
+"U     c #8AA67A",
+"V     c #89A677",
+"W     c #F8FBF5",
+"X     c #C2D2B4",
+"Y     c #26301D",
+"Z     c #E6E6E6",
+"`     c #767676",
+" .    c #626262",
+"..    c #7A7A7A",
+"+.    c #6C835E",
+"@.    c #E6F2DC",
+"#.    c #E2F0DC",
+"$.    c #FFFFFF",
+"%.    c #B1CCA6",
+"&.    c #D6E7D0",
+"*.    c #D2E2CC",
+"=.    c #F9FEF6",
+"-.    c #839E71",
+";.    c #BACEAD",
+">.    c #C7D6BB",
+",.    c #F8FBF4",
+"'.    c #2A3520",
+").    c #EEEEEE",
+"!.    c #898989",
+"~.    c #848484",
+"{.    c #7E7E7E",
+"].    c #858585",
+"^.    c #586E4B",
+"/.    c #C8D6C2",
+"(.    c #9BB48C",
+"_.    c #E3EEDD",
+":.    c #9BB690",
+"<.    c #CCDBC5",
+"[.    c #809E72",
+"}.    c #D0DEC8",
+"|.    c #718C5F",
+"1.    c #B7C5AE",
+"2.    c #668150",
+"3.    c #CAD7C2",
+"4.    c #242C1C",
+"5.    c #F1F1F1",
+"6.    c #B0B0B0",
+"7.    c #B3AF9A",
+"8.    c #8A8A8A",
+"9.    c #9F9F9F",
+"0.    c #556B46",
+"a.    c #EDF5E7",
+"b.    c #9AB38A",
+"c.    c #D4E2CE",
+"d.    c #C3D6B9",
+"e.    c #F5FBF2",
+"f.    c #7F9D6D",
+"g.    c #BDCDB4",
+"h.    c #9AB08A",
+"i.    c #E2ECDA",
+"j.    c #566D45",
+"k.    c #A4B298",
+"l.    c #232A1C",
+"m.    c #D0D0D0",
+"n.    c #F7F7F5",
+"o.    c #C7C7C7",
+"p.    c #4F4F4F",
+"q.    c #404040",
+"r.    c #57694B",
+"s.    c #DAE5D1",
+"t.    c #859E76",
+"u.    c #B6CBAA",
+"v.    c #E7ECE4",
+"w.    c #DFEADA",
+"x.    c #6B865B",
+"y.    c #869E79",
+"z.    c #D1DACA",
+"A.    c #C4CFBC",
+"B.    c #4A6039",
+"C.    c #6C7D5E",
+"D.    c #40453B",
+"E.    c #E4E4E4",
+"F.    c #B5B5B5",
+"G.    c #E0DFDE",
+"H.    c #909090",
+"I.    c #4F6042",
+"J.    c #829A72",
+"K.    c #7A9368",
+"L.    c #88A277",
+"M.    c #DAE4D5",
+"N.    c #8EA67E",
+"O.    c #5A7349",
+"P.    c #C7D0BE",
+"Q.    c #6C7F5A",
+"R.    c #4A5F38",
+"S.    c #617250",
+"T.    c #2E3426",
+"U.    c #838383",
+"V.    c #2B2B2B",
+"W.    c #282828",
+"X.    c #747474",
+"Y.    c #3D4C30",
+"Z.    c #5A6E49",
+"`.    c #687E58",
+" +    c #788E65",
+".+    c #6C805C",
+"++    c #6B825B",
+"@+    c #5C734C",
+"#+    c #586F48",
+"$+    c #627355",
+"%+    c #526643",
+"&+    c #4E6140",
+"*+    c #647455",
+"=+    c #21281A",
+"-+    c #F3F3F3",
+";+    c #989898",
+">+    c #979797",
+",+    c #343F28",
+"'+    c #4F6142",
+")+    c #5C6E4E",
+"!+    c #718462",
+"~+    c #687C5A",
+"{+    c #778968",
+"]+    c #758968",
+"^+    c #76896A",
+"/+    c #6E7C60",
+"(+    c #687859",
+"_+    c #647457",
+":+    c #738465",
+"<+    c #1C2117",
+"[+    c #F7F7F7",
+"}+    c #F2F2F2",
+"|+    c #BBBBBB",
+"1+    c #CCCCCC",
+"2+    c #B8B8B8",
+"3+    c #878787",
+"4+    c #585858",
+"5+    c #616161",
+"6+    c #666666",
+"7+    c #6F6F6F",
+"8+    c #727272",
+"9+    c #6E6E6E",
+"0+    c #646464",
+"a+    c #6D6D6D",
+"b+    c #D6D6D6",
+"c+    c #C6C6C6",
+"d+    c #DFDECD",
+"e+    c #8E8E8E",
+"f+    c #A4A4A4",
+"g+    c #C0C0C0",
+"h+    c #CBCBCB",
+"i+    c #CACACA",
+"j+    c #DFDFDF",
+"k+    c #F4F4F4",
+"l+    c #F5F5F5",
+"m+    c #C5C5C5",
+"n+    c #2F2F2F",
+"o+    c #7D7D7D",
+"p+    c #5C5C5C",
+"q+    c #040404",
+"r+    c #575757",
+"s+    c #9C9C9C",
+"t+    c #AFAFAF",
+"u+    c #A7A7A7",
+"v+    c #AEAEAE",
+"w+    c #A8A8A8",
+"x+    c #B2B2B2",
+"y+    c #E9E9E9",
+"z+    c #C9C9C9",
+"A+    c #DBDBDB",
+"B+    c #525252",
+"C+    c #202020",
+"D+    c #2D2D2D",
+"E+    c #828282",
+"F+    c #787878",
+"G+    c #9A9A9A",
+"H+    c #BFBFBF",
+"I+    c #C1C1C1",
+"J+    c #3A3A3A",
+"K+    c #3C3C3C",
+"L+    c #6C6C6C",
+"M+    c #434343",
+"N+    c #2E2E2E",
+"O+    c #303030",
+"P+    c #545454",
+"Q+    c #C2C2C2",
+"R+    c #DCDCDC",
+"S+    c #868686",
+"T+    c #676767",
+"                                                ",
+"  . . . . . . . . . . . . . . . . . . . .       ",
+". + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # .     ",
+". $ % & & * = - ; > > , ' ) ! ~ { ] ^ / ( .     ",
+". $ _ : < [ } | 1 2 3 4 5 6 7 8 9 / 0 a b .     ",
+". $ c d e f g h i j k l m n o p $ q r s - .     ",
+". $ * t u v w x y z A B C D E F G H I J K .     ",
+". $ L M N O P Q R S T U V W X Y Z ] `  ....     ",
+". $ ' +.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.]..     ",
+". $ ) ^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9..     ",
+". $ , 0.a.b.c.d.e.f.g.h.i.j.k.l.).m.n.o.p..     ",
+". $ q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.L .     ",
+". $ c I.J.K.L.M.N.4 O.P.Q.R.S.T.9 U.V.W.X..     ",
+". $ = Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+8.].>+.     ",
+". $ = ,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+.     ",
+". $ 3+' ! K 4+5+6+7+8+9+0+a+~ b++ c+d+e+f+.     ",
+". $ ~.g+h+i+h+q j+b+k+-+-+l+).i+m+b+k+# n+.     ",
+". $ > o+p+0+q+r+= s+t+u+v+] w+x+y+..z+^ & .     ",
+". A+8+p+B+C+b D+; , E+F+G+p+^ >+H+I+J+K+L+.     ",
+". { !.7+M+N+O+P+e+v+|+{ H+Q+q @ R+S+{.T+b .     ",
+"  . . . . . . . . . . . . . . . . . . . . .     ",
+"        . . . . . . . . . . . . . . . .         ",
+"                                                ",
+"                                                "};
diff --git a/utils/images/screensaver-locking.xpm b/utils/images/screensaver-locking.xpm
new file mode 100644 (file)
index 0000000..9b7ba2d
--- /dev/null
@@ -0,0 +1,206 @@
+/* XPM */
+static char * screensaver_locking_xpm[] = {
+"24 24 179 2",
+"      c None",
+".     c #000000",
+"+     c #A5A5A5",
+"@     c #EEEEEE",
+"#     c #ECECEC",
+"$     c #E7E7E7",
+"%     c #E3E3E3",
+"&     c #CBCBCB",
+"*     c #424242",
+"=     c #D4D4D4",
+"-     c #E8E8E8",
+";     c #B5B5B5",
+">     c #DFDFDF",
+",     c #C8C8C8",
+"'     c #5B5B5B",
+")     c #A4A4A4",
+"!     c #818181",
+"~     c #DDDDDD",
+"{     c #BCBCBC",
+"]     c #2D2D2D",
+"^     c #EDEDED",
+"/     c #BABABA",
+"(     c #D6D6D6",
+"_     c #777777",
+":     c #E2E2E2",
+"<     c #757575",
+"[     c #E6E6E6",
+"}     c #AFAFAF",
+"|     c #DCDCDC",
+"1     c #616161",
+"2     c #E5E5E5",
+"3     c #D2A06E",
+"4     c #AD8562",
+"5     c #C99560",
+"6     c #C48F5A",
+"7     c #EFDBBF",
+"8     c #E5C7A0",
+"9     c #D8B385",
+"0     c #D4AC7C",
+"a     c #D0A873",
+"b     c #CAA06A",
+"c     c #C79C64",
+"d     c #C89C64",
+"e     c #C3985F",
+"f     c #C09054",
+"g     c #BC8545",
+"h     c #B67A38",
+"i     c #9A5E1B",
+"j     c #F0DABF",
+"k     c #E4C6A0",
+"l     c #D6AF80",
+"m     c #D3AC7B",
+"n     c #D0A570",
+"o     c #B48D59",
+"p     c #81643D",
+"q     c #6E5534",
+"r     c #BC9A6D",
+"s     c #C79C65",
+"t     c #C39860",
+"u     c #C09256",
+"v     c #BC8645",
+"w     c #B67C36",
+"x     c #985E1A",
+"y     c #EED8BC",
+"z     c #E3C39C",
+"A     c #D3AA7B",
+"B     c #CDA36C",
+"C     c #81643E",
+"D     c #21190E",
+"E     c #0C0905",
+"F     c #43331F",
+"G     c #D3B185",
+"H     c #C49961",
+"I     c #C09358",
+"J     c #BC8746",
+"K     c #B77D39",
+"L     c #EED8BB",
+"M     c #E2C29B",
+"N     c #D6AE7F",
+"O     c #D2A97A",
+"P     c #CEA46E",
+"Q     c #6A5232",
+"R     c #080604",
+"S     c #D2B287",
+"T     c #C2945A",
+"U     c #BE8E50",
+"V     c #BA8442",
+"W     c #B47834",
+"X     c #975C1A",
+"Y     c #EFDABE",
+"Z     c #E4C49D",
+"`     c #D7B080",
+" .    c #D4AC79",
+"..    c #CDA570",
+"+.    c #846641",
+"@.    c #19130C",
+"#.    c #7A6A53",
+"$.    c #CEAA7B",
+"%.    c #C19458",
+"&.    c #BE8C4E",
+"*.    c #B9813F",
+"=.    c #B37834",
+"-.    c #975D1A",
+";.    c #EFD8BB",
+">.    c #E0C199",
+",.    c #D3AA7A",
+"'.    c #D0A774",
+").    c #CBA26B",
+"!.    c #A58152",
+"~.    c #2E2316",
+"{.    c #CBAC83",
+"].    c #C39861",
+"^.    c #C09257",
+"/.    c #BA833F",
+"(.    c #B37934",
+"_.    c #9B601E",
+":.    c #E3C29C",
+"<.    c #D2AA78",
+"[.    c #896C44",
+"}.    c #1C150C",
+"|.    c #A08C72",
+"1.    c #C19257",
+"2.    c #BD8C4C",
+"3.    c #BA813E",
+"4.    c #B27733",
+"5.    c #A36B2F",
+"6.    c #EDD6B8",
+"7.    c #E1BD94",
+"8.    c #D1A874",
+"9.    c #CEA46D",
+"0.    c #C69C64",
+"a.    c #44341F",
+"b.    c #17110A",
+"c.    c #766246",
+"d.    c #D0AF84",
+"e.    c #BE8E51",
+"f.    c #B67D3A",
+"g.    c #B07530",
+"h.    c #A67137",
+"i.    c #EED8BA",
+"j.    c #E0C099",
+"k.    c #D1A973",
+"l.    c #654F32",
+"m.    c #503F28",
+"n.    c #4E3D27",
+"o.    c #705737",
+"p.    c #D0AE81",
+"q.    c #BD8C4E",
+"r.    c #B9803D",
+"s.    c #B67D38",
+"t.    c #AB783F",
+"u.    c #EED5B7",
+"v.    c #DFC096",
+"w.    c #D2A776",
+"x.    c #C89D65",
+"y.    c #CFAD80",
+"z.    c #D4B68F",
+"A.    c #D5B68F",
+"B.    c #D2B38A",
+"C.    c #C69D66",
+"D.    c #C09155",
+"E.    c #BC8A4B",
+"F.    c #BE8A4C",
+"G.    c #A9773C",
+"H.    c #D5AE7E",
+"I.    c #CFA772",
+"J.    c #C49256",
+"K.    c #C08D51",
+"L.    c #BA8849",
+"M.    c #B78342",
+"N.    c #B48240",
+"O.    c #B68241",
+"P.    c #B88544",
+"Q.    c #BB8949",
+"R.    c #BC8748",
+"S.    c #BA874A",
+"T.    c #B98548",
+"U.    c #B27B3B",
+"V.    c #88521A",
+"                                                ",
+"                                                ",
+"                  . . . . . . .                 ",
+"                . + @ # $ % & * .               ",
+"              . = - ; . . . > , ' .             ",
+"            . ) - ! .       . ~ { ]             ",
+"            . ^ / .           . ( _ .           ",
+"            . : < .           . [ } .           ",
+"            . | 1 .           . 2 / .           ",
+"          . . 3 4 . . . . . . . 5 6 . .         ",
+"        . 7 8 9 0 a b c c d c e f g h i .       ",
+"        . j k l m n o p q r s t u v w x .       ",
+"        . y z l A B C D E F G H I J K i .       ",
+"        . L M N O P Q . . R S T U V W X .       ",
+"        . Y Z `  ...+.@.R #.$.%.&.*.=.-..       ",
+"        . ;.>.,.'.).!.~.. {.].^.&./.(._..       ",
+"        . y :.N <.B [.}.. |.t 1.2.3.4.5..       ",
+"        . 6.7.8.9.0.a.b.. c.d.e.J f.g.h..       ",
+"        . i.j.A k.).l.m.n.o.p.^.q.r.s.t..       ",
+"        . u.v.w.P x.y.z.A.B.C.D.E.V F.G..       ",
+"        . H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V..       ",
+"          . . . . . . . . . . . . . . .         ",
+"                                                ",
+"                                                "};
diff --git a/utils/images/screensaver-power.xpm b/utils/images/screensaver-power.xpm
new file mode 100644 (file)
index 0000000..2a38341
--- /dev/null
@@ -0,0 +1,230 @@
+/* XPM */
+static char * screensaver_power_xpm[] = {
+"24 24 203 2",
+"      c None",
+".     c #1E1D19",
+"+     c #000000",
+"@     c #D3CDBA",
+"#     c #EDE6CD",
+"$     c #E1D6B0",
+"%     c #C2B997",
+"&     c #786C42",
+"*     c #ECDB9D",
+"=     c #EEDA94",
+"-     c #E7D185",
+";     c #E2CC7E",
+">     c #D2C185",
+",     c #E9DFBB",
+"'     c #CFC7A8",
+")     c #A6996B",
+"!     c #948450",
+"~     c #C2AE68",
+"{     c #B39F5E",
+"]     c #A99858",
+"^     c #73663E",
+"/     c #F6F0DA",
+"(     c #EEE0A8",
+"_     c #F1E1AB",
+":     c #EBD99B",
+"<     c #E5D28E",
+"[     c #CFBD7C",
+"}     c #B9A96F",
+"|     c #988B5B",
+"1     c #8D8054",
+"2     c #B6A56B",
+"3     c #B9A86A",
+"4     c #A7955D",
+"5     c #9B8952",
+"6     c #907F4A",
+"7     c #897C4F",
+"8     c #FCF9ED",
+"9     c #F3E9C6",
+"0     c #F2E8C4",
+"a     c #EEE1B4",
+"b     c #EADCA9",
+"c     c #E7D8A5",
+"d     c #E4D6A4",
+"e     c #DFD2A0",
+"f     c #D8CA97",
+"g     c #C3B47E",
+"h     c #B1A16F",
+"i     c #998A57",
+"j     c #867846",
+"k     c #7D6F41",
+"l     c #93875C",
+"m     c #F0DD96",
+"n     c #FBF7E9",
+"o     c #FBF9EF",
+"p     c #F5F1E1",
+"q     c #F2EEDF",
+"r     c #F7F2E4",
+"s     c #F4EEDC",
+"t     c #EBE4C9",
+"u     c #DDD1AA",
+"v     c #C0B284",
+"w     c #A89A70",
+"x     c #928554",
+"y     c #9A916C",
+"z     c #8A7F59",
+"A     c #74673A",
+"B     c #F0DB90",
+"C     c #F8EFCE",
+"D     c #FDFBF1",
+"E     c #FBF8EC",
+"F     c #F8F4DC",
+"G     c #F0E3B2",
+"H     c #E4D295",
+"I     c #E0D19A",
+"J     c #D7C895",
+"K     c #C2B584",
+"L     c #B2A479",
+"M     c #9C8F65",
+"N     c #796B3D",
+"O     c #6E6236",
+"P     c #6B6036",
+"Q     c #ECD88E",
+"R     c #F8EFCD",
+"S     c #FDFBF4",
+"T     c #FDFBF5",
+"U     c #FBFAED",
+"V     c #F0E5B1",
+"W     c #DCC77B",
+"X     c #D1BB70",
+"Y     c #C4AF69",
+"Z     c #AA9856",
+"`     c #99874F",
+" .    c #857544",
+"..    c #76673C",
+"+.    c #6C6037",
+"@.    c #5E5433",
+"#.    c #BCB59B",
+"$.    c #EEE5C5",
+"%.    c #FCF9EC",
+"&.    c #FCFAF2",
+"*.    c #FAF9EC",
+"=.    c #EEE2AD",
+"-.    c #DAC578",
+";.    c #CDB76D",
+">.    c #BEAA64",
+",.    c #A89656",
+"'.    c #97854B",
+").    c #847544",
+"!.    c #74683C",
+"~.    c #5A5337",
+"{.    c #36352F",
+"].    c #A6A5A5",
+"^.    c #C4C3BD",
+"/.    c #E5E3DE",
+"(.    c #F4F2ED",
+"_.    c #F8F4E5",
+":.    c #ECDEA6",
+"<.    c #D9C377",
+"[.    c #CBB56C",
+"}.    c #BCA863",
+"|.    c #A89759",
+"1.    c #897B4D",
+"2.    c #6B634A",
+"3.    c #5B574B",
+"4.    c #3F3E3D",
+"5.    c #353535",
+"6.    c #A3A3A3",
+"7.    c #BCBCBC",
+"8.    c #D7D7D7",
+"9.    c #E6E6E6",
+"0.    c #E5E5E5",
+"a.    c #BFBFBF",
+"b.    c #A2A2A2",
+"c.    c #929292",
+"d.    c #868686",
+"e.    c #787878",
+"f.    c #6C6C6C",
+"g.    c #5D5D5D",
+"h.    c #525252",
+"i.    c #424242",
+"j.    c #363636",
+"k.    c #BBBBBB",
+"l.    c #D4D4D4",
+"m.    c #E2E2E2",
+"n.    c #7A7A7A",
+"o.    c #737373",
+"p.    c #5B5B5B",
+"q.    c #A5A5A5",
+"r.    c #B8B8B8",
+"s.    c #CFCFCF",
+"t.    c #E1E1E1",
+"u.    c #A0A0A0",
+"v.    c #939393",
+"w.    c #888888",
+"x.    c #767676",
+"y.    c #7B7B7B",
+"z.    c #7E7E7E",
+"A.    c #5F5F5F",
+"B.    c #404040",
+"C.    c #A4A4A4",
+"D.    c #B7B7B7",
+"E.    c #CCCCCC",
+"F.    c #E0E0E0",
+"G.    c #DFDFDF",
+"H.    c #B6B6B6",
+"I.    c #A1A1A1",
+"J.    c #878787",
+"K.    c #777777",
+"L.    c #757575",
+"M.    c #828282",
+"N.    c #414141",
+"O.    c #C8C8C8",
+"P.    c #DDDDDD",
+"Q.    c #DCDCDC",
+"R.    c #B4B4B4",
+"S.    c #595959",
+"T.    c #B5B5B5",
+"U.    c #C5C5C5",
+"V.    c #DBDBDB",
+"W.    c #B1B1B1",
+"X.    c #7F7F7F",
+"Y.    c #B3B3B3",
+"Z.    c #C1C1C1",
+"`.    c #D9D9D9",
+" +    c #D8D8D8",
+".+    c #ADADAD",
+"++    c #C0C0C0",
+"@+    c #6F6F6F",
+"#+    c #686868",
+"$+    c #535353",
+"%+    c #959595",
+"&+    c #6B6B6B",
+"*+    c #5C5C5C",
+"=+    c #515151",
+"-+    c #2A2A2A",
+";+    c #8A8A8A",
+">+    c #D6D6D6",
+",+    c #242424",
+"'+    c #919191",
+")+    c #626262",
+"!+    c #494949",
+"~+    c #343434",
+"{+    c #111111",
+"                                                ",
+"              . + + +                           ",
+"      + + + + @ # $ % & + + + +                 ",
+"    + * = - ; > , ' ) ! ~ { ] ^ +               ",
+"  + / ( _ : < [ } | 1 2 3 4 5 6 7 +             ",
+"  + 8 9 0 a b c d e f g h i j k l +             ",
+"  + m n o p q r s t u v w x y z A +             ",
+"  + B C D E F G H I J K L M N O P +             ",
+"  + Q R S T U V W X Y Z `  ...+.@.+             ",
+"  + #.$.%.&.*.=.-.;.>.,.'.).!.~.{.+             ",
+"  + ].^./.(._.:.<.[.}.|.1.2.3.4.5.+             ",
+"  + 6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.+             ",
+"  + 6.k.l.0.m.7.b.c.d.e.n.o.p.i.j.+             ",
+"  + q.r.s.m.t.r.u.v.w.x.y.z.A.B.5.+             ",
+"  + C.D.E.F.G.H.I.v.J.K.L.M.A.N.5.+             ",
+"  + 6.D.O.P.Q.R.b.c.d.e.o.L.S.i.j.+             ",
+"  + C.T.U.V.V.W.I.c.d.e.X.M.S.i.j.+             ",
+"  + C.Y.Z.`. +.+I.v.J.K.z.J.g.N.5.+             ",
+"  + C.Y.++ +8..+I.c.J.K.@+#+$+i.j.+ + +         ",
+"  + %+Y.++ +8..+b.v.J.e.&+*+=+i.-++ +           ",
+"    + ;+++`.>+.+b.v.J.e.&+*+=+,++ +             ",
+"      + + L.'+@+&+)+S.!+~+{++ + +               ",
+"          + + + + + + + + +                     ",
+"                                                "};
diff --git a/utils/images/screensaver-snap.xpm b/utils/images/screensaver-snap.xpm
new file mode 100644 (file)
index 0000000..4627900
--- /dev/null
@@ -0,0 +1,227 @@
+/* XPM */
+static char * screensaver_snap_xpm[] = {
+"24 24 200 2",
+"      c None",
+".     c #000000",
+"+     c #0E0E0E",
+"@     c #181818",
+"#     c #D6D6D6",
+"$     c #DCDCDC",
+"%     c #EFEFEF",
+"&     c #EBEBEB",
+"*     c #E8E8E8",
+"=     c #DBDBDB",
+"-     c #969696",
+";     c #070707",
+">     c #939393",
+",     c #ECECEC",
+"'     c #D4D4D4",
+")     c #D8D8D8",
+"!     c #FCFCFC",
+"~     c #FBFBFB",
+"{     c #8B8B8B",
+"]     c #7E7E7E",
+"^     c #797979",
+"/     c #F0F0F0",
+"(     c #E7E7E7",
+"_     c #DADADA",
+":     c #CCCCCC",
+"<     c #CDCDCD",
+"[     c #B5B5B5",
+"}     c #6D6D6D",
+"|     c #6B6B6B",
+"1     c #686868",
+"2     c #656565",
+"3     c #707070",
+"4     c #959595",
+"5     c #909090",
+"6     c #BEBEBE",
+"7     c #BDBDBD",
+"8     c #B4B4B4",
+"9     c #A2A2A2",
+"0     c #F5F5F5",
+"a     c #D0D0D0",
+"b     c #BCBCBC",
+"c     c #C3C3C3",
+"d     c #C7C7C7",
+"e     c #CFCFCF",
+"f     c #D7D7D7",
+"g     c #BFBFBF",
+"h     c #ADADAD",
+"i     c #757575",
+"j     c #A6A6A6",
+"k     c #030303",
+"l     c #6A6A6A",
+"m     c #060606",
+"n     c #8E8E8A",
+"o     c #EFEFEE",
+"p     c #C5C5BF",
+"q     c #BABAB4",
+"r     c #9D9D98",
+"s     c #999997",
+"t     c #B1B1B2",
+"u     c #C8C8C8",
+"v     c #E1E1E1",
+"w     c #DFDFDF",
+"x     c #CECECE",
+"y     c #C1C1C1",
+"z     c #818181",
+"A     c #AAAAAA",
+"B     c #717171",
+"C     c #D4D4D2",
+"D     c #C1C1B4",
+"E     c #6C6A57",
+"F     c #5D5C49",
+"G     c #444230",
+"H     c #505048",
+"I     c #969697",
+"J     c #AEAEAF",
+"K     c #252525",
+"L     c #212121",
+"M     c #747474",
+"N     c #AFAFAF",
+"O     c #E0E0E0",
+"P     c #929292",
+"Q     c #D6D6D3",
+"R     c #B8B8AB",
+"S     c #5E5E49",
+"T     c #53523D",
+"U     c #40402C",
+"V     c #343423",
+"W     c #A9A9A9",
+"X     c #7A7A7A",
+"Y     c #393939",
+"Z     c #363636",
+"`     c #A0A0A0",
+" .    c #F6F6F6",
+"..    c #DEDEDE",
+"+.    c #9F9F9F",
+"@.    c #888888",
+"#.    c #9D9D9D",
+"$.    c #6E6E6E",
+"%.    c #D2D2CE",
+"&.    c #B9B9AC",
+"*.    c #5F5F4A",
+"=.    c #52533D",
+"-.    c #31301F",
+";.    c #646463",
+">.    c #A3A3A3",
+",.    c #B6B6B6",
+"'.    c #C2C2C2",
+").    c #3E3E3E",
+"!.    c #595959",
+"~.    c #484848",
+"{.    c #4B4B4B",
+"].    c #464646",
+"^.    c #BABAAC",
+"/.    c #605F4B",
+"(.    c #51523C",
+"_.    c #3F402C",
+":.    c #313120",
+"<.    c #626261",
+"[.    c #A5A5A5",
+"}.    c #F1F1F1",
+"|.    c #ACACAC",
+"1.    c #585858",
+"2.    c #E4E4E4",
+"3.    c #989898",
+"4.    c #3B3B3B",
+"5.    c #979797",
+"6.    c #61604B",
+"7.    c #54533F",
+"8.    c #42412E",
+"9.    c #30301F",
+"0.    c #5E5E5D",
+"a.    c #999999",
+"b.    c #838383",
+"c.    c #3C3C3C",
+"d.    c #B3B3B3",
+"e.    c #4F4F4F",
+"f.    c #808080",
+"g.    c #666666",
+"h.    c #C6C6C6",
+"i.    c #BABAAD",
+"j.    c #60604B",
+"k.    c #52523E",
+"l.    c #303020",
+"m.    c #989899",
+"n.    c #B2B2B2",
+"o.    c #B1B1B1",
+"p.    c #C5C5C5",
+"q.    c #606060",
+"r.    c #545454",
+"s.    c #676767",
+"t.    c #B9B9AB",
+"u.    c #5F5E49",
+"v.    c #51513C",
+"w.    c #40402D",
+"x.    c #313020",
+"y.    c #5E5E5E",
+"z.    c #CACACA",
+"A.    c #C0C0C0",
+"B.    c #4C4C4C",
+"C.    c #8C8C8C",
+"D.    c #CBCBCB",
+"E.    c #B8B7A9",
+"F.    c #5C5C46",
+"G.    c #4F4F3B",
+"H.    c #403F2C",
+"I.    c #BABABA",
+"J.    c #B8B8B8",
+"K.    c #9C9C9C",
+"L.    c #020202",
+"M.    c #AAA99A",
+"N.    c #51503D",
+"O.    c #464632",
+"P.    c #383825",
+"Q.    c #2D2C1C",
+"R.    c #555554",
+"S.    c #949494",
+"T.    c #8F8F8F",
+"U.    c #848484",
+"V.    c #6F6F6F",
+"W.    c #626262",
+"X.    c #5A5A5A",
+"Y.    c #545450",
+"Z.    c #363731",
+"`.    c #33332E",
+" +    c #30302B",
+".+    c #373633",
+"++    c #A8A8A8",
+"@+    c #A1A1A1",
+"#+    c #868686",
+"$+    c #727272",
+"%+    c #0A0A0A",
+"&+    c #444444",
+"*+    c #505050",
+"=+    c #535353",
+"-+    c #7C7C7C",
+";+    c #7F7F7F",
+">+    c #7B7B7B",
+",+    c #787878",
+"'+    c #737373",
+")+    c #616161",
+"                                                ",
+"                                                ",
+"            . . . . . . . . .                   ",
+"        + . @ # $ % & * = - . . ;               ",
+"    . @ > , & ' ) ! ~ ~ # { ] ^ . . .           ",
+"  . / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 .         ",
+"  . 0 a a b b c d e f f g h i j k . l .         ",
+"m n o p q r s t u v w ) x y z A ^ B 5 .         ",
+". C D E F G H I J u i K L M N O , u P .         ",
+". Q R S T U V } W u X Y Z `  ...+.@.#.$..       ",
+". %.&.*.=.U -.;.>.y ,.'.7 % ..).!.~.{.- ]..     ",
+". %.^./.(._.:.<.+.[.A W 9 }.|.1.2.3.4.1 5..     ",
+". %.^.6.7.8.9.0.a.>.W W ` % b.c.d.e.f.g.h..     ",
+". %.i.j.k.U l.0.m.n.o.d.W g p.q.r.3 s.W +..     ",
+". %.t.u.v.w.x.y.- z.y A.A.j A.3.B.4.C.D.y..     ",
+". %.E.F.G.H.:.!.P '.y I.J.K.a.N I.8 b y.L.      ",
+". p M.N.O.P.Q.R.@.o.|.|.j S.T.U.V.W.X.. m       ",
+"  . Y.Z.`. +.+| U.A W ++@+5 C.#+$+i ^ . %+      ",
+"  . &+r.*+=+!.s.$+-+z ;+>+^ ,+'+| q.)+.         ",
+"  . . . . . . . . . . . . . . . . . . .         ",
+"                                                ",
+"                                                ",
+"                                                ",
+"                                                "};
diff --git a/utils/logo-180.gif b/utils/logo-180.gif
deleted file mode 100644 (file)
index 1355767..0000000
Binary files a/utils/logo-180.gif and /dev/null differ
diff --git a/utils/logo-180.xpm b/utils/logo-180.xpm
deleted file mode 100644 (file)
index ab9c59b..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/* XPM */
-
-/* XScreenSaver Logo, designed by Angela Goodman <rzr_grl@yahoo.com>
-   Copyright (c) 2001 by Jamie Zawinski <jwz@jwz.org>
-   Unauthorized use or reproduction prohibited.
-
-   http://www.jwz.org/xscreensaver/
- */
-
-static unsigned const char * const logo_180_xpm[] = {
-"180 180 16 1",
-"      c None    m None",
-".     c #020204 m #000000",
-"+     c #929291 m #000000",
-"@     c #A30204 m #000000",
-"#     c #604D28 m #000000",
-"$     c #600204 m #000000",
-"%     c #37332D m #000000",
-"&     c #2D0C05 m #000000",
-"*     c #A46E04 m #000000",
-"=     c #DBDBDA m #000000",
-"-     c #ED9E04 m #FFFFFF",
-";     c #797977 m #000000",
-">     c #B0B0AE m #000000",
-",     c #FEFEFC m #FFFFFF",
-"'     c #4F3504 m #000000",
-")     c #FD0204 m #FFFFFF",
-"                                                                                                                                                                                    ",
-"                                                                    .                                                                                                               ",
-"                                                                   ..                                                                                                               ",
-"                                                                   ...                                                                                                              ",
-"                                                                 . ...                                                                                                              ",
-"                                                                 .. ...                                                                                                             ",
-"                                                                 .&.....                                                                                                            ",
-"                                                                  &&....                                                                                                            ",
-"                                                                  .@&....                                                                                                           ",
-"                                                                   $).....                                                                                                          ",
-"                                                                   .)@....                                                                                                          ",
-"                                                                   .@)@....                                                                                                         ",
-"                                                                    &))$....                                                                                                        ",
-"                                                                    .)))&...                                                                                                        ",
-"                                                                    .@))@&...                                                                                                       ",
-"                                                                     $)))@....                                                                                                      ",
-"                                                                     &))))$....                                                                                                     ",
-"                                                                     .)))))&...                                                                                                     ",
-"                                                                      @))))@....                                                                                                    ",
-"                                                                      $)))))$&...                                                                                                   ",
-"                                                                      .)))))).&..                                                                                                   ",
-"                                                                      .))))))@....                     ..                                                                           ",
-"                                                                      .)))))))&'...                .. ...                                                                           ",
-"                                                                      .@)))))))%'..                .  ...                                                                           ",
-"                                                                       @)))))))$#&..              .. ...                                                                            ",
-"                                                                       $))))))))&#...            .& ....                                                                            ",
-"                                                                       &))))))))$*%..            &. ....                                                                            ",
-"                                                                       $))))))))@#*...          .$.....                                                                             ",
-"                                                                       &)))))))))&-'..         .@$.....                                                                             ",
-"                                                                       $)))))))))&-*..         &)......                                                                             ",
-"                                                                       &)))))))))@*-...       .@@.....                                                                              ",
-"                                                                       .)))))))))$*-&..       &)@.....                                                                              ",
-"                                                                       .)))))))))$**...      .@)$..&..                                                                              ",
-"                                                                       .)))))))))&-'..       &))$.&'..                                                                              ",
-"                                                                       $))))))))$'-...      .@))$.*'..                                                                              ",
-"                                                                       $)))))))).-'..       $)))&%-...                                                                              ",
-"                                                                       @)))))))$#-...      .))))&*-..                                                                               ",
-"                                                                      .@)))))))&-#..       &))))&-*..                                                                               ",
-"                                                                      .)))))))$*-...      .@))))&--...                                                                              ",
-"                  ....................................................$)))))))&-*.........&)))))&-*...............................................................                  ",
-"                 .....................................................@))))))$#-&.........$)))))&--.................................................................                ",
-"                .....................................................&)))))))&-*..........))))))$--..................................................................               ",
-"                .....................................................@))))))$*-'.........$))))))$*-..................................................................               ",
-"               .....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+&))))))).--..;,,,,,,#@))))))@*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=#....               ",
-"               ....%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&)))))))@'-#..=,,,,,=&)))))))$*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%@)))))))&--&.%,,,,,,+$)))))))@#-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%$)))))))@'-*..+,,,,,,%)))))))))&-%.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+$))))))))$*-'.&=,,,,,=&)))))))))&-'.&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>.)))))))))&--..#,,,,,,;@)))))))))$-#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&@))))))))$*-*..>,,,,,,#@)))))))))$**..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=%@)))))))))&--'.&,,,,,,=&))))))))))@#-..+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;$))))))))))%--..;,,,,,,>$)))))))))))%-&.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&))))))))))@#--..+,,,,,,;@)))))))))))&-'.%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>=,,,,,,,%@))))))))))$--#..=,,,,,,%))))))))))))$*#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;.>,&&=,,+$)))))))))))&--'.%,,,,,,,&))))))))))))@'*..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,=>>>>>>+>>>>+>>>>+&$;#..;>>&)))))))))))@'--..%>>>>>>+&)))))))))))))&-&.%>>>>+>>>>+>>>>+>>>>+>>>>+>>>>+>>>>>>>>>>>>>>=,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,+...................@&.......$)))))))))))@#--..........$)))))))))))))$*#...............................................%>,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,#...................&)........@)))))))))))@*-*..........@)))))))))))))@#*.................................................+,,,,,,,,=....               ",
-"               ....+,,,,,,,,+....................@@.......$))))))))))))$*-*..........@))))))))))))))&-&.................................................=,,,,,,,=....               ",
-"               ....+,,,,,,,=....................&)@.......)))))))))))))$--#..........@))))))))))))))$*#.................................................%,,,,,,,=....               ",
-"               ....+,,,,,,,>....................@)$......&)))))))))))))$*-*..........)))))))))))))))@'*..................................................,,,,,,,=....               ",
-"               ....+,,,,,,,+....................)).......$)))))))))))))@*-#..........))))))))))))))))&-..................................................>,,,,,,=....               ",
-"               ....+,,,,,,,+...................@)).......@)))))))))))))@#-*..........))))))))))))))))$#'.................................................>,,,,,,=....               ",
-"               ....+,,,,,,,+...................@)@......&)))))))))))))))%-*..........)))))))))))))))))&-.................................................>,,,,,,=....               ",
-"               ....+,,,,,,,+..................$))$......$)))))))))))))))&--..........)))))))))))))))))$*'................................................>,,,,,,=....               ",
-"               ....+,,,,,,,+..................@))&......$)))))))))))))))$*-&.........)))))))))))))))))@%-................................................>,,,,,,=....               ",
-"               ....+,,,,,,,+..................))).......@))))))))))))))))&-#.........))))))))))))))))))&*'...............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................$))).......@))))))))))))))))$*-.........))))))))))))))))))@'*...............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................@))@.......))))))))))))))))))&-&........)))))))))))))))))))$*'..............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................)))@.%.....))))))))))))))))))$#*........@))))))))))))))))))@&-..............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+................$)))$.*.....)))))))))))))))))))&*&.......$)))))))))))))))))))$*#.............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+................@)))$'*.....@)))))))))))))))))))&*.......&))))))))))))))))))))&-&............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............&))))$**..&%&@)))))))))))))))))))@%#...%&%.))))))))))))))))))))$#*...&%%&%%&%%&%%&%%&%%&%%....................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............$))))$*-..+,;@))))))))))))))))))))$#%..+,,#@))))))))))))))))))))&-#..%,,,,,,,,,,,,,,,,,,,,=+..................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............@))))$--..+,+@)))))))))))))))))))))&#...=,=&))))))))))))))))))))).-&..#,,,,,,,,,,,,,,,,,,,,,=.................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............)))))$*-%.#,>$))))))))))))))))))))))&#...=,'@))))))))))))))))))))@%-%..;,,,,,,,,,,,,,,,,,,,,,#................>,,,,,,=....               ",
-"               ....+,,,,,,,+..............$)))))$--&.#,,&))))))))))))))))))))))@&'..%,>$)))))))))))))))))))))$#-...+,,,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+..............@)))))@*-#.%,,#@))))))))))))))))))))))@&'..%=%))))))))))))))))))))))&**...>,,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+..............@)))))@#-#..,,+$)))))))))))))))))))))))@&%..;+$)))))))))))))))))))))@&--..#,,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............&))))))@#-*..=,=&))))))))))))))))))))))))$'&..;%))))))))))))))))))))))@'-#..>,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............&)))))))&--..+,,'@))))))))))))))))))))))))&#...#$))))))))))))))))))))))&*-..#,,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............@)))))))&--..#,,>$)))))))))))))))))))))))))&#....)))))))))))))))))))))))&-#..>,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............@)))))))@#-#.&=,,&)))))))))))))))))))))))))@&#...$))))))))))))))))))))))$#-..#,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............)))))))))#-*..>,,;@)))))))))))))))))))))))))@''...)))))))))))))))))))))))&-'..,,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............&)))))))))&--&.#,,=&))))))))))))))))))))))))))&*&..&))))))))))))))))))))))@#*..>,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............@)))))))))$*-'.&,,,#@))))))))))))))))))))))))))&*...@))))))))))))))))))))))&-..#,,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............@)))))))))@#-*..>,,=&))))))))))))))))))))))))))$##..$))))))))))))))))))))))@##..=,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............@))))))))))%--..#,,,%)))))))))))))))))))))))))))&-&..@))))))))))))))))))))))&*..+,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............)))))))))))$*-#..=,,>&))))))))))))))))))))))))))@#*..$))))))))))))))))))))))$*&.#,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............))))))))))))&--..#,,,%@))))))))))))))))))))))))))&-&..@)))))))))))))))))))))@''.%,,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........$))))))))))))&*-'..=,,+$))))))))))))))))))))))))))@#*..$))))))))))))))))))))))&#..=,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........$))))))))))))@'-*..;,,,&)))))))))))))))))))))))))))&-&..))))))))))))))))))))))$#..>,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........$)))))))))))))&*-'..=,,+$))))))))))))))))))))))))))$**..$))))))))))))))))))))))&..;,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........@)))))))))))))@'-*..;,,,.))))))))))))))))))))))))))@%-...))))))))))))))))))))))&%.%,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........@))))))))))))))$*-%..=,,;$))))))))))))))))))))))))))&-'..@)))))))))))))))))))))$&..,,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........@)))))))))))))))&-*..%,,=&))))))))))))))))))))))))))@'-..$)))))))))))))))))))))@&..>,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........@)))))))))))))))$#-#..>,,;@))))))))))))))))))))))))))&*&.&))))))))))))))))))))))...;,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........@))))))))))))))))&*-&.&=,=.)))))))))))))))))))))))))))&&..))))))))))))))))))))))$..%,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........@))))))))))))))))@&-#..+,,#@)))))))))))))))))))))))))))$.$))))))))))))))))))))))@...=,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........$)))))))))))))))))$#-%..=,>&)))))))))))))))))))))))))))))))))))))))))))))))))))))...>,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........$))))))))))))))))))$**..#,,#@))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...........&))))))))))))))))))@&-'..>,>$))))))))))))))))))))))))))))))))))))))))))))))))))))$..#,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............)))))))))))))))))))@%-..%,,&))))))))))))))))))))))))))))))))))))))))))))))))))))@..%,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............@)))))))))))))))))))$##..;,#@)))))))))))))))))))))))))))))))))))))))))))))))))))@...,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+............$))))))))))))))))))))&*&.&=>$))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............)))))))))))))))))))))%#..;,&))))))))))))))))))))))))))))))))))))))))))))))))))))&..>,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............@))))))))))))))))))))$''..=#@)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.............&)))))))))))))))))))))&#..#+$)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+..............@))))))))))))))))))))@&'..=$)))))))))))))))))))))))))))))))))))))))))))))))))))@..&,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+..............$)))))))))))))))))))))$'..+&)))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............))))))))))))))))))))))...#%))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............$)))))))))))))))))))))$....))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+................))))))))))))))))))))))....))))))))))))))))))))))))))))))))))))))))))))))))))))...;,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+................$)))))))))))))))))))))$...@)))))))))))))))))))))))))))))))))))))))))))))))))))&&.#,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................))))))))))))))))))))))&..))))))))))))))))))))))))))))))))))))))))))))))))))))$%.%,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................$))))))))))))))))))))))&&))))))))))))))))))))))))))))))))))))))))))))))))))))$'..,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$#..=,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................+$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................=%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,+&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-..;,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-%.#,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'.%,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@'-#.&,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,&@))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@*-*..=,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,>$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&--&..=,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'..#,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,,=&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$**..%,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).*..&=,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$'...=,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................,,,,,,,,%@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).&..;,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................=,,,,,,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$...#,,,,,,,,,,,,,>................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................>,,,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))...%,,,,,,,,,,,,,,+................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................;,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&..&=,,,,,,,,,,,,,,%................>,,,,,,=....               ",
-"               ....+,,,,,,,+..................+,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,,,,,;.................>,,,,,,=....               ",
-"               ....+,,,,,,,+...................#+>>>>>>>>%@))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...#>>>>>>>>>>>>>+#..................>,,,,,,=....               ",
-"               ....+,,,,,,,+...............................@)))))))))))))))))))))))))))))))))))))))))))))))))))))))&.....................................>,,,,,,=....               ",
-"               ....+,,,,,,,+................................@)))))))))))))))))))))))))))))))))))))))))))))))))))))&......................................>,,,,,,=....               ",
-"               ....+,,,,,,,+................................&@)))))))))))))))))))))))))))))))))))))))))))))))))))$.......................................>,,,,,,=....               ",
-"               ....+,,,,,,,+.................................&@)))))))))))))))))))))))))))))))))))))))))))))))))@........................................>,,,,,,=....               ",
-"               ....+,,,,,,,+..................................&@)))))))))))))))))))))))))))))))))))))))))))))))$.........................................>,,,,,,=....               ",
-"               ....+,,,,,,,+...................................&@)))))))))))))))))))))))))))))))))))))))))))))$..........................................>,,,,,,=....               ",
-"               ....+,,,,,,,+....................................&@)))))))))))))))))))))))))))))))))))))))))))$...........................................>,,,,,,=....               ",
-"               ....+,,,,,,,+......................................@)))))))))))))))))))))))))))))))))))))))))&............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+.......................................$))))))))))))))))))))))))))))))))))))))@..............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+.........................................@)))))))))))))))))))))))))))))))))))&...............................................>,,,,,,=....               ",
-"               ....+,,,,,,,+..........................................$))))))))))))))))))))))))))))))))@.................................................=,,,,,,=....               ",
-"               ....+,,,,,,,=............................................$))))))))))))))))))))))))))))$&.................................................&,,,,,,,=....               ",
-"               ....+,,,,,,,,%.............................................$@))))))))))))))))))))))@$&...................................................;,,,,,,,=....               ",
-"               ....+,,,,,,,,=................................................$@@))))))))))))))@@@&'#%..................................................%,,,,,,,,=....               ",
-"               ....+,,,,,,,,,=&...................................................$$@@@@@@@$$&''**'...................................................%=,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,=+%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%..................#----'............%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%##+,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&..................&''..............=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+....................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&.....................................=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#......................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+........................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>&.........................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>............................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>..............................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#................................................#=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%..................................................&+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%......................................................%>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;%..........................................................&;=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>................................................................+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................................................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%................................................................#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=....               ",
-"               ....&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>....               ",
-"                ....%;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;.....               ",
-"                .....................................................................................................................................................               ",
-"                 ...................................................................................................................................................                ",
-"                 ..................................................................................................................................................                 ",
-"                   ...............................................................................................................................................                  ",
-"                                                                                                                                                                                    ",
-"                                                                                                                                                                                    ",
-"                                                                                                                                                                                    "};
diff --git a/utils/logo-50.gif b/utils/logo-50.gif
deleted file mode 100644 (file)
index fcfcfd7..0000000
Binary files a/utils/logo-50.gif and /dev/null differ
diff --git a/utils/logo-50.xpm b/utils/logo-50.xpm
deleted file mode 100644 (file)
index 5ca5d63..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/* XPM */
-
-/* XScreenSaver Logo, designed by Angela Goodman <rzr_grl@yahoo.com>
-   Copyright (c) 2001 by Jamie Zawinski <jwz@jwz.org>
-   Unauthorized use or reproduction prohibited.
-
-   http://www.jwz.org/xscreensaver/
- */
-
-static unsigned const char * const logo_50_xpm[] = {
-"50 50 16 1",
-"      c None    m None",
-".     c #050305 m #000000",
-"+     c #989798 m #000000",
-"@     c #A30805 m #000000",
-"#     c #5E4D34 m #000000",
-"$     c #A6531B m #000000",
-"%     c #620805 m #000000",
-"&     c #FA0204 m #FFFFFF",
-"*     c #A63013 m #000000",
-"=     c #CCCBCB m #000000",
-"-     c #B1B0AE m #000000",
-";     c #707070 m #000000",
-">     c #523410 m #000000",
-",     c #FCFCFA m #FFFFFF",
-"'     c #AC6C44 m #000000",
-")     c #24221C m #000000",
-"                                                  ",
-"                  ..                              ",
-"                  ..                              ",
-"                   @.                             ",
-"                   @@.                            ",
-"                   %&%                            ",
-"                    &&.     .                     ",
-"                    &&*.   ..                     ",
-"                    &&@>  %.                      ",
-"                    &&*.  @)                      ",
-"                   %&&#. @&#                      ",
-"     ..............@&*)..&&#.................     ",
-"    .+,,,,,,,,,,,,'&&$;,'&@#=,,,,,,,,,,,,,,,-.    ",
-"    .+,,,,,,,,,,,-&&*#=,@&&>-,,,,,,,,,,,,,,,-.    ",
-"    .+,,,,,,,,,,,@&&$#,=&&&*;,,,,,,,,,,,,,,,-.    ",
-"    .+,,=;;;;;>)*&&&'>;#&&&*>;;;;;;;;;;;;+,,-.    ",
-"    .+,=.....%..&&&&'..%&&&&>.............+,-.    ",
-"    .+,-.....@..&&&&$..%&&&&*.............;,-.    ",
-"    .+,+....%@.%&&&&$..%&&&&@)............;,-.    ",
-"    .+,-....@@.%&&&&&).%&&&&&*............;,-.    ",
-"    .+,-....&*>$&&&&&@);&&&&&@>#==-==;....;,-.    ",
-"    .+,-....&*>-&&&&&&%#*&&&&&*>-,,,,,....;,-.    ",
-"    .+,+...%&@#=&&&&&&&%)&&&&&&*#,,,,,....;,-.    ",
-"    .+,-...@&&$;'&&&&&&&)@&&&&&@>=,,,,....;,-.    ",
-"    .+,-...&&&$>=&&&&&&&@)&&&&&&*;,,,,....;,-.    ",
-"    .+,-...&&&&#-$&&&&&&&>@&&&&&@#,,,,....;,-.    ",
-"    .+,+...&&&&$>-&&&&&&&*%&&&&&&),,,,....;,-.    ",
-"    .+,-...&&&&&#+*&&&&&&&@&&&&&&%=,,,....;,-.    ",
-"    .+,-...&&&&&@>+&&&&&&&&&&&&&&%+,,,....;,-.    ",
-"    .+,-...@&&&&&%#&&&&&&&&&&&&&&@;,,,....;,-.    ",
-"    .+,+....&&&&&&)@&&&&&&&&&&&&&&>,,,....;,-.    ",
-"    .+,-....@&&&&&%%&&&&&&&&&&&&&&),,,....;,-.    ",
-"    .+,-....%&&&&&&&&&&&&&&&&&&&&&),,,....;,-.    ",
-"    .+,-....;*&&&&&&&&&&&&&&&&&&&&>=,,....;,-.    ",
-"    .+,+....;=&&&&&&&&&&&&&&&&&&&@#-,,....;,-.    ",
-"    .+,-....;,'&&&&&&&&&&&&&&&&&&*#,,,....;,-.    ",
-"    .+,-....;,,*&&&&&&&&&&&&&&&&@),,,,....;,-.    ",
-"    .+,-.....#;#@&&&&&&&&&&&&&&&.#;;;)....;,-.    ",
-"    .+,+.........@&&&&&&&&&&&&&%..........;,-.    ",
-"    .+,-..........@&&&&&&&&&&&............;,-.    ",
-"    .+,-...........%&&&&&&&&@.............;,-.    ",
-"    .+,,#)))))))))))..%@@@*)...))))))))))>,,-.    ",
-"    .+,,,,,,,,,,,,,,).........;,,,,,,,,,,,,,-.    ",
-"    .+,,,,,,,,,,,,,#...........-,,,,,,,,,,,,-.    ",
-"    .+,,,,,,,,,,,=#.............+,,,,,,,,,,,-.    ",
-"    .+,,,,,,,,,,#.................-,,,,,,,,,-.    ",
-"    .+,,,,,,,,,,==-=-=-=-=-=-=-=-=,,,,,,,,,,-.    ",
-"    .;++++++++++++++++++++++++++++++++++++++;.    ",
-"     ........................................     ",
-"                                                  "};
diff --git a/utils/logo-big.gif b/utils/logo-big.gif
deleted file mode 100644 (file)
index 5ea3da2..0000000
Binary files a/utils/logo-big.gif and /dev/null differ
index d6bfe9aafe8f383cb120ace94f58a15b7005fa13..428aa2f581e2b39b325a052f3fc024b0ee42844a 100644 (file)
@@ -33,8 +33,8 @@
 #include <stdio.h>
 #include <X11/Xutil.h>
 
-#include "logo-50.xpm"
-#include "logo-180.xpm"
+#include "images/logo-50.xpm"
+#include "images/logo-180.xpm"
 
 static const char hex[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/utils/logo.eps b/utils/logo.eps
deleted file mode 100644 (file)
index 4843e79..0000000
+++ /dev/null
@@ -1,8058 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: Adobe Illustrator(R) 8.0
-%%AI8_CreatorVersion: 8
-%%For: (rzr Grl) (evol engel)
-%%Title: (xscreensaver.eps)
-%%CreationDate: (1/30/01) (8:38 PM)
-%%BoundingBox: 179 249 429 531
-%%HiResBoundingBox: 179.3335 249.9619 428.666 530.8477
-%%DocumentProcessColors: Black
-%%DocumentFonts: Device
-%%DocumentSuppliedFonts: Device
-%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0
-%%+ procset Adobe_typography_AI5 1.0 1
-%%+ procset Adobe_ColorImage_AI6 1.3 0
-%%+ procset Adobe_Illustrator_AI5 1.3 0
-%%+ procset Adobe_cshow 2.0 8
-%%+ procset Adobe_shading_AI8 1.0 0
-%AI5_FileFormat 4.0
-%AI3_ColorUsage: Color
-%AI3_IncludePlacedImages
-%AI7_ImageSettings: 1
-%%DocumentCustomColors: (PANTONE 152 CVC)
-%%+ (PANTONE 485 CVC)
-%%CMYKCustomColor: 0 0.51 1 0 (PANTONE 152 CVC)
-%%+ 0.91 0.01 0.93 0 (PANTONE 354 2X CVC)
-%%+ 0 1 0.91 0 (PANTONE 485 CVC)
-%%CMYKProcessColor: 1 1 1 1 ([Registration])
-%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) 
-%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1
-%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () 
-%AI3_TemplateBox: 306.5 395.5 306.5 395.5
-%AI3_TileBox: 30 31 582 761
-%AI3_DocumentPreview: Header
-%AI5_ArtSize: 612 792
-%AI5_RulerUnits: 2
-%AI5_ArtFlags: 1 0 0 1 0 0 1 0 0
-%AI5_TargetResolution: 800
-%AI5_NumLayers: 4
-%AI8_OpenToView: -109 667 1 718 623 18 0 1 153 44 0 0
-%AI5_OpenViewLayers: 3733
-%%PageOrigin:30 31
-%%AI3_PaperRect:-30 761 582 -31
-%%AI3_Margin:30 -31 -30 31
-%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
-%AI7_Thumbnail: 116 128 8
-%%BeginData: 12612 Hex Bytes
-%0000330000660000990000CC0033000033330033660033990033CC0033FF
-%0066000066330066660066990066CC0066FF009900009933009966009999
-%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
-%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
-%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
-%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
-%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
-%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
-%6666006666336666666666996666CC6666FF669900669933669966669999
-%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
-%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
-%9933009933339933669933999933CC9933FF996600996633996666996699
-%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
-%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
-%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
-%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
-%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
-%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
-%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
-%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
-%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
-%000011111111220000002200000022222222440000004400000044444444
-%550000005500000055555555770000007700000077777777880000008800
-%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
-%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
-%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
-%524C45FD2BFF2727FD71FF2052F87DFD70FF76F8F8F8A8FD6FFFA8FD04F8
-%FD70FF4B69F8F852FD6FFFA84468F8F87DFD6FFF27FC44F827A8FD6EFF27
-%8C8C20F827A8FD6DFFA844B08C27F852FD6DFFA820FCFC4426F87DFD6DFF
-%20B0FCB0204AF8FD09FFA1FFA8FD61FF4B8CFCFC8CF8F827FD07FF7DF87D
-%F87DFD60FF528DFCB0FC4B26F8A8FD06FF204B27F8FD61FF7D68FCFCFC8C
-%4AF827FD05FF27F827F852FD61FFA869FCB0FCB02074F8FD04FFA8204BF8
-%F8A8FD61FFA844FD04FC4492F87DFFFFFF2068F8F8F8FD62FF7D69FCB0FC
-%B02050F8A8FFFF526944F8F852FD62FF7668FCFCFC684AF827FFFFA8208C
-%68F8F852FD62FF27B0FCB0FC274AF87DFFFF7644B02050F87DFD45FFA852
-%FD1B2720FCFCFC6820F8F8272727F8FCFC206EF8F8FD202752A8FD22FF7D
-%FD1CF82044B0FCB0F874FD04F82069FCB0449EFD23F827FD22FF27F8F8F8
-%FD1927F8FCFCFC4474F8F8272727208CFCFC6844F8F8FD1F27F8F8F87DFD
-%21FFF8F8F8FD19FF4B69FCB08C206EF852FFFFA844B0FCB06898F87DFD1F
-%FFA8F8F827FD21FFF8F827FD18FF2744FCFCFC684426F8A8FFFF4B68FCFC
-%FC8C44F827FD20FFF8F827FD21FFF8F827FD17FF764BFCB0FCB0F8C0F852
-%FFFFFF27FCB0FCB0FC4B2027FD20FFF8F827FD21FFF8F827FD16FF7D20FD
-%04FC8C4A44F87DFFFFA844FD05FC204AF8FD20FFF8F827FD21FFF8F827FD
-%16FF278CB0FCB0FC696E26F8FFFFFF768DFCB0FCB0FC444AF87DFD1FFFF8
-%F827FD21FFF8F827FD10FF4BA1A8FFFF5268FD05FC20C0F852FFFFFF4B8C
-%FD05FC6844F852FD1FFFF8F827FD21FFF8F827FD05FF7D52275227522752
-%2752274B27F8F85220B0FCB0FCB0FC4B92F8F852275220B0FCB0FCB0FCB0
-%2026F852275227522752275227522752275227522752275227522752A8FD
-%05FFF8F827FD21FFF8F827FD04FF52FD0AF8206820F8F8F88CFD05FC8C44
-%74FD05F820FD07FC44FD1CF87DFD04FFF8F827FD21FFF8F827FFFFFFA8FD
-%0AF8204444F826F820FCB0FCB0FCB08C744AFD05F844B0FCB0FCB0FCB068
-%4AFD1BF827FD04FFF8F827FD21FFF8F827FFFFFFA8FD0BF88CF8F8F82068
-%FD06FC8C444AFD05F868FD08FC2020FD1BF8FD04FFF8F827FD21FFF8F827
-%FFFFFFA8FD0AF8458C20F8F820B0FCB0FCB0FCB0FC266EFD05F844B0FCB0
-%FCB0FCB0FC6944FD1BF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F820
-%6868F8F8F820FD08FC449EFD05F868FD08FC8C20FD1BF8FD04FFF8F827FD
-%21FFF8F827FFFFFF7DFD0AF8B044F8F8F820B0FCB0FCB0FCB0FC8D2026FD
-%04F844B0FCB0FCB0FCB0FCB0446EFD1AF8FD04FFF8F827FD21FFF8F827FF
-%FFFFA8FD09F844FC20F8F8F820FD09FC4420FD04F820FD0AFC2020FD19F8
-%FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F8218CB02026F8F820B0FCB0
-%FCB0FCB0FCB0FC20FD04F820B0FCB0FCB0FCB0FCB0FC6944FD19F8FD04FF
-%F8F827FD21FFF8F827FFFFFFA8FD09F8FCFC444AF85220FD0AFC8C20F8F8
-%274B8CFD0AFC2020F8F87D527D527D527D527D527D27FD0AF8FD04FFF8F8
-%27FD21FFF8F827FFFFFFA8FD08F845FCB02074F8A820B0FCB0FCB0FCB0FC
-%B0FCB06820F827A84BFCB0FCB0FCB0FCB0FCB08C2020F852FD0BFF27FD09
-%F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F82068FCFC206EF87D4B8C
-%FD0BFC4420F827208CFD0AFC6820F8F852FD0AFFA8FD09F8FD04FFF8F827
-%FD21FFF8F827FFFFFFA8FD07F820B0FCB0209EF87D7D69FCB0FCB0FCB0FC
-%B0FCB0FCB0444BF87620B0FCB0FCB0FCB0FCB0FCB0685120F8A8FD09FFA8
-%FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F844FCFCFC686EF827
-%FF20FD0DFC2026F82068FD0BFC2074F852FD09FFA8FD09F8FD04FFF8F827
-%FD21FFF8F827FFFFFF7DFD06F82068B0FCB0686E26F8A87668B0FCB0FCB0
-%FCB0FCB0FCB0FCB0204AF820FCB0FCB0FCB0FCB0FCB0FCB0204AF8FD09FF
-%7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F88CFD04FCF874F8
-%7DA820FD0DFC8CF8F8F868FD0BFC4420F852FD08FFA8FD09F8FD04FFF8F8
-%27FD21FFF8F827FFFFFFA8FD06F820FCB0FCB0FC4B98F827FF4B8DFCB0FC
-%B0FCB0FCB0FCB0FCB0FC8D44F8F8B0FCB0FCB0FCB0FCB0FCB0FC27F827FD
-%08FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F820FD05FC68
-%4A44F87DFF20FD0EFC20202044FD0BFC444AF8A8FD07FFA8FD09F8FD04FF
-%F8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0209EF827FF4C8C
-%B0FCB0FCB0FCB0FCB0FCB0FCB0684AF820FCB0FCB0FCB0FCB0FCB0FCB020
-%F87DFD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F844FD
-%06FC684426F8A8A820FD0EFCF84AF868FD0BFC20F852FD07FFA8FD09F8FD
-%04FFF8F827FD21FFF8F827FFFFFFA8FD06F869FCB0FCB0FCB0FC4B74F827
-%FF4B8DFCB0FCB0FCB0FCB0FCB0FCB0FC694AF820B0FCB0FCB0FCB0FCB0FC
-%B0684AF8FD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F8
-%44FD07FC8C2644F87DFF20FD0DFC8C20F820FD0BFC8C20F8A8FD06FFA8FD
-%09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD06F869FCB0FCB0FCB0FCB0
-%4474F826A84B8CB0FCB0FCB0FCB0FCB0FCB0FCB08C2020B0FCB0FCB0FCB0
-%FCB0FCB0FC20F87DFD06FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFF
-%A8FD06F844FD09FCF874F8527D44FD0EFC8C8CFD0CFC44F827FD06FFA8FD
-%09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0FCB0
-%FCB0204AF8A821B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
-%FCB0FCB0FC8DF827FD06FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF
-%A8FD07F8FD0AFC8C20F8F87D44FD1BFC8C20F8FD06FFA8FD09F8FD04FFF8
-%F827FD21FFF8F827FFFFFFA8FD06F82068B0FCB0FCB0FCB0FCB0FC6920F8
-%5227FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
-%20F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F820
-%FD0BFC20F8F820FD1CFC44F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8
-%F827FFFFFFA8FD07F8208DFCB0FCB0FCB0FCB0FCB08C26F8528CB0FCB0FC
-%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB044F852FD05FFA8
-%FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F820FD0BFC44F8F868
-%FD1BFC68F827FD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD
-%08F8208CB0FCB0FCB0FCB0FCB0FCB020F844B0FCB0FCB0FCB0FCB0FCB0FC
-%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0684AF8FD05FF7DFD09F8FD04FFF8F8
-%27FD21FFF8F827FFFFFFA8FD09F820FD0BFC8CF868FD1BFC8CF8F8FD05FF
-%A8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F8208DFCB0FCB0FC
-%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC
-%B0FCB0FCB08C4BF8A8FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFF
-%FFA8FD09F82720FD28FC8C20F87DFD04FFA8FD09F8FD04FFF8F827FD21FF
-%F8F827FFFFFFA8FD09F8277644B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
-%FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB08C74F87DFD04FFA8
-%FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827FF278CFD26FC44
-%6EF827FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827
-%FFA84BFCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC
-%B0FCB0FCB0FCB0FCB0FCB02074F852FD04FFA8FD09F8FD04FFF8F827FD21
-%FFF8F827FFFFFFA8FD09F827FFFF5268FD24FC684AF8F8A8FD04FFA8FD09
-%F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD09F827FFFFFF208DFCB0FCB0
-%FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0
-%FC20F827A8FD05FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09
-%F827FD04FFF88CFD21FC8CF8F87DFD06FFA8FD09F8FD04FFF8F827FD21FF
-%F8F827FFFFFFA8FD08F82727FD04FFA820B0FCB0FCB0FCB0FCB0FCB0FCB0
-%FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB020F852FD07FF52FD09F8
-%FD04FFF8F827FD21FFF8F827FFFFFFA8FD0AF8277D7DA87D7DF8FD1FFC20
-%2027A87DA87DA87DA852FD0AF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD
-%10F82020B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC
-%B0FCB06820FD14F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD11F82020FD
-%1BFC6820FD15F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD12F82120B0FC
-%B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB06821FD16F8FD04
-%FFF8F827FD21FFF8F827FFFFFFA8FD13F820F88CFD16FC4420FD17F8FD04
-%FFF8F827FD21FFF8F827FFFFFF7DFD14F820F88DFCB0FCB0FCB0FCB0FCB0
-%FCB0FCB0FCB0FCB0FC8DF820FD18F8FD04FFF8F827FD21FFF8F827FFFFFF
-%A8FD17F82068FD0FFC8C44FD1BF8FD04FFF8F827FD21FFF8F827FD04FF27
-%FD17F82120698CB0FCB0FCB0FCB0FCB0FC8D4427FD1BF852FD04FFF8F827
-%FD21FFF8F827FD04FF7DFD1AF820F820446844684444202620FD1CF827A8
-%FD04FFF8F827FD21FFF8F827FD05FFA87D527D527D527D527D527D527D52
-%7D527D527D527D527DFD0AF82050FD07F827527D527D527D527D527D527D
-%527D527D527D527D52A8FD06FFF8F827FD21FFF8F827FD1CFFFD15F8A8FD
-%1BFFF8F827FD21FFF8F827FD1BFF52FD16F8FD1BFFF8F827FD21FFF8F827
-%FD1AFF52FD18F8FD1AFFF8F827FD21FFF8F827FD19FF2727FD19F8A8FD18
-%FFF8F827FD21FFF8F827FD17FF7DFD1DF827A8FD16FFF8F827FD21FFF8F8
-%27FD15FFFD23F8A8FD14FFF8F827FD21FFF8F827FD14FF52FD24F8FD14FF
-%F8F827FD21FFF8F827FD15FF2727F827F827F827F827F827F827F827F827
-%F827F827F827F827F827F827F827F827F8A8FD14FFF8F827FD21FFF8F827
-%FD4DFFF8F827FD21FFF8F827FD4DFFF8F827FD21FFF8F8F8277D527D527D
-%527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D
-%527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D
-%527D527D527D527D527D27F8F852FD21FF52FD51F87DFD22FF52FD4EF827
-%7DFD25FFFD4CA8FD91FFCACACAFFFFFF9AC3CAFFFFCA93B59ACAFD05FFCA
-%FD06FFCACACAFD04FFCA93B593BC6FFFFFCA93B593BC93FFCABC9AFFFFFF
-%93BCFFFFFFCA9AB593CAFD05FFB6A1FFFFFF94CAFD04FFCAFFFFFF93B593
-%BC93FD04FFCAC4FD13FF9A448DCAFFA18C44BCFFBC6820F8208CCAFFFF93
-%93688D93FFFFFF8C68448D8CCAFFCA8C20F8F8F8449ACA8C20F8F8F8449A
-%BC448CCAFF9A6868CAFFBC6820F84468FD04FFCA688CCAFF9A6868CAFFFF
-%8C688DFF8C20F8F8F82093FF9AB044688CBCCAFD10FFCA6944BCFFB62068
-%CAFF8CF82069444493FF8C44F820F8689AFF9320F86944208CFFCA68F893
-%8CB58CCACA68F8938CB58CCA9A4420BCFFC32069CAFF8CF82068204593FF
-%FFFF9A4444C3FFC320459AFFCA6920B6FF93F8938CB58CBCFFB5F8444445
-%68C3FD11FF8CF88CFF8CF88CFFC368F8B0C3B0F8B5FF8DF8208C68F8B5FF
-%B5F88C9ABC208DFFCA442093FD04FFCA442093FD04FFBC20F88CFF762020
-%CAA144F8B5C38CF8B5FFFFFFB5F8208CFFC368F8B5FFC4442093FF8CF88C
-%FD04FFCA68208CCA8C208CFD11FFB5F893C393F8B5FFCA44449AFF934493
-%FF68F88CFF93B59AFF68F88CFF764444CAC46920BCFD04FFC46920BCFD04
-%FF9320F893A1BC204493CA204493FF934493FFFFFF8CF8F8B5FFFF8CF88C
-%FF932044CAFF8DF8B5FD04FFCA68F8B5FFB5F893FD11FF9A4420FC20449A
-%FFC368F8BCFFCA93CAC368F8B0FD05FF69F88DFFA12068C3CA442093FD04
-%FFCA442093FD04FF93F8F82093932020BCC34420BCFFCA93A1FFFFCA8DF8
-%F844CAFFB5F88CFF93F88CCAFF68F88CFD04FFCA44F88CFF8CF88CFD12FF
-%8CF844F88CFFFFCA44F894FD04FFCA44F88DFD05FF68F88CFFCA4544CACA
-%6920BCFD04FFCA6920BCFD04FF8CF8F8F88CBD20449ACA442093FD06FFCA
-%44F8F8449AFF932068CA8CF88CFFFF68F8B5FD04FFCA68F8B5FFB5F8B5FD
-%12FF93F8F8F8B5FFFFC368F8B093CACAFFC36820BCFD05FF6FF88DC39320
-%68CACA44208CCAC3CAFFCA20208CCAC3CAFFB5F8F8F8688C2020BCC368F8
-%FC6FCACAFFFFFF93202044F8B5FFBD20449393F893FFCA44F88CCAC3CAFF
-%CA44F88CCA8CF88CFD12FFA144F84493FFFFFF8C20F84444B5CAFF444493
-%FD05FF68F8446920F88CFFCA44F84444688CFFA144F84444688CFF8DF820
-%4420B020449AFF8C20204444B5FFFFFFB5F89368F88CFFC46920B544449A
-%FFC469F82044698CFFC469F868442020BCFD12FFCA44F844CAFFFFFFC38C
-%68202020BCFF682093FD05FF6FF8F8F82068BCFFCA20F8F820688DFFA120
-%F8F820688DFFB5F86868F88C2020BCFFC38C68442020BCFFFF8CF88C8CF8
-%68C3FF8CF88C2044CAFFCA44F8F82044B0CACA44F8F8F8208DCAFD12FFA1
-%68F8699BFD05FFCACA8C2093FF44F88CFD05FF69F8F8F844BCFFFFCA44F8
-%4593CAFFFFA144F84593CAFFFF8DF844B5F868F8459AFFFFFFCAC38C2093
-%FFCA93F8938C2044C3FFB5F868F893CAFFCA69F8208CCAFFFFCA69F8F8F8
-%93CAFD13FF9420F8F8B5FD07FFB5F893C368F8B5FD05FF9AF8F8F8208CFF
-%FFCA44208CFD04FFCA20208CFD04FFB5F8689344F8F820BCFD05FFB5F8B5
-%FFBC202093BC202093FF8C20F8F88CFFFFCA44F88CFD04FFCA44F8F8F844
-%C3FD13FF8CF868208CFFFFFFA1C3FFFF8CF868CA44F88DFD05FF6FF86893
-%F8B5FFFFC46920BCFD04FFC46820BCFD04FF8CF88CCA68F8F84493FF9AC3
-%CAFF8DF86FFF932068B58C44F8B5FFBC20F8F8B5FFFFCA68F8B5FD04FFCA
-%68F8B0442093FD12FFCA68F8FC44449AFFC38C44BCFF93F88DC368F8B5FF
-%FF68B0FF93F86F8CF844CAFFCA442093FD04FFCA442093FD04FF93F88DFF
-%93F8F820BCC38C449AFFB5F869FFB0FD06F868FFA168F82093FFFFFF44F8
-%8CFD04FFCA4420938DF88DFD12FFBC2045BC93F8B5FFCA442193FF8CF88C
-%CA44F893FF9A4568FF6FF88CC3444593FFCA69209AFD04FFCA69209AFD04
-%FF8CF88CFF9321F8449ACA442093FF8DF868FF8CF820934420F8699BFF8C
-%F844C3FFFFFF6FF8B5FD04FFCA6820BD8D2068CAFD11FF8CF868FF8CF868
-%FFCA68F8B09BFCF88DC368F8B593B5F868C39AF88DCA68F8B5FFCA442093
-%FD04FFCA442093FD04FFB5F88DFFCA44F820BCC368F88C9AB5F86F9A4420
-%93CAC38C20F893FF93F868C3FFFFFF68F88CFD04FFCA442093BD204493FD
-%10FFCA93F8B5FFBC20449AFF8CF8206920208CFF8CF8204444F88CFF6FF8
-%8CFF8CF868FFCA68F8938C8D8CC3CA68F8938C8D8CC38DF88CFFFFB5F844
-%9AFF8CF82068F82093BC2093CAFFFFCA68F88CFF8DF88CFD04FFB5F8938C
-%B568B5C469F8BCCA93F8B5FD10FFCA688DA1FFCA8D2093FFBC6820F82068
-%A1FFBC44F8F8204493FFB5F88DFF93204494CA44FD05F88CCA44FD05F88C
-%93208CFFFF934444BCFFBC6820F82068CA9A8C93FD04FFB020FCCABC4493
-%FD04FF8CFD05F868CA682093FF8CF868CAFD10FFB5CAFFFFFFBCB59AFFFF
-%CA93B593CAFFFFFFC38DB593C3FFFF9AB59AFFCAB593FFFFB58CB58DB58C
-%CAFFB58CB58DB58CCACAB59AFFFFFF93CAFFFFFFCA93B593CAFFFFC3FD05
-%FFCAB5CAFFFFB59AFD04FFBC8DB58CB58DBCFFB68DCAFFCA8CBCFDFCFFFD
-%FCFFFDFCFFFDFCFFFDFCFFFDFCFFFDECFFFF
-%%EndData
-%%EndComments
-%%BeginProlog
-%%BeginResource: procset Adobe_level2_AI5 1.2 0
-%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation)
-%%Version: 1.2 0
-%%CreationDate: (04/10/93) ()
-%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
-userdict /Adobe_level2_AI5 26 dict dup begin
-       put
-       /packedarray where not
-       {
-               userdict begin
-               /packedarray
-               {
-                       array astore readonly
-               } bind def
-               /setpacking /pop load def
-               /currentpacking false def
-        end
-               0
-       } if
-       pop
-       userdict /defaultpacking currentpacking put true setpacking
-       /initialize
-       {
-               Adobe_level2_AI5 begin
-       } bind def
-       /terminate
-       {
-               currentdict Adobe_level2_AI5 eq
-               {
-                end
-               } if
-       } bind def
-       mark
-       /setcustomcolor where not
-       {
-               /findcmykcustomcolor
-               {
-                       (AI8_CMYK_CustomColor)
-                       6 packedarray
-               } bind def
-               /findrgbcustomcolor
-               {
-                       (AI8_RGB_CustomColor)
-                       5 packedarray
-               } bind def
-               /setcustomcolor
-               {
-                       exch 
-                       aload pop dup
-                       (AI8_CMYK_CustomColor) eq
-                       {
-                               pop pop
-                               4
-                               {
-                                       4 index mul
-                                       4 1 roll
-                               } repeat
-                               5 -1 roll pop
-                               setcmykcolor
-                       }
-                       {
-                               dup (AI8_RGB_CustomColor) eq
-                               {
-                                       pop pop
-                                       3
-                                       {
-                                               1 exch sub
-                                               3 index mul 
-                                               1 exch sub
-                                               3 1 roll
-                                       } repeat
-                                       4 -1 roll pop
-                                       setrgbcolor
-                               }
-                               {
-                                       pop
-                                       4
-                                       {
-                                               4 index mul 4 1 roll
-                                       } repeat
-                                       5 -1 roll pop
-                                       setcmykcolor
-                               } ifelse
-                       } ifelse
-               }
-               def
-       } if
-       /setAIseparationgray
-       {
-               false setoverprint
-               0 setgray
-               /setseparationgray where{
-                       pop setseparationgray
-               }{
-                       /setcolorspace where{
-                               pop
-                               [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace
-                               1 exch sub setcolor
-                       }{
-                               setgray
-                       }ifelse
-               }ifelse
-       } def
-       
-       /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def
-       userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put
-       userdict /level2?
-       systemdict /languagelevel known dup
-       {
-               pop systemdict /languagelevel get 2 ge
-       } if
-       put
-/level2ScreenFreq
-{
- begin
-               60
-               HalftoneType 1 eq
-               {
-                       pop Frequency
-               } if
-               HalftoneType 2 eq
-               {
-                       pop GrayFrequency
-               } if
-               HalftoneType 5 eq
-               {
-                       pop Default level2ScreenFreq
-               } if
- end
-} bind def
-userdict /currentScreenFreq  
-       level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put
-level2? not
-       {
-               /setcmykcolor where not
-               {
-                       /setcmykcolor
-                       {
-                               exch .11 mul add exch .59 mul add exch .3 mul add
-                               1 exch sub setgray
-                       } def
-               } if
-               /currentcmykcolor where not
-               {
-                       /currentcmykcolor
-                       {
-                               0 0 0 1 currentgray sub
-                       } def
-               } if
-               /setoverprint where not
-               {
-                       /setoverprint /pop load def
-               } if
-               /selectfont where not
-               {
-                       /selectfont
-                       {
-                               exch findfont exch
-                               dup type /arraytype eq
-                               {
-                                       makefont
-                               }
-                               {
-                                       scalefont
-                               } ifelse
-                               setfont
-                       } bind def
-               } if
-               /cshow where not
-               {
-                       /cshow
-                       {
-                               [
-                               0 0 5 -1 roll aload pop
-                               ] cvx bind forall
-                       } bind def
-               } if
-       } if
-       cleartomark
-       /anyColor?
-       {
-               add add add 0 ne
-       } bind def
-       /testColor
-       {
-               gsave
-               setcmykcolor currentcmykcolor
-               grestore
-       } bind def
-       /testCMYKColorThrough
-       {
-               testColor anyColor?
-       } bind def
-       userdict /composite?
-       1 0 0 0 testCMYKColorThrough
-       0 1 0 0 testCMYKColorThrough
-       0 0 1 0 testCMYKColorThrough
-       0 0 0 1 testCMYKColorThrough
-       and and and
-       put
-       composite? not
-       {
-               userdict begin
-               gsave
-               /cyan? 1 0 0 0 testCMYKColorThrough def
-               /magenta? 0 1 0 0 testCMYKColorThrough def
-               /yellow? 0 0 1 0 testCMYKColorThrough def
-               /black? 0 0 0 1 testCMYKColorThrough def
-               grestore
-               /isCMYKSep? cyan? magenta? yellow? black? or or or def
-               /customColor? isCMYKSep? not def
-        end
-       } if
- end defaultpacking setpacking
-%%EndResource
-%%BeginResource: procset Adobe_typography_AI5 1.0 1
-%%Title: (Typography Operators)
-%%Version: 1.0 1
-%%CreationDate:(6/10/1996) ()
-%%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved)
-currentpacking true setpacking
-userdict /Adobe_typography_AI5 68 dict dup begin
-put
-/initialize
-{
- begin
- begin
-       Adobe_typography_AI5 begin
-       Adobe_typography_AI5
-       {
-               dup xcheck
-               {
-                       bind
-               } if
-               pop pop
-       } forall
- end
- end
- end
-       Adobe_typography_AI5 begin
-} def
-/terminate
-{
-       currentdict Adobe_typography_AI5 eq
-       {
-        end
-       } if
-} def
-/modifyEncoding
-{
-       /_tempEncode exch ddef
-       /_pntr 0 ddef
-       {
-               counttomark -1 roll
-               dup type dup /marktype eq
-               {
-                       pop pop exit
-               }
-               {
-                       /nametype eq
-                       {
-                               _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll
-                               put
-                       }
-                       {
-                               /_pntr exch ddef
-                       } ifelse
-               } ifelse
-       } loop
-       _tempEncode
-} def
-/havefont
-{
-       systemdict /languagelevel known
-               {
-               /Font resourcestatus dup
-                       { exch pop exch pop }
-               if
-               }
-               {
-               systemdict /FontDirectory get 1 index known
-                       { pop true }
-                       {
-                       systemdict /fileposition known
-                               {
-                               dup length 6 add exch
-                               Ss 6 250 getinterval
-                               cvs pop
-                               Ss exch 0 exch getinterval
-                               status
-                                       { pop pop pop pop true }
-                                       { false }
-                               ifelse
-                               }
-                               {
-                               pop false
-                               }
-                       ifelse
-                       }
-               ifelse
-               }
-       ifelse
-} def
-/TE
-{
-       StandardEncoding 256 array copy modifyEncoding
-       /_nativeEncoding exch def
-} def
-/subststring {
-       exch 2 index exch search
-       {
-               exch pop
-               exch dup () eq
-               {
-                       pop exch concatstring
-               }
-               {
-                       3 -1 roll
-                       exch concatstring
-                       concatstring
-               } ifelse
-               exch pop true
-       }
-       {
-               pop pop false
-       } ifelse
-} def
-/concatstring {
-       1 index length 1 index length
-       1 index add
-       string
-       dup 0 5 index putinterval
-       dup 2 index 4 index putinterval
-       4 1 roll pop pop pop
-} def
-%
-/TZ
-{
-       dup type /arraytype eq
-       {
-               /_wv exch def
-       }
-       {
-               /_wv 0 def
-       } ifelse
-       /_useNativeEncoding exch def
-       2 index havefont
-       {
-               3 index
-               255 string
-               cvs
-               
-               dup
-               (_Symbol_)
-               eq
-               {
-                       pop
-                       2 index
-                       findfont
-                       
-               }
-               {
-                       1 index 0 eq
-                       {
-                               dup length 1 sub
-                               1 exch
-                               getinterval
-                               
-                               cvn
-                               findfont
-                       }
-                       {
-                               pop 2 index findfont
-                       } ifelse
-               } ifelse
-       }
-       {
-               dup 1 eq
-               {
-                       2 index 64 string cvs
-                       dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring
-                       {
-                               exch pop dup havefont
-                               {
-                                       findfont false
-                               }
-                               {
-                                       pop true
-                               } ifelse
-                       }
-                       {
-                               pop     dup
-                               (-90ms-RKSJ-) (-Ext-RKSJ-) subststring
-                               {
-                                       exch pop dup havefont
-                                       {
-                                               findfont false
-                                       }
-                                       {
-                                               pop true
-                                       } ifelse
-                               }
-                               {
-                                       pop pop true
-                               } ifelse
-                       } ifelse
-                       {
-                               1 index 1 eq
-                               {
-                                       /Ryumin-Light-Ext-RKSJ-V havefont
-                                       {/Ryumin-Light-Ext-RKSJ-V}
-                                       {/Courier}
-                                       ifelse
-                               }
-                               {
-                                       /Ryumin-Light-83pv-RKSJ-H havefont
-                                       {/Ryumin-Light-83pv-RKSJ-H}
-                                       {/Courier}
-                                       ifelse
-                               } ifelse
-                               findfont
-                               [1 0 0.5 1 0 0] makefont
-                       } if
-               }
-               {
-                       /Courier findfont
-               } ifelse
-       } ifelse
-       _wv type /arraytype eq
-       {
-               _wv makeblendedfont
-       } if
-       dup length 10 add dict
- begin
-       mark exch
-       {
-               1 index /FID ne
-               {
-                       def
-               } if
-               cleartomark mark
-       } forall
-       pop
-       /FontScript exch def
-       /FontDirection exch def
-       /FontRequest exch def
-       /FontName exch def
-       counttomark 0 eq
-       {
-               1 _useNativeEncoding eq
-               {
-                       /Encoding _nativeEncoding def
-               } if
-               cleartomark
-       }
-       {
-               /Encoding load 256 array copy
-               modifyEncoding /Encoding exch def
-       } ifelse
-       FontName currentdict
- end
-       definefont pop
-} def
-/tr
-{
-       _ax _ay 3 2 roll
-} def
-/trj
-{
-       _cx _cy _sp _ax _ay 6 5 roll
-} def
-/a0
-{
-       /Tx
-       {
-               dup
-               currentpoint 3 2 roll
-               tr _psf
-               newpath moveto
-               tr _ctm _pss
-       } ddef
-       /Tj
-       {
-               dup
-               currentpoint 3 2 roll
-               trj _pjsf
-               newpath moveto
-               trj _ctm _pjss
-       } ddef
-} def
-/a1
-{
-W B
-} def
-/e0
-{
-       /Tx
-       {
-               tr _psf
-       } ddef
-       /Tj
-       {
-               trj _pjsf
-       } ddef
-} def
-/e1
-{
-W F 
-} def
-/i0
-{
-       /Tx
-       {
-               tr sp
-       } ddef
-       /Tj
-       {
-               trj jsp
-       } ddef
-} def
-/i1
-{
-       W N
-} def
-/o0
-{
-       /Tx
-       {
-               tr sw rmoveto
-       } ddef
-       /Tj
-       {
-               trj swj rmoveto
-       } ddef
-} def
-/r0
-{
-       /Tx
-       {
-               tr _ctm _pss
-       } ddef
-       /Tj
-       {
-               trj _ctm _pjss
-       } ddef
-} def
-/r1
-{
-W S
-} def
-/To
-{
-       pop _ctm currentmatrix pop
-} def
-/TO
-{
-       iTe _ctm setmatrix newpath
-} def
-/Tp
-{
-       pop _tm astore pop _ctm setmatrix
-       _tDict begin
-       /W
-       {
-       } def
-       /h
-       {
-       } def
-} def
-/TP
-{
- end
-       iTm 0 0 moveto
-} def
-/Tr
-{
-       _render 3 le
-       {
-               currentpoint newpath moveto
-       } if
-       dup 8 eq
-       {
-               pop 0
-       }
-       {
-               dup 9 eq
-               {
-                       pop 1
-               } if
-       } ifelse
-       dup /_render exch ddef
-       _renderStart exch get load exec
-} def
-/iTm
-{
-       _ctm setmatrix _tm concat
-       _shift aload pop _lineorientation 1 eq { exch } if translate
-       _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale
-} def
-/Tm
-{
-       _tm astore pop iTm 0 0 moveto
-} def
-/Td
-{
-       _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto
-} def
-/iTe
-{
-       _render -1 eq
-       {
-       }
-       {
-               _renderEnd _render get dup null ne
-               {
-                       load exec
-               }
-               {
-                       pop
-               } ifelse
-       } ifelse
-       /_render -1 ddef
-} def
-/Ta
-{
-       pop
-} def
-/Tf
-{
-       1 index type /nametype eq
-       {
-               dup 0.75 mul 1 index 0.25 mul neg
-       } if
-       /_fontDescent exch ddef
-       /_fontAscent exch ddef
-       /_fontSize exch ddef
-       /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef
-       /_fontHeight _fontSize ddef
-       findfont _fontSize scalefont setfont
-} def
-/Tl
-{
-       pop neg 0 exch
-       _leading astore pop
-} def
-/Tt
-{
-       pop
-} def
-/TW
-{
-       3 npop
-} def
-/Tw
-{
-       /_cx exch ddef
-} def
-/TC
-{
-       3 npop
-} def
-/Tc
-{
-       /_ax exch ddef
-} def
-/Ts
-{
-       0 exch
-       _shift astore pop
-       currentpoint
-       iTm
-       moveto
-} def
-/Ti
-{
-       3 npop
-} def
-/Tz
-{
-       count 1 eq { 100 } if
-       100 div exch 100 div exch
-       _scale astore pop
-       iTm
-} def
-/TA
-{
-       pop
-} def
-/Tq
-{
-       pop
-} def
-/Tg
-{
-       pop
-} def
-/TG
-{
-       pop
-} def
-/Tv
-{
-       /_lineorientation exch ddef
-} def
-/TV
-{
-       /_charorientation exch ddef
-} def
-/Ty
-{
-       dup /_yokoorientation exch ddef 1 sub neg Tv
-} def
-/TY
-{
-       pop
-} def
-/T~
-{
-       Tx
-} def
-/Th
-{
-       pop pop pop pop pop
-} def
-/TX
-{
-       pop
-} def
-/Tk
-{
-       _fontSize mul 1000 div
-       _lineorientation 0 eq { neg 0 } { 0 exch } ifelse
-       rmoveto
-       pop
-} def
-/TK
-{
-       2 npop
-} def
-/T*
-{
-       _leading aload pop
-       _lineorientation 0 ne { exch } if
-       Td
-} def
-/T*-
-{
-       _leading aload pop
-       _lineorientation 0 ne { exch } if
-       exch neg exch neg
-       Td
-} def
-/T-
-{
-       _ax neg 0 rmoveto
-       _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse
-} def
-/T+
-{
-} def
-/TR
-{
-       _ctm currentmatrix pop
-       _tm astore pop
-       iTm 0 0 moveto
-} def
-/TS
-{
-       currentfont 3 1 roll
-       /_Symbol_ findfont _fontSize scalefont setfont
-       
-       0 eq
-       {
-               Tx
-       }
-       {
-               Tj
-       } ifelse
-       setfont
-} def
-/Xb
-{
-       pop pop
-} def
-/Tb /Xb load def
-/Xe
-{
-       pop pop pop pop
-} def
-/Te /Xe load def
-/XB
-{
-} def
-/TB /XB load def
-currentdict readonly pop
-end
-setpacking
-%
-/X^
-{
-       currentfont 5 1 roll
-       dup havefont
-               {
-               findfont _fontSize scalefont setfont
-               }
-               {
-               pop
-               exch
-               } ifelse
-       2 index 0 eq
-       {
-               Tx
-       }
-       {
-               Tj
-       } ifelse
-       pop     pop
-       setfont
-} def
-/T^    /X^     load def
-%%EndResource
-%%BeginProcSet: Adobe_ColorImage_AI6 1.3 0
-userdict /Adobe_ColorImage_AI6 known not
-{
-       userdict /Adobe_ColorImage_AI6 53 dict put 
-} if
-userdict /Adobe_ColorImage_AI6 get begin
-/initialize { 
-       Adobe_ColorImage_AI6 begin
-       Adobe_ColorImage_AI6 {
-               dup type /arraytype eq {
-                       dup xcheck {
-                               bind
-                       } if
-               } if
-               pop pop
-       } forall
-} def
-/terminate { end } def
-currentdict /Adobe_ColorImage_AI6_Vars known not {
-       /Adobe_ColorImage_AI6_Vars 41 dict def
-} if
-Adobe_ColorImage_AI6_Vars begin
-       /plateindex -1 def
-       /_newproc null def
-       /_proc1 null def
-       /_proc2 null def
-       /sourcearray 4 array def
-       /_ptispace null def
-       /_ptiname null def
-       /_pti0 0 def
-       /_pti1 0 def
-       /_ptiproc null def
-       /_ptiscale 0 def
-       /_pticomps 0 def
-       /_ptibuf 0 string def
-       /_gtigray 0 def
-       /_cticmyk null def
-       /_rtirgb null def
-       /XIEnable true def
-       /XIType 0 def
-       /XIEncoding 0 def
-       /XICompression 0 def
-       /XIChannelCount 0 def
-       /XIBitsPerPixel 0 def
-       /XIImageHeight 0 def
-       /XIImageWidth 0 def
-       /XIImageMatrix null def
-       /XIRowBytes 0 def
-       /XIFile null def
-       /XIBuffer1 null def
-       /XIBuffer2 null def
-       /XIBuffer3 null def
-       /XIDataProc null def
-       /XIColorSpace /DeviceGray def
-       /XIColorValues 0 def
-       /XIPlateList false def
-end
-/ci6colorimage /colorimage where {/colorimage get}{null} ifelse def
-/ci6image systemdict /image get def
-/ci6curtransfer systemdict /currenttransfer get def
-/ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def
-/ci6foureq {
-       4 index ne {
-               pop pop pop false
-       }{
-               4 index ne {
-                       pop pop false
-               }{
-                       4 index ne {
-                               pop false
-                       }{
-                               4 index eq
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6testplate {
-       Adobe_ColorImage_AI6_Vars begin
-               /plateindex -1 def
-               /setcmykcolor where {
-                       pop
-                       gsave
-                       1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
-                       0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
-                       0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub
-                       0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub
-                       grestore
-                       1 0 0 0 ci6foureq { 
-                               /plateindex 0 def
-                       }{
-                               0 1 0 0 ci6foureq { 
-                                       /plateindex 1 def
-                               }{
-                                       0 0 1 0 ci6foureq {
-                                               /plateindex 2 def
-                                       }{
-                                               0 0 0 1 ci6foureq { 
-                                                       /plateindex 3 def
-                                               }{
-                                                       0 0 0 0 ci6foureq {
-                                                               /plateindex 5 def
-                                                       } if
-                                               } ifelse
-                                       } ifelse
-                               } ifelse
-                       } ifelse
-                       pop pop pop pop
-               } if
-               plateindex
- end
-} def
-/ci6concatprocs {
-       /packedarray where {
-               pop dup type /packedarraytype eq 2 index type
-               /packedarraytype eq or
-       }{
-               false
-       } ifelse
-       {
-               /_proc2 exch cvlit def
-               /_proc1 exch cvlit def
-               _proc1 aload pop
-               _proc2 aload pop
-               _proc1 length
-               _proc2 length add
-               packedarray cvx
-       }{
-               /_proc2 exch cvlit def
-               /_proc1 exch cvlit def
-               /_newproc _proc1 length _proc2 length add array def
-               _newproc 0 _proc1 putinterval
-               _newproc _proc1 length _proc2 putinterval
-               _newproc cvx
-       } ifelse
-} def
-/ci6istint {
-       type /arraytype eq 
-} def
-/ci6isspot {
-       dup type /arraytype eq {
-               dup length 1 sub get /Separation eq
-       }{
-               pop false
-       } ifelse
-} def
-/ci6spotname {
-       dup ci6isspot {dup length 2 sub get}{pop ()} ifelse
-} def
-/ci6altspace {
-       aload pop pop pop ci6colormake
-} def
-/ci6numcomps {
-       dup /DeviceGray eq {
-               pop 1
-       }{
-               dup /DeviceRGB eq {
-                       pop 3
-               }{
-                       /DeviceCMYK eq {
-                               4
-                       }{
-                               1
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6marksplate {
-       dup /DeviceGray eq {
-               pop plateindex 3 eq
-       }{
-               dup /DeviceRGB eq {
-                       pop plateindex 5 ne
-               }{
-                       dup /DeviceCMYK eq {
-                               pop plateindex 5 ne
-                       }{
-                               dup ci6isspot {
-                                       /findcmykcustomcolor where {
-                                               pop
-                                               dup length 2 sub get
-                                               0.1 0.1 0.1 0.1 5 -1 roll
-                                               findcmykcustomcolor 1 setcustomcolor
-                                               systemdict /currentgray get exec
-                                               1 ne
-                                       }{
-                                               pop plateindex 5 ne
-                                       } ifelse
-                               }{
-                                       pop plateindex 5 ne
-                               } ifelse
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6colormake {
-       dup ci6numcomps
-       exch 1 index 2 add 1 roll
-       dup 1 eq {pop}{array astore} ifelse
-       exch
-} def
-/ci6colorexpand {
-       dup ci6spotname exch
-       dup ci6istint {
-               ci6altspace
-               exch 4 1 roll
-       }{
-               1 3 1 roll
-       } ifelse
-} def
-/ci6colortint {
-       dup /DeviceGray eq {
-               3 1 roll 1 exch sub mul 1 exch sub exch
-       }{
-               dup /DeviceRGB eq {
-                       3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch
-               }{
-                       dup /DeviceCMYK eq {
-                               3 1 roll {1 index mul exch} forall pop 4 array astore exch
-                       }{
-                               3 1 roll mul exch
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6colortocmyk {
-       dup /DeviceGray eq {
-               pop 1 exch sub 0 0 0 4 -1 roll 4 array astore
-       }{
-               dup /DeviceRGB eq {
-                       pop aload pop _rgbtocmyk 4 array astore
-               }{
-                       dup /DeviceCMYK eq {
-                               pop
-                       }{
-                               ci6altspace ci6colortint ci6colortocmyk
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6makeimagedict {
-       7 dict begin
-               /ImageType 1 def
-               /Decode exch def
-               /DataSource exch def
-               /ImageMatrix exch def
-               /BitsPerComponent exch def
-               /Height exch def
-               /Width exch def
-       currentdict end
-} def
-/ci6stringinvert {
-       0 1 2 index length 1 sub {
-               dup 2 index exch get 255 exch sub 2 index 3 1 roll put
-       } for
-} def
-/ci6stringknockout {
-       0 1 2 index length 1 sub {
-               255 2 index 3 1 roll put
-       } for
-} def
-/ci6stringapply {
-       0 1 4 index length 1 sub {
-               dup
-               4 index exch get
-               3 index 3 1 roll
-               3 index exec
-       } for
-       pop exch pop
-} def
-/ci6walkrgbstring {
-       0 3 index
-       dup length 1 sub 0 3 3 -1 roll {
-               3 getinterval {} forall
-               5 index exec
-               3 index
-       } for
-       
-        5 {pop} repeat
-} def
-/ci6walkcmykstring
-{
-       0 3 index
-       dup length 1 sub 0 4 3 -1 roll {
-               4 getinterval {} forall
-               
-               6 index exec
-               
-               3 index
-               
-       } for
-       
-       5 { pop } repeat
-       
-} def
-/ci6putrgbtograystr
-{
-       .11 mul exch
-       
-       .59 mul add exch
-       
-       .3 mul add
-       
-       cvi 3 copy put
-       
-       pop 1 add
-} def
-/ci6putcmyktograystr
-{
-       exch .11 mul add
-       
-       exch .59 mul add
-       
-       exch .3 mul add
-       
-       dup 255 gt { pop 255 } if
-       
-       255 exch sub cvi 3 copy put
-       
-       pop 1 add
-} def
-/ci6rgbtograyproc {    
-       Adobe_ColorImage_AI6_Vars begin 
-               sourcearray 0 get exec
-               XIBuffer3
-               dup 3 1 roll 
-               
-               /ci6putrgbtograystr load exch
-               ci6walkrgbstring
- end
-} def
-/ci6cmyktograyproc {   
-       Adobe_ColorImage_AI6_Vars begin
-               sourcearray 0 get exec
-               XIBuffer3
-               dup 3 1 roll 
-               
-               /ci6putcmyktograystr load exch
-               ci6walkcmykstring
- end
-} def
-/ci6separatecmykproc { 
-       Adobe_ColorImage_AI6_Vars begin
-               sourcearray 0 get exec
-               
-               XIBuffer3
-               
-               0 2 index
-               
-               plateindex 4 2 index length 1 sub {
-                       get 255 exch sub
-                       
-                       3 copy put pop 1 add
-                       
-                       2 index
-               } for
-               pop pop exch pop
- end
-} def
-       
-/ci6compositeimage {
-       dup 1 eq {
-               pop pop image
-       }{
-               /ci6colorimage load null ne {
-                       ci6colorimage
-               }{
-                       3 1 roll pop
-                       sourcearray 0 3 -1 roll put
-                       3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load
-                       image
-               } ifelse
-       } ifelse
-} def
-/ci6knockoutimage {
-       gsave
-       0 ci6curtransfer exec 1 ci6curtransfer exec
-       eq {
-               0 ci6curtransfer exec 0.5 lt
-       }{
-               0 ci6curtransfer exec 1 ci6curtransfer exec gt
-       } ifelse
-       {{pop 0}}{{pop 1}} ifelse
-       systemdict /settransfer get exec
-       ci6compositeimage
-       grestore
-} def
-/ci6drawimage {
-       ci6testplate -1 eq {
-               pop ci6compositeimage
-       }{
-               dup type /arraytype eq {
-                       dup length plateindex gt {plateindex get}{pop false} ifelse
-               }{
-                       {
-                               true
-                       }{
-                               dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse
-                       } ifelse
-               } ifelse
-               {
-                       dup 1 eq {
-                               pop pop ci6image
-                       }{
-                               dup 3 eq {
-                                       ci6compositeimage
-                               }{
-                                       pop pop
-                                       sourcearray 0 3 -1 roll put
-                                       /ci6separatecmykproc load
-                                       ci6image
-                               } ifelse
-                       } ifelse
-               }{
-                       ci6curoverprint {
-                               7 {pop} repeat
-                       }{
-                               ci6knockoutimage
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6proctintimage {
-       /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store
-       /_pticomps _ptispace ci6numcomps store
-       /_ptiscale _pti1 _pti0 sub store
-       level2? {
-               _ptiname length 0 gt version cvr 2012 ge and {
-                       [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace
-                       [_pti0 _pti1] ci6makeimagedict ci6image
-               }{
-                       [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace
-                       [0 255] ci6makeimagedict ci6image
-               } ifelse
-       }{
-               _pticomps 1 eq {
-                       {
-                               dup
-                               {
-                                       255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put
-                               } ci6stringapply
-                       } ci6concatprocs ci6image
-               }{
-                       {
-                               dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse
-                               _ptibuf {
-                                       exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc
-                                       _pticomps 2 add -2 roll
-                                       _pticomps 1 sub -1 0 {
-                                               1 index add 2 index exch
-                                               5 -1 roll
-                                               255 mul cvi put
-                                       } for
-                                       pop pop
-                               } ci6stringapply
-                       } ci6concatprocs false _pticomps
-                       /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse
-               } ifelse
-       } ifelse
-} def
-/ci6graytintimage {
-       /_gtigray 5 -1 roll store
-       {1 _gtigray sub mul 1 exch sub} 4 1 roll
-       /DeviceGray ci6proctintimage
-} def
-/ci6cmyktintimage {
-       /_cticmyk 5 -1 roll store
-       {_cticmyk {1 index mul exch} forall pop} 4 1 roll
-       /DeviceCMYK ci6proctintimage
-} def
-/ci6rgbtintimage {
-       /_rtirgb 5 -1 roll store
-       {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll
-       /DeviceRGB ci6proctintimage
-} def
-/ci6tintimage {
-       ci6testplate -1 eq {
-               ci6colorexpand
-               3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll
-               dup /DeviceGray eq {
-                       pop ci6graytintimage
-               }{
-                       dup /DeviceRGB eq {
-                               pop ci6rgbtintimage
-                       }{
-                               pop ci6cmyktintimage
-                       } ifelse
-               } ifelse
-       }{
-               dup ci6marksplate {
-                       plateindex 5 lt {
-                               ci6colortocmyk plateindex get
-                               dup 0 eq ci6curoverprint and {
-                                       7 {pop} repeat
-                               }{
-                                       1 exch sub
-                                       exch {1 0}{0 1} ifelse () ci6graytintimage
-                               } ifelse
-                       }{
-                               pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage
-                       } ifelse
-               }{
-                       ci6curoverprint {
-                               8 {pop} repeat
-                       }{
-                               pop pop pop
-                               {pop 1} 0 1 () /DeviceGray ci6proctintimage
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/XINullImage {
-} def
-/XIImageMask {
-       XIImageWidth XIImageHeight false
-       [XIImageWidth 0 0 XIImageHeight neg 0 0]
-       /XIDataProc load
-       imagemask
-} def
-/XIImageTint {
-       XIImageWidth XIImageHeight XIBitsPerPixel
-       [XIImageWidth 0 0 XIImageHeight neg 0 0]
-       /XIDataProc load
-       XIType 3 eq XIColorValues XIColorSpace ci6tintimage
-} def
-/XIImage {
-       XIImageWidth XIImageHeight XIBitsPerPixel
-       [XIImageWidth 0 0 XIImageHeight neg 0 0]
-       /XIDataProc load
-       false XIChannelCount XIPlateList ci6drawimage
-} def
-/XG {
-       pop pop
-} def
-/XF {
-       13 {pop} repeat
-} def
-/Xh {
-       Adobe_ColorImage_AI6_Vars begin
-               gsave
-               /XIType exch def
-               /XIImageHeight exch def
-               /XIImageWidth exch def
-               /XIImageMatrix exch def
-               0 0 moveto
-               XIImageMatrix concat
-               XIImageWidth XIImageHeight scale
-               
-               /_lp /null ddef
-               _fc
-               /_lp /imagemask ddef
- end
-} def
-/XH {
-       Adobe_ColorImage_AI6_Vars begin
-               grestore
- end
-} def
-/XIEnable {
-       Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put
-} def
-/XC {
-       Adobe_ColorImage_AI6_Vars begin
-               ci6colormake
-               /XIColorSpace exch def
-               /XIColorValues exch def
- end
-} def
-/XIPlates {
-       Adobe_ColorImage_AI6_Vars begin
-               /XIPlateList exch def
- end
-} def
-/XI
-{
-       Adobe_ColorImage_AI6_Vars begin
-               gsave
-               /XIType exch def
-               cvi dup
-               256 idiv /XICompression exch store
-               256 mod /XIEncoding exch store
-               pop pop
-               /XIChannelCount exch def
-               /XIBitsPerPixel exch def
-               /XIImageHeight exch def
-               /XIImageWidth exch def
-               pop pop pop pop
-               /XIImageMatrix exch def
-               XIBitsPerPixel 1 eq {
-                       XIImageWidth 8 div ceiling cvi
-               }{
-                       XIImageWidth XIChannelCount mul
-               } ifelse
-               /XIRowBytes exch def
-               XIEnable {
-                       /XIBuffer3 XIImageWidth string def
-                       XICompression 0 eq {
-                               /XIBuffer1 XIRowBytes string def
-                               XIEncoding 0 eq {
-                                       {currentfile XIBuffer1 readhexstring pop}
-                               }{
-                                       {currentfile XIBuffer1 readstring pop}
-                               } ifelse
-                       }{
-                               /XIBuffer1 256 string def
-                               /XIBuffer2 XIRowBytes string def
-                               {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if}
-                               /ASCII85Decode filter /DCTDecode filter
-                               /XIFile exch def
-                               {XIFile XIBuffer2 readstring pop}
-                       } ifelse
-                       /XIDataProc exch def
-                       
-                       XIType 1 ne {
-                               0 setgray
-                       } if
-                       XIType 1 eq {
-                               XIImageMask
-                       }{
-                               XIType 2 eq XIType 3 eq or {
-                                       XIImageTint
-                               }{
-                                       XIImage
-                               } ifelse
-                       } ifelse
-               }{
-                       XINullImage
-               } ifelse
-               /XIPlateList false def
-               grestore
- end
-} def
-end
-%%EndProcSet
-%%BeginResource: procset Adobe_Illustrator_AI5 1.3 0
-%%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog)
-%%Version: 1.3 0
-%%CreationDate: (3/7/1994) ()
-%%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved)
-currentpacking true setpacking
-userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin
-put
-/_?cmyk false def
-/_eo false def
-/_lp /none def
-/_pf
-{
-} def
-/_ps
-{
-} def
-/_psf
-{
-} def
-/_pss
-{
-} def
-/_pjsf
-{
-} def
-/_pjss
-{
-} def
-/_pola 0 def
-/_doClip 0 def
-/cf currentflat def
-/_lineorientation 0 def
-/_charorientation 0 def
-/_yokoorientation 0 def
-/_tm matrix def
-/_renderStart
-[
-/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0
-] def
-/_renderEnd
-[
-null null null null /i1 /i1 /i1 /i1
-] def
-/_render -1 def
-/_shift [0 0] def
-/_ax 0 def
-/_ay 0 def
-/_cx 0 def
-/_cy 0 def
-/_leading
-[
-0 0
-] def
-/_ctm matrix def
-/_mtx matrix def
-/_sp 16#020 def
-/_hyphen (-) def
-/_fontSize 0 def
-/_fontAscent 0 def
-/_fontDescent 0 def
-/_fontHeight 0 def
-/_fontRotateAdjust 0 def
-/Ss 256 string def
-Ss 0 (fonts/) putinterval
-/_cnt 0 def
-/_scale [1 1] def
-/_nativeEncoding 0 def
-/_useNativeEncoding 0 def
-/_tempEncode 0 def
-/_pntr 0 def
-/_tDict 2 dict def
-/_hfname 100 string def
-/_hffound false def
-/Tx
-{
-} def
-/Tj
-{
-} def
-/CRender
-{
-} def
-/_AI3_savepage
-{
-} def
-/_gf null def
-/_cf 4 array def
-/_rgbf 3 array def
-/_if null def
-/_of false def
-/_fc
-{
-} def
-/_gs null def
-/_cs 4 array def
-/_rgbs 3 array def
-/_is null def
-/_os false def
-/_sc
-{
-} def
-/_pd 1 dict def
-/_ed 15 dict def
-/_pm matrix def
-/_fm null def
-/_fd null def
-/_fdd null def
-/_sm null def
-/_sd null def
-/_sdd null def
-/_i null def
-/_lobyte 0 def
-/_hibyte 0 def
-/_cproc null def
-/_cscript 0 def
-/_hvax 0 def
-/_hvay 0 def
-/_hvwb 0 def
-/_hvcx 0 def
-/_hvcy 0 def
-/_bitfont null def
-/_bitlobyte 0 def
-/_bithibyte 0 def
-/_bitkey null def
-/_bitdata null def
-/_bitindex 0 def
-/discardSave null def
-/buffer 256 string def
-/beginString null def
-/endString null def
-/endStringLength null def
-/layerCnt 1 def
-/layerCount 1 def
-/perCent (%) 0 get def
-/perCentSeen? false def
-/newBuff null def
-/newBuffButFirst null def
-/newBuffLast null def
-/clipForward? false def
-end
-userdict /Adobe_Illustrator_AI5 known not {
-       userdict /Adobe_Illustrator_AI5 100 dict put
-} if
-userdict /Adobe_Illustrator_AI5 get begin
-/initialize
-{
-       Adobe_Illustrator_AI5 dup begin
-       Adobe_Illustrator_AI5_vars begin
-       /_aicmykps where {pop /_?cmyk _aicmykps def}if
-       discardDict
-       {
-               bind pop pop
-       } forall
-       dup /nc get begin
-       {
-               dup xcheck 1 index type /operatortype ne and
-               {
-                       bind
-               } if
-               pop pop
-       } forall
- end
-       newpath
-} def
-/terminate
-{
- end
- end
-} def
-/_
-null def
-/ddef
-{
-       Adobe_Illustrator_AI5_vars 3 1 roll put
-} def
-/xput
-{
-       dup load dup length exch maxlength eq
-       {
-               dup dup load dup
-               length 2 mul dict copy def
-       } if
-       load begin
-       def
- end
-} def
-/npop
-{
-       {
-               pop
-       } repeat
-} def
-/hswj
-{
-       dup stringwidth 3 2 roll
-       {
-               _hvwb eq { exch _hvcx add exch _hvcy add } if
-               exch _hvax add exch _hvay add
-       } cforall
-} def
-/vswj
-{
-       0 0 3 -1 roll
-       {
-               dup 255 le
-               _charorientation 1 eq
-               and
-               {
-                       dup cstring stringwidth 5 2 roll
-                       _hvwb eq { exch _hvcy sub exch _hvcx sub } if
-                       exch _hvay sub exch _hvax sub
-                       4 -1 roll sub exch
-                       3 -1 roll sub exch
-               }
-               {
-                       _hvwb eq { exch _hvcy sub exch _hvcx sub } if
-                       exch _hvay sub exch _hvax sub
-                       _fontHeight sub
-               } ifelse
-       } cforall
-} def
-/swj
-{
-       6 1 roll
-       /_hvay exch ddef
-       /_hvax exch ddef
-       /_hvwb exch ddef
-       /_hvcy exch ddef
-       /_hvcx exch ddef
-       _lineorientation 0 eq { hswj } { vswj } ifelse
-} def
-/sw
-{
-       0 0 0 6 3 roll swj
-} def
-/vjss
-{
-       4 1 roll
-       {
-               dup cstring
-               dup length 1 eq
-               _charorientation 1 eq
-               and
-               {
-                       -90 rotate
-                       currentpoint
-                       _fontRotateAdjust add
-                       moveto
-                       gsave
-                       false charpath currentpoint
-                       5 index setmatrix stroke
-                       grestore
-                       _fontRotateAdjust sub
-                       moveto
-                       _sp eq
-                       {
-                               5 index 5 index rmoveto
-                       } if
-                       2 copy rmoveto
-                       90 rotate
-               }
-               {
-                       currentpoint
-                       _fontHeight sub
-                       5 index sub
-                       3 index _sp eq
-                       {
-                               9 index sub
-                       } if
-       
-                       currentpoint
-                       exch 4 index stringwidth pop 2 div sub
-                       exch _fontAscent sub
-                       moveto
-       
-                       gsave
-                       2 index false charpath
-                       6 index setmatrix stroke
-                       grestore
-       
-                       moveto pop pop
-               } ifelse
-       } cforall
-       6 npop
-} def
-/hjss
-{
-       4 1 roll
-       {
-               dup cstring
-               gsave
-               false charpath currentpoint
-               5 index setmatrix stroke
-               grestore
-               moveto
-               _sp eq
-               {
-                       5 index 5 index rmoveto
-               } if
-               2 copy rmoveto
-       } cforall
-       6 npop
-} def
-/jss
-{
-       _lineorientation 0 eq { hjss } { vjss } ifelse
-} def
-/ss
-{
-       0 0 0 7 3 roll jss
-} def
-/vjsp
-{
-       4 1 roll
-       {
-               dup cstring
-               dup length 1 eq
-               _charorientation 1 eq
-               and
-               {
-                       -90 rotate
-                       currentpoint
-                       _fontRotateAdjust add
-                       moveto
-                       false charpath
-            currentpoint
-                       _fontRotateAdjust sub
-                       moveto
-                       _sp eq
-                       {
-                               5 index 5 index rmoveto
-                       } if
-                       2 copy rmoveto
-                       90 rotate
-               }
-               {
-                       currentpoint
-                       _fontHeight sub
-                       5 index sub
-                       3 index _sp eq
-                       {
-                               9 index sub
-                       } if
-       
-                       currentpoint
-                       exch 4 index stringwidth pop 2 div sub
-                       exch _fontAscent sub
-                       moveto
-       
-                       2 index false charpath
-       
-                       moveto pop pop
-               } ifelse
-       } cforall
-       6 npop
-} def
-/hjsp
-{
-    4 1 roll
-    {
-        dup cstring
-        false charpath
-        _sp eq
-        {
-            5 index 5 index rmoveto
-        } if
-        2 copy rmoveto
-    } cforall
-    6 npop
-} def
-/jsp
-{
-       matrix currentmatrix
-    _lineorientation 0 eq {hjsp} {vjsp} ifelse
-} def
-/sp
-{
-    matrix currentmatrix
-    0 0 0 7 3 roll
-    _lineorientation 0 eq {hjsp} {vjsp} ifelse
-} def
-/pl
-{
-       transform
-       0.25 sub round 0.25 add exch
-       0.25 sub round 0.25 add exch
-       itransform
-} def
-/setstrokeadjust where
-{
-       pop true setstrokeadjust
-       /c
-       {
-               curveto
-       } def
-       /C
-       /c load def
-       /v
-       {
-               currentpoint 6 2 roll curveto
-       } def
-       /V
-       /v load def
-       /y
-       {
-               2 copy curveto
-       } def
-       /Y
-       /y load def
-       /l
-       {
-               lineto
-       } def
-       /L
-       /l load def
-       /m
-       {
-               moveto
-       } def
-}
-{
-       /c
-       {
-               pl curveto
-       } def
-       /C
-       /c load def
-       /v
-       {
-               currentpoint 6 2 roll pl curveto
-       } def
-       /V
-       /v load def
-       /y
-       {
-               pl 2 copy curveto
-       } def
-       /Y
-       /y load def
-       /l
-       {
-               pl lineto
-       } def
-       /L
-       /l load def
-       /m
-       {
-               pl moveto
-       } def
-} ifelse
-/d
-{
-       setdash
-} def
-/cf
-{
-} def
-/i
-{
-       dup 0 eq
-       {
-               pop cf
-       } if
-       setflat
-} def
-/j
-{
-       setlinejoin
-} def
-/J
-{
-       setlinecap
-} def
-/M
-{
-       setmiterlimit
-} def
-/w
-{
-       setlinewidth
-} def
-/XR
-{
-       0 ne
-       /_eo exch ddef
-} def
-/H
-{
-} def
-/h
-{
-       closepath
-} def
-/N
-{
-       _pola 0 eq
-       {
-               _doClip 1 eq
-               {
-                       _eo {eoclip} {clip} ifelse /_doClip 0 ddef
-               } if
-               newpath
-       }
-       {
-               /CRender
-               {
-                       N
-               } ddef
-       } ifelse
-} def
-/n
-{
-       N
-} def
-/F
-{
-       _pola 0 eq
-       {
-               _doClip 1 eq
-               {
-                       gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc
-                       /_doClip 0 ddef
-               }
-               {
-                       _pf
-               } ifelse
-       }
-       {
-               /CRender
-               {
-                       F
-               } ddef
-       } ifelse
-} def
-/f
-{
-       closepath
-       F
-} def
-/S
-{
-       _pola 0 eq
-       {
-               _doClip 1 eq
-               {
-                       gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc
-                       /_doClip 0 ddef
-               }
-               {
-                       _ps
-               } ifelse
-       }
-       {
-               /CRender
-               {
-                       S
-               } ddef
-       } ifelse
-} def
-/s
-{
-       closepath
-       S
-} def
-/B
-{
-       _pola 0 eq
-       {
-               _doClip 1 eq
-               gsave F grestore
-               {
-                       gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc
-                       /_doClip 0 ddef
-               }
-               {
-                       S
-               } ifelse
-       }
-       {
-               /CRender
-               {
-                       B
-               } ddef
-       } ifelse
-} def
-/b
-{
-       closepath
-       B
-} def
-/W
-{
-       /_doClip 1 ddef
-} def
-/*
-{
-       count 0 ne
-       {
-               dup type /stringtype eq
-               {
-                       pop
-               } if
-       } if
-       newpath
-} def
-/u
-{
-} def
-/U
-{
-} def
-/q
-{
-       _pola 0 eq
-       {
-               gsave
-       } if
-} def
-/Q
-{
-       _pola 0 eq
-       {
-               grestore
-       } if
-} def
-/*u
-{
-       _pola 1 add /_pola exch ddef
-} def
-/*U
-{
-       _pola 1 sub /_pola exch ddef
-       _pola 0 eq
-       {
-               CRender
-       } if
-} def
-/D
-{
-       pop
-} def
-/*w
-{
-} def
-/*W
-{
-} def
-/`
-{
-       /_i save ddef
-       clipForward?
-       {
-               nulldevice
-       } if
-       6 1 roll 4 npop
-       concat pop
-       userdict begin
-       /showpage
-       {
-       } def
-       0 setgray
-       0 setlinecap
-       1 setlinewidth
-       0 setlinejoin
-       10 setmiterlimit
-       [] 0 setdash
-       /setstrokeadjust where {pop false setstrokeadjust} if
-       newpath
-       0 setgray
-       false setoverprint
-} def
-/~
-{
- end
-       _i restore
-} def
-/_rgbtocmyk
-{
-       3
-       {
-               1 exch sub 3 1 roll
-       } repeat
-       3 copy 1 4 1 roll
-       3
-       {
-               3 index 2 copy gt
-               {
-                       exch
-               } if
-               pop 4 1 roll
-       } repeat
-       pop pop pop
-       4 1 roll
-       3
-       {
-               3 index sub
-               3 1 roll
-       } repeat
-       4 -1 roll
-} def
-/setrgbfill
-{
-       _rgbf astore pop
-       /_fc
-       {
-               _lp /fill ne
-               {
-                       _of setoverprint
-                       _rgbf aload pop setrgbcolor
-                       /_lp /fill ddef
-               } if
-       } ddef
-       /_pf
-       {
-               _fc
-               _eo {eofill} {fill} ifelse
-       } ddef
-       /_psf
-       {
-               _fc
-               hvashow
-       } ddef
-       /_pjsf
-       {
-               _fc
-               hvawidthshow
-       } ddef
-       /_lp /none ddef
-} def
-/setrgbstroke
-{
-       _rgbs astore pop
-       /_sc
-       {
-               _lp /stroke ne
-               {
-                       _os setoverprint
-                       _rgbs aload pop setrgbcolor
-                       /_lp /stroke ddef
-               } if
-       } ddef
-       /_ps
-       {
-               _sc
-               stroke
-       } ddef
-       /_pss
-       {
-               _sc
-               ss
-       } ddef
-       /_pjss
-       {
-               _sc
-               jss
-       } ddef
-       /_lp /none ddef
-} def
-/O
-{
-       0 ne
-       /_of exch ddef
-       /_lp /none ddef
-} def
-/R
-{
-       0 ne
-       /_os exch ddef
-       /_lp /none ddef
-} def
-/g
-{
-       /_gf exch ddef
-       /_fc
-       {
-               _lp /fill ne
-               {
-                       _of setoverprint
-                       _gf setgray
-                       /_lp /fill ddef
-               } if
-       } ddef
-       /_pf
-       {
-               _fc
-               _eo {eofill} {fill} ifelse
-       } ddef
-       /_psf
-       {
-               _fc
-               hvashow
-       } ddef
-       /_pjsf
-       {
-               _fc
-               hvawidthshow
-       } ddef
-       /_lp /none ddef
-} def
-/G
-{
-       /_gs exch ddef
-       /_sc
-       {
-               _lp /stroke ne
-               {
-                       _os setoverprint
-                       _gs setgray
-                       /_lp /stroke ddef
-               } if
-       } ddef
-       /_ps
-       {
-               _sc
-               stroke
-       } ddef
-       /_pss
-       {
-               _sc
-               ss
-       } ddef
-       /_pjss
-       {
-               _sc
-               jss
-       } ddef
-       /_lp /none ddef
-} def
-/k
-{
-       _cf astore pop
-       /_fc
-       {
-               _lp /fill ne
-               {
-                       _of setoverprint
-                       _cf aload pop setcmykcolor
-                       /_lp /fill ddef
-               } if
-       } ddef
-       /_pf
-       {
-               _fc
-               _eo {eofill} {fill} ifelse
-       } ddef
-       /_psf
-       {
-               _fc
-               hvashow
-       } ddef
-       /_pjsf
-       {
-               _fc
-               hvawidthshow
-       } ddef
-       /_lp /none ddef
-} def
-/K
-{
-       _cs astore pop
-       /_sc
-       {
-               _lp /stroke ne
-               {
-                       _os setoverprint
-                       _cs aload pop setcmykcolor
-                       /_lp /stroke ddef
-               } if
-       } ddef
-       /_ps
-       {
-               _sc
-               stroke
-       } ddef
-       /_pss
-       {
-               _sc
-               ss
-       } ddef
-       /_pjss
-       {
-               _sc
-               jss
-       } ddef
-       /_lp /none ddef
-} def
-/Xa
-{
-       _?cmyk {
-               3 npop k
-       }{
-               setrgbfill 4 npop
-       } ifelse
-} def
-/XA
-{
-       _?cmyk {
-               3 npop K
-       }{
-               setrgbstroke 4 npop
-       } ifelse
-} def
-/Xs
-{
-       /_gf exch ddef
-       5 npop
-       /_fc
-       {
-               _lp /fill ne
-               {
-                       _of setoverprint
-                       _gf setAIseparationgray
-                       /_lp /fill ddef
-               } if
-       } ddef
-       /_pf
-       {
-               _fc
-               _eo {eofill} {fill} ifelse
-       } ddef
-       /_psf
-       {
-               _fc
-               hvashow
-       } ddef
-       /_pjsf
-       {
-               _fc
-               hvawidthshow
-       } ddef
-       /_lp /none ddef
-} def
-/XS
-{
-       /_gs exch ddef
-       5 npop
-       /_sc
-       {
-               _lp /stroke ne
-               {
-                       _os setoverprint
-                       _gs setAIseparationgray
-                       /_lp /stroke ddef
-               } if
-       } ddef
-       /_ps
-       {
-               _sc
-               stroke
-       } ddef
-       /_pss
-       {
-               _sc
-               ss
-       } ddef
-       /_pjss
-       {
-               _sc
-               jss
-       } ddef
-       /_lp /none ddef
-} def
-/Xx
-{
-       exch
-       /_gf exch ddef
-       0 eq {
-               findcmykcustomcolor
-       }{
-               _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse
-               {
-                       4 1 roll 3 npop
-                       findcmykcustomcolor
-               }{
-                       8 -4 roll 4 npop
-                       findrgbcustomcolor
-               } ifelse
-       } ifelse
-       /_if exch ddef
-       /_fc
-       {
-               _lp /fill ne
-               {
-                       _of setoverprint
-                       _if _gf 1 exch sub setcustomcolor
-                       /_lp /fill ddef
-               } if
-       } ddef
-       /_pf
-       {
-               _fc
-               _eo {eofill} {fill} ifelse
-       } ddef
-       /_psf
-       {
-               _fc
-               hvashow
-       } ddef
-       /_pjsf
-       {
-               _fc
-               hvawidthshow
-       } ddef
-       /_lp /none ddef
-} def
-/XX
-{
-       exch
-       /_gs exch ddef
-       0 eq {
-               findcmykcustomcolor
-       }{
-               _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse
-               {
-                       4 1 roll 3 npop
-                       findcmykcustomcolor
-               }{
-                       8 -4 roll 4 npop
-                       findrgbcustomcolor
-               } ifelse
-       } ifelse
-       /_is exch ddef
-       /_sc
-       {
-               _lp /stroke ne
-               {
-                       _os setoverprint
-                       _is _gs 1 exch sub setcustomcolor
-                       /_lp /stroke ddef
-               } if
-       } ddef
-       /_ps
-       {
-               _sc
-               stroke
-       } ddef
-       /_pss
-       {
-               _sc
-               ss
-       } ddef
-       /_pjss
-       {
-               _sc
-               jss
-       } ddef
-       /_lp /none ddef
-} def
-/x
-{
-       /_gf exch ddef
-       findcmykcustomcolor
-       /_if exch ddef
-       /_fc
-       {
-               _lp /fill ne
-               {
-                       _of setoverprint
-                       _if _gf 1 exch sub setcustomcolor
-                       /_lp /fill ddef
-               } if
-       } ddef
-       /_pf
-       {
-               _fc
-               _eo {eofill} {fill} ifelse
-       } ddef
-       /_psf
-       {
-               _fc
-               hvashow
-       } ddef
-       /_pjsf
-       {
-               _fc
-               hvawidthshow
-       } ddef
-       /_lp /none ddef
-} def
-/X
-{
-       /_gs exch ddef
-       findcmykcustomcolor
-       /_is exch ddef
-       /_sc
-       {
-               _lp /stroke ne
-               {
-                       _os setoverprint
-                       _is _gs 1 exch sub setcustomcolor
-                       /_lp /stroke ddef
-               } if
-       } ddef
-       /_ps
-       {
-               _sc
-               stroke
-       } ddef
-       /_pss
-       {
-               _sc
-               ss
-       } ddef
-       /_pjss
-       {
-               _sc
-               jss
-       } ddef
-       /_lp /none ddef
-} def
-/XK
-{
-       3 -1 roll pop
-       0 eq
-       {
-               1 exch sub
-               3 {dup 3 1 roll mul 5 1 roll} repeat
-               mul 4 1 roll
-               K
-       }
-       {
-               1 exch sub 4 1 roll
-               3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat
-               4 -1 roll pop
-               XA
-       } ifelse
-} def
-/Xk
-{
-       3 -1 roll pop
-       0 eq
-       {
-               1 exch sub
-               3 {dup 3 1 roll mul 5 1 roll} repeat
-               mul 4 1 roll
-               k
-       }
-       {
-               1 exch sub 4 1 roll
-               3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat
-               4 -1 roll pop
-               Xa
-       } ifelse
-} def
-/A
-{
-       pop
-} def
-/annotatepage
-{
-userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse
-} def
-/XT {
-       pop pop
-} def
-/Xt {
-       pop
-} def
-/discard
-{
-       save /discardSave exch store
-       discardDict begin
-       /endString exch store
-       gt38?
-       {
-               2 add
-       } if
-       load
-       stopped
-       pop
- end
-       discardSave restore
-} bind def
-userdict /discardDict 7 dict dup begin
-put
-/pre38Initialize
-{
-       /endStringLength endString length store
-       /newBuff buffer 0 endStringLength getinterval store
-       /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store
-       /newBuffLast newBuff endStringLength 1 sub 1 getinterval store
-} def
-/shiftBuffer
-{
-       newBuff 0 newBuffButFirst putinterval
-       newBuffLast 0
-       currentfile read not
-       {
-       stop
-       } if
-       put
-} def
-0
-{
-       pre38Initialize
-       mark
-       currentfile newBuff readstring exch pop
-       {
-               {
-                       newBuff endString eq
-                       {
-                               cleartomark stop
-                       } if
-                       shiftBuffer
-               } loop
-       }
-       {
-       stop
-       } ifelse
-} def
-1
-{
-       pre38Initialize
-       /beginString exch store
-       mark
-       currentfile newBuff readstring exch pop
-       {
-               {
-                       newBuff beginString eq
-                       {
-                               /layerCount dup load 1 add store
-                       }
-                       {
-                               newBuff endString eq
-                               {
-                                       /layerCount dup load 1 sub store
-                                       layerCount 0 eq
-                                       {
-                                               cleartomark stop
-                                       } if
-                               } if
-                       } ifelse
-                       shiftBuffer
-               } loop
-       } if
-} def
-2
-{
-       mark
-       {
-               currentfile buffer {readline} stopped {
-                       % assume error was due to overfilling the buffer
-               }{
-                       not
-                       {
-                               stop
-                       } if
-                       endString eq {
-                               cleartomark stop
-                       } if
-               }ifelse
-       } loop
-} def
-3
-{
-       /beginString exch store
-       /layerCnt 1 store
-       mark
-       {
-               currentfile buffer {readline} stopped {
-                       % assume error was due to overfilling the buffer
-               }{
-                       not
-                       {
-                               stop
-                       } if
-                       dup beginString eq
-                       {
-                               pop /layerCnt dup load 1 add store
-                       }
-                       {
-                               endString eq
-                               {
-                                       layerCnt 1 eq
-                                       {
-                                               cleartomark stop
-                                       }
-                                       {
-                                               /layerCnt dup load 1 sub store
-                                       } ifelse
-                               } if
-                       } ifelse
-               }ifelse
-       } loop
-} def
-end
-userdict /clipRenderOff 15 dict dup begin
-put
-{
-       /n /N /s /S /f /F /b /B
-}
-{
-       {
-               _doClip 1 eq
-               {
-                       /_doClip 0 ddef _eo {eoclip} {clip} ifelse
-               } if
-               newpath
-       } def
-} forall
-/Tr /pop load def
-/Bb {} def
-/BB /pop load def
-/Bg {12 npop} def
-/Bm {6 npop} def
-/Bc /Bm load def
-/Bh {4 npop} def
-end
-/Lb
-{
-       6 npop
-       7 2 roll
-       5 npop
-       0 eq
-       {
-               0 eq
-               {
-                       (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard
-               }
-               {
-                       
-                       /clipForward? true def
-                       
-                       /Tx /pop load def
-                       /Tj /pop load def
-                       
-                       currentdict end clipRenderOff begin begin
-               } ifelse
-       }
-       {
-               0 eq
-               {
-                       save /discardSave exch store
-               } if
-       } ifelse
-} bind def
-/LB
-{
-       discardSave dup null ne
-       {
-               restore
-       }
-       {
-               pop
-               clipForward?
-               {
-                       currentdict
-                end
-                end
-                begin
-                                       
-                       /clipForward? false ddef
-               } if
-       } ifelse
-} bind def
-/Pb
-{
-       pop pop
-       0 (%AI5_EndPalette) discard
-} bind def
-/Np
-{
-       0 (%AI5_End_NonPrinting--) discard
-} bind def
-/Ln /pop load def
-/Ap
-/pop load def
-/Ar
-{
-       72 exch div
-       0 dtransform dup mul exch dup mul add sqrt
-       dup 1 lt
-       {
-               pop 1
-       } if
-       setflat
-} def
-/Mb
-{
-       q
-} def
-/Md
-{
-} def
-/MB
-{
-       Q
-} def
-/nc 4 dict def
-nc begin
-/setgray
-{
-       pop
-} bind def
-/setcmykcolor
-{
-       4 npop
-} bind def
-/setrgbcolor
-{
-       3 npop
-} bind def
-/setcustomcolor
-{
-       2 npop
-} bind def
-currentdict readonly pop
-end
-/XP
-{
-       4 npop
-} bind def
-/XD
-{
-       pop
-} bind def
-end
-setpacking
-%%EndResource
-%%BeginResource: procset Adobe_cshow 2.0 8
-%%Title: (Writing System Operators)
-%%Version: 2.0 8
-%%CreationDate: (1/23/89) ()
-%%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved)
-currentpacking true setpacking
-userdict /Adobe_cshow 14 dict dup begin put
-/initialize
-{
-       Adobe_cshow begin
-       Adobe_cshow
-       {
-               dup xcheck
-               {
-                       bind
-               } if
-               pop pop
-       } forall
- end
-       Adobe_cshow begin
-} def
-/terminate
-{
-currentdict Adobe_cshow eq
-       {
- end
-       } if
-} def
-/cforall
-{
-       /_lobyte 0 ddef
-       /_hibyte 0 ddef
-       /_cproc exch ddef
-       /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef
-       {
-               /_lobyte exch ddef
-               _hibyte 0 eq
-               _cscript 1 eq
-               _lobyte 129 ge _lobyte 159 le and
-               _lobyte 224 ge _lobyte 252 le and or and
-               _cscript 2 eq
-               _lobyte 161 ge _lobyte 254 le and and
-               _cscript 3 eq
-               _lobyte 161 ge _lobyte 254 le and and
-       _cscript 25 eq
-               _lobyte 161 ge _lobyte 254 le and and
-       _cscript -1 eq
-               or or or or and
-               {
-                       /_hibyte _lobyte ddef
-               }
-               {
-                       _hibyte 256 mul _lobyte add
-                       _cproc
-                       /_hibyte 0 ddef
-               } ifelse
-       } forall
-} def
-/cstring
-{
-       dup 256 lt
-       {
-               (s) dup 0 4 3 roll put
-       }
-       {
-               dup 256 idiv exch 256 mod
-               (hl) dup dup 0 6 5 roll put 1 4 3 roll put
-       } ifelse
-} def
-/clength
-{
-       0 exch
-       { 256 lt { 1 } { 2 } ifelse add } cforall
-} def
-/hawidthshow
-{
-       {
-               dup cstring
-               show
-               _hvax _hvay rmoveto
-               _hvwb eq { _hvcx _hvcy rmoveto } if
-       } cforall
-} def
-/vawidthshow
-{
-       {
-               dup 255 le
-               _charorientation 1 eq
-               and
-               {
-                       -90 rotate
-                       0 _fontRotateAdjust rmoveto
-                       cstring
-                       _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow
-                       0 _fontRotateAdjust neg rmoveto
-                       90 rotate
-               }
-               {
-                       currentpoint
-                       _fontHeight sub
-                       exch _hvay sub exch _hvax sub
-                       2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if
-                       3 2 roll
-                       cstring
-                       dup stringwidth pop 2 div neg _fontAscent neg rmoveto
-                       show
-                       moveto
-               } ifelse
-       } cforall
-} def
-/hvawidthshow
-{
-       6 1 roll
-       /_hvay exch ddef
-       /_hvax exch ddef
-       /_hvwb exch ddef
-       /_hvcy exch ddef
-       /_hvcx exch ddef
-       _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse
-} def
-/hvwidthshow
-{
-       0 0 3 -1 roll hvawidthshow
-} def
-/hvashow
-{
-       0 0 0 6 -3 roll hvawidthshow
-} def
-/hvshow
-{
-       0 0 0 0 0 6 -1 roll hvawidthshow
-} def
-currentdict readonly pop end
-setpacking
-%%EndResource
-%%BeginResource: procset Adobe_shading_AI8 1.0 0
-%%Title: (Adobe Illustrator 8 Shading Procset)
-%%Version: 1.0 0
-%%CreationDate: (12/17/97) ()
-%%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved)
-userdict /defaultpacking currentpacking put true setpacking
-userdict /Adobe_shading_AI8 10 dict dup begin put
-/initialize {
-       Adobe_shading_AI8 begin
-       Adobe_shading_AI8 bdprocs
-       Mesh /initialize get exec
-} def
-/terminate {
-       currentdict Adobe_shading_AI8 eq {
-        end
-       } if
-} def
-/bdprocs {
-       {
-               dup xcheck 1 index type /arraytype eq and {
-                       bind
-               } if
-               pop pop
-       } forall
-} def
-/X! {pop} def
-/X# {pop pop} def
-/Mesh 40 dict def
-Mesh begin
-/initialize {
-       Mesh bdprocs
-       Mesh begin
-               /emulate? /AI8MeshEmulation where {
-                       pop AI8MeshEmulation
-               }{
-                       systemdict /shfill known not
-               } ifelse def
- end
-} def
-/bd {
-       shadingdict begin
-} def
-/paint {
-       emulate? {
-        end
-       }{
-               /_lp /none ddef _fc /_lp /none ddef
-               
-               /AIColorSpace AIColorSpace tocolorspace store
-               /ColorSpace AIColorSpace topsspace store
-               
-               version_ge_3010.106 not systemdict /setsmoothness known and {
-                       0.0001 setsmoothness
-               } if
-               
-               composite? {
-                       /DataSource getdatasrc def
-                       Matrix concat
-                       currentdict end
-                       shfill
-               }{
-                       AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and {
-                        end
-                       }{
-                               /ColorSpace /DeviceGray store
-                               /Decode [0 1 0 1 0 1] store
-                               /DataSource getplatesrc def
-                               Matrix concat
-                               currentdict end
-                               shfill
-                       } ifelse
-               } ifelse
-       } ifelse
-} def
-/shadingdict 12 dict def
-shadingdict begin
-       /ShadingType 6 def
-       /BitsPerCoordinate 16 def
-       /BitsPerComponent 8 def
-       /BitsPerFlag 8 def
-end
-/datafile null def
-/databuf 256 string def
-/dataptr 0 def
-/srcspace null def
-/srcchannels 0 def
-/dstchannels 0 def
-/dstplate 0 def
-/srctodstcolor null def
-/getplatesrc {
-       /srcspace AIColorSpace store
-       /srcchannels AIColorSpace getnchannels store
-       /dstchannels 1 store
-       /dstplate getplateindex store
-       /srctodstcolor srcspace makesmarks {
-               dstplate 4 eq {
-                       {1 exch sub}
-               }{
-                       {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat}
-               } ifelse
-       }{
-               {srcchannels {pop} repeat 1}
-       } ifelse store
-       /datafile getdatasrc store
-       /rdpatch168 load DataLength () /SubFileDecode filter
-} def
-/getdatasrc {
-       /rdcmntline load /ASCII85Decode filter
-} def
-/rdpatch168 {
-       /dataptr 0 store
-       49 rdcount
-       4 {
-               dup {pop srcchannels getint8} if
-               dup {pop srctodstcolor dstchannels putint8 true} if
-       } repeat
-       {databuf 0 dataptr getinterval}{()} ifelse
-} def
-/rdpatch3216 {
-       /dataptr 0 store
-       97 rdcount
-       4 {
-               dup {pop srcchannels getint16} if
-               dup {pop srctodstcolor dstchannels putint16 true} if
-       } repeat
-       {databuf 0 dataptr getinterval}{()} ifelse
-} def
-/rdcount {
-       dup 0 gt {
-               datafile databuf dataptr 4 -1 roll getinterval readstring
-               exch length dataptr add /dataptr exch store
-       }{
-               true
-       } ifelse
-} def
-/getint8 {
-       mark true 3 -1 roll
-       {
-               dup {pop datafile read} if
-               dup {pop 255 div true} if
-       } repeat
-       {
-               counttomark 1 add -1 roll pop true
-       }{
-               cleartomark false
-       } ifelse
-} def
-/putint8 {
-       dup dataptr add /dataptr exch store
-       dataptr exch
-       {
-               1 sub exch
-               255 mul cvi
-               databuf 2 index
-               3 -1 roll put
-       } repeat
-       pop
-} def 
-/getint16 {
-       mark true 3 -1 roll
-       {
-               dup {pop datafile read} if
-               dup {pop 256 mul datafile read} if
-               dup {pop add 65535 div true} if
-       } repeat
-       {
-               counttomark 1 add -1 roll pop true
-       }{
-               cleartomark false
-       } ifelse
-} def
-/putint16 {
-       dup 2 mul dataptr add /dataptr exch store
-       dataptr exch
-       {
-               2 sub exch
-               65535 mul cvi dup
-               256 idiv databuf 3 index 3 -1 roll put
-               256 mod databuf 2 index 1 add 3 -1 roll put
-       } repeat
-       pop
-} def 
-/srcbuf 256 string def
-/rdcmntline {
-       currentfile srcbuf readline pop
-       (%) anchorsearch {pop} if
-} def
-/getplateindex {
-       0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall
-} def
-/aicsarray 4 array def
-/aicsaltvals 4 array def
-/aicsaltcolr aicsaltvals def
-/tocolorspace {
-       dup type /arraytype eq {
-               mark exch aload pop
-               aicsarray 0 3 -1 roll put
-               aicsarray 1 3 -1 roll put
-               dup aicsarray 2 3 -1 roll put
-               gettintxform aicsarray 3 3 -1 roll put
-               counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store
-               aicsaltcolr astore pop pop
-               aicsarray
-       } if
-} def
-/subtintxform {aicsaltcolr {1 index mul exch} forall pop} def
-/addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def
-/gettintxform {
-       /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load
-} def
-/getnchannels {
-       dup type /arraytype eq {0 get} if
-       colorspacedict exch get begin Channels end
-} def
-/makesmarks {
-       composite? {
-               pop true
-       }{
-               dup dup type /arraytype eq {0 get} if
-               colorspacedict exch get begin MarksPlate end
-       } ifelse
-} def
-/markingplate {
-       composite? {
-               pop true
-       }{
-               dup type /arraytype eq {
-                       dup length getplateindex gt {getplateindex get}{pop false} ifelse
-               } if
-       } ifelse
-} def
-/tocmyk {
-       dup dup type /arraytype eq {0 get} if
-       colorspacedict exch get begin ToCMYK end
-} def
-/topsspace {
-       dup dup type /arraytype eq {0 get} if
-       colorspacedict exch get begin ToPSSpace end
-} def
-/colorspacedict 5 dict dup begin
-       /DeviceGray 4 dict dup begin
-               /Channels 1 def
-               /MarksPlate {pop black?} def
-               /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def
-               /ToPSSpace {} def
- end def
-       /DeviceRGB 4 dict dup begin
-               /Channels 3 def
-               /MarksPlate {pop isCMYKSep?} def
-               /ToCMYK {pop _rgbtocmyk} def
-               /ToPSSpace {} def
- end def
-       /DeviceCMYK 4 dict dup begin
-               /Channels 4 def
-               /MarksPlate {pop isCMYKSep?} def
-               /ToCMYK {pop} def
-               /ToPSSpace {} def
- end def
-       /Separation 4 dict dup begin
-               /Channels 1 def
-               /MarksPlate {
-                       /findcmykcustomcolor where {
-                               pop dup 1 exch ToCMYK 5 -1 roll 1 get
-                               findcmykcustomcolor 1 setcustomcolor
-                               systemdict /currentgray get exec
-                               1 ne
-                       }{
-                               pop false
-                       } ifelse
-               } def
-               /ToCMYK {
-                       dup 2 get mark exch 4 2 roll
-                       3 get exec
-                       counttomark -1 roll tocmyk
-                       5 -1 roll pop
-               } def
-               /ToPSSpace {} def
- end def
-       /Process 4 dict dup begin
-               /Channels 1 def
-               /MarksPlate {
-                       isCMYKSep? {
-                               1 exch ToCMYK 4 array astore getplateindex get 0 ne 
-                       }{
-                               pop false
-                       } ifelse
-               } def
-               /ToCMYK {
-                       dup 2 get mark exch 4 2 roll
-                       3 get exec
-                       counttomark -1 roll tocmyk
-                       5 -1 roll pop
-               } def
-               /ToPSSpace {
-                       4 array copy dup 0 /Separation put
-               } def
- end def
-end def
-/isoverprint {
-       /currentoverprint where {pop currentoverprint}{_of} ifelse
-} def
-/version_ge_3010.106 {
-   version {cvr} stopped {
-      pop
-      false
-   }{
-      3010.106 ge
-   } ifelse
-} def
-end
-end
-defaultpacking setpacking
-%%EndResource
-%%EndProlog
-%%BeginSetup
-userdict /_useSmoothShade false put
-userdict /_aicmykps true put
-userdict /_forceToCMYK true put
-Adobe_level2_AI5 /initialize get exec
-Adobe_cshow /initialize get exec
-Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec
-Adobe_ColorImage_AI6 /initialize get exec
-Adobe_shading_AI8 /initialize get exec
-Adobe_Illustrator_AI5 /initialize get exec
-%AI3_BeginRider
-currentpacking true setpacking
-%%BeginFont: Device
-%!PS-AdobeFont-1.0: Device 001.000
-%%CreationDate: 3/28/94 at 10:55:02 PM
-%%VMusage: 1024 52339  
-% Generated by Fontographer 4.0.2
-% Â©1994 InFonts. 619-234-9400. Created by Gary Hustwit
-% ADL: 800 200 0
-%%EndComments
-FontDirectory/Device known{/Device findfont dup/UniqueID known{dup
-/UniqueID get 4115447 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-20 dict begin
-/FontInfo 16 dict dup begin
-  /version (001.000) readonly def
-  /FullName (Device) readonly def
-  /FamilyName (Device) readonly def
-  /Weight (Medium) readonly def
-  /ItalicAngle 0 def
-  /isFixedPitch false def
-  /UnderlinePosition -133 def
-  /UnderlineThickness 20 def
-  /Notice (©1994 InFonts. 619-234-9400. Created by Gary Hustwit) readonly def
-  /em 1000 def
-  /ascent 800 def
-  /descent 200 def
-end readonly def
-/FontName /Device def
-/Encoding 256 array
-dup 0/NUL put
-dup 1/Eth put
-dup 2/eth put
-dup 3/Lslash put
-dup 4/lslash put
-dup 5/Scaron put
-dup 6/scaron put
-dup 7/Yacute put
-dup 8/yacute put
-dup 9/HT put
-dup 10/LF put
-dup 11/Thorn put
-dup 12/thorn put
-dup 13/CR put
-dup 14/Zcaron put
-dup 15/zcaron put
-dup 16/DLE put
-dup 17/DC1 put
-dup 18/DC2 put
-dup 19/DC3 put
-dup 20/DC4 put
-dup 21/onehalf put
-dup 22/onequarter put
-dup 23/onesuperior put
-dup 24/threequarters put
-dup 25/threesuperior put
-dup 26/twosuperior put
-dup 27/brokenbar put
-dup 28/minus put
-dup 29/multiply put
-dup 30/RS put
-dup 31/US put
-dup 32/space put
-dup 33/exclam put
-dup 34/quotedbl put
-dup 35/numbersign put
-dup 36/dollar put
-dup 37/percent put
-dup 38/ampersand put
-dup 39/quotesingle put
-dup 40/parenleft put
-dup 41/parenright put
-dup 42/asterisk put
-dup 43/plus put
-dup 44/comma put
-dup 45/hyphen put
-dup 46/period put
-dup 47/slash put
-dup 48/zero put
-dup 49/one put
-dup 50/two put
-dup 51/three put
-dup 52/four put
-dup 53/five put
-dup 54/six put
-dup 55/seven put
-dup 56/eight put
-dup 57/nine put
-dup 58/colon put
-dup 59/semicolon put
-dup 60/less put
-dup 61/equal put
-dup 62/greater put
-dup 63/question put
-dup 64/at put
-dup 65/A put
-dup 66/B put
-dup 67/C put
-dup 68/D put
-dup 69/E put
-dup 70/F put
-dup 71/G put
-dup 72/H put
-dup 73/I put
-dup 74/J put
-dup 75/K put
-dup 76/L put
-dup 77/M put
-dup 78/N put
-dup 79/O put
-dup 80/P put
-dup 81/Q put
-dup 82/R put
-dup 83/S put
-dup 84/T put
-dup 85/U put
-dup 86/V put
-dup 87/W put
-dup 88/X put
-dup 89/Y put
-dup 90/Z put
-dup 91/bracketleft put
-dup 92/backslash put
-dup 93/bracketright put
-dup 94/asciicircum put
-dup 95/underscore put
-dup 96/grave put
-dup 97/a put
-dup 98/b put
-dup 99/c put
-dup 100/d put
-dup 101/e put
-dup 102/f put
-dup 103/g put
-dup 104/h put
-dup 105/i put
-dup 106/j put
-dup 107/k put
-dup 108/l put
-dup 109/m put
-dup 110/n put
-dup 111/o put
-dup 112/p put
-dup 113/q put
-dup 114/r put
-dup 115/s put
-dup 116/t put
-dup 117/u put
-dup 118/v put
-dup 119/w put
-dup 120/x put
-dup 121/y put
-dup 122/z put
-dup 123/braceleft put
-dup 124/bar put
-dup 125/braceright put
-dup 126/asciitilde put
-dup 127/DEL put
-dup 128/Adieresis put
-dup 129/Aring put
-dup 130/Ccedilla put
-dup 131/Eacute put
-dup 132/Ntilde put
-dup 133/Odieresis put
-dup 134/Udieresis put
-dup 135/aacute put
-dup 136/agrave put
-dup 137/acircumflex put
-dup 138/adieresis put
-dup 139/atilde put
-dup 140/aring put
-dup 141/ccedilla put
-dup 142/eacute put
-dup 143/egrave put
-dup 144/ecircumflex put
-dup 145/edieresis put
-dup 146/iacute put
-dup 147/igrave put
-dup 148/icircumflex put
-dup 149/idieresis put
-dup 150/ntilde put
-dup 151/oacute put
-dup 152/ograve put
-dup 153/ocircumflex put
-dup 154/odieresis put
-dup 155/otilde put
-dup 156/uacute put
-dup 157/ugrave put
-dup 158/ucircumflex put
-dup 159/udieresis put
-dup 160/dagger put
-dup 161/degree put
-dup 162/cent put
-dup 163/sterling put
-dup 164/section put
-dup 165/bullet put
-dup 166/paragraph put
-dup 167/germandbls put
-dup 168/registered put
-dup 169/copyright put
-dup 170/trademark put
-dup 171/acute put
-dup 172/dieresis put
-dup 173/notequal put
-dup 174/AE put
-dup 175/Oslash put
-dup 176/infinity put
-dup 177/plusminus put
-dup 178/lessequal put
-dup 179/greaterequal put
-dup 180/yen put
-dup 181/mu put
-dup 182/partialdiff put
-dup 183/summation put
-dup 184/product put
-dup 185/pi put
-dup 186/integral put
-dup 187/ordfeminine put
-dup 188/ordmasculine put
-dup 189/Omega put
-dup 190/ae put
-dup 191/oslash put
-dup 192/questiondown put
-dup 193/exclamdown put
-dup 194/logicalnot put
-dup 195/radical put
-dup 196/florin put
-dup 197/approxequal put
-dup 198/Delta put
-dup 199/guillemotleft put
-dup 200/guillemotright put
-dup 201/ellipsis put
-dup 202/nbspace put
-dup 203/Agrave put
-dup 204/Atilde put
-dup 205/Otilde put
-dup 206/OE put
-dup 207/oe put
-dup 208/endash put
-dup 209/emdash put
-dup 210/quotedblleft put
-dup 211/quotedblright put
-dup 212/quoteleft put
-dup 213/quoteright put
-dup 214/divide put
-dup 215/lozenge put
-dup 216/ydieresis put
-dup 217/Ydieresis put
-dup 218/fraction put
-dup 219/currency put
-dup 220/guilsinglleft put
-dup 221/guilsinglright put
-dup 222/fi put
-dup 223/fl put
-dup 224/daggerdbl put
-dup 225/periodcentered put
-dup 226/quotesinglbase put
-dup 227/quotedblbase put
-dup 228/perthousand put
-dup 229/Acircumflex put
-dup 230/Ecircumflex put
-dup 231/Aacute put
-dup 232/Edieresis put
-dup 233/Egrave put
-dup 234/Iacute put
-dup 235/Icircumflex put
-dup 236/Idieresis put
-dup 237/Igrave put
-dup 238/Oacute put
-dup 239/Ocircumflex put
-dup 240/apple put
-dup 241/Ograve put
-dup 242/Uacute put
-dup 243/Ucircumflex put
-dup 244/Ugrave put
-dup 245/dotlessi put
-dup 246/circumflex put
-dup 247/tilde put
-dup 248/macron put
-dup 249/breve put
-dup 250/dotaccent put
-dup 251/ring put
-dup 252/cedilla put
-dup 253/hungarumlaut put
-dup 254/ogonek put
-dup 255/caron put
- readonly
- def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-/UniqueID 4115447 def
-/FontBBox{12 -148 648 974}readonly def
-currentdict end
-currentfile eexec
-d8061d93a824652cab7761a8dac65b57ec3fe6381b068e57a586b08ef37fe40b49b7d7633b8ad558cfeda279bfa8db2693a95b593a4473e0e0f38e654ad86ce1231549719ea44878ff49585a89f37ddb79b56f99b7d19a6f1acf5bae20ca0c10d8ed181b136c268f5815bb0b476c700d50e8d29a6c215ecd2f8dc20a8607af
-2d7ea45a72aa45d6134609a1958b1c5eb3371c235e02c89fc6c20f6d9d89e7de177924fa6330368f5fe19f98a087d7eca80136d901279d0a430b7318a2c7cd321fae1e0a6d7b61e387f08c3ef3c1af63d5b419648455e43086bc0f48779a66c5282b6305c0ba8613d66f3fb7dcbf4f6993d06a8341171e0b6716dec273b955
-3282dbdf7725e2adbfeecc4cb50c0bc17354017a7ed420764d36644dc641e5ad23b874d1afce9e0d21c8a51de06eb32f7596def184be868771c0b9c40f9f473a95b361a8f9440635cbfbdc756e9ab670bb141d723e2d00b774782034fc49c519e7c63b4e3c831b0b3c7940a6b493ed4d7b2f633f0e953d09d843ba3fd0a6c4
-1820e5ca93a99ded985442f057bf442caf1ffbdbbf70cf5788351bd1445566488a9beb9419fa93b418dfbee8ca9752a50f79165b62281a7a17ed89c099d068ba53d667d632f5cebcd874b18d88b90f0254fc7f8567a15a50b4a183b123a054cebc9ea1a7ce89bd58774ff507d6eb0e11a447f7527679ff9665257d5f9a7518
-be658907cdad9d68c196bc411b35395d66cc9ef105609942dca7a1833b182aa820c6490eba6c87a1acc52a7391465235c249598578cdfdd7bf1219c8ea8496efec282c08b54127cb1675aced783aca8f6e2520857d1692c18f6a60881693c0e3811089aff3e70ab7e72de2b1f4ad0e3a664dfd0858970ddbeba4e8ab877322
-26616c2f7dabd2421d5efcd3666728fc69fcaebf926af2c3174aab7bdec6e0d8431449eb938d33b68992e6c36984e05fd2d74e837708b42d4899c0614df95303b2b33e22a3b0dc6883d6516e6804b2d5ba6ce94db57ee254b840490b82ee2a847fbc1e2957d3ffa335f026167c05562a79c4ca7467990ab22f816c47061417
-cf969ca6f300a72c7d2e3aacc12dba2477170a4999e8624d924717f9cd83dab168eab77a1b41631f986be5587beee9ffa5c9ea5cac6cc6d3429d57a10149fe4d81a8a5a27e68f193765cc7c1db653647271ceb9ee3ab6be87989888457ce0861f3ecfb57abb2b33776cc54ca83c846ddfcb0d31065224b0735a85536e334ba
-7cfe1f29ec0a17c3c0120bb269f115213d4e2cc9bba6a6188dcb51efe797904b6953943b7c823c9966437973cf0da10d500db5b19f492119b5f8dc1efb27c38666a1982ab013ca68654b6de603f315ba15c9056260935613fc97312d41a8f6c36e31e3df887a73065d555cb3fb914d03b0f6e0fa179e1330bddcf8461c400e
-ec3c58c0279ab5226cc73f3376db7ff98d3aac32808b595120873be783c9a56690a01dff3b5cf183490cb8200318bffac052eef361834649ea9430efefbd981dbb5aa7052f67fb96399fab7070195a8a85989b4565d136fc4ee2f5060a6d48823041f44bb3e27415f81538b2dfa16afcce8ad23e885d4bead26c16fbe97f14
-40cc98ab1a5af166133fab2ed572f805b4084b21e4cd289bc2c93b44e01200d1b0611d704e814b856d48c6377128fa2f90e4dc173f97e5a677f44084b6dbc25014ab7ae1e8539511c2ad200cb4b9e1f60b3c82a22434a8bff68779166190883f9624580d26230e61d06a692b09101c1f60fab7672b5d6a168519f9061f1311
-c662b6033166660875692c7cb400a45f49a9058d0eec60158000c1b3ff6cb6ada7e3cb0f549696060766d6c88417de185e8f92fd0b95b3e60a8d5d92d3eb3fa7ff4e0268ef612cd93e6b70f2fa393ebf3f15cb105696464ea23e7ee2c467539c3df167859fb8318cedd23cfbf8d8acb1cd7cf1d07e6023873d0f7d6236c412
-79de21b2cfff6b2c22c5fb824880bb115bd80bdc923c6d0aec0d30ff65024fb9fd55b0eb0163055138b9f140dc7fc02a7206b3d48f240bdaed454e73798e57e898ede3c3c90cebf437a11d2587322a026889cecae0580f851c3b24f776ecc40454fa2a4a18d6a9f7acf0eb1ed77aa874666426892829b27806d58bfcbb2fe8
-bfaa8ffbe9af08035a80e38fec7d365f7bbb0252c977b6067ca276c7f8eb1fedd4992730ac0bf1eb423e11f23110c40a05f2962a58e6f945caa0353668c1a748bc96ebbc31dcf33811139bb4a09bd798670ecd4bf27b69632f24c43a7e9932d23b3c5ac161b588e5510bd34aa9fca0effdb0d04648d0938f0604bee4053952
-889b115efb5874087ea4d968898243af4f823470154a5ff87bd5b7ff15e503a202b7c1a6ea95972f6e41cb541e4d64b51cc9cde37dc8829d0dd5c5e15de63b23b275ab2a2dd8677909a97f2b7298a88f01934587e99dbab11efaedd8ffbcf7cc71dd15d6899c6b9b5d0c116ce2905164a99526068aa57b92e5288128a75759
-9f51a287484491c727e258bc146e14e139ade61d957b2bccfdbf1d7251c9c6c11bb59ea4896c9ab6901a11454acc95098ec9b1072bc3043fbb0f532ba75aa47aa61e340f1cf1d679648c3b5d0eecef05212c571dcdee915e54fddeb48574433f25ec49b5e51aff9096dcc37f3ecc251e324ab189c0d9900873e4a25af639f9
-9cd818f0bf3b2e7ccfc9eef7094b49ad6e912cdcce96189cb646369683084148de4c6a4f5e6e55a322164f063072ab7010367f3b0d7f544ad8072f54badd32cc5bf51e0f7203780041db263fe150af7300895f1fb7be300853c264a2777076fee6f9e56619a1b7d44154b95c3a3e0433ce02a1db6262f3d9f5438838ffb362
-b963da4f4e438a1a01d74ff6ecc56bfc4cb4b1a135ab81431dc7c81ace913fbd056e5f2266ef565d4464c9ecab8094d638bfbe0a640f7f892a46572b5db1f618e6a71b727937a672c95e604a6bad1977a907616c8aa3af17ace4d9530d02a992314728455be5f207c13cf209499c748ce2f7c4bcc8756e9579bac1ce84eebb
-02d9fe35ed80ac2a4323bbd15d91e2c214c4bdb0e1dc8101f349f0328c371754eb08f5508d3b6a14afde9181e85611ecb2de720c2bb332ee6b6eeb928a5e3cc5a1b7a0bc72116aba7cc9684c7d3bb96203ab60f550bdb279129576aba4b2657aae837efcb4e56a711c56d6ac6777bf68b91a4fdeda09f9ea528f532a45f291
-258957255cca6ebd4534ede89c2bc397c91388ceb8655995b8ce792a4d617063645bcbe7a2770be9cda1a0161cd5f33e36a71ca94883a1067ea9c97571832a8892cfc6ac2c9fee7f115b306817f3d2f8eba2c52f9150503087bd7c6d118980418e0682767c287b23ac1474cb820d17b9991335c3ab932cecc7901c50daaa83
-8aedd750d8f2655f2500151319600e3ec08d1ab3d4e529bcca3e87fcdff2fa0eb4903c23e7ca155e7dc021bdfd981581303ddcd133563ab65e99b93dffe49fc52a394e6650ae60df8bf615237b78aa426d3da8b8db58dbc54c38543771a0ed633d5ee39cfdcaeb824f266348c21d4e456cee8ded74af8d20e73186f1228258
-7ecfa09ea725b674ba887e7efb22a5644abbeb890670f6263e3b9eb011f6940148f46c29b4145192521d8247a4c6066a02dd4d90353c170ab70163269e12972640b34efcd9298f86e9fe6b83ad0628ec8b803c32bf2c2a550f8e89c71d47f2a63c0792677373048be1c8729ac277545334e7b460958491daae755f6af3c06a
-8b848ca70336e5b585908d93422f3da947090ffd9175c98b08e523fde5ccc9043acc4c9960af2ecef6aaebcd12ff4c9af27f0a5e3b3a772195c1bace42a568a535e30b5aab6729fa405de74d4a649af84d70e10ba0b69f76e0234c4fbcc5ec377d0ffb49c67208ef3f0aac2c477e726009fcd49bdb0387d134983d12f51df2
-21057c51753a0ecdca14ae8c9f2eaf2b4ac7516d72d8ae78e950cbfb19aa676dfc03e3c923c4d8ce25e4a7c9cadfe5fbf9fadfa382da04cbb47829b988ed99f208d60f915f52a3564efd3462d68e54aebe58cb5678817415f2e00d698c1469bbabfbf6919d7ef821dfc497df4b8db1dd53c70906f8e518f3b7f34c8b26171b
-590829a68bd7be76dab9db6239955c04942e2b261be108aaeeedbe77f2f4d05e4902ae99eba1cd4f482bd36f72fffc124e3c90ed48ade35a25e673841c149113ad0da2fe2bab1207bd002323509ba5d29ae00285e8909dfbe7ea3bcc73998346dde576a41ac98939c174a973b41e1a0666dd247ebd5e00a4e408d39503f490
-de243866ea7893643495cf9bf551bca3200baeac4e0f1955adb174416b29900bdc2def860e7ab7bd013de0dcd8679e183aa2e7693a86659caae141afe8ec7f357e9713b0e7d07de7e38e2259e558643413ed046fa3aeb75fb7fabcbcc3dd89ea664f5e5e811041a31384f420656c62f5128ceb1289cb807d0cc41359d61cda
-741f98f967e29eae00fd8dc3741869e37d84734817f8d8efe8289ddcac1cf7453a5f847817f1904a3d12c06c6ec290df8136fbc0234f4e3408d1470c3ecbe6e5f5667974b01eb6ee6e59dd577375bf21696bfa4d5e4a3941a326187dd3ac06f6612bc53dc31bd7199f13a4fc3bc565b7aeb3ab7715c6d54441e8a88ba29ca9
-4c1afba6770d72d0e20710c4bd382b1ffe3d47a6c54be048d93d7da86f8f385eb30f79d6821087ac542a1da642a1fca38c7236eb55471a55f85d95e3325c145623d017167eca2909721302bfc6a6023967c6c3513c2c69ccbaf875801138640fc1f47fe28b9d8bcdb948135e74050d60db4b3b583dbf2c6a627d1b46d39ca6
-88b8413c95d0935ff58d8b5ced048fa04a5890dc4e1e257c0ab5a8200532ea3a11611c170d7834b23ded19d0f6438906b7a7d6ca1ec1b3216a5e651e270583970b96da93617b82932dabe11feaf993a93ead759dfb34f4cb9bda39c2b5910808a8ab41168c2773a0fbbcb896a85913ddbc41446d1a2fa208df5ff3660e2095
-fe17138d0b735eca1aebeb34fe0311c4df5ff111f6f5d7e2be085afc3f231f2cabd5a4e7b7fe5996e7ee2fc56ec6a4b593b400c3707ec7d954807fc1f8013174286daf55d9d03c0b1a6e6de0af0067b4f42b13b767777398f6fa494ab448c08d603238434c8b2de9c140e890b9da0cb80529c58eaccb50eb7a560eaa32c9d9
-e179b39fb7d8b18b523966763d2cb6bbc0273db6ad7a29b31fdb9ced9943d9f2c3348d3a5fb22939f84609af0cbd5078bfce54b52c45cdfffafba11f221bb43b31848dee06579182715fa0aaee8492ba378f03afcee8823e00c06a4012ababe9a78a3a3288ace313061084dde37b21d34cdcd02ea1117d3acfa3245eccf86c
-6315e71e446687e6d9517910c440c838aafba25779151e4a64fa43f39abec747260a6ede4ae9b8a38c94ea57ee4ad5734d4d8a32d3b087c1331bed493f5482552252aeb7de7c0d9adb11882b96f074ff1b41f558987af3f081d64704721d3c0219f9e762f74c65d7420067527328b1e2913b772e82330d22ac35b7677c96ee
-8eaed8b99f2d7b8c28a42b3a7d22e79a2c3818c8bedfb3e3ef42215c21e338cb8cbedc151ba547f7c6592bf7e13cfb8081ff8fcdc1e54fcb6708f3e28374fb366953157eeee486f706253ba18af4623f38c1a74cd46dc01fa49a12dff6a6fe59ef589c2c0b55b7c16e35fa8184b1aab386ae793bea13fa656a8fdfbf712831
-5c4806d00cd2df4afb6a5e84b237b5a68415479531a47afbd5a00bc1ccd5fd1f4f9c95a426a553ef445615de74bc01dcd1226971233099ee75d0ee5cb06321e0c96aafde7ca90b8153d0c81758238af7c55402116abdb470ef76e025125bbe6d91ffbe99263494c65c59eb9cba650c957bee2250e79757eee857f07bea6023
-569590e1348049bf932e0422edfc51751310368da04e96ce80729eacb63fa140fa83e759655153a590fd44840abc6ec60aef47489fecd48fa953103a5f642aee55e28cab055da0d15e3d750e93e08cbe9d5277e61fd55312f518c293c1cf98fc9eea0d2f6d7b0c26df869b36bc869664bef19b6d2577106d7dc9b15a69bdc1
-d0b2263926b249bcbbd392c7b55e59aa9066022733ee075a7ac0d407c56659660bbf4d051c793fc4ae5f3984fc8bad99d5d8aa6141501960c52efb0a75219c934e4e989f23844fc319bade151406a45afe6a34450367bc34cce43fb8f18e20a3451d999548121cc552abf976489c60ce14b164321285e67c76ffe46211e557
-109742bd3861b74fbc28a26e16cc367f83eb08f3399d01114b78c615757f768934edf990fdbcbe160ba0be780723dd5558ab3274c09e76b4086efaffa891826e5c94c4355aec9caf4eec8b557b28163b809180a7754ed0edc212a4e6e7aa42cfd842202c320341889709b351309fe55e2d96c3b433ca7e70a4c68cdd424b88
-0f9c9379b41075bfa77f72808718a26a509f708427be64c8c9d82f5eb45f64079ef03613a19e6ad4a231d1e5dce672cc69a8ccec7773bd07c5d29a78c17797831ff7111f73a47fc637f32eed55d42c869eda61049308d43a1854ce98a2ba7b2819911beaa1b375a52cf825364681f7b9d0aa55e377fd7792db37c59b3193e7
-b7203b5764616b5efe8bb2f63c248118fe52aaf104f2a0554dbc013ff95753f7a64da8d877f265870c0ec98e9eab430286d0b8616c5e1731d32ffd85888b904b1861f2ba9e74dc3f2a4f3faa8f6425ff88aa2f1498a98be44748d6100f20c704323ec200a47f3de3a850097410674ebc0de4c0bbd6c781dfacf665c18f327e
-f6166d933838aec0583fa35fd3321db29f27af50b4d158e5d9a875b45286c19c675d92d56936c603c5cc533da08683e13bd35e2a1a02690cf4b0c9e25d2357fda47dec700321e4e2b9a1afe0b9210736b970cdb25bb9b4802d06697892aad68e825b9d2efe0be08593279d78271c42f2f7ec281c009c6cf34f2b71e8adb0b7
-39431882a521cff5001ca81a1fce7f46b87b6a7e793e4327a244f3ef16019febd705c463979b60ee6ea6f87c2c9202c060bf5521ed2b61a729697fadb707fd2eca5b5bb74580228a7cac3579a0707175bf10e35b6f5a4f72497390564d2c0a9e30614bfd1982cd528faf0081ddf57e2311315cd5b21de66f5eb01582c6c9d5
-7c4bc18687638c120c9dfe0fa4565f7f4ff2facdbc455ead34703595dec11b94c866791ec7594471a2addb3fe7e3a4ff3baffa0e4793e2fc6b6d2a991baa3d2277ae71d3e200c9e66f9acc298793021e0146019a0be4f7f393d6530bc397b71b6a4b6bd57d25deb41dd8748b6a49bf110615acafe1924be715616af387267c
-3032c9dc819206d67bf16c005b8406697e31dcc27cb978896c86d151043a6284bcdbd3491adfaed4d752ab0545040722dc822ebeb86aabc704547026c5f7ed488a96e40c80fd1318a12d1f08807ccdffc4ca2f28c7a6e4610d31879be015f6e5dc654e13ac2e6c978a3e8caefa23b84ea909f82af078f9bdb6efb13f614107
-7a70a9cbb32f3c44858aada1fc329e53fed7b91dfc087e9e99ead0add11e1f6f1b64f8c01f63f0f66d8b0e72532131fa0e5a8491d9104a8e469165466b51381ad969ba3f40180d0d248b2b12d3e7400dcf7f6a79a773e237318ce8da78cca61f8d47e916f87e5c796be484cc75ca49e111e8669516de77ddb5f11e33f60205
-5654b1bca7cade5774593cc239cd4fcb3d5e4f3a92992dbaeb54823260f6b39a9b5ccc95dcc870f5b06ddebd1d5efd8793d69d30abac25586345ff9c770a92e65a04105b21198e72fff5bb2701511cac912935a3ae9633a4fcf046db1ccd4d95b5223d62a452ce58a5df0382f0caf9021490c540c4bdcbf4e93ce337781069
-82268503d6238c5c738884f95bdd5ff4a21c0c09afc08d520dd5811066a94707911fb57ee495284aafd51f747924b1bc7dbe035a81b5cf83b8307830e760271dc5f23e8892a55d8dcf43bdc5fbe96b1107f6059318260a090882912cb9bb134d19bad158f23d9d7524d75b0c4895a2c51d0fd8d727b6830bce8bf2a946206d
-4bde47d871d2f2e0765768d751c3c176f142b7c935e9b56a9eb4629ebcca59b11fc4e8ee672e8dd7b86c32ca8b14ac3cfd38010f11b24bd8195861bf04af8406c846305993922fca7525e2d41a2155df3ce5e69d65b023fc516e122aeea9a60fddfa366671530867c9ea775560ede353f845f069a97f99bf0fd36a745aa244
-efe7a6cdefd3223fa50b4c7202ff06cdd500957d22ef4ceb99f7209f47edbad226d803c59060522cb64d75d33a0a528234a5a08624295588ee5f43571b6eb3005ffd9f3c6aa25b47ccc54899f8d2c92e873eb8428cd87224253f7425d921a88e0274a5ecc536845f4109dcb58d549be8ecde36fc996a681142d9eaf8eeb6a1
-860e88a98ef857f4b85d247cdb4c320f39a565b568b5fabbe86cfe097c6500ddcaa28216422c0b3f59d1c965cf0d75b487f1fd16a22815cacec8cac0f87e9eae79c0bfd4b60750dcd740bde980a11f4ad2499505a259f7619151fd5c0ae1eef55eac375251121f9651994c31534632458c92d3ef9549ba7556a8c65bf13d70
-e20583b41c57a460ebcb92fb2f36c567763f1e40da89ac94c4b89aa148431e294854a85835e73a730cd6c53202b5065ddf04d784f8d4326b7adc1e9b2a4e0265fd236f6d186cfa6c93a469486bc341ce64b12fb2f4c2e8c981e208888b748d944231dc1fb5362db890ef1edfdc15420a10020d15fa3ba1acc41c3ed0a0e295
-b366ffb47505aff24ee0ade40f070260c863515afbcd8a93637f2f7a82b7802c05a310b6b4c0da22a4c1e8ff47e739656282a57f97af84c04d645b5dba2d9a763fe2e18d7a92d00b4c95b314726889ff51543429de1d2d8a3819dfbe42cccda4466d20569e3d036f86428a1ed1b801fe287da0c91060e14b149dafba38ee6d
-fb2a790cdbeb4747b89d2afb44d86100a9f228a00f8019812d4d79bd400dd2643bf59475c882c83fa8837d8ddf5c602cda009303a7344576bd14db7cf1f42a9915e49586dd6216d86d53f644a245fbacabb985ce746169509ef0067a98528ab696b88814d791dac614373e7a14761e7c860bb86e7016ae11c3fd99aa935dbe
-e4773b2fa8317da780ee188914274b3cb4b2ab2590b0478abadba0f6db801be4488bae80e0bd16425d8a10f3975c5b0e4eaa3c17e30343aa04fcfb0d1bd3a5c6ad6ec33174ecfd9cc6ceaf1ddd0a0c2763be7ba3aa580ec4c0e4efe578fffd37dd044285ee207e728469a8f79d541945a70141851ab25530bb5a09be0e2d40
-3b56e6a5152dc75a59d70afb83af949c13898b3ae3da49455c92b2ee0337fca9613d147c492df5ea23e9a72d3e003b374c409ecb50d8f5895df1f017c30e8095573ee46395195961a5addd97c2237c54d3086e430da34ee6e1ae85b32a98d7212a6e072ffe73e57d065e2497508c0899e3309945a8e0c48f6b908fe569911e
-f443a5a39f72a474536945731a0358a18aacb46df1c1e8b27857aa9dbff6322c7ee3555f657daa27e78aa1f57a67b2b3286ed4d5c50446e0c8116acfa2350633acf375471b0328708854e7d6e92265f3e74e0a16c6bbaa81544e9cca44c351a477b2202d64b47fa89bafb043b2b704c4848eb349cdbff9cf31ea28a813918c
-117b259d343aa5f03a2bad1724bff9cc7dc9686eae637673438c20de1ec832eba488006c16b771a4be83c2880d378a73312a0ba07c246a72f03fb55214e205b59b2cf1826fa459c2f1d55a420ab9bdf1ce11f8fd7c659e3d43edcfeec64f591651ee7e7ca23c4b78f6f17362f6ab27701b8c84db6ce89c571603d2171cf5b7
-3300357abb2920e5652bd859ee437581870eb729858f65e8356856956fe1dcf617de21f80cb69977f0aaa02260e306d672f5f9196c06b08a4126be7cbf431bea44e03a3ab86bfbd685099658369680a307313fa23e4ed89b02b4062fbd40fe42d270344a916530749c56ddc245183607b4a07d4f1ffb4599e8460ce525d6ab
-19af4b561fa987401d2160cfc9e78ff4d211d84863e09d3f8c6f906c1c42c3dd8bdd0ecd709a5e90cbc4679d0ecedd20014694015f36a20eadfca4c818b0a2fc0353d4c576e7e94c308c08ed67236858bb88f180611dcf38cae8d14bdc3ad0f40a5f9695c11f584d4801390b885b544c3f3a5b07a6d3821724c09137260dde
-72224f90f206921b38768da87d0df7721b7a5cde0735d7164a4cf429ce3584da362454c6e389c8c2073e49564b245aac532e0a3631e868a3ac174f7a62c0e8cd8e4b6932e7cecd5618ba937e637ba20ea131863012a5688315520270e866b85c0ef3a450a292f9fc8052766240f632263fee77f3538b5e1058787cb65295af
-7e5eea99d41a84beadfdccff9f4fab6879ee0eb54654ac5cb345e830ef22a5bf9a00026e526086a27264d70e181aa2336e96e987d341ea74c7212048092af199b711cad5195e64ff60789ee873d301dc3fac7b681ed94aff52490ee6aeba217d5861a39a148dda37e2ccb876065c47818e49ae05272f6038b3a58f3f4824b9
-5538d791c678305ebd5c5aaa346658bae0c2d3f4f0f1f04a2941a1fa7c3e14ff067e9ad1e1e95a72d267c6394353320c4b4d31ab1d090a0d53bdc3df6dfba09642adb22c18a5d66dba104bd9a6331efaa34853f299fc0e9d435fb251b48bfbc56acfb79bd032dbe2ab2303538bdddb3c8083ef4696b569b070de832afe8e99
-d8869d408702e052001e5b39280136384653693b35ace3fc01c9f859f709d1078c17c75d32c9a00fb3db97c4d3ae4445507e238e5c0b7806d9c8492b9b843e3f0cc5e2cc5dd817e081c00d6d83378297f27c4131a29b9437323175bf5b9d3cf86e250578387df3e342f97e7cccafcd0bc229e22a9cf8fd48a3b28f82adff7b
-65e654706d8d79fa6b0d4e6754651dc2235f37ba47984e6e26cb99f46056ab74da43b1cc76561fe82aa233263b05126e66cf6f4f6aa3c52c3c6bafac90494e266fc7f47212f164e041761211f73514363cef69d5e1fe3155d19260fa622e41431584bf71212f42cdb6ecc2bce920591e6a06abc72c70863a116877aec33aed
-235f43f01bbb320ec12da7c95744f604544988ad2b68936db008c324e500b1e614c5035559957d3307d8d57028da029826e09a601d667ff635dac374e390e70b968511b5b859a029a3d80b22eba03bb4d4dda966139e927d62fa9869f6bc3b65d19fb81d1509a23bb396e6ec9df76555781ff2e595648c73a05133476f8339
-e71c97b2e7478e15e11c553178dc901a5b5aedcfe928cbbf46db104402d1b0224893c67f3efed78acd7193fc4a960850b6c4c167594a528576d1ae64c0e88ea5b57bffd4e1bfb56cea85436ef0bbb8846076dcbd88be89727c6277bfa4502c121d6eafc514332daecf17f681a36d1860263f9e3bb24483f84451acdf849067
-2f497e5c656dea475d9df57046c0ce4577e2f5f76ec273aacf56b12cd527db47bf88c7dec117b9500a3c4d1842a1b61fc7bd430de6d563526fca71b341fd97613802812b4c1b77ddced234619b459867b3201a9f1da37b8db636ad07c70968976e5e33df49d4bb2c74bb6d2c472f624032d47f1309d5139dfe6e6804987058
-a227fc0adc716e6ceb2401b4158929e5634e8b329facdea8c8f6edf33d52c5ccce8db18bae293c19bce6a1caff9af9d3a1a4c9125735d97090e212427c5cd2462127b1756f9b2b1968517f9b06ecedfa1a890328a7a68554f727240e7828e9bb54b788fd49ccb0ab90386f1ceea196e588a6ad17155b25fcd5071a4cd4fc98
-1a2ac8a930f85d9e70ccc6f5f2eef51c144e5f4c1523f5cc9de9027a6a96b14280ffbfa12bdf07ddae577b7b0559a500451ed1e254b05e29b7fbcb09a908ef2dc5054224ea7f9c91288d1f4c1bfdce151331e0a8841cb41296525e2d51ff2bc7ee6430b40f15c64f0ab35ba1917e35e0a2c9c1afddfd64049cd3b1544bc1f8
-95cb3e653160b62c93046dba6c49bce6d0026f06cc771e462c9796c6657ccdf4c9db0d346e1574a5181e52493bd08c7196845359be3f837eeeb3ab445c348502da48d840b8887d239a51f84ef32cc9699d27f4f783ee311f8639dfa8a5ce0c33c518a45c5f6474a8d7765d25e0453f3f60f88bb40ed5e2dc2344160c171b6b
-66d8894342502baf13f63532314bf2ed29576a7584df8e3d5a44eea8185fd3ec095e8bed72520b9334d1431d9f3004f17202b98b3409419b6f8747854a104a5f0afb9da9bc8c93bc4391e33cf99c3c8b9bdb3ccb251341c5979be14d8a9b1213219c2947e2604cab41f00a7226db4c1ae3d65739afdefd62ce3d268d854540
-549fceb1c46a3d37fec17a3bd01631ebc63cfc36c576bd41118ff2524bc6361bb52799425c93f2dc275c1a988b2083c82a2cdb5d6aa311b135a38721e46e57e00e518a0f06e09622d86301727a3ee674aab7267fd680f2b4c0379d96818422e41634d568ff18538a4eb4aa309bc1bd174dd987047b817733424d4392ed9236
-3dd395f517c2ba622ea25dda82738e9a942558bdf278f96508a6ef4c2a457e845667caa84173b11c46e8a8a4f9c33aaabe426295baebaae0eac62f8dbd68b71362d4076a503cfe9f95b26d744fc9a7186953cac74a4b5ebd605e702278a5c6f5b6311fd50a39625e63319d932cbc5353833822fec28824eed4a8793eda8d5c
-081711ddeb87a5f915eb07189931ef1b015af1cf555c99208ca09d3c802b2f1593a23a8774410947c39c116697e4edeb29954fee933d2c46f1c2f61449e08a0df628f100bd986869b4812e259dc5ef37a59b56e938da476ca294a430f1fe1e836aed44fcdba589689e90dd6e1e215eff05e70c0df258056303238260b26797
-48aa26a396d7bcf99a086e5ed03c1a48ea3fd63d61daf7c1c56faa45f824f011b594af1569f2c1ebf0fc4cf99c692442c0957fbe6561728774c0860debc7e265a98297f6bdab8d18b0938993777bf50ecd3ca6395074ea555fc3a925b8433bcd68ea6366c9bc148268f68dbd9c292d8c821a108c3a1b8a194e7f3e745d1428
-7441c7e9c8895b15c6a9abbc42292bc373056079083360cb3481d749ef439e788303d500ac098dd88903f487ab6b198126675dcf021367d32e24680d58dbf551ec5c92acc019ac5e170705190dd7b89338514c3f102afce6409fd3ac4d95ad85b809f920579a2b6697d2424cd7a6324e2fcb6daa2a5f4c5e80970275567393
-4a599e605aed017aba72d3b84390d7336c1c39f2199f732befcdb6532bc2bdfbc92ce17316e5519b53abce88d54f6877fd0a00bba4192197a89b61e6076d521ef6bacf588d19aed7cbdba39819c9a4019ab0641227eea491e5a0aee1eef458571ba706342fe0876d0419704118b18d1ee9e4e055c286c1fa59ca2fd375346a
-fb75570429922b44b376006e2a23c3228dff653e6ee6ae109c82655c18c02908efe8f447784e5719f3aef0ea4040774200ecb72e96f7752c3d89a7bac7b1da38452f820315b39441e0300944c657cded958620ed0178b0901e03e349bced5bb23ae9e4294deb84e5031116633483e5af73d30e221d1b9d0bc05d6a7507fd52
-f6f6db80bcc9116adc6c34eb6e037d4bf40bf04f282005d8539bcc32ff7719a5256e0cc263724a645973a8be965cb20a5d87b53ee0ac408af6c89dc54f79f04ded7cde96a166c30bef69fb320ca5ceafbbdf8252ffb2c0ac82558f65bffb8022bc9c7c8f373e1cd7819a3375c29646557ac306b47f9ff2cb91e0679029110f
-a583655f8d29a7def1e84ae42480a4b79d23c9d7b1e000a913d26522ed86aa3497d93345139dd461ee93bad486fb47229ea75607c51206cc994e3efb187aafaadc9ec1a905eac775ea8debe6faabd7ff22b11e06fe8554576575b337065ac891761a25975b9b59284f842dbbb3b2c1a27016113a1c13bcb6e552d5204a1f41
-a0775987910fee7eaf8cfadf31c537b85bb4853ba8a3fe6aa222f09233cf8d72f573b1651c90ca32aa7ba49185b8afd79c483e0a6241a89aa7dc18ba9d9ed6576b2e81e0168d57c496bcae44e9d07875a6f3c447c622d1d9004020acbe566047055435279a093cebd7c4bd6ed9a29721f1eec21c4ae24199876541d113f744
-6219637f4477e6977287e704ef7edfa1bdde7fd4be8ff57439ea8f2146b0629d8e98a5a80c2b8763f7189bcbfdb3222b9003d92dcc07bb7f1215b27c1b5a9a6b3595eca046df1ca827400c216f2f6da33bbcd47300ba4c4bf6d5b61fa5172f0813868d7a684e1adc3740e4e22a9e430141d68db63d6c40b5b8b837a9a27e3b
-a41eb6cfdc48765ca00b5f88b5ca84f19dc5b7e481a9fdafa504a673f0871c5a44f2d44f726d6f042cfd5b76828bee85dfada1a721533771e995d24ac9bef9e40dec0c0d0ab444dfeb55cd83048eedef09501f1f0e3b7ceb5f96686d571eac8f5c710e551c350560a85b68931d3ec66bba5c3673e59ac0cef367f9bb5b63a2
-98c1900e13569a540affc04c8a42768636c45469ca2d2173073e40a743d78cd8f58449efd6662978a3d58d73d05ecde6daad772894d9d2b27ceb04afae35f3a18854c61968cc052943109c2358b66a31aeeffae17b9112758796e41470498ccba8009bdb2e400d8177af4ab29e57c67e2a816a7a682e6f89ac9d4c0d3c5fcd
-c353523354221aa5f227d902a8fd6ea1ee63fc6df9cdadd1373d516c6d00a80d46472eee97d0393100db54a0034635d772766b1533a0b41186d87727a64c3e90e02d0a00deda7e91b72f752661a5e8da1ee320c97781f804b4fc9169a67ad3713eaf027e64dba1b4c1ac04ebb31b91b0b287e235f9ed9786e5b509d8b73b80
-75f74c95c8e269af91c5d38e45486fcec38e00abdd2c82f241142331709d78d7ad32c0237ac3e04eb79d78962d9bd014e2c1a58803b17ef22f0e05e234253b665ec0a813ed61e93733414c065693b7f6d78ee298356ff8f7a275ed990fa6d2ed7e52e9a5465acbfdd07be9affd4b4731314b5e80d1564212863e5498ba1eaf
-7508a899fc41ac1b33e7b20aec88de070c9a490d7a573f11bbc260ec929478cdd1348ee0a9356e16a22563222f89cc049828d3d07bfcd566f2e075915a7b709375ea963ae4a226d430200e227f8e7b602496fae39d595d9e34a642dc8c16efbb51f13e8f3026d4c4adbc7f6ff14321066e996f256a9cc9b6115a9ffa9aae77
-e794ddfb7d5efd704c61adfab6588dd8e42b988e332757a4876eae9aac89e7f86b89f48ccae16adb137eb79a9289cf391a95dd4e73719ea2ccec34bcb59754b939b5a99d3077de748cb4df3b8b534dce94ac3b7a709a3ee13859d215ebfad213687f75a9988f23607b2dd603c2cd3e2af8d49d659bf1e7d214fd6b92db86cd
-af8878d0002e2a050009d9db2d4a0700728870d2d3165e7611d7eb20058f27fb7f7922db96a92b8573fdc8b6e0d1bb9e8df799621a1615bc5dfb089eb220fc4a8085efa031436c767a63731200728aff1c8047848108becb8e554e05f6140159a40b1073bede345010aeade337f2d502383fbd036a500bb5c1ddf42204f2b8
-4b5c339bc5e269c1704bc1b95661d4b633540c50162f56661689cfcfcee775de2126d729a37c31bdc4fcc06c540ef8f6cc9ba978f85bf8270c1bbb9c2d49707c1695d4fa8381520b2511e40d890a50282376639e70b2145f1ba4738275951bd6e1427f9612c78260bdab1e2315d41c6f5ccb7ebcd9e9b6ab9be818a3485604
-2369744103a0210c2ab48be9235c2344efb570e82e16ebe934790d6acfa8606db201ba275cd3592a0c2b7c627808a0f08e181af74e4dd0dcff9a54fc1af11688e3b550991700b3693dfdf834657ac3e4977f75cc120679b35e4b0d82359e57b4a6ad12b3199e6e54068bc65dee5760ca3a813df048bd8503348a660bc4550a
-8f504649dfedb69031ea44343daeb2f994022cd2d70f828f355f0f35d5fd031408b6f0be5876da5e993c23e8d3118f2436408b99aee857a02824b2c66591f31bfd41e91fa3252739ac5359bfb1212fbb8a244b6d41354c42fdf0c3109e950ba4bc24124caaaeac7ba166b8c8c67198ece4dc222bfa6b866325e792d552a5e0
-ede88df12921b03d1ef2fe0aa5201b294582ffd3f132739afcf97e2a1feb9dbf490173530dbd7155da05e86b3e1fcf1237ad6ddc2059633b6134bdaa312427327958fe100989d4043219275b63a00612dcf4e50cc5ab5c9d634906bab562e5303f2fca751eb973bd8cbe505db334f5952aac5bb4eed480196d3b8556226b98
-6f2bd57a77fae30252e1c6de72cdaeefe3c23897dc796ece0bf11aa3cc72ee4c54481f426e2d4934dfbe34798961855bfcaa2174fee48565da40c617c84070dbda70ceea64631821f11183d25cfa78f0a7b4d6a50908a39cd090ca5c932f4c96b92ddb0933867be413dde51d795aed8e9abb4559ed0ef83fb6676f353fc383
-52ed0fab4da9d5cc60701b83e6e67640233a6d47b33063f08f758960d8b0efaf21a1843a771c760fd9dc4169f4464ac7a2c6ddaf0fb748ef6f66d541c669f2f3a3fdda3f638517c74925e8780901e61eebcbac3db53c36e6848e16e4b99dd9fe3c0d4f42aec5218f4cb6c9ba80153d53e77726fa110b61b137718e608da99d
-4fe056bb4b05d69143fc87f52d4aa130ab026b5c8afae8df0be26c260f807e1626f38ea644865ff8a6838eca7c0dd98314cbdc861bd06ffe8d8b8fc1b5ed1f4e643a4bbff318f16aa5f1e122a18ccf5becda91b97c3ff4b068a71d8b1492718c282e84932578fa10d3500c35a25f62781e3f85b5ce786530a5e95a815e6a58
-df70cd2bf2fcff4003152bebd49e7191a31a298b124407e39097335e5559b67415c7c695128caad080553ebc9dcf39f80fdb4b1e6f119ae487f809130e177586307004c46ca5d6e669fca92251d598577a9b53975f19a3748b23c429e033e27dcb4b79309f02a07063e4e5c085984a436cc61d86ac36692066c49522ca78c4
-4d0f4e94bed0327104958798f1c1e813727b4e5a1f722921b210d9e55debf6b0165b4139082bd20126c5f07bb145974c776bfbde92bd0b258ecbf6484bc8e7fc85594a68f8f21a48651044d367f0dc843963d4676f5ab892a4b2b54c8ad5f3e6ad73d32247495e2df10a4b937d6a0b3bce9828bf147f845e2edf9290c605a0
-24452fab80be623d1415433a48a2fda1ef272133cd4ad4cef69ff078b3d1036abef3121014e89456446c115a7b5d5ea3233173239ad9677ac6f2bf1afafb2c47c83443ab90b8e6558b7861d38f1b77f121ed2a4825e9f5a41f12ab36e1520244d790ca5823aae2a74efc30982a47c761bd8870699e70ccdb5dc90388b2fba2
-fc13f32c15ea3db5ec31cdc76c19c1ffd71590a2a0867e30674d9e0f71239f36e5afec527e3b67bd50c2c0ad98a96ea16e1306ed31f807a2b08bb72adf690974e8fc148b559731b0a2cb98b7ca2d610db0ea0c875891ec8e12be3ff4d16658596399332244d9a6468e501622caa053ca43ae0e7b9fcb9fd98b99d964478b93
-793ceefea54a96bdf2663c64eee639375f7d4ad7127f0f816ec8a7512b83b3cb83e5b40c7ab4fb1afd590008a522e548e39b64f5d31e42b15989e736f9b0e1e542b0b0acd5e1df5fb712d66e939fc2359f720587e24d7046f39ebeb464dbb353d19cc64ebbd2a3463064d9b4ab3b9b5de3d8805aa62cf477a18359c661a199
-0d27393a1dbbd7b38b4b56a13e9be9cac64b5edf3465db6f0773d65e86dae5dbe5b6dd4b579c532866fa94775ad1d992e20e6b828a68536a7baed097965941f92130d454a17f1740cdf1b2fb7537d1c02e1ffb06e30104bbbd7957c83a5bdd3af99819c0d2e95894fc463a6111532457c72e61bc801e1869d4175b2a6d031c
-82bd15c12fff28c31f766dd362ef74960e2ef41852b21d5b052bceab43de4d7501cd80d0ed60613cca8b875fada6d3746b8e6cea1f0d507d80a2f89bc42e75caa36da8f7095189f81c87fd24fd533e0528b942cccaca578b8481785edb2845063012ce78aa93afa6a8b39139b1cdac135d1a30a59a3130275f28ab74be35cf
-8fcf6cead29c4295bb3db61feadc8f6e5d333c81c133ad9c765f3f432cf31f0ad3a1806fd34f409dc6537c998ef3b63253012ccbe3edac76663602bedd2c28abfb1f3f883b7383ac09dc42802639ebb83db822802b53214963eb988e4d1fb430c86445d4cb24d2bb3d7fd7e191a62221a4e0c24d2af499655d79ee67d642aa
-49f63fd82a7cc170500f964c7c33165291bef814a1cc0362f9b36e733049e9c0030fb2679c75b5f4c36d7e7b4b86230f8ef88467f39b772b646344e0c3f010c3d1e0e32f58d91f2501f47184f5106ff250b431816d4de7c09b0355718cd7722e531cfd1cd922730b7f71db7b882fb52f495c241bf1cf4f0ec77a059757d2c9
-7a9fb187d48e997086c55bc2bd04a061db81985b6a37f721d7c55aebbc36b5fdf99558d07823f53b007858e38146a62e5ca25f100e0d26f644d2c5e5949afa8b03d322f626eef137a54ba8ba9937233509e3db69ef2ab64518e57ddad3cf3f230b7b889f613e9037c49ee18c0ed3fa60dbd4ffb887d08619711e2926f57f27
-1dbc112d9cb068f7346236d0b168e31728f3c005ed22beb18f0708c345c23582e86e4306c944e1b2183013dcf7ae4d72dd6705671f6566440ed19622d619822c643e98c7c361c78aa1cf4d216493854fb3ef4635c3c265fbd43c6096f3eb459cbc8474a44998492bdd286c14e328df8a73e421ff5ea5ba8003fdbba9cff842
-2e0a8e32f7ea5c60be79ba96d87242201c0e83cb1db0582c5e548acd0e5c79b0f6025521a22af244b7490a8aab533fae10d22655c08f65f36ff668811de6cbcd6912b88f1df605ee4ed92606e405d44338a781cf0c55b55e1c61dca12c5b6714e23963712a6f6cc39976d3cd3f5156b0af67d59fb1f394a0909eda39c97cf7
-e96cb1a12606dd36ba6c07c41b00f5528c20bbce7acebdffd14d298ba83dd3af61a1da522b4ee302a811df4878806395249ae13345294501640f8e5c9192b616a49d5d1bf30c48315b33def4ac77ad6291be2be111c8bceb45463d961c5da3a0dbc6e7618c7478781c84320bcc32ba0c725f599ea2fca47c9480617c03bb23
-9426619c2caab2547fc917066e9ad80ef1d0b365b859ebfe662c81fe19d3f7beb819c3c122a1b88d6df0d4afafef05ddf49cdc2e8802432d29eacfa8f3d7dfdbe3776179aba4dc7fa113b1a63bb6ba896516adf6a6ab2e09feee2b93a493f0e65f969d255e24f72671a3f76b27cd20a86d0438a0ddc70f7501973235d99949
-14224f86bb91bbe36c9a60fc43dc75ee6901914cd332e1d511c2167e748f2f8b2399f33d52782b6a587617d6eb0877ce02123b097af276d012eef72e8e785477cd37dd04a287a0d1f9d32ea95e12a30408dfe61efae276b3569aa9cc355b3cbed0b56e671fbdfcad47b3249ad477ce7e823669a8e0f317f1b9f8f9c5a7a787
-0d5d87e057747e2bb07378064e3b1fcf2cebf2ef865c1bb9fcb567c5c2d6ecbfdf9ec7805e4bf36e09f3ec3c4e696a2910d382497b1ea650aca0291965be3f893994626769aebfb03d19f9ca084d62d8453a637c4791211f9e4a4b9efdc6669e4b0328a33274cc3de6248132b01ea2ac56160497a19f1759057ecf9d0daf9f
-054f10d9203c2cb2f2d53d357ccc1fc400be9f20481f0e2c095e2df843d8d393521d3b2d6ffd8db68c1468e75f15c4378d07783a7d3a956b4f5a9698f368059e84f406cbf60a9157cd734e81ad0b07e8c67f96a408bb246d2d47f6bed1af8c9df5bc2263d9ce0418ca8e57ec7030bc820c1fdc8f8e0ef1703d3eaad05d19db
-e49d20a80b44e6b5fbe8f1dca5b53e7de7a0d699a64b35ba61546e8aefe6f608dcaf4ca7e202726d1f118773d4e161da4dc6867956439bfc4da4e1b4d45d98674c395d01be779a22c12f1b9f77628399acd7e9f9f100669d57aa992434523f8a1942dd69ea3b1090474c3b9e1482f53a9e0c9d43517165416327f98b6424b8
-1e37aa1dbf1d976c809a8fce1a713b625883b2233ae2e7949196d41785307e538bf1c2b1f1dcc71ac96d76bd34f26085752a616930940a2cd6fe5d1ea6599d6f3a92fa9272fbd899f4d6ae7d6173b933cbb95c49ed8ba27cbb20d639b692d9160d4d41543f504ff04ace06759403db8bd42abb37225b1b72c04a6367e2edd8
-aeaa29249bafb5353331f4cd42b373f45184c5bbedadc4b31ddb226c607e1e68f82070850194d31e9368bd2881e2a9fc7760378b44f7ade27aec4ba4a74de72d2753558ef5840b8f1ca013afb4eb9272ea0a6e9916817ab0ba9691a015e348fa3d500685ff999f91c74a9a72ed499b8efe4b8e5bebdb6bf6557dfc8fee44ea
-c6c9c94a28191c714b524c3c62eb285b0b93dc4162d13c1fd1c3ea2a6209566f2b8d8725ba60ee78231fc7f7d54b8f7095575453850fa30fc4f35ed7d13b624d9d4f1ed0c624ea561d8362ef397d31610e06fb18c2a64dbab31df2779af4134756f1e1a0de30f9bf9a12a3377e72717fcabb6de9e207ddc511eec03dae3f3b
-9d710b9c5df8eee0773ab5af103d383a83ff26f92d29702802d3dc7e33c53626d41c06459de547d9bfe8d62e4adc9aca779aac7048954a42a97de0c13aa3298f2d4a1bcf6c3b012f49ecb90fc37a17c16e35a81d04d5fdd3a8ebad6292a1cd5edf831a7d3ae35045c12e3e7ecf9fbe2331dd8b7650987da815f01f9e0dc261
-1fcee1b811987a752ebedd4857bf39c2688ebc2235c997ffc2e2aa833f132b61241c48b4b84c61ffd4fcd3cbf7b569e42624e02e80f471fb1fed83e9c6eafac8ea5bd0d33b033661bf1ac89a13056a21a42349a37bb094fc5097b306087a77cde8f9b85df6082d62938f539cacd3bb3eb690c729767712801c272ffd0bcede
-ae1f2dc6808322930287a020a2d843058e4b562cde75b0f37ac94fc9abf0cd7f8248a1f0fc70c3d58c21064018c3ee44272fd8d56c6527af50e47cda397ac4cd3bcc365fd8f441af41edc41fcf081f7e73f38f98872cf95f1915e66c43f06c68cce9868e69c570ac36a2bb4d818a46c985804fce150637749cde4495cb2620
-7dc942dbc2c929f80313b14d27327fba035214d915282d319d8e36e243632f71cf917ff964b97d26a00f793e452e64fd4aa229b40755011c6016984fb12375b74397f7ed824ebdf86648d9997ec708f30f985ef7f100fb309148eb12dcf8a6582c1a1cae6ada5e06acf0a562d79b78008575a547505182630390d4e0c4e1fd
-def9e529d96a92bb602962f54866a7b29107c949f1388013093c3e34e7ac8351249d90b30a60587cf4aa7411b1f526f991d72a631a2105307b12008283f5ee36baa88345d3859d821b03c097ded9df4122b0a4b294350fa3404179ff2daac414a973fc51fb4a250d320aae115ab384726b2e1b9096e26c864df7360b516cbc
-0afcdca17101fb4f65d0895aa2ab801a97e26cf024b656ee6785e1847cf2b135287987b9ac2efbb673883317ec4886551a892e83f1be0c61febfaec860736509d9e9b4c756e7a0b5ad5993266aa6d1ee11be77d8b90f3fe2e8a0f9917ab42d28609db7fa218000d840d7714a9fc30c41cf0a7b0b3e78f7ca7c907b289b5fef
-f4619e200ce56090a0de35544137c83aee3c6289f99fbaae9ad8ead6416206b1c03ec59062ddf5ed123b37e34948cd2b2ea8164b06be73d0d54cc98304d6432a3f6f3bf3f6d8ebbffdee3e47bd9bd22c4f9dbe42a926c09199a6b17db66b61c0593d766b7bf2aa63241384c0f32d61e020082118e08dac70f5034dafbde839
-db49b6826cf37832ac11829f2aebba2e06bcb179c2e6fa5b3a1a4976081469d50d64ab44e8e2f94764bf3c1a3454f057fd45ede47c9ebfc034cd07cb5d6eb2a27057af83d6b123402de65ee88fd55c30795270d122fade06b80cc4b237818085e62e2b8603638b910baa4e5f688cb31238568b3e6e307ced895a6684eb7fca
-bb54c91ea12e6a8d996868adae73cac1237425c00ca1c09a1f29bbc89e59fff8d2069916b51976c89aaa64bc58116e49d92bfc8140644210bcf4b3e785a2b6485ddd2157815fd425d421dc69e1b8f1ea1bb6fa6380b9e27fe67c792b05333acb05aa8f95323eae7ebb406ecf96cdd213231c943b02e3c3385df462e6c1b504
-6d58f94cdd30ed7747797ee142d44968ce450dd46352003b858e73e4d07b0f1d3fa872d2419a88be3889f87d7ba0d31052cfd4f0c6644f24dee7fab7c9bac7d8043a253c83d4fa4f6a5da82868e43064d50924cd155ec5751f44768e249c96e78bf703fee7b49c63cc57a8097125e11878e8410487860481077a950605a604
-a65c43e955eff1dcafbdb807afcc4d780b9cf39188e217698a0e09b761b3cac7bd578ec4bf5169b45a5d82506b019b93598d01521a00eba75863aba9e360fa24e90bb62a02f64bd9caf4339f787ed8f2a0e6be587e622caf7c9994336a16f96c1f1e82e932895100f49cba410bc594506b6142c2af6aba49dedfcb99e3bd23
-f6e1013c96f3163c55411a4b64ecdcfe9c718c931ddfe9599bcd6670e831f6d7c3451381a44e6c83827aa688e1be4e002ba0251555756bcdee6488229d4ff0b6462a38acd17990788293df3405b667a9466a954275bd1c148125fcb5623da03027a61ef99523cc99ba5718f25e3c124fab4f38ec79b5157739bcad24e069af
-bd59ef843125a07bd83745d9664f79b412b40ce53254308be8672f73f7f1e047107f5e385534c881479fff9d713d26f1286de459c153c6328ba44e526d3bbba2b6475799e84499195aec9da34be296b21002c2182f826bed70ded6c5234c13ed40653c88da4e2685afc022e22f6b33989d19d6cf06cb6025106e42892c2655
-24071a67147c254a904a10bd7abfe3eb13bf474ddd385753e537c97a5ff42fe7d6409eabfefda62e14e58fbe4e6a961b55475ee469f97cd04437b0fe4375a95a33730aad517b540173e42042e4bb38bce522f68138fd35cd036a986e36e9e5e9b2d2aa9f6fc2ba39816738104bc9d3d12843773f51a1e227e949bb7981bb16
-b1423ab3cc0dee9a025971722e0078f8e2a505dc93d8f5793ddc91683637c7892041a465be94741c335c7cb30f8d4a195c6fc350a99f665afb964248d63dc236fab7e201dc6400043213437147fce4f849f598fa21735aed8a5e42a8bfbd786137044fadbe0c41d982f312ffbefcf9341f6f1e8d18374d933fc20f2a5e82c7
-08e707763f9330014b7b6339c71d5f08041fe1500e268da79ac61e24bb4ffa3967242a8c688edec625ae14379ad5532b33be8d513db0405915da79141c23d0f46299e4e39fbcdd4704f9b618b1e73b8b618f1b9d53b31d34f11c91fd786331c0bce3a63575a616d949044fc241a125b4426f185c8cde39d68c0d094da11440
-76e777c9958e3e9db8e80afdc36f30f1596766bc7357c5bf4400f843038f0e9dcf43b0207227875e306b44bfa7e2c92288880e76ca80a24975be7a55bf27bfbedf0234c20e5f3a5dfa7cb174e4533d7f685f61dbf1ef23318537332896866275b60ebd8a036a1d01d9cfd8bc6e7814c18e928ff189405ae91707ba995b6a5e
-a0aecabd94029b34e09aca3adef0c9f48e362feb00caf969c5922a54003394abeac728b7d68f17b3ae58f6503b8697ca4668ff9df3f328d922f7d6e3a58172db6d1bf9a1dc110059e25bfb18829a0121c417420676bf90f37bf7e3c9eb7e3b65bab1e6484935ab1cd496932676a33c02829cc39bd386074c9639be07b4859b
-64af2b428c79c25ed460ccbee77725afae2119b1f9196cc30ecfae5a9effa104eb71689f2e0afa38ae1a5b08045886aab635e6a62646a1526890cc276b00828db6abfab88dc2f14ce5966dff518693813396d8d0f8cb1f437a800e5150b8fdec1d431f81ec7cddb4eadf22eb3e9c0116d36e175093391668d3befe49194bf7
-fd4dc5a27dec66c19d88bf40e0abab2297ac18e63daaff6cd571c717cfcd79e8c0811f4ba50d191d7b0b92bf93228b3a288cc363beb68a055520e8e1bad3b65b7c9acd753e11df768a763dbeb8df640a788dbd8659f44342cd17128ff47e1b372c95c562f1d31211ba6871c8a877ad39b4edbe382499b254b778d6c01720c4
-b86f8c3da6f212cc62ae297721212d9e033935ec7130c7a6f98bd28a8028c8cc5644dc06a1fddedbc0c6ca77370ac2f016025bc2f53663a7c83a55cd1d21fbdd983fcec08660c881ba1d01b2d2685eaa278213f71a58e07eb2892a0493cf269963854584f1c452d6762aaa05d482c75f61bd2d13952e3b04eb359d6204ce4f
-1abd87f33581b93305f67bc32fd92779ed3f95ef120fd44207fc47b3e8ad65f7ba4a22885b9d0d217bf34bc169b738abe0a2abb7a0d2465c95d6d16526937db61b8563af385706f1c2f970f13e321e7d8621edb9e444f2a3a9f46b2d9d17228d670e2a131e016672049161b837730cafc10617b0d20b562dc85b97516a64e2
-0a38952519dc5d8bd2827a8b8ab6555e2c86a8a3e07447e0bf8e0d393eae352435a70ad83f38bd657820e028c40e2c7267c91b9826f5210737b6999ce841410b526f8782c8816a612c8b9457fd19e41c9ce4972946738f6461d33302be7978e8bbf9aaad56f02ab4e8ec01364ceca2bfa62dacc60e7abd9fe72a55420f7c89
-a9a326b55d239a3070fc4c316cb852c7f28e4481236af2caa71ed3a8088a3e77e027f8b42d1bdd7e7334cf2ad3be330510ff3ab45f16cf114415a14e104c900e3b87afbdc3f0f3af28f25306c1416f314138da6e4585d16cab538c6255284c4d05520a1aa959b62d9d8b917b44997ad2abf563ed70ef00beab3bb9562839ae
-f7e4abb3dc9f5e5734b44bf7dcb257795891325bf746a9ced8ceeeff486769ebcfa27fac8a2353947b2bd378327dbfddba3a67a378099809b6c6fc5f4e18ffb8a7d3e1af912381dab3113ac87a24adbc08f1b6dc8076a29b88932918e8fcbe52b705daac632e176e6044ee7f4587d6d0370532c702c9dc92eb3ee8938c08e1
-e23a9e1ceefbd05dcc3f048ac631e38c6b46ace97e893ec455dffd1bb3873b1a85703126d7bf0a47f5e0633bd0e7dca7f174137cdd5508bd1c6493cb7b619f482c541ebe705f83c03719de967e083f1c9e3a4e357155a4b20553fec360ea773258ef477f8952c5172b10062958f72f2964f653ead7d3e1c4b1c9efb2bfc324
-ac2de310776b8cd5d910afa419c441ad7d239fe39f6179d20e0bb0db05f89ef02baaae6d53f39522fbc48e613aea450926d42560cb970b2d18c9ef992aa73843242fd5b3730ccb7da14e6dacd48cf0e08a22750ab9046034f494e4909c07b0e9de13794247f497e5a0e9c1354bbcbb71625f19a5ce5d94cf5af1ef5ca0feb1
-7c0a097882d41b7889a1e4da2476abf38521c490bdf845ea0e246da370a2f68029f4ba1ad7c183b442d63eaff498aa2b33604edb786030d033a37a251b09f55fa77b88ca7e77b0f9fa91e323049b344c82ce7d79acbeb379c4b23a8510e20566878268b2d835273cf5b36614528a4693960b27df4f0b93458dabca1badfd74
-0c380d30512e68713b88d193899de03552567267a9f99deac408fbb832258bdba1765bf12c0ab5e020ba228363170cda6aafbe8eaf50596aa41635d6a32dd60ae3ea3dc2d2850184fc2e9567e2d827c2509386b01a10d255e317a2b5d7354d325d52c542b3b3fc740c9872bced1b4833e7f2788e959847a002eececa271dbf
-fca11fb781880c82f5ab623456e8f70264de2a8ca5297ee960cedb48de05f41a66a5b4a60d427f281e71e19a5c2c176a004ba276f6e2fb8023227a8a46354938c656e0d1fc9b6d825584b43b73ab00f3b2b265af5a56208f8b8392cb954e207ee90e73782592cccf684d7d3a4982fa925195df7b21cebacee35227e9d58a84
-f6f035ceb665160084ba5dd53a2a1f5614a5830c28ad191886692067d5e2a505db188afc8e074a0c8d31c6a8726440f841c53a93f87f0ca724a6a7f4dcf166a376df218596050473e3eee63a9d0a1f40f9a59dc400dc6688d3fad7c7637ed6bacd16dbd80b27f4f8161d38c70f2f776519abca443e2ea6f6668080ffffc680
-81d96a16fe53a299cddc74f53169a10bf4c09613d88a6a12730e9728d00f1bd91efe8bf2331885589c047b1a94be3350d3afe43b35892c45c4d7dde587c1adbfe18afd376aab2ba652c512eed5ebf8f2da844fb30ac4c86dc0838f204847db7420deb9e059e185f968d134a4a7a6bfc09ab4b93e6e1cae167f6c984cc99b97
-c1feb59e31e3f5c87979ad351a5497554dcaa314aa4d35cd296d372e6f9344655cdac01a7c804e6aa229fb65684e7693dccdb7bdc018e9eb5d7c4eb739cde06ae9833ec2aa9d437e226e0adc91b6e0f15e848c36d7f61214daf57bc1bb10c51f8e2d99b0d8d04c68572da6b5ac1871911f18f024e80cd1c77e2b1596b221ac
-c4da476a4a54c91097d77393a51626b2ab5ebefc17e69c47c854b856a5b17402c55ad9c587509116eb49b3f7629b64ebd9d6a49fdb03318238de4a7a7351394225a80f28bba86937399ab6b1b02464958ebb832d3c1843713309ddbdda3afbcd1f2abdd6510075388585635cbdcfd6d3c59f71e90b287daaff8689d0a3266c
-f1470d27051f024eb406dd6861b2212026cb1cc188c309dc1659309c970b6316b066796844e605e606c7c050b548fcd702a7de57df2656ad727fa271f9ef79393c3fc8b2bbdc43214616c3db1587e317676750a3c0ab61b2160d55d18614e35276cbc77d0bcf0a5b14301dc7d6b5ca78876fcd00d843d6023b52fed7c390c6
-4c68850bca9f1623ff9508c312fe2d6e597850bebd23f705295e606651f021e1554810229fc9a98ed50c9a61bbc464ae8c5c6563a0ac09ba85a33f7ad555b51e59c32c7147b140822b9182d29521652ea64a22e40b2456c6044d28cc00f835e83d7560a146a7ca3d76911e72d01d69d0eb8a139c1fa62f69aee3c9642c08af
-6cba103bbfe56fc46451d775a826f54a949011924ea3ced9d739643c9ce3a45ce94998c69b6baaeb5c17e12119ddbeae483ede540c1912b153ee7522fe3f8bdfa76db94eba99005440ddd907c59aebf5cc76a7c5e1a60d40eb9e56a028c5293356a7bbe3cfb02350dfa177525c7637d885f3eced08dbbfbb365d1cca0a60db
-572d07e0a6829ce8ffe562c04553258b7ae406546b8d9a676d931f30355e17963a3f11eb4c9e190ce2c28347c164faeb9051a815d47c2986ba2cf3094caf2c5f64a2422f2222743c1700a21b79b1ffd8ce31a3589239af38be807dcdcd355c8e7cf3e8671764bb23031b5ada1acabb63928267cd26b2c9cacd1b4f4b0a71c9
-426161788e7ee7f32fb5520ab759938beefa4fcdd968bd53701ae9c27429b5d6e059342b9adef7b56b4c5eee2f46e0cd472d48f4b9d47d04dd0a390f88a2be3e275b65c3b7049431f94d850d63b2b2154105edb0527a4f712cf523b75aec52c4816683d59ecccb03a26e151114dae625f446a713af28d7d8173e4c44624ec3
-30f84446f46752fb18ca83e19392b1570739b4d02cef8427ae082b2cc31d8115bc18f2d71940437f77c1f98046b243b41f0ec5b8db811f1e8785fa163b58703e813161ea55c4ec7bd96206f318d2ca177d2d00df885cde32a2c589323bb40ff941da9726655daded4d7758dcca859606892ffbddb1889a4a0b2cca0470051a
-799292acbcf80ec3d459dc25208c73b0923bfa81e73e558c0a86c805bc450293ae9fd058a5f860074c6a200517a59c51582ef0c3ff883ab42cf184e7501919c9249e4cf3cee68a5df88e6c3d25f865df22ab77383427e73fc409cc5f24112251389c58d40dce86648cbb4abe34ca5aa1627202e281aa2261a37f6ab2e46856
-cb978aec861908094a865447eb1db7460287e2c4aade4853895eccbab40eeb427631087b3602286d2d2756894d74753afd3a82e61d33cb0cf748dc9321d7909abf4c362a3d00f1fb2bdb29ffe13427db353790f94629ff9756b2c3a4fdb544946d95d67f0b8e4253bc0272e7bdf1b84ea04aaab353a83bc2db356ef30f14d6
-ca7c6a280e8305a8874ac689d49c297c6a71fe61caa17ca8c1912701dced09cfc9436ec44c18b239c173e9f235e301a9aa2b23011d64a84a78d6f279e836257dee1dd4b6e44c92b06cd5a1a14a6dda6b7edaa4581203049333fa934279f0f4978f3c4508e78d348fd9f19ed2c0e7e39338b724ef376e351659dd0ced44defe
-1eae9b5e53a8b71726c08ba2660a50c5a2dfab6453d60d03662addd8aeac2453a1366b46f3d8133896382636aa4b401005a3fc9dd7722badea24dc1388fcb9ce23bf480621b513ee70e2d2cf1493a7a32343bf24cca354f6bda4ce719baae7d2563529f3026a6df7fcc843f735d1ada133f59f131053bce12b4d5f28bf87f9
-52034379a9759ea86ba5ae959d98408305b3c4e03142868ec2e9a7474a17d67964c115ab811f7a6b11425c1ca749effafcd6fe5e2cd8f709460902a2cb94111691d1f775142590fef526b3c7c12d0c525b7c95ac270a7375918c01b10bd5c0fb9479d4d4ec1cbbf11b893a6f78dbef8aa7e59cb014951015c89341c09e09a3
-e498cf9d17653bd0d93f4ff0457e499988e5109dde6b58d09491910869d7fd39d11a9d5223116b05bb766fcc9083f5f70a9d061d678c1655261b98b0697253b5e141a9d47d119384361241f3a1bbc7d80e6a454762e54400ba253cc72a37e27504731399a4d0b32316c32ca317bb22b4663f464dcbbe0bf81e1e0192c24365
-cca2cf7f329ea990a8657775a2bdea4773d2f61f4d0c75e3c5d85064ee3b042204b77feab4e3cfcb7877e8019c7a94c69e309c617dd1fe9faac9975e52cac77342e5fe156a5660abac1c3b4717779650c8d347322e8df24f47dbe690a78683bf67c01fff514f6317f8e52f78bfd780459818f32ece4124f16c6d43877e9d81
-e2061bbdcf8dc6aa52b9381528ea453ca9ff79a476a157cd2c5fd48f21421ae7d1447158ba806dffcc23cc37182a1ec042d8c9ccdc1457e579a1d07fb1ea4b76656e725a1cd26d675ba20ca83500ce9833da0c6125722f676c181164d442058ec5554c11ed6e4fdcbaba1241ff49bae20dce32e390bb0b50c2b815903a8e8a
-ffecc0676f6e5e86fdd36360040c9910faf0444df024d5c7bda00c59a4515f928c93d21a94ee872fe678059c8630bf7f81e9ae18c367456942f630c06cd0964b9684277cd2be69ec352ecfcdaf9b831dde441bc3ea50b8017590e68a79ba7eb827756e43d0ef9930cf498081a35546779536fba79bf3a27f05d32a905e7059
-f9f021026254d242c6660df02c95013c117c6d24ebe13841361d37bd46ae35e9666fe1d038ab598d9d9b390cb84f392160e25118164d28c6fd26ba993a34e9c43438f23f3a0ba3ca8bc64930ea374933d1e78303222529ce0e863b6b23e986bf56273f3fb30e0713e480e10db649efbaaf6e1639d350b248774b104e7faebc
-be52194905e54e132b02bcf999fa2467d0d35b913f81b23b6779ca937d80d225935e3c84bc5d0351789b514e08a6371a092a3745c36a6047173ee1c00f08acb111bb0d51ff4636fdd5278aa4c47980cf4782747aa0f5c48f95554977acd04e4bc95e9f3e57c04add8299fde93cf0ce05f03d5f795572892abf04d5e9350c9b
-d5ab7dfed8a30a55b73abcd420552acfe07a306333e4cee21e14eb790d3275e85af87db5ebdf952ce6a87fd1ff3413a7dc2ae3239f5ba51638e0ddc0e8bf8cbd73352856d0c71286c4670b24bc7e45f9e94afa897b24fb32dde0adad6edecfda7ed4ad98e2d3b3ab70fb48146dbbdbba0cd135c5eafe5a39edcf57ef873d52
-cf6924d2b449d199e3b902bbb475b7753ddd39f211a7fc6846b6d47203c4560a9b2304c86dc7a45dd5764d150ebcd4154e03410c453ee7e50b9156b7c1100534be5febc06046f1c2b7b28a17d1bc83a812ac100233b08daf42fe4130b7f650ba2e456f83c54b688f57fc4577dc2433aa2003dafa0390fd8d554e01b4863d64
-55e65dfdca016c9cc4df2749a736829211c192258e278f8e7b93089554647c545f50f5e7e2dd6addf75c20574c96f8182f102feead3f2fedeb26ac1dc75d93296d87c2983402551d21ec439ab0221a2c8be1f6ce0de9e44eef0a2e21f7471cc2f2ad9be8682b4f48e91aa07c49743225705e541b09015788e511ca78a1d537
-044e211b7b69d6c3f1e5d1489f9d909b08ad05a6488c79ab27578375b4ce7187646501dd31e0bcf7eefe884cb43ffff02dd9d0495f9c896bf2bedaa1fd88cf2f81a2626e6b9ff3640458b833ad44c6611695a9bd5ccbd6bb0f119d394b2ab32afb571a9cf3aa3119eb6b653d746dd90a8a79375474d96fc8bc274ebb15525f
-de953cb11a30556cc9c158f28d274a1b0bba86edcb16deccf8ceaad0e6e296296d3650eeb9e31977631147dc46b4ee8e98a8f2dd98dda6bc34160a90b0853aee24b31fb51bb9e59648d491708295e22c9428539deba079170f84a0956e8e6d85aac3218b2c0cb14d86af8512bfa0ee21b8dd8461716d539129fd604def7e0d
-64299308cda32c03bb63a5bae0465938d656fbbee6218080c3646853e30553b4b7e413be75334c607ade51b0111342419e48abf43a336fc56d27f1d826e3814376c7981dacc200a068fcd1bfa7e5466766fde52d26e23f05de090b134f6abc8e7891685670b646e3f08c5938c058a0d28463643895137745ef1cb9ec10d96c
-99deb3909b48b545d9f105e115e339543e058fef584a5eb28c465bce0972d57704db6b7a9a76deb1e0b09ef4102586e99c01f8e5b4ddb6871ee426e2b14464d4b0f9fb6efa1d26cefd389e7e3abe64f472a7b26cfd2d01e925e55d8e16b1a3f724cc03564f4b02a95c1159b9bbca97b698489861f971def07536dca84e9893
-9f49e1481e717384e4af2a3d8401434857c6afd424518f073a0c6611d0640b381c7ecfd17e1ffe8ffeeaf029991aa8b94814ad301cee7f9ab2f81471747d55c3bc61ba3de62827cab35b11c70f6dae3ecae2ac474b7cbfa5f39e382e979b63bd4a11de546c8be9b31773711b5e67913c18226f84643afa17b91d9b324a7330
-9a38ca8d98cb7f004bf1e9b587463cf9210a0a7ceed051573e312322712f5229a7a6d560c3503fa045a0682266b92c0136e0b3c29cbfd6fbd95c6c9c4be00480e892590bb12cc2240c98813283f65ed0886f781f520d36b037a7d08ca5513d4a90e4a883829999943f2a7fea006f074c898e7116176671691a2c95ae13f83e
-394c79c281dda817b542b762a39ee76e224af79c6a43776f09ec76604d3b4b240f0bad91e4d856e61011dfbd53c06141def0d1d0ec98123831c693cec547a0194ab274a7a2b9397b490f2dc1da0ec2d0c180cbed2ee5fe7e366070fffb3627eb8ef42eb9469828472769c2ad188584487254cd2af779be1f6730684cbfff9e
-e6c1b7bf5ac833e7fc34b7193f9d51296c0d719003471533da36f1130855177b7ed3e60760155c86377b20ab674b69e32365967e28703e3922b23a15b021091e07c0b75fa538090b235dd96be442c3baa1ea8add831b97d211c2ff5b3fe53f038a1c12144dcc8361c31ffbcbab2167a4f0e51da23642480214498125011a1d
-711771b41153fcf6b934c0c25c35d5dcd02db5349dd083518aaa14f32543ed076e9fd2ebf53d4e88892feca7b3a5189470b21d142b154d75e1ede154bdc78592ecb14d82c6715ba1624088c2b90357f3416c01b34397aaa942bab61df55396ec5ce23407d3dd3c2eda7f107a401017f232dfbd1b150f6c0ec3b93152c74e9d
-2591f3c6909f378b4947de867eba25f89d9e69de798b652103bad8bd49260f8492b622c282d635270144a12d58e0492713ed4609b1d609dfa57b9201939e9f18f524b019357f3cafd9f6c12679d8d9400475f66b93ce1135667370068a5b527dffad644143fe8741d56807e046368b91dd66e75a88f74637d0b5a59c04baab
-6dbf44b5b89e702e074d7dc6feffc48697a74797d773f4d8c960bb99344bd458751c4754cc2b4eab9c563b750098110697e586fd3b9c4bb33296e34de4ec1eb86d8974722e53559e301495d26c3197e65440582e5f54dccc5dad10a14cce792602c8c6c7c617f55a759981e358bd1d33e659d5c77cf30687e502126429171d
-da8c596be3395a78af1bd6cf2b643c2de81ba7e1e22078c91746a3bb40adf99553ed61c621e2b24387394f18a66d7caeb16daa0ffb60ad9b9d425090a9b6a5e0d035303b137fd254cd27733d8b67058685fb62e343f874a7941162fd5580cadad88c7608ac4487a0f14058a9196d884da3a1916d7079617213d5f89db244fc
-ab39c41bd7f51b18d9c9257b16ab12b8d921020105007a5b2d02421a34af52bcd2ddde0f344d50d90565119b889595dc8dbb37c9c9b8cfb965ba3839e735ff91f72374c1eeeab92d472733a3d6978840ed61465fe61979ba2379029ba59c50aef02892a39d8320113f019d32c34c27312089826ccc562fb970982fdd14de3b
-dfe77f5ae32d49c99adfd6978d6aa7fd7fa6071073f8f9bba55fbc95b54e7992b953da492bed8a5728d14393bab1f54e739de8c3025a5f8b61d171255e3517ef9e19314b8d107c6ad9d41f1e40ee4bde3dfb0efd4ab519007a77b0e023e08492a6de7155233d041d5cf7b7e9e82039906ddc523cb8810217bcc199925f31b5
-0fb6a8d47d3ebeb1560f5ede57d549b0763e0c67a40295b84e8ab7692d05c13989967e616a427dd96f4e077428125be951b10b1e5817cdd22bd232ff958c526d256a5670e3219e6d2a3ddeb6e1ab790176bada7032aeec3a9aabcc2ace9aeac918c01f337455ed11cb724e5e258d0628853eca184210dabb0c6ed6b95023be
-9057833399b78aa2aeff5dde3f0aaa2c2009f9efbc48eb0d9d4765dbf07b4663f228ed941f59a76d55fc9f67c07810748456b8e334e77e6d4f74277e9261d9ffc2da1cdd3128bf863691fce8cc48a100359b65666ba38069d3b29912546ea0a16e305db0d1545226c50628d4f6a08c408d64f2474eaccc41695dc2aef0d4bc
-683c40a3f0f94f9948d58efe7822a240e172491acdd6e8ca1b68f271ac6dfaf2e1705951485f15f8b9432b9a72e8c1bfbd0402a0e50bd3e71cbe8cf62503794ca877ebe9dbfbab545adaf15cc37a2a97d01449214036423409ff042a1dc07ad4882dd5a8d10b141153e451a4af2c2662bdc8a79061c9603b38e9b5ac67f5cd
-aacf5fcd6836a2de4d2ce94d9cfff1c2bbe4f98ada627d7f27b8d44b7f0e37393c19ee16038dd6346f5e7bf07e0cd51f3604732359109b8996146c40ece11bdb91c86f4b6e7e74d8d8918b625705ae75ff05bff1dc185fdbd897241b0b74d37591875cf7dffbd6da4a4fb3bb516e141f0f7ead76025343d328965e3315df4f
-56217f9f55afbe29bb5523ccf7ff4aa3f42889a5f3e85a7a22f0475aacc8c4fab17c4443ae7a72024749c5a40a5bf8c82b4f58a8c09f9a4ee0cba8f21f1e178e8232600a43e2ff86c61c5982227f95c93cee2d4674058d2127bf050fa113d478cd1485934eb9e37b55aeed7cd56e4db12cbebe8e666f679824c09ecf92aa2e
-09fc84edd85473d49de862a62f78ac63d87d53e61dbbe5b74932fe27e2b8fb73d60b154f8a456bd2f570e94ed58bd8201e460eef859d800c58c3b59d8cffc122d6a334d96f52cd88491ecaabbc25b414fc2b9efee56a0ba1c673151ff35de2d810dc1c7b0f9ec2c823a8b8d835210cdb55cb2e959533ee6b54dfda46722d85
-e3794c50c5c9dcf1dd618b2035e8bb8f0d99520a9864f2e96021aa1db1aab35f3e32e45c0bb457e5e117f313fcfe6938b9974207c10775f906eeffc4176fce43c79cc555edb26dbd02c54cd3df65838b6ce17a6604ac71036e882eca31325344fcde4371b928e47b55595bc299827908e617bb4b82e5bcd954c439c84fadfb
-0bfc9cb00ee1e5d41dac337699fa4c49b1a3d2214aada8a7dd63dfa83663660094d6d753493c1310da086f069ecac792e1e8598850af44f9719912be8463fed1d7ec2544245f70b1833d1af7114596ee3063e3ddaee634022a6fb39a0a2137681fc136ff3a21ff9d032089b9089a7dbcacf55945108f30607bab327a9de8c1
-31d1484c2463a8ec2e7072a2c0b14617e2bdbc332113a1f3c5d6f680af024929045070fd4d49f1d12015f8049a449835457b4b9eeebf04ed5f805020a428d607d7e4b8c8c406ef9faad69fcbed1ae04e4d69eaaff06b91d73b6aafa2f6d5378daccd9c6681dce4383e48501681ad611917f734b3d97174c2fc5c32bd3cc987
-172ac14aea7ed03f4ee707ccbfcc64b29d2909379bd95c96caa59217e8e33b6ac95e1218d6c3ebcdf6479c7f7fece2905e402a85df4430e44fe77e8d6ce4e4ada1031482c5e423dcc6c1a7b6dcf308b2f5a88e8c617acd02644ac99ce42beae85ab78473d01cf6a4830e8e83febacfad50fe475ad206654e567d26abf4766d
-cb8e75a9f62aaed4cb0d65d6af505e05dcb6f2e9b54f76f2f40f6dbc25b60d647d96133edeeb0673f74bcf1a3bda8c9c74f92f7f3f9026ee2b84ddf074d5b0d305d45253a56b33cd66b515e4a747c2ea5b53956044bdbab253d8a52fccaf0d6aa108b793840f6d0daccf8839204daaa69b3cb2cadfd063417168cbe3bebf55
-719fc878f02aaa2cdd1d32ee97747b5f5adc46d13d15e986360ac7991e65075b2cf47dfe8d35c9d47ae8d20cf5fa1b235852660722e87179910378bb654f214666338884eb2f0bb7524bc12dc072cbc192520c7c62a193b5649b3993578d799eae9cb034044e93b61f80946ec63ce375443d8054620fadb5d3c894f1e15b13
-7adcdc4de399976680989537b849876eeaa2b443433a4db069e42eeec7c596ed6bcb020dab6a476fd5aaf4c3c2a3bbf301b249f5a0a8bbdd54b328d13f6f930f4a0fee218be4f192a8854fd9ba70b99a30f1709988abf51cd282896a4542f5835ffa7b9188cbdcc381a9400911ec727fa7942d47405a469f09552f51a60179
-81a7fc216110b492662e23919146a0baee38a5526705a1434306031d4914041964763c55f4214b07a5a43bf6917f34a7b00cbd233ec93a2d4500a601b25a0b215ce4d6405e1aa53a459e6e4ecede606ec4b8ba535e27d7df3902f0517f6eeeead89841d1b32095348bb19178169740fbfc3cf2f8619efea7dcbf4b0f95a4ad
-15939056f09a9eb4f79783d82c2e18a5686eaed7ff7381bdfed64f2b364c0329745148b86911cde3e293f30ae05db48637bd22d0bd8e2fe5a236229213736068513b9c8e691f7b2a659495c81a6b70774140c628586d25588f3e6d16434ec06c058fba057b593151d10c869f55797d313e06afb3fb16d01c4c291058e7583d
-6398ea0cb269ac8d2aed9c9b14b5054cd1410d61f4aece806a6b3cb7d6db1394153b6e46d755c148b7f9a923db78a9ddd36df5dcdaa70d40c12fe125935765ce3297a24b50acc37cd98d05b49c141e19c71c55b9a807a0788b79d6b6fb3bbfc4312e76f50ca414895430419ada545ac3b632cb9aedfae267e75fba42d213d6
-50ea89afc6259499bf1ab0cc9cc47e8a323ceaa6018b1f14561f66e6e450be7b99ef54b39eed97b9674dd6ff5967b450f3ea40f26f222605a07c5235683b8709165a57324fb8b68b0b328f083505ed8f18a67be25c64c5c837fd218f85580d31bc4a88a296a07d0f8052f86944fceb8492ad0baf0bd911e927088853a01ff5
-a2fdbecccfc31abcbd7f50dd1a958512bdbb34a0df4c08fa597f1e736e3c118b2d1b3c79f199cb3adf45782c514134ae761e0b74bf3a1cb791212bd92b5d90a097425ee12161e0073ae64eb111bb2443fa5faa7b22aa1735a4eb83dfca07c7dd90aeb8fbc357ca7af634dbcb9ede0751e9196657ccecbfc8e5eacf760965d2
-ca09cf01259945f5fd92f5ccbe2f63bd939ee89f2eb4bf6ffee83a1d04b6fbe2676f5a266d06b7e9d762e79f280f3acced9672c9dde6aa50c68a4627c59abd96460a3839f5a7ef734c1021f4aad7a481911e71ed9f8c7fce0dde8f1d68fc7d2ce95947ac080378954246b8a09a1c53c11111323b1f04ffc08fc330ff65c590
-f5b186342c0618d617c9a9b3ad4a58a37fd8e2f96d8c7f8be066eaea8db5155607b6e0678b9f8c1d20100d4b1e5f8063f90484747f5ba080f40cc0ab075e5b6605a296c1effdd9a3db89b9c564fa2e5033737d084929ec3402e5dfb594b9c69e57e9aa53b12f242303ec7c3acfaffb3bd4a23718a5b4ccebb09e0c4c770a7c
-131233f6e402e1fa7f8f9fe3b8572a7fcf5074735c984e4d7d26ae626c609ffec1e1342df9cd6c2409b1c9dfb7945914ad4571bf97b6ccfbdb527f749f09c1ceaf3edb56f06e2bb4f75a99f35145fbaa2604f339a095e734dc504e3a017c1a69c0f545d61a0b2e5eb476e64ec60e7f5f101b6d1c2039c58a383b337d57b31e
-49bbf407c98f2cb09f45bbf07c9f6d43636f61f6fb9cc72b0a1e66665c3bfadc795b274b28c862fefbd8c9df6415494712f4d39b6c9e8b6840ff6a53d06c00b89fd41bb3155c38d873e9da1fdeb144c40bed42d56b7d9369f7bf4edfbb9a7335cf9cd8f9dd7d1cbd555eb8e0dfa95599d3e8cb39852de35f3fca0f6d1d24a9
-56f93f4fd1a6619d112f30822c0a7fe9c2c844c5bbd59b6fbd8a056d88d22af574c272a8b0be09d988d37472d4094585e837f36ab119aeb02b9d3b4d4454f19f755c41dd926a4856bfa3c2ba360f72ad13e8d18506e30a9b01b83deb9c89b09184dc68a2bd29c54ede5444c90fb369e0ca546255d1b25a97ddc37092ccaf79
-8a4df6ae1ab1f6fe5978f58ab0f12d3a18253a661a527db5e4bb6b68b35ab57f4d351b0c3143b6231ddd0ae6fc7781da577a421b15c9adcfa0b7a850be966de93ac1a1e7f0aadfb026d2d275c3d37604b2174dd3bb7982ec4430122462c21591313e0aa701a10e8f580712abc662a71fcae9baf937b67c16195c040f02aaf6
-de17db5b302c189eb0cd7dde487eb7a897a006c5506af24f65c42d639d82fb78499b8c6212e32e14079c420c86ef3f0acccddf7ae63921adcb7f64cc084e6aeaea1f5c0b2b67ff411b86c6e788da96c68bfa68c6093219b2d9d80f854cb946cd702d076ce093e5d2cb2943540a45d145c0e22c52a3dc69ff278a46751e1ba4
-db39a4c5246714fccf80a49a520d887a8f2e33f5e6dec99cb3d8b717b95ec797b7f7ba2691485154171352c4d8d348faaa50f72168a0a8ac4922761cdac42e9f97305e253730d6ce6bf2e72e5c88b30d86e9d0372bf385fd5864b4aa9b492333e0eb6d90e194fad705b9a9800239b53f3055eb976d6372431e9694c4e9b469
-6d49a3e4182f09e34758fb925efa2e6b89fc2e7b820e8ff605df9446a6960d099f014a2c541950a71aee75677a871c2d81ecc8654518e3e13226dd0e7ed9c6e0aaa7b2be4c2af2118bd4c3058e0ca8d6043eda24c69c3751524493a1787c20c3780c51230fad06300cd2d161906190ba01956b4aed0b0b2b1938d12bd12c3c
-6ebcb75fb6e0ce53dc25429733cb2bc11542715ddf9aed35302f942c9ac1bc0ea1ee18a4d1b09c32a7501c45a91881b60cea11ef61ddfe0cac4bc73caf3a8ef7a0fd5c8e6bcfbb81dc0adec060503519b151e1a7504a53cfe8f0704044c4cbf6a4c06eccc11f7aef476aaf8319488be982467bf55917a403726930d92a240d
-c3af32db6f83e06f3964f8b22329b7eab6c51b419ecacec0cb45e82eea7af08890a85df3dd8a078c94352cc9bb22de7cfbf06fdc59ce5198d62138d563c5ea959d6950ab0334134c3deb6b78babc9746ef3d66ada708edcc4f70d20252ea79b4c195e9710f558a60b0bbf28ff9d34a400a76ba580cbf8f2f2aea376a82d740
-22bb9ea003a3b5962948ccbfb92574683c45db36edf0376cd8a5a83c9032044e23f695d700014054ad65037a273fd8c876f229902e4b64d6f660d28e412276cad4971f1927d85f8c89e7c7afdb59fc341aa415e83d9fee5a0b9b2dba23b499a4593e564758333700aee0565348d981cdb87d394b5bd72eae7ce76c4208e044
-9cea3a959243051bb44583223bce68b50719a47f783c9705f461ff40f40de2d284bec99048f8b9558b5aa3bd55771eb45a04d94555e6fdf1be530c1d0d39b8e112704b41ce0d7f86540165aa9dfcfc6aac9e2c1f1adaf871a937aea0b5cb6ecdaf64042d33e4b8e67a8e27ab68946c23a69703eaa4cdf02977273b775e7cac
-1071ed89fe72282620873c5c8f501060b6a5a4478f43b19f63833372b5a45b0bb8ba292c97acc3ae6ea644c0bf01565c1a4324a6ef5420dc3b1058c186d5b373ef3cf7e5606b6fffdeebe23d36a634f3d5a87543d2e79b7c4d56c424fcfb06629fa126e6b5b7efa57b809cf83cf078b13ae067da2f9ca4e17c43c413cc4db0
-4865b15989d63481cd055414b4d35abec549c0b8d0ccc748d0b617481e44accf8136072a0a736a35f55467fb482d56d5c6115078eb2fdfa1b35d9262fe7efa40cbcffa8548463afc1bd47062a66598269b4af1a3c4ae0bf91f759b9dc51cc18e9205268436b29100e529424aec36e21b34c5b1a81480115a0fb0abc00bf73e
-b90761bd52b1253382752af2916ea7a938e26843ee420dcd820b5ae0c32f3a96c586e3ac08b55adaa81f8887410a7e4b00db81f2143c59074627753055bdc3c7a2e6146823e7dd932bd4e4ded28bc218ed865c9f8d7a69c760d00dbac27bc455c254d539066ea5551e2654afc675cfd2e17acab2123ab0c65e3e99521ca52f
-dcb7d5c044fdbd8871d447e395e1de2c9362e8eaef9065c1176a1995d70020318caed30d4edf4ab45986cd3e7cd64d57783523c3b892d27410a3d4bcad5c01a0ef6a92694c9a98b7c040b2783f9a1074d9e16fe6853af21d2ab3e985d904a0e04749565c956ec0ca450c67e6f826c4480c339b6b732909db08ab4550c0cd80
-5a585b9d3c52673bbe79f23e0083d1135030dea216596a2ca5e2f4feaf6783238197c21dfe92075a556a793d1aac9d2ebee27da1294665ea9b1edb71c15de79fec422c9d516511315742c97fd880f6717f303d058ff1ea803578291eecc227366d3361f08ac7ba33c47ff14739421098d38eb1da367104667607eb192cc561
-e8a80f2ce7726a65ed75f5f0c0b18bbb676cf82a468251d983352bd1a147134294762579018705cb98379c606754bf75149dd2e300aa5ecc8812edbac86a622cef1f51b8cd2b6cb8bdc081f730abbcb33091d4ac5a90d183e16278c69192247db4882da8c58b75dd93a77ce01fc76f55caadaa7017f91c6f4b2e2e7a3f0bb3
-f0c839f13d73cc8d8293bc981eb9c5866b9a3b1534c064384e1437023528fa6e6169775882522275040c3e373cda0c2743d078d7a04f5d29b622ff4e55c460909d18ed428078916824488bb49f197ed81d96b67cbb7f36f03039fd1d9bfc5b4bb7091c6584fa240d6d706d43f68c1643524cb0ce831ea345309574cab2ee1f
-bf1567a9760e4975b57af854ad3f8b95a76718a01d1a5fa977ee6f7d41db653f822953e52cffb8d914143b7cf599e4935b73426e8d55eb7f630d3c2fbf03358cd08fdf9ec23fc4b759455f5ad2936344c2cb4709cf5778bbe53c42a2fdff9df9494e08c26b099fd64e58f06b7b044283b34b220d6f223ca0765396c432a3bc
-662e21925679e63e149ea48b0a3591ff9d03a973b74fcf109ba19483eb66187a9556df04bfc88980079080025539219b580c7f7b6f85595f017729a426a4c670ef41ed5570c74b1d6dee3c1a20d6dd4117737519fe81496dbceb0cb6f54326786efd14eeae887cd226f7398a3e316d25f52d5f37b323828d416a50517b6e4a
-e7dcdebe12cd7ace92823aea4e3e99c39b2b45e978f3e3d4b68576f4a57b28b5c8e3a9925c600cf28170750cb89793543045690d32248b9ba3c7f592cabb34b6cb49fcb022bd128739dd758b432a5ef1bd01c110e6ba2fe7e90c8c3aceae45189eddac411090e34ea00b76969ec399e84948b8b317af70d4e8e429e46fbc8c
-ee535d79e72056f14fdf84bdd95fb6f1418ec8cf97b48880f7f91ff7e7d12f1988d8d17d70176643d880a2ce377d27f9efcd971d19dfa6b8f17ab7bc4ef1a90192c5d9a21b4bda44adb6b2e57933a60d2f7f44679ab7f59f86530aac0813920c24baa47e3a8cc1e6e2cb49d4968668564624e310230851723e309660ef3ded
-dca8cb501c6ba2fe14b086d96344fddeb0e209b7877d7bd5d4fe878cb6082de69d5d5f6d516a06932aaa40411633b4b7e3feb851f94394845c661074094cecda80d302d2a5a7e9cb683b9c34fc4cec21092322933fd6bdb6835282ad8e20e0c46ef3601704b4e0153fe1a08d08c4846dcc8d77fa464b899b7d3c06be15dd62
-7dea14d40c447fdc6f80a18a1264c480895d8b03d8e660366cf34e526451f0146bfbd5b34d8f85a1597f298ada965187780d0d2f280889b50c00d18e4ea710c1d03b361d0a7b4b9a8d4725dd9d92a40f8b817f7dd7257f2d15795688d36ccaa4c5ca2758acda97542f24232bb30b92d4f4992d788c6904e848b5ffd60d3e77
-ded7ea6165f84978c879f8f453710bbb5d19198b38c563cf9670d91cff10d6d381172febce3335bd186995e3673e8920fa73b43cb5fe34d301ab247e9fd7f795f67b2805947ac022cfda235665598aaf238b887cf84fa4cbc8214fb930166fcfc30a921c1f123338101d1d1679ecb7bb3b1e51e00dafa82bb986f9f61406c9
-b571aeb79066a84cdcd6cdcfd70d98bf53799a1a1269a888ba4c24e470840a498f101764f5d92a5d6f575894bc6be6527ea89f2b0e387251c9c8a34af1fb6478f49a482de89dfb5215fd77bcd1dd94ebb068b062a9992a4108f3f1ebf313440394f09fb2715d95c9e995c157330702fcac08a1366d675630eb6bb8402f8327
-e54a8022b1409e5594c3649ff14443058e5a0ddccb421ffd1697979a900d924be3c6f7568483802f119da1686738079b96e3d6aa432f9c2eb233af9d8c0adf1c257da8d5b7ee0388e51817fe50b0d7a5f9dd8649c3f8283ff52034f2e6828436b9b29876d9ecb6fa0a3cb8f861380e482bf56dffa994f7225d3d1dc03b667f
-a65ee3a1298b8ff5f5315abef5de514b3f58cd2b83c28aab17f8581d146fbf9e248f4eb056f01ec41e689739ac72d6f055382420743fbb279a1f855121511cd17971580ea4b1a809df10ecec464444acafc6e7e2d96014198ed9bf3a891c61d71db5b00d451550adda9c225aac412be9aa65dbb1539c8918117458307cf0e3
-3a50d04720b30c752bab5774028dec340a53c9b9ccd62d6ecb9142fd0f598a4cf4a0c26c8d5f7e5ec8bb283d13201a17b449cfd95405b1d3b8860aad3796fab1e3a3a94805013bf17764cc230a97428bafd855b045fb04095783a84908670a6dab743a0d3318270dde32fe787fb352932e219cad6e02b6072b2e0f69949313
-c12f95a256c71ae06d285756dac443fa7a6e6332f640e48fae5948b4528a1aa9947825c8ee43ca95b59b0eace71574c07dacd10c01916fa61e3c4904b5baf81ddaf8157ed27600b1f547efe0b17478a90c4b41f139a427e06a4afdaea2d49fc65769bef1b1a31d789de62f6f657eb1819cc684018018b1bbc0e050c0f4d074
-f176760a6a834dbe624c63951e6977b09bb28c7f928c787b01ae8101b77f022617e010e2a13e137468a7dee42d2534eeddcf7b5f377f621e3e653f98a964da7f375991b063ae81bd4586b89a5559bccf1e9deb68966857375a3f312fb7f595d5f1cef91ae58bae549a5e054b4c247bef7bfd3b829124e3e39b6993c9f168e8
-65e7dea0b0063052efbbb22b01ed459cd09770b71ece09a6a115667d9e86028ce21c696ef46920c230f478ff62a4fadd93bd3dc09e9436141650b6251e01259fcc48800c883665b7ed6abe106ac781f96f5913154eadf17a95fe937ab883b7119c03ed1b77210646c088c0c569c73398ecda80aafea7a07dcce9e4b4119859
-336ab79ddb8aa826afe882b6ac8549042726aaeb294081568aa220e6b264ec8333f1363a848e965c913c860d8f468b57b2e963a42f28cbf4871ac8419e297b4bea4ebbb9663ffa1fe6159250a214c88258756d90c83747e84ba9555511d02adb9bd5be7910763cc502509a2c0909ae5adb592ad760dadc9b5cabd6b5425e6a
-dfca15a0904ed052af61e409d77976009a5b9bc2a262cfce4ea086857ec043c20c8129e20e5649c838895aec54af9d0bf4dc6c464d9b6b67b24667e6b36e699e135a92a51bfa85f8c7e530a50641582ce89baa2d8596664e83d2d52f55618f0303d589b91ddadda7b87fdfe331a88a7dd29f47f00ed3bf3bcc8021cb63c90a
-802dd8dfc62104c58df37b0270ba95037b82402a3ecb6898f1474bf51b91f97c420e0c517f03b61e3b6544856c4bb4c5e426e167e314b4f77323125794f0786ca00081ae0345ef0075ad9a454ec3b38add9ef11c2f31fcaad866f7cd5cb6d20d07b514795dbdc89f77a00ab8af90634a3cb8d31bce450e8ce5ef362bda0b3f
-cb25aa983c21fd82a4ee68a45fa2e5c1483fd27e02455142371614b5633e5aa22b2dcf4607ec925d60a461c8598a8dd4f66f7d8f274f11ef129373624add11a097334630e43873a9eb99ac8495b0dc83dc20d2756892ae42b6730f228ed47b7672cbae329052454b1e7e0febb380adc51ba89d0743c908c263f1b4b60e4b7f
-4844cc8d24c342b8fca2be5395ede85f872bf99f71d9289a721719b48eecc37d16e512cf94e30270e592d2b9ea12db08607f1c3033b0bd0cb65a045466a8e454e2d0b1d619b6767ea791a5022f7caa72f9568f3244f47b38c2f3ce4ba191c09cfaed4d6777c6c3fb54e1b45f272e3cda7c94fa8a23da81061880beb0925e01
-622d6a4d1ab1d637a0e35a27ed1ae46d4501d511b3e0616e7f4f791b9fa8725d194aed5b0496c00a7c87f376fc5befcd54375d96c8907c58ab707c6c004a5d263d22ca106d6744d8b9af3fecdb292941d00646ec96c9e9b4c75eb7b2c636d5a9eaa7e209ed2f2608bd14f54a9f313c7551ee688489699f4f523d427fe02797
-481e69dc8063dffbec8f76136a32dbb93ff555f631e54a21ce87d2751333c1b5059265c8715229a5fe02fa731ae37a5b7dd0142f353b4434cb1e693b0119bd31c7ca7d211703bc1df0bcadc6a33ae167889d8d6fe2a22884766546911956febdc6661ec3ffc59b4fcd0fa7c3b0775887f251f919a35f941aa56488dc98dc62
-5ef65019913809e33e5abda90d4fe37120a4da79d61e3676cdeb6f895bc46e012228bb306beef82e2e6ad40ee1da4cd8dc5919e626c31c8a3e6754422f35770fee9659cb742cf8f7642362fe2bb9752bf15158d6d5c67e42b617050818d1709629475ba093335c2687f3cf90a04805af3528211dfa3c9ac93ccfd78cf82abb
-21c8b717c5bbe37d6741acf7b2c17fe0ff1ea23f9a538f0aa76d89bea204b5d054f336551779300e51faddb9ef11b680d21a7430512b5ffc9ebe6d684b3bc9cda6025e9ac6460c51f374e36d4c35522eb5176697c2e03c9d213e12ec32f1b7187dfb4066c3ca80ceee0923c01075fc1c9862a206b45ba3021bd7f4147fd0f6
-bccd893602d07fde9976e33be17bec186af2870e312625f9832364613345263fb4d98813b39dee77cccca0410613f7a9f538a70131245f6d1289ff2002bd21994253d5f1c58180c1e8a2b8fa5fca661260043c7a9d5d8a525bddd960cc9e158d6cd58e51e9053800941fc906a4bb969f096196a48c100b7378afcd56372f17
-aa8deb5c891ae09bd79af8b6453622b2697a84d494064acfe74e09cee528dfe3b218b96f0beec9d41b53f6e648705ccccfaaf72eb00028edf3d4fb0fe4c7633bb93999e2fcfae53ff072468a8ada44e0090e7dc3b5dd4fa284a936e72e2f9fc600ef23e24364f2c17ae8ad548b4e19ce7082be7439d9e948f31b939d0cbca5
-21a24ef72cec3eae0b3bf708fd3313c5a60aa5d60defc56eea51508fdf5c02a366d76699ff03d5e86f3451313cee71c3d7413c441ce9f00b2bc5959e0e2dc4e5288caf3cadf7f4af729471acc283d5db5cc63dd26a6389508784c7320b6c5f0e48e8978070cbf418edb7ba5b84a28aac19b345ce4c50a1f066413c24b5df9c
-1fa9d26d73749c1af1af0eecb0d7549820cc7d3796f15e98e1a9ec2f03dc864f6e57a3e7c6e714e170a5aeacdf02a02279fd4c68b683c83192ecd3b459775c81acb661689e65542e5466a9524a03774a20547758d5cf86daac6b0fb47b4eb0ec9d007645ed2a3a1282583789c5c615b32affc5085561091317cf53e64d7d9a
-688f5c61608b042ce2902af5cf42c0799e35aaef0a7b2da4453135a8b08d9d051ed73aa1b64388c8469242ad2fe61154d3715b4aea1cc9c055824c28a3aa05cec976484569b3086b43e22e7d656bb263f5402c8d6509f8e165589098638b4eb466b85026521d70bfa96f1890ad481d2f12ca27fcb75ad53138a430232f5d03
-b68024be7d4063a26fb5812606d295577a1cc0d642536882b16d70c95a69027a8ebea67c2ed63fa51e5f2687e35337eb6afdf9ff763d6b7155d5616d1f66df53f264ee1ceb52143cb481aff34aad961beb6a466f011a97906f7235ac1482b59caf4f35bf10c106a17849b9eab63dee84e84389ca872f0c55f9c88122b6d6f0
-c758d0dbb717bf7c66b04db20b2ba106bb7b51a01f4f60a45431157c3767fbf164604167583f3ebffa0d874d78e54e673d922091584593f45c0653eec563a7115b497984ade01c733126c968a156d562f14b9d1bc3555565f84af0cbf9b67d390d1eea546bf8f53abce45dcb31de4e15aecb10c71437efc777537e89c2d906
-249d55ac4d17fe2346b1b68a1696953fa4484d0408e2c8ca96d0b6a04bf78cdf672d99c3d8697a6c388c31bba5f487d68d516e0f5f9d0f71f7d0c12d9030c7440f3f8219d1fce3cd87f1ab5a2ab38288b99f98253a648a350bd78bef72ca7f334c1e92a2cf4f274827648efe4d4c986d6b28683878990269e0d695cc93a18c
-7f8f64c4a1a89e4568e43c8e0118bc039c271146e047511ea911a4afe7e01885f69d310c37d0ba5257f0d1a025dc9dc32d23c9580a0ee224ed267bfd6501907720b19126f43b5844267e73aa9ff473382388810eb339c7ab6766fc56ccf74caa2a7c0d66294a6c5cb210fcfb6232584cf7016c3328c54295ede965bf88a6e5
-e0cc3d5bb9e023da53ceaed73ab6053f58f0c31258a1b74c90d2402dbc638e4f7e235c9a81c91adbe55f2e4f9cf8de445a6fcf0c7f4d33cf5e7eb89fb1fe6bf6e8aaaa3cba72b90965807ec54d18617b0af0bb4a1308aac8e957b52e5d395f0831f2906557f1ece3c17063cd73e1c31c50f2e2f81aae3412be4fa3c08164f4
-d8803936644a984eced76fc2fd3eb150d8f5792bb61351b84d59b9d01b32391848c87932d99074424d0824db25a0c994646c66115f9c47ee44477893342ae1a7b7031ce6d859470e583b8c75e71f34463ea780c87c50db3623b344013bbb98fc8172fe9018487921ed239a9bcb44acfa7f8a69fbcb6131f883be0483fdaf75
-6bc76e3eb32e3b353272e9d8187398ae8114e6874319adecb93bc38f2f8c1aa0e10ee71d69d64f3a149a7ec6a80663d80fa5e2253df2b2b4489713f10c337ef9d480854742234e6b715daebea54b2719546999fa791dcaf99c162962a488a0b54de92543bdd0dc09ca49ed58afb252476e3933cace812e910ddf8d88ff4a77
-292928b547a23ac37e2fdcf1595f6183c6b69b5fcb4af16ee950750819842d44457a4ecfa9b0401c914116ad58d5b73a4573d22a029c3693b6ecb62e13d7e788181facbfb7ca5dae15be9386758149d49a3565af847ce37e8b9f4f2b1c9f3da84b4c6fe37d03479da226e7feaa71fb1ea7b6ac7fa1ded0f474337888f6df18
-1f2adb07179da391f95b5663712ed86bcceae06626b53408b89a00e9ab7d97866bec9f47fc4be2885d7c5757438a886866500f803d0e228ee3e5f83287415814e0525b5c12ccf748b34fa769bf76001fbcc764bdcaef33f75a2fb1a064f9893842385111a6116879c29686939c8682071adbb78c6f7c28e57ffae6568419e2
-6b58505a631092c46b49a64951e05d0be79d2034598f03587a322c214c064413810072f4ba8cb847c9b1a6fef06a55a2dc915edff4308e911cdb1f1d09ccf9be8481a014670dd438b17773d8cfa065bb84aaeb476a5467905da4980b7a1c9311fdea5b6a627977041bf74aaa1bd0b239455118899f53291a0c0e4b3c8d0d58
-f01ac3c7fac9530025720609865d9f242573414f23a4c184884cadabfe4b5409e7ca3e607a1ea0868217e77f404570388cc484df144649a0504abd9e8c06ef4e8fe3ca6863842bebff55fff6751dd3c17e0083b9eaa3bc6e5ca60fd81f82fd2b2a662563a6dbce2cedc61d270ee9c96b543226f900e720f0c60b784b258c9e
-5499f664312b77d1e4eb6d92709c306f796e7027228be42b5b900e414736aa94c8a2f9b8a9c5099751b720a0b1417ded6fcf1d4e091aa8c3e474b7b111b1e51c6caf82c8af141d425e65475af041335ef8cdb22c4816e0518759982776fbd91378a2c98eecdc23d36ebb93a6af735e063f9f0698ca7a24a098b9fea98f0c71
-c8abd33b6df1bc8cf2c1f387aa6480c32b978b31a8e72fa9724f7ffa07dbcd1058da143c6110ae8626d427f1efc6bf7e61d98c79b860e468aa22c5dbad1db9d6c81c4cd6c2c0ffdd78ec68b23eb64031b17725b6d59176340fcd113cb6af9ad9825851c82dac499f01669f541364a978ecbc8f0596b218accb1b4fa860130a
-2cc6cc108b71d54b78092469172096c9d3d81b502f747355cbacc6747573b002da8d63a30bb08be6565e77e6f8de66aef8c388ba228022bb054d0c6bde488fedbde7bc556e29ac4f6c3335597f5379ebfd24c3e36cde88b49a4e72ac4980da7c17a6492b4193c04827e3bfe7795107e25df2121aaed1886060640777d8fd46
-dafa1d4ebe76d5d7b45f8a6a907e69cc66d55c38e7a3071e67ad47fa326c3a6efadf5aafbb5b76eb4658ad84d52d563cd5e53a4558085af5005ad11036c67f96680d882d24a611fea4cde2fd25cf6c925a94071f4bf6ff3322f8129d8660a73328b20287bc2e80157fcb64990b3a2ee994ea93b4666d2968b9624902e9366a
-c1d297b2b1c71b2a03c61121bd42e8513960ca64d54aac073b72b965b3d20f3fd355d21317eb15698c8a8b9a4f84f8d61040ab20b90bb6c82645f7d261c825e874f25a3dcb1f10b4db4bd43abab67b4b7061f419cb350c923208e8ca8c65398a7c7928209fc6abf82d08c913f9373fb5faeff071e79ff75fb7937e5e276195
-8b37f6b0c6c17462fbcc88ddf758bdf1fd344e36cd4d6947a6ba2cc35c0a9939d36cce7683e58641eef683ea29b30e311f128f695950be5e83d892a004678ebde3c8f8d8d8916a7f12d65ef50df425196285b0be8ff4b8b939342dbd843e3cab919212178e2fc5c3627a225e41274485dc7f28e4642410382a5c92438cb4e3
-2ddc7263e3afbb76362d6e9542504dc427950df6a80336d76165d5b93774319dd6428f3dd5ce365801b75252ac934856cf75c69f9dcdae1209c6c2cfae1f139911d92d0f154a5d5f21c00c0cde4ba030af503e424827c1b7057399e5f1503d170242cb3bffa736f5f4966fbeb8c9333fcdcb91486800f6d13462bdceca6282
-45abddbb1cece414f8107ce640512c1360a01e8784a14155ffa9be5ba9422312bf08ee622683841bb42f561188876d072be23fb02646e63161119f01a691faf0655e6875928f12d461d352ec5018ea94678f74a18bf610d3080f0264f31b6ab50741493db8c0805037c7308954b2657b5d3c2f6f982a8a86537cbfd551cb4c
-4c1bddc2ecaf4b800084462464c52380b756fe9d323ac82868f0b476843b6b12cf7888d7e45be3fe8ab2168d0a4b9cf1a9c82d2c53d94097dcc8a9c95ba808757b8ad42bdf4f525419a27d16619e30ff31be2b5464165507bf1be59a66fa379db86d16ce98c6a95e3d27825fa01c90d16c88ff86755cbbac54579b637e94b1
-e8db989c65b8b4af9daf4e71d15f75aa65be4e79a9440a62e7021bd412ff18cbba097a341526d66eb035eae1a541db3b21f5cbbc4b8cb2c4b6f0e5e45e0927811242e0f4d2863be6933bdbb87179f354d99e899e3e1d010085c50c59d23653bdf35e881a9ae4352f176e9938931d724d7e5e795ef8e8cd2b47cc8f9eb253c9
-02591b57fb345d48ae00d8cd5d8fdd82db9b92ccbb66d9b4f89d5133abec9e5a933f89452426cae8c2bb4984e64f6790f410cc4cc113ce680fbd43cab83886c2a31ede57811e61da4dc51c0e9d965f36a45983041057252632fe7e38a20ba5fc66bfb02349a1321667c6a07f6fef33a97a8e2e9f3e3348c8fc32f230fc2473
-feb6169e1448deaf125ba0e0742830bcb698b1f992d1f3a07a6bc286a52aa03e65aa72b4ac989951e8dfa34c6cd1984f180f7175ed611dc5ab87303c7a2961de9bb50dfd1a789b6c048b3bff4a36cc8756007ad771d9c09d6ea718a6fc42618f94e619332eec80de01d30bb169318a19e44fb6852097238d221d4102f76285
-cc3df433b21150c0f400537aa52056aea9cb5f8030c5e5b49d8210753f5926f6d85ef9006b3ebdc4f66f4b23270edc9663303a27abc38ef56020b3fdc01716585747456c9cac8987305fee9786bf59170f4241b38c1ad0d4294b84cea35b015bf52a0a73f142d278df4f1011c8696c38a2fc0867240a5190a5730a582874f9
-fe454c49bd989be6952ac9bfd7d219d718d2d08547defb57e793e339bfa32a3e44425a365776a1df8e568d1b838855e826f7822427d99a82f19bcb8aa14b5ecb6570fa85871c10e59c10074793aec3e0e22bc98d709780758687e5cb818aa59f3f759401c7a5ed92298d5f59b74f6b184eea9b9168c908609e1d8245e44a33
-727679c49f9ee78371843ff1105bcd8ab15a1bb52926bbe0f81dcf9666299bb89f3237e60077c5bb2fcff808839b3be0991161f62794929f9aeb5e5459e97e24496f2e1af05000a6d12957ffadfde6d6d2bc67404f04faec739caabc9fc004ecb08937af3a110e3d341c7d865303c3741a74e02c937403137a4f37cdbbbca9
-24c1252efabdb73adddc933bfb6d7eee605e79262f98d747d4f5e62c0ead33d2778c1559889ed63125ef5ba53b6cea71e9ee844101eefdc455c2d11dc6d1252670124a168c55fd43aedec416ed01856344966e70c89f6a6f372eeee25884bf84d52d563cd5e53a4558095906115b7b6e942ec369d377d18000da1dbe1cc4be
-ad068874d9222d0d3a3f266639ac0466fc5f6a672f176640b42b761954ad82a7574fb389d0ca69c0715c30e72b37d7178dc2b00092c0bb689b400e91c7433951133627bd61b23221c6deb012414d4c3550a061f6c37515a0f23c54e46aadcb641c5d8bed81f511c801c7e13b54398ef8a2e5df59f82df5dd075349fba603ff
-0271319f79f573bcee0ec9f545e49f9b083b8d61c33c55f2286dcaf20fcd22a7bc94e8bc193707ec31eeab18a57c5619d815f1bb17860c1f8732465a574a668e35f47b1d2a805878309f59f5b64a5217b399215a0076384ba874beafb8135caea2185ade836552d1495389b0ec6f230272a507ebf00f33c4ca1c5b85a395ae
-5b924065aecaa169085c2864ad4329bc054731a8b510e814443d091027fdd6c35e100d46967a2fb9f2a6018a3e9a973dc91fd9e8741bf4f6d1f4ccf29f35aa37ba439587f04ed97e0bd53624028156bc5ae38bc65325143672f08b41ef2196e2d47a60fc778332054765a60bcbda40ef1a192faff26a811d65a729325db934
-d95838e444b51fe5d2780eeae5fe444028f9e291c637aa64e988402eb2e7d4d6d32925f93d18eab3ade01ecb66fa8eb298202a94c9e3f24024030dd162897b08c66756bf2cd92f3fdc294012500bd2383313376ba6e559593f9ba2437d420c173fb60b3274c4ccd091ca96d276d63435563fea10663753c3bb859c07a8b8b5
-d60b723aba33dad8d1926092dddae3e31010acc1d69900c2cc66a029a91e10e018b3cbaabd813eb1202714b1f221dbcd735fdd75ad90d32036197a8f7684dee75171d9eafb518dfcb3870cac88eae93b509302f3da384ab4250de9ae074495135cacda458861b8478d7bae74bed7b035cb268c04ae5488ab9fb86d839b69f1
-38705abbf82f01b0f7139b976bdc09f80a9cf584725a39b2735415ee4a1cacaa3da06e242d339382ec35949be25dd673a2c62995df7d0ac79a45bde93b91f400821eabcd3aa1c5534d3f8e79770de25c76e28460c65162756e55b9f3bb137c74710722aa0468598a3cb7afebb1dbfe77cad22e9654f93790f94629e0d4882b
-24b79ee955fec15120b0f2cd29f59ca860ea833e7023ab716d3a15e43fc5130ac41161bc94fa860d077964e589210ee8e383e3fc2222ce1486f0b52634f6a7f003b7a1a37f1ed3bfc0ff5336c36a3ab2910f513b98cc1df9acc3c5d0585245e605cf2ddeb6b07bb822d5f72796b17ff35e822e523dd24a6069ef8baf345175
-d46225f77a129154e9dc985cc74238d307a4d8272aa2ff736c428e1a3ff734badbeebaf7114d1afe2c7dcf390eabcc5d54686b1a3ddca593eac4b9a5737a14e6f16cc20c4986070da4b9431d8efb42f6003792044b5984073be785906d74ba0bbfb2a19bc1d465d1024af069c2e6092628ec67feb230f288829b8b83633925
-b9242a35a44fb2f946795c125917c9554063cb6e740b7e6d56ed4e070861dffecf723a2ca1dac1ed59a642cc55afb63a54e41fc27ed61ce27ba656107e25fbb53d779201e62034a95a07618666940e42357e342dfdfed3c38d448b9f0f818098ba08dbb645c85e0107c1d4912ac2a3445fadf63731721aec26fd81bcc7859e
-1058c9dd448f5eadef0a47915598bf58db577f172c462ee5ec69d3b1e3e8dbee0d46b5196c36dac3140889b89a8f53b11b92caf302f71a62a5c3909806ae315866f4ebe2c05773898697443ace1a3757a79f96b713dca1ec16e053d11e6ed5f27b1ac42a877f32fd2eecda6e44e04808bf109b777702c6c3b9d10c06ca4210
-5f15a31995a472a811348b3f68671ac7760af3b5b9eca0d80f3a3cba3fc4f008cae55b377f7ab315dbe2338ebc38b165ad38d4ac6aaea58f46a0882defb5aa4fce2c2c13749a5115bf210197ed59107f58be06cf234b82dbb7ceeb9da3c8b7a1f055f3009dd620c6a43eba73d1b21b5435d5389274dfd82460cf63a26a2c54
-8d75a402913c812aa2974ce87850a4560c24ddeef1ec53a1ea9356ab26b148a6aa4e9e30c3fd94effb017d41e5a1c9b11b1e92d25874a17239f0ebfb8e131a7465b09946d9ca665a78d940f0d367e73b18768809eeda4c4365230cce7ffee67d5e850ca8754c97bd579ac36c6605f2121995b6f0d1d212fece438ade5d7525
-56024bcc58acaa3338299c419d99d3ece454ca23064139d89dd65937e12eee7d859fd6bbaeb697fb074015e5e10719b3aa0de6e02e38425e9970403bd58286dd868063efc25d08418a9856b8649ce4a9e7d7d7c5510ca5858f3faa4387d4bb11177772747a78e928bb36b3879b2ef749f9b7a831ce5761ef228e660eb8aeb1
-f0ae24433d9af3a555afc08c3dfbdc9f74f1db0cd64b8101453a2944364d902fef71d1cac0f97515f39601157dbf76a310bd8bf13c4690e85bcf962507848a27be29cb7ff0e0fc7230b141f8558d06a194c5e799fc0e803a8b9bd5f9558bdfc955d2146ea5ef9f05759590437cf0571f942a71e9643ef081de4c80a096ca0f
-bb5a234109311865c88bff1eccd8be1dc394d9f099a8600c3e1d850568d2b54fc758d88b6af9e960a18162cd793a8de95fd0a58392e26e6cd662c9cc1a12589a8e0bfa1df1f466c9c575d7b7868d0d3ba22782a6a0f63a50f03d10e606749377e6672f606e32b55022fc9b329f6d50334994cc53c13fed75053054095e66fc
-5fc6297fa80154541c5b34afab967fda3dcdaf387074a99f3ba7767bc2a20ed0391f07c17e5b0bc3235d88324859d01a2ebb6b72d3eb0b6aaafc3df45da43651c331be0f4e5ff8c8f0974d98b97678aebee35bc3d66f46306150e8fef0690732ea21975a05668b1aec7dc955b0a3a2a02c8c75dfb1a3138b5711e2a8d920f3
-185ff967e4a7ce7df4343a5f642480a2807be5c686aec981ddec06bcf5c46619c51d4cb34ec0de9325a6ee9693d6f3849efce363c4e6d187c0b1095aecd2a9c29caeeb9627465f6fbabeb7c63a2650f6f77d636012445690c032459661e9f4c330f733744626646af8dd235a4ae2e841a3c0637ddc3cb3e93fa48c51a84206
-0ccbe19ded9d784571db78235115dd2bacf6fa0579b1e77fcbf19fd1b88aa57551e869f0aaed338d2db14d0968fab6a02907e0e5aefc2fb8aff9748576d2fd1490e50425e6ea36e3536d696709f072e0046a271fb772b8d9c0812834ae6b42124d29ef360ac09152de058adc9afaacbca9f9012247b74459bd84ff3aabc1ae
-de433d7a4efbb169fc51e12f2b9bee837e4888ac1b76739d82e99e8d8056479cbb9a957cfa8499594bcaac8899d270e149d664c55648af1ca0d56de23aad43be627bc3ee7051cd1e17cf12caef2f4de2578e06170a13c01ef38ff72ca985114212dc6aff41c50f87150f2fd3db8c6273f2ca478a19a7cb92427c9c339447da
-84b6297c2f95d04ddb2440d227e55023f2d2fdfda574404e0b274b7dafcf4d993756b8b56094da880ed11be1dcada1080cf8a912c0f6e206307590f797414ecfec6c691254f520a2516610697817a4ef0e1354b7f3b66226c8b403f4955426a651c0237b54da17e15598f62977a0f0a4bafa09f64c730c016ec8b163413749
-2d0429e247d1374e3d1cac75fbc0e8820158e776004e542e7f50934c9f4b477776ff5c567561a2100f08af0343d4131e5713fd49c996aab67c0b1c0947c280fb78973c06bd9f590f9cb25cdbda2e342aa22f9d45cd441f130d206dcc38ad026ecd85c0258ee98de88cf1ac5a8c038ddf87c48ac6c5e64708759968b9887a4e
-fc00e5d08ce8842b3c1649b5e54a00411b1587d76acb57e3dbded888141e4c3f90ced5b3c5ade78e6b6d12297584eda04e1ff673ef825437abb45f32f721b2803bbbfeb31d93d7573ce70f8f61391e3a1af911375434db1054fff2a0503529b48b891680e15e3f16d46556365314dd5d81629dcb31ed07dc32c2b1bfeb1935
-685e406fb5fc31ca37a306c213053ade935c9bea95fc2f6227fb3e10d5d617f3d64b31641d8ff54ce1c6c960061e02908b3c1e4f088c457f345ceac29cb05986c09b51565ae11d89c807376503c6a152642b693367326a0ce6e65b48b2b07d9395e3daa04d30d5fa14b0c4d35ef65db3519aa866cfbd9035d157639259a34c
-21bf729e12537bd5107566b8d089a6fc47fd3ebe25e9884cfd77579d3ac5f9d5f3d0f26ddde548193f8df07fad054a6145dcd353a53aa7b4134dc06df0a7431d92e4e826be68def13a2c904595d08bb71360a29a5e915a0320d019ae20f0cbe9c215fbab7313bfad387ac60f766e26ced406062dc33e908be782abacc9bb16
-f68a468b4edf4dd11bcdda9712575249c2aef455a6c4281426df8fd595ae3543a33b8ac9ff42f202b11472bf35006ca1e953f3f8cbdf4828402ccbc7351409193d18bbedc5e44d4359cd46dd6af0dff1ab9c361a319e628e7daae57d145b5633325c4454d821ebcd57f14e8d475f157e7b7e32ce47fd0d1c2c5b6d46005e93
-5cad8e4b9736db6533ad14736270d8ebd87172293a1ba351ebb1b49df031f97b4db7d2bc8b7c8b660a4fe78af4816a5e123651eb5e804ae2e94ae54c17b5be968a5af1438a965a57e9f2f9ba168e55c346c11dafc8d2f4bbde2afa19d0576340a865a3da4cc556ff2a7e620333b6e5a83c601d4ceeeb6242ed3a07e0b18dc3
-c1aed25b27a74e8e5d5ecd5afe2bdcd57f0248b1d0c6e26bbcb040f7f20d1149884aef92014465eb9a205716577ca2e93cbb953711317884960ed05d4896c6419ccbf960e7a29790a14ea30390614a4f843c22f253c070c41e70e67e323f74452b6c4f1a598f8b84d9353443db4fc7721b5f3e6432f68fd9619aca2cb8fa0b
-e2f56c57d004f068e4780940a4f7986d26beab8c6bd3753feef6dc34e0957f1265438c1f5279630eabcdeed9ed7e8d22efc60fa98761fa930b7cc14a2fa087ace3dc45473459298f61820cc6f7a9028585ea1fed8d25528ff063d8d4c131da0b99b03a8414bfb286a3e41c013ce5055e93b2889a8034f0cb51b00e657970c5
-de52e263dede0861497404b86694437ac2643a753f1682002e947a5822e0b52c1cf9c9f52904f6e2b1998c0e0f880327e35eac4252d52e52ab2c5f4d440a40a69ec8bd2b0efa87f4283ef1ef9ad3414429d572bef98a6df87c0d24c0b8d9f33c5430cf12d627f9372e0fdb25a28af925c1ec95921813bdacacf7c1f6195a9a
-1ed7d7fed7df9a3df68b1366f9eea34fc437b4dd78738c2701c6322bf732d61ea1dd3eeb38c3ac10de840fb4a7cfb03c1b23d815d51fc77ad6551c6782e2a1206adeac949ed0ae6cdbbb1f20150f2e1a75a8730d70f0083c070fce79541ec0b2c6e6f1a91ec8c509a525b0be7f76ea7f4f17981a0eaf9c0af95d8e45da4be9
-8a07e567d7b5a31b161c14ba138a29fc704fffeb42d1f2f7d6ee3e31adcf5f323ba3b6466e77e1751e390ef49f682f865ae68788c7da3c2bff07828010b072bc1fb9a163c6e2796adaa6e2a623cdadcfbab371c2bcaf7adb2f8da46c07692cd097013c8fc2377c15a75b5e8cecfbcb8483def7a4cc62e2305e26df4b0a8e1c
-79de4361a16586a4f1bfcad1b44aa103ea3bb553094d689f5532bebdfd6e0cb21b0d071656a69d5321679712e3957547a4e6bbe527a734ba59af93ae82b803e0b0ccbb1d5c771ea0ca8602b51b89c22fba82cda89ef3dde6dadf07ecbdc3ee1528a40566b22bef138eb95985da8e2e9b9a8b6d839999b048d481a460914b61
-75a3f8dbe10d7e44acd6b7e7c394bd717e7edf4e670858c0d84c5bbff06c9fffb0231fc4d7563cd79320729e8d03ab47ccc8d7016f13ac6ce5862bfbac90eaec0ae22222bd838a9be96d2fa24cf80636e5ad658f45a3ea63a588a14550ef3a81f898b4afe83c8bc2f04954471feb715374712539158ee5567b2b3d3e454ffe
-d3c0eab4202ae27cfaadd673da7f9655888efe008a07f50168d1e8ae5368f5af3b9eef2a2fbb0808773a22149815bc5902aadbf6ab7bffe6e1cab56a99d671fbb2d8375614388bc2f452d46aca0d318afba07ffc17831ce7f8da474c995aba7af56583a2425236b568b7aaf216131bcfcf099aa14db701854218e746b40dca
-a974b9f3b63a7f6b8dc348ccab4fd21edb7150876f27ffd5d09d27dc365f5e08468f178f8005133a14459059cffb60dc48da774b7583344395ecf7a274caee349725143548875cd9cfc74e14e8c4a5c7c03cda2baea7b463724cc6028addd5bd71d2630574a5fc96f8c13a75cc2804f1b1f7f195c1166900157466537f761f
-f51eb0db89174a040bf2dd160f92f24896c998139a115ce941ec46e1aeefbaac7b0cbfa26d764070acdf094cad687f209090f98d38d4f3918b2acad3b5b342c94d2114acc977e40990e2ef16413e03c8442d8186987b0adf0bbe2836aa434a6d44f3ccd7eae175fc02abb0db726ce79c65cee83c9ac23ee37e3bba34d8c03d
-fcdc68c7a130b13e566ea129d8af8cb271fc2519421e9c4c55c6d029a99093f3290a9bafa66ae6a22882731e6cb62d16c6c23590583c0c21e6e0ffbe466f15e0cace20727ec72e06c7b03a3db3620b8cb12123f8f2648e7c606ee233404462681b8979e20fd8e47e6c42f0e4705f60b444c299b6e4f9200dd60b086b166e3b
-05c3aa67bf2625eea32fa4facc8fe18f980d2871a0fa6cec81e90c0c7d0d88fac1d91af8377917bb8834c6d428d7e6dd0febcf651ff687ca55a6d207003f30e1d1da0a19e560f0121b3da29e3ba68248728f453a7829ef70993743e153dba668df62c043bd8904406c80f4b396a7a134b1addc90934cf3ee949fd26a6ff9e5
-e01d72540caf415f97f26dab45d861b70129187c07bc667856c74c39f9d27b6060f47f5e16df2e611574b3148cb4ce1e7c431142d4a992f3ca7b66e524c0aade577dc4c22d27ef10aae6dc4bb0a106a2fe2fe379c752f91dd4a98146ed35d4470746a9fb8949cbef8b6017f960baa82db48f5f71142e9442bcb5452980b9a0
-c7e699a663bd99e8df94f5591aca08b8e1031952e1a8d0c141b819f9cdcb39f952b27e2026a18e8e3f6ec026c987f4a124d18a383f9ba4f9dc883e3f1b8c9262687a84cb854c7764699538519fa10a804a54aa7feb1426d80919f8ed1cfda18ee5cd138afd66a9ae0f0882a28a207fe355a2270701057e40e7f83d43ebd5b8
-3aa2e6c1435e4e3f12f2540e70b2da3e356163586ea6a41be1a782b0e460d5e1a3cc317b96435c3ce0e1f147959bcb5f74e42fef522cabf2334b8fa3971c894ea0842306f4a9dea99e46163557ca4c93c3eb10493643782bda19511e8e763faf815051af4b30dd72ad3fb775fd29e33b9109b22a8682426e36671366b0f615
-def2a72b09286139acd2cf7dcd487d068485c559b0d5adf247bcffc542c9bacca6271a46e9a5906db57ea691fb85cfd966f40422997d9c67a39117804f4da3a9158add2cdb25a98ffedb70fb947c221b0ca1f3d24a89871fc16cd1fa0aa5dd312f8153ec3c1bb9ff62ced28f56a064947bd0559221a9c478e341b5681569d3
-35444b2b357d2f142c34fb86e5bd5df49c1837034c95b12b3979cf08f54330a1ea420e597bbefaadddf284671057e243f2a48a3e7993a116c0b806ba232b0e31897349961ba6516bca4c3bcf482b0f05f27bd36b30580623048de317b82f7dc41c9b45091044a51db54fb1fa728a70ea90ebf6f7f812b5fbc9a3cafdbfa54f
-16d53f2c155129bb21d94c22a7f9c444ed47c87f0a0988ce25c802ffb20da648085e706fe36c01b8baa3371fa2f11df97aa9d08b7fa819049b607cce3c16a7a5ed4848778105724f7bf2ea2d7b04d0368284b143a3e7e03ca448e4ad7765bac6718a6fcb285fa415671c24159fe77788d9b4213f27ecd65935f0d2d4c92b18
-37ecfd8b513c5b77a5aef7d3102ce4b862671a13b1fc29284e36652744aa7c9545499008d56e6d1b42c8ffbe54586a464a0a834b95fbbdb449164c8dcd4cf18c7150f78d6420257c1ba47ad7b86d1bd91aa88b284f604d455852c3551fd10cb4917835965e87a0a42f86eaea2d4571876df9d5237965dca6e4332efc683e3a
-6376b09c4ab9c9cac459910044dde61b776f87b9353f9c93e68072f9947a54fe6ad8ff874a12653badfe2f6f1a21d47dab6c808bbf32cf3dd3ceb95a2bd0b273ccc79549c590377df9c4d1b2e056033cd694b3ca7923abc563d9aa27f85fd895b69a3f1152410cbe526e704ac4d568548893b0a16fdb7645aef7ad09c33064
-e82a457f5ee84634032f63e229792b952b65c909513ac03ecd1a4a22ae605e087fccdd1e17a22586248ffbae45cd3b8c80814722bc46451d15e97ded57ca354d85ba70bff0cdca4a47d876593eaf84c59e9abb3b10aedeb9e8aac86ce8019b5c7831b1a3241d88f56e8d436620503fb86d035da5068a34f7a6ef6f1d25d695
-9e8451a7cad54bf85624eeb2355978713578dbb847ec7605d1ebe0aa238a4de8545ee6d4d6d9b719044a39989867ce69bbc8445c20466a7e4f5161d0a6ae263717db731e1eb08f4e1f24d28ea2d55a63d6d2b1c717e4c171511b51c3ee46b039179fbf69fcd3c5c84318add0a76771650e8d1d3ba948abd048e2281d5a0ed8
-ca90a7196ba4fdcb202265f0b6faa659267a492009a28dba3787f07f4af3770d64301ed11e13a9ab9762b1a110729f9db5d39562a1a5aa96e34082fcd4279c7a0646e3fad1380269d0d9cdf546a08ecc22b9a6dbe08d75568de8540e9c1e6a4795bd39bc712810a80a6fdea258e4936481c7a4b7d293eab715a331af11df78
-4a66f2ca8241982d24e5ccdc3bd775bd08e00d873ed022384b63a5f023ff9cc9cc5c60f3ecb64bac383f380cc3de3a2746b4225db983663d179bbb063fd5bf8cd6a3a7a84b9a273087691e1e89b7c7d65f18d2454d3704993843b285cfb54557cfc8647ec40f90234ef022576dd05ba17b07c45caf035873a18647618962c0
-f37583a907bbdce2afee783a8a8b46bfae16c33e19b34ab8c2926e568b3e16ba66feb54ffab3c3fd353d15cf35085f1d59cbead0192698e5c26bfe498119340df867ab86ff3e58f061ba5a061d274e809aae1f7513a28eed3d279f3f34f2de44cfa12aab0303d311b7c0e4b4cb66dc3959fb21b9c26348068311738cf2258d
-5381f9dc01cdc49dcff5e588d9fe854fa4759395cb1dc51b58c83d4b55fcd3da70272881575b5acd9c11de97b79702ef417d0ac199bd5185533911dc5b4c8ec0db6e96e1a3c00477ce553b81a0f610d19c837699cbbf9c0bc4ed8dd9ffe6d13a8008b20d4c52135b6a9e515ea4fdf2057d9d4312ac75337abe16da9d7ef1bf
-07aa4e4e8a5dff5381619fd1f2353a4de0ca3330417f3ebf9f86cb5921a1635f2da48f8aea9fba25db2f4d86ea8ff54ad165b68a0f30c1835b944221e4a674e9f805857bf7c93298f147a529636ce2b6aab94e37abef08e8261d74633ceaf5ae110455a53ac96a14637677d4f9392b8927a6031d0eee4b004ea1d41cd5c4f8
-904c389bcf5c7ae18f77dc22438742eef46e018040a03144134968c92b82f88e22a9f9846f506444d5fd43f72c9272235fbf0845b5a0676c803bc61d66d5a18a2fbd447761c41fb79a30c90cbcab35840fb14a9bc8d5d6edb19f70b420d81df60713b6cac192bc9ef006f7af35114461cc87fc50a2323cf30af4788312239e
-8546618038952f0e93de5ac06ad51551b8e968d49c16e7d59c7738e7e69798bc9f04b2b6175d24f33ba2eafa0bc36a5226b368c6636bc33334ab4b94ae08c4f9370bb31da42f53c3b76cee0da4146e99ae0f57086c479500c6d2342297e3d4f49f556d6934c312bd3ddc9beb1c07119dc1d91c20f678e7e52d1e0494859f6c
-9dacb7ec450aa2047ac38fc0d3f1fb9b794eefb18e62daedafaac5bc083c5a8a0ef03c176195dab2c5dbc8aae1803e3a811369d1ea946c0eba323ff60e5affc5b60194997eaf8be304b65256d10ad5bfde7da1378a94902ee2005981d9c9ca902875fb9354c1ddd201484fbfb851e86a5d6dc541819e67d8ba415912f7f2e7
-b1def89c663dedf9b5f2633f1c45f5529f944466bb5c0cd03ae26c78ab1c5491ff310f335d53d967214b2a5e2f0ac75a66048ebab664c15a69ea7c256c40783cc9f001aedfb315e16607a06f4c9cde1034f27e05a0e6a73381d83a5e678ba952308a6c9b73c98cefa070d3c52b2ecaf706b9b247fc88028c710c8d5d0aa49e
-b35b5f4006d43e554937605e1f5712667e46e63eff3f1082257c82669b1cfc8815b3c3e87069977dc980d23a145e33f43dbf5e90cdbdb684f7db8d66f84c50a594f6f4b4057b58e6c5e27b34df4ea6849d4668efd8d402eaf6dfcbf5c54e4f52d15f7236def60a892a9e300091e438d447fa6fd26435692a457e5eea4e2d69
-ef8bb74daf6aecf57616fb6be91598ac5fa15d4dcb0c5806d4e43db6e526564cc3e2122b6ce50b5c637de8fb1b5bafffdf51214a8355f74cadd668f0d9b20e5bcee2a1485f2599088cfade4f5496f612de6f7607bd76d152c3f26944de667ca264af64eaba6f6f0fa1841e860a73075cb8e98792361b23a4cc2150cb9842d2
-59f78e62959a21a5873e190356117a31e75377908e48f249345f9727c0c9d1231bb2ac7a4533b9f2f3c2f479fb24f38cde23dd8e29a7d1d381b92ca4557225b4a796cd5abe2cdb90d032189388fcbf9848b0602efd6aa662162b53a8c83ce3cf06a9dfd0f0ecd017e7c0a1c1adb88f64c85809fead4bea4b639ce4e74e008d
-a9f35970a1e9b973a878d5d419b43b8073c3dbbd829f07c45694edaa1ab98dfdd823830d663930ac316ea0c52f5e290e02b26fbb07d18f57d7bc4e572822f494304d6458efa42222bc6486acb53674595a913d613952fdba9e59f433641f01dbb7a7a2a16ca96480c229feaac7242ec15a7291637f09a99b3160c6ada9a478
-e1b276f6d77329cb2f9569b539b24f174e2ff12218aafd06abd1b663dd42d1089ee817719ea0e7bba089e167bec881b68a59bab6556106b128126bfcc1be67017a2beb29e307d5a9ca5e6d916b2f829964f13a06249e1bbc41264eb0217462365451e96f4e9ac13941d9fd2fc1fd8d4aa2e6f14ef4b99d9b4c16a3850e2423
-a84130f218a5cf5a64d467f7fe0f027c12f79c1ec8db81a4e4d584559d169ce624cad2d3c53bc2293e4de6e70a1f516e28d96710fcdade6a305816673be3f463cf03e98941162c265ba8dc5b88d2cd7d6e9ce00857cd7fa9498655eefa74e85a2b8ef749ce35ae966a9064052ad5a192bf7c5d9e9f7bf0f4254dbfed25b52d
-c0c98ea598b6decd079783a2524a25e7054e0280923537f3e00d05baab5bc51d67442e6bb14986248a6543e90ea9b14f777b6d575bb07a11996c311c98ae4a90d983415e0e6d14b2f509acb555e605644dc9cde6968e290fa223441dee889d832773e4b0b66404d7b583fb76bfc4a9b5a708c852613ab2212032ae4c59c922
-2cf397dca566147a468838e2267fd4a55f2daf9b54f0cc55db9ca1ecc1a997a596a82812de11f0770b5eb5dde5412df05e9e02039e6d5e7d428c493b36d76b8208375861343469c5af66ff26ef2ee0e8b21f6c81be86d5bfe42d563901d8efd57f9ac0cf1acba4ca506b3499a790677792a528890c0562f44b6aa0b1608ee3
-fc66c4e0e0b8432ea1b2c8adf009c14d6bd099e5d55457d0143628b907d3aa00fb6dfd690b7f6fc45c60cc937e99a3945719987c4108186762dfe0140731e12169d6b3cf6fc5cbcf1db786aa88068044b5260aa9bf8fd767f50691b123208d7cfd3d8805076a456b3455d36c569a3e7fc38d466f57f29e38aa97d030e0f4c2
-fcaf77081fb37259948ef21c4c51b5b2661acb8b8e5e230346e19b03233fff6ed14c73092237cc8becda676e0c3d4205689d9b506bd0a079ab0f9ca49bb06e383896fb00f2a6b9b3485849fa6f8b3dd14946dcf5c5dc260800d54365fc619f594733f55fbb7e6b8c208d09a480a1ba1193f48f56416d6c36351861eff0ccf2
-3990ff8a012f1652d082d061011cfc98bfa9d089fad96f48b275267710da5ec1e1ce243b609bcb72ef943521be21fdda9f24a9da985a6df8f0300ded2c5416313dff090042b1434952fe7ba55f07c19d97b2a8587e90431ab7375dff1a818e218340116c51c0a2c96ce249221a3f9c29f1f9bd7cb7b6e4595fa7764640ab41
-9a2d69249c0fd1a2fd964f101bb46e61680bc62b1f55ae93a027b7c777611891566d89c1a33b999317c2a196cbfd4a6f8ec7f53ea3a9ca213f6dfe86f6ee51dff65aaa56612b1d78d55b23834a629c1f8b5347e8179e33ce883e0540d1a3036c163f2ce26ee6042fed8eede235251acc8904d71825ba22be8e34c2e06b0b01
-6cb4584614c59abc462ddec40a9d43cb74e1d61b99e60a1dad094a33528cfb83bad8e7ce451c41b2a9c1c0fb554c62793e27553534ecf0af92ff48492fb4565f05cfdc2ff70f3299833c5c62912601ed94572c03430f4906d9d9298619d22b421b198f8323d5dc6c48a193a856f22b2a3f7adc218733d2dd9e6540879bb5c8
-aa75b45fd299a6711eadb04410121076e0372b3cf7e22c949b51bf5c1d02f6fddd7a997fe2dfbb863bb96314cf130fd0a76dcdb21ea3d04f24d2948d4bb54e5070161f92e5212bec9da48827d791a83390aef110183038837cb513d717bc6b5619047157185121910a60cd0d6ebd5e6139d630be33d660e5380c11dadf1275
-2f34d2cd155aa8d6e38553dfa89e2dd9964e0ade344e0d8ce50ece046db1496839859b4bdd3b4971af731ab12da964b0f7d4f220ad692c94473e176eeac031f237d8f0d576076ea791a6b670cd5fb4936a10acddeb44f4275183424b437245ec1729004edfe5e7e60d9ff533a606c69c52adb0d78732997f4d62551faaec01
-e49094465d6fcf339ffe4b841fb20bb75f67f54d5e30993d1e24502d602b55948720411530024b3e5d8ac52f9a840fc5c7c15a2a9f652261e5d144eed3fca65d283db21c90cf1bc9c98dbbf6d2b0113a7d4c237d255b2704c5f7cd8d1f575d11bfcb3cd27a416605388b500681e3a41ebc1125a8a3fffda2db0dd3c7ca9eab
-670823e8afe16f5628a879482838c09f00e780288bc2b470f39298d666e33142cb8068c4c99434368fc19638844e2fb241a18fdea88a6578cd9c311f6b36125d953c9d1d6850c006d1a9ad0bba7c4bed86b92befc612414e6ad90f8b1380a7d22a48f1cafd8cc6f8cd3f7dd17a61a5336caaa3a7d8ba40925585d41d4f1172
-ecdcc2c3f613d6b2c0bce2c177b3445337fa2ac0038cb13e5636e5af3f5e82b387d6aed0814370dce2899abd93db3f6c576f7e3c9564c89dfbe904ab963e41716d9bd730cd79916a3de3b72fc19a4bbf350050388c7aa3b3a7f6bbb92208e09d48401d9e5af523aced2e3663abb00f34aada3e7a234e9f316bdf66dc19f95a
-c5d434e7c0f669524cf617426aacec209138d160d0ebce8ffa1f36a308937c09b84babf87a9e12ce22dcf4f74d766690c538bfd7e2f12c2507a9b8ef2941ba1103452b860c89d9e9ce5856eb68724d0e179a7c56509973502700879fc3c62dfbf427d9fddbb826884e4ecec9b9fbf52ac0550e9754ec76a5714a12a8832e10
-755e0952b3f4758af045dd6050a930512f9b3120949349b9e8b88fe8d8f95650687ecca00e5882bace4deaf25ea5215cd4d150b675a5e74118e40b0647e54590262e0aa4b01a7cc80401ca6b3f064d9ebae831e5b4a318e0a3fc710887f3877ecbaf0d8a379ab23bc9b19d9478ed552c1bcb5f70e03b34ed8429af033fa1b0
-8d99da8c61c26bedfdbbd22bad46b97a731d94ef4c8641e0d7f2734f6ab08c896d2c0b1d4531bad9d880882d5cde429616015ca37bf416e2b5fa7c68cb32af6d16d1980f1baf477d6a5205c640ee82f29df0eb4c4522b54a01989ba42fe0bf94912cb426ce2da3d0fcaa730b9cecbbf12a9577
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark{restore}if
-
-%%EndFont
-setpacking
-%AI3_EndRider
-[
-39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
-/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
-/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
-/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
-/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
-/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
-/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
-/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
-/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
-/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
-/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
-/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
-/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
-/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
-/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
-/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
-/hungarumlaut/ogonek/caron
-TE
-%AI55J_Tsume: None
-%AI3_BeginEncoding: _Device Device
-[/NUL
-/Eth
-/eth
-/Lslash
-/lslash
-/Scaron
-/scaron
-/Yacute
-/yacute
-/HT
-/LF
-/Thorn
-/thorn
-/CR
-/Zcaron
-/zcaron
-/DLE
-/DC1
-/DC2
-/DC3
-/DC4
-/onehalf
-/onequarter
-/onesuperior
-/threequarters
-/threesuperior
-/twosuperior
-/brokenbar
-/minus
-/multiply
-/RS
-/US
-/space
-/exclam
-/quotedbl
-/numbersign
-/dollar
-/percent
-/ampersand
-/quotesingle
-/parenleft
-/parenright
-/asterisk
-/plus
-/comma
-/hyphen
-/period
-/slash
-/zero
-/one
-/two
-/three
-/four
-/five
-/six
-/seven
-/eight
-/nine
-/colon
-/semicolon
-/less
-/equal
-/greater
-/question
-/at
-/A
-/B
-/C
-/D
-/E
-/F
-/G
-/H
-/I
-/J
-/K
-/L
-/M
-/N
-/O
-/P
-/Q
-/R
-/S
-/T
-/U
-/V
-/W
-/X
-/Y
-/Z
-/bracketleft
-/backslash
-/bracketright
-/asciicircum
-/underscore
-/grave
-/a
-/b
-/c
-/d
-/e
-/f
-/g
-/h
-/i
-/j
-/k
-/l
-/m
-/n
-/o
-/p
-/q
-/r
-/s
-/t
-/u
-/v
-/w
-/x
-/y
-/z
-/braceleft
-/bar
-/braceright
-/asciitilde
-/DEL
-/Adieresis
-/Aring
-/Ccedilla
-/Eacute
-/Ntilde
-/Odieresis
-/Udieresis
-/aacute
-/agrave
-/acircumflex
-/adieresis
-/atilde
-/aring
-/ccedilla
-/eacute
-/egrave
-/ecircumflex
-/edieresis
-/iacute
-/igrave
-/icircumflex
-/idieresis
-/ntilde
-/oacute
-/ograve
-/ocircumflex
-/odieresis
-/otilde
-/uacute
-/ugrave
-/ucircumflex
-/udieresis
-/dagger
-/degree
-/cent
-/sterling
-/section
-/bullet
-/paragraph
-/germandbls
-/registered
-/copyright
-/trademark
-/acute
-/dieresis
-/notequal
-/AE
-/Oslash
-/infinity
-/plusminus
-/lessequal
-/greaterequal
-/yen
-/mu
-/partialdiff
-/summation
-/product
-/pi
-/integral
-/ordfeminine
-/ordmasculine
-/Omega
-/ae
-/oslash
-/questiondown
-/exclamdown
-/logicalnot
-/radical
-/florin
-/approxequal
-/Delta
-/guillemotleft
-/guillemotright
-/ellipsis
-/nbspace
-/Agrave
-/Atilde
-/Otilde
-/OE
-/oe
-/endash
-/emdash
-/quotedblleft
-/quotedblright
-/quoteleft
-/quoteright
-/divide
-/lozenge
-/ydieresis
-/Ydieresis
-/fraction
-/currency
-/guilsinglleft
-/guilsinglright
-/fi
-/fl
-/daggerdbl
-/periodcentered
-/quotesinglbase
-/quotedblbase
-/perthousand
-/Acircumflex
-/Ecircumflex
-/Aacute
-/Edieresis
-/Egrave
-/Iacute
-/Icircumflex
-/Idieresis
-/Igrave
-/Oacute
-/Ocircumflex
-/apple
-/Ograve
-/Uacute
-/Ucircumflex
-/Ugrave
-/dotlessi
-/circumflex
-/tilde
-/macron
-/breve
-/dotaccent
-/ring
-/cedilla
-/hungarumlaut
-/ogonek
-/caron
-/_Device/Device 0 0 0 TZ
-%AI3_EndEncoding AdobeType
-[161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal
-181/mu/partialdiff/summation/product/pi/integral 189/Omega 
-195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple
-/_Symbol_/Symbol 0 0 0 TZ
-%AI5_Begin_NonPrinting
-Np
-%AI3_BeginPattern: (Brick)
-(Brick) 0 0 72 72 [
-%AI3_Tile
-(0 O 0 R 0.3 0.85 0.85 0 k
- 0.3 0.85 0.85 0 K
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-0 0 m
-0 72 L
-72 72 L
-72 0 L
-0 0 L
-f
-%AI6_EndPatternLayer
-) &
-(0 O 0 R 1 g
- 1 G
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 0.3 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-0 68.4097 m
-72 68.4097 l
-S
-0 61.209 m
-72 61.209 L
-S
-0 54.0088 m
-72 54.0088 L
-S
-0 46.8076 m
-72 46.8076 L
-S
-0 39.6084 m
-72 39.6084 L
-S
-0 32.4072 m
-72 32.4072 L
-S
-0 25.207 m
-72 25.207 L
-S
-0 18.0059 m
-72 18.0059 L
-S
-0 10.8057 m
-72 10.8057 L
-S
-0 3.6064 m
-72 3.6064 L
-S
-68.4102 68.4097 m
-68.4102 61.2217 l
-S
-54.0098 68.4097 m
-54.0098 61.2217 L
-S
-39.6094 68.4097 m
-39.6094 61.2217 L
-S
-25.21 68.4097 m
-25.21 61.2217 L
-S
-10.8105 68.4097 m
-10.8105 61.2217 L
-S
-68.4102 53.9717 m
-68.4102 46.7842 l
-S
-54.0098 53.9717 m
-54.0098 46.7842 L
-S
-39.6094 53.9717 m
-39.6094 46.7842 L
-S
-25.21 53.9717 m
-25.21 46.7842 L
-S
-10.8105 53.9717 m
-10.8105 46.7842 L
-S
-68.4102 39.5967 m
-68.4102 32.4092 l
-S
-54.0098 39.5967 m
-54.0098 32.4092 L
-S
-39.6094 39.5967 m
-39.6094 32.4092 L
-S
-25.21 39.5967 m
-25.21 32.4092 L
-S
-10.8105 39.5967 m
-10.8105 32.4092 L
-S
-68.4102 25.2217 m
-68.4102 18.0342 l
-S
-54.0098 25.2217 m
-54.0098 18.0342 L
-S
-39.6094 25.2217 m
-39.6094 18.0342 L
-S
-25.21 25.2217 m
-25.21 18.0342 L
-S
-10.8105 25.2217 m
-10.8105 18.0342 L
-S
-68.4102 10.7842 m
-68.4102 3.5967 l
-S
-54.0098 10.7842 m
-54.0098 3.5967 L
-S
-39.6094 10.7842 m
-39.6094 3.5967 L
-S
-25.21 10.7842 m
-25.21 3.5967 L
-S
-10.8105 10.7842 m
-10.8105 3.5967 L
-S
-61.1973 3.5967 m
-61.1973 0 L
-S
-46.7969 3.5967 m
-46.7969 0 L
-S
-32.3965 3.5967 m
-32.3965 0 L
-S
-17.9971 3.5967 m
-17.9971 0 L
-S
-3.5967 3.5967 m
-3.5967 0 l
-S
-61.1973 18.0342 m
-61.1973 10.8467 L
-S
-46.7969 18.0342 m
-46.7969 10.8467 L
-S
-32.3965 18.0342 m
-32.3965 10.8467 L
-S
-17.9971 18.0342 m
-17.9971 10.8467 L
-S
-3.5967 18.0342 m
-3.5967 10.8467 l
-S
-61.1973 32.4092 m
-61.1973 25.2217 L
-S
-46.7969 32.4092 m
-46.7969 25.2217 L
-S
-17.9971 32.4092 m
-17.9971 25.2217 L
-S
-3.5967 32.4092 m
-3.5967 25.2217 l
-S
-61.1973 46.7842 m
-61.1973 39.5967 L
-S
-46.7969 46.7842 m
-46.7969 39.5967 L
-S
-32.3965 46.7842 m
-32.3965 39.5967 L
-S
-17.9971 46.7842 m
-17.9971 39.5967 L
-S
-3.5967 46.7842 m
-3.5967 39.5967 l
-S
-61.1973 61.2217 m
-61.1973 54.0347 L
-S
-46.7969 61.2217 m
-46.7969 54.0347 L
-S
-32.3965 61.2217 m
-32.3965 54.0347 L
-S
-17.9971 61.2217 m
-17.9971 54.0347 L
-S
-3.5967 61.2217 m
-3.5967 54.0347 l
-S
-61.1973 71.959 m
-61.1973 68.4717 L
-S
-46.7969 71.959 m
-46.7969 68.4717 L
-S
-32.3965 71.959 m
-32.3965 68.4717 L
-S
-17.9971 71.959 m
-17.9971 68.4717 L
-S
-3.5967 71.959 m
-3.5967 68.4717 l
-S
-32.3965 32.4092 m
-32.3965 25.2217 L
-S
-%AI6_EndPatternLayer
-) &
-] E
-%AI3_EndPattern
-%AI3_BeginPattern: (Confetti)
-(Confetti) 4.85 3.617 76.85 75.617 [
-%AI3_Tile
-(0 O 0 R 1 g
- 1 G
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-4.85 3.617 m
-4.85 75.617 L
-76.85 75.617 L
-76.85 3.617 L
-4.85 3.617 L
-f
-%AI6_EndPatternLayer
-) &
-(0 O 0 R 0 g
- 0 G
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 0.3 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-10.6 64.867 m
-7.85 62.867 l
-S
-9.1 8.617 m
-6.85 6.867 l
-S
-78.1 68.617 m
-74.85 67.867 l
-S
-76.85 56.867 m
-74.35 55.117 l
-S
-79.6 51.617 m
-76.6 51.617 l
-S
-76.35 44.117 m
-73.6 45.867 l
-S
-78.6 35.867 m
-76.6 34.367 l
-S
-76.1 23.867 m
-73.35 26.117 l
-S
-78.1 12.867 m
-73.85 13.617 l
-S
-68.35 14.617 m
-66.1 12.867 l
-S
-76.6 30.617 m
-73.6 30.617 l
-S
-62.85 58.117 m
-60.956 60.941 l
-S
-32.85 59.617 m
-31.196 62.181 l
-S
-47.891 64.061 m
-49.744 66.742 l
-S
-72.814 2.769 m
-73.928 5.729 l
-S
-67.976 2.633 m
-67.35 5.909 l
-S
-61.85 27.617 m
-59.956 30.441 l
-S
-53.504 56.053 m
-51.85 58.617 l
-S
-52.762 1.779 m
-52.876 4.776 l
-S
-45.391 5.311 m
-47.244 7.992 l
-S
-37.062 3.375 m
-35.639 5.43 l
-S
-55.165 34.828 m
-57.518 37.491 l
-S
-20.795 3.242 m
-22.12 5.193 l
-S
-14.097 4.747 m
-15.008 8.965 l
-S
-9.736 1.91 m
-8.073 4.225 l
-S
-31.891 5.573 m
-32.005 8.571 l
-S
-12.1 70.367 m
-15.6 68.867 l
-S
-9.35 54.867 m
-9.6 58.117 l
-S
-12.85 31.867 m
-14.35 28.117 l
-S
-10.1 37.367 m
-12.35 41.117 l
-S
-34.1 71.117 m
-31.85 68.617 l
-S
-38.35 71.117 m
-41.6 68.367 l
-S
-55.1 71.117 m
-58.35 69.117 l
-S
-57.35 65.117 m
-55.35 61.867 l
-S
-64.35 66.367 m
-69.35 68.617 l
-S
-71.85 62.867 m
-69.35 61.117 l
-S
-23.6 70.867 m
-23.6 67.867 l
-S
-20.6 65.867 m
-17.35 65.367 l
-S
-24.85 61.367 m
-25.35 58.117 l
-S
-25.85 65.867 m
-29.35 66.617 l
-S
-14.1 54.117 m
-16.85 56.117 l
-S
-12.35 11.617 m
-12.6 15.617 l
-S
-12.1 19.867 m
-14.35 22.367 l
-S
-26.1 9.867 m
-23.6 13.367 l
-S
-34.6 47.117 m
-32.1 45.367 l
-S
-62.6 41.867 m
-59.85 43.367 l
-S
-31.6 35.617 m
-27.85 36.367 l
-S
-36.35 26.117 m
-34.35 24.617 l
-S
-33.85 14.117 m
-31.1 16.367 l
-S
-37.1 9.867 m
-35.1 11.117 l
-S
-34.35 20.867 m
-31.35 20.867 l
-S
-44.6 56.617 m
-42.1 54.867 l
-S
-47.35 51.367 m
-44.35 51.367 l
-S
-44.1 43.867 m
-41.35 45.617 l
-S
-43.35 33.117 m
-42.6 30.617 l
-S
-43.85 23.617 m
-41.1 25.867 l
-S
-44.35 15.617 m
-42.35 16.867 l
-S
-67.823 31.1 m
-64.823 31.1 l
-S
-27.1 32.617 m
-29.6 30.867 l
-S
-31.85 55.117 m
-34.85 55.117 l
-S
-19.6 40.867 m
-22.1 39.117 l
-S
-16.85 35.617 m
-19.85 35.617 l
-S
-20.1 28.117 m
-22.85 29.867 l
-S
-52.1 42.617 m
-54.484 44.178 l
-S
-52.437 50.146 m
-54.821 48.325 l
-S
-59.572 54.133 m
-59.35 51.117 l
-S
-50.185 10.055 m
-53.234 9.928 l
-S
-51.187 15.896 m
-53.571 14.075 l
-S
-58.322 19.883 m
-59.445 16.823 l
-S
-53.1 32.117 m
-50.6 30.367 l
-S
-52.85 24.617 m
-49.6 25.617 l
-S
-61.85 9.117 m
-59.1 10.867 l
-S
-69.35 34.617 m
-66.6 36.367 l
-S
-67.1 23.617 m
-65.1 22.117 l
-S
-24.435 46.055 m
-27.484 45.928 l
-S
-25.437 51.896 m
-27.821 50.075 l
-S
-62.6 47.117 m
-65.321 46.575 l
-S
-19.85 19.867 m
-20.35 16.617 l
-S
-21.85 21.867 m
-25.35 22.617 l
-S
-37.6 62.867 m
-41.6 62.117 l
-S
-38.323 42.1 m
-38.823 38.6 l
-S
-69.35 52.617 m
-66.85 53.867 l
-S
-14.85 62.117 m
-18.1 59.367 l
-S
-9.6 46.117 m
-7.1 44.367 l
-S
-20.6 51.617 m
-18.6 50.117 l
-S
-46.141 70.811 m
-47.994 73.492 l
-S
-69.391 40.561 m
-71.244 43.242 l
-S
-38.641 49.311 m
-39.35 52.117 l
-S
-25.141 16.811 m
-25.85 19.617 l
-S
-36.6 32.867 m
-34.6 31.367 l
-S
-6.1 68.617 m
-2.85 67.867 l
-S
-4.85 56.867 m
-2.35 55.117 l
-S
-7.6 51.617 m
-4.6 51.617 l
-S
-6.6 35.867 m
-4.6 34.367 l
-S
-6.1 12.867 m
-1.85 13.617 l
-S
-4.6 30.617 m
-1.6 30.617 l
-S
-72.814 74.769 m
-73.928 77.729 l
-S
-67.976 74.633 m
-67.35 77.909 l
-S
-52.762 73.779 m
-52.876 76.776 l
-S
-37.062 75.375 m
-35.639 77.43 l
-S
-20.795 75.242 m
-22.12 77.193 l
-S
-9.736 73.91 m
-8.073 76.225 l
-S
-10.1 23.617 m
-6.35 24.367 l
-S
-73.217 18.276 m
-71.323 21.1 l
-S
-28.823 39.6 m
-29.505 42.389 l
-S
-49.6 38.617 m
-47.6 37.117 l
-S
-60.323 73.6 m
-62.323 76.6 l
-S
-60.323 1.6 m
-62.323 4.6 l
-S
-%AI6_EndPatternLayer
-) &
-] E
-%AI3_EndPattern
-%AI3_BeginPattern: (Leaves - Fall )
-(Leaves - Fall ) 0 0 64.0781 78.9336 [
-%AI3_Tile
-(0 O 0 R 0.05 0.2 1 0 k
- 0.05 0.2 1 0 K
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-64.0781 78.9336 m
-64.0781 0 L
-0 0 L
-0 78.9336 L
-64.0781 78.9336 L
-f
-%AI6_EndPatternLayer
-) &
-(0 O 0 R 0.83 0 1 0 k
- 0.83 0 1 0 K
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-1 D
-0 XR
-29.7578 0.9902 m
-30.4346 1.1914 30.7246 1.3428 V
-29.2559 4.0547 33.707 8.3359 34.627 9.0762 C
-35.2275 8.8506 35.3477 6.3184 34.6699 4.9805 C
-35.5137 5.1035 37.7031 3.7256 38.4609 2.4365 C
-38.5254 3.125 40.0957 6.0664 40.9219 6.4434 C
-40.002 6.8408 39.3359 8.3135 38.5742 9.7617 C
-39.5957 9.9287 40.9961 9.0078 42.4668 8.1025 C
-42.9814 8.9043 44.3555 9.875 45.6143 10.3916 C
-44.5264 11.0781 44.0313 11.8203 43.5352 13.2793 C
-42.4922 12.7139 40.3057 12.5645 39.7764 12.8516 C
-40.291 13.9648 42.5371 14.5078 43.2676 14.4551 C
-43.0137 15.3164 42.8652 17.4697 43.0391 20.0625 C
-41.3789 18.7461 39.834 17.4297 38.1738 17.4883 C
-38.4434 16.0664 37.8076 14.2607 37.4307 13.7676 C
-36.8574 14.5117 36.4463 15.3389 36.8008 17.3164 C
-35.3486 17.8008 34.1113 18.3467 32.7373 19.6045 C
-32.7373 17.7734 32.166 16.5723 31.2969 15.2959 C
-32.5576 14.8076 33.8301 13.6045 33.8252 12.5664 C
-32.9775 12.7178 31.2852 13.4619 30.793 14.4551 C
-30.0742 13.707 28.3906 12.3984 26.7871 12.3945 C
-27.9746 11.5391 28.8945 10.5059 28.9893 8.5938 C
-30.2422 9.5645 32.6953 10.1797 34.0752 9.582 C
-29.2344 5.3457 29.7031 2.3125 29.7578 0.9902 C
-f
-13.8525 29.9844 m
-13.3281 29.5127 13.1309 29.25 V
-15.623 27.4326 13.3691 21.6074 12.8555 20.5439 C
-12.2168 20.4883 10.8096 23.2285 10.8457 24.7266 C
-9.7129 23.9707 8.0488 24.0918 6.4463 24.3779 C
-7.0186 23.2891 6.6172 21.3447 5.8164 20.5439 C
-6.8184 20.5801 8.1699 19.8652 9.4785 18.8838 C
-8.6436 18.0645 6.8164 18.2246 4.9004 18.8838 C
-4.9004 17.5107 4.0781 15.7734 3.2412 14.5918 C
-4.5576 14.6484 5.7031 13.9629 6.5605 12.9316 C
-7.2256 14.5 9.2598 15.6133 10.166 15.5645 C
-10.1826 14.1992 8.6094 12.1094 7.5879 11.7109 C
-8.1875 11.041 9.207 9.5107 10.166 7.0947 C
-10.9648 9.0205 12.1348 10.2627 13.3672 11.1953 C
-12.2256 12.7578 12.3994 13.6289 12.7988 15.1074 C
-13.541 14.5664 14.5723 14.1338 14.7441 12.1309 C
-16.4609 12.416 17.5957 12.3447 19.0938 11.4434 C
-18.6387 13.1055 18.6348 14.707 18.9551 16.4063 C
-17.1055 16.2666 15.5449 16.4795 14.5156 17.9688 C
-15.3457 18.1953 17.6055 18.2549 18.4795 17.3223 C
-18.8066 18.3047 19.7012 19.7109 21.1475 20.4043 C
-19.707 20.6641 18.7227 21.7637 17.8135 23.4492 C
-17.1006 22.0332 14.873 20.3691 13.3711 20.3145 C
-15.373 24.3779 15.373 27.2959 13.8525 29.9844 C
-f
-41.2324 26.0742 m
-41.5518 26.7021 41.7549 26.959 V
-44.1523 25.0176 48.958 28.3262 49.8535 29.0957 C
-49.7432 29.7266 47.6182 30.8643 45.9004 29.834 C
-46.3408 31.123 45.4395 33.084 44.2402 34.126 C
-45.9805 34.0254 48.126 35.3867 48.6484 36.1289 C
-48.8701 35.1514 50.0527 33.8809 51.3379 32.8672 C
-51.6895 33.8398 50.9941 35.958 50.0781 37.5605 C
-51.3125 38.0605 52.4248 38.9912 52.8828 40.25 C
-53.3398 38.9336 54.3428 38.2598 55.6875 37.5039 C
-54.5273 36.0762 53.7471 33.9023 54.0273 33.0391 C
-55.3496 33.374 56.9209 36.0918 57.0439 37.1816 C
-57.9189 36.415 59.4727 35.7285 62.0537 35.4219 C
-60.3535 34.3438 59.9902 32.3516 59.4063 30.9219 C
-58.2588 31.3682 56.0898 31.4277 55.1152 30.8643 C
-55.8281 30.2852 57.168 29.7344 59.1777 29.7207 C
-59.1777 28.1758 59.6406 27.043 60.8945 25.8281 C
-59.1719 25.8418 57.0723 25.3555 55.5762 24.9629 C
-55.3281 26.292 54.4844 27.8887 53.3398 28.2891 C
-53.334 27.4277 53.5996 25.1797 54.4844 24.5117 C
-53.6201 23.9443 52.3672 22.5674 51.9102 20.8496 C
-51.2881 22.1758 50.4268 23.4805 48.5645 23.9238 C
-49.749 24.9766 50.584 26.9941 50.25 28.4609 C
-45.1973 24.4785 42.5215 25.7773 41.2324 26.0742 C
-f
-27.7578 38.7324 m
-28.4346 38.9316 28.7246 39.084 V
-27.2559 41.7969 31.707 46.0776 32.627 46.8169 C
-33.2275 46.5918 33.3477 44.0586 32.6699 42.7227 C
-33.5137 42.8457 35.7031 41.4678 36.4609 40.1787 C
-36.5254 40.8652 38.0957 43.8066 38.9219 44.1846 C
-38.002 44.582 37.3359 46.0547 36.5742 47.5039 C
-37.5957 47.6709 38.9961 46.7485 40.4668 45.8438 C
-40.9814 46.6445 42.3555 47.6177 43.6143 48.1328 C
-42.5264 48.8198 42.0313 49.5615 41.5352 51.0205 C
-40.4922 50.4556 38.3057 50.3057 37.7764 50.5938 C
-38.291 51.7056 40.5371 52.2485 41.2676 52.1958 C
-41.0137 53.0576 40.8652 55.2109 41.0391 57.8037 C
-39.3789 56.4878 37.834 55.1719 36.1738 55.2285 C
-36.4434 53.8076 35.8076 52.002 35.4307 51.5088 C
-34.8574 52.2529 34.4463 53.0796 34.8008 55.0576 C
-33.3486 55.5425 32.1113 56.0879 30.7373 57.3467 C
-30.7373 55.5146 30.166 54.314 29.2969 53.0366 C
-30.5576 52.5488 31.8301 51.3467 31.8252 50.3076 C
-30.9775 50.46 29.2852 51.2036 28.793 52.1958 C
-28.0742 51.4497 26.3906 50.1396 24.7871 50.1357 C
-25.9746 49.2817 26.8945 48.2466 26.9893 46.335 C
-28.2422 47.3057 30.6953 47.9209 32.0752 47.3237 C
-27.2344 43.0869 27.7031 40.0547 27.7578 38.7324 C
-f
-13.5195 70.3916 m
-12.9941 69.9209 12.7988 69.6587 V
-15.2891 67.8418 13.0352 62.0146 12.5225 60.9517 C
-11.8828 60.8955 10.4766 63.6367 10.5117 65.1348 C
-9.3809 64.3789 7.7148 64.4995 6.1133 64.7856 C
-6.6855 63.6987 6.2842 61.7529 5.4834 60.9517 C
-6.4854 60.9878 7.8359 60.2729 9.1455 59.2925 C
-8.3105 58.4717 6.4834 58.6338 4.5674 59.2925 C
-4.5674 57.9189 3.7461 56.1816 2.9082 54.9995 C
-4.2246 55.0576 5.3691 54.3706 6.2275 53.3408 C
-6.8926 54.9097 8.9258 56.0215 9.832 55.9727 C
-9.8496 54.6079 8.2764 52.5176 7.2539 52.1187 C
-7.8545 51.4497 8.873 49.9189 9.832 47.5039 C
-10.6309 49.4297 11.8008 50.6719 13.0342 51.6045 C
-11.8926 53.1655 12.0664 54.0366 12.4648 55.5146 C
-13.209 54.9746 14.2393 54.5415 14.4102 52.5386 C
-16.127 52.8247 17.2637 52.7529 18.7598 51.8525 C
-18.3057 53.5137 18.3027 55.1147 18.623 56.8149 C
-16.7725 56.6748 15.2129 56.8887 14.1826 58.377 C
-15.0117 58.6035 17.2725 58.6626 18.1465 57.731 C
-18.4736 58.7129 19.3691 60.1187 20.8145 60.8125 C
-19.375 61.0728 18.3896 62.1719 17.4805 63.8579 C
-16.7676 62.4429 14.541 60.7769 13.0371 60.7227 C
-15.041 64.7856 15.041 67.7046 13.5195 70.3916 C
-f
-41.2324 64.4824 m
-41.5518 65.1113 41.7549 65.3682 V
-44.1523 63.4272 48.958 66.7354 49.8535 67.5034 C
-49.7432 68.1362 47.6182 69.2725 45.9004 68.2422 C
-46.3408 69.5313 45.4395 71.4922 44.2402 72.5342 C
-45.9805 72.4341 48.126 73.7954 48.6484 74.5371 C
-48.8701 73.5601 50.0527 72.29 51.3379 71.2754 C
-51.6895 72.249 50.9941 74.3662 50.0781 75.9683 C
-51.3125 76.4692 52.4248 77.3994 52.8828 78.6582 C
-53.3398 77.3423 54.3428 76.667 55.6875 75.9111 C
-54.5273 74.4844 53.7471 72.3101 54.0273 71.4473 C
-55.3496 71.7822 56.9209 74.5 57.0439 75.5903 C
-57.9189 74.8232 59.4727 74.1372 62.0537 73.8311 C
-60.3535 72.7534 59.9902 70.7612 59.4063 69.3301 C
-58.2588 69.7773 56.0898 69.8364 55.1152 69.2725 C
-55.8281 68.6934 57.168 68.1431 59.1777 68.1284 C
-59.1777 66.583 59.6406 65.4512 60.8945 64.2373 C
-59.1719 64.249 57.0723 63.7632 55.5762 63.3721 C
-55.3281 64.7002 54.4844 66.2974 53.3398 66.6973 C
-53.334 65.8364 53.5996 63.5874 54.4844 62.9214 C
-53.6201 62.353 52.3672 60.9751 51.9102 59.2583 C
-51.2881 60.583 50.4268 61.8882 48.5645 62.333 C
-49.749 63.3862 50.584 65.4033 50.25 66.8691 C
-45.1973 62.8872 42.5215 64.1851 41.2324 64.4824 C
-f
-%AI6_EndPatternLayer
-) &
-] E
-%AI3_EndPattern
-%AI3_BeginPattern: (Stripes)
-(Stripes) 8.45 4.6001 80.45 76.6001 [
-%AI3_Tile
-(0 O 0 R 1 0.07 1 0 k
- 1 0.07 1 0 K
-) @
-(
-%AI6_BeginPatternLayer
-800 Ar
-0 J 0 j 3.6 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-8.2 8.2 m
-80.7 8.2 L
-S
-8.2 22.6001 m
-80.7 22.6001 L
-S
-8.2 37.0002 m
-80.7 37.0002 L
-S
-8.2 51.4 m
-80.7 51.4 L
-S
-8.2 65.8001 m
-80.7 65.8001 L
-S
-8.2 15.4 m
-80.7 15.4 L
-S
-8.2 29.8001 m
-80.7 29.8001 L
-S
-8.2 44.2 m
-80.7 44.2 L
-S
-8.2 58.6001 m
-80.7 58.6001 L
-S
-8.2 73.0002 m
-80.7 73.0002 L
-S
-%AI6_EndPatternLayer
-) &
-] E
-%AI3_EndPattern
-%AI5_End_NonPrinting--
-%AI5_Begin_NonPrinting
-Np
-%AI8_BeginBrushPattern
-(New Pattern 1)
-0 A
-u
-1 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7834.75 8587 m
--7834.75 8563 L
--7884.75 8563 L
--7884.75 8587 L
--7834.75 8587 L
-n
-u
-0 Ap
-0 O
-1 g
--7854.75 8585 m
--7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C
-F
--7844.75 8585 m
--7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C
-F
--7884.75 8565 m
--7864.75 8560 -7854.75 8590 -7834.75 8585 C
-F
--7874.75 8565 m
--7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C
-F
--7864.75 8565 m
--7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C
-F
--7844.75 8565 m
--7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C
-F
--7874.75 8585 m
--7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C
-F
--7844.7817 8565.125 m
--7850.9009 8563.6162 -7854.7817 8565.125 V
--7858.877 8563.6484 -7864.7817 8565.125 V
--7869.7446 8563.4492 -7874.7817 8565.125 V
--7880.7969 8563.5742 -7884.7817 8565.125 V
--7884.7817 8584.8096 L
--7881.6958 8585.7842 -7878.2969 8585.9912 -7874.3799 8584.9082 C
--7868.2134 8586.4912 -7864.4634 8584.9082 V
--7859.4634 8586.4912 -7854.3799 8584.8242 V
--7850.0474 8586.4082 -7844.3799 8584.9082 V
--7838.8799 8586.3242 -7834.7817 8585.125 V
--7834.7817 8565.4404 L
--7837.5254 8564.4287 -7840.6514 8563.9287 -7844.7817 8565.125 C
-f
-0 R
-0 G
-1 J 1 j 0.5 w
--7864.75 8585 m
--7872.54 8586.9473 -7878.813 8583.585 -7884.75 8579.0488 C
-S
--7854.75 8585 m
--7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C
-S
--7844.75 8585 m
--7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C
-S
--7884.75 8565 m
--7864.75 8560 -7854.75 8590 -7834.75 8585 C
-S
--7874.75 8565 m
--7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C
-S
--7864.75 8565 m
--7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C
-S
--7854.75 8565 m
--7846.96 8563.0527 -7840.687 8566.415 -7834.75 8570.9512 C
-S
--7844.75 8565 m
--7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C
-S
--7874.75 8585 m
--7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C
-S
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 2)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884 8586 m
--7819.187 8586 L
--7819.187 8521.9023 L
--7884 8521.9023 L
--7884 8586 L
-n
-u
-0 O
-0 g
--7849.6978 8544.4297 m
--7851.6094 8521.9023 L
--7853.5215 8544.4297 L
--7852.9033 8544.3066 -7852.2642 8544.2402 -7851.6094 8544.2402 c
--7850.9551 8544.2402 -7850.3159 8544.3066 -7849.6978 8544.4297 C
-f
--7861.2402 8552.3975 m
--7884 8554.3301 L
--7861.1138 8556.2734 L
--7861.2856 8555.5469 -7861.3848 8554.793 -7861.3848 8554.0156 c
--7861.3848 8553.4629 -7861.3281 8552.9248 -7861.2402 8552.3975 C
-f
--7856.519 8545.5723 m
--7870.1626 8536.8047 L
--7860.2153 8549.377 L
--7859.3574 8547.791 -7858.0718 8546.4766 -7856.519 8545.5723 C
-f
--7853.481 8563.6074 m
--7851.5786 8586 L
--7849.6768 8563.5967 L
--7850.3018 8563.7227 -7850.9473 8563.791 -7851.6094 8563.791 c
--7852.25 8563.791 -7852.873 8563.7246 -7853.481 8563.6074 C
-f
--7841.9609 8555.5068 m
--7819.187 8553.5732 L
--7842.083 8551.6289 L
--7842.083 8551.8506 L
--7841.9258 8552.5488 -7841.834 8553.2695 -7841.834 8554.0156 c
--7841.834 8554.5234 -7841.8848 8555.0195 -7841.9609 8555.5068 C
-f
--7860.1138 8558.8262 m
--7870.1641 8571.5293 L
--7856.2778 8562.6055 L
--7857.8823 8561.7305 -7859.2114 8560.416 -7860.1138 8558.8262 C
-f
--7842.9961 8549.3945 m
--7832.875 8536.6055 L
--7846.7666 8545.5313 L
--7845.1768 8546.4414 -7843.8633 8547.7793 -7842.9961 8549.3945 C
-f
--7846.6895 8562.4512 m
--7832.873 8571.3281 L
--7842.9658 8558.5732 L
--7843.8198 8560.1895 -7845.1152 8561.5313 -7846.6895 8562.4512 C
-f
--7842.8887 8558.6133 m
--7842.3862 8557.6641 -7842.043 8556.6211 -7841.875 8555.5195 c
--7841.7993 8555.0293 -7841.748 8554.5273 -7841.748 8554.0156 c
--7841.748 8553.2637 -7841.8398 8552.5352 -7841.998 8551.8311 c
--7842.1958 8550.957 -7842.5049 8550.124 -7842.918 8549.3545 c
--7843.7954 8547.7246 -7845.1191 8546.374 -7846.7241 8545.4561 c
--7847.6294 8544.9375 -7848.6226 8544.5537 -7849.6802 8544.3457 c
--7850.3047 8544.2207 -7850.9497 8544.1523 -7851.6094 8544.1523 c
--7852.2695 8544.1523 -7852.915 8544.2207 -7853.5391 8544.3457 c
--7854.623 8544.5605 -7855.6382 8544.957 -7856.5625 8545.4961 c
--7858.1313 8546.4102 -7859.4282 8547.7363 -7860.291 8549.335 c
--7860.7969 8550.2695 -7861.145 8551.2969 -7861.3262 8552.3828 c
--7861.415 8552.916 -7861.4727 8553.459 -7861.4727 8554.0156 c
--7861.4727 8554.8008 -7861.3711 8555.5605 -7861.1978 8556.293 c
--7860.981 8557.207 -7860.6406 8558.0732 -7860.187 8558.8701 c
--7859.2793 8560.4727 -7857.939 8561.8008 -7856.3174 8562.6826 c
--7855.4487 8563.1553 -7854.5 8563.498 -7853.4961 8563.6934 c
--7852.8848 8563.8115 -7852.2554 8563.8779 -7851.6094 8563.8779 c
--7850.9414 8563.8779 -7850.29 8563.8086 -7849.6602 8563.6826 c
--7848.5786 8563.4668 -7847.5664 8563.0654 -7846.6455 8562.5273 c
--7845.0566 8561.5977 -7843.751 8560.2441 -7842.8887 8558.6133 c
-f
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 3)
-0 A
-u
-1 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7874.75 8587 m
--7874.75 8563 L
--7884.75 8563 L
--7884.75 8587 L
--7874.75 8587 L
-n
-u
-u
-0 Ap
-0 O
-1 g
--7875.4058 8578.5361 m
--7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c
--7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 c
--7877.897 8566.9736 -7881.0898 8565 -7884.75 8565 C
--7884.75 8585 L
--7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 c
--7881.9121 8584.7754 -7880.1807 8584.0645 -7878.7441 8582.9824 c
--7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 c
-f
-0 R
-0 G
-1 J 1 j 0.5 w
--7884.75 8565.3174 m
--7881.7207 8566.2744 -7878.8926 8567.9326 -7876.1543 8569.9072 C
-S
--7884.75 8570.9512 m
--7881.5991 8573.3564 -7878.543 8576.0869 -7875.4058 8578.5361 C
-S
--7878.7441 8582.9824 m
--7880.8105 8581.8916 -7882.7993 8580.5342 -7884.75 8579.043 C
-S
--7883.8018 8584.9521 m
--7884.1191 8584.8682 -7884.4375 8584.7852 -7884.75 8584.6865 C
-S
--7878.7441 8582.9824 m
--7880.1807 8584.0645 -7881.9121 8584.7744 -7883.8018 8584.9521 C
-S
--7875.4058 8578.5361 m
--7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c
--7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 C
-S
--7884.75 8585 m
--7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 C
-S
--7878.7441 8582.9824 m
--7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 C
-S
--7876.1543 8569.9072 m
--7877.8975 8566.9736 -7881.0898 8565 -7884.75 8565 C
-S
-U
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 5)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7726.3994 8587 m
--7726.3994 8573.4199 L
--7885 8573.4199 L
--7885 8587 L
--7726.3994 8587 L
-n
-u
-u
-0 O
-0.285 0.228 0.171 0 k
--7741.0786 8585.4844 m
--7741.043 8586.6895 L
--7727.5103 8587.5176 -7726.8418 8586.2822 v
--7726.7441 8586.1016 -7726.647 8585.7148 -7726.561 8585.1934 C
--7728.584 8585.8242 -7738.291 8585.5713 -7741.0786 8585.4844 C
-f
-0.44 0.352 0.264 0 k
--7741.4063 8574.0234 m
--7741.3711 8575.2676 L
--7738.4912 8575.0488 -7728.1914 8574.3164 -7726.543 8574.8652 C
--7726.7031 8574.2188 -7726.9199 8573.7646 -7727.2046 8573.6152 c
--7728.8306 8572.7656 -7741.4063 8574.0234 Y
-f
-0.145 0.116 0.087 0 k
--7741.3711 8575.2676 m
--7741.0786 8585.4844 L
--7738.291 8585.5713 -7728.584 8585.8242 -7726.561 8585.1934 C
--7726.1519 8582.7773 -7725.9258 8577.3604 -7726.543 8574.8652 C
--7728.1914 8574.3164 -7738.4912 8575.0488 -7741.3711 8575.2676 C
-f
-U
-u
-0.155 0.124 0.093 0 k
--7766.9375 8579.2734 m
--7765.897 8579.6563 L
--7747.0728 8575.1465 L
--7747.481 8574.3145 L
--7766.3633 8576.7246 L
--7767.252 8577.0059 L
--7767.6504 8576.8936 -7768.1934 8576.8242 V
--7767.6094 8577.2373 -7767.1426 8578.1406 -7766.9375 8579.2734 C
-f
-u
-0.085 0.068 0.051 0 k
--7771.7993 8583.666 m
--7772.5977 8583.7217 -7769.749 8583.6641 Y
--7770.3481 8583.0176 -7770.771 8581.8203 -7770.8105 8580.4375 c
--7770.8169 8580.2246 -7770.8105 8580.0176 -7770.7993 8579.8135 C
--7771.041 8579.707 -7771.0918 8579.7734 -7771.6289 8579.5645 C
--7771 8583.6113 -7771.7993 8583.666 v
-f
-0.305 0.244 0.183 0 k
--7770.3442 8576.8672 m
--7770.5527 8576.8105 -7770.4937 8578.9307 Y
--7769.4785 8579.7588 L
--7767.8359 8578.9434 L
--7766.9375 8579.2734 L
--7767.1426 8578.1406 -7767.6094 8577.2373 -7768.1934 8576.8242 C
--7768.6094 8576.7715 -7769.874 8576.7998 -7770.3442 8576.8672 C
-f
-U
-0.115 0.092 0.069 0 k
--7766.9375 8579.2734 m
--7767.8359 8578.9434 L
--7769.4785 8579.7588 L
--7770.4937 8578.9307 L
--7770.793 8579.708 -7770.7993 8579.8135 V
--7769.5137 8580.3789 -7768.1831 8580.7402 -7766.8398 8580.9258 C
--7766.79 8580.7275 -7766.7842 8580.543 -7766.79 8580.3369 c
--7766.7998 8579.9717 -7766.8218 8579.6182 -7766.9375 8579.2734 C
-f
-0.41 0.328 0.246 0 k
--7747.4512 8575.3965 m
--7749.377 8576.6426 -7758.3862 8582.0986 -7766.8398 8580.9258 C
--7766.9038 8582.0928 -7767.248 8583.0908 -7767.75 8583.6631 C
--7767.1895 8583.6621 L
--7746.7402 8586.7559 L
--7747.0366 8576.4258 L
--7747.0728 8575.1465 L
--7747.2046 8575.2373 -7747.4512 8575.3965 v
-f
-0.395 0.316 0.237 0 k
--7770.8105 8580.4375 m
--7770.771 8581.8203 -7770.3481 8583.0176 -7769.749 8583.6641 C
--7767.6807 8583.6631 L
--7767.1782 8583.0908 -7766.8218 8582.0713 -7766.8398 8580.9258 C
--7768.1831 8580.7402 -7769.5137 8580.3789 -7770.7993 8579.8135 C
--7770.8105 8580.0176 -7770.8169 8580.2246 -7770.8105 8580.4375 c
-f
-U
-u
-0 0 0 0.11 k
--7741.2642 8574.2012 m
--7740.2407 8574.0352 L
--7741.2642 8574.2012 L
--7741.2642 8574.2012 L
-f
-0 0 0 0.34 k
--7747.481 8574.3145 m
--7747.0728 8575.1465 L
--7745.6714 8574.918 L
--7744.5234 8574.7314 L
--7742.6758 8574.4307 L
--7741.2642 8574.2012 L
--7740.2407 8574.0352 L
--7740.2954 8573.7168 -7740.3672 8573.498 -7740.4648 8573.4199 C
--7747.481 8574.3145 L
-f
-0 0 0 0.32 k
--7745.8042 8579.207 m
--7746.041 8586.8613 L
--7740.7144 8587 L
--7739.7266 8583.5146 -7740.1816 8579.1543 V
--7745.8042 8579.207 L
-f
-U
-0.025 0.02 0.015 0 k
--7739.3223 8576.3848 m
--7736.373 8576.9199 -7733.2402 8577.1602 -7730.3159 8576.3613 c
--7730.2856 8576.3496 -7730.2754 8576.3184 -7730.2871 8576.2969 c
--7730.2881 8576.2656 -7730.3198 8576.2559 -7730.3418 8576.2559 c
--7733.2422 8577.0645 -7736.375 8576.8242 -7739.3042 8576.2783 c
--7739.3262 8576.2793 -7739.3574 8576.291 -7739.3672 8576.3223 c
--7739.3662 8576.3438 -7739.355 8576.375 -7739.3223 8576.3848 c
--7739.3223 8576.3848 l
-f
--7737.8374 8575.3076 m
--7737.7295 8575.3789 -7737.6313 8575.4941 -7737.5234 8575.502 c
--7733.7886 8575.832 -7730.1631 8575.7813 -7726.4746 8575.6641 c
--7726.4526 8575.6641 -7726.4209 8575.6426 -7726.4214 8575.6211 c
--7726.4214 8575.5879 -7726.4551 8575.5684 -7726.4766 8575.5684 c
--7729.3223 8575.6816 -7732.1401 8575.6992 -7735.0039 8575.5352 c
--7735.9336 8575.4766 -7736.9082 8575.7402 -7737.7778 8575.2207 c
--7737.7993 8575.2109 -7737.8306 8575.2109 -7737.8506 8575.2334 c
--7737.8618 8575.2559 -7737.8594 8575.2871 -7737.8374 8575.3076 c
--7737.8374 8575.3076 l
-f
--7733.373 8577.3672 m
--7731.5098 8578.6797 -7729.3022 8579.374 -7727.1001 8579.8867 c
--7727.0679 8579.8965 -7727.0474 8579.8848 -7727.0366 8579.8535 c
--7727.0273 8579.8203 -7727.0488 8579.8008 -7727.0703 8579.79 c
--7729.2617 8579.2656 -7731.459 8578.6035 -7733.3105 8577.2803 c
--7733.3433 8577.2598 -7733.375 8577.2715 -7733.3848 8577.293 c
--7733.4058 8577.3145 -7733.3945 8577.3457 -7733.373 8577.3672 c
--7733.373 8577.3672 l
-f
--7738.9321 8584.0566 m
--7736.7295 8584.5703 -7734.5298 8585.0303 -7732.2798 8585.2754 c
--7732.2598 8585.2852 -7732.229 8585.2637 -7732.229 8585.2422 c
--7732.2183 8585.209 -7732.2407 8585.1777 -7732.2729 8585.1787 c
--7734.5122 8584.8809 -7736.7305 8584.5176 -7738.9126 8583.9502 c
--7738.9351 8583.9512 -7738.9673 8583.9629 -7738.9766 8583.9941 c
--7738.9751 8584.0156 -7738.9648 8584.0479 -7738.9321 8584.0566 c
--7738.9321 8584.0566 l
-f
--7738.439 8583.3604 m
--7736.3457 8584.1973 -7734.1016 8583.9297 -7731.9023 8583.9629 c
--7731.8706 8583.9609 -7731.8496 8583.9395 -7731.8506 8583.9082 c
--7731.8521 8583.875 -7731.873 8583.8555 -7731.8945 8583.8555 c
--7734.0928 8583.8438 -7736.3374 8584.0996 -7738.4209 8583.2529 c
--7738.4434 8583.2539 -7738.4746 8583.2656 -7738.4834 8583.2969 c
--7738.4834 8583.3184 -7738.4722 8583.3506 -7738.439 8583.3604 c
--7738.439 8583.3604 l
-f
--7737.707 8584.7051 m
--7736.3833 8584.752 -7735.1504 8584.5469 -7733.8271 8584.209 c
--7733.3594 8584.0996 -7732.9199 8584.2266 -7732.4609 8584.2129 c
--7731.897 8584.1973 l
--7731.874 8584.1963 -7731.8633 8584.1855 -7731.8535 8584.1738 c
--7731.834 8584.1523 -7731.8442 8584.1211 -7731.8662 8584.0996 c
--7732.0625 8583.9453 l
--7732.0742 8583.9453 -7732.085 8583.9355 -7732.0962 8583.9355 c
--7732.5 8583.9473 l
--7733.9551 8584.1914 -7735.457 8584.6719 -7736.8926 8584.0742 c
--7736.9258 8584.0645 -7736.957 8584.0859 -7736.9673 8584.1074 c
--7736.9673 8584.1396 -7736.9551 8584.1602 -7736.9336 8584.1709 c
--7735.647 8584.6992 -7734.1714 8584.4756 -7732.8818 8584.0547 c
--7732.0918 8584.043 L
--7732.124 8584.0332 L
--7731.9282 8584.1875 L
--7731.8984 8584.0898 L
--7732.4639 8584.1064 l
--7732.9321 8584.1406 -7733.3848 8583.9834 -7733.8398 8584.1035 c
--7735.1543 8584.4609 -7736.3975 8584.625 -7737.71 8584.5986 c
--7737.7422 8584.5996 -7737.7642 8584.6211 -7737.7617 8584.6533 c
--7737.7617 8584.6855 -7737.7402 8584.7061 -7737.707 8584.7051 c
--7737.707 8584.7051 l
-f
--7738.5718 8585.0605 m
--7735.8711 8586.2207 -7732.9023 8585.5703 -7730.1279 8585.1816 c
--7729.7832 8585.2891 l
--7729.7617 8585.2988 -7729.7417 8585.2871 -7729.7207 8585.2656 c
--7729.71 8585.2441 -7729.7217 8585.2129 -7729.7422 8585.2021 c
--7730.0801 8585.0098 l
--7732.7754 8584.3926 -7735.5391 8584.7813 -7738.271 8584.7852 c
--7738.3022 8584.7871 -7738.3232 8584.8086 -7738.3223 8584.8398 c
--7738.3198 8584.8721 -7738.2983 8584.8926 -7738.2681 8584.8926 c
--7735.6738 8584.9355 -7733.0303 8584.4434 -7730.4727 8585.0742 c
--7729.7954 8585.2891 L
--7729.7534 8585.1914 L
--7730.1406 8585.0859 l
--7732.9058 8585.4424 -7735.8418 8586.1348 -7738.5313 8584.9746 c
--7738.5537 8584.9648 -7738.585 8584.9648 -7738.5962 8584.998 c
--7738.6055 8585.0195 -7738.605 8585.0508 -7738.5718 8585.0605 c
--7738.5718 8585.0605 l
-f
--7735.6895 8578.3945 m
--7734.3945 8578.9004 -7732.9834 8578.6465 -7731.6802 8578.3438 c
--7731.647 8578.3418 -7731.6367 8578.3203 -7731.6382 8578.2891 c
--7731.6504 8578.2568 -7731.6714 8578.2461 -7731.7031 8578.248 c
--7732.998 8578.5303 -7734.377 8578.8154 -7735.6504 8578.2969 c
--7735.6826 8578.2871 -7735.7144 8578.2988 -7735.7246 8578.3311 c
--7735.7222 8578.3525 -7735.7114 8578.3848 -7735.6895 8578.3945 c
--7735.6895 8578.3945 l
-f
--7736.1401 8580.2207 m
--7734.2266 8580.6895 -7732.3145 8581.1035 -7730.355 8581.3242 c
--7730.3242 8581.334 -7730.3022 8581.3125 -7730.293 8581.2803 c
--7730.2954 8581.2598 -7730.3159 8581.2285 -7730.3374 8581.2285 c
--7732.2959 8581.0078 -7734.209 8580.582 -7736.1206 8580.1133 c
--7736.1426 8580.1152 -7736.1738 8580.126 -7736.1831 8580.1582 c
--7736.1831 8580.1797 -7736.1719 8580.2109 -7736.1401 8580.2207 c
--7736.1401 8580.2207 l
-f
--7736.9336 8582.6348 m
--7734.499 8583.4609 -7731.8647 8583.0547 -7729.3457 8583.0879 c
--7729.313 8583.0879 -7729.293 8583.0664 -7729.293 8583.0332 c
--7729.2954 8583.0117 -7729.3159 8582.9922 -7729.3481 8582.9922 c
--7731.8574 8582.916 -7734.481 8583.3848 -7736.8945 8582.5264 c
--7736.9282 8582.5273 -7736.959 8582.5391 -7736.9688 8582.5605 c
--7736.9678 8582.5918 -7736.9561 8582.624 -7736.9336 8582.6348 c
--7736.9336 8582.6348 l
-f
--7732.0542 8583.8496 m
--7730.6582 8584.5449 -7729.0503 8584.4033 -7727.5342 8584.4668 c
--7727.502 8584.4648 -7727.4824 8584.4434 -7727.4824 8584.4121 c
--7727.4834 8584.3906 -7727.5054 8584.3594 -7727.5366 8584.3594 c
--7729.0137 8584.2207 -7730.6489 8584.5234 -7732.0039 8583.7617 c
--7732.0366 8583.7529 -7732.0679 8583.7637 -7732.0786 8583.7861 c
--7732.0879 8583.8076 -7732.0767 8583.8398 -7732.0542 8583.8496 c
--7732.0542 8583.8496 l
-f
--7731.3418 8580.4248 m
--7730.3926 8580.3975 -7729.4336 8580.3701 -7728.4839 8580.3428 c
--7728.4526 8580.3418 -7728.4312 8580.3203 -7728.4336 8580.2881 c
--7728.4336 8580.2559 -7728.4551 8580.2354 -7728.4878 8580.2363 c
--7729.437 8580.2637 -7730.397 8580.291 -7731.3457 8580.3184 c
--7731.377 8580.3184 -7731.3975 8580.3418 -7731.3975 8580.373 c
--7731.397 8580.4043 -7731.374 8580.4258 -7731.3418 8580.4248 c
--7731.3418 8580.4248 l
-f
--7729.1592 8578.0361 m
--7728.6895 8578.0645 -7728.209 8578.0723 -7727.7383 8578.0918 c
--7727.7168 8578.0908 -7727.6855 8578.0684 -7727.6865 8578.0371 c
--7727.687 8578.0039 -7727.71 8577.9844 -7727.7417 8577.9844 c
--7728.2114 8577.9873 -7728.6816 8577.9375 -7729.1514 8577.9395 c
--7729.1831 8577.9297 -7729.2031 8577.9512 -7729.2134 8577.9844 c
--7729.2129 8578.0156 -7729.1914 8578.0371 -7729.1592 8578.0361 c
--7729.1592 8578.0361 l
-f
--7736.9702 8580.2344 m
--7736.5688 8580.5107 -7736.125 8580.6797 -7735.645 8580.751 c
--7735.6113 8580.7607 -7735.5918 8580.7383 -7735.5806 8580.7168 c
--7735.5703 8580.6855 -7735.5928 8580.6543 -7735.6152 8580.6543 c
--7736.0854 8580.5723 -7736.5176 8580.4023 -7736.9209 8580.1475 c
--7736.9521 8580.1377 -7736.9849 8580.1387 -7736.9946 8580.1709 c
--7737.0039 8580.1934 -7736.9922 8580.2246 -7736.9702 8580.2344 c
--7736.9702 8580.2344 l
-f
--7738.1904 8586.085 m
--7735.7344 8586.5273 -7733.2983 8587.001 -7730.7993 8586.7266 c
--7730.7778 8586.7266 -7730.7568 8586.7041 -7730.7578 8586.6719 c
--7730.7578 8586.6406 -7730.7798 8586.6191 -7730.8022 8586.6191 c
--7733.291 8586.873 -7735.7344 8586.4844 -7738.1719 8585.9775 c
--7738.1934 8585.9785 -7738.2256 8585.9902 -7738.2344 8586.0215 c
--7738.2344 8586.043 -7738.2222 8586.0752 -7738.1904 8586.085 c
--7738.1904 8586.085 l
-f
-0.195 0.156 0.117 0 k
--7738.166 8574.6445 m
--7735.7969 8574.2676 -7733.4058 8574.3477 -7731.0298 8574.5898 c
--7730.998 8574.5879 -7730.9766 8574.5664 -7730.9766 8574.5352 c
--7730.9785 8574.5137 -7731 8574.4824 -7731.0215 8574.4824 c
--7733.4082 8574.2422 -7735.791 8574.1602 -7738.1694 8574.5391 c
--7738.2026 8574.5391 -7738.2222 8574.5605 -7738.2217 8574.5938 c
--7738.2207 8574.625 -7738.1992 8574.6465 -7738.166 8574.6445 c
--7738.166 8574.6445 l
-f
-0.335 0.268 0.201 0 k
--7737.4351 8574.1113 m
--7734.9282 8574.1152 -7732.4146 8574.2773 -7729.918 8573.8965 c
--7729.8862 8573.8945 -7729.8647 8573.873 -7729.8662 8573.8418 c
--7729.8672 8573.8086 -7729.8896 8573.7891 -7729.9209 8573.7891 c
--7732.418 8574.1699 -7734.9297 8574.0293 -7737.4375 8574.0059 c
--7737.46 8574.0059 -7737.481 8574.0273 -7737.4785 8574.0596 c
--7737.4785 8574.0918 -7737.457 8574.1123 -7737.4351 8574.1113 c
--7737.4351 8574.1113 l
-f
-0.205 0.164 0.123 0 k
--7738.9766 8574.3262 m
--7737.5039 8574.668 -7736.0078 8574.4023 -7734.5391 8574.2207 c
--7734.5078 8574.2207 -7734.4873 8574.1973 -7734.499 8574.166 c
--7734.5 8574.1348 -7734.5215 8574.1133 -7734.5537 8574.125 c
--7736.0103 8574.2842 -7737.4961 8574.583 -7738.9473 8574.2188 c
--7738.9785 8574.2207 -7739.0103 8574.2324 -7739.0098 8574.2637 c
--7739.019 8574.2852 -7738.998 8574.3164 -7738.9766 8574.3262 c
--7738.9766 8574.3262 l
-f
--7732.3535 8573.7949 m
--7731.1978 8573.9219 -7730.0273 8573.8145 -7728.8926 8573.5898 c
--7728.8711 8573.5781 -7728.8506 8573.5566 -7728.8618 8573.5244 c
--7728.8623 8573.5029 -7728.8945 8573.4824 -7728.916 8573.4941 c
--7730.0503 8573.7402 -7731.1914 8573.7939 -7732.3462 8573.6885 c
--7732.3794 8573.6895 -7732.3984 8573.7109 -7732.4087 8573.7324 c
--7732.4082 8573.7646 -7732.3862 8573.7852 -7732.3535 8573.7949 c
--7732.3535 8573.7949 l
-f
-0.335 0.268 0.201 0 k
--7739.2681 8576.4473 m
--7737.9214 8577.1885 -7736.3066 8576.5977 -7734.855 8576.6416 c
--7734.8223 8576.6406 -7734.8022 8576.6191 -7734.8022 8576.5859 c
--7734.8042 8576.5654 -7734.8262 8576.5449 -7734.8574 8576.5449 c
--7736.2886 8576.4902 -7737.8823 8577.0801 -7739.2168 8576.3506 c
--7739.2383 8576.3398 -7739.2695 8576.3516 -7739.291 8576.374 c
--7739.3008 8576.3955 -7739.2886 8576.4277 -7739.2681 8576.4473 c
--7739.2681 8576.4473 l
-f
--7737.8945 8578.5645 m
--7735.6719 8579.0449 -7733.3896 8578.6162 -7731.1504 8578.5625 c
--7731.1177 8578.5615 -7731.0977 8578.5391 -7731.0977 8578.5078 c
--7731.1001 8578.4863 -7731.1318 8578.4668 -7731.1519 8578.4668 c
--7733.3833 8578.4775 -7735.6519 8578.9805 -7737.875 8578.457 c
--7737.8975 8578.457 -7737.9287 8578.4688 -7737.9375 8578.502 c
--7737.9375 8578.5225 -7737.9258 8578.5547 -7737.8945 8578.5645 c
--7737.8945 8578.5645 l
-f
--7732.0273 8575.1406 m
--7730.3496 8575.9688 -7728.499 8576.502 -7726.603 8576.3613 c
--7726.5718 8576.3613 -7726.5513 8576.3389 -7726.5527 8576.3066 c
--7726.5527 8576.2754 -7726.5742 8576.2539 -7726.6074 8576.2559 c
--7728.481 8576.416 -7730.3198 8575.8604 -7731.9873 8575.0547 c
--7732.0078 8575.0449 -7732.041 8575.0449 -7732.0503 8575.0781 c
--7732.061 8575.0996 -7732.061 8575.1309 -7732.0273 8575.1406 c
--7732.0273 8575.1406 l
-f
-u
-0.5 0.85 1 0.45 k
--7885 8581.9082 m
--7885.0254 8582.4883 -7884.5664 8583.1875 -7883.167 8583.9902 C
--7882.8521 8584.0029 -7881.3945 8584.0234 -7879.0889 8584.0488 C
--7879.0889 8581.8223 L
--7881.1382 8581.8457 -7883.1177 8581.8867 -7885 8581.9082 C
-f
--7884.5088 8580.9688 m
--7879.0889 8580.8447 L
--7879.0889 8579.8145 L
--7882.644 8579.959 L
--7883.8145 8580.3301 -7884.5088 8580.9688 V
-f
-0.5 0.85 1 0.32 k
--7879.0889 8580.8252 m
--7884.4746 8580.9434 L
--7884.7695 8581.2148 -7884.9849 8581.5566 -7885 8581.9277 C
--7883.1177 8581.9063 -7881.1382 8581.8848 -7879.0889 8581.8613 C
--7879.0889 8580.8252 L
-f
-0.5 0.85 1 0.45 k
--7774.1504 8580.6172 m
--7852.3584 8581.541 -7879.1079 8581.8418 V
--7879.1079 8584.0488 L
--7862.8145 8584.2324 -7803.9902 8584.707 Y
--7769.749 8583.6641 L
--7770.457 8580.5684 L
--7774.1504 8580.6172 L
-f
-0.5 0.85 1 0.12 k
--7879.1079 8579.8145 m
--7879.1079 8580.8447 L
--7770.4258 8579 L
--7770.3833 8576.8633 L
--7803.6553 8576.7129 L
--7879.1079 8579.8145 L
-f
-u
-0.065 0.052 0.039 0 k
--7747.0728 8575.1465 m
--7747.0366 8576.4258 L
--7747.2954 8575.1172 L
--7765.897 8579.6563 L
--7766.9375 8579.2734 L
--7766.8794 8579.6055 -7766.8398 8579.957 -7766.8306 8580.3223 c
--7766.8242 8580.5283 -7766.8281 8580.7285 -7766.8398 8580.9258 C
--7758.3862 8582.0986 -7748.9634 8577.6719 -7747.0366 8576.4258 C
--7746.7402 8586.7559 L
--7746.041 8586.8613 L
--7745.8042 8579.207 L
--7740.1816 8579.1543 L
--7740.0898 8577.0137 -7740.0718 8575.0215 -7740.2407 8574.0352 C
--7747.0728 8575.1465 L
-f
-0.4 0.7 1 0 k
--7770.457 8580.5879 m
--7770.4258 8578.9805 L
--7879.1079 8580.8252 L
--7879.1079 8581.8613 L
--7852.3584 8581.5605 -7770.457 8580.5879 Y
-f
-U
-U
-0.025 0.02 0.015 0 k
--7734.7344 8583.0293 m
--7734.7344 8583.0625 -7734.7129 8583.082 -7734.6802 8583.082 c
--7731.6714 8583.1133 -7729.4214 8582.9453 -7726.415 8582.8594 C
--7726.4087 8582.7656 L
--7729.3262 8582.8701 -7731.7607 8583.0078 -7734.6841 8582.9746 C
--7734.7168 8582.9766 -7734.7358 8582.998 -7734.7344 8583.0293 C
-f
--7726.3994 8582.7656 m
--7726.4082 8582.7441 L
--7726.4087 8582.7656 L
--7726.4063 8582.7656 -7726.4033 8582.7656 -7726.3994 8582.7656 C
-f
--7730.4487 8581.4238 m
--7731.4458 8581.292 -7732.3394 8581.7656 -7733.2114 8582.1973 C
--7733.2441 8582.208 -7733.2534 8582.2402 -7733.2422 8582.2715 C
--7733.2305 8582.293 -7733.1982 8582.3027 -7733.1777 8582.291 c
--7732.3262 8581.8301 -7731.4312 8581.4199 -7730.4678 8581.5195 c
--7729.1079 8581.6621 -7727.9038 8582.375 -7726.5254 8582.4531 C
--7726.4463 8582.3594 L
--7728.04 8582.2656 -7728.8647 8581.623 -7730.4487 8581.4238 c
-f
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 6)
-0 A
-u
-1 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884.75 8563 m
--7884.75 8587 L
--7874.75 8587 L
--7874.75 8563 L
--7884.75 8563 L
-n
-0 Ap
-0 O
-1 g
--7874.75 8565 m
--7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 c
--7877.5879 8565.2256 -7879.3198 8565.9346 -7880.7559 8567.0176 c
--7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 c
--7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c
--7884.75 8576.8623 -7884.2319 8578.5996 -7883.3457 8580.0918 c
--7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C
--7874.75 8565 L
-f
-0 R
-0 G
-1 J 1 j 0.5 w
--7874.75 8584.6816 m
--7877.7793 8583.7256 -7880.6074 8582.0674 -7883.3457 8580.0918 C
-S
--7874.75 8579.0488 m
--7877.8999 8576.6436 -7880.957 8573.9131 -7884.0942 8571.4639 C
-S
--7880.7559 8567.0176 m
--7878.6904 8568.1084 -7876.7017 8569.4668 -7874.75 8570.957 C
-S
--7875.6982 8565.0479 m
--7875.3809 8565.1309 -7875.063 8565.2148 -7874.75 8565.3145 C
-S
--7880.7559 8567.0176 m
--7879.3193 8565.9355 -7877.5879 8565.2256 -7875.6982 8565.0479 C
-S
--7884.0942 8571.4639 m
--7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c
--7884.75 8576.8623 -7884.231 8578.5996 -7883.3457 8580.0918 C
-S
--7874.75 8565 m
--7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 C
-S
--7880.7559 8567.0176 m
--7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 C
-S
--7883.3457 8580.0918 m
--7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C
-S
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 8)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7883.9521 8584.3125 m
--7776.7954 8584.3125 L
--7776.7954 8570.1855 L
--7883.9521 8570.1855 L
--7883.9521 8584.3125 L
-n
-u
-0 O
-0 0 0 1 k
--7882.2832 8583.623 m
--7882.8535 8586 -7882.8184 8582.0039 V
--7883.0479 8578.8027 L
--7883.6167 8576.4551 L
--7883.4502 8574.123 L
--7881.9502 8573.4551 -7865.2832 8572.123 V
--7858.6167 8570.7891 -7849.6167 8570.7891 V
--7784.3936 8571.4766 -7779.4912 8572.8848 v
--7820.3882 8570.875 -7822.9688 8571.5117 v
--7783.8569 8573.1602 -7780.8545 8574.4316 v
--7818.79 8572.5469 -7822.167 8574.1777 v
--7787.249 8575.9102 -7783.021 8577.5313 v
--7789.7217 8576.8828 -7791.5127 8577.082 v
--7788.3896 8577.5703 l
--7793.4194 8577.502 l
--7796.3218 8577.1289 l
--7788.4521 8578.2422 -7787.9033 8578.8086 v
--7784.3154 8578.1309 -7798.5186 8578.3848 v
--7832.1177 8574.4551 -7882.2832 8583.623 V
-f
-/BBAccumRotation (5.805971) XT
-0 R
-0 0 0 0.5 K
-0.025 w
--7883.9502 8573.123 m
--7863.667 8571.2949 -7843.9727 8570.2207 v
--7801.1514 8570.502 -7796.5737 8570.9004 v
--7784.1631 8571.0313 -7776.7959 8572.0273 v
-S
-/BBAccumRotation (5.805971) XT
-0 0 0 1 K
--7821.8369 8570.4082 m
--7825.2959 8570.0273 -7851.2607 8570.2793 Y
--7861.627 8570.1602 -7883.9502 8573.123 Y
-S
-/BBAccumRotation (5.805971) XT
--7820.9873 8573.6641 m
--7790.3608 8574.582 -7783.6606 8575.2324 v
-S
-/BBAccumRotation (5.805971) XT
-0 0 0 0.5 K
--7829.6201 8578.2051 m
--7794.3706 8579.6172 -7791.4058 8580.1406 v
-S
-/BBAccumRotation (5.805971) XT
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 10)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884 8586 m
--7833.8921 8586 L
--7833.8921 8529.9756 L
--7884 8529.9756 L
--7884 8586 L
-n
-u
-0 O
-0.1 1 1 0 k
--7846.9014 8551.5752 m
--7848.7178 8545.0957 -7858.8247 8548.4658 Y
--7858.791 8548.5303 L
--7868.8999 8545.1611 -7870.7144 8551.6396 V
--7876.6758 8569.0068 -7871.4922 8575.7451 V
--7864.7529 8585.3369 -7860.6055 8585.3369 V
--7857.0103 8585.2705 L
--7852.8638 8585.2705 -7846.125 8575.6816 Y
--7840.9409 8568.9424 -7846.9014 8551.5752 Y
-f
-u
-0 0 0 1 k
--7851.3926 8529.9756 m
--7852.1167 8531.4199 -7852.9238 8532.4756 V
--7852.4058 8532.0635 -7851.5151 8531.1924 -7851.3926 8529.9756 C
-f
--7865.064 8532.4854 m
--7865.8711 8531.4307 -7866.5942 8529.9863 Y
--7866.4727 8531.2021 -7865.582 8532.0732 -7865.064 8532.4854 C
-f
-U
-0 0.61 0.74 0 k
--7850.5977 8554.4609 m
--7851.9038 8549.7959 -7859.1816 8552.2217 Y
--7859.1567 8552.2686 L
--7866.436 8549.8428 -7867.7417 8554.5078 V
--7872.0337 8567.0117 -7868.3018 8571.8633 V
--7863.4487 8578.7686 -7860.4634 8578.7686 V
--7857.875 8578.7227 L
--7854.8887 8578.7227 -7850.0366 8571.8174 Y
--7846.3042 8566.9639 -7850.5977 8554.4609 Y
-f
-u
-1 Ap
-0.73 0.43 1 0.22 k
-0 R
-0 0 0 1 K
--7854.6226 8557.2754 m
--7853.813 8557.2754 -7853.1558 8556.6182 -7853.1558 8555.8096 c
--7853.1558 8555 -7853.813 8554.3428 -7854.6226 8554.3428 c
--7855.4321 8554.3428 -7856.0889 8555 -7856.0889 8555.8096 c
--7856.0889 8556.6182 -7855.4321 8557.2754 -7854.6226 8557.2754 c
-b
--7854.3638 8568.9971 m
--7853.0806 8568.9971 -7852.0415 8568.1201 -7852.0415 8567.042 c
--7852.0415 8565.9619 -7853.0806 8565.0869 -7854.3638 8565.0869 c
--7855.645 8565.0869 -7856.6846 8565.9619 -7856.6846 8567.042 c
--7856.6846 8568.1201 -7855.645 8568.9971 -7854.3638 8568.9971 c
-b
--7853.834 8580.7861 m
--7852.2817 8580.7861 -7851.0239 8580.1299 -7851.0239 8579.3213 c
--7851.0239 8578.5117 -7852.2817 8577.8545 -7853.834 8577.8545 c
--7855.3862 8577.8545 -7856.645 8578.5117 -7856.645 8579.3213 c
--7856.645 8580.1299 -7855.3862 8580.7861 -7853.834 8580.7861 c
-b
--7849.6104 8552.5264 m
--7848.8687 8552.5264 -7848.2671 8551.8154 -7848.2671 8550.9365 c
--7848.2671 8550.0596 -7848.8687 8549.3477 -7849.6104 8549.3477 c
--7850.353 8549.3477 -7850.9546 8550.0596 -7850.9546 8550.9365 c
--7850.9546 8551.8154 -7850.353 8552.5264 -7849.6104 8552.5264 c
-b
--7848.0034 8574.083 m
--7848.8818 8573.7354 -7849.1494 8572.335 -7848.603 8570.9541 c
--7848.0566 8569.5752 -7846.9014 8568.7363 -7846.0234 8569.085 c
--7845.145 8569.4326 -7844.877 8570.833 -7845.4233 8572.2139 c
--7845.9702 8573.5947 -7847.125 8574.4316 -7848.0034 8574.083 c
-b
-u
--7863.0566 8557.1592 m
--7863.8662 8557.1592 -7864.5239 8556.502 -7864.5239 8555.6934 c
--7864.5239 8554.8828 -7863.8662 8554.2266 -7863.0566 8554.2266 c
--7862.248 8554.2266 -7861.5913 8554.8828 -7861.5913 8555.6934 c
--7861.5913 8556.502 -7862.248 8557.1592 -7863.0566 8557.1592 c
-b
--7863.3159 8568.8799 m
--7864.5991 8568.8799 -7865.6382 8568.0049 -7865.6382 8566.9248 c
--7865.6382 8565.8447 -7864.5991 8564.9697 -7863.3159 8564.9697 c
--7862.0342 8564.9697 -7860.9951 8565.8447 -7860.9951 8566.9248 c
--7860.9951 8568.0049 -7862.0342 8568.8799 -7863.3159 8568.8799 c
-b
--7863.8457 8580.6709 m
--7865.3975 8580.6709 -7866.6558 8580.0146 -7866.6558 8579.2041 c
--7866.6558 8578.3936 -7865.3975 8577.7383 -7863.8457 8577.7383 c
--7862.293 8577.7383 -7861.0352 8578.3936 -7861.0352 8579.2041 c
--7861.0352 8580.0146 -7862.293 8580.6709 -7863.8457 8580.6709 c
-b
--7868.0679 8552.4092 m
--7868.811 8552.4092 -7869.4121 8551.6982 -7869.4121 8550.8213 c
--7869.4121 8549.9443 -7868.811 8549.2334 -7868.0679 8549.2334 c
--7867.3262 8549.2334 -7866.7241 8549.9443 -7866.7241 8550.8213 c
--7866.7241 8551.6982 -7867.3262 8552.4092 -7868.0679 8552.4092 c
-b
--7869.6758 8573.9678 m
--7868.7983 8573.6201 -7868.5298 8572.2188 -7869.0762 8570.8379 c
--7869.6226 8569.457 -7870.7778 8568.6201 -7871.6558 8568.9678 c
--7872.5342 8569.3164 -7872.8032 8570.7178 -7872.2568 8572.0967 c
--7871.7104 8573.4775 -7870.5552 8574.3154 -7869.6758 8573.9678 c
-b
-U
-U
-0 Ap
-0 0 0 1 k
--7859.1318 8552.6553 m
--7859.1318 8585.3145 l
-F
-u
--7843.3906 8538.5303 m
--7844.0815 8537.8369 -7847.019 8538.7021 Y
--7848.229 8538.874 -7848.0562 8541.2939 Y
--7847.019 8543.3682 -7847.7104 8543.1943 Y
--7848.2998 8543.1943 -7849.855 8543.1143 -7850.7822 8543.0635 C
--7851.1226 8541.6689 -7852.6128 8540.4756 -7854.7217 8539.7695 C
--7852.7578 8536.4775 -7854.5176 8535.7949 -7856.2935 8535.79 C
--7856.3096 8535.7021 -7856.332 8535.6162 -7856.3599 8535.5332 C
--7854.1089 8535.5791 -7853.6392 8533.2588 Y
--7853.4048 8533.0635 -7853.1606 8532.7861 -7852.9238 8532.4756 C
--7853.1416 8532.6475 -7853.2944 8532.7393 Y
--7854.2583 8532.7393 -7855.8774 8534.4941 -7856.4966 8535.207 C
--7856.9194 8534.4434 -7857.853 8533.9111 -7858.9434 8533.9111 c
--7860.0698 8533.9111 -7861.0322 8534.4795 -7861.4312 8535.2852 C
--7861.9985 8534.624 -7863.6968 8532.751 -7864.6943 8532.751 C
--7864.8462 8532.6572 -7865.064 8532.4854 V
--7864.8281 8532.7939 -7864.583 8533.0732 -7864.3481 8533.2686 C
--7863.8638 8535.6563 -7861.5254 8535.5342 V
--7861.5449 8535.5889 -7861.5674 8535.6436 -7861.5806 8535.7021 C
--7864.9238 8535.6924 -7863.937 8538.3174 -7863.2104 8539.6602 C
--7865.5918 8540.376 -7867.2646 8541.7012 -7867.5239 8543.25 C
--7868.4473 8543.2998 -7869.6729 8543.3584 -7870.1802 8543.3584 C
--7870.8726 8543.5313 -7869.835 8541.458 V
--7869.6626 8539.0391 -7870.8726 8538.8662 V
--7873.8096 8538.002 -7874.501 8538.6934 V
--7875.1919 8539.5566 -7876.0562 8538.3467 V
--7875.1919 8540.0752 -7873.291 8539.5566 V
--7870.6982 8538.8662 -7871.3906 8540.5938 V
--7871.9087 8544.0498 -7870.1802 8544.7402 V
--7868.0342 8545.8545 -7866.2822 8546.0889 V
--7865.9087 8546.4141 -7865.4639 8546.7109 -7864.958 8546.9766 C
--7867.5562 8547.0469 -7870.2246 8547.9209 -7871.0752 8550.9561 C
--7871.5151 8552.2432 -7872.0518 8554.2432 V
--7873.1025 8554.8252 -7874.3022 8556.0078 -7875.541 8558.2627 C
--7876.394 8561.4502 -7877.167 8556.7129 V
--7878.3975 8553.6494 -7879.6504 8553.5381 V
--7878.4702 8555.2871 -7878.9038 8556.416 V
--7877.2998 8560.917 -7875.6138 8559.8994 V
--7874.0986 8559.2197 -7872.688 8556.8154 V
--7873.0698 8558.4971 -7873.4326 8560.417 -7873.6743 8562.3906 C
--7874.4888 8562.3975 L
--7876.3506 8561.4795 -7876.3262 8564.959 V
--7877.1226 8568.9453 -7876.3594 8571.6826 V
--7875.647 8574.1504 -7878.1274 8572.9307 V
--7879.2842 8573.3242 -7879.9839 8572.7881 V
--7882.3882 8571.4131 -7884 8573.124 V
--7882.147 8572.8799 -7881.4482 8573.417 V
--7879.9785 8573.5615 -7879.897 8574.1787 V
--7876.9561 8574.8555 -7876.188 8574.0771 V
--7874.417 8573.2139 -7875.1304 8570.3604 V
--7875.8799 8562.4814 -7874.3198 8564.4053 V
--7874.1182 8564.4219 -7873.8784 8564.5176 V
--7874.1519 8568.4326 -7873.8018 8572.3252 -7871.9961 8574.8516 C
--7875.4536 8567.333 -7870.2974 8552.3037 Y
--7868.9609 8547.5303 -7863.127 8548.1016 -7860.145 8548.7344 C
--7860.0718 8550.1299 -7859.8374 8551.9492 -7859.1318 8552.6553 C
--7858.2134 8550.6963 -7858.2358 8549.0732 V
--7857.0762 8548.7217 -7850.2817 8546.8447 -7847.4487 8550.3369 C
--7848.4312 8547.8135 -7850.8262 8547.0186 -7853.2007 8546.9189 C
--7852.667 8546.6318 -7852.2041 8546.3047 -7851.8257 8545.9502 C
--7850.041 8545.7861 -7847.7104 8544.5771 Y
--7845.9814 8543.8857 -7846.5015 8540.4307 Y
--7847.1919 8538.7021 -7844.5991 8539.3936 Y
--7842.7002 8539.9111 -7841.835 8538.1836 Y
--7842.7002 8539.3936 -7843.3906 8538.5303 Y
-f
--7837.9082 8572.9521 m
--7838.6074 8573.4893 -7839.7632 8573.0938 Y
--7842.2446 8574.3135 -7841.5327 8571.8467 Y
--7840.769 8569.1104 -7841.564 8565.1221 Y
--7841.541 8561.6445 -7843.4014 8562.5596 Y
--7844.0342 8562.5557 L
--7844.3198 8560.6123 -7844.7046 8558.7549 -7845.0898 8557.1699 C
--7843.7129 8559.4199 -7842.2778 8560.0635 Y
--7840.5913 8561.082 -7838.9878 8556.5791 Y
--7839.4214 8555.4502 -7838.2417 8553.7021 Y
--7839.4937 8553.8125 -7840.7246 8556.876 Y
--7841.4976 8561.6152 -7842.3511 8558.4268 Y
--7843.5776 8556.1904 -7844.769 8555.0098 -7845.814 8554.4229 C
--7846.2026 8553.0635 -7846.4858 8552.2393 Y
--7846.7002 8551.4727 -7847.0337 8550.8486 -7847.4487 8550.3369 C
--7847.3799 8550.5127 -7847.3174 8550.6982 -7847.2632 8550.8916 C
--7841.3022 8568.2588 -7846.4858 8574.9971 V
--7853.2246 8584.5869 -7857.3721 8584.5869 V
--7860.9663 8584.6514 L
--7865.1138 8584.6514 -7871.853 8575.0615 Y
--7871.9038 8574.9961 -7871.9463 8574.9219 -7871.9961 8574.8516 C
--7871.7378 8575.4141 -7871.437 8575.9404 -7871.0752 8576.4092 C
--7864.3359 8586 -7860.189 8586 V
--7856.5942 8585.9346 L
--7852.4482 8585.9346 -7845.709 8576.3447 Y
--7843.5801 8573.5771 -7843.3306 8569.0176 -7843.7769 8564.6055 C
--7843.6553 8564.5752 -7843.5698 8564.5684 Y
--7842.0112 8562.6475 -7842.7598 8570.5244 Y
--7843.4746 8573.3789 -7841.7026 8574.2402 Y
--7840.9351 8575.0186 -7837.9946 8574.3428 Y
--7837.9136 8573.7256 -7836.4434 8573.5811 Y
--7835.7446 8573.0449 -7833.8921 8573.2881 Y
--7835.5024 8571.5771 -7837.9082 8572.9521 Y
-f
-U
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 34)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884.0254 8586.0264 m
--7828.0542 8586.0264 L
--7828.0542 8524.5342 L
--7884.0254 8524.5342 L
--7884.0254 8586.0264 L
-n
-u
-u
-0 O
-0.0745 0.9 0.9019 0.18 k
-0 R
-0 0 0 1 K
-1 J 1 j 0.0518 w
--7857.5991 8562.7217 m
--7857.3594 8573.5215 -7862.8794 8583.8398 v
--7862.4009 8586 -7860.959 8586 v
--7861.2002 8582.6406 -7860.2393 8582.1611 v
--7855.9199 8570.1602 -7856.6382 8562.2402 v
--7857.5991 8562.7217 l
-b
--7857.5991 8562.7217 m
--7859.2793 8568 -7871.0391 8569.2012 v
--7875.3594 8569.6807 -7875.5991 8571.1211 v
--7869.1206 8561.5195 -7868.1602 8561.7607 v
--7881.3594 8556.001 -7884 8550.7197 v
--7878.959 8553.6006 -7875.5991 8551.4404 v
--7867.6802 8551.2012 -7862.6406 8553.3613 v
--7858.8008 8555.2813 -7866.7202 8539.2012 v
--7862.8794 8550.9609 -7859.2793 8524.5605 v
--7858.3198 8529.8408 -7856.8799 8531.2813 v
--7850.8799 8538.9609 -7851.8398 8541.1211 v
--7852.3198 8544.9609 -7847.7598 8538.7207 v
--7848 8548.3213 -7850.4009 8551.6807 v
--7852.5591 8555.2813 -7846.5591 8553.1211 v
--7840.5591 8551.2012 -7835.2793 8552.8809 v
--7829.7598 8554.3203 -7828.0801 8551.4404 v
--7839.8398 8563.9209 -7845.5991 8563.6807 v
--7843.9194 8567.2813 l
--7841.519 8572.0811 -7842 8573.2813 v
--7857.2681 8563.8828 -7857.5991 8562.7217 v
-b
--7857.5991 8562.7217 m
--7854.959 8544.2402 -7857.5991 8536.5605 v
--7859.998 8526.001 -7859.2793 8524.5605 v
-S
--7856.1602 8551.4404 m
--7850.1602 8546.6406 -7848.959 8541.3604 v
-S
--7856.1602 8550.7197 m
--7865.0391 8543.041 -7866.7202 8539.2012 v
-S
--7828.0801 8551.4404 m
--7829.2793 8553.6006 -7857.3594 8561.7607 y
--7862.4009 8556.2422 -7873.9199 8553.8408 v
--7881.5986 8552.8809 -7884 8550.7197 v
-S
--7874.6382 8569.6807 m
--7863.1191 8560.5615 -7857.3594 8561.7607 y
--7843.1992 8568 -7842 8573.2813 v
-S
-U
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 36)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7883.8496 8585.9961 m
--7833.96 8585.9961 L
--7833.96 8534.9258 L
--7883.8496 8534.9258 L
--7883.8496 8585.9961 L
-n
-u
-0 O
-0.025 0.1 0.475 0 k
--7862.1504 8553.9043 m
--7864.4766 8552.8125 -7866.6914 8552.4434 -7868.373 8552.9238 c
--7869.0518 8553.1172 -7869.645 8553.4473 -7870.123 8553.9238 c
--7870.6006 8554.4023 -7870.9297 8554.9951 -7871.123 8555.6729 c
--7872.0088 8558.7715 -7870.0103 8563.6777 -7865.9233 8567.7666 c
--7861.834 8571.8535 -7856.9297 8573.8516 -7853.8286 8572.9668 c
--7853.1519 8572.7715 -7852.5586 8572.4424 -7852.0806 8571.9658 c
--7851.603 8571.4883 -7851.2754 8570.8955 -7851.082 8570.2168 c
--7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c
--7853.582 8561.21 -7854.791 8559.6133 -7856.2793 8558.123 c
--7858.1504 8556.2539 -7860.1914 8554.8242 -7862.1504 8553.9043 c
-f
-u
-0.0035 0.014 0.0665 0 k
--7861.2183 8552.9727 m
--7863.8306 8552.0215 -7866.3975 8551.9688 -7868.373 8552.9238 C
--7866.6914 8552.4434 -7864.4766 8552.8125 -7862.1504 8553.9043 c
--7861.6191 8554.1543 -7861.0806 8554.4434 -7860.543 8554.7676 C
--7858.8984 8554.0537 L
--7859.667 8553.6172 -7860.4434 8553.2539 -7861.2183 8552.9727 c
-f
-0.015 0.06 0.285 0 k
--7858.8984 8554.0537 m
--7860.543 8554.7676 L
--7859.0962 8555.6348 -7857.6426 8556.7607 -7856.2793 8558.123 c
--7856.1538 8558.25 -7856.0327 8558.3779 -7855.9102 8558.5059 C
--7855.2153 8556.8633 L
--7856.3706 8555.7236 -7857.6191 8554.7813 -7858.8984 8554.0537 C
-f
-U
-u
-0.039 0.156 0.741 0 k
--7849.687 8541.4043 m
--7849.9746 8541.6914 -7861.2183 8552.9727 Y
--7860.4434 8553.2539 -7859.667 8553.6172 -7858.8984 8554.0537 C
--7845.4146 8540.5703 L
--7847.061 8540.0996 -7848.6406 8540.3555 -7849.687 8541.4043 c
-f
-0.025 0.1 0.475 0 k
--7845.4146 8540.5703 m
--7858.8984 8554.0537 L
--7857.584 8554.8027 -7856.2969 8555.7754 -7855.1143 8556.957 c
--7855.084 8556.9863 -7855.0586 8557.0156 -7855.0278 8557.0449 C
--7841.3408 8543.3574 L
--7841.5264 8543.1328 -7841.7202 8542.9141 -7841.9302 8542.7012 c
--7843.0103 8541.623 -7844.2305 8540.9082 -7845.4146 8540.5703 C
-f
-U
-u
-0.0115 0.046 0.2185 0 k
--7835.9346 8550.3926 m
--7833.5337 8547.9893 -7833.335 8544.0898 -7835.1382 8540.6973 C
--7836.2954 8541.1182 L
--7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c
-f
-0.015 0.06 0.285 0 k
--7843.5337 8535.5957 m
--7842.582 8534.9258 L
--7845.2046 8534.3516 -7847.8306 8534.9141 -7849.6206 8536.7061 c
--7848.1719 8535.2578 -7845.9082 8534.9307 -7843.5337 8535.5957 C
-f
-0.0295 0.118 0.5605 0 k
--7843.5337 8535.5957 m
--7845.9082 8534.9307 -7848.1719 8535.2578 -7849.6206 8536.7061 c
--7851.019 8538.1055 -7851.3706 8540.2637 -7850.7954 8542.5469 C
--7848.8672 8539.5449 -7845.4082 8540.5537 V
--7843.585 8535.6309 L
--7843.5337 8535.5957 L
-f
-*u
-0.048 0.192 0.912 0 k
-1 D
--7835.9346 8550.3926 m
--7837.2817 8551.7383 -7839.332 8552.1133 -7841.5234 8551.627 C
--7851.6714 8561.7734 L
--7851.7695 8561.5684 -7851.7695 8561.5684 -7851.6714 8561.7734 c
--7850.2246 8564.8145 -7849.9702 8567.916 -7851.082 8570.2168 C
--7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c
--7853.5054 8561.3438 -7854.5918 8559.8848 -7855.9102 8558.5059 C
--7855.2153 8556.8633 L
--7855.1816 8556.8945 -7855.1465 8556.9238 -7855.1143 8556.957 c
--7855.084 8556.9883 -7855.0566 8557.0176 -7855.0273 8557.0469 c
--7855.0278 8557.0469 -7855.0278 8557.0469 -7855.0278 8557.0449 C
--7841.3408 8543.3574 L
--7836.3262 8541.1289 L
--7836.2954 8541.1182 L
--7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c
-f
-*U
-0.0215 0.086 0.4085 0 k
-0 D
--7842.582 8534.9258 m
--7843.5337 8535.5957 L
--7841.6846 8536.1113 -7839.7656 8537.2285 -7838.1138 8538.8828 c
--7837.4063 8539.5889 -7836.7998 8540.3418 -7836.2954 8541.1182 C
--7835.1382 8540.6973 L
--7835.6553 8539.7246 -7836.3374 8538.793 -7837.1802 8537.9512 c
--7838.7695 8536.3594 -7840.6758 8535.3428 -7842.582 8534.9258 C
-f
-0.0205 0.082 0.3895 0 k
--7836.2954 8541.1182 m
--7836.7998 8540.3418 -7837.4063 8539.5889 -7838.1138 8538.8828 c
--7839.7656 8537.2285 -7841.6846 8536.1113 -7843.5337 8535.5957 C
--7843.585 8535.6309 L
--7845.4082 8540.5537 L
--7844.2114 8540.9219 -7842.9878 8541.6436 -7841.9302 8542.7012 c
--7841.7202 8542.9141 -7841.5264 8543.1328 -7841.3408 8543.3574 C
--7836.3262 8541.1289 L
--7836.2954 8541.1182 L
-f
-U
-u
-0.445 0.356 0.267 0 k
--7883.8496 8585.9961 m
--7861.957 8562.9688 L
--7862.2007 8562.6494 -7862.5752 8562.6133 -7862.8887 8562.6592 C
--7867.1802 8567.2891 -7878.3145 8579.4561 -7882.7266 8584.2793 C
--7883.5649 8585.3516 -7884 8585.9932 -7883.8496 8585.9961 C
-f
-0.15 0.12 0.09 0 k
--7883.834 8585.9961 m
--7882.6606 8585.7031 -7861.6934 8564.0029 Y
--7861.6934 8563.502 -7861.7993 8563.1758 -7861.957 8562.9688 C
--7883.8496 8585.9961 L
--7883.8442 8585.9961 -7883.8418 8586 -7883.834 8585.9961 c
-f
-0.2 0.16 0.12 0 k
--7882.7266 8584.2793 m
--7878.3145 8579.4561 -7867.1802 8567.2891 -7862.8887 8562.6592 C
--7863.2002 8562.7041 -7863.4526 8562.8301 Y
--7864.603 8563.1328 -7878.5742 8578.9619 -7882.7266 8584.2793 C
-f
-U
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 37)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7882.9502 8585.2324 m
--7833.0391 8585.2324 L
--7833.0391 8521.1152 L
--7882.9502 8521.1152 L
--7882.9502 8585.2324 L
-n
-u
-0 O
-0 0 0 1 k
-0 R
-0 0 0 1 K
-0 w
--7833.2358 8521.1152 m
--7833.6064 8521.248 -7833.9858 8521.2832 -7834.3833 8521.2031 c
--7834.4863 8521.168 l
--7834.5254 8521.1602 -7834.5703 8521.1787 -7834.6025 8521.1992 c
--7834.9434 8521.3926 l
--7838.7129 8523.2959 -7842.0962 8525.8965 -7844.5 8529.4473 c
--7845.9634 8531.5918 -7847.123 8533.8789 -7848.7993 8535.8564 c
--7849.1729 8536.209 -7849.1758 8536.7725 -7848.834 8537.1309 c
--7848.4951 8537.501 -7847.918 8537.5078 -7847.561 8537.165 c
--7847.4038 8537.21 l
--7847.2642 8537.1289 -7847.0742 8537.0703 -7847.0234 8536.957 c
--7845.853 8534.2031 -7845.1895 8531.5137 -7843.4336 8529.1387 c
--7841.1719 8526.0947 -7838.1777 8523.9941 -7835.0298 8522.0234 c
--7834.3672 8521.6055 L
--7834.4966 8521.6348 L
--7833.7695 8521.6426 l
--7833.791 8521.6113 -7833.8008 8521.5957 -7833.8223 8521.5645 C
--7833.6064 8521.5234 -7833.377 8521.4746 -7833.1626 8521.4336 c
--7833.0762 8521.4238 -7833.0186 8521.3389 -7833.0391 8521.2383 c
--7833.0503 8521.1523 -7833.1382 8521.1084 -7833.2358 8521.1152 c
--7833.2358 8521.1152 l
-b
--7849.2222 8534.9951 m
--7849.5742 8534.8066 -7849.9658 8534.6719 -7850.248 8534.3887 c
--7856.4521 8528.1719 -7866.6802 8527.2734 -7874.0488 8533.6855 C
--7874.1582 8533.7813 -7874.1582 8533.957 -7874.063 8534.0645 C
--7871.0527 8532.9434 -7862.8838 8534.375 -7859.3223 8537.4121 C
--7859.2534 8537.4668 -7859.1465 8537.4531 -7859.1055 8537.3711 C
--7859.0503 8537.3047 -7859.0664 8537.1953 -7859.1328 8537.1563 C
--7862.5625 8534.0859 -7867.0674 8532.29 -7871.6729 8532.748 C
--7868.8535 8531.1855 -7865.6313 8530.4941 -7862.3984 8530.6885 c
--7857.7144 8530.9717 -7853.4634 8533.1191 -7849.3711 8535.2793 c
--7849.291 8535.3193 -7849.1978 8535.293 -7849.1553 8535.2109 C
--7849.1016 8535.1309 -7849.1426 8535.0352 -7849.2222 8534.9951 c
-b
--7858.647 8536.3359 m
--7860.2266 8540.3613 -7862.3911 8544.3203 -7865.8018 8547.0762 c
--7865.9648 8547.2119 -7865.9946 8547.4492 -7865.8711 8547.6055 c
--7865.7344 8547.7676 -7865.5049 8547.7793 -7865.3481 8547.6563 c
--7861.123 8545.5967 -7858.1904 8541.1309 -7858.1626 8536.4014 c
--7858.1626 8536.4014 l
--7858.1328 8536.2676 -7858.2354 8536.1348 -7858.3633 8536.1221 c
--7858.5039 8536.1055 -7858.6318 8536.1973 -7858.647 8536.3359 c
--7858.647 8536.3359 l
-b
--7852.9414 8541.0176 m
--7853.042 8541.1816 -7853.1152 8541.3838 -7853.2617 8541.4824 c
--7856.0806 8543.3906 -7858.9785 8544.6309 -7861.8848 8546.1328 c
--7862.0503 8546.209 -7862.1118 8546.418 -7862.0313 8546.5703 c
--7861.9512 8546.7227 -7861.7559 8546.7793 -7861.5898 8546.7041 c
--7858.439 8545.3232 -7854.313 8544.5 -7852.6729 8541.1797 c
--7852.6289 8541.1113 -7852.6455 8541.0146 -7852.7266 8540.9648 c
--7852.7959 8540.9199 -7852.897 8540.9492 -7852.9414 8541.0176 c
--7852.9414 8541.0176 l
-b
--7852.6602 8541.918 m
--7852.4438 8542.4297 -7852.1431 8542.8896 -7852.0503 8543.4355 c
--7851.2183 8548.2773 -7851.1152 8553.042 -7852.248 8557.6875 c
--7852.248 8557.6875 l
--7852.3418 8557.9531 -7852.2114 8558.2441 -7851.9438 8558.3389 c
--7851.6777 8558.4336 -7851.3882 8558.3125 -7851.2935 8558.0479 c
--7849.293 8552.8115 -7849.897 8546.7373 -7852.3711 8541.7832 c
--7852.4063 8541.7002 -7852.498 8541.6689 -7852.582 8541.6914 c
--7852.6641 8541.7275 -7852.6978 8541.835 -7852.6602 8541.918 c
--7852.6602 8541.918 l
-b
--7851.5352 8557.5938 m
--7848.8984 8555.2275 -7846.6816 8552.252 -7845.853 8548.7363 c
--7845.853 8548.7363 l
--7845.7246 8548.1816 -7846.0742 8547.623 -7846.6416 8547.4902 c
--7847.1992 8547.375 -7847.7578 8547.7246 -7847.8862 8548.2793 c
--7848.5649 8551.5313 -7849.8711 8554.6729 -7851.7954 8557.3867 c
--7851.7954 8557.3867 l
--7851.8462 8557.4551 -7851.834 8557.5576 -7851.7695 8557.6201 c
--7851.6992 8557.6699 -7851.5977 8557.6582 -7851.5352 8557.5938 c
--7851.5352 8557.5938 l
-b
--7836.3711 8550.1826 m
--7837.7114 8545.8301 -7840.2598 8542.0693 -7843.689 8539.1533 C
--7843.729 8539.0723 -7843.8242 8539.0322 -7843.9038 8539.0859 C
--7843.9863 8539.127 -7844.0122 8539.2207 -7843.9722 8539.3018 C
--7843.957 8539.7891 -7843.7144 8540.2334 -7843.4458 8540.5313 c
--7838.4063 8546.1621 -7834.9902 8554.7197 -7837.3433 8561.9551 C
--7837.0762 8556.4512 -7838.7241 8550.3008 -7842.1362 8545.6738 c
--7843.1606 8544.2695 -7844.7422 8544.1211 -7846.3081 8544.2031 C
--7846.4023 8544.1895 -7846.4834 8544.2432 -7846.4961 8544.3369 c
--7846.5098 8544.4189 -7846.4551 8544.5137 -7846.3623 8544.5254 C
--7843.1479 8545.7695 -7841.4878 8549.2246 -7840.084 8552.1943 c
--7838.415 8555.7441 -7837.7017 8559.6387 -7838.0054 8563.5 C
--7838.0454 8563.6777 -7838.1138 8565.3975 -7837.9775 8565.4102 C
--7837.8306 8565.4395 -7837.709 8565.3438 -7837.6802 8565.1943 C
--7837.645 8565.0449 -7834.6426 8555.7988 -7836.3711 8550.1826 c
-b
--7844.4863 8537.4912 m
--7843.3945 8533.6211 -7841.1094 8530.251 -7838.4824 8527.2383 c
--7838.3306 8527.1045 -7838.3145 8526.8867 -7838.4502 8526.7354 c
--7838.5752 8526.6006 -7838.8047 8526.582 -7838.957 8526.7178 c
--7842.3306 8529.332 -7843.4487 8533.541 -7844.7954 8537.375 c
--7844.7954 8537.375 l
--7844.8262 8537.4648 -7844.7754 8537.5586 -7844.6982 8537.5869 c
--7844.6094 8537.6191 -7844.5166 8537.5684 -7844.4863 8537.4912 c
--7844.4863 8537.4912 l
-b
--7838.5313 8562.1094 m
--7838.5991 8562.0566 -7838.707 8562.083 -7838.748 8562.1504 C
--7838.9634 8562.4746 -7840.6914 8564.5195 -7841.3926 8565.1406 c
--7846.1719 8569.3945 -7849.5137 8573.9609 -7857.5391 8577.7227 c
--7864.4512 8580.9639 -7867.1113 8583.5957 -7874.3862 8581.8262 c
--7877.687 8581.0293 -7879.0313 8580.5313 -7880.4351 8575.4551 C
--7881.9473 8569.2988 -7880.8672 8571.7832 -7881.084 8564.4385 c
--7881.2222 8559.6973 -7884 8548.4551 -7871.5254 8534.2598 C
--7871.4199 8534.1484 -7871.4336 8533.9961 -7871.5337 8533.9072 C
--7871.6328 8533.8027 -7871.7959 8533.8164 -7871.8862 8533.916 C
--7877.5786 8538.7168 -7881.0234 8545.6582 -7882.3145 8552.9424 c
--7883.2871 8558.4668 -7882.9199 8563.25 -7882.666 8569.6367 c
--7882.5688 8572.0938 -7883.6855 8579.0723 -7878.9102 8583.0625 c
--7875.3926 8586 -7870.3911 8585.5469 -7866.3545 8584.1563 c
--7860.6992 8582.2119 -7855.9727 8579.1465 -7850.8711 8575.6094 c
--7847.2656 8573.125 -7839.2881 8563.2852 -7838.4785 8562.3262 C
--7838.4351 8562.2588 -7838.4502 8562.1504 -7838.5313 8562.1094 C
-b
--7873.0503 8549.3057 m
--7872.168 8548.5029 -7871.7017 8549.8457 -7871.4297 8550.6016 c
--7871.1626 8551.3574 -7870.189 8551.25 -7870.5127 8551.5732 c
--7870.8369 8551.8975 -7870.8369 8551.9521 -7871.3232 8551.5195 c
--7871.8086 8551.0879 -7871.8086 8551.7363 -7872.5649 8551.25 c
--7873.3198 8550.7627 -7873.645 8549.8457 -7873.0503 8549.3057 c
-b
--7865.6519 8553.9492 m
--7865.3657 8553.5918 -7864.6802 8553.5723 -7864.4648 8553.8945 c
--7864.25 8554.2197 -7863.3306 8554.2734 -7863.4937 8554.5967 c
--7863.6543 8554.9219 -7863.6016 8555.1387 -7864.0874 8554.9219 c
--7864.5737 8554.7051 -7864.4121 8555.2998 -7864.897 8555.084 c
--7865.3833 8554.8672 -7865.8687 8554.2197 -7865.6519 8553.9492 c
-b
--7857.6074 8559.0791 m
--7857.1206 8558.7559 -7855.8794 8559.5117 -7856.4727 8559.5117 c
--7857.0674 8559.5117 -7856.311 8560.2676 -7856.8521 8560.4834 c
--7857.3906 8560.6992 -7857.2832 8560.4297 -7857.6074 8560.6445 c
--7857.9297 8560.8613 -7858.3633 8561.2393 -7858.5239 8560.4297 c
--7858.6855 8559.6191 -7858.3633 8559.6191 -7857.9849 8559.3496 c
--7857.6074 8559.0791 -7857.6074 8559.0791 y
-b
--7872.2402 8559.3496 m
--7871.1074 8559.2422 -7871.8633 8559.998 -7871.269 8560.4834 c
--7870.6738 8560.9697 -7869.918 8561.6172 -7870.729 8561.4004 c
--7871.5391 8561.1855 -7872.9961 8561.6719 -7872.9434 8560.5381 c
--7872.8887 8559.4033 -7872.6328 8559.3867 -7872.2402 8559.3496 c
-b
--7866.5703 8567.6113 m
--7866.1016 8567.3438 -7866.6802 8567.7197 -7866.0303 8567.6113 c
--7865.3833 8567.5039 -7864.7886 8567.6113 -7865.2207 8567.8281 c
--7865.6519 8568.0439 -7866.3008 8568.1523 -7866.4634 8567.9893 c
--7866.625 8567.8281 -7866.9473 8567.8281 -7866.5703 8567.6113 c
-b
--7857.0674 8567.1797 m
--7857.4785 8566.1797 -7856.0962 8566.4238 -7855.4473 8566.7461 c
--7854.7998 8567.0723 -7853.8262 8566.4775 -7854.4209 8566.9102 c
--7855.0137 8567.3418 -7854.7998 8566.9102 -7855.3926 8567.2334 c
--7855.9873 8567.5566 -7856.6895 8568.0977 -7857.0674 8567.1797 c
-b
--7872.6738 8573.0664 m
--7872.7222 8572.0752 -7871.8086 8572.957 -7871.269 8573.0117 c
--7870.729 8573.0664 -7870.0801 8573.0664 -7870.2432 8573.2813 c
--7870.4038 8573.498 -7870.459 8573.498 -7871.1626 8573.7129 c
--7871.8633 8573.9297 -7872.6191 8574.1445 -7872.6738 8573.0664 c
-b
--7873.1582 8567.6113 m
--7874.0664 8567.9746 -7874.293 8567.8809 -7874.5625 8568.2051 c
--7874.834 8568.5293 -7875.1558 8569.2314 -7875.5352 8568.0977 c
--7875.9121 8566.9629 -7875.4282 8565.7764 -7875.0479 8565.9375 c
--7874.6714 8566.0996 -7874.293 8566.7461 -7873.8618 8566.9629 c
--7873.4297 8567.1797 -7872.6191 8567.3945 -7873.1582 8567.6113 c
-b
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 41)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884 8586 m
--7803 8586 L
--7803 8481 L
--7884 8481 L
--7884 8586 L
-n
-u
-u
-u
-0 O
-0 0 0 1 k
--7865.8057 8498.4258 m
--7866.0742 8496.6621 -7867.1602 8495.291 -7868.5239 8495.3965 c
--7869.8862 8495.502 -7870.707 8497.0234 -7870.7432 8498.8066 c
--7870.748 8499.0693 -7870.6743 8500.2441 -7870.6304 8500.4775 C
--7870.6382 8500.582 -7870.6191 8500.6738 -7870.6104 8500.7803 c
--7870.5142 8502.0254 -7869.3574 8503.3604 -7867.9414 8503.25 c
--7866.5249 8503.1406 -7865.4897 8501.8613 -7865.6367 8500.4727 c
--7865.644 8500.4072 -7865.6958 8499.626 -7865.707 8499.5625 C
--7865.6816 8499.2852 -7865.7598 8498.7256 -7865.8057 8498.4258 c
-f
--7876.2646 8507.7334 m
--7876.9946 8515.916 -7871.5015 8515.1191 v
--7868.3682 8514.0186 -7869.4414 8511.1211 v
--7869.6426 8509.752 -7871.7847 8508.498 v
--7872.146 8508.25 -7872.7632 8507.1016 v
--7873.1294 8505.5977 -7874.5186 8505.2979 v
--7876.0762 8505.251 -7876.2646 8507.7334 v
-f
--7850.7646 8516.4971 m
-F
--7850.0762 8514.3408 m
--7850.7847 8513.1934 -7853.8848 8513.6279 Y
--7854.811 8513.6885 -7855.3799 8513.1113 Y
--7857.8394 8509.0918 -7861.0386 8509.8857 -7861.4082 8509.9932 C
--7861.4097 8509.9863 L
--7864.999 8510.6045 -7865.2666 8515.6035 V
--7865.4912 8516.3828 -7866.335 8516.7695 V
--7869.2695 8517.8613 -7869.3481 8519.208 V
--7869.8999 8521.1152 -7867.6006 8521.7422 V
--7865.6792 8522.2568 -7863.7886 8519.8945 V
--7862.6113 8518.6797 -7859.5762 8517.9395 V
--7859.5728 8517.9531 L
--7856.3594 8517.0459 -7854.6392 8517.5889 Y
--7851.8521 8518.7676 -7850.4063 8517.4014 Y
--7848.6826 8515.7559 -7850.0762 8514.3408 Y
-f
--7863.9834 8497.8789 m
--7864.5854 8496.2002 -7864.2822 8494.4775 -7863.0327 8493.9229 c
--7861.7842 8493.3672 -7860.3384 8494.3164 -7859.4585 8495.8672 c
--7859.3286 8496.0957 -7858.8359 8497.165 -7858.7632 8497.3906 C
--7858.7065 8497.4785 -7858.6792 8497.5684 -7858.6362 8497.667 c
--7858.1289 8498.8086 -7858.5122 8500.5303 -7859.8105 8501.1074 c
--7861.1089 8501.6855 -7862.6279 8501.0527 -7863.1582 8499.7617 c
--7863.1831 8499.7002 -7863.5078 8498.9883 -7863.5298 8498.9268 C
--7863.6831 8498.6963 -7863.8809 8498.166 -7863.9834 8497.8789 c
-f
--7849.7129 8500.9316 m
--7845.1802 8507.7822 -7850.3911 8509.6943 v
--7853.6714 8510.2168 -7854.103 8507.1572 v
--7854.5786 8505.8564 -7853.29 8503.7354 v
--7853.0903 8503.3447 -7853.0938 8502.04 v
--7853.4858 8500.5449 -7852.4082 8499.6182 v
--7851.0591 8498.8359 -7849.7129 8500.9316 v
-f
-U
-u
--7824.7358 8550.1074 m
--7824.3687 8548.3623 -7824.9048 8546.6963 -7826.2183 8546.3164 c
--7827.5322 8545.9375 -7828.8345 8547.0752 -7829.4937 8548.7324 c
--7829.5903 8548.9775 -7829.9326 8550.1025 -7829.9746 8550.3369 C
--7830.0176 8550.4326 -7830.0322 8550.5244 -7830.0625 8550.6279 c
--7830.4087 8551.8271 -7829.7935 8553.4805 -7828.4282 8553.875 c
--7827.063 8554.2695 -7825.645 8553.4365 -7825.2969 8552.085 c
--7825.2793 8552.0205 -7825.0552 8551.2705 -7825.0425 8551.207 C
--7824.9214 8550.9551 -7824.7983 8550.4053 -7824.7358 8550.1074 c
-f
--7838.2705 8554.6172 m
--7841.8242 8562.0244 -7836.3999 8563.2061 v
--7833.0801 8563.2754 -7833.0688 8560.1846 v
--7832.7778 8558.8311 -7834.3433 8556.9072 v
--7834.5942 8556.5459 -7834.7695 8555.2539 v
--7834.5854 8553.7188 -7835.7793 8552.9492 v
--7837.2222 8552.3594 -7838.2705 8554.6172 v
-f
--7817.4648 8571.7695 m
-F
--7816.063 8569.9912 m
--7816.3247 8568.6689 -7819.3799 8567.9883 Y
--7820.27 8567.7197 -7820.5986 8566.9795 Y
--7821.4922 8562.3535 -7824.7666 8561.9746 -7825.1494 8561.9453 C
--7825.1494 8561.9395 L
--7828.7271 8561.2588 -7830.731 8565.8467 V
--7831.2153 8566.4961 -7832.1416 8566.5625 V
--7835.272 8566.5557 -7835.8169 8567.7891 V
--7837.0039 8569.3809 -7835.0713 8570.7764 V
--7833.4526 8571.9316 -7830.853 8570.3818 V
--7829.3242 8569.6582 -7826.2222 8570.0293 V
--7826.2231 8570.042 L
--7822.896 8570.3213 -7821.4766 8571.4326 Y
--7819.2793 8573.5146 -7817.4463 8572.7432 Y
--7815.2554 8571.8057 -7816.063 8569.9912 Y
-f
--7822.8374 8550.2354 m
--7822.813 8548.4512 -7821.9258 8546.9453 -7820.5601 8546.8633 c
--7819.1943 8546.7803 -7818.1743 8548.1768 -7817.895 8549.9385 c
--7817.854 8550.1973 -7817.7666 8551.3711 -7817.7778 8551.6094 C
--7817.7559 8551.7109 -7817.7617 8551.8037 -7817.7559 8551.9121 c
--7817.6807 8553.1592 -7818.644 8554.6367 -7820.0625 8554.7217 c
--7821.4814 8554.8066 -7822.6826 8553.6826 -7822.7246 8552.2871 c
--7822.7271 8552.2217 -7822.7822 8551.4404 -7822.7798 8551.375 C
--7822.8433 8551.1045 -7822.8423 8550.54 -7822.8374 8550.2354 c
-f
--7811.0186 8557.5625 m
--7809.1777 8565.5684 -7814.7271 8565.5303 v
--7817.9834 8564.8691 -7817.3154 8561.8516 v
--7817.3032 8560.4668 -7815.353 8558.9326 v
--7815.0278 8558.6377 -7814.5742 8557.415 v
--7814.417 8555.876 -7813.083 8555.3877 v
--7811.5454 8555.1279 -7811.0186 8557.5625 v
-f
-U
-U
-1 Ap
--7884 8586 m
--7884 8481 L
--7803 8481 L
--7803 8586 L
--7884 8586 L
-n
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 42)
-0 A
-u
-0 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7857.4609 8559.085 m
--7885 8559.085 L
--7885 8586.624 L
--7857.4609 8586.624 L
--7857.4609 8559.085 L
-n
-0 O
-0 0.55 1 0.12 k
--7871.7598 8577.3623 m
--7871.7598 8587 L
--7870.6343 8587 L
--7870.6343 8577.3623 L
--7871.7598 8577.3623 L
-f
-0 0.55 1 0.3 k
--7875.4233 8572.876 m
--7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c
--7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C
--7857.5718 8572.874 L
--7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c
--7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C
-f
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 45)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7885 8543.918 m
--7885 8587 L
--7798.2217 8587 L
--7798.2217 8543.918 L
--7885 8543.918 L
-n
-u
-u
-0 O
-0 0 0 1 k
--7825.2217 8573.2363 m
--7825.2217 8581.0742 L
--7813.2217 8574.1445 L
--7801.2217 8567.2168 L
--7813.2217 8560.2891 L
--7825.2217 8553.3613 L
--7825.2217 8561.4824 L
--7883.9351 8547.7168 L
--7870.9878 8566.8027 L
--7885 8587 L
--7825.2217 8573.2363 L
-f
-0 1 1 0.1 k
-0 R
-0 0 0 1 K
--7823.2217 8570.2363 m
--7823.2217 8578.0742 L
--7811.2217 8571.1445 L
--7799.2217 8564.2168 L
--7811.2217 8557.2891 L
--7823.2217 8550.3613 L
--7823.2217 8558.4824 L
--7881.9351 8544.7168 L
--7867.2754 8564.3594 L
--7881.9351 8584 L
--7823.2217 8570.2363 L
-b
-U
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 50)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884 8586 m
--7756.877 8586 L
--7756.877 8538.415 L
--7884 8538.415 L
--7884 8586 L
-n
-u
-*u
-0 O
-0.9529 0.949 0.1961 0.0745 k
--7857.793 8570.417 m
--7857.8232 8570.2676 L
--7859.9849 8564.3643 -7860.9438 8561.6377 -7861.2754 8560.2891 c
--7861.3657 8560.2891 L
--7861.6953 8561.6074 -7862.7754 8564.335 -7864.9673 8570.2676 c
--7864.9966 8570.417 L
--7857.793 8570.417 l
-f
-1 D
--7868.1182 8578.9678 m
--7869.6191 8582.5371 -7870.3994 8584.709 -7868.1182 8584.917 c
--7868.1182 8585.9678 L
--7870.6992 8585.9375 -7873.5806 8585.917 -7876.3418 8585.917 c
--7880.0649 8585.917 -7882.5273 8585.9375 -7884 8585.9678 c
--7884 8584.917 L
--7882.1064 8584.709 -7881.0542 8582.5674 -7873.5513 8565.5029 c
--7861.6953 8538.415 L
--7859.8638 8538.415 L
--7848.1582 8565.5029 L
--7840.8047 8582.5078 -7839.7246 8584.709 -7837.8887 8584.917 c
--7837.8887 8585.9678 L
--7839.5142 8585.9375 -7841.916 8585.917 -7845.5767 8585.917 c
--7848.5488 8585.917 -7851.6694 8585.9375 -7854.7026 8585.9678 c
--7854.7026 8584.917 L
--7852.481 8584.709 -7853.3218 8582.5078 -7854.7617 8578.9678 C
--7868.1182 8578.9678 l
-f
-*U
-*u
-0 D
--7813.0762 8554.0811 m
--7813.0762 8550.4717 -7815.3535 8548.0947 -7819.1294 8548.0947 c
--7820.2383 8548.0947 -7821.0767 8548.2158 -7821.5273 8548.2451 c
--7821.5273 8560.5479 L
--7820.8672 8560.6084 -7820.208 8560.6084 -7819.729 8560.6084 c
--7818.2002 8560.6084 -7816.7026 8560.127 -7815.6841 8559.4053 c
--7814.3945 8558.5332 -7813.0762 8556.7881 -7813.0762 8554.1416 C
--7813.0762 8554.0811 l
-f
-1 D
--7832.0806 8558.3926 m
--7832.0806 8542.6445 -7832.0806 8540.4287 -7834.542 8540.2783 c
--7834.542 8539.3184 L
--7833.042 8539.2588 -7830.3174 8539.1992 -7827.5664 8539.1689 c
--7825.6538 8539.1084 -7822.3945 8539.0186 -7820.1479 8538.9775 c
--7816.582 8538.9775 -7813.585 8539.4258 -7811.0049 8540.2627 c
--7806.353 8541.8477 -7801.9702 8545.8525 -7801.9702 8553.6602 c
--7801.9702 8558.7432 -7804.4014 8562.3193 -7806.5034 8564.0605 c
--7807.583 8565.0215 -7808.8135 8565.832 -7809.7744 8566.3125 c
--7809.7744 8566.4629 L
--7807.5234 8569.4912 -7805.6025 8572.0625 -7799.3906 8580.6426 c
--7797.5 8583.0645 -7795.9102 8584.7383 -7794.7402 8584.9775 c
--7794.7402 8586 L
--7796.6602 8586 -7799 8585.8848 -7801.1294 8585.8848 c
--7803.3511 8585.8848 -7804.8521 8586 -7806.4424 8586 c
--7807.6729 8586 -7808.7241 8585.9404 -7809.5039 8585.2725 c
--7813.0151 8579.8477 -7816.9121 8573.7559 -7820.1182 8568.7139 c
--7820.5078 8568.7139 -7820.957 8568.7139 -7821.5273 8568.7139 c
--7821.5273 8571.2852 L
--7821.5273 8582.5264 -7821.437 8584.7686 -7819.1895 8584.9775 c
--7819.1895 8585.9697 L
--7820.6279 8585.9404 -7823.9194 8585.915 -7826.6992 8585.915 c
--7829.9287 8585.915 -7832.8921 8585.9404 -7834.5122 8585.9697 c
--7834.5122 8584.9775 L
--7832.0518 8584.7686 -7832.0806 8582.5264 -7832.0806 8565.5918 C
--7832.0806 8558.3926 l
-f
-*U
-*u
-0 D
--7781.4561 8565.5928 m
--7781.4561 8582.4941 -7781.4561 8584.6484 -7784.2832 8584.9775 C
--7784.2832 8585.9697 l
--7782.3887 8585.9404 -7779.0542 8585.915 -7775.7822 8585.915 c
--7772.6294 8585.915 -7769.5688 8585.9404 -7767.2881 8585.9697 C
--7767.2881 8584.9775 l
--7770.2578 8584.9775 -7770.2881 8582.5244 -7770.2881 8565.5928 C
--7770.2881 8548.1514 L
--7762.8193 8548.1514 l
--7759.999 8548.1514 -7758.5298 8548.96 -7757.8994 8551.2627 C
--7756.9072 8551.2627 l
--7756.9072 8546.4697 -7756.877 8542.415 -7756.877 8539.1709 c
--7761.3486 8539.2012 -7766.748 8539.2314 -7772.0601 8539.2314 C
--7779.7446 8539.2314 l
--7784.5537 8539.2314 -7789.9966 8539.2012 -7794.9614 8539.1709 c
--7794.9614 8542.3848 -7794.9326 8546.4697 -7794.9326 8551.2627 C
--7793.9072 8551.2627 l
--7793.3657 8549.1094 -7791.771 8548.1514 -7788.9438 8548.1514 C
--7781.4561 8548.1514 l
--7781.4561 8565.5928 L
-f
-*U
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 62)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7885 8587 m
--7885 8548.7305 L
--7846.7305 8548.7305 L
--7846.7305 8587 L
--7885 8587 L
-n
-0 O
-1 0.14 0.09 0 k
--7846.7305 8569.9043 m
--7846.7305 8561.3408 L
--7885 8561.3408 L
--7885 8569.9043 L
--7846.7305 8569.9043 L
-f
--7846.7305 8573.0967 m
--7846.7305 8572.4229 L
--7885 8572.4229 L
--7885 8573.0967 L
--7846.7305 8573.0967 L
-f
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 63)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7885 8587 m
--7885 8548.7305 L
--7846.7305 8548.7305 L
--7846.7305 8587 L
--7885 8587 L
-n
-0 O
-1 0.14 0.09 0 k
--7846.7305 8565.8262 m
--7846.7305 8574.3896 L
--7859.3408 8574.3896 L
--7859.3408 8587 L
--7867.9038 8587 L
--7867.9063 8565.8262 L
--7867.9038 8565.8262 L
--7867.9038 8565.8252 L
--7846.7305 8565.8262 L
-f
--7846.7305 8563.3076 m
--7870.4233 8563.3076 L
--7870.4233 8587 L
--7871.0967 8587 L
--7871.0977 8562.6328 L
--7846.7305 8562.6328 L
--7846.7305 8563.3076 L
-f
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 64)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7885 8586.999 m
--7885 8548.7285 L
--7846.7305 8548.7285 L
--7846.7305 8586.999 L
--7885 8586.999 L
-n
-0 O
-1 0.14 0.09 0 k
--7846.7305 8561.3389 m
--7872.3896 8561.3389 L
--7872.3896 8586.999 L
--7863.8262 8587 L
--7863.8262 8569.9033 L
--7846.7305 8569.9033 L
--7846.7305 8561.3389 L
-f
--7846.7305 8572.4219 m
--7861.3081 8572.4219 L
--7861.3081 8587 L
--7860.6338 8587 L
--7860.6338 8573.0957 L
--7846.7305 8573.0957 L
--7846.7305 8572.4219 L
-f
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 65)
-0 A
-u
-1 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7857.0625 8559.4609 m
--7884.6025 8559.4609 L
--7884.6025 8587 L
--7857.0625 8587 L
--7857.0625 8559.4609 L
-n
-0 O
-0 0.55 1 0.12 k
--7856.8418 8572.7002 m
--7885 8572.7002 L
--7885 8573.8252 L
--7856.8418 8573.8252 L
--7856.8418 8572.7002 L
-f
-u
-0 0.55 1 0.3 k
--7883.9814 8560.5215 m
--7884.4102 8562.5254 -7883.1865 8566.1514 -7880.0874 8569.251 c
--7876.9878 8572.3496 -7873.3457 8573.6602 -7871.3594 8573.1455 C
--7871.3594 8573.1455 L
--7870.875 8571.1895 -7872.1519 8567.5117 -7875.25 8564.4141 c
--7878.3457 8561.3184 -7882.0122 8560.1064 -7883.9814 8560.5215 C
-f
-0 0.39 0.7 0.12 k
--7883.9814 8585.9912 m
--7884.4102 8583.9883 -7883.1865 8580.3613 -7880.0874 8577.2617 c
--7876.9878 8574.1641 -7873.3457 8572.8535 -7871.3594 8573.3672 C
--7871.3594 8573.3672 L
--7870.875 8575.3242 -7872.1519 8579.001 -7875.25 8582.0996 c
--7878.3457 8585.1953 -7882.0122 8586.4063 -7883.9814 8585.9912 C
-f
-U
-u
-0 0.55 1 0.3 k
--7870.1782 8585.9912 m
--7870.6074 8583.9883 -7869.3838 8580.3613 -7866.2842 8577.2617 c
--7863.1855 8574.1641 -7859.543 8572.8535 -7857.5576 8573.3672 C
--7857.5566 8573.3672 L
--7857.0718 8575.3242 -7858.3496 8579.001 -7861.4473 8582.0996 c
--7864.543 8585.1953 -7868.209 8586.4063 -7870.1782 8585.9912 C
-f
-0 0.39 0.7 0.12 k
--7870.1782 8560.5215 m
--7870.6074 8562.5254 -7869.3838 8566.1514 -7866.2842 8569.251 c
--7863.1855 8572.3496 -7859.543 8573.6602 -7857.5576 8573.1455 C
--7857.5566 8573.1455 L
--7857.0718 8571.1895 -7858.3496 8567.5117 -7861.4473 8564.4141 c
--7864.543 8561.3184 -7868.209 8560.1064 -7870.1782 8560.5215 C
-f
-U
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 67)
-0 A
-u
-0 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7857.4609 8559.085 m
--7885 8559.085 L
--7885 8586.624 L
--7857.4609 8586.624 L
--7857.4609 8559.085 L
-n
-0 O
-0 0.55 1 0.12 k
--7871.7598 8577.3623 m
--7871.7598 8587 L
--7870.6343 8587 L
--7870.6343 8577.3623 L
--7871.7598 8577.3623 L
-f
-0 0.55 1 0.3 k
--7875.4233 8572.876 m
--7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c
--7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C
--7857.5718 8572.874 L
--7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c
--7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C
-f
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 69)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7857.4609 8559.4609 m
--7885 8559.4609 L
--7885 8587 L
--7857.4609 8587 L
--7857.4609 8559.4609 L
-n
-0 O
-0 0.55 1 0.3 k
--7875.4233 8573.252 m
--7874.3096 8571.5313 -7870.8809 8569.833 -7866.4966 8569.833 c
--7862.1152 8569.833 -7858.6138 8571.4824 -7857.5718 8573.25 C
--7857.5718 8573.25 L
--7858.6138 8574.9766 -7862.1152 8576.6738 -7866.4966 8576.6738 c
--7870.875 8576.6738 -7874.3242 8574.9375 -7875.4233 8573.252 C
-f
-U
-%AI8_EndBrushPattern
-%AI8_BeginBrushPattern
-(New Pattern 83)
-0 A
-u
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
--7884 8585.9355 m
--7670.4009 8585.9355 L
--7670.4009 8578.1348 L
--7884 8578.1348 L
--7884 8585.9355 L
-n
-0 O
-0 0 0 1 k
--7884 8582.0352 m
--7873.9858 8584.5273 -7867.187 8585.875 -7855.2007 8585.9355 c
--7842.2183 8586 -7777.2002 8585.9355 y
--7712.1816 8586 -7699.2002 8585.9355 v
--7687.2129 8585.875 -7680.415 8584.5273 -7670.4009 8582.0352 C
--7680.415 8579.543 -7687.2129 8578.1953 -7699.2002 8578.1348 c
--7712.1816 8578.0693 -7777.2002 8578.1348 y
--7842.2183 8578.0693 -7855.2007 8578.1348 v
--7867.187 8578.1953 -7873.9858 8579.543 -7884 8582.0352 C
-f
-U
-%AI8_EndBrushPattern
-%AI5_End_NonPrinting--
-%AI5_Begin_NonPrinting
-Np
-4 Bn
-%AI5_BeginGradient: (Black, White)
-(Black, White) 0 2 Bd
-[
-<
-FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
-D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
-AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
-87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
-5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
-37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
-0F0E0D0C0B0A09080706050403020100
->
-0 %_Br
-[
-0 0 50 100 %_BS
-%_0 0 50 100 Bs
-1 0 50 0 %_BS
-%_1 0 50 0 Bs
-BD
-%AI5_EndGradient
-%AI5_BeginGradient: (Chrome)
-(Chrome) 0 6 Bd
-[
-0
-<
-464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B
-3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130
-3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272626262625
-2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1B1B1B1B1A
-1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F
-0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504
-04040403030302020202010101010000
->
-<
-FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
-D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
-AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
-87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
-5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
-37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
-0F0E0D0C0B0A09080706050403020100
->
-<
-1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A
-1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515
-15151515151414141414141414131313131313131312121212121212121211111111111111111010
-1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C
-0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707
-07060606060606060606050505050505050504040404040404040303030303030303030202020202
-02020201010101010101010000000000
->
-1 %_Br
-0
-0.275
-1
-<
-6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544
-434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F
->
-1 %_Br
-0
-<
-00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B
-0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516
-161617171717181818181919191A1A1A1A1B1B1B1C1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021
-212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C
-2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637
-373738383838393939393A3A3A3B3B3B3B3C3C3C3D3D3D3D3E3E3E3E3F3F3F404040404141414142
-42424343434344444444454545464646
->
-<
-000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
-28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
-505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
-78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
-A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
-C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
-F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
->
-<
-00000101020203030304040505050606070708080809090A0A0B0B0B0C0C0D0D0D0E0E0F0F101010
-1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121
-222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232
-32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243
-434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354
-54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5E5F5F606061616162626363646464
-6565666666676768686969696A6A6B6B
->
-1 %_Br
-1
-0 %_Br
-<
-FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
-D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
-AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
-87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
-5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
-37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
-0F0E0D0C0B0A09080706050403020100
->
-<
-4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141
-414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535
-35343434333333323232323131313030302F2F2F2E2E2E2E2D2D2D2C2C2C2B2B2B2B2A2A2A292929
-282828282727272626262525252524242423232322222222212121202020201F1F1F1E1E1E1D1D1D
-1D1C1C1C1B1B1B1A1A1A1A1919191818181717171616161615151514141413131313121212111111
-101010100F0F0F0E0E0E0D0D0D0D0C0C0C0B0B0B0A0A0A0A09090908080807070707060606050505
-04040404030303020202010101010000
->
-0
-0
-1 %_Br
-[
-1 0 50 92 %_BS
-%_1 0 50 92 Bs
-0 0.275 1 0.12 1 50 59 %_BS
-%_0 0.275 1 0.12 1 50 59 Bs
-0 0.275 1 0.42 1 50 50 %_BS
-%_0 0.275 1 0.42 1 50 50 Bs
-1 0 50 49 %_BS
-%_1 0 50 49 Bs
-1 0 50 41 %_BS
-%_1 0 50 41 Bs
-1 0.3 0 0 1 50 0 %_BS
-%_1 0.3 0 0 1 50 0 Bs
-BD
-%AI5_EndGradient
-%AI5_BeginGradient: (Rainbow)
-(Rainbow) 0 6 Bd
-[
-<
-FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
-D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
-AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
-87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
-5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
-37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
-0F0E0D0C0B0A09080706050403020100
->
-1
-0
-0
-1 %_Br
-1
-<
-0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E
-2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556
-5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E
-7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6
-A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE
-CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6
-F7F8F9FAFBFCFDFEFF
->
-0
-0
-1 %_Br
-1
-<
-00000000000000000000000000000000000001010101010101010101010101010101010101010101
-01010101010101010101010101010202020202020202020202020202020202020202020202020202
-02020202020202020202030303030303030303030303030303030303030303030303030303030303
-03030303030304040404040404040404040404040404040404040404040404040404040404040404
-04040505050505050505050505050505050505050505050505050505050505050505050505050606
-06060606060606060606060606060606060606060606060606060606060606060607070707070707
-07070707070707070707070707070707
->
-<
-FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
-D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
-AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
-87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
-5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
-37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
-0F0E0D0C0B0A09080706050403020100
->
-0
-1 %_Br
-<
-000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
-28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
-505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
-78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
-A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
-C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
-F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
->
-0
-1
-0
-1 %_Br
-0
-<
-FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
-D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
-AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
-87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
-5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
-37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
-0F0E0D0C0B0A09080706050403020100
->
-1
-0
-1 %_Br
-[
-0 1 0 0 1 50 100 %_BS
-%_0 1 0 0 1 50 100 Bs
-1 1 0 0 1 50 80 %_BS
-%_1 1 0 0 1 50 80 Bs
-1 0.0279 0 0 1 50 60 %_BS
-%_1 0.0279 0 0 1 50 60 Bs
-1 0 1 0 1 50 40 %_BS
-%_1 0 1 0 1 50 40 Bs
-0 0 1 0 1 50 20 %_BS
-%_0 0 1 0 1 50 20 Bs
-0 1 1 0 1 50 0 %_BS
-%_0 1 1 0 1 50 0 Bs
-BD
-%AI5_EndGradient
-%AI5_BeginGradient: (Yellow & Orange Radial)
-(Yellow & Orange Radial) 1 2 Bd
-[
-0
-<
-0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122
-232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748
-494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F
-707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C
->
-<
-FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9
-F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2
-F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB
-EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E6
->
-0
-1 %_Br
-[
-0 0 1 0 1 52 19 %_BS
-%_0 0 1 0 1 52 19 Bs
-0 0.55 0.9 0 1 50 100 %_BS
-%_0 0.55 0.9 0 1 50 100 Bs
-BD
-%AI5_EndGradient
-%AI5_End_NonPrinting--
-%AI5_BeginPalette
-0 0 Pb
-0 0 0 0 k
-(WHITE) Pc
-1 1 1 1 ([Registration]) 0 Xs
-([Registration]) Pc
-0 0 0 1 k
-(C=0 M=0 Y=0 K=100) Pc
-Bb
-2 (Black, White) -7885 8587 0 0 1 0 0 1 0 0 Bg
-0 BB
-(Black, White) Pc
-Bb
-2 (Chrome) -7885 8587 0 0 1 0 0 1 0 0 Bg
-0 BB
-(Chrome) Pc
-Bb
-2 (Rainbow) -7885 8587 0 0 1 0 0 1 0 0 Bg
-0 BB
-(Rainbow) Pc
-Bb
-0 0 0 0 Bh
-2 (Yellow & Orange Radial) -7885 8587 0 0 1 0 0 1 0 0 Bg
-0 BB
-(Yellow & Orange Radial) Pc
-(Brick) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
-(Brick) Pc
-(Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
-(Confetti) Pc
-(Leaves - Fall ) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
-(Leaves - Fall ) Pc
-(Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
-(Stripes) Pc
-0.91 0.01 0.93 0 (PANTONE 354 2X CVC) 0 x
-(PANTONE 354 2X CVC) Pc
-0 1 0.91 0 (PANTONE 485 CVC) 0 x
-(PANTONE 485 CVC) Pc
-0 0.51 1 0 (PANTONE 152 CVC) 0 x
-(PANTONE 152 CVC) Pc
-PB
-%AI5_EndPalette
-%AI5_Begin_NonPrinting
-Np
-%AI8_BeginPluginObject
-(Adobe Brush Manager Order)
-(Adobe Brush Manager Order)
-( Adobe Calligraphic Brush Tool/ 6 pt Flat / Adobe Calligraphic Brush T) -
-(ool/ 10 pt Oval/ Adobe Calligraphic Brush Tool/ 12 pt Oval / Adobe Cal) -
-(ligraphic Brush Tool/ 20 pt Oval/ Adobe Calligraphic Brush Tool/ 25 pt) -
-( Round / Adobe Calligraphic Brush Tool/ 50 pt Flat/ Adobe Scatter Brus) -
-(h Tool/ Dog Tracks/ Adobe Scatter Brush Tool/ Fall Leaf/ Adobe Scatter) -
-( Brush Tool/ Ladybug/ Adobe Scatter Brush Tool/ Push Pin/ Adobe Scatte) -
-(r Brush Tool/ Strawberry/ Adobe Scatter Brush Tool/ Twinkle Star / Ado) -
-(be ArtOnPath Brush Tool/ Marker/ Adobe ArtOnPath Brush Tool/ Tapered S) -
-(troke/ Adobe ArtOnPath Brush Tool/ Arrow/ Adobe ArtOnPath Brush Tool/ ) -
-(Paintbrush/ Adobe ArtOnPath Brush Tool/ Type/ Adobe PatternOnPath Brus) -
-(h Tool/ Double Lines/ Adobe PatternOnPath Brush Tool/ Laurel/ Adobe Pa) -
-(tternOnPath Brush Tool/ Rope /) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Calligraphic Brush Tool)
-(6 pt Flat )
-(1 4 8 10 10 90 90 2 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Calligraphic Brush Tool)
-(10 pt Oval)
-(1 1 19 15 15 130 130 2 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Calligraphic Brush Tool)
-(12 pt Oval )
-(1 7 17 45 45 0 0 2 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Calligraphic Brush Tool)
-(20 pt Oval)
-(1 20 20 20 100 40 80 0 2 1 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Calligraphic Brush Tool)
-(25 pt Round )
-(1 10 40 100 100 0 0 2 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Calligraphic Brush Tool)
-(50 pt Flat)
-(1 40 60 0 0 44 44 0 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe ArtOnPath Brush Tool)
-(Arrow)
-(1 / New Pattern 45/ / / / / 5 0.898039 0 0 /  2 0 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe ArtOnPath Brush Tool)
-(Marker)
-(1 / New Pattern 8/ / / / / 0 0 /  1 1 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe ArtOnPath Brush Tool)
-(Paintbrush)
-(1 / New Pattern 5/ / / / / 1 0.5 0.85 1 0.45 /  0 0 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe ArtOnPath Brush Tool)
-(Tapered Stroke)
-(1 / New Pattern 83/ / / / / 1 0 0 0 1 /  1 1 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe ArtOnPath Brush Tool)
-(Type)
-(1 / New Pattern 50/ / / / / 1 0.952941 0.94902 0.196078 0.0745098 /  1) -
-( 0 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe PatternOnPath Brush Tool)
-(Double Lines)
-(1 / New Pattern 62/ New Pattern 63/ New Pattern 64/ / / 1 1 0.14 0.09 ) -
-(0 /  1 0 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe PatternOnPath Brush Tool)
-(Laurel)
-(1 / New Pattern 65/ New Pattern 42/ New Pattern 67/ / New Pattern 69/ ) -
-(1 0 0.55 1 0.3 /  1 0 1 0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe PatternOnPath Brush Tool)
-(Rope )
-(1 / New Pattern 1/ / / New Pattern 3/ New Pattern 6/ 5 0 0 0 /  1 0 1 ) -
-(0 1 0 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Scatter Brush Tool)
-(Dog Tracks)
-(1 /New Pattern 41/ 1 0 0 0 1 / 0 1 1 0 1 1 0 0 0 0 -90 -90 0 1 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Scatter Brush Tool)
-(Fall Leaf)
-(1 /New Pattern 34/ 1 0.0745 0.9 0.9019 0.18 / 0 0.602793 1 1 0.1 1 1 -) -
-(1 1 1 -180 180 1 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Scatter Brush Tool)
-(Ladybug)
-(1 /New Pattern 10/ 5 0.898039 0 0 / 0 1 1 0 0.803911 1.2 1 -1.55 1.55 ) -
-(1 -180 180 1 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Scatter Brush Tool)
-(Push Pin)
-(1 /New Pattern 36/ 1 0.025 0.1 0.475 0 / 0 1 1 0 0.401676 1 1 -1.06145) -
-( 1.06 1 -180 180 1 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Scatter Brush Tool)
-(Strawberry)
-(1 /New Pattern 37/ 1 0 0 0 1 / 0 0.803911 1 1 0.803911 1 1 -0.5 0.5 1 ) -
-(-75 75.419 1 0 0) .
-%AI8_EndPluginObject
-%AI8_BeginPluginObject
-(Adobe Scatter Brush Tool)
-(Twinkle Star )
-(1 /New Pattern 2/ 0 1 / 1 0.5 1 1 0.25 1 1 -0.5 0.5 1 0 0 0 0 0) .
-%AI8_EndPluginObject
-%AI5_End_NonPrinting--
-%AI5_Begin_NonPrinting
-Np
-%AI8_PluginGroupInfo
-(Adobe Path Blends) (Adobe Blends Plugin) (Live Blends)
-%AI8_PluginGroupInfo
-(Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool)
-%AI8_PluginGroupInfo
-(Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool)
-%AI8_PluginGroupInfo
-(Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool)
-%AI8_PluginGroupInfo
-(Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool)
-%AI5_End_NonPrinting--
-%%EndSetup
-%AI5_BeginLayer
-1 1 0 1 0 0 1 8 0 0 0 0 50 Lb
-(border) Ln
-0 A
-1 Ap
-0 R
-0 0 0 1 K
-800 Ar
-0 J 0 j 5.2327 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-390.7588 335.9102 m
-390.7588 333.4834 388.5283 331.5156 385.7754 331.5156 C
-220.209 331.5156 L
-217.457 331.5156 215.2256 333.4834 215.2256 335.9102 C
-215.2256 481.3916 L
-215.2256 483.8184 217.457 485.7856 220.209 485.7856 C
-385.7754 485.7856 L
-388.5283 485.7856 390.7588 483.8184 390.7588 481.3916 C
-390.7588 335.9102 L
-s
-LB
-%AI5_EndLayer--
-%AI5_BeginLayer
-1 1 0 1 0 0 1 20 102 102 0 0 50 Lb
-(tv) Ln
-0 A
-0 O
-0 0 0 1 k
-0 R
-0 0 0 1 K
-800 Ar
-0 J 0 j 3 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-377.3408 366.4893 m
-377.3408 363.1758 374.6543 360.4893 371.3408 360.4893 C
-234.6743 360.4893 L
-231.3608 360.4893 228.6743 363.1758 228.6743 366.4893 C
-228.6743 461.1563 L
-228.6743 464.4697 231.3608 467.1563 234.6743 467.1563 C
-371.3408 467.1563 L
-374.6543 467.1563 377.3408 464.4697 377.3408 461.1563 C
-377.3408 366.4893 L
-b
-0 0 0 0 k
-360.3711 382.1641 m
-360.3711 378.8506 357.6846 376.1641 354.3711 376.1641 C
-253.0381 376.1641 L
-249.7246 376.1641 247.0381 378.8506 247.0381 382.1641 C
-247.0381 444.1641 L
-247.0381 447.4775 249.7246 450.1641 253.0381 450.1641 C
-354.3711 450.1641 L
-357.6846 450.1641 360.3711 447.4775 360.3711 444.1641 C
-360.3711 382.1641 L
-b
-u
-0 Ap
-0 0 0 1 k
-1 w
-325.7354 369.5391 m
-322.2354 375.0391 318.2354 351.5391 342.2354 344.5391 c
-265.4619 344.5391 l
-289.4619 351.5391 285.4619 375.0391 281.9619 369.5391 c
-325.7354 369.5391 l
-b
-1 Ap
-1.0096 w
-342.9453 343.0273 m
-342.9453 342.1924 342.2539 341.5156 341.4043 341.5156 C
-266.0039 341.5156 L
-265.1523 341.5156 264.4639 342.1924 264.4639 343.0273 C
-264.4639 343.0273 L
-264.4639 343.8623 265.1523 344.5391 266.0039 344.5391 C
-341.4043 344.5391 L
-342.2539 344.5391 342.9453 343.8623 342.9453 343.0273 C
-342.9453 343.0273 L
-b
-U
-LB
-%AI5_EndLayer--
-%AI5_BeginLayer
-1 1 1 1 0 0 1 1 255 79 79 0 50 Lb
-(flames!) Ln
-0 A
-u
-0 Ap
-0 O
-0 0.51 1 0 (PANTONE 152 CVC) 0 x
-0 R
-0 0 0 1 K
-800 Ar
-0 J 0 j 3 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-268.1118 375.1055 m
-278.0723 371.9902 285.0166 362.1172 307.6953 356.7012 C
-328.5361 364.6758 339.9619 383.5098 345.8936 389.666 C
-343.8018 403.9888 340.0576 432.1499 332.6553 443.0522 C
-319.5771 453.9092 308.0566 485.27 318.7891 505.4521 C
-325.9775 515.9902 288.2168 468.6289 304.229 442.3589 C
-318.9365 416.1494 313.5049 417.688 311.5088 418.7856 C
-306.4565 424.1489 308.7578 428.8916 297.6426 440.9727 C
-282.4565 457.4297 280.1528 461.7734 296.6025 495.0522 C
-301.0166 499.0298 277.292 523.6685 275.7539 530.4106 C
-277.292 523.6685 293.3374 492.3101 277.8828 480.4922 C
-265.1763 462.8696 265.939 450.7354 264.7095 445.1323 C
-268.3765 438.5493 275.417 425.7495 278.5762 413.9326 C
-284.3765 406.5493 284.7471 391.6973 275.8027 404.2261 C
-273.8164 414.5488 252.376 431.5088 257.4292 460.0386 C
-269.9766 491.3496 240.8564 433.4292 244.603 410.4658 C
-256.2168 392.4688 270.3921 380.3086 268.1118 375.1055 C
-b
-0 1 0.91 0 (PANTONE 485 CVC) 0 x
-1 w
-263.0464 378.707 m
-271.0464 370.041 280.3799 358.707 303.0464 360.041 c
-325.7129 361.373 339.7129 382.041 341.7129 392.707 c
-343.7129 403.374 337.7129 432.708 327.0459 444.041 c
-316.3799 455.374 304.3794 488.041 313.7129 504.041 c
-323.0469 520.041 283.7129 470.707 299.7129 443.374 c
-315.7129 416.041 310.0547 417.644 306.7129 420.7075 c
-302.7129 424.374 305.1094 429.314 293.3799 442.041 c
-277.7129 459.041 275.3135 463.5659 292.3799 494.041 c
-297.0464 502.374 272.333 528.0396 y
-289.0469 495.3745 274.3799 480.041 v
-259.7129 464.7075 260.5073 452.0679 261.7129 446.041 c
-263.0464 439.374 270.3799 426.041 275.0464 416.041 c
-279.7129 406.041 280.0986 390.5684 272.3799 406.7075 c
-268.7129 414.374 246.3794 432.0405 254.7129 460.374 c
-264.7129 494.374 234.3799 434.041 242.3799 412.7075 c
-250.3799 391.373 263.0464 378.707 y
-b
-U
-LB
-%AI5_EndLayer--
-%AI5_BeginLayer
-1 1 0 1 0 0 1 2 79 255 79 0 50 Lb
-(text) Ln
-0 A
-1 To
-1 0 0 1 179.3335 327.2939 0 Tp
-0 Tv
-1 Ap
-800 Ar
-0 J 0 j 1 w 4 M []0 d
-%AI3_Note:
-0 D
-0 XR
-428.666 249.9619 m
-428.666 327.2939 L
-179.3335 327.2939 L
-179.3335 249.9619 L
-428.666 249.9619 L
-n
-TP
-14.3068 -43.125 Td
-2 Tr
-0 O
-0 0 0 1 k
-0 R
-0 1 0.91 0 (PANTONE 485 CVC) 0 X
-%_ 0 50 XQ
-/_Device 48 46.752 -7.1038 Tf
-0 Ts
-100 100 Tz
-0 Tt
-%_0 0 100 100 Xu
-%AI55J_GlyphSubst: GlyphSubstNone 
-1 TA
-%_ 0 XL
-0 TY
-0 TV
-36 0 Xb
-XB
-0 0 5 TC
-100 100 200 TW
-25 TG
-0 0 0 Ti
-1 Ta
-0 1 2 2 3 Th
-0 Tq
-240 Tg
-0 0 Tl
-0 Tc
-0 Tw
-(XSCREENSA) Tx 1 91 Tk
-(VER) Tx 1 0 Tk
-(\r) TX 
-TO
-LB
-%AI5_EndLayer--
-%%PageTrailer
-gsave annotatepage grestore showpage
-%%Trailer
-Adobe_Illustrator_AI5 /terminate get exec
-Adobe_shading_AI8 /terminate get exec
-Adobe_ColorImage_AI6 /terminate get exec
-Adobe_typography_AI5 /terminate get exec
-Adobe_cshow /terminate get exec
-Adobe_level2_AI5 /terminate get exec
-%%EOF
index e0925d0fc783792eb1403a835c916d218030ed2d..fc5cea13e7f7e9d25681e0c48452acbf240b2e02 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1997, 1998
+/* xscreensaver, Copyright (c) 1992, 1997, 1998, 2001
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -137,6 +137,7 @@ get_pixel_resource (char *res_name, char *res_class,
   XColor color;
   char *s = get_string_resource (res_name, res_class);
   char *s2;
+  Bool ok = True;
   if (!s) goto DEFAULT;
 
   for (s2 = s + strlen(s) - 1; s2 > s; s2--)
@@ -147,22 +148,42 @@ get_pixel_resource (char *res_name, char *res_class,
 
   if (! XParseColor (dpy, cmap, s, &color))
     {
-      fprintf (stderr, "%s: can't parse color %s\n", progname, s);
+      fprintf (stderr, "%s: can't parse color %s", progname, s);
+      ok = False;
       goto DEFAULT;
     }
   if (! XAllocColor (dpy, cmap, &color))
     {
-      fprintf (stderr, "%s: couldn't allocate color %s\n", progname, s);
+      fprintf (stderr, "%s: couldn't allocate color %s", progname, s);
+      ok = False;
       goto DEFAULT;
     }
   free (s);
   return color.pixel;
  DEFAULT:
   if (s) free (s);
-  return ((strlen(res_class) >= 10 &&
-          !strcmp ("Background", res_class + strlen(res_class) - 10))
-         ? BlackPixel (dpy, DefaultScreen (dpy))
-         : WhitePixel (dpy, DefaultScreen (dpy)));
+
+  {
+    Bool black_p = (strlen(res_class) >= 10 &&
+                    !strcasecmp ("Background",
+                                 res_class + strlen(res_class) - 10));
+    if (!ok)
+      fprintf (stderr, ": using %s.\n", (black_p ? "black" : "white"));
+    color.flags = DoRed|DoGreen|DoBlue;
+    color.red = color.green = color.blue = (black_p ? 0 : 0xFFFF);
+    if (XAllocColor (dpy, cmap, &color))
+      return color.pixel;
+    else
+      {
+        fprintf (stderr, "%s: couldn't allocate %s either!\n", progname,
+                 (black_p ? "black" : "white"));
+        /* We can't use BlackPixel/WhitePixel here, because we don't know
+           what screen we're allocating on (only an issue when running inside
+           the xscreensaver daemon: for hacks, DefaultScreen is fine.)
+         */
+        return 0;
+      }
+  }
 }
 
 
index 4746c99ff648b16fb43265f8dda6235bad76b548..1531d72a6cd537376bb5b5f5bbd5a75851ab70a1 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
-       "@(#)xscreensaver 3.34 (25-Oct-2001), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 4.00 (21-Nov-2001), by Jamie Zawinski (jwz@jwz.org)";
index 1b18d21c2c82d2d1f72b44ed96e6c9f1e73a2fff..1904d75cf38ca09561ddca54a38240e44327ca92 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title:          xscreensaver
-Version:        3.34
-Entered-date:   25OCT01
+Version:        4.00
+Entered-date:   02JAN02
 Description:    A modular screen saver and locker for the X Window System.
                 Highly customizable: allows the use of any program that
                 can draw on the root window as a display mode.
@@ -10,16 +10,16 @@ Keywords:       screen saver, screen lock, lock, xlock, X11
 Author:         jwz@jwz.org (Jamie Zawinski)
 Maintained-by:  jwz@jwz.org (Jamie Zawinski)
 Primary-site:   http://www.jwz.org/xscreensaver/
-                1661K xscreensaver-3.34.tar.gz
-                51K   xscreensaver.README
+                 xscreensaver-4.00.tar.gz
+                54K   xscreensaver.README
                 1K    xscreensaver.lsm
 Alternate-site: sunsite.unc.edu /pub/Linux/X11/screensavers/
-                1661K xscreensaver-3.34.tar.gz
-                51K   xscreensaver.README
+                 xscreensaver-4.00.tar.gz
+                54K   xscreensaver.README
                 1K    xscreensaver.lsm
 Alternate-site: ftp.x.org /contrib/applications/
-                1661K xscreensaver-3.34.tar.gz
-                51K   xscreensaver.README
+                 xscreensaver-4.00.tar.gz
+                54K   xscreensaver.README
                 1K    xscreensaver.lsm
 Platforms:      Linux, Irix, SunOS, Solaris, HPUX, AIX, FreeBSD, NetBSD,
                 BSDI, SCO, OSF1, Ultrix, VMS.
index 619d51f7c5ccc29f018d4afa8c34bf7984f9f1d9..1ffda636d1715e8e55e2816b4c7c3be2787568ce 100644 (file)
@@ -1,5 +1,5 @@
 %define        name            xscreensaver
-%define        version         3.34
+%define        version         4.00
 %define        release         1
 %define        serial          1
 %define        x11_prefix      /usr/X11R6
@@ -75,9 +75,7 @@ RPMOPTS=""
 
 CFLAGS="$RPM_OPT_FLAGS" \
  ./configure --prefix=%{x11_prefix} \
-             --enable-subdir=../lib/xscreensaver \
-             --with-zippy=/usr/games/fortune \
-             --without-setuid-hacks \
+             --with-setuid-hacks \
              $RPMOPTS
 
 make
@@ -126,6 +124,7 @@ list_files() {
   cd ../driver; list_files install-program install-scripts ) \
    > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-non-gl
 ( cd hacks/glx ; list_files install ) \
+   | grep -v man1/xscreensaver-gl-helper \
    > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-gl
 
 
@@ -145,90 +144,6 @@ install -m 4755 driver/xscreensaver $RPM_BUILD_ROOT%{x11_prefix}/bin
 #
 chmod -R a+r,u+w,og-w $RPM_BUILD_ROOT
 
-
-# This is a tricky part...
-#
-# xscreensaver installs several files that are also installed by the
-# "control-center" RPM.  The versions from xscreensaver are better,
-# and so should override control-center.  But, the way RPM works,
-# if the xscreensaver RPM contained those files, the end user would
-# have to "--force" to make the xscreensaver RPM install.  That's
-# not something people are used to doing, so that's Bad.
-#
-# So instead, we rename the files so that they don't conflict with
-# the control center.  Then we have a "%post" script that creates
-# symbolic links to our files.
-
-CCDIR=$RPM_BUILD_ROOT%{gnome_ccdir}
-PADIR=$RPM_BUILD_ROOT%{gnome_paneldir}
-CADIR=$RPM_BUILD_ROOT%{gnome_prefix}/bin
-DESKF=screensaver-properties.desktop
-CAPLT=screensaver-properties-capplet
-
-if [ -f $CCDIR/$DESKF ]; then
-  mv $CCDIR/$DESKF $CCDIR/x$DESKF
-  mv $PADIR/$DESKF $PADIR/x$DESKF
-  mv $CADIR/$CAPLT $CADIR/x$CAPLT
-fi
-
-%post
-# This part runs on the end user's system, when the RPM is installed.
-# (See comment above, at end of "%install" section.)
-
-verbose=0
-
-overwrite_links() {
-  dir="$1"
-  oname="$2"
-  nname="$3"
-
-  # only do this if the file we're making a link *to* exists
-  # (i.e., was present in this rpm.)
-  #
-  if [ -f "$dir/$nname" ]; then
-
-    # backup or delete the old version, if any.
-    #
-    existed=0
-    if [ -f "$dir/$oname" ]; then
-      existed=1
-      if [ -f "$dir/$oname.rpmsave" ]; then
-        rm -f "$dir/$oname"
-        if [ $verbose -gt 1 ]; then
-          echo "$dir/$oname.rpmsave already exists"  >&2
-        fi
-      else
-        mv "$dir/$oname" "$dir/$oname.rpmsave"
-        if [ $verbose -gt 1 ]; then
-          echo "saved $dir/$oname as $oname.rpmsave" >&2
-        fi
-      fi
-    fi
-
-    # install a relative symlink to the new name.
-    #
-    ln -s "$nname" "$dir/$oname"
-    if [ $verbose -ge 1 ]; then
-      if [ $existed = 1 ] ; then
-        echo "replaced $dir/$oname" >&2
-      else
-        echo "created $dir/$oname"  >&2
-      fi
-    fi
-  fi
-}
-
-CCDIR=%{gnome_ccdir}
-PADIR=%{gnome_paneldir}
-CADIR=%{gnome_prefix}/bin
-DESKF=screensaver-properties.desktop
-CAPLT=screensaver-properties-capplet
-
-overwrite_links $CCDIR $DESKF x$DESKF
-overwrite_links $PADIR $DESKF x$DESKF
-overwrite_links $CADIR $CAPLT x$CAPLT
-
-
 %clean
 if [ -d $RPM_BUILD_ROOT    ]; then rm -r $RPM_BUILD_ROOT    ; fi
 if [ -d $RPM_BUILD_ROOT-gl ]; then rm -r $RPM_BUILD_ROOT-gl ; fi