Index: /trunk/psLib/test/Makefile.am
===================================================================
--- /trunk/psLib/test/Makefile.am	(revision 4546)
+++ /trunk/psLib/test/Makefile.am	(revision 4547)
@@ -1,7 +1,3 @@
-# not a GNU package. You can remove this line, if
-# have all needed files, that a GNU package needs
-AUTOMAKE_OPTIONS = foreign 1.4
-
-SUBDIRS = astronomy collections dataManip dataIO image sysUtils
+SUBDIRS = $(SRCDIRS)
 
 EXTRA_DIST = runTest FullUnitTest
Index: /trunk/psLib/test/astro/Makefile.am
===================================================================
--- /trunk/psLib/test/astro/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/astro/Makefile.am	(revision 4547)
@@ -0,0 +1,61 @@
+ #Makefile for astro tests of psLib
+#
+
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS =  \
+	tst_psCoord \
+    tst_psCoord01 \
+	tst_psTime_01 \
+	tst_psTime_02 \
+	tst_psTime_03 \
+	tst_psTime_04
+
+tst_psTime_01_SOURCES = tst_psTime_01.c
+tst_psTime_02_SOURCES = tst_psTime_02.c
+tst_psTime_03_SOURCES = tst_psTime_03.c
+tst_psTime_04_SOURCES = tst_psTime_04.c
+tst_psCoord_SOURCES = tst_psCoord.c
+tst_psCoord01_SOURCES = tst_psCoord01.c
+
+check_DATA = \
+	psTime.config \
+	test.psTime.config1 \
+	test.psTime.config2 \
+	test.psTime.config3 \
+	test.psTime.config4 \
+	test.ser7.dat
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = export PS_CONFIG_FILE="psTime.config" && perl $(top_srcdir)/test/runTest --verified=$(srcdir)/verified
+
+EXTRA_DIST = data verified
+
+tests: $(check_DATA) $(TESTS)
+
+CLEANFILES = $(TESTS) $(check_DATA) temp/*
+
+psTime.config: $(top_srcdir)/etc/pslib/psTime.config.template
+	sed 's|PREFIX|$(top_srcdir)|' $? > $@
+
+test.psTime.config1: data/test.psTime.config1.template
+	cp $? $@
+
+test.psTime.config2: data/test.psTime.config2.template
+	sed 's|PREFIX|$(top_srcdir)|' $? > $@
+
+test.psTime.config3: data/test.psTime.config3.template
+	sed 's|PREFIX|$(top_srcdir)|' $? > $@
+
+test.psTime.config4: data/test.psTime.config4.template
+	cp $? $@
+
+test.ser7.dat: data/test.ser7.dat
+	cp $? $@
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
+
+
Index: /trunk/psLib/test/astro/data/psTime.config.template
===================================================================
--- /trunk/psLib/test/astro/data/psTime.config.template	(revision 4547)
+++ /trunk/psLib/test/astro/data/psTime.config.template	(revision 4547)
@@ -0,0 +1,23 @@
+# This configuration file specifies values required for time calculations by psLib.
+psLib.time.tables.dir STR PREFIX/share/pslib                                            # Directory for time tables
+psLib.time.tables.n S32 4                                                               # Number of time tables
+psLib.time.tables.files STR ser7.dat eopc01_1900_2004.dat finals_all.dat tai_utc.dat    # These are the table file names
+@psLib.time.tables.from F64 53258.0, 15020.0, 41684.0 2437300.5                         # Valid from these dates
+@psLib.time.tables.to F64 53622.0, 53258.0, 53627.0 2451179.5                           # Valid to these dates
+psLib.time.before.xp F64 0.0                                                            # Value of XP for before the earliest MJD
+psLib.time.before.yp F64 0.0                                                            # Value of YP for before the earliest MJD
+psLib.time.before.dut F64 0.0                                                           # Value of UT1-UTC for before the earliest MJD
+
+# Now follows formulae for predicting ahead of the most recent available table entry.
+# xp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# yp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# A = 2*pi*(MJD - pslib.time.predict.mjd)/365.25
+# C = 2*pi*(MJD - pslib.time.predict.mjd)/435.0
+# dut = ut1-utc = [0] + [1]*(MJD - [2]) - (UT2-UT1)
+# ut2-ut1 = 0.022 sin(2*pi*T) - 0.012 cos(2*pi*T) - 0.006 sin(4*pi*T) + 0.007 cos(4*pi*T)
+# T = 2000.0 + (MJD - 51544.03)/365.2422
+@psLib.time.predict.xp F64 0.0569, 0.0555, -0.0200, 0.0513, 0.1483
+@psLib.time.predict.yp F64 0.3498, -0.0176, -0.0498, 0.1483, -0.0513
+psLib.time.predict.mjd F64 53257.0
+@psLib.time.predict.dut F64 -0.4944, -0.00023, 53262.0
+
Index: /trunk/psLib/test/astro/data/test.psTime.config1.template
===================================================================
--- /trunk/psLib/test/astro/data/test.psTime.config1.template	(revision 4547)
+++ /trunk/psLib/test/astro/data/test.psTime.config1.template	(revision 4547)
@@ -0,0 +1,23 @@
+# This configuration file specifies values required for time calculations by psLib.
+psLib.time.tables.dir STR bogus                                                    # Directory for time tables
+psLib.time.tables.n S32 4                                                               # Number of time tables
+psLib.time.tables.files STR ser7.dat eopc01_1900_2004.dat finals_all.dat tai_utc.dat    # These are the table file names
+@psLib.time.tables.from F64 53258.0, 15020.0, 41684.0 2437300.5                         # Valid from these dates
+@psLib.time.tables.to F64 53622.0, 53258.0, 53627.0 2451179.5                           # Valid to these dates
+psLib.time.before.xp F64 0.0                                                            # Value of XP for before the earliest MJD
+psLib.time.before.yp F64 0.0                                                            # Value of YP for before the earliest MJD
+psLib.time.before.dut F64 0.0                                                           # Value of UT1-UTC for before the earliest MJD
+
+# Now follows formulae for predicting ahead of the most recent available table entry.
+# xp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# yp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# A = 2*pi*(MJD - pslib.time.predict.mjd)/365.25
+# C = 2*pi*(MJD - pslib.time.predict.mjd)/435.0
+# dut = ut1-utc = [0] + [1]*(MJD - [2]) - (UT2-UT1)
+# ut2-ut1 = 0.022 sin(2*pi*T) - 0.012 cos(2*pi*T) - 0.006 sin(4*pi*T) + 0.007 cos(4*pi*T)
+# T = 2000.0 + (MJD - 51544.03)/365.2422
+@psLib.time.predict.xp F64 0.0569, 0.0555, -0.0200, 0.0513, 0.1483
+@psLib.time.predict.yp F64 0.3498, -0.0176, -0.0498, 0.1483, -0.0513
+psLib.time.predict.mjd F64 53257.0
+@psLib.time.predict.dut F64 -0.4944, -0.00023, 53262.0
+
Index: /trunk/psLib/test/astro/data/test.psTime.config2.template
===================================================================
--- /trunk/psLib/test/astro/data/test.psTime.config2.template	(revision 4547)
+++ /trunk/psLib/test/astro/data/test.psTime.config2.template	(revision 4547)
@@ -0,0 +1,23 @@
+# This configuration file specifies values required for time calculations by psLib.
+psLib.time.tables.dir STR PREFIX/share/pslib                                            # Directory for time tables
+psLib.time.tables.n S32 4                                                               # Number of time tables
+psLib.time.tables.files STR eopc01_1900_2004.dat finals_all.dat tai_utc.dat    # These are the table file names
+@psLib.time.tables.from F64 53258.0, 15020.0, 41684.0 2437300.5                         # Valid from these dates
+@psLib.time.tables.to F64 53622.0, 53258.0, 53627.0 2451179.5                           # Valid to these dates
+psLib.time.before.xp F64 0.0                                                            # Value of XP for before the earliest MJD
+psLib.time.before.yp F64 0.0                                                            # Value of YP for before the earliest MJD
+psLib.time.before.dut F64 0.0                                                           # Value of UT1-UTC for before the earliest MJD
+
+# Now follows formulae for predicting ahead of the most recent available table entry.
+# xp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# yp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# A = 2*pi*(MJD - pslib.time.predict.mjd)/365.25
+# C = 2*pi*(MJD - pslib.time.predict.mjd)/435.0
+# dut = ut1-utc = [0] + [1]*(MJD - [2]) - (UT2-UT1)
+# ut2-ut1 = 0.022 sin(2*pi*T) - 0.012 cos(2*pi*T) - 0.006 sin(4*pi*T) + 0.007 cos(4*pi*T)
+# T = 2000.0 + (MJD - 51544.03)/365.2422
+@psLib.time.predict.xp F64 0.0569, 0.0555, -0.0200, 0.0513, 0.1483
+@psLib.time.predict.yp F64 0.3498, -0.0176, -0.0498, 0.1483, -0.0513
+psLib.time.predict.mjd F64 53257.0
+@psLib.time.predict.dut F64 -0.4944, -0.00023, 53262.0
+
Index: /trunk/psLib/test/astro/data/test.psTime.config3.template
===================================================================
--- /trunk/psLib/test/astro/data/test.psTime.config3.template	(revision 4547)
+++ /trunk/psLib/test/astro/data/test.psTime.config3.template	(revision 4547)
@@ -0,0 +1,23 @@
+# This configuration file specifies values required for time calculations by psLib.
+psLib.time.tables.dir STR PREFIX/share/pslib                                            # Directory for time tables
+psLib.time.tables.n S32 4                                                               # Number of time tables
+psLib.time.tables.files STR ser7.dat eopc01_1900_2004.dat finals_all.dat tai_utc.dat    # These are the table file names
+@psLib.time.tables.from F64 15020.0, 41684.0 2437300.5                         # Valid from these dates
+@psLib.time.tables.to F64 53622.0, 53258.0, 53627.0 2451179.5                           # Valid to these dates
+psLib.time.before.xp F64 0.0                                                            # Value of XP for before the earliest MJD
+psLib.time.before.yp F64 0.0                                                            # Value of YP for before the earliest MJD
+psLib.time.before.dut F64 0.0                                                           # Value of UT1-UTC for before the earliest MJD
+
+# Now follows formulae for predicting ahead of the most recent available table entry.
+# xp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# yp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# A = 2*pi*(MJD - pslib.time.predict.mjd)/365.25
+# C = 2*pi*(MJD - pslib.time.predict.mjd)/435.0
+# dut = ut1-utc = [0] + [1]*(MJD - [2]) - (UT2-UT1)
+# ut2-ut1 = 0.022 sin(2*pi*T) - 0.012 cos(2*pi*T) - 0.006 sin(4*pi*T) + 0.007 cos(4*pi*T)
+# T = 2000.0 + (MJD - 51544.03)/365.2422
+@psLib.time.predict.xp F64 0.0569, 0.0555, -0.0200, 0.0513, 0.1483
+@psLib.time.predict.yp F64 0.3498, -0.0176, -0.0498, 0.1483, -0.0513
+psLib.time.predict.mjd F64 53257.0
+@psLib.time.predict.dut F64 -0.4944, -0.00023, 53262.0
+
Index: /trunk/psLib/test/astro/data/test.psTime.config4.template
===================================================================
--- /trunk/psLib/test/astro/data/test.psTime.config4.template	(revision 4547)
+++ /trunk/psLib/test/astro/data/test.psTime.config4.template	(revision 4547)
@@ -0,0 +1,23 @@
+# This configuration file specifies values required for time calculations by psLib.
+psLib.time.tables.dir STR .                                                             # Directory for time tables
+psLib.time.tables.n S32 1                                                               # Number of time tables
+psLib.time.tables.files STR test.ser7.dat                                               # This the table file
+@psLib.time.tables.from F64 53258.0                                                     # Valid from this date
+@psLib.time.tables.to F64 53622.0                                                       # Valid to this date
+psLib.time.before.xp F64 0.0                                                            # Value of XP for before the earliest MJD
+psLib.time.before.yp F64 0.0                                                            # Value of YP for before the earliest MJD
+psLib.time.before.dut F64 0.0                                                           # Value of UT1-UTC for before the earliest MJD
+
+# Now follows formulae for predicting ahead of the most recent available table entry.
+# xp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# yp = [0] + [1]*cos A + [2]*sin A + [3]*cos C + [4]*sin C
+# A = 2*pi*(MJD - pslib.time.predict.mjd)/365.25
+# C = 2*pi*(MJD - pslib.time.predict.mjd)/435.0
+# dut = ut1-utc = [0] + [1]*(MJD - [2]) - (UT2-UT1)
+# ut2-ut1 = 0.022 sin(2*pi*T) - 0.012 cos(2*pi*T) - 0.006 sin(4*pi*T) + 0.007 cos(4*pi*T)
+# T = 2000.0 + (MJD - 51544.03)/365.2422
+@psLib.time.predict.xp F64 0.0569
+@psLib.time.predict.yp F64 0.3498
+psLib.time.predict.mjd F64 53257.0
+@psLib.time.predict.dut F64 -0.4944
+
Index: /trunk/psLib/test/astro/data/test.ser7.dat
===================================================================
--- /trunk/psLib/test/astro/data/test.ser7.dat	(revision 4547)
+++ /trunk/psLib/test/astro/data/test.ser7.dat	(revision 4547)
@@ -0,0 +1,380 @@
+#  ser7.dat
+#
+#  This file comes from http://maia.usno.navy.mil (Click on General Information about Earth Orientation). This
+#  file may also be directly downloaded from ftp://maia.usno.navy.mil/ser7/ser7.dat. See readme.ser7 (located
+#  in the psLib/data directory) for details.
+#
+#  @author Ross Harman, MHPCC
+#
+#  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+#  @date $Date: 2005-07-13 02:46:58 $
+#
+#
+#        MJD         PM-x        PM-y       UT1-UTC
+#      (days)      (arcsec)    (arcsec)      (sec)
+        psF64        psF64       psF64       psF64
+        53yyy244       0.1377      0.5027     -0.45210
+        53245       0.1394      0.5015     -0.45190
+        53246       0.1411      0.5002     -0.45197
+        53247       0.1429      0.4989     -0.45234
+        53248       0.1447      0.4976     -0.45293
+        53249       0.1465      0.4962     -0.45361
+        53250       0.1484      0.4948     -0.45424
+        53251       0.1503      0.4934     -0.45476
+        53252       0.1521      0.4920     -0.45512
+        53253       0.1540      0.4905     -0.45530
+        53254       0.1558      0.4890     -0.45531
+        53255       0.1577      0.4874     -0.45519
+        53256       0.1595      0.4859     -0.45497
+        53257       0.1613      0.4843     -0.45474
+        53258       0.1631      0.4827     -0.45458
+        53259       0.1649      0.4810     -0.45456
+        53260       0.1667      0.4794     -0.45474
+        53261       0.1684      0.4777     -0.45514
+        53262       0.1701      0.4760     -0.45578
+        53263       0.1717      0.4742     -0.45660
+        53264       0.1734      0.4725     -0.45754
+        53265       0.1750      0.4707     -0.45849
+        53266       0.1765      0.4689     -0.45932
+        53267       0.1780      0.4671     -0.45996
+        53268       0.1795      0.4652     -0.46036
+        53269       0.1810      0.4634     -0.46055
+        53270       0.1824      0.4615     -0.46061
+        53271       0.1838      0.4596     -0.46068
+        53272       0.1852      0.4576     -0.46086
+        53273       0.1865      0.4557     -0.46126
+        53274       0.1878      0.4537     -0.46192
+        53275       0.1890      0.4517     -0.46280
+        53276       0.1902      0.4497     -0.46382
+        53277       0.1914      0.4477     -0.46486
+        53278       0.1925      0.4457     -0.46581
+        53279       0.1936      0.4436     -0.46658
+        53280       0.1946      0.4415     -0.46715
+        53281       0.1956      0.4394     -0.46750
+        53282       0.1966      0.4373     -0.46766
+        53283       0.1976      0.4352     -0.46772
+        53284       0.1985      0.4331     -0.46773
+        53285       0.1993      0.4309     -0.46778
+        53286       0.2001      0.4288     -0.46795
+        53287       0.2009      0.4266     -0.46830
+        53288       0.2017      0.4244     -0.46887
+        53289       0.2024      0.4222     -0.46968
+        53290       0.2031      0.4200     -0.47071
+        53291       0.2037      0.4178     -0.47191
+        53292       0.2043      0.4155     -0.47317
+        53293       0.2049      0.4133     -0.47435
+        53294       0.2054      0.4111     -0.47536
+        53295       0.2059      0.4088     -0.47610
+        53296       0.2063      0.4065     -0.47659
+        53297       0.2067      0.4042     -0.47691
+        53298       0.2071      0.4020     -0.47718
+        53299       0.2075      0.3997     -0.47755
+        53300       0.2078      0.3974     -0.47811
+        53301       0.2080      0.3951     -0.47893
+        53302       0.2083      0.3928     -0.47998
+        53303       0.2085      0.3905     -0.48119
+        53304       0.2086      0.3881     -0.48247
+        53305       0.2088      0.3858     -0.48369
+        53306       0.2089      0.3835     -0.48477
+        53307       0.2089      0.3812     -0.48565
+        53308       0.2090      0.3789     -0.48630
+        53309       0.2089      0.3765     -0.48674
+        53310       0.2089      0.3742     -0.48701
+        53311       0.2088      0.3719     -0.48718
+        53312       0.2088      0.3696     -0.48732
+        53313       0.2086      0.3672     -0.48753
+        53314       0.2085      0.3649     -0.48785
+        53315       0.2082      0.3626     -0.48835
+        53316       0.2080      0.3603     -0.48906
+        53317       0.2077      0.3579     -0.48997
+        53318       0.2074      0.3556     -0.49106
+        53319       0.2071      0.3533     -0.49226
+        53320       0.2067      0.3510     -0.49344
+        53321       0.2063      0.3487     -0.49449
+        53322       0.2059      0.3464     -0.49531
+        53323       0.2054      0.3441     -0.49585
+        53324       0.2049      0.3418     -0.49618
+        53325       0.2044      0.3396     -0.49639
+        53326       0.2038      0.3373     -0.49664
+        53327       0.2032      0.3350     -0.49705
+        53328       0.2026      0.3328     -0.49769
+        53329       0.2020      0.3305     -0.49854
+        53330       0.2013      0.3283     -0.49953
+        53331       0.2006      0.3261     -0.50058
+        53332       0.1999      0.3239     -0.50158
+        53333       0.1991      0.3217     -0.50243
+        53334       0.1983      0.3195     -0.50308
+        53335       0.1975      0.3173     -0.50350
+        53336       0.1967      0.3151     -0.50369
+        53337       0.1958      0.3130     -0.50370
+        53338       0.1949      0.3108     -0.50358
+        53339       0.1940      0.3087     -0.50342
+        53340       0.1931      0.3066     -0.50329
+        53341       0.1921      0.3045     -0.50327
+        53342       0.1911      0.3024     -0.50340
+        53343       0.1901      0.3004     -0.50372
+        53344       0.1890      0.2983     -0.50423
+        53345       0.1880      0.2963     -0.50493
+        53346       0.1869      0.2943     -0.50574
+        53347       0.1858      0.2923     -0.50660
+        53348       0.1846      0.2903     -0.50739
+        53349       0.1835      0.2883     -0.50808
+        53350       0.1823      0.2864     -0.50851
+        53351       0.1811      0.2844     -0.50870
+        53352       0.1799      0.2825     -0.50874
+        53353       0.1786      0.2807     -0.50875
+        53354       0.1773      0.2788     -0.50890
+        53355       0.1760      0.2769     -0.50927
+        53356       0.1747      0.2751     -0.50987
+        53357       0.1734      0.2733     -0.51064
+        53358       0.1720      0.2715     -0.51148
+        53359       0.1707      0.2698     -0.51228
+        53360       0.1693      0.2680     -0.51295
+        53361       0.1679      0.2663     -0.51342
+        53362       0.1664      0.2646     -0.51367
+        53363       0.1650      0.2629     -0.51371
+        53364       0.1635      0.2613     -0.51357
+        53365       0.1620      0.2596     -0.51330
+        53366       0.1605      0.2580     -0.51298
+        53367       0.1590      0.2565     -0.51268
+        53368       0.1575      0.2549     -0.51247
+        53369       0.1559      0.2534     -0.51241
+        53370       0.1543      0.2519     -0.51253
+        53371       0.1528      0.2504     -0.51283
+        53372       0.1511      0.2489     -0.51331
+        53373       0.1495      0.2475     -0.51391
+        53374       0.1479      0.2461     -0.51458
+        53375       0.1463      0.2447     -0.51522
+        53376       0.1446      0.2434     -0.51574
+        53377       0.1429      0.2420     -0.51605
+        53378       0.1412      0.2407     -0.51614
+        53379       0.1395      0.2395     -0.51605
+        53380       0.1378      0.2382     -0.51590
+        53381       0.1361      0.2370     -0.51585
+        53382       0.1344      0.2358     -0.51603
+        53383       0.1326      0.2347     -0.51648
+        53384       0.1308      0.2335     -0.51717
+        53385       0.1291      0.2324     -0.51800
+        53386       0.1273      0.2313     -0.51881
+        53387       0.1255      0.2303     -0.51951
+        53388       0.1237      0.2293     -0.52000
+        53389       0.1219      0.2283     -0.52027
+        53390       0.1200      0.2273     -0.52032
+        53391       0.1182      0.2264     -0.52018
+        53392       0.1164      0.2255     -0.51992
+        53393       0.1145      0.2246     -0.51959
+        53394       0.1126      0.2237     -0.51928
+        53395       0.1108      0.2229     -0.51905
+        53396       0.1089      0.2221     -0.51897
+        53397       0.1070      0.2213     -0.51908
+        53398       0.1051      0.2206     -0.51939
+        53399       0.1032      0.2199     -0.51987
+        53400       0.1013      0.2192     -0.52050
+        53401       0.0994      0.2186     -0.52119
+        53402       0.0975      0.2180     -0.52187
+        53403       0.0956      0.2174     -0.52246
+        53404       0.0936      0.2168     -0.52288
+        53405       0.0917      0.2163     -0.52309
+        53406       0.0898      0.2158     -0.52311
+        53407       0.0878      0.2153     -0.52305
+        53408       0.0859      0.2149     -0.52303
+        53409       0.0840      0.2144     -0.52321
+        53410       0.0820      0.2141     -0.52368
+        53411       0.0801      0.2137     -0.52444
+        53412       0.0781      0.2134     -0.52542
+        53413       0.0761      0.2131     -0.52646
+        53414       0.0742      0.2128     -0.52744
+        53415       0.0722      0.2126     -0.52822
+        53416       0.0703      0.2124     -0.52877
+        53417       0.0683      0.2122     -0.52907
+        53418       0.0663      0.2120     -0.52916
+        53419       0.0644      0.2119     -0.52910
+        53420       0.0624      0.2118     -0.52897
+        53421       0.0605      0.2117     -0.52883
+        53422       0.0585      0.2117     -0.52876
+        53423       0.0566      0.2117     -0.52882
+        53424       0.0546      0.2117     -0.52907
+        53425       0.0526      0.2118     -0.52951
+        53426       0.0507      0.2118     -0.53014
+        53427       0.0487      0.2119     -0.53091
+        53428       0.0468      0.2121     -0.53174
+        53429       0.0449      0.2122     -0.53254
+        53430       0.0429      0.2124     -0.53321
+        53431       0.0410      0.2126     -0.53368
+        53432       0.0391      0.2129     -0.53392
+        53433       0.0372      0.2131     -0.53393
+        53434       0.0352      0.2134     -0.53380
+        53435       0.0333      0.2138     -0.53366
+        53436       0.0314      0.2141     -0.53365
+        53437       0.0296      0.2145     -0.53389
+        53438       0.0277      0.2149     -0.53443
+        53439       0.0258      0.2154     -0.53526
+        53440       0.0239      0.2159     -0.53627
+        53441       0.0221      0.2164     -0.53733
+        53442       0.0202      0.2169     -0.53830
+        53443       0.0184      0.2174     -0.53908
+        53444       0.0166      0.2180     -0.53964
+        53445       0.0147      0.2186     -0.53998
+        53446       0.0129      0.2192     -0.54014
+        53447       0.0111      0.2198     -0.54018
+        53448       0.0093      0.2205     -0.54018
+        53449       0.0076      0.2212     -0.54022
+        53450       0.0058      0.2219     -0.54037
+        53451       0.0040      0.2227     -0.54069
+        53452       0.0023      0.2234     -0.54118
+        53453       0.0005      0.2242     -0.54185
+        53454      -0.0012      0.2250     -0.54266
+        53455      -0.0029      0.2258     -0.54356
+        53456      -0.0046      0.2267     -0.54447
+        53457      -0.0063      0.2276     -0.54530
+        53458      -0.0079      0.2285     -0.54598
+        53459      -0.0096      0.2294     -0.54647
+        53460      -0.0112      0.2303     -0.54675
+        53461      -0.0128      0.2313     -0.54688
+        53462      -0.0144      0.2323     -0.54699
+        53463      -0.0160      0.2333     -0.54724
+        53464      -0.0176      0.2343     -0.54775
+        53465      -0.0191      0.2353     -0.54858
+        53466      -0.0207      0.2364     -0.54970
+        53467      -0.0222      0.2375     -0.55097
+        53468      -0.0237      0.2386     -0.55228
+        53469      -0.0252      0.2397     -0.55354
+        53470      -0.0267      0.2408     -0.55465
+        53471      -0.0281      0.2420     -0.55556
+        53472      -0.0295      0.2431     -0.55626
+        53473      -0.0310      0.2443     -0.55677
+        53474      -0.0323      0.2455     -0.55715
+        53475      -0.0337      0.2468     -0.55748
+        53476      -0.0351      0.2480     -0.55785
+        53477      -0.0364      0.2493     -0.55833
+        53478      -0.0377      0.2505     -0.55899
+        53479      -0.0390      0.2518     -0.55988
+        53480      -0.0403      0.2531     -0.56095
+        53481      -0.0415      0.2545     -0.56216
+        53482      -0.0427      0.2558     -0.56347
+        53483      -0.0439      0.2572     -0.56478
+        53484      -0.0451      0.2585     -0.56599
+        53485      -0.0463      0.2599     -0.56699
+        53486      -0.0474      0.2613     -0.56769
+        53487      -0.0485      0.2627     -0.56808
+        53488      -0.0496      0.2641     -0.56824
+        53489      -0.0507      0.2656     -0.56830
+        53490      -0.0517      0.2670     -0.56839
+        53491      -0.0527      0.2685     -0.56860
+        53492      -0.0537      0.2700     -0.56897
+        53493      -0.0547      0.2714     -0.56955
+        53494      -0.0556      0.2729     -0.57032
+        53495      -0.0565      0.2744     -0.57119
+        53496      -0.0574      0.2760     -0.57204
+        53497      -0.0583      0.2775     -0.57277
+        53498      -0.0591      0.2790     -0.57329
+        53499      -0.0600      0.2806     -0.57354
+        53500      -0.0607      0.2821     -0.57350
+        53501      -0.0615      0.2837     -0.57328
+        53502      -0.0622      0.2853     -0.57298
+        53503      -0.0630      0.2869     -0.57261
+        53504      -0.0636      0.2885     -0.57218
+        53505      -0.0643      0.2901     -0.57175
+        53506      -0.0649      0.2917     -0.57143
+        53507      -0.0655      0.2933     -0.57124
+        53508      -0.0661      0.2949     -0.57117
+        53509      -0.0667      0.2966     -0.57124
+        53510      -0.0672      0.2982     -0.57139
+        53511      -0.0677      0.2999     -0.57158
+        53512      -0.0682      0.3015     -0.57166
+        53513      -0.0686      0.3032     -0.57155
+        53514      -0.0690      0.3048     -0.57116
+        53515      -0.0694      0.3065     -0.57057
+        53516      -0.0698      0.3082     -0.56989
+        53517      -0.0701      0.3098     -0.56921
+        53518      -0.0704      0.3115     -0.56860
+        53519      -0.0707      0.3132     -0.56818
+        53520      -0.0710      0.3149     -0.56799
+        53521      -0.0712      0.3166     -0.56800
+        53522      -0.0714      0.3183     -0.56809
+        53523      -0.0716      0.3200     -0.56815
+        53524      -0.0717      0.3217     -0.56808
+        53525      -0.0718      0.3234     -0.56781
+        53526      -0.0719      0.3251     -0.56728
+        53527      -0.0720      0.3268     -0.56651
+        53528      -0.0720      0.3285     -0.56557
+        53529      -0.0720      0.3302     -0.56454
+        53530      -0.0720      0.3319     -0.56347
+        53531      -0.0720      0.3336     -0.56244
+        53532      -0.0719      0.3353     -0.56148
+        53533      -0.0718      0.3370     -0.56060
+        53534      -0.0717      0.3387     -0.55990
+        53535      -0.0715      0.3404     -0.55943
+        53536      -0.0713      0.3421     -0.55916
+        53537      -0.0711      0.3438     -0.55897
+        53538      -0.0709      0.3455     -0.55881
+        53539      -0.0707      0.3472     -0.55859
+        53540      -0.0704      0.3489     -0.55820
+        53541      -0.0701      0.3506     -0.55751
+        53542      -0.0697      0.3523     -0.55650
+        53543      -0.0694      0.3540     -0.55529
+        53544      -0.0690      0.3557     -0.55402
+        53545      -0.0686      0.3573     -0.55279
+        53546      -0.0682      0.3590     -0.55173
+        53547      -0.0677      0.3607     -0.55093
+        53548      -0.0673      0.3623     -0.55037
+        53549      -0.0668      0.3640     -0.54994
+        53550      -0.0662      0.3656     -0.54947
+        53551      -0.0657      0.3673     -0.54884
+        53552      -0.0651      0.3689     -0.54798
+        53553      -0.0645      0.3705     -0.54689
+        53554      -0.0639      0.3721     -0.54560
+        53555      -0.0633      0.3738     -0.54414
+        53556      -0.0626      0.3754     -0.54257
+        53557      -0.0620      0.3770     -0.54101
+        53558      -0.0613      0.3786     -0.53952
+        53559      -0.0605      0.3801     -0.53819
+        53560      -0.0598      0.3817     -0.53705
+        53561      -0.0590      0.3833     -0.53611
+        53562      -0.0583      0.3848     -0.53535
+        53563      -0.0575      0.3864     -0.53475
+        53564      -0.0566      0.3879     -0.53425
+        53565      -0.0558      0.3895     -0.53374
+        53566      -0.0549      0.3910     -0.53315
+        53567      -0.0541      0.3925     -0.53243
+        53568      -0.0532      0.3940     -0.53152
+        53569      -0.0523      0.3955     -0.53042
+        53570      -0.0513      0.3969     -0.52913
+        53571      -0.0504      0.3984     -0.52776
+        53572      -0.0494      0.3998     -0.52644
+        53573      -0.0485      0.4013     -0.52532
+        53574      -0.0475      0.4027     -0.52451
+        53575      -0.0464      0.4041     -0.52400
+        53576      -0.0454      0.4055     -0.52377
+        53577      -0.0444      0.4069     -0.52366
+        53578      -0.0433      0.4083     -0.52344
+        53579      -0.0423      0.4096     -0.52299
+        53580      -0.0412      0.4110     -0.52228
+        53581      -0.0401      0.4123     -0.52130
+        53582      -0.0390      0.4136     -0.52010
+        53583      -0.0378      0.4149     -0.51872
+        53584      -0.0367      0.4162     -0.51725
+        53585      -0.0356      0.4175     -0.51578
+        53586      -0.0344      0.4188     -0.51436
+        53587      -0.0332      0.4200     -0.51310
+        53588      -0.0320      0.4212     -0.51204
+        53589      -0.0309      0.4224     -0.51120
+        53590      -0.0297      0.4236     -0.51055
+        53591      -0.0284      0.4248     -0.51006
+        53592      -0.0272      0.4260     -0.50966
+        53593      -0.0260      0.4271     -0.50922
+        53594      -0.0247      0.4283     -0.50872
+        53595      -0.0235      0.4294     -0.50809
+        53596      -0.0222      0.4305     -0.50729
+        53597      -0.0210      0.4315     -0.50638
+        53598      -0.0197      0.4326     -0.50535
+        53599      -0.0184      0.4336     -0.50431
+        53600      -0.0171      0.4347     -0.50339
+        53601      -0.0158      0.4357     -0.50273
+        53602      -0.0145      0.4367     -0.50244
+        53603      -0.0132      0.4376     -0.50247
+        53604      -0.0119      0.4386     -0.50267
+        53605      -0.0106      0.4395     -0.50286
+        53606      -0.0093      0.4404     -0.50287
+        53607      -0.0079      0.4413     -0.50263
+        53608      -0.0066      0.4422     -0.50217
Index: /trunk/psLib/test/astro/tst_psCoord.c
===================================================================
--- /trunk/psLib/test/astro/tst_psCoord.c	(revision 4547)
+++ /trunk/psLib/test/astro/tst_psCoord.c	(revision 4547)
@@ -0,0 +1,1351 @@
+/** @file  tst_psCoord.c
+*
+*  @brief The code will ...
+*
+*
+*  @author GLG, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:46:58 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+
+#include "psTest.h"
+#include "pslib_strict.h"
+static psS32 testSphereRotAlloc(void);
+static psS32 testPlaneTransformAlloc(void);
+static psS32 testPlaneDistortAlloc(void);
+static psS32 testPlaneTransformApply(void);
+static psS32 testPlaneDistortApply(void);
+static psS32 testSphereRotApply1(void);
+static psS32 testSphereRotApply2(void);
+static psS32 testSphereRotApply3(void);
+static psS32 testSphereRotApply4(void);
+static psS32 testSphereRotApply5(void);
+static psS32 testSphereRotICRSToEcliptic(void);
+static psS32 testSphereRotEclipticToICRS(void);
+static psS32 testSphereRotICRSToGalactic(void);
+static psS32 testSphereRotGalacticToICRS(void);
+static psS32 testSphereRotPrecess(void);
+testDescription tests[] = {
+                              {testSphereRotAlloc, 819, "psSphereRotAlloc()", 0, false},
+                              {testPlaneTransformAlloc, 826, "psPlaneTransformAlloc()", 0, false},
+                              {testPlaneDistortAlloc, 827, "psPlaneDistortAlloc()", 0, false},
+                              {testPlaneTransformApply, 831, "psPlaneTransformApply()", 0, false},
+                              {testPlaneDistortApply, 832, "psPlaneDistortApply()", 0, false},
+                              {testSphereRotApply1, 820, "psSphereRotApply()", 0, false},
+                              {testSphereRotApply2, 820, "psSphereRotApply()", 0, false},
+                              {testSphereRotApply3, 820, "psSphereRotApply()", 0, false},
+                              {testSphereRotApply4, 820, "psSphereRotApply()", 0, false},
+                              {testSphereRotApply5, 820, "psSphereRotApply()", 0, false},
+                              {testSphereRotICRSToEcliptic, 821, "psSphereRotICRSToEcliptic()", 0, false},
+                              {testSphereRotEclipticToICRS, 822, "psSphereRotEclipticToICRS()", 0, false},
+                              {testSphereRotICRSToGalactic, 824, "psSphereRotICRSToGalactic()", 0, false},
+                              {testSphereRotGalacticToICRS, 823, "psSphereRotGalacticToICRS()", 0, false},
+                              {testSphereRotPrecess, 825, "psSphereRotPrecess()", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psCoord", tests, argc, argv ) );
+}
+
+#define DEG_INC   30.0
+
+#define MJD_1900  15021.0        // Modified Julian Day 1/1/1900 00:00:00
+#define MJD_2000  51544.0        // Modified Julian Day 1/1/2000 00:00:00
+#define MJD_2100  88069.0        // Modified Julian Day 1/1/2100 00:00:00
+
+#define ERROR_TOL   0.0001
+
+#define ALPHA_P 1.0
+#define DELTA_P 2.0
+#define PHI_P 3.0
+
+psS32 testSphereRotAlloc( void )
+{
+    // Allocate data structure
+    psSphereRot* myST = psSphereRotAlloc(ALPHA_P, DELTA_P, PHI_P);
+
+    // Verify null not returned
+    if(myST == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL with valid parameters");
+        return 1;
+    }
+    // Verify sin member is updated
+    double vx = cos(DELTA_P)*cos(ALPHA_P);
+    double vy = cos(DELTA_P)*sin(ALPHA_P);
+    double vz = sin(DELTA_P);
+    double q0 = vx * sin(PHI_P/2.0);
+    double q1 = vy * sin(PHI_P/2.0);
+    double q2 = vz * sin(PHI_P/2.0);
+    double q3 = cos(PHI_P/2.0);
+
+    if (FLT_EPSILON < fabs(q0 - myST->q0)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f\n", myST->q0, q0);
+        return 2;
+    }
+    if (FLT_EPSILON < fabs(q1 - myST->q1)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q1 is %f, should be %f\n", myST->q1, q1);
+        return 3;
+    }
+    if (FLT_EPSILON < fabs(q2 - myST->q2)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q2 is %f, should be %f\n", myST->q2, q2);
+        return 4;
+    }
+    if (FLT_EPSILON < fabs(q3 - myST->q3)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f\n", myST->q3, q3);
+        return 5;
+    }
+
+    // Free data structure
+    psFree(myST);
+
+    return 0;
+}
+
+#define NX_TERMS 2
+#define NY_TERMS 3
+#define NZ_TERMS 4
+#define NT_TERMS 5
+
+psS32 testPlaneTransformAlloc( void )
+{
+    // Allocate psPlaneTransform with known x and y terms
+    psPlaneTransform *myPT = psPlaneTransformAlloc(NX_TERMS, NY_TERMS);
+
+    // Verify returned value is not NULL
+    if(myPT == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Function returned NULL not expected.");
+        return 1;
+    }
+
+    // Verify returned transform has members set properly
+    if (myPT->x->nX != NX_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPT->x->nX is %d, should be %d",
+                myPT->x->nX, NX_TERMS);
+        return 2;
+    }
+    if (myPT->y->nX != NX_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPT->y->nX is %d, should be %d",
+                myPT->y->nX, NX_TERMS);
+        return 3;
+    }
+    if (myPT->x->nY != NY_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPT->x->nY is %d, should be %d",
+                myPT->x->nY, NY_TERMS);
+        return 4;
+    }
+    if (myPT->y->nY != NY_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPT->y->nY is %d, should be %d",
+                myPT->y->nY, NY_TERMS);
+        return 5;
+    }
+
+    // Free plane transform
+    psFree(myPT);
+
+    // Attempt to specify negative x terms and verify NULL returned and errror message generated
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: negative x terms");
+    myPT = psPlaneTransformAlloc(-1.0, 1.0);
+    if (myPT != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psPlaneTransformAlloc() did not return NULL.");
+        return 6;
+    }
+
+    // Attempt to specify negative y terms and verify NULL returned and error message generated
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: negative y terms");
+    myPT = psPlaneTransformAlloc(1.0, -1.0);
+    if (myPT != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psPlaneTransformAlloc() did not return NULL.");
+        return 7;
+    }
+
+    psFree(myPT);
+
+    return 0;
+}
+
+
+psS32 testPlaneDistortAlloc( void )
+{
+    // Invoke function with known parameters
+    psPlaneDistort *myPD = psPlaneDistortAlloc(NX_TERMS, NY_TERMS, NZ_TERMS, NT_TERMS);
+
+    // Verify NULL is not returned
+    if(myPD == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL not expected");
+        return 1;
+    }
+    // Verify the terms are properly set after allocation
+    if (myPD->x->nX != NX_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->x->nX is %d, should be %d",
+                myPD->x->nX, NX_TERMS);
+        return 2;
+    }
+    if (myPD->y->nX != NX_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->y->nX is %d, should be %d",
+                myPD->y->nX, NX_TERMS);
+        return 3;
+    }
+    if (myPD->x->nY != NY_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->x->nY is %d, should be %d",
+                myPD->x->nY, NY_TERMS);
+        return 4;
+    }
+    if (myPD->y->nY != NY_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->y->nY is %d, should be %d",
+                myPD->y->nY, NY_TERMS);
+        return 5;
+    }
+    if (myPD->x->nZ != NZ_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->x->nZ is %d, should be %d",
+                myPD->x->nZ, NZ_TERMS);
+        return 6;
+    }
+    if (myPD->y->nZ != NZ_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->y->nZ is %d, should be %d",
+                myPD->y->nZ, NZ_TERMS);
+        return 7;
+    }
+    if (myPD->x->nT != NT_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->x->nT is %d, should be %d",
+                myPD->x->nT, NT_TERMS);
+        return 8;
+    }
+    if (myPD->y->nT != NT_TERMS) {
+        psError(PS_ERR_UNKNOWN,true,"myPD->y->nT is %d, should be %d",
+                myPD->y->nT, NT_TERMS);
+        return 9;
+    }
+    // Free psPlaneTransform
+    psFree(myPD);
+
+    // Invoke function with negative x term parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative x term");
+    myPD = psPlaneDistortAlloc(-1.0, 1.0, 1.0, 1.0);
+    if (myPD != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
+        return 10;
+    }
+
+    // Invoke function with negative y term parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative y term");
+    myPD = psPlaneDistortAlloc(1.0, -1.0, 1.0, 1.0);
+    if (myPD != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
+        return 11;
+    }
+
+    // Invoke function with negative z term parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative z term");
+    myPD = psPlaneDistortAlloc(1.0, 1.0, -1.0, 1.0);
+    if (myPD != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
+        return 12;
+    }
+
+    // Invoke function with negative w term parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative w term");
+    myPD = psPlaneDistortAlloc(1.0, 1.0, 1.0, -1.0);
+    if (myPD != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
+    }
+
+    return 0;
+}
+
+#define N 10
+// We do a simple identity transformation on a few x,y pairs.
+psS32 testPlaneTransformApply( void )
+{
+    psPlane*          out = NULL;
+    psDPolynomial2D*  tmp2DPoly = NULL;
+    psPlane*          rc;
+
+    // Create input coordinate
+    psPlane* in = psPlaneAlloc();
+    if(in == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return from psPlaneAlloc");
+        return 1;
+    }
+
+    // Create transform
+    psPlaneTransform* pt = psPlaneTransformAlloc(2,2);
+
+    // Set transform coefficients so the x coord input will equal x coord output, same for y
+    pt->x->coeff[1][0] = 1.0;
+    pt->y->coeff[0][1] = 1.0;
+
+    // Apply transform for several points
+    for (psS32 i = 0; i < N; i++) {
+        in->x = (psF64) i;
+        in->y = (psF64) (i + 5.0);
+        in->xErr = 0.0;
+        in->yErr = 0.0;
+
+        // Verify function does not return NULL
+        out = psPlaneTransformApply(out, pt, in);
+        if( out  == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Expected non-NULL return value");
+            return 1;
+        }
+        // Verify the expected values are returned
+        if (FLT_EPSILON < fabs(out->x - in->x)) {
+            psError(PS_ERR_UNKNOWN,true,"out.x is %lf, should be %lf", out->x, in->x);
+            return 3;
+        }
+        if (FLT_EPSILON < fabs(out->y - in->y)) {
+            psError(PS_ERR_UNKNOWN,true,"out.y is %lf, should be %lf", out->y, in->y);
+            return 4;
+        }
+    }
+    psFree(out);
+
+    // Verify return null and error message generater for null specified transform
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL psPlaneTransform");
+    rc = psPlaneTransformApply(NULL, NULL, in);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL psPlaneTransform.");
+        return 5;
+    }
+
+    // Verify return null and error message generated for null psPlaneTransform x coeff
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL x coeff psPlaneTransform");
+    tmp2DPoly = pt->x;
+    pt->x = NULL;
+    rc = psPlaneTransformApply(NULL, pt, in);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL x coeff psPlaneTransform");
+        return 6;
+    }
+    pt->x = tmp2DPoly;
+
+    // Verify return null and error message generated for null psPlaneTransform y coeff
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL y coeff psPlaneTransform");
+    tmp2DPoly = pt->y;
+    pt->y = NULL;
+    rc = psPlaneTransformApply(NULL, pt, in);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL y coeff psPlaneTransform");
+        return 7;
+    }
+    pt->y = tmp2DPoly;
+
+    // Verify return null and error message generated for null psPlane coordinate
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL psPlane");
+    rc = psPlaneTransformApply(NULL, pt, NULL);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL psPlane");
+        return 8;
+    }
+
+    psFree(pt);
+    psFree(in);
+
+    return 0;
+}
+
+#define COLOR 1.0
+#define MAGNITUDE 1.0
+// We do a simple identity transformation on a few x,y pairs.  For x and y,
+// we add in the COLOR and MAGNITUDE.
+psS32 testPlaneDistortApply( void )
+{
+    psPlane*         out       = NULL;
+    psPlane*         rc        = NULL;
+    psDPolynomial4D* tmp4DPoly = NULL;
+
+    // Allocate input coordinate
+    psPlane* in = psPlaneAlloc();
+
+    // Create psPlaneTransform structure
+    psPlaneDistort*  pt = psPlaneDistortAlloc(2, 2, 2, 2);
+
+    pt->x->coeff[1][0][0][0] = 1.0;
+    pt->x->coeff[0][0][1][0] = 1.0;
+    pt->x->coeff[0][0][0][1] = 1.0;
+
+    pt->y->coeff[0][1][0][0] = 1.0;
+    pt->y->coeff[0][0][1][0] = 1.0;
+    pt->y->coeff[0][0][0][1] = 1.0;
+
+    for (psS32 i = 0; i < N; i++) {
+        in->x = (psF64) i;
+        in->y = (psF64) (i + 5.0);
+        in->xErr = 0.0;
+        in->yErr = 0.0;
+        out = psPlaneDistortApply(out, pt, in, COLOR, MAGNITUDE);
+
+        // Verify return value is not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Expected non-NULL return");
+            return 1;
+        }
+        // Verify return value contains expected values
+        if (FLT_EPSILON < fabs(out->x - COLOR - MAGNITUDE - in->x)) {
+            psError(PS_ERR_UNKNOWN,true,"out->x is %lf, should be %lf",
+                    out->x, in->x + COLOR + MAGNITUDE);
+            return 2;
+        }
+        if (FLT_EPSILON < fabs(out->y - COLOR - MAGNITUDE - in->y)) {
+            psError(PS_ERR_UNKNOWN,true,"out->y is %lf, should be %lf",
+                    out->y, in->y + COLOR + MAGNITUDE);
+            return 3;
+        }
+    }
+    psFree(out);
+
+    // Attempt to invoke psPlaneDistortApply with NULL psPlaneDistort
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null psPlaneDistort");
+    rc = psPlaneDistortApply(NULL, NULL, in, COLOR, MAGNITUDE);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL.");
+        return 4;
+    }
+
+    // Attempt to invoke psPlaneDistortApply with NULL psPlaneDistort x member
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null x member psPlaneDistort");
+    tmp4DPoly = pt->x;
+    pt->x = NULL;
+    rc = psPlaneDistortApply(NULL, pt, in, COLOR, MAGNITUDE);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL.");
+        return 5;
+    }
+    pt->x = tmp4DPoly;
+
+    // Attempt to invoke psPlaneDistortApply with NULL psPlaneDistort y member
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null y member psPlaneDistort");
+    tmp4DPoly = pt->y;
+    pt->y = NULL;
+    rc = psPlaneDistortApply(NULL, pt, in, COLOR, MAGNITUDE);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL.");
+        return 6;
+    }
+    pt->y = tmp4DPoly;
+
+    // Attempt to invoke psPlaneDistortApply with NULL input psPlane
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null input psPlane");
+    rc = psPlaneDistortApply(NULL, pt, NULL, COLOR, MAGNITUDE);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
+        return 7;
+    }
+
+    psFree(pt);
+    psFree(in);
+
+    return 0;
+}
+
+// We do a simple identity transformation on a few RA, DEC pairs.
+psS32 testSphereRotApply1( void )
+{
+    psSphere *in = psSphereAlloc();
+    psSphere *out = psSphereAlloc();
+    psSphere *temp = NULL;
+    psSphere *rc = NULL;
+    psSphereRot *myST = psSphereRotAlloc(0.0, 0.0, 0.0);
+
+    for (float r=0.0;r<180.0;r+=DEG_INC) {
+        for (float d=0.0;d<90.0;d+=DEG_INC) {
+            in->r = DEG_TO_RAD(r);
+            in->d = DEG_TO_RAD(d);
+            in->rErr = 0.0;
+            in->dErr = 0.0;
+
+            if(psSphereRotApply(out, myST, in) != out) {
+                psError(PS_ERR_UNKNOWN,true,"Did not return output pointer.");
+                return 1;
+            }
+            if (ERROR_TOL < fabs(out->r - in->r)) {
+                psError(PS_ERR_UNKNOWN,true,"out->r is %f, should be %f\n", out->r, in->r);
+                return 2;
+            }
+            if (ERROR_TOL < fabs(out->d - in->d)) {
+                psError(PS_ERR_UNKNOWN,true,"out->d is %f, should be %f\n", out->d, in->d);
+                return 3;
+            }
+        }
+    }
+
+    // Verify new sphere object is created if out parameter NULL
+    temp = psSphereRotApply(NULL, myST, in);
+    if ( temp == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL when out parameter was null");
+        return 4;
+    }
+    psFree(temp);
+
+    // Verify NULL returned if transform structure null
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
+    rc = psSphereRotApply(NULL, NULL, in);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply() did not return NULL.");
+        return 5;
+    }
+
+    // Verify NULL returned when input sphere is NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
+    rc = psSphereRotApply(NULL, myST, NULL);
+    if (rc != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply() did not return NULL");
+        return 6;
+    }
+
+    psFree(myST);
+    psFree(out);
+    psFree(in);
+
+    return 0;
+}
+
+/******************************************************************************
+testSphereRotApply2(): This test verifies that psSphereRotApply()
+works properly.  We create two psSphereRots: a forward transform and a
+reverse transform (which is the mathematical inverse of the forward transform).
+We apply both transforms to several spherical coordinates and ensure that the
+original input coordinate is obtained after applying both transforms.
+ 
+XXX: We currently test the alpha and delta offsets independently.  Attempts to
+test them both concurrently failed.  Determine why this is.  Are the following
+spherical transforms not mathematical inverses?
+    psSphereRotAlloc(X, Y, 0.0)
+    psSphereRotAlloc(-X, -Y, 0.0)
+ *****************************************************************************/
+#define ERROR_PERCENT 0.01
+psS32 testSphereRotApply2( void )
+{
+    psS32 testStatus = 0;
+    psSphere in;
+    psSphere out;
+    psSphere out2;
+    psSphereRot *mySphereRotForward = NULL;
+    psSphereRot *mySphereRotReverse = NULL;
+
+
+    mySphereRotForward = psSphereRotAlloc(DEG_TO_RAD(22.0),
+                                          0.0,
+                                          0.0);
+    mySphereRotReverse = psSphereRotAlloc(DEG_TO_RAD(-22.0),
+                                          0.0,
+                                          0.0);
+
+    for (float r=0.1;r<180.0;r+=(DEG_INC/5.0)) {
+        for (float d=0.1;d<90.0;d+=(DEG_INC/5.0)) {
+            in.r = DEG_TO_RAD(r);
+            in.d = DEG_TO_RAD(d);
+            in.rErr = 0.0;
+            in.dErr = 0.0;
+
+            psSphereRotApply(&out, mySphereRotForward, &in);
+            psSphereRotApply(&out2, mySphereRotReverse, &out);
+
+            if ((fabs((in.r - out2.r) / in.r) > ERROR_PERCENT) ||
+                    (fabs((in.d - out2.d) / in.d) > ERROR_PERCENT)) {
+                printf("ERROR: \n");
+                printf("Input  coords (R, D) are (%f, %f)\n", in.r, in.d);
+                printf("Output coords (R, D) are (%f, %f)\n", out2.r, out2.d);
+                testStatus = 4;
+            }
+        }
+    }
+    psFree(mySphereRotForward);
+    psFree(mySphereRotReverse);
+
+    mySphereRotForward = psSphereRotAlloc(0.0,
+                                          DEG_TO_RAD(33.0),
+                                          0.0);
+    mySphereRotReverse = psSphereRotAlloc(0.0,
+                                          DEG_TO_RAD(-33.0),
+                                          0.0);
+    for (float r=0.1;r<180.0;r+=(DEG_INC/5.0)) {
+        for (float d=0.1;d<90.0;d+=(DEG_INC/5.0)) {
+            in.r = DEG_TO_RAD(r);
+            in.d = DEG_TO_RAD(d);
+            in.rErr = 0.0;
+            in.dErr = 0.0;
+
+            psSphereRotApply(&out, mySphereRotForward, &in);
+            psSphereRotApply(&out2, mySphereRotReverse, &out);
+
+            if ((fabs((in.r - out2.r) / in.r) > ERROR_PERCENT) ||
+                    (fabs((in.d - out2.d) / in.d) > ERROR_PERCENT)) {
+                printf("ERROR: \n");
+                printf("Input  coords (R, D) are (%f, %f)\n", in.r, in.d);
+                printf("Output coords (R, D) are (%f, %f)\n", out2.r, out2.d);
+                testStatus = 4;
+            }
+        }
+    }
+    psFree(mySphereRotForward);
+    psFree(mySphereRotReverse);
+
+    return(testStatus);
+}
+
+// Test point 1  ADD  ICRS(0,0) to Galactic (96.337272,-60.188553)
+//                              to Ecliptic (0,0) with T=1
+#define SPHERE_COORD_TP1_GAL_R           1.681409       //  96.337272 degrees
+#define SPHERE_COORD_TP1_GAL_D          -1.050488       // -60.188553 degrees
+#define SPHERE_COORD_TP1_ECL_R           0.0
+#define SPHERE_COORD_TP1_ECL_D           0.0
+#define SPHERE_COORD_TP1_INVERSE_R       0.0
+#define SPHERE_COORD_TP1_INVERSE_D       0.0
+
+// Test point 2 ADD  ICRS(0,90) to Galactic (122.93192, 27.12825)
+//                              to Ecliptic (90,66.560719) with T=1
+#define SPHERE_COORD_TP2_GAL_R           2.145567       // 122.93192 degrees
+#define SPHERE_COORD_TP2_GAL_D           0.473477       // 27.12825  degrees
+#define SPHERE_COORD_TP2_ECL_R           1.570796       // 90        degrees
+#define SPHERE_COORD_TP2_ECL_D           1.161704       // 66.560719 degrees
+#define SPHERE_COORD_TP2_INVERSE_R       0.0            // 0         degrees
+#define SPHERE_COORD_TP2_INVERSE_D       1.570796       // 90        degrees
+
+// Test point 3 ADD  ICRS(180,30) to Galactic (195.639488, 78.353806)
+//                                to Ecliptic (167.072470, 27.308813) with T=2
+#define SPHERE_COORD_TP3_GAL_R           3.414553       // 195.639488 degrees
+#define SPHERE_COORD_TP3_GAL_D           1.367532       // 78.353806  degrees
+#define SPHERE_COORD_TP3_ECL_R           2.915965       // 167.07247  degrees
+#define SPHERE_COORD_TP3_ECL_D           0.476629       // 27.308813  degrees
+#define SPHERE_COORD_TP3_INVERSE_R       3.141593       // 180.0      degrees
+#define SPHERE_COORD_TP3_INVERSE_D       0.523599       // 30.0       degrees
+
+psS32 testSphereRotApply3( void)
+{
+
+    psSphereRot*  testTransform;
+    psSphere*           inputCoord = psSphereAlloc();
+    psSphere*           outputCoord = NULL;
+    psSphere*           inverseOutputCoord = NULL;
+
+    inputCoord->r = SPHERE_COORD_TP1_INVERSE_R;
+    inputCoord->d = SPHERE_COORD_TP1_INVERSE_D;
+    inputCoord->rErr = 0.0;
+    inputCoord->dErr = 0.0;
+
+    // Set test date time to 1/1/2000 00:00:00
+    psTime* testDateTime = psTimeFromMJD(MJD_2000);
+
+    // Create transform ICRS to Galactic
+    testTransform = psSphereRotICRSToGalactic();
+
+    // Perform transform from ICRS to Galactic
+    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
+    // Verify output not NULL and member values set correctly
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 1;
+    }
+    if(fabs(outputCoord->r - SPHERE_COORD_TP1_GAL_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                outputCoord->r, SPHERE_COORD_TP1_GAL_R);
+        return 2;
+    }
+    if(fabs(outputCoord->d - SPHERE_COORD_TP1_GAL_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                outputCoord->d, SPHERE_COORD_TP1_GAL_D);
+        return 3;
+    }
+    psFree(testTransform);
+
+    // Create inverse transform Galactic to ICRS
+    testTransform = psSphereRotGalacticToICRS();
+
+    // Perform transform from Galactic to ICRS
+    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
+    // Verify output not NULL and member values set correctly
+    if(inverseOutputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 4;
+    }
+
+    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP1_INVERSE_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                inverseOutputCoord->r, SPHERE_COORD_TP1_INVERSE_R);
+        return 5;
+    }
+    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP1_INVERSE_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                inverseOutputCoord->d, SPHERE_COORD_TP1_INVERSE_D);
+        return 6;
+    }
+    psFree(testTransform);
+
+    // Create transform ICRS to Ecliptic
+    testTransform = psSphereRotICRSToEcliptic(testDateTime);
+
+    // Perform transform from ICRS to Ecliptic
+    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
+    // Verify output not NULL and member values set correctly
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 7;
+    }
+    if(fabs(outputCoord->r - SPHERE_COORD_TP1_ECL_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                outputCoord->r, SPHERE_COORD_TP1_ECL_R);
+        return 8;
+    }
+    if(fabs(outputCoord->d - SPHERE_COORD_TP1_ECL_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                outputCoord->d, SPHERE_COORD_TP1_ECL_D);
+        return 9;
+    }
+    psFree(testTransform);
+
+    // Create inverse transform Ecliptic to ICRS
+    testTransform = psSphereRotEclipticToICRS(testDateTime);
+
+    // Perform transform from Ecliptic to ICRS
+    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
+    // Verify output not NULL and member values set correctly
+    if(inverseOutputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 10;
+    }
+    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP1_INVERSE_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                inverseOutputCoord->r, SPHERE_COORD_TP1_INVERSE_R);
+        return 11;
+    }
+    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP1_INVERSE_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                inverseOutputCoord->d, SPHERE_COORD_TP1_INVERSE_D);
+        return 12;
+    }
+    psFree(testTransform);
+
+    psFree(testDateTime);
+    psFree(outputCoord);
+    psFree(inputCoord);
+    psFree(inverseOutputCoord);
+
+    return 0;
+}
+
+psS32 testSphereRotApply4( void)
+{
+
+    psSphereRot*  testTransform;
+    psSphere*           inputCoord = psSphereAlloc();
+    psSphere*           outputCoord = NULL;
+    psSphere*           inverseOutputCoord = NULL;
+
+    inputCoord->r = SPHERE_COORD_TP2_INVERSE_R;
+    inputCoord->d = SPHERE_COORD_TP2_INVERSE_D;
+    inputCoord->rErr = 0.0;
+    inputCoord->dErr = 0.0;
+
+    // Set test date time to 1/1/2000 00:00:00
+    psTime* testDateTime = psTimeFromMJD(MJD_2000);
+
+    // Create transform ICRS to Galactic
+    testTransform = psSphereRotICRSToGalactic();
+
+    // Perform transform from ICRS to Galactic
+    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
+    // Verify output not NULL and member values set correctly
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 1;
+    }
+    if(fabs(outputCoord->r - SPHERE_COORD_TP2_GAL_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                outputCoord->r, SPHERE_COORD_TP2_GAL_R);
+        return 2;
+    }
+    if(fabs(outputCoord->d - SPHERE_COORD_TP2_GAL_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                outputCoord->d, SPHERE_COORD_TP2_GAL_D);
+        return 3;
+    }
+    psFree(testTransform);
+
+    // Create inverse transform Galactic to ICRS
+    testTransform = psSphereRotGalacticToICRS();
+
+    // Perform transform from Galactic to ICRS
+    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
+    // Verify output not NULL and member values set correctly
+    if(inverseOutputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 4;
+    }
+    // atan2 function introduces some error with y close to zero, increased error tolerance
+    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP2_INVERSE_R) > ERROR_TOL+0.1) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                inverseOutputCoord->r, SPHERE_COORD_TP2_INVERSE_R);
+        return 5;
+    }
+    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP2_INVERSE_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                inverseOutputCoord->d, SPHERE_COORD_TP2_INVERSE_D);
+        return 6;
+    }
+    psFree(testTransform);
+
+    // Create transform ICRS to Ecliptic
+    testTransform = psSphereRotICRSToEcliptic(testDateTime);
+
+    // Perform transform from ICRS to Ecliptic
+    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
+    // Verify output not NULL and member values set correctly
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 7;
+    }
+    if(fabs(outputCoord->r - SPHERE_COORD_TP2_ECL_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                outputCoord->r, SPHERE_COORD_TP2_ECL_R);
+        return 8;
+    }
+    if(fabs(outputCoord->d - SPHERE_COORD_TP2_ECL_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                outputCoord->d, SPHERE_COORD_TP2_ECL_D);
+        return 9;
+    }
+    psFree(testTransform);
+
+    // Create inverse transform Ecliptic to ICRS
+    testTransform = psSphereRotEclipticToICRS(testDateTime);
+
+    // Perform transform from Ecliptic to ICRS
+    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
+    // Verify output not NULL and member values set correctly
+    if(inverseOutputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 10;
+    }
+    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP2_INVERSE_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                inverseOutputCoord->r, SPHERE_COORD_TP2_INVERSE_R);
+        return 11;
+    }
+    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP2_INVERSE_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                inverseOutputCoord->d, SPHERE_COORD_TP2_INVERSE_D);
+        return 12;
+    }
+    psFree(testTransform);
+
+    psFree(testDateTime);
+    psFree(outputCoord);
+    psFree(inputCoord);
+    psFree(inverseOutputCoord);
+
+    return 0;
+}
+
+psS32 testSphereRotApply5( void)
+{
+    psSphereRot*  testTransform;
+    psSphere*           inputCoord = psSphereAlloc();
+    psSphere*           outputCoord = NULL;
+    psSphere*           inverseOutputCoord = NULL;
+
+    inputCoord->r = SPHERE_COORD_TP3_INVERSE_R;
+    inputCoord->d = SPHERE_COORD_TP3_INVERSE_D;
+    inputCoord->rErr = 0.0;
+    inputCoord->dErr = 0.0;
+
+    // Set test date time to 1/1/2100 00:00:00
+    psTime* testDateTime = psTimeFromMJD(MJD_2100);
+
+    // Create transform ICRS to Galactic
+    testTransform = psSphereRotICRSToGalactic();
+
+    // Perform transform from ICRS to Galactic
+    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
+    // Verify output not NULL and member values set correctly
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 1;
+    }
+    if(fabs(outputCoord->r - SPHERE_COORD_TP3_GAL_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                outputCoord->r, SPHERE_COORD_TP3_GAL_R);
+        return 2;
+    }
+    if(fabs(outputCoord->d - SPHERE_COORD_TP3_GAL_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                outputCoord->d, SPHERE_COORD_TP3_GAL_D);
+        return 3;
+    }
+    psFree(testTransform);
+
+    // Create inverse transform Galactic to ICRS
+    testTransform = psSphereRotGalacticToICRS();
+
+    // Perform transform from Galactic to ICRS
+    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
+    // Verify output not NULL and member values set correctly
+    if(inverseOutputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 4;
+    }
+    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP3_INVERSE_R) > ERROR_TOL+0.1) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                inverseOutputCoord->r, SPHERE_COORD_TP3_INVERSE_R);
+        return 5;
+    }
+    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP3_INVERSE_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                inverseOutputCoord->d, SPHERE_COORD_TP3_INVERSE_D);
+        return 6;
+    }
+    psFree(testTransform);
+
+    // Create transform ICRS to Ecliptic
+    testTransform = psSphereRotICRSToEcliptic(testDateTime);
+
+    // Perform transform from ICRS to Ecliptic
+    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
+    // Verify output not NULL and member values set correctly
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 7;
+    }
+    if(fabs(outputCoord->r - SPHERE_COORD_TP3_ECL_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                outputCoord->r, SPHERE_COORD_TP3_ECL_R);
+        return 8;
+    }
+    if(fabs(outputCoord->d - SPHERE_COORD_TP3_ECL_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                outputCoord->d, SPHERE_COORD_TP3_ECL_D);
+        return 9;
+    }
+    psFree(testTransform);
+
+    // Create inverse transform Ecliptic to ICRS
+    testTransform = psSphereRotEclipticToICRS(testDateTime);
+
+    // Perform transform from Ecliptic to ICRS
+    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
+    // Verify output not NULL and member values set correctly
+    if(inverseOutputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
+        return 10;
+    }
+    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP3_INVERSE_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
+                inverseOutputCoord->r, SPHERE_COORD_TP3_INVERSE_R);
+        return 11;
+    }
+    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP3_INVERSE_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
+                inverseOutputCoord->d, SPHERE_COORD_TP3_INVERSE_D);
+        return 12;
+    }
+    psFree(testTransform);
+
+    psFree(testDateTime);
+    psFree(outputCoord);
+    psFree(inputCoord);
+    psFree(inverseOutputCoord);
+
+    return 0;
+}
+
+#define SPHERE_PRECESS_TP1_R            0.0               //    0.0       degrees
+#define SPHERE_PRECESS_TP1_D            0.0               //    0.0       degrees
+#define SPHERE_PRECESS_TP1_EXPECT_R     6.238453          //  357.437     degrees
+#define SPHERE_PRECESS_TP1_EXPECT_D    -0.019426          //   -1.113     degrees
+#define SPHERE_PRECESS_TP2_R            0.0               //    0.0       degrees
+#define SPHERE_PRECESS_TP2_D            1.570796          //   90.0       degrees
+#define SPHERE_PRECESS_TP2_EXPECT_R     6.260828          //  358.719     degrees
+#define SPHERE_PRECESS_TP2_EXPECT_D     1.551353          //   88.886     degrees
+#define SPHERE_PRECESS_TP3_R            3.141593          //  180.0       degrees
+#define SPHERE_PRECESS_TP3_D            0.523599          //   30.0       degrees
+#define SPHERE_PRECESS_TP3_EXPECT_R     3.096616          //  177.423     degrees
+#define SPHERE_PRECESS_TP3_EXPECT_D     0.543024          //   31.113     degrees
+
+psS32 testSphereRotPrecess( void )
+{
+    psSphere*     inputCoord  = psSphereAlloc();
+    psSphere*     outputCoord = NULL;
+    psTime*       fromTime    = psTimeFromMJD(MJD_2100);
+    psTime*       toTime      = psTimeFromMJD(MJD_1900);
+
+    // Set input coordinate
+    inputCoord->r = SPHERE_PRECESS_TP1_R;
+    inputCoord->d = SPHERE_PRECESS_TP1_D;
+    inputCoord->rErr = 0.0;
+    inputCoord->dErr = 0.0;
+
+    // Calculate precess
+    outputCoord = psSpherePrecess(inputCoord, fromTime, toTime);
+    // Verify return is not NULL
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify return with expected values
+    if( fabs(outputCoord->r - SPHERE_PRECESS_TP1_EXPECT_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Precess r = %lg not equal to expected = %lg",
+                outputCoord->r,SPHERE_PRECESS_TP1_EXPECT_R);
+        return 2;
+    }
+    if( fabs(outputCoord->d - SPHERE_PRECESS_TP1_EXPECT_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Precess d = %lg not equal to expected = %lg",
+                outputCoord->d,SPHERE_PRECESS_TP1_EXPECT_D);
+        return 3;
+    }
+    psFree(outputCoord);
+
+    // Set input coordinate
+    inputCoord->r = SPHERE_PRECESS_TP2_R;
+    inputCoord->d = SPHERE_PRECESS_TP2_D;
+    inputCoord->rErr = 0.0;
+    inputCoord->dErr = 0.0;
+
+    // Calculate precess
+    outputCoord = psSpherePrecess(inputCoord, fromTime, toTime);
+    // Verify return is not NULL
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 4;
+    }
+    // Verify return with expected values
+    if( fabs(outputCoord->r - SPHERE_PRECESS_TP2_EXPECT_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Precess r = %lg not equal to expected = %lg",
+                outputCoord->r,SPHERE_PRECESS_TP2_EXPECT_R);
+        return 5;
+    }
+    if( fabs(outputCoord->d - SPHERE_PRECESS_TP2_EXPECT_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Precess d = %lg not equal to expected = %lg",
+                outputCoord->d,SPHERE_PRECESS_TP2_EXPECT_D);
+        return 6;
+    }
+    psFree(outputCoord);
+
+    // Set input coordinate
+    inputCoord->r = SPHERE_PRECESS_TP3_R;
+    inputCoord->d = SPHERE_PRECESS_TP3_D;
+    inputCoord->rErr = 0.0;
+    inputCoord->dErr = 0.0;
+
+    // Calculate precess
+    outputCoord = psSpherePrecess(inputCoord, fromTime, toTime);
+    // Verify return is not NULL
+    if(outputCoord == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 7;
+    }
+    // Verify return with expected values
+    if( fabs(outputCoord->r - SPHERE_PRECESS_TP3_EXPECT_R) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Precess r = %lg not equal to expected = %lg",
+                outputCoord->r,SPHERE_PRECESS_TP3_EXPECT_R);
+        return 8;
+    }
+    if( fabs(outputCoord->d - SPHERE_PRECESS_TP3_EXPECT_D) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Precess d = %lg not equal to expected = %lg",
+                outputCoord->d,SPHERE_PRECESS_TP3_EXPECT_D);
+        return 9;
+    }
+    psFree(outputCoord);
+
+    // Invoke precess with invalid parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    outputCoord = psSpherePrecess(inputCoord, fromTime, NULL);
+    if(outputCoord != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid input");
+        return 10;
+    }
+
+    // Invoke precess with invalid parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    outputCoord = psSpherePrecess(inputCoord, NULL, toTime);
+    if(outputCoord != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid input");
+        return 11;
+    }
+
+    // Invoke precess with invalid parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    outputCoord = psSpherePrecess(NULL, fromTime, toTime);
+    if(outputCoord != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid input");
+        return 12;
+    }
+
+    // Free objects
+    psFree(fromTime);
+    psFree(toTime);
+    psFree(inputCoord);
+
+    return 0;
+}
+
+psS32 testSphereRotICRSToEcliptic( void )
+{
+    psF64  expectedQ0 = 0.0;
+    psF64  expectedQ1 = 0.0;
+    psF64  expectedQ2 = 0.0;
+    psF64  expectedQ3 = 0.0;
+
+    // Set test date time to 1/1/2000 00:00:00
+    psTime* testDateTime = psTimeFromMJD(MJD_2000);
+
+    // Invoke function to set psSphereRota objec
+    psSphereRot *myST = psSphereRotICRSToEcliptic(testDateTime);
+
+    // Verify expected values for the specified time
+    if (ERROR_TOL < fabs(expectedQ0 - myST->q0)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f",
+                myST->q0, expectedQ0);
+        return 1;
+    }
+    if (ERROR_TOL < fabs(expectedQ1 - myST->q1)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q1 is %f, should be %f",
+                myST->q1, expectedQ1);
+        return 2;
+    }
+    if (ERROR_TOL < fabs(expectedQ2 - myST->q2)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q2 is %f, should be %f",
+                myST->q2, expectedQ2);
+        return 3;
+    }
+    if (ERROR_TOL < fabs(expectedQ3 - myST->q3)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q3 is %f, should be %f",
+                myST->q3, expectedQ3);
+        return 4;
+    }
+    psFree(myST);
+    psFree(testDateTime);
+
+    // Set test date time to 1/1/2100 00:00:00
+    testDateTime = psTimeFromMJD(MJD_2100);
+
+    // Invoke function to set psSphereRota objec
+    myST = psSphereRotICRSToEcliptic(testDateTime);
+
+    // Verify expected values for the specified time
+    // Verify expected values for the specified time
+    if (ERROR_TOL < fabs(expectedQ0 - myST->q0)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f",
+                myST->q0, expectedQ0);
+        return 5;
+    }
+    if (ERROR_TOL < fabs(expectedQ1 - myST->q1)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q1 is %f, should be %f",
+                myST->q1, expectedQ1);
+        return 6;
+    }
+    if (ERROR_TOL < fabs(expectedQ2 - myST->q2)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q2 is %f, should be %f",
+                myST->q2, expectedQ2);
+        return 7;
+    }
+    if (ERROR_TOL < fabs(expectedQ3 - myST->q3)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->q3 is %f, should be %f",
+                myST->q3, expectedQ3);
+        return 8;
+    }
+    psFree(myST);
+    psFree(testDateTime);
+
+    // Verify if argument psTime is NULL, function returns NULL and error message generated
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    myST = psSphereRotICRSToEcliptic(NULL);
+    if (myST != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotICRSToEcliptic() did not return NULL.");
+        return 9;
+    }
+
+    // Verify if argument psTime is less than 1900, function return NULL and error msg generated
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    testDateTime = psTimeFromMJD(MJD_1900 - 1.0);
+    myST = psSphereRotICRSToEcliptic(testDateTime);
+    if (myST != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotICRSToEcliptic() did not return NULL.");
+        return 10;
+    }
+    psFree(testDateTime);
+
+    return 0;
+}
+
+
+psS32 testSphereRotEclipticToICRS( void )
+{
+    psF64  expectedPhiP = 0.0;
+    psF64  expectedAlphaP = 0.0;
+    psF64  expectedCosDeltaP = 0.0;
+    psF64  expectedSinDeltaP = 0.0;
+
+    // Set test date time to 1/1/2000 00:00:00
+    psTime* testDateTime = psTimeFromMJD(MJD_2000);
+
+    // Invoke function to set psSphereRota object
+    psSphereRot *myST = psSphereRotEclipticToICRS(testDateTime);
+
+    // Verify expected values for the specified time
+    if (ERROR_TOL < fabs(expectedSinDeltaP - myST->sinDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
+                myST->sinDeltaP, expectedSinDeltaP);
+        return 1;
+    }
+    if (ERROR_TOL < fabs(expectedCosDeltaP - myST->cosDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
+                myST->cosDeltaP, expectedCosDeltaP);
+        return 2;
+    }
+    if (ERROR_TOL < fabs(expectedAlphaP - myST->alphaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
+                myST->alphaP, expectedAlphaP);
+        return 3;
+    }
+    if (ERROR_TOL < fabs(expectedPhiP - myST->phiP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
+                myST->phiP, expectedPhiP);
+        return 4;
+    }
+    psFree(myST);
+    psFree(testDateTime);
+
+    expectedCosDeltaP = EXPECT_COS_DELTAP_2100;
+    expectedSinDeltaP = -EXPECT_SIN_DELTAP_2100;
+
+    // Set test date time to 1/1/2100 00:00:00
+    testDateTime = psTimeFromMJD(MJD_2100);
+
+    // Invoke function to set psSphereRota objec
+    myST = psSphereRotEclipticToICRS(testDateTime);
+
+    // Verify expected values for the specified time
+    if (ERROR_TOL < fabs(expectedSinDeltaP - myST->sinDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
+                myST->sinDeltaP, expectedSinDeltaP);
+        return 5;
+    }
+    if (ERROR_TOL < fabs(expectedCosDeltaP - myST->cosDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
+                myST->cosDeltaP, expectedCosDeltaP);
+        return 6;
+    }
+    if (ERROR_TOL < fabs(expectedAlphaP - myST->alphaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
+                myST->alphaP, expectedAlphaP);
+        return 7;
+    }
+    if (ERROR_TOL < fabs(expectedPhiP - myST->phiP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
+                myST->phiP, expectedPhiP);
+        return 8;
+    }
+    psFree(myST);
+    psFree(testDateTime);
+
+    // Verify if argument psTime is NULL, function returns NULL and error message generated
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    myST = psSphereRotEclipticToICRS(NULL);
+    if (myST != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotEclipticICRS() did not return NULL.");
+        return 9;
+    }
+
+    // Verify if argument psTime is less than 1900, function return NULL and error msg generated
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    testDateTime = psTimeFromMJD(MJD_1900 - 1.0);
+    myST = psSphereRotEclipticToICRS(testDateTime);
+    if (myST != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotEclipticToICRS() did not return NULL.");
+        return 10;
+    }
+    psFree(testDateTime);
+
+    return 0;
+}
+
+#define ITG_EXPECT_ALPHAP      4.93683
+#define ITG_EXPECT_SINDELTAP   0.88999
+#define ITG_EXPECT_COSDELTAP   0.45598
+#define ITG_EXPECT_PHIP        0.57477
+
+psS32 testSphereRotICRSToGalactic( void )
+{
+    // Invoke function
+    psSphereRot *myST = psSphereRotICRSToGalactic();
+
+    // Verify did not return NULL
+    if(myST == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotICRSToGalactic returned NULL");
+        return 1;
+    }
+    // Verify returned structure has members set properly
+    if (ERROR_TOL < fabs(ITG_EXPECT_SINDELTAP - myST->sinDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
+                myST->sinDeltaP, ITG_EXPECT_SINDELTAP);
+        return 2;
+    }
+    if (ERROR_TOL < fabs(ITG_EXPECT_COSDELTAP - myST->cosDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
+                myST->cosDeltaP, ITG_EXPECT_COSDELTAP);
+        return 3;
+    }
+    if (ERROR_TOL < fabs(ITG_EXPECT_ALPHAP - myST->alphaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
+                myST->alphaP, ITG_EXPECT_ALPHAP);
+        return 4;
+    }
+    if (ERROR_TOL < fabs(ITG_EXPECT_PHIP - myST->phiP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
+                myST->phiP, ITG_EXPECT_PHIP);
+        return 5;
+    }
+    // Free data structure created
+    psFree(myST);
+
+    return 0;
+}
+
+#define GTI_EXPECT_PHIP        4.93683
+#define GTI_EXPECT_SINDELTAP  -0.88999
+#define GTI_EXPECT_COSDELTAP   0.45598
+#define GTI_EXPECT_ALPHAP      0.57477
+
+psS32 testSphereRotGalacticToICRS( void )
+{
+    // Invoke function
+    psSphereRot *myST = psSphereRotGalacticToICRS();
+
+    // Verify did not return NULL
+    if(myST == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psSphereRotGalacticToICRS returned NULL");
+        return 1;
+    }
+    // Verify returned structure has members set properly
+    if (ERROR_TOL < fabs(GTI_EXPECT_SINDELTAP - myST->sinDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
+                myST->sinDeltaP, GTI_EXPECT_SINDELTAP);
+        return 2;
+    }
+    if (ERROR_TOL < fabs(GTI_EXPECT_COSDELTAP - myST->cosDeltaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
+                myST->cosDeltaP, GTI_EXPECT_COSDELTAP);
+        return 3;
+    }
+    if (ERROR_TOL < fabs(GTI_EXPECT_ALPHAP - myST->alphaP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
+                myST->alphaP, GTI_EXPECT_ALPHAP);
+        return 4;
+    }
+    if (ERROR_TOL < fabs(GTI_EXPECT_PHIP - myST->phiP)) {
+        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
+                myST->phiP, GTI_EXPECT_PHIP);
+        return 5;
+    }
+    // Free data structure created
+    psFree(myST);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/astro/tst_psCoord01.c
===================================================================
--- /trunk/psLib/test/astro/tst_psCoord01.c	(revision 4547)
+++ /trunk/psLib/test/astro/tst_psCoord01.c	(revision 4547)
@@ -0,0 +1,917 @@
+/**  @file  tst_psCoord01.c
+*
+*    @brief  The code will test several functions with PSLib source file
+*            psCoord.c
+*
+*    @author Eric Van Alst, MHPCC
+*
+*    @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*    @date  $Date: 2005-07-13 02:46:58 $
+*
+*    Copyright 2005 Maui High Performance Computing Center, Univ. of Hawaii
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testProjectionAlloc(void);
+static psS32 testProjectTan(void);
+static psS32 testDeprojectTan(void);
+static psS32 testProjectSin(void);
+static psS32 testDeprojectSin(void);
+static psS32 testProjectAit(void);
+static psS32 testDeprojectAit(void);
+static psS32 testProjectPar(void);
+static psS32 testDeprojectPar(void);
+static psS32 testProjectFail(void);
+static psS32 testDeprojectFail(void);
+static psS32 testSetOffsetSphere(void);
+static psS32 testSetOffsetLinear(void);
+static psS32 testGetOffsetSphere(void);
+static psS32 testGetOffsetLinear(void);
+
+testDescription tests[] = {
+                              {testProjectionAlloc, 833, "psProjectionAlloc",0,false},
+                              {testProjectTan, 834, "psProject(TAN)",0,false},
+                              {testDeprojectTan, 835, "psDeproject(TAN)",0,false},
+                              {testProjectSin, 834, "psProject(SIN)",0,false},
+                              {testDeprojectSin, 835, "psDeproject(SIN)",0,false},
+                              {testProjectAit, 834, "psProject(AIT)",0,false},
+                              {testDeprojectAit, 835, "psDeproject(AIT)",0,false},
+                              {testProjectPar, 834, "psProject(PAR)",0,false},
+                              {testDeprojectPar, 835, "psDeproject(PAR)",0,false},
+                              {testProjectFail, 834, "psProject",0,false},
+                              {testDeprojectFail, 835, "psProject",0,false},
+                              {testSetOffsetSphere, 0000, "psSphereSetOffset",0,false},
+                              {testSetOffsetLinear, 0000, "psSphereSetOffset",0,false},
+                              {testGetOffsetSphere, 0000, "psSphereGetOffset",0,false},
+                              {testGetOffsetLinear, 0000, "psSphereGetOffset",0,false},
+                              {NULL}
+                          };
+
+
+#define ERROR_TOL    0.0001
+#define TESTPOINTS   4
+#define DEG_INC   30.0
+
+#define MY_TINY 0.0001
+#define PS_COMPARE_TINY_THEN_PRINT_ERROR(ACTUAL, EXPECT, TESTSTATUS) \
+if (MY_TINY < fabs(EXPECT - ACTUAL)) { \
+    psError(PS_ERR_UNKNOWN,true,"%s is %lg, should be %lg", #ACTUAL, ACTUAL, EXPECT, TESTSTATUS); \
+    return TESTSTATUS; \
+}
+
+
+//  alpha, delta, alpha-center, delta-center, scale-x, scale-y
+psF64 projectionTestPoint[TESTPOINTS][6] = {
+            {  0.785398,  0.785398,  0.000000,  0.000000,  1.000000,  1.000000 },
+            {  0.100000,  1.500000,  0.500000,  0.250000,  1.000000,  1.000000 },
+            {  0.628319,  0.448799,  0.000000,  0.000000,  0.250000,  0.750000 },
+            { -1.047196,  0.222222, -0.250000,  0.000000,  1.500000,  1.250000 }
+        };
+
+// Expected values for TAN
+psF64 projectionTanExpected[TESTPOINTS][2] = {
+            { -1.000000, -1.414214 },
+            {  0.088884, -3.066567 },
+            { -0.181636, -0.446444 },
+            {  1.535818, -0.404231 }
+        };
+
+// Expected values for SIN
+psF64 projectionSinExpected[TESTPOINTS][2] = {
+            { -0.500000, -0.707101 },
+            {  0.027546, -0.950366 },
+            { -0.132394, -0.325413 },
+            {  1.046712, -0.275497 }
+        };
+
+// Expected values for AIT
+psF64 projectionAitExpected[TESTPOINTS][2] = {
+            { -0.549175,  0.523375 },
+            {  0.027895,  0.313807 },
+            { -0.162822,  0.607646 },
+            {  1.455312,  0.955388 }
+        };
+
+// Expected values for PAR
+psF64 projectionParExpected[TESTPOINTS][2] = {
+            { -0.541244,  0.545532 },
+            {  0.027703,  0.329366 },
+            { -0.157157,  0.633550 },
+            {  1.432951,  0.971372 }
+        };
+
+// Testpoints, offset and expected values for psSphereSetOffset test
+#define TESTPOINTS_OFFSET  4
+psF64 setOffsetTestpoint[TESTPOINTS_OFFSET][2] = {
+            { 0.50,  0.50 },
+            {-0.50,  0.50 },
+            { 0.00,  0.00 },
+            { 1.50, -0.10 }
+        };
+
+psF64 setOffsetOffset[TESTPOINTS_OFFSET][2] = {
+            { 0.190761, -0.272205 },
+            {-0.553049, -0.460926 },
+            { 0.100335,-14.172222 },
+            {14.172222, -0.100335 }
+        };
+
+psF64 setOffsetResult[TESTPOINTS_OFFSET][2] = {
+            { 0.25,  0.75 },
+            { 0.20,  0.80 },
+            {-0.10,  1.50 },
+            { 0.00,  0.00 }
+        };
+
+psF64 getOffsetTestpoint1[TESTPOINTS_OFFSET][2] = {
+            { 0.00,  0.00 },
+            {-0.25,  0.50 },
+            { 0.50, -0.25 },
+            { 0.25, -0.10 }
+        };
+
+psF64 getOffsetTestpoint2[TESTPOINTS_OFFSET][2] = {
+            { 0.75,  0.25 },
+            { 0.40, -0.60 },
+            { 1.50,  0.50 },
+            { 0.10,  0.75 }
+        };
+
+psF64 getOffsetResult[TESTPOINTS_OFFSET][2] = {
+            { -0.931596, -0.348976 },
+            { -1.632830,  2.649629 },
+            { -2.166795, -1.707211 },
+            {  0.167752, -1.151351 }
+        };
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( !runTestSuite(stderr,"psCoord",tests,argc,argv) );
+}
+
+psS32 testProjectionAlloc(void)
+{
+    // Allocate new psProjection structure
+    psProjection*  myProjection = psProjectionAlloc(1.1, 2.2, 3.3, 4.4, PS_PROJ_AIT);
+
+    // Verify NULL is not returned
+    if(myProjection == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL");
+        return 1;
+    }
+    // Verify the members are set correctly
+    if(myProjection->R != 1.1) {
+        psError(PS_ERR_UNKNOWN,true,"R member set to %lg, but expected %lg",
+                myProjection->R, 1.1);
+        return 2;
+    }
+    if(myProjection->D != 2.2) {
+        psError(PS_ERR_UNKNOWN,true,"D member set to %lg, but expected %lg",
+                myProjection->D, 2.2);
+        return 3;
+    }
+    if(myProjection->Xs != 3.3) {
+        psError(PS_ERR_UNKNOWN,true,"Xs member set to %lg, but expected %lg",
+                myProjection->Xs, 3.3);
+        return 4;
+    }
+    if(myProjection->Ys != 4.4) {
+        psError(PS_ERR_UNKNOWN,true,"Ys member set to %lg, but expected %lg",
+                myProjection->Ys, 4.4);
+        return 5;
+    }
+    if(myProjection->type != PS_PROJ_AIT) {
+        psError(PS_ERR_UNKNOWN,true,"type member set to %d, but expected %d",
+                myProjection->type, PS_PROJ_AIT);
+        return 6;
+    }
+
+    // Free projection
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testProjectTan(void)
+{
+    psPlane*       out = NULL;
+    psSphere*      in = psSphereAlloc();
+    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
+
+    // Perform projecton on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and project members
+        in->r = projectionTestPoint[i][0];
+        in->d = projectionTestPoint[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform projection
+        out = psProject(in, myProjection);
+
+        // Verify output not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return i*10;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->x - projectionTanExpected[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
+                    i,out->x, projectionTanExpected[i][0]);
+            return i*10+1;
+        }
+        if(fabs(out->y - projectionTanExpected[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
+                    i,out->y, projectionTanExpected[i][1]);
+            return i*10+2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testDeprojectTan(void)
+{
+    psSphere*       out = NULL;
+    psPlane*        in = psPlaneAlloc();
+    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
+
+    // Perform deprojection on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and projection members
+        in->x = projectionTanExpected[i][0];
+        in->y = projectionTanExpected[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform deprojection
+        out = psDeproject(in, myProjection);
+
+        // Verify output is not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return 20*i;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
+                    i,out->r,projectionTestPoint[i][0]);
+            return 20*i + 1;
+        }
+        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
+                    i, out->d, projectionTestPoint[i][1]);
+            return 20*i + 2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testProjectSin(void)
+{
+    psPlane*       out = NULL;
+    psSphere*      in = psSphereAlloc();
+    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_SIN);
+
+    // Perform projecton on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and project members
+        in->r = projectionTestPoint[i][0];
+        in->d = projectionTestPoint[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform projection
+        out = psProject(in, myProjection);
+
+        // Verify output not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return i*10;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->x - projectionSinExpected[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
+                    i,out->x, projectionSinExpected[i][0]);
+            return i*10+1;
+        }
+        if(fabs(out->y - projectionSinExpected[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
+                    i,out->y, projectionSinExpected[i][1]);
+            return i*10+2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testDeprojectSin(void)
+{
+    psSphere*       out = NULL;
+    psPlane*        in = psPlaneAlloc();
+    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_SIN);
+
+    // Perform deprojection on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and projection members
+        in->x = projectionSinExpected[i][0];
+        in->y = projectionSinExpected[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform deprojection
+        out = psDeproject(in, myProjection);
+
+        // Verify output is not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return 20*i;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
+                    i,out->r,projectionTestPoint[i][0]);
+            return 20*i + 1;
+        }
+        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
+                    i, out->d, projectionTestPoint[i][1]);
+            return 20*i + 2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testProjectAit(void)
+{
+    psPlane*       out = NULL;
+    psSphere*      in = psSphereAlloc();
+    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_AIT);
+
+    // Perform projecton on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and project members
+        in->r = projectionTestPoint[i][0];
+        in->d = projectionTestPoint[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform projection
+        out = psProject(in, myProjection);
+
+        // Verify output not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return i*10;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->x - projectionAitExpected[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
+                    i,out->x, projectionAitExpected[i][0]);
+            return i*10+1;
+        }
+        if(fabs(out->y - projectionAitExpected[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
+                    i,out->y, projectionAitExpected[i][1]);
+            return i*10+2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testDeprojectAit(void)
+{
+    psSphere*       out = NULL;
+    psPlane*        in = psPlaneAlloc();
+    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_AIT);
+
+    // Perform deprojection on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and projection members
+        in->x = projectionAitExpected[i][0];
+        in->y = projectionAitExpected[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform deprojection
+        out = psDeproject(in, myProjection);
+
+        // Verify output is not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return 20*i;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
+                    i,out->r,projectionTestPoint[i][0]);
+            return 20*i + 1;
+        }
+        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
+                    i, out->d, projectionTestPoint[i][1]);
+            return 20*i + 2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testProjectPar(void)
+{
+    psPlane*       out = NULL;
+    psSphere*      in = psSphereAlloc();
+    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_PAR);
+
+    // Perform projecton on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and project members
+        in->r = projectionTestPoint[i][0];
+        in->d = projectionTestPoint[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform projection
+        out = psProject(in, myProjection);
+
+        // Verify output not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return i*10;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->x - projectionParExpected[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
+                    i,out->x, projectionParExpected[i][0]);
+            return i*10+1;
+        }
+        if(fabs(out->y - projectionParExpected[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
+                    i,out->y, projectionParExpected[i][1]);
+            return i*10+2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testDeprojectPar(void)
+{
+    psSphere*       out = NULL;
+    psPlane*        in = psPlaneAlloc();
+    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_PAR);
+
+    // Perform deprojection on various test points
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+
+        // Initialize input and projection members
+        in->x = projectionParExpected[i][0];
+        in->y = projectionParExpected[i][1];
+        myProjection->R = projectionTestPoint[i][2];
+        myProjection->D = projectionTestPoint[i][3];
+        myProjection->Xs = projectionTestPoint[i][4];
+        myProjection->Ys = projectionTestPoint[i][5];
+
+        // Perform deprojection
+        out = psDeproject(in, myProjection);
+
+        // Verify output is not NULL
+        if(out == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
+            return 20*i;
+        }
+
+        // Verify output is as expected
+        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
+                    i,out->r,projectionTestPoint[i][0]);
+            return 20*i + 1;
+        }
+        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
+                    i, out->d, projectionTestPoint[i][1]);
+            return 20*i + 2;
+        }
+        psFree(out);
+    }
+
+    psFree(in);
+    psFree(myProjection);
+
+    return 0;
+}
+
+psS32 testProjectFail(void)
+{
+    psPlane*       out          = NULL;
+    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
+    psSphere*      in           = psSphereAlloc();
+
+    // Invoke function with null coordinate argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null coord arg");
+    out = psProject(NULL, myProjection);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
+        return 1;
+    }
+
+    // Invoke function with null projection argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null projection arg");
+    out = psProject(in, NULL);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
+        return 2;
+    }
+
+    // Invoke function with invalid projection type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid projection type");
+    myProjection->type = PS_PROJ_NTYPE;
+    out = psProject(in,myProjection);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
+        return 3;
+    }
+
+    psFree(myProjection);
+    psFree(in);
+
+    return 0;
+}
+
+psS32 testDeprojectFail(void)
+{
+    psSphere*      out          = NULL;
+    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
+    psPlane*       in           = psPlaneAlloc();
+
+    // Invoke function with null coordinate argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null coord arg");
+    out = psDeproject(NULL, myProjection);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
+        return 1;
+    }
+
+    // Invoke function with null projection argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null projection arg");
+    out = psDeproject(in, NULL);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
+        return 2;
+    }
+
+    // Invoke function with invalid projection type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid projection type");
+    myProjection->type = PS_PROJ_NTYPE;
+    out = psDeproject(in,myProjection);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
+        return 3;
+    }
+
+    psFree(myProjection);
+    psFree(in);
+
+    return 0;
+}
+
+psS32 testSetOffsetSphere( void )
+{
+    psSphere* position1 = psSphereAlloc();
+    psSphere* position2 = NULL;
+    psSphere* offset    = psSphereAlloc();
+    psSphere* tmpOffset = psSphereAlloc();
+
+    // Initialize first position
+    position1->r = DEG_TO_RAD(90.0);
+    position1->d = DEG_TO_RAD(45.0);
+    position1->rErr = 0.0;
+    position1->dErr = 0.0;
+
+    //  Using various offset verify spherical offset
+    //  Use all the valid unit types
+    for (psF64 r = 0.0; r < 180.0; r += DEG_INC) {
+        for (psF64 d = 0.0; d < 90.0; d += DEG_INC) {
+
+            offset->r = DEG_TO_RAD(r);
+            offset->d = DEG_TO_RAD(d);
+            offset->rErr = 0.0;
+            offset->dErr = 0.0;
+
+            position2 = psSphereSetOffset(position1, offset, PS_SPHERICAL, PS_RADIAN);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 1);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 2);
+            psFree(position2);
+
+            tmpOffset->r = RAD_TO_DEG(offset->r);
+            tmpOffset->d = RAD_TO_DEG(offset->d);
+            tmpOffset->rErr = 0.0;
+            tmpOffset->dErr = 0.0;
+            position2 = psSphereSetOffset(position1, tmpOffset, PS_SPHERICAL, PS_DEGREE);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 3);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 4);
+            psFree(position2);
+
+            tmpOffset->r = RAD_TO_MIN(offset->r);
+            tmpOffset->d = RAD_TO_MIN(offset->d);
+            tmpOffset->rErr = 0.0;
+            tmpOffset->dErr = 0.0;
+            position2 = psSphereSetOffset(position1, tmpOffset, PS_SPHERICAL, PS_ARCMIN);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 5);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 6);
+            psFree(position2);
+
+            tmpOffset->r = RAD_TO_SEC(offset->r);
+            tmpOffset->d = RAD_TO_SEC(offset->d);
+            tmpOffset->rErr = 0.0;
+            tmpOffset->dErr = 0.0;
+            position2 = psSphereSetOffset(position1, tmpOffset, PS_SPHERICAL, PS_ARCSEC);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 7);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 8);
+            psFree(position2);
+        }
+    }
+
+    // Attempt to call function with null input coordinate
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message null input coord");
+    position2 = psSphereSetOffset(NULL, offset, PS_LINEAR, PS_ARCSEC);
+    if (position2 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
+        return 30;
+    }
+
+    // Attempt to call function with null offset
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message null offset");
+    position2 = psSphereSetOffset(position1, NULL, PS_LINEAR, PS_ARCSEC);
+    if (position2 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
+        return 31;
+    }
+
+    // Attempt to call function with invalid mode
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid mode");
+    position2 = psSphereSetOffset(position1, offset, 0x54321, 0);
+    if (position2 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
+        return 32;
+    }
+
+    // Attempt to call function with invalid unit
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message invalid unit");
+    position2 = psSphereSetOffset(position1, offset, PS_SPHERICAL, 0x54321);
+    if (position2 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
+        return 33;
+    }
+
+    psFree(position1);
+    psFree(offset);
+    psFree(tmpOffset);
+
+    return 0;
+}
+
+psS32 testSetOffsetLinear(void)
+{
+    psSphere*   coord = psSphereAlloc();
+    psSphere*   offset = psSphereAlloc();
+    psSphere*   out = NULL;
+
+    for(psS32 i = 0; i < TESTPOINTS_OFFSET; i++) {
+
+        coord->r = setOffsetTestpoint[i][0];
+        coord->d = setOffsetTestpoint[i][1];
+
+        offset->r = setOffsetOffset[i][0];
+        offset->d = setOffsetOffset[i][1];
+
+        out = psSphereSetOffset(coord, offset, PS_LINEAR, PS_RADIAN);
+
+        if(fabs(out->r - setOffsetResult[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->r = %lg not equal to expected %lg",
+                    i, out->r, setOffsetResult[i][0]);
+            return i*10;
+        }
+        if(fabs(out->d - setOffsetResult[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->d = %lg not equal to expected %lg",
+                    i,out->d, setOffsetResult[i][1]);
+            return i*10+1;
+        }
+
+        psFree(out);
+    }
+
+    psFree(coord);
+    psFree(offset);
+
+    return 0;
+}
+
+psS32 testGetOffsetSphere( void )
+{
+    psSphere* position1 = psSphereAlloc();
+    psSphere* position2 = psSphereAlloc();
+    psSphere *offset = NULL;
+
+    position1->r = DEG_TO_RAD(90.0);
+    position1->d = DEG_TO_RAD(45.0);
+    position1->rErr = 0.0;
+    position1->dErr = 0.0;
+
+    for (psF64 r = 0.0; r < 180.0;r += DEG_INC) {
+        for (psF64 d = 0.0;d < 90.0; d += DEG_INC) {
+            position2->r = DEG_TO_RAD(r);
+            position2->d = DEG_TO_RAD(d);
+            position2->rErr = 0.0;
+            position2->dErr = 0.0;
+
+            offset = psSphereGetOffset( position1,  position2,
+                                        PS_SPHERICAL, PS_RADIAN);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 1);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 1);
+            psFree(offset);
+
+            offset = psSphereGetOffset( position1, position2,
+                                        PS_SPHERICAL, PS_DEGREE);
+            offset->r = DEG_TO_RAD(offset->r);
+            offset->d = DEG_TO_RAD(offset->d);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 2);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 3);
+            psFree(offset);
+
+            offset = psSphereGetOffset( position1,  position2,
+                                        PS_SPHERICAL, PS_ARCMIN);
+            offset->r = MIN_TO_RAD(offset->r);
+            offset->d = MIN_TO_RAD(offset->d);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 2);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 3);
+            psFree(offset);
+
+            offset = psSphereGetOffset( position1,  position2,
+                                        PS_SPHERICAL, PS_ARCSEC);
+            offset->r = SEC_TO_RAD(offset->r);
+            offset->d = SEC_TO_RAD(offset->d);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 2);
+            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 3);
+            psFree(offset);
+        }
+    }
+
+    // Attempt to invoke function with null position 1 parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null position");
+    offset = psSphereGetOffset(NULL, position2, PS_LINEAR, 0);
+    if (offset != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 10;
+    }
+
+    // Attempt to invoke function with null position 2 parameter
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null position");
+    offset = psSphereGetOffset(position1, NULL, PS_LINEAR, 0);
+    if (offset != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 11;
+    }
+
+    // Attempt to invoke function with invalid mode
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid mode");
+    offset = psSphereGetOffset(position1, position2, 0x54321, 0);
+    if (offset != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 12;
+    }
+
+    // Attempt to invoke function with invalid unit type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid unit type");
+    offset = psSphereGetOffset(position1, position2, PS_SPHERICAL, 0x54321);
+    if (offset != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 13;
+    }
+
+    // Attempt to invoke function with coordinate 1 declination value 90.0 degree
+    position1->d = DEG_TO_RAD(90.0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate warning message");
+    offset = psSphereGetOffset(position1, position2, PS_SPHERICAL, PS_RADIAN);
+    if (offset != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 14;
+    }
+
+    // Attempt to invoke function with coordinate 2 declination value 90.0 degree
+    position1->d = DEG_TO_RAD(45.0);
+    position2->d = DEG_TO_RAD(90.0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate warning message");
+    offset = psSphereGetOffset(position1, position2, PS_SPHERICAL, PS_RADIAN);
+    if (offset != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 15;
+    }
+
+    psFree(position1);
+    psFree(position2);
+
+    return 0;
+}
+
+psS32 testGetOffsetLinear(void)
+{
+    psSphere*   coord1 = psSphereAlloc();
+    psSphere*   coord2 = psSphereAlloc();
+    psSphere*   out = NULL;
+
+    for(psS32 i = 0; i < TESTPOINTS_OFFSET; i++) {
+
+        coord1->r = getOffsetTestpoint1[i][0];
+        coord1->d = getOffsetTestpoint1[i][1];
+
+        coord2->r = getOffsetTestpoint2[i][0];
+        coord2->d = getOffsetTestpoint2[i][1];
+
+        out = psSphereGetOffset(coord1, coord2, PS_LINEAR, PS_RADIAN);
+
+        if(fabs(out->r - getOffsetResult[i][0]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->r = %lg not equal to expected %lg",
+                    i, out->r, getOffsetResult[i][0]);
+            return i*10;
+        }
+        if(fabs(out->d - getOffsetResult[i][1]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->d = %lg not equal to expected %lg",
+                    i,out->d, getOffsetResult[i][1]);
+            return i*10+1;
+        }
+
+        psFree(out);
+    }
+
+    psFree(coord1);
+    psFree(coord2);
+
+    return 0;
+}
+
+
Index: /trunk/psLib/test/astro/tst_psTime_01.c
===================================================================
--- /trunk/psLib/test/astro/tst_psTime_01.c	(revision 4547)
+++ /trunk/psLib/test/astro/tst_psTime_01.c	(revision 4547)
@@ -0,0 +1,1160 @@
+/** @file  tst_psTime_01.c
+ *
+ *  @brief Test driver for psTime functions
+ *
+ *  This test driver contains the following tests for psTime:
+ *     1) Allocate psTime structure
+ *     2) Get current time
+ *     3) Get UT1 UTC delta
+ *     4) Convert psTime to MJD
+ *     5) Convert psTime to JD
+ *     6) Convert psTime to ISO
+ *     7) Convert psTime to timeval
+ *     8) Create psTime from MJD
+ *     9) Create psTime from JD
+ *    10) Create psTime from ISO
+ *    11) Create psTime from timeval
+ *    12) Create psTime from TM
+ *    13) Convert time between different types
+ *
+ *     O) Convert psTime time to LMST
+ *
+ *  @author  Ross Harman, MHPCC
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:46:58 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+#include <string.h>
+
+#define ERROR_TOL    0.0001
+
+static psS32 testTimeAlloc(void);
+static psS32 testTimeGetNow(void);
+static psS32 testTimeGetUT1Delta(void);
+static psS32 testTimeToMJD(void);
+static psS32 testTimeToJD(void);
+static psS32 testTimeToISO(void);
+static psS32 testTimeToTimeval(void);
+static psS32 testTimeFromMJD(void);
+static psS32 testTimeFromJD(void);
+static psS32 testTimeFromISO(void);
+static psS32 testTimeFromTimeval(void);
+static psS32 testTimeFromTM(void);
+static psS32 testTimeConvert(void);
+
+testDescription tests[] = {
+                              {testTimeAlloc,000,"psTimeAlloc",0,false},
+                              {testTimeGetNow,000,"psTimeGetNow",0,false},
+                              {testTimeGetUT1Delta,000,"psTimeGetUT1Delta",0,false},
+                              {testTimeToMJD,000,"psTimeToMJD",0,false},
+                              {testTimeToJD,000,"psTimeToJD",0,false},
+                              {testTimeToISO,000,"psTimeToISO",0,false},
+                              {testTimeToTimeval,000,"psTimeToTimeval",0,false},
+                              {testTimeFromMJD,000,"psTimeFromMJD",0,false},
+                              {testTimeFromJD,000,"psTimeFromJD",0,false},
+                              {testTimeFromISO,000,"psTimeFromISO",0,false},
+                              {testTimeFromTimeval,000,"psTimeFromTimeval",0,false},
+                              {testTimeFromTM,000,"p_psTimeFromTM",0,false},
+                              {testTimeConvert,000,"psTimeConvert",0,false},
+                              {NULL}
+                          };
+
+// Test Time 1 : July 21, 2004  18:22:24.3
+//               MJD = 53207.765559
+//               JD = 2453208.265559
+// UTC Test Time 1
+const psS64 testTime1SecondsUTC     = 1090434144;
+const psU32 testTime1NanosecondsUTC = 272044000;
+// TAI Test Time 1
+const psS64 testTime1SecondsTAI     = 1090434176;
+const psU32 testTime1NanosecondsTAI = 272044000;
+const psF64 testTime1MJDTAI         = 53207.76592937;
+const psF64 testTime1JDTAI          = 2453208.26592937;
+
+// TT Test Time 1
+const psS64 testTime1SecondsTT      = 1090434208;
+const psU32 testTime1NanosecondsTT  = 456044000;
+// Expected UT1-UTC IERS A & B
+const psF64 testTime1UT1DeltaBullA  = -0.457233186;
+const psF64 testTime1UT1DeltaBullB  = -0.457227;
+// UT1 Test Time 1
+const psS64 testTime1SecondsUT1     = 1090434143;
+const psU32 testTime1NanosecondsUT1 = 814810814;
+// Expected MJD & JD
+const psF64 testTime1MJD            = 53207.765559;
+const psF64 testTime1JD             = 2453208.265559;
+// Expected ISO string
+const char* testTime1Str     = "2004-07-21T18:22:24,2Z";
+const char* testTime1StrLeap = "2004-07-21T18:22:60,2Z";
+// Expected timeval values
+const psS32 testTime1TimevalSec = 1090434144;
+const psS32 testTime1TimevalUsec = 272044;
+
+// Test Time 2 : Jan. 1, 1973 00:00:00.0000
+//               MJD = 41683.0000
+//               JD = 2441683.5000
+const psS64 testTime2SecondsUTC     = 94694400;
+const psU32 testTime2NanosecondsUTC = 0;
+
+// Expected UT1-UTC IERS A & B
+const psF64 testTime2UT1DeltaBullA  = 0.000000;
+const psF64 testTime2UT1DeltaBullB  = 0.000000;
+
+// Test Time 3 : Sept. 21, 2006 00:00:00.0000
+//               MJD = 53999
+//               JD = 2453999.5
+const psS64 testTime3SecondsUTC     = 1158796800;
+const psU32 testTime3NanosecondsUTC = 0;
+// Expected UT1-UTC IERS A & B
+const psF64 testTime3UT1DeltaBullA  = -0.63574;
+const psF64 testTime3UT1DeltaBullB  = -0.63574;
+
+// Test Time 4 : Jan. 1, 1969 00:00:00.0000
+//               MJD = 40222
+//               JD = 2440222.5
+const psS64 testTime4SecondsUTC     = -31536000;
+const psU32 testTime4NanosecondsUTC = 0;
+// Expected MJD and JD
+const psF64 testTime4MJD            = 40222.0;
+const psF64 testTime4JD             = 2440222.5;
+
+// Test Time 5 : Dec 31, 0001 BC 23:59:59
+//               MJD = -1397755
+//               JD = 1002245.4999
+const psS64 testTime5SecondsUTC     = -62125920001;
+const psU32 testTime5NanosecondsUTC  = 0;
+
+// Test Time 6 : Jan. 1, 10000 AD 00:00:00
+const psS64 testTime6SecondsUTC      = 253202544001;
+const psU32 testTime6NanosecondsUTC  = 0;
+
+// Test Time 7 : Jan. 1, 2004 00:00:00,0
+const psS64 testTime7Seconds         = 1072915200;
+const psU32 testTime7Nanoseconds     = 0;
+const psS32 testTime7TmYear          = 104;
+const psS32 testTime7TmMon           = 0;
+const psS32 testTime7TmDay           = 1;
+const psS32 testTime7TmHour          = 0;
+const psS32 testTime7TmMin           = 0;
+const psS32 testTime7TmSec           = 0;
+
+// Test Time 8 : Dec. 31, 2003 00:00:00,0
+const psS64 testTime8Seconds         = 1072828800;
+const psU32 testTime8Nanoseconds     = 0;
+const psS32 testTime8TmYear          = 103;
+const psS32 testTime8TmMon           = 11;
+const psS32 testTime8TmDay           = 31;
+const psS32 testTime8TmHour          = 0;
+const psS32 testTime8TmMin           = 0;
+const psS32 testTime8TmSec           = 0;
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    // Initialize library internal structures
+    psLibInit("psTime.config");
+
+    if( !runTestSuite(stderr,"psTime",tests,argc,argv)) {
+        return 1;
+    }
+
+    // Cleanup library
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeAlloc(void)
+{
+    psTime*  time = NULL;
+
+    // Allocate new psTime with valid time type
+    time = psTimeAlloc(PS_TIME_TAI);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL when psTime object ptr expected");
+        return 1;
+    }
+    // Verify members set properly
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Member type = %d not as expected %d",time->type,PS_TIME_TAI);
+        return 2;
+    }
+    if((time->sec != 0) && (time->nsec != 0) && (time->leapsecond != false)) {
+        psError(PS_ERR_UNKNOWN,true,"Members not set appropriately");
+        return 3;
+    }
+    psFree(time);
+
+    // Allocate new psTime with invalid time type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    time = psTimeAlloc(-100);
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time type");
+        return 4;
+    }
+
+    return 0;
+}
+psS32 testTimeGetNow(void)
+{
+    psTime*  timeNow = NULL;
+
+    // Get current time and verify return is psTime structure
+    timeNow = psTimeGetNow(PS_TIME_TAI);
+    if(timeNow == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return valid psTime struct");
+        return 1;
+    }
+    if(timeNow->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Time type %d not as expected %d",
+                timeNow->type, PS_TIME_TAI);
+        return 2;
+    }
+    psFree(timeNow);
+
+    // Attempt to get time with invalid type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time type");
+    timeNow = psTimeGetNow(-100);
+    if(timeNow != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time type");
+        return 3;
+    }
+
+    return 0;
+}
+
+psS32 testTimeGetUT1Delta(void)
+{
+    psTime*    time      = NULL;
+    psF64      ut1Delta  = 0.0;
+
+    // Attempt to convert NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
+    if( !isnan(ut1Delta)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for NULL psTime");
+        return 1;
+    }
+
+    // Attempt to convert invalid time
+    time = psTimeAlloc(PS_TIME_TAI);
+    time->sec = 1;
+    time->nsec = 2e9;
+    time->leapsecond = false;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
+    if( !isnan(ut1Delta)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid time");
+        return 2;
+    }
+
+    // Attempt to convert time with invalid bulletin
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid bulletin");
+    time->nsec = 2;
+    ut1Delta = psTimeGetUT1Delta(time,-100);
+    if( !isnan(ut1Delta)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid bulletin");
+        return 3;
+    }
+
+    // Attempt to get delta with valid time and bulletin A
+    time->sec  = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    time->type = PS_TIME_UTC;
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_A);
+    if(fabs(ut1Delta - testTime1UT1DeltaBullA) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 1 bulletin A",
+                ut1Delta,testTime1UT1DeltaBullA);
+        return 4;
+    }
+
+    // Attempt to get delta with valid time and bulletin B
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
+    if(fabs(ut1Delta - testTime1UT1DeltaBullB) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 1 bulletin B",
+                ut1Delta,testTime1UT1DeltaBullB);
+        return 5;
+    }
+
+    // Attempt to get delta with valid time and bulletin A
+    time->sec  = testTime2SecondsUTC;
+    time->nsec = testTime2NanosecondsUTC;
+    time->type = PS_TIME_UTC;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message predating table");
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_A);
+    if(fabs(ut1Delta - testTime2UT1DeltaBullA) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 2 bulletin A",
+                ut1Delta,testTime2UT1DeltaBullA);
+        return 6;
+    }
+
+    // Attempt to get delta with valid time and bulletin B
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message predating table");
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
+    if(fabs(ut1Delta - testTime2UT1DeltaBullB) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 2 bulletin B",
+                ut1Delta,testTime2UT1DeltaBullB);
+        return 7;
+    }
+
+    // Attempt to get delta with valid time and bulletin A
+    time->sec  = testTime3SecondsUTC;
+    time->nsec = testTime3NanosecondsUTC;
+    time->type = PS_TIME_UTC;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message postdating table");
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_A);
+    if(fabs(ut1Delta - testTime3UT1DeltaBullA) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 3 bulletin A",
+                ut1Delta,testTime3UT1DeltaBullA);
+        return 8;
+    }
+
+    // Attempt to get delta with valid time and bulletin B
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message postdating table");
+    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
+    if(fabs(ut1Delta - testTime3UT1DeltaBullB) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 3 bulletin B",
+                ut1Delta,testTime3UT1DeltaBullB);
+        return 9;
+    }
+
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeToMJD(void)
+{
+    psTime*  time = NULL;
+    psF64    mjd  = 0.0;
+
+    // Attempt to convert with time NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    mjd = psTimeToMJD(NULL);
+    if(!isnan(mjd)) {
+        psError(PS_ERR_UNKNOWN,true,"Expected NaN for NULL time");
+        return 1;
+    }
+
+    // Attempt to convert invalid time
+    time = psTimeAlloc(PS_TIME_UTC);
+    time->sec = 1;
+    time->nsec = 2e9;
+    time->leapsecond = false;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    mjd = psTimeToMJD(time);
+    if( !isnan(mjd)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid time");
+        return 2;
+    }
+
+    // Check valid time conversion to MJD after 1/1/1970 epoch
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    mjd = psTimeToMJD(time);
+    if(fabs(mjd - testTime1MJD) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected MJD = %lf not as expected %lf",
+                mjd, testTime1MJD);
+        return 3;
+    }
+
+    // Check valid time conversion to MJD before 1/1/1970 epoch
+    time->sec = testTime4SecondsUTC;
+    time->nsec = testTime4NanosecondsUTC;
+    mjd = psTimeToMJD(time);
+    if(fabs(mjd - testTime4MJD) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected MJD = %lf not as expected %lf",
+                mjd, testTime4MJD);
+        return 4;
+    }
+
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeToJD(void)
+{
+    psTime*  time = NULL;
+    psF64    jd  = 0.0;
+
+    // Attempt to convert with time NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    jd = psTimeToJD(NULL);
+    if(!isnan(jd)) {
+        psError(PS_ERR_UNKNOWN,true,"Expected NaN for NULL time");
+        return 1;
+    }
+
+    // Attempt to convert invalid time
+    time = psTimeAlloc(PS_TIME_UTC);
+    time->sec = 1;
+    time->nsec = 2e9;
+    time->leapsecond = false;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    jd = psTimeToJD(time);
+    if( !isnan(jd)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid time");
+        return 2;
+    }
+
+    // Check valid time conversion to MJD after 1/1/1970 epoch
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    jd = psTimeToJD(time);
+    if(fabs(jd - testTime1JD) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected JD = %lf not as expected %lf",
+                jd, testTime1JD);
+        return 3;
+    }
+
+    // Check valid time conversion to MJD before 1/1/1970 epoch
+    time->sec = testTime4SecondsUTC;
+    time->nsec = testTime4NanosecondsUTC;
+    jd = psTimeToJD(time);
+    if(fabs(jd - testTime4JD) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected JD = %lf not as expected %lf",
+                jd, testTime4JD);
+        return 4;
+    }
+
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeToISO(void)
+{
+    psTime*    time    = NULL;
+    char*      timeStr = NULL;
+
+    // Attempt to convert with NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
+    timeStr = psTimeToISO(time);
+    if(timeStr != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 1;
+    }
+
+    // Attempt to convert invalid time
+    time = psTimeAlloc(PS_TIME_UTC);
+    time->sec = 1;
+    time->nsec = 2e9;
+    time->leapsecond = false;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    timeStr = psTimeToISO(time);
+    if( timeStr != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
+        return 2;
+    }
+
+    // Verify return NULL for time prior to year 0000
+    time->sec = testTime5SecondsUTC;
+    time->nsec = testTime5NanosecondsUTC;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for time prior year 0000");
+    timeStr = psTimeToISO(time);
+    if(timeStr != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for time prior to year 0000");
+        return 3;
+    }
+
+    // Verify return NULL for time after to year 9999
+    time->sec = testTime6SecondsUTC;
+    time->nsec = testTime6NanosecondsUTC;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for time after year 9999");
+    timeStr = psTimeToISO(time);
+    if(timeStr != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for time after to year 9999");
+        return 4;
+    }
+
+    // Verify return string with valid time
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    timeStr = psTimeToISO(time);
+    if(strcmp(timeStr,testTime1Str) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"String %s not as expected %s",
+                timeStr, testTime1Str);
+        return 5;
+    }
+    psFree(timeStr);
+
+    // Verify return string with valid time and leap second set
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    time->leapsecond = true;
+    timeStr = psTimeToISO(time);
+    if(strcmp(timeStr,testTime1StrLeap) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"String %s not as expected %s",
+                timeStr, testTime1StrLeap);
+        return 6;
+    }
+    psFree(timeStr);
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeToTimeval(void)
+{
+    psTime*           time         = NULL;
+    struct timeval*   timevalTime  = NULL;
+
+    // Attempt to convert with NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
+    timevalTime = psTimeToTimeval(time);
+    if(timevalTime != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 1;
+    }
+
+    // Attempt to convert invalid time
+    time = psTimeAlloc(PS_TIME_UTC);
+    time->sec = 1;
+    time->nsec = 2e9;
+    time->leapsecond = false;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    timevalTime = psTimeToTimeval(time);
+    if( timevalTime != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
+        return 2;
+    }
+
+    // Attempt to convert invalid time
+    time->sec = -1;
+    time->nsec = 0;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    timevalTime = psTimeToTimeval(time);
+    if( timevalTime != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
+        return 2;
+    }
+
+    // Verify convert to timeval with valid time
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    timevalTime = psTimeToTimeval(time);
+    if(timevalTime->tv_sec != testTime1TimevalSec) {
+        psError(PS_ERR_UNKNOWN,true,"Timeval seconds %ld not as expectd %ld",
+                timevalTime->tv_sec,testTime1TimevalSec);
+        return 4;
+    }
+    if(timevalTime->tv_usec != testTime1TimevalUsec) {
+        psError(PS_ERR_UNKNOWN,true,"Timeval useconds %ld not as expected %ld",
+                timevalTime->tv_usec,testTime1TimevalUsec);
+        return 5;
+    }
+
+    psFree(timevalTime);
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromMJD(void)
+{
+    psTime*   time = NULL;
+
+    // Attempt to convert valid time to psTime
+    time = psTimeFromMJD(testTime1MJDTAI);
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                time->type,PS_TIME_TAI);
+        return 1;
+    }
+    if(time->sec != testTime1SecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec,testTime1SecondsTAI);
+        return 2;
+    }
+    psFree(time);
+
+    // Attempt to convert valid time before 1970 epoch
+    time = psTimeFromMJD(testTime4MJD);
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                time->type,PS_TIME_TAI);
+        return 3;
+    }
+    if(time->sec != testTime4SecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec,testTime4SecondsUTC);
+        return 4;
+    }
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromJD(void)
+{
+    psTime*   time = NULL;
+
+    // Attempt to convert valid time to psTime
+    time = psTimeFromJD(testTime1JDTAI);
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                time->type,PS_TIME_TAI);
+        return 1;
+    }
+    if(time->sec != testTime1SecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec,(long int)testTime1SecondsTAI);
+        return 2;
+    }
+    psFree(time);
+
+    // Attempt to convert valid time before 1970 epoch
+    time = psTimeFromJD(testTime4JD);
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                time->type,PS_TIME_TAI);
+        return 3;
+    }
+    if(time->sec != testTime4SecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec,testTime4SecondsUTC);
+        return 4;
+    }
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromISO(void)
+{
+    psTime*   time = NULL;
+
+    // Attempt to convert NULL string
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL ISO string");
+    time = psTimeFromISO(NULL);
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected for NULL ISO string");
+        return 1;
+    }
+
+    // Convert valid ISO string
+    time = psTimeFromISO(testTime1Str);
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                time->type, PS_TIME_TAI);
+        return 2;
+    }
+    if(time->sec != testTime1SecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec,testTime1SecondsTAI);
+        return 3;
+    }
+    psFree(time);
+
+    // Attempt to convert invalid ISO string
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid ISO string");
+    time = psTimeFromISO("Here I am");
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected for invalid ISO string");
+        return 4;
+    }
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromTimeval(void)
+{
+    psTime*          time        = NULL;
+    struct timeval*  timevalTime = NULL;
+
+    // Attempt to create psTime from NULL timeval ptr
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL timeval");
+    time = psTimeFromTimeval(NULL);
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL timeval ptr");
+        return 1;
+    }
+
+    // Convert valid timeval structure
+    timevalTime = (struct timeval*)psAlloc(sizeof(struct timeval));
+    timevalTime->tv_sec = testTime1SecondsTAI;
+    timevalTime->tv_usec = testTime1NanosecondsTAI / 1000;
+    time = psTimeFromTimeval(timevalTime);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return value for valid timeval");
+        return 2;
+    }
+    if(time->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"psTime type %d not as expected %d",
+                time->type, PS_TIME_TAI);
+        return 3;
+    }
+    if(time->sec != testTime1SecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                time->sec, testTime1SecondsTAI);
+        return 4;
+    }
+    if(time->nsec != testTime1NanosecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"psTime nanosec %ld not as expected %ld",
+                time->nsec, testTime1NanosecondsTAI);
+        return 5;
+    }
+    psFree(timevalTime);
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromTM(void)
+{
+    psTime*     time   = NULL;
+    struct tm*  tmTime = NULL;
+
+    // Attempt to convert from NULL tm structure ptr
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL tm ptr");
+    time = p_psTimeFromTM(tmTime);
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL tm ptr");
+        return 1;
+    }
+
+    // Verify convert for valid tm structure
+    tmTime = (struct tm*)psAlloc(sizeof(struct tm));
+    tmTime->tm_year = testTime7TmYear;
+    tmTime->tm_mon  = testTime7TmMon;
+    tmTime->tm_mday = testTime7TmDay;
+    tmTime->tm_hour = testTime7TmHour;
+    tmTime->tm_min  = testTime7TmMin;
+    tmTime->tm_sec  = testTime7TmSec;
+    time = p_psTimeFromTM(tmTime);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return value for valid tm structure");
+        return 2;
+    }
+    if(time->sec != testTime7Seconds) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec, (long int)testTime7Seconds);
+        return 3;
+    }
+    if(time->nsec != testTime7Nanoseconds) {
+        psError(PS_ERR_UNKNOWN,true,"psTime nanoseconds %ld not as expected %ld",
+                time->nsec, testTime7Nanoseconds);
+        return 4;
+    }
+    psFree(tmTime);
+    psFree(time);
+
+    // Verify convert for valid tm structure
+    tmTime = (struct tm*)psAlloc(sizeof(struct tm));
+    tmTime->tm_year = testTime8TmYear;
+    tmTime->tm_mon  = testTime8TmMon;
+    tmTime->tm_mday = testTime8TmDay;
+    tmTime->tm_hour = testTime8TmHour;
+    tmTime->tm_min  = testTime8TmMin;
+    tmTime->tm_sec  = testTime8TmSec;
+    time = p_psTimeFromTM(tmTime);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return value for valid tm structure");
+        return 2;
+    }
+    if(time->sec != testTime8Seconds) {
+        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
+                (long int)time->sec, (long int)testTime8Seconds);
+        return 3;
+    }
+    if(time->nsec != testTime8Nanoseconds) {
+        psError(PS_ERR_UNKNOWN,true,"psTime nanoseconds %ld not as expected %ld",
+                time->nsec, testTime8Nanoseconds);
+        return 4;
+    }
+    psFree(tmTime);
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeConvert(void)
+{
+    psTime*  time1 = NULL;
+    psTime*  time2 = NULL;
+
+    // Attempt to convert NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    time2 = psTimeConvert(time1,PS_TIME_TAI);
+    // Verify return value is NULL
+    if(time2 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL time specified");
+        return 1;
+    }
+
+    // Attempt to convert to invalid type
+    time1 = psTimeAlloc(PS_TIME_TAI);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
+    time2 = psTimeConvert(time1,-100);
+    // Verify return value is NULL
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
+        return 2;
+    }
+    time1->type = PS_TIME_UTC;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
+    time2 = psTimeConvert(time1,-100);
+    // Verify return value is NULL
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
+        return 2;
+    }
+    time1->type = PS_TIME_TT;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
+    time2 = psTimeConvert(time1,-100);
+    // Verify return value is NULL
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
+        return 2;
+    }
+    time1->type = -100;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
+    time2 = psTimeConvert(time1,PS_TIME_TAI);
+    // Verify return value is NULL
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
+        return 2;
+    }
+
+    // Attempt to convert with invalid time nsec > 1e9
+    time1->nsec = 2e9;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    time2 = psTimeConvert(time1,PS_TIME_TAI);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid time specified");
+        return 3;
+    }
+
+    //Attempt to convert a time to the same type
+    time2 = NULL;
+    time1->sec = 1;
+    time1->nsec = 2;
+    time1->type = PS_TIME_TAI;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_TAI);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion to same type");
+        return 4;
+    }
+    // Verify time not changed
+    if((time2->sec != 1) || (time2->nsec != 2) || (time2->type != PS_TIME_TAI) ||
+            (time2->leapsecond != false) ) {
+        psError(PS_ERR_UNKNOWN,true,"Time member changes when no change expected");
+        return 5;
+    }
+
+    // Attempt to convert a UTC time to a TAI
+    time2 = NULL;
+    time1->sec = testTime1SecondsUTC;
+    time1->nsec = testTime1NanosecondsUTC;
+    time1->type = PS_TIME_UTC;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_TAI);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UTC to TAI");
+        return 6;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_TAI);
+        return 7;
+    }
+    // Verify time is TAI as expected
+    if(time2->sec != testTime1SecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"TAI seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsTAI);
+        return 7;
+    }
+    if(time2->nsec != testTime1NanosecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"TAI nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
+                (long int)testTime1NanosecondsTAI);
+        return 8;
+    }
+
+    // Attempt to convert a UTC time to a TT
+    time2 = NULL;
+    time1->sec = testTime1SecondsUTC;
+    time1->nsec = testTime1NanosecondsUTC;
+    time1->type = PS_TIME_UTC;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_TT);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UTC to TT");
+        return 6;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_TT) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_TT);
+        return 7;
+    }
+    // Verify time is TT as expected
+    if(time2->sec != testTime1SecondsTT) {
+        psError(PS_ERR_UNKNOWN,true,"TT seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsTT);
+        return 7;
+    }
+    if(time2->nsec != testTime1NanosecondsTT) {
+        psError(PS_ERR_UNKNOWN,true,"TT nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
+                (long int)testTime1NanosecondsTT);
+        return 8;
+    }
+
+    // Attempt to convert a UTC time to UT1
+    time2 = NULL;
+    time1->sec = testTime1SecondsUTC;
+    time1->nsec = testTime1NanosecondsUTC;
+    time1->type = PS_TIME_UTC;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_UT1);
+    if(time1 != time2) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UTC to UT1");
+        return 9;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_UT1) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_UT1);
+        return 7;
+    }
+    // Verify time is UT1 as expected
+    if(time2->sec != testTime1SecondsUT1) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsUT1);
+        return 9;
+    }
+    if(time2->nsec != testTime1NanosecondsUT1) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 nanoseconds = %d not as expected %d",time2->nsec,
+                testTime1NanosecondsUT1);
+        return 10;
+    }
+
+    // Attempt to convert a TAI time to UTC
+    time2 = NULL;
+    time1->sec = testTime1SecondsTAI;
+    time1->nsec = testTime1NanosecondsTAI;
+    time1->type = PS_TIME_TAI;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_UTC);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TAI to UTC");
+        return 11;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_UTC) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_UTC);
+        return 7;
+    }
+    // Verify time is UTC as expected
+    if(time2->sec != testTime1SecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"UTC seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsUTC);
+        return 12;
+    }
+    if(time2->nsec != testTime1NanosecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"UTC nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
+                (long int)testTime1NanosecondsUTC);
+        return 13;
+    }
+
+    // Attempt to convert a TAI time to TT
+    time2 = NULL;
+    time1->sec = testTime1SecondsTAI;
+    time1->nsec = testTime1NanosecondsTAI;
+    time1->type = PS_TIME_TAI;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_TT);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TAI to TT");
+        return 14;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_TT) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_TT);
+        return 7;
+    }
+    // Verify time is TT as expected
+    if(time2->sec != testTime1SecondsTT) {
+        psError(PS_ERR_UNKNOWN,true,"TT seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsTT);
+        return 15;
+    }
+    if(time2->nsec != testTime1NanosecondsTT) {
+        psError(PS_ERR_UNKNOWN,true,"TT nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
+                (long int)testTime1NanosecondsTT);
+        return 16;
+    }
+
+    // Attempt to convert a TAI time to UT1
+    time2 = NULL;
+    time1->sec = testTime1SecondsTAI;
+    time1->nsec = testTime1NanosecondsTAI;
+    time1->type = PS_TIME_TAI;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_UT1);
+    if(time1 != time2) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TAI to UT1");
+        return 9;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_UT1) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_UT1);
+        return 7;
+    }
+    // Verify time is UT1 as expected
+    if(time2->sec != testTime1SecondsUT1) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsUT1);
+        return 9;
+    }
+    if(time2->nsec != testTime1NanosecondsUT1) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 nanoseconds = %d not as expected %d",time2->nsec,
+                testTime1NanosecondsUT1);
+        return 10;
+    }
+
+    // Attempt to convert a TT time to UTC
+    time2 = NULL;
+    time1->sec = testTime1SecondsTT;
+    time1->nsec = testTime1NanosecondsTT;
+    time1->type = PS_TIME_TT;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_UTC);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TT to UTC");
+        return 17;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_UTC) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_UTC);
+        return 7;
+    }
+    // Verify time is UTC as expected
+    if(time2->sec != testTime1SecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"UTC seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsUTC);
+        return 18;
+    }
+    if(time2->nsec != testTime1NanosecondsUTC) {
+        psError(PS_ERR_UNKNOWN,true,"UTC nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
+                (long int)testTime1NanosecondsUTC);
+        return 19;
+    }
+
+    // Attempt to convert a TT time to TAI
+    time2 = NULL;
+    time1->sec = testTime1SecondsTT;
+    time1->nsec = testTime1NanosecondsTT;
+    time1->type = PS_TIME_TT;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_TAI);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TT to TAI");
+        return 20;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_TAI);
+        return 7;
+    }
+    // Verify time is TAI as expected
+    if(time2->sec != testTime1SecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"TAI seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsTAI);
+        return 21;
+    }
+    if(time2->nsec != testTime1NanosecondsTAI) {
+        psError(PS_ERR_UNKNOWN,true,"TT nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
+                (long int)testTime1NanosecondsTAI);
+        return 22;
+    }
+
+    // Attempt to convert a TT time to UT1
+    time2 = NULL;
+    time1->sec = testTime1SecondsTT;
+    time1->nsec = testTime1NanosecondsTT;
+    time1->type = PS_TIME_TT;
+    time1->leapsecond = false;
+    time2 = psTimeConvert(time1,PS_TIME_UT1);
+    if(time1 != time2) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TT to UT1");
+        return 9;
+    }
+    // Verify time type
+    if(time2->type != PS_TIME_UT1) {
+        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
+                time2->type, PS_TIME_UT1);
+        return 7;
+    }
+    // Verify time is UT1 as expected
+    if(time2->sec != testTime1SecondsUT1) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 seconds = %ld not as expected %ld",(long int)time2->sec,
+                (long int)testTime1SecondsUT1);
+        return 9;
+    }
+    if(time2->nsec != testTime1NanosecondsUT1) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 nanoseconds = %d not as expected %d",time2->nsec,
+                testTime1NanosecondsUT1);
+        return 10;
+    }
+
+    // Attempt to convert from UT1 to TAI, UTC, TT
+    time2 = NULL;
+    time1->sec = 1;
+    time1->nsec = 2;
+    time1->type = PS_TIME_UT1;
+    time1->leapsecond = false;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message converting from UT1");
+    time2 = psTimeConvert(time1,PS_TIME_UTC);
+    if(time2 != time1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UT1");
+        return 23;
+    }
+
+    psFree(time1);
+
+    return 0;
+}
+
+//psS32 testTimeOther(void)
+//{
+//    psTime *testTime;
+//    char *testString = "2004-07-21T18:22:24.272Z";
+//
+//    psLibInit("psTime.config");
+//
+// Test time was taken at July 21, 2004 at 18:22:24.272044
+//    testTime = (psTime*)psAlloc(sizeof(psTime));
+//    testTime->sec = 1090434144;
+//    testTime->nsec = 272044000;
+//    testTime->type = PS_TIME_TAI;
+
+// Test O - psTime to LMST
+//    printPositiveTestHeader(stdout, "psTime", "Convert psTime time to LST");
+//    char *testString2 = "2004-09-10T1:00:00.00Z";
+//    psTime* testTime2 = NULL;
+//    testTime2 = psTimeFromISO(testString2);
+//    double dblTime = psTimeToLMST(testTime2, 1);
+//    printf("LST (rad): %lf\n", dblTime);
+//    psFree(testTime2);
+//    printFooter(stdout, "psTime", "Convert psTime time to LST", true);
+
+
+//    return 0;
+//}
Index: /trunk/psLib/test/astro/tst_psTime_02.c
===================================================================
--- /trunk/psLib/test/astro/tst_psTime_02.c	(revision 4547)
+++ /trunk/psLib/test/astro/tst_psTime_02.c	(revision 4547)
@@ -0,0 +1,368 @@
+/** @file  tst_psTime_02.c
+ *
+ *  @brief Test driver for psTime functions
+ *
+ *  This test driver contains the following tests for psTime:
+ *     1) Convert psTime to Local Mean Sidereal Time (LMST)
+ *     2) Calculate leap second delta between times
+ *     3) Creation of psTime of type TT
+ *     4) Creation of psTime of type UTC
+ *
+ *  @author  Ross Harman, MHPCC
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:46:58 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define ERROR_TOL  0.001
+
+static psS32 testTimeLMST(void);
+static psS32 testTimeLeapSecondDelta(void);
+static psS32 testTimeIsLeapSecond(void);
+static psS32 testTimeFromTT(void);
+static psS32 testTimeFromUTC(void);
+
+// Test Time 1 : May 9, 2005  00:00:00,0
+//               MJD = 53499.000
+//               JD = 2453499.5
+// UTC Test Time 1
+const psS64 testTime1SecondsUTC     = 1115596900;
+const psU32 testTime1NanosecondsUTC = 0;
+// Expected LMST  15:09:18
+const psF64 testTime1LMST0          = 3.967604;
+
+// Test Time 2 : May 9, 1995 00:00:00,0
+//               MJD = 49846.00
+//               JD = 2449846.5
+// UTC Test Time 2
+const psS64 testTime2SecondsUTC     = 799977600;
+const psU32 testTime2NanosecondsUTC = 0;
+// Expected leap second delta
+const psS64 testTimeLeapSecondDelta1 = 3;
+
+// Test Time 3: Jan 1, 1999 00:00:00,0
+//              MJD = 51179
+//              JD = 2451179.5
+const psS64 testTime3SecondsUTC     = 915148800;
+const psU32 testTime3NanosecondsUTC = 0;
+
+testDescription tests[] = {
+                              {testTimeLMST,000,"psTimeToLMST",0,false},
+                              {testTimeLeapSecondDelta,000,"psTimeLeapSecondDelta",0,false},
+                              {testTimeIsLeapSecond,000,"psTimeIsLeapSecond",0,false},
+                              {testTimeFromTT,000,"psTimeFromTT",0,false},
+                              {testTimeFromUTC,000,"psTimeFromUTC",0,false},
+                              {NULL}
+                          };
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    // Initialize library internal structures
+    psLibInit("psTime.config");
+
+    if( !runTestSuite(stderr,"psTime",tests,argc,argv)) {
+        return 1;
+    }
+
+    // Clean up library
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeLMST(void)
+{
+    psTime*       time      = NULL;
+    psF64         lmst      = 0.0;
+
+    // Attempt to get LMST with NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    lmst = psTimeToLMST(time,0);
+    if(!isnan(lmst)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NaN as expected %lf",lmst);
+        return 1;
+    }
+
+    // Attempt to get LMST with valid test time
+    // Allocate test time
+    time = psTimeAlloc(PS_TIME_UTC);
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    time->leapsecond = false;
+    lmst = psTimeToLMST(time,0.0);
+    if(fabs(lmst-testTime1LMST0) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"LMST %lf not as expected %lf",lmst,testTime1LMST0);
+        return 2;
+    }
+
+    // Attempt to get LMST with invalid input time UT1
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for incorrect type");
+    time->type = PS_TIME_UT1;
+    lmst = psTimeToLMST(time,0.0);
+    if(!isnan(lmst)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NaN as expected %lf",lmst);
+        return 3;
+    }
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeLeapSecondDelta(void)
+{
+    psTime*       time1   = NULL;
+    psTime*       time2   = NULL;
+    psS64         delta   = 0;
+
+    // Attempt to get delta with NULL time1 argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    delta = psTimeLeapSecondDelta(time1,time2);
+    if(delta != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
+        return 1;
+    }
+
+    // Set test time 1
+    time1 = psTimeAlloc(PS_TIME_UTC);
+    time1->sec = testTime1SecondsUTC;
+    time1->nsec = testTime1NanosecondsUTC;
+    time1->leapsecond = false;
+
+    // Attempt to get delta with NULL time2 argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    delta = psTimeLeapSecondDelta(time1,time2);
+    if(delta != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
+        return 2;
+    }
+
+    // Set test time 2 with invalid time
+    time2 = psTimeAlloc(PS_TIME_UTC);
+    time2->sec = 0;
+    time2->nsec = 2e9;
+    time2->leapsecond = false;
+
+    // Attempt to get delta with invalid time2
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    delta = psTimeLeapSecondDelta(time1,time2);
+    if(delta != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
+        return 3;
+    }
+
+    // Set test time 2 valid
+    time2->sec = testTime2SecondsUTC;
+    time2->nsec = testTime2NanosecondsUTC;
+
+    // Set test time 1 invalid
+    time1->sec = 0;
+    time1->nsec = 2e9;
+
+    // Attempt to get delta with invalid time1
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    delta = psTimeLeapSecondDelta(time1,time2);
+    if(delta != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
+        return 4;
+    }
+
+    // Set test time 1 to greater time
+    time1->sec = testTime1SecondsUTC;
+    time1->nsec = testTime1NanosecondsUTC;
+    delta = psTimeLeapSecondDelta(time1,time2);
+    if(delta != testTimeLeapSecondDelta1) {
+        psError(PS_ERR_UNKNOWN,true,"Delta %ld not as expected %ld",
+                (long int)delta,(long int)testTimeLeapSecondDelta1);
+        return 5;
+    }
+
+    // Set test time 1 to lesser time
+    delta = psTimeLeapSecondDelta(time2,time1);
+    if(delta != testTimeLeapSecondDelta1) {
+        psError(PS_ERR_UNKNOWN,true,"Delta %ld not as expected %ld",
+                (long int)delta,(long int)testTimeLeapSecondDelta1);
+        return 6;
+    }
+
+    // Attempt to get delta with times equal
+    delta = psTimeLeapSecondDelta(time1,time1);
+    if(delta != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Delta %ld not as expected 0",(long int)delta);
+        return 7;
+    }
+
+    psFree(time2);
+    psFree(time1);
+
+    return 0;
+}
+
+psS32 testTimeIsLeapSecond(void)
+{
+    psTime*     time        = NULL;
+    psBool      leapsecond  = false;
+
+    // Attempt to determine if leap second with NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
+    leapsecond = psTimeIsLeapSecond(time);
+    if(leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
+        return 1;
+    }
+
+    // Set time
+    time = psTimeAlloc(PS_TIME_TAI);
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    time->leapsecond = false;
+
+    // Attempt to determine if leap second with non-UTC time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
+    leapsecond = psTimeIsLeapSecond(time);
+    if(leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
+        return 2;
+    }
+
+    // Set time to UTC
+    time->type = PS_TIME_UTC;
+
+    // Attempt to determine if leap second with valid time
+    leapsecond = psTimeIsLeapSecond(time);
+    if(leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not a expected 0",leapsecond);
+        return 3;
+    }
+
+    // Set time to UTC with leap second
+    time->sec = testTime3SecondsUTC;
+    time->nsec = testTime3NanosecondsUTC;
+    leapsecond = psTimeIsLeapSecond(time);
+    if(!leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not a expected 1",leapsecond);
+        return 4;
+    }
+
+    // Set time to 1 second before a known leap second
+    time->sec--;
+    leapsecond = psTimeIsLeapSecond(time);
+    if(leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
+        return 5;
+    }
+
+    // Set time to 1 second after a known leap second
+    time->sec +=2;
+    leapsecond = psTimeIsLeapSecond(time);
+    if(leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
+        return 6;
+    }
+
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromTT(void)
+{
+    psTime*       time = NULL;
+
+    // Attempt to create psTime with invalid time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    time = psTimeFromTT(0,2e9);
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 1;
+    }
+
+    // Attempt to create psTime with valid time
+    time = psTimeFromTT(testTime1SecondsUTC,testTime1NanosecondsUTC);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL when not expected");
+        return 2;
+    }
+    if(time->type != PS_TIME_TT) {
+        psError(PS_ERR_UNKNOWN,true,"Type of time object %d not as expected %d",
+                time->type,PS_TIME_TT);
+        return 3;
+    }
+    if((time->sec != testTime1SecondsUTC) || (time->nsec != testTime1NanosecondsUTC)) {
+        psError(PS_ERR_UNKNOWN,true,"Seconds %ld nanoseconds %d not as expected seconds %ld nanoseconds %d",
+                (long int)time->sec,time->nsec,(long int)testTime1SecondsUTC,testTime1NanosecondsUTC);
+        return 4;
+    }
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeFromUTC(void)
+{
+    psTime*       time = NULL;
+
+    // Attempt to create psTime with invalid time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
+    time = psTimeFromUTC(0,2e9,true);
+    if(time != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
+        return 1;
+    }
+
+    // Attempt to create psTime with valid non-leapsecond time and leapsecond flag true
+    time = psTimeFromUTC(testTime1SecondsUTC,testTime1NanosecondsUTC,true);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL when not expected");
+        return 2;
+    }
+    if(time->type != PS_TIME_UTC) {
+        psError(PS_ERR_UNKNOWN,true,"Type of time object %d not as expected %d",
+                time->type,PS_TIME_UTC);
+        return 3;
+    }
+    if((time->sec != testTime1SecondsUTC) || (time->nsec != testTime1NanosecondsUTC)) {
+        psError(PS_ERR_UNKNOWN,true,"Seconds %ld nanoseconds %d not as expected seconds %ld nanoseconds %d",
+                (long int)time->sec,time->nsec,(long int)testTime1SecondsUTC,testTime1NanosecondsUTC);
+        return 4;
+    }
+    if(time->leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",time->leapsecond);
+        return 5;
+    }
+    psFree(time);
+
+    // Attempt to create psTime with valid leapsecond time but leapsecond flag false
+    time = psTimeFromUTC(testTime3SecondsUTC,testTime3NanosecondsUTC,false);
+    if(time == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL when not expected");
+        return 6;
+    }
+    if(time->type != PS_TIME_UTC) {
+        psError(PS_ERR_UNKNOWN,true,"Type of time object %d not as expected %d",
+                time->type,PS_TIME_UTC);
+        return 7;
+    }
+    if((time->sec != testTime3SecondsUTC) || (time->nsec != testTime3NanosecondsUTC)) {
+        psError(PS_ERR_UNKNOWN,true,"Seconds %ld nanoseconds %d not as expected seconds %ld nanoseconds %d",
+                (long int)time->sec,time->nsec,(long int)testTime1SecondsUTC,testTime1NanosecondsUTC);
+        return 8;
+    }
+    if(!time->leapsecond) {
+        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 1",time->leapsecond);
+        return 9;
+    }
+
+
+    psFree(time);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/astro/tst_psTime_03.c
===================================================================
--- /trunk/psLib/test/astro/tst_psTime_03.c	(revision 4547)
+++ /trunk/psLib/test/astro/tst_psTime_03.c	(revision 4547)
@@ -0,0 +1,501 @@
+/** @file  tst_psTime_03.c
+ *
+ *  @brief Test driver for psTime functions
+ *
+ *  This test driver contains the following tests for psTime:
+ *   1) psTimeMath invalid times
+ *   2) psTimeMath valid time of different types
+ *   3) psTimeDelta valid times with different types
+ *
+ *  @author  Ross Harman, MHPCC
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:46:58 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+#include <string.h>
+
+#define ERROR_TOL    0.001
+
+static psS32 testTimeMath(void);
+static psS32 testTimeDelta(void);
+static psS32 testTimeConvert1(void);
+
+// Test Time 1 : May 9, 2005 00:00:00,0
+//               MJD = 53499.00
+//               JD = 2453499.5
+// UTC Test Time 1
+const psS64 testTime1SecondsUTC         = 1115596900;
+const psU32 testTime1NanosecondsUTC     = 0;
+// TAI Test Time 1
+const psS64 testTime1SecondsTAI         = 1115596932;
+const psU32 testTime1NanosecondsTAI     = 0;
+// TT Test Time 1
+const psS64 testTime1SecondsTT          = 1115596964;
+const psU32 testTime1NanosecondsTT      = 184000000;
+// UT1 Test Time 1
+const psS64 testTime1SecondsUT1         = 1115596900;
+const psU32 testTime1NanosecondsUT1     = 184000000;
+// Delta 1
+const psF64 deltaTime1                  = -15.5;
+// Expected UTC Time 1
+const psS64 newTestTime1SecondsUTC      = 1115596884;
+const psU32 newTestTime1NanosecondsUTC  = 500000000;
+// Expected TAI Time 1
+const psS64 newTestTime1SecondsTAI      = 1115596916;
+const psU32 newTestTime1NanosecondsTAI  = 500000000;
+// Delta 2
+const psF64 deltaTime2                  = 123.066;
+// Expected TT Time 1 w/ delta 2
+const psS64 newTestTime1SecondsTT       = 1115597087;
+const psU32 newTestTime1NanosecondsTT   = 250000000;
+// Expected UT1 Time 1 w/ delta 2
+const psS64 newTestTime1SecondsUT1      = 1115597023;
+const psU32 newTestTime1NanosecondsUT1  = 250000000;
+
+// Test Time 2 : Dec. 31 1998 23:59:45,0
+//               MJD = 51178.99983
+//               JD = 2451179.49983
+// UTC Test Time 1
+const psS64 testTime2SecondsUTC         = 915148785;
+const psU32 testTime2NanosecondsUTC     = 0;
+// Delta 3
+const psF64 deltaTime3                    = 30.0;
+// Expected UTC Time
+const psS64 newTestTime2SecondsUTC      = 915148814;
+const psU32 newTestTime2NanosecondsUTC  = 0;
+
+// Appendix B time conversion tests
+//
+#define APPB_TESTS    8
+const psS64 testTimeBSeconds[APPB_TESTS] =
+    {
+        915148829,
+        915148829,
+        915148830,
+        915148830,
+        915148831,
+        915148831,
+        915148832,
+        915148832
+    };
+const psU32 testTimeBNanoseconds[APPB_TESTS] =
+    {
+        0,
+        500000000,
+        0,
+        500000000,
+        0,
+        500000000,
+        0,
+        500000000
+    };
+const psBool testTimeBLeapsecond[APPB_TESTS] =
+    {
+        false,
+        false,
+        false,
+        false,
+        true,
+        true,
+        false,
+        false
+    };
+// Expected results
+const char* testTimeBStrUTC[APPB_TESTS] =
+    {
+        "1998-12-31T23:59:58,0Z",
+        "1998-12-31T23:59:58,5Z",
+        "1998-12-31T23:59:59,0Z",
+        "1998-12-31T23:59:59,5Z",
+        "1998-12-31T23:59:60,0Z",
+        "1998-12-31T23:59:60,5Z",
+        "1999-01-01T00:00:00,0Z",
+        "1999-01-01T00:00:00,5Z"
+    };
+const char* testTimeBStrTAI[APPB_TESTS] =
+    {
+        "1999-01-01T00:00:29,0Z",
+        "1999-01-01T00:00:29,5Z",
+        "1999-01-01T00:00:30,0Z",
+        "1999-01-01T00:00:30,5Z",
+        "1999-01-01T00:00:31,0Z",
+        "1999-01-01T00:00:31,5Z",
+        "1999-01-01T00:00:32,0Z",
+        "1999-01-01T00:00:32,5Z"
+    };
+const char* testTimeBStrTT[APPB_TESTS] =
+    {
+        "1999-01-01T00:01:01,1Z",
+        "1999-01-01T00:01:01,6Z",
+        "1999-01-01T00:01:02,1Z",
+        "1999-01-01T00:01:02,6Z",
+        "1999-01-01T00:01:03,1Z",
+        "1999-01-01T00:01:03,6Z",
+        "1999-01-01T00:01:04,1Z",
+        "1999-01-01T00:01:04,6Z"
+    };
+const char* testTimeBStrUT1[APPB_TESTS] =
+    {
+        "1998-12-31T23:59:58,7Z",
+        "1998-12-31T23:59:59,2Z",
+        "1998-12-31T23:59:59,7Z",
+        "1998-12-31T23:59:60,2Z",
+        "1998-12-31T23:59:60,7Z",
+        "1999-01-01T00:00:00,2Z",
+        "1999-01-01T00:00:00,7Z",
+        "1999-01-01T00:00:01,2Z"
+    };
+
+// Test Time B1 : Dec 31, 1998 23:59:58,0
+//                MJD = 51178.99998
+//                JD = 2451179.49998
+//const psS64 testTimeB1SecondsUTC        = 915148798;
+//const psU32 testTimeB1NanosecondsUTC    = 0;
+// Expected ISO times
+//const char testTimeB1StrUTC[] = "1998-12-31T23:59:58,0Z";
+//const char testTimeB1StrTAI[] = "1999-01-01T00:00:29,0Z";
+//const char testTimeB1StrTT[]  = "1999-01-01T00:01:01,1Z";
+//const char testTimeB1StrUT1[] = "1998-12-31T23:59:57,7Z";
+//
+// Test Time B2 : Dec 31, 1998 23:59:58,5
+//
+//
+//const psS64 testTimeB2SecondsUTC       = 915148798;
+//const psU32 testTimeB2NanosecondsUTC   = 500000000;
+// Expected ISO times
+//const char testTimeB2StrUTC[] = "1998-12-31T23:59:58,5Z";
+//const char testTimeB2StrTAI[] = "1991-01-01T00:00:29,5Z";
+//const char testTimeB2StrTT[]  = "1999-01-01T00:01:01,6Z";
+//const char testTimeB2StrUT1[] = "1998-12-31T23:59:58,2Z";
+
+testDescription tests[] = {
+                              {testTimeMath,000,"psTimeMath",0,false},
+                              {testTimeDelta,000,"psTimeDelta",0,false},
+                              {testTimeConvert1,000,"psTimeConvert",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    // Initialize library internal structures
+    psLibInit("psTime.config");
+
+    if( !runTestSuite(stderr,"psTime",tests,argc,argv)) {
+        return 1;
+    }
+
+    // Clean up library
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeMath(void)
+{
+    psTime*     time      = NULL;
+    psTime*     newTime   = NULL;
+
+    // Attempt to perform math operation on NULL time
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
+    if(psTimeMath(time,-1.1) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL time");
+        return 1;
+    }
+
+    // Set up input time with invalid nanoseconds
+    time = psTimeAlloc(PS_TIME_UTC);
+    time->sec = 0;
+    time->nsec = 2e9;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid time");
+    if(psTimeMath(time,-1.1) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
+        return 2;
+    }
+
+    // Set up input time with valid time
+    time->sec = testTime1SecondsUTC;
+    time->nsec = testTime1NanosecondsUTC;
+    newTime = psTimeMath(time,deltaTime1);
+    if(newTime == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
+        return 3;
+    }
+    if(newTime->type != PS_TIME_UTC) {
+        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
+                newTime->type,PS_TIME_UTC);
+        return 4;
+    }
+    if((newTime->sec != newTestTime1SecondsUTC) || (newTime->nsec != newTestTime1NanosecondsUTC)) {
+        psError(PS_ERR_UNKNOWN,true,"UTC sec %ld nsec %d not as expected sec %ld nsec %d",
+                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsUTC,
+                newTestTime1NanosecondsUTC);
+        return 5;
+    }
+    psFree(newTime);
+
+    // Set up input time with valid TAI time
+    time->sec = testTime1SecondsTAI;
+    time->nsec = testTime1NanosecondsTAI;
+    time->type = PS_TIME_TAI;
+    newTime = psTimeMath(time,deltaTime1);
+    if(newTime == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
+        return 3;
+    }
+    if(newTime->type != PS_TIME_TAI) {
+        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
+                newTime->type,PS_TIME_TAI);
+        return 4;
+    }
+    if((newTime->sec != newTestTime1SecondsTAI) || (newTime->nsec != newTestTime1NanosecondsTAI)) {
+        psError(PS_ERR_UNKNOWN,true,"TAI sec %ld nsec %d not as expected sec %ld nsec %d",
+                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsTAI,
+                newTestTime1NanosecondsTAI);
+        return 5;
+    }
+    psFree(newTime);
+
+    // Set up input time with valid TT time
+    time->sec = testTime1SecondsTT;
+    time->nsec = testTime1NanosecondsTT;
+    time->type = PS_TIME_TT;
+    newTime = psTimeMath(time,deltaTime2);
+    if(newTime == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
+        return 3;
+    }
+    if(newTime->type != PS_TIME_TT) {
+        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
+                newTime->type,PS_TIME_TT);
+        return 4;
+    }
+    if((newTime->sec != newTestTime1SecondsTT) || (newTime->nsec != newTestTime1NanosecondsTT)) {
+        psError(PS_ERR_UNKNOWN,true,"TT sec %ld nsec %d not as expected sec %ld nsec %d",
+                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsTT,
+                newTestTime1NanosecondsTT);
+        return 5;
+    }
+    psFree(newTime);
+
+    // Set up input time with valid TT time
+    time->sec = testTime1SecondsUT1;
+    time->nsec = testTime1NanosecondsUT1;
+    time->type = PS_TIME_UT1;
+    newTime = psTimeMath(time,deltaTime2);
+    if(newTime == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
+        return 3;
+    }
+    if(newTime->type != PS_TIME_UT1) {
+        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
+                newTime->type,PS_TIME_UT1);
+        return 4;
+    }
+    if((newTime->sec != newTestTime1SecondsUT1) || (newTime->nsec != newTestTime1NanosecondsUT1)) {
+        psError(PS_ERR_UNKNOWN,true,"UT1 sec %ld nsec %d not as expected sec %ld nsec %d",
+                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsUT1,
+                newTestTime1NanosecondsUT1);
+        return 5;
+    }
+    psFree(newTime);
+
+    // Set up input time with valid UTC time and delt which crosses leap second
+    time->sec = testTime2SecondsUTC;
+    time->nsec = testTime2NanosecondsUTC;
+    time->type = PS_TIME_UTC;
+    newTime = psTimeMath(time,deltaTime3);
+    if(newTime == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
+        return 3;
+    }
+    if(newTime->type != PS_TIME_UTC) {
+        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
+                newTime->type,PS_TIME_UTC);
+        return 4;
+    }
+    if((newTime->sec != newTestTime2SecondsUTC) || (newTime->nsec != newTestTime2NanosecondsUTC)) {
+        psError(PS_ERR_UNKNOWN,true,"UTC sec %ld nsec %d not as expected sec %ld nsec %d",
+                (long int)newTime->sec,newTime->nsec,(long int)newTestTime2SecondsUTC,
+                newTestTime2NanosecondsUTC);
+        return 5;
+    }
+    psFree(newTime);
+
+    psFree(time);
+
+    return 0;
+}
+
+psS32 testTimeDelta(void)
+{
+    psTime*   time1   = NULL;
+    psTime*   time2   = NULL;
+    psF64     delta   = 0.0;
+
+    // Attempt to get delta with time1 NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
+    delta = psTimeDelta(time1,time2);
+    if(fabs(delta-0.0) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for NULL time argument");
+        return 1;
+    }
+
+    // Set time 1
+    time1 = psTimeAlloc(PS_TIME_UTC);
+
+    // Attempt to get delta with time2 NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
+    delta = psTimeDelta(time1,time2);
+    if(fabs(delta-0.0) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for NULL time argument");
+        return 2;
+    }
+
+    // Set time 2
+    time2 = psTimeAlloc(PS_TIME_UTC);
+
+    // Set time1 invalid
+    time1->sec = 0;
+    time1->nsec = 2e9;
+    // Attempt to get delta with time1 invalid
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid time");
+    delta = psTimeDelta(time1,time2);
+    if(fabs(delta-0.0) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for invalid time argument");
+        return 3;
+    }
+
+    // Set time 1 valid
+    time1->sec = testTime1SecondsUTC;
+    time1->nsec = testTime1NanosecondsUTC;
+
+    // Set time 2 invalid
+    time2->sec = 0;
+    time2->nsec = 2e9;
+    // Attempt to get delta with time2 invalid
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid time");
+    delta = psTimeDelta(time1,time2);
+    if(fabs(delta-0.0) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for invalid time argument");
+        return 4;
+    }
+
+    // Set time 2 valid but different type
+    time2->sec = newTestTime1SecondsUTC;
+    time2->nsec = newTestTime1NanosecondsUTC;
+    time2->type = PS_TIME_TAI;
+    // Attempt to get delta with different time types
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for incorrect type");
+    delta = psTimeDelta(time1,time2);
+    if(fabs(delta-0.0) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for invalid time argument");
+        return 5;
+    }
+
+    // Set time 2 to same as time 1
+    time2->type = PS_TIME_UTC;
+    // Attempt to get delta with valid times of the same type
+    delta = psTimeDelta(time2,time1);
+    if(fabs(delta-deltaTime1) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Delta %lf not as expected %lf",
+                delta,deltaTime1);
+        return 6;
+    }
+
+    // Set time 1 and 2 as different times with same type
+    time1->sec = testTime1SecondsTT;
+    time1->nsec = testTime1NanosecondsTT;
+    time1->type = PS_TIME_TT;
+    time2->sec = newTestTime1SecondsTT;
+    time2->nsec = newTestTime1NanosecondsTT;
+    time2->type = PS_TIME_TT;
+    // Attempt to get delta with valid times of the same type
+    delta = psTimeDelta(time2,time1);
+    if(fabs(delta-deltaTime2) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Delta %lf not as expected %lf",
+                delta,deltaTime2);
+        return 7;
+    }
+
+    // Set time 1 and 2 as different times with same type
+    time1->sec = testTime2SecondsUTC;
+    time1->nsec = testTime2NanosecondsUTC;
+    time1->type = PS_TIME_UTC;
+    time2->sec = newTestTime2SecondsUTC;
+    time2->nsec = newTestTime2NanosecondsUTC;
+    time2->type = PS_TIME_UTC;
+    // Attempt to get delta with valid times of the same type
+    delta = psTimeDelta(time2,time1);
+    if(fabs(delta-deltaTime3) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Delta %lf not as expected %lf",
+                delta,deltaTime3);
+        return 7;
+    }
+
+    psFree(time1);
+    psFree(time2);
+
+    return 0;
+}
+
+psS32 testTimeConvert1(void)
+{
+    psTime*     time    = NULL;
+    char*       timeStr = NULL;
+
+    for(psS32 i = 0; i < APPB_TESTS; i++) {
+
+        // Initialize time for test time B1
+        time = psTimeAlloc(PS_TIME_TAI);
+        time->sec = testTimeBSeconds[i];
+        time->nsec = testTimeBNanoseconds[i];
+
+        // Verify TAI ISO string
+        timeStr = psTimeToISO(time);
+        if(strcmp(timeStr,testTimeBStrTAI[i]) != 0) {
+            psError(PS_ERR_UNKNOWN,true,"TAI ISO string %s not as expected %s",timeStr,testTimeBStrTAI[i]);
+            return i+1;
+        }
+        psFree(timeStr);
+
+        time = psTimeConvert(time,PS_TIME_TT);
+        timeStr = psTimeToISO(time);
+        if(strcmp(timeStr,testTimeBStrTT[i]) != 0) {
+            psError(PS_ERR_UNKNOWN,true,"TT ISO string %s not as expected %s",timeStr,testTimeBStrTT[i]);
+            return i+10;
+        }
+        psFree(timeStr);
+
+        // Verify UTC ISO string
+        time = psTimeConvert(time,PS_TIME_UTC);
+        time->leapsecond = testTimeBLeapsecond[i];
+        timeStr = psTimeToISO(time);
+        if(strcmp(timeStr,testTimeBStrUTC[i]) != 0) {
+            psError(PS_ERR_UNKNOWN,true,"UTC ISO string %s not as expected %s",timeStr,testTimeBStrUTC[i]);
+            return i+20;
+        }
+        psFree(timeStr);
+
+        time = psTimeConvert(time,PS_TIME_UT1);
+        timeStr = psTimeToISO(time);
+        if(strcmp(timeStr,testTimeBStrUT1[i]) != 0) {
+            psError(PS_ERR_UNKNOWN,true,"UT1 ISO string %s not as expected %s",timeStr,testTimeBStrUT1[i]);
+            return i+30;
+        }
+        psFree(timeStr);
+
+        psFree(time);
+    }
+
+    return 0;
+}
+
Index: /trunk/psLib/test/astro/tst_psTime_04.c
===================================================================
--- /trunk/psLib/test/astro/tst_psTime_04.c	(revision 4547)
+++ /trunk/psLib/test/astro/tst_psTime_04.c	(revision 4547)
@@ -0,0 +1,106 @@
+/** @file  tst_psTime_04.c
+ *
+ *  @brief Test driver for psTime functions
+ *
+ *  This test driver contains the following tests for psTime:
+ *      Test A - Initialize time
+ *      Test B - Attempt to open non-existant time config file
+ *      Test C - Attempt to open non-existant time data files
+ *      Test D - Attempt to read incorrect number of files
+ *      Test E - Attempt to read incorrect number of from values
+ *      Test F - Attempt to read data file with typo in number
+ *      Test G - Free data
+ *
+ *  @author  Ross Harman, MHPCC
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:46:58 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+#include "config.h"
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testTimeInit1(void);
+static psS32 testTimeInit2(void);
+static psS32 testTimeInit3(void);
+static psS32 testTimeInit4(void);
+static psS32 testTimeInit5(void);
+static psS32 testTimeInit6(void);
+
+testDescription tests[] = {
+                              {testTimeInit1,000,"p_psTimeInit",0,false},
+                              {testTimeInit2,000,"p_psTimeInit",0,false},
+                              {testTimeInit3,000,"p_psTimeInit",0,false},
+                              {testTimeInit4,000,"p_psTimeInit",0,false},
+                              {testTimeInit5,000,"p_psTimeInit",0,false},
+                              {testTimeInit6,000,"p_psTimeInit",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    if(!runTestSuite(stderr,"psTime",tests,argc,argv)) {
+        return 1;
+    }
+
+    return 0;
+}
+
+psS32 testTimeInit1(void)
+{
+    // Test A - Initialize time
+    psLibInit("psTime.config");
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeInit2(void)
+{
+    // Test B - Attempt to open non-existant time config file
+    psLibInit("zzz");
+
+    return 0;
+}
+
+psS32 testTimeInit3(void)
+{
+    // Test C - Attempt to open non-existant time data files
+    psLibInit("test.psTime.config1");
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeInit4(void)
+{
+    // Test D - Attempt to read incorrect number of files
+    psLibInit("test.psTime.config2");
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeInit5(void)
+{
+    // Test E - Attempt to read incorrect number of from values
+    psLibInit("test.psTime.config3");
+    psLibFinalize();
+
+    return 0;
+}
+
+psS32 testTimeInit6(void)
+{
+    // Test F - Attempt to read data file with typo in number
+    psLibInit("test.psTime.config4");
+    psLibFinalize();
+
+    return 0;
+}
+
Index: /trunk/psLib/test/astro/verified/tst_psCoord.stderr
===================================================================
--- /trunk/psLib/test/astro/verified/tst_psCoord.stderr	(revision 4547)
+++ /trunk/psLib/test/astro/verified/tst_psCoord.stderr	(revision 4547)
@@ -0,0 +1,227 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformAlloc()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformAlloc()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psPlaneTransformAlloc()}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPlaneTransformAlloc
+    Following should generate an error message: negative x terms
+<DATE><TIME>|<HOST>|E|psPlaneTransformAlloc (FILE:LINENO)
+    Error: n1 is less than 0.
+<DATE><TIME>|<HOST>|I|testPlaneTransformAlloc
+    Following should generate an error message: negative y terms
+<DATE><TIME>|<HOST>|E|psPlaneTransformAlloc (FILE:LINENO)
+    Error: n2 is less than 0.
+
+---> TESTPOINT PASSED (psCoord{psPlaneTransformAlloc()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psPlaneDistortAlloc()}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
+    Following should generate an error message for negative x term
+<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
+    Error: n1 is less than 0.
+<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
+    Following should generate an error message for negative y term
+<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
+    Error: n2 is less than 0.
+<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
+    Following should generate an error message for negative z term
+<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
+    Error: n3 is less than 0.
+<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
+    Following should generate an error message for negative w term
+<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
+    Error: n4 is less than 0.
+
+---> TESTPOINT PASSED (psCoord{psPlaneDistortAlloc()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psPlaneTransformApply()}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPlaneTransformApply
+    Following should generate error message for NULL psPlaneTransform
+<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
+    Unallowable operation: transform is NULL.
+<DATE><TIME>|<HOST>|I|testPlaneTransformApply
+    Following should generate error message for NULL x coeff psPlaneTransform
+<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
+    Unallowable operation: transform->x is NULL.
+<DATE><TIME>|<HOST>|I|testPlaneTransformApply
+    Following should generate error message for NULL y coeff psPlaneTransform
+<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
+    Unallowable operation: transform->y is NULL.
+<DATE><TIME>|<HOST>|I|testPlaneTransformApply
+    Following should generate error message for NULL psPlane
+<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
+    Unallowable operation: coords is NULL.
+
+---> TESTPOINT PASSED (psCoord{psPlaneTransformApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psPlaneDistortApply()}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPlaneDistortApply
+    Following should generate an error message for null psPlaneDistort
+<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
+    Unallowable operation: distort is NULL.
+<DATE><TIME>|<HOST>|I|testPlaneDistortApply
+    Following should generate an error message for null x member psPlaneDistort
+<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
+    Unallowable operation: distort->x is NULL.
+<DATE><TIME>|<HOST>|I|testPlaneDistortApply
+    Following should generate an error message for null y member psPlaneDistort
+<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
+    Unallowable operation: distort->y is NULL.
+<DATE><TIME>|<HOST>|I|testPlaneDistortApply
+    Following should generate an error message for null input psPlane
+<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
+    Unallowable operation: coords is NULL.
+
+---> TESTPOINT PASSED (psCoord{psPlaneDistortApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformApply()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testSphereTransformApply1
+    Following should generate an error
+<DATE><TIME>|<HOST>|E|psSphereTransformApply (FILE:LINENO)
+    Unallowable operation: transform is NULL.
+<DATE><TIME>|<HOST>|I|testSphereTransformApply1
+    Following should generate an error
+<DATE><TIME>|<HOST>|E|psSphereTransformApply (FILE:LINENO)
+    Unallowable operation: coord is NULL.
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformApply()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformApply()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformApply()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformApply()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformICRSToEcliptic()}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testSphereTransformICRSToEcliptic
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSphereTransformICRSToEcliptic (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testSphereTransformICRSToEcliptic
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSphereTransformICRSToEcliptic (FILE:LINENO)
+    Specified time is less than 1900.
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformICRSToEcliptic()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformEclipticToICRS()}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testSphereTransformEclipticToICRS
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSphereTransformEclipticToICRS (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testSphereTransformEclipticToICRS
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSphereTransformEclipticToICRS (FILE:LINENO)
+    Specified time is less than 1900.
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformEclipticToICRS()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformICRSToGalactic()}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformICRSToGalactic()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformGalacticToICRS()}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformGalacticToICRS()} | tst_psCoord.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord.c                                              *
+*            TestPoint: psCoord{psSphereTransformPrecess()}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testSphereTransformPrecess
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSpherePrecess (FILE:LINENO)
+    Unallowable operation: toTime is NULL.
+<DATE><TIME>|<HOST>|I|testSphereTransformPrecess
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSpherePrecess (FILE:LINENO)
+    Unallowable operation: fromTime is NULL.
+<DATE><TIME>|<HOST>|I|testSphereTransformPrecess
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSpherePrecess (FILE:LINENO)
+    Unallowable operation: coords is NULL.
+
+---> TESTPOINT PASSED (psCoord{psSphereTransformPrecess()} | tst_psCoord.c)
+
Index: /trunk/psLib/test/astro/verified/tst_psCoord01.stderr
===================================================================
--- /trunk/psLib/test/astro/verified/tst_psCoord01.stderr	(revision 4547)
+++ /trunk/psLib/test/astro/verified/tst_psCoord01.stderr	(revision 4547)
@@ -0,0 +1,199 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProjectionAlloc}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psProjectionAlloc} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProject(TAN)}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psProject(TAN)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psDeproject(TAN)}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psDeproject(TAN)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProject(SIN)}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psProject(SIN)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psDeproject(SIN)}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psDeproject(SIN)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProject(AIT)}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psProject(AIT)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psDeproject(AIT)}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psDeproject(AIT)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProject(PAR)}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psProject(PAR)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psDeproject(PAR)}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psDeproject(PAR)} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProject}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testProjectFail
+    Following should generate an error message for null coord arg
+<DATE><TIME>|<HOST>|E|psProject (FILE:LINENO)
+    Unallowable operation: coord is NULL.
+<DATE><TIME>|<HOST>|I|testProjectFail
+    Following should generate an error message for null projection arg
+<DATE><TIME>|<HOST>|E|psProject (FILE:LINENO)
+    Unallowable operation: projection is NULL.
+<DATE><TIME>|<HOST>|I|testProjectFail
+    Following should generate an error message for invalid projection type
+<DATE><TIME>|<HOST>|E|psProject (FILE:LINENO)
+    The projection type, 4, is unknown.
+
+---> TESTPOINT PASSED (psCoord{psProject} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psProject}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDeprojectFail
+    Following should generate an error message for null coord arg
+<DATE><TIME>|<HOST>|E|psDeproject (FILE:LINENO)
+    Unallowable operation: coord is NULL.
+<DATE><TIME>|<HOST>|I|testDeprojectFail
+    Following should generate an error message for null projection arg
+<DATE><TIME>|<HOST>|E|psDeproject (FILE:LINENO)
+    Unallowable operation: projection is NULL.
+<DATE><TIME>|<HOST>|I|testDeprojectFail
+    Following should generate an error message for invalid projection type
+<DATE><TIME>|<HOST>|E|psDeproject (FILE:LINENO)
+    The projection type, 4, is unknown.
+
+---> TESTPOINT PASSED (psCoord{psProject} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psSphereSetOffset}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testSetOffsetSphere
+    Following should generate error message null input coord
+<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
+    Unallowable operation: position is NULL.
+<DATE><TIME>|<HOST>|I|testSetOffsetSphere
+    Following should generate error message null offset
+<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
+    Unallowable operation: offset is NULL.
+<DATE><TIME>|<HOST>|I|testSetOffsetSphere
+    Following should generate error message invalid mode
+<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
+    Specified offset mode, 0x54321, is not supported.
+<DATE><TIME>|<HOST>|I|testSetOffsetSphere
+    Following should generate an error message invalid unit
+<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
+    Specified units, 0x54321, is not supported.
+
+---> TESTPOINT PASSED (psCoord{psSphereSetOffset} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psSphereSetOffset}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereSetOffset} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psSphereGetOffset}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testGetOffsetSphere
+    Following should generate an error message for null position
+<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
+    Unallowable operation: position1 is NULL.
+<DATE><TIME>|<HOST>|I|testGetOffsetSphere
+    Following should generate an error message for null position
+<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
+    Unallowable operation: position2 is NULL.
+<DATE><TIME>|<HOST>|I|testGetOffsetSphere
+    Following should generate an error message for invalid mode
+<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
+    Specified offset mode, 0x54321, is not supported.
+<DATE><TIME>|<HOST>|I|testGetOffsetSphere
+    Following should generate an error message for invalid unit type
+<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
+    Specified units, 0x54321, is not supported.
+<DATE><TIME>|<HOST>|I|testGetOffsetSphere
+    Following should generate warning message
+<DATE><TIME>|<HOST>|W|psSphereGetOffset
+    WARNING: psDeproject(): position1->d is larger than 90 degrees.  Returning NULL.
+<DATE><TIME>|<HOST>|I|testGetOffsetSphere
+    Following should generate warning message
+<DATE><TIME>|<HOST>|W|psSphereGetOffset
+    WARNING: psDeproject(): position2->d is larger than 90 degrees.  Returning NULL.
+
+---> TESTPOINT PASSED (psCoord{psSphereGetOffset} | tst_psCoord01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psCoord01.c                                            *
+*            TestPoint: psCoord{psSphereGetOffset}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psCoord{psSphereGetOffset} | tst_psCoord01.c)
+
Index: /trunk/psLib/test/astro/verified/tst_psTime_01.stderr
===================================================================
--- /trunk/psLib/test/astro/verified/tst_psTime_01.stderr	(revision 4547)
+++ /trunk/psLib/test/astro/verified/tst_psTime_01.stderr	(revision 4547)
@@ -0,0 +1,241 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeAlloc}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeAlloc
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psTimeAlloc (FILE:LINENO)
+    Specified type, -100, is not supported.
+
+---> TESTPOINT PASSED (psTime{psTimeAlloc} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeGetNow}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeGetNow
+    Following should generate an error message for invalid time type
+<DATE><TIME>|<HOST>|E|psTimeAlloc (FILE:LINENO)
+    Specified type, -100, is not supported.
+
+---> TESTPOINT PASSED (psTime{psTimeGetNow} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeGetUT1Delta}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeGetUT1Delta (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeGetUT1Delta (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate an error message for invalid bulletin
+<DATE><TIME>|<HOST>|E|psTimeGetUT1Delta (FILE:LINENO)
+    Invalid bulletin specified -100
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate a warning message predating table
+<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
+    Specified psTime predates (41683) all tables of UT1-UTC information.
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate a warning message predating table
+<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
+    Specified psTime predates (41683) all tables of UT1-UTC information.
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate a warning message postdating table
+<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
+    Specified psTime postdates (53999) all tables of UT1-UTC information.
+<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
+    Following should generate a warning message postdating table
+<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
+    Specified psTime postdates (53999) all tables of UT1-UTC information.
+
+---> TESTPOINT PASSED (psTime{psTimeGetUT1Delta} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeToMJD}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeToMJD
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeToMJD (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeToMJD
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeToMJD (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+
+---> TESTPOINT PASSED (psTime{psTimeToMJD} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeToJD}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeToJD
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeToJD (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeToJD
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeToJD (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+
+---> TESTPOINT PASSED (psTime{psTimeToJD} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeToISO}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeToISO
+    Following should generate error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeToISO
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeToISO
+    Following should generate error message for time prior year 0000
+<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
+    Error: time->sec, -62125920001, is out of range.
+<DATE><TIME>|<HOST>|I|testTimeToISO
+    Following should generate error message for time after year 9999
+<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
+    Error: time->sec, 253202544001, is out of range.
+
+---> TESTPOINT PASSED (psTime{psTimeToISO} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeToTimeval}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeToTimeval
+    Following should generate error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeToTimeval (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeToTimeval
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeToTimeval (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeToTimeval
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeToTimeval (FILE:LINENO)
+    Error: time->sec, -1, is out of range.  Must be between 0 and 2147483647.
+
+---> TESTPOINT PASSED (psTime{psTimeToTimeval} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeFromMJD}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTime{psTimeFromMJD} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeFromJD}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTime{psTimeFromJD} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeFromISO}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeFromISO
+    Following should generate error message for NULL ISO string
+<DATE><TIME>|<HOST>|E|psTimeFromISO (FILE:LINENO)
+    Unallowable operation: input is NULL.
+<DATE><TIME>|<HOST>|I|testTimeFromISO
+    Following should generate an error for invalid ISO string
+<DATE><TIME>|<HOST>|E|psTimeFromISO (FILE:LINENO)
+    Specified ISO Time string, 'Here I am', is malformed.  Must be in 'YYYY-MM-DDThh:mm:ss.sss' format.
+
+---> TESTPOINT PASSED (psTime{psTimeFromISO} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeFromTimeval}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeFromTimeval
+    Following should generate error message for NULL timeval
+<DATE><TIME>|<HOST>|E|psTimeFromTimeval (FILE:LINENO)
+    Unallowable operation: input is NULL.
+
+---> TESTPOINT PASSED (psTime{psTimeFromTimeval} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{p_psTimeFromTM}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeFromTM
+    Following should generate error message for NULL tm ptr
+<DATE><TIME>|<HOST>|E|p_psTimeFromTM (FILE:LINENO)
+    Unallowable operation: time is NULL.
+
+---> TESTPOINT PASSED (psTime{p_psTimeFromTM} | tst_psTime_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_01.c                                            *
+*            TestPoint: psTime{psTimeConvert}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message for invalid type
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Specified type, -100, is not supported.
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message for invalid type
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Specified type, -100, is not supported.
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message for invalid type
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Specified type, -100, is not supported.
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message for invalid type
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Specified type, -100, is not supported.
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeConvert
+    Following should generate an error message converting from UT1
+<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
+    Cannot convert from UT1 time type
+
+---> TESTPOINT PASSED (psTime{psTimeConvert} | tst_psTime_01.c)
+
Index: /trunk/psLib/test/astro/verified/tst_psTime_02.stderr
===================================================================
--- /trunk/psLib/test/astro/verified/tst_psTime_02.stderr	(revision 4547)
+++ /trunk/psLib/test/astro/verified/tst_psTime_02.stderr	(revision 4547)
@@ -0,0 +1,85 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_02.c                                            *
+*            TestPoint: psTime{psTimeToLMST}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeLMST
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeToLMST (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeLMST
+    Following should generate error message for incorrect type
+<DATE><TIME>|<HOST>|E|psTimeToLMST (FILE:LINENO)
+    Specified type, 2, is incorrect.
+
+---> TESTPOINT PASSED (psTime{psTimeToLMST} | tst_psTime_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_02.c                                            *
+*            TestPoint: psTime{psTimeLeapSecondDelta}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
+    Unallowable operation: time1 is NULL.
+<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
+    Unallowable operation: time2 is NULL.
+<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
+    Error: time2->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
+    Error: time1->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+
+---> TESTPOINT PASSED (psTime{psTimeLeapSecondDelta} | tst_psTime_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_02.c                                            *
+*            TestPoint: psTime{psTimeIsLeapSecond}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeIsLeapSecond
+    Following should generate an error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeIsLeapSecond (FILE:LINENO)
+    Unallowable operation: utc is NULL.
+<DATE><TIME>|<HOST>|I|testTimeIsLeapSecond
+    Following should generate an error message for invalid type
+<DATE><TIME>|<HOST>|E|psTimeIsLeapSecond (FILE:LINENO)
+    Specified type, 0, is incorrect.
+
+---> TESTPOINT PASSED (psTime{psTimeIsLeapSecond} | tst_psTime_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_02.c                                            *
+*            TestPoint: psTime{psTimeFromTT}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeFromTT
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeFromTT (FILE:LINENO)
+    Error: nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+
+---> TESTPOINT PASSED (psTime{psTimeFromTT} | tst_psTime_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_02.c                                            *
+*            TestPoint: psTime{psTimeFromUTC}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeFromUTC
+    Following should generate an error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeFromUTC (FILE:LINENO)
+    Error: nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+
+---> TESTPOINT PASSED (psTime{psTimeFromUTC} | tst_psTime_02.c)
+
Index: /trunk/psLib/test/astro/verified/tst_psTime_03.stderr
===================================================================
--- /trunk/psLib/test/astro/verified/tst_psTime_03.stderr	(revision 4547)
+++ /trunk/psLib/test/astro/verified/tst_psTime_03.stderr	(revision 4547)
@@ -0,0 +1,55 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_03.c                                            *
+*            TestPoint: psTime{psTimeMath}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeMath
+    Following should generate error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeMath (FILE:LINENO)
+    Unallowable operation: time is NULL.
+<DATE><TIME>|<HOST>|I|testTimeMath
+    Following should generate error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeMath (FILE:LINENO)
+    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+
+---> TESTPOINT PASSED (psTime{psTimeMath} | tst_psTime_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_03.c                                            *
+*            TestPoint: psTime{psTimeDelta}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testTimeDelta
+    Following should generate error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
+    Unallowable operation: time1 is NULL.
+<DATE><TIME>|<HOST>|I|testTimeDelta
+    Following should generate error message for NULL time
+<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
+    Unallowable operation: time2 is NULL.
+<DATE><TIME>|<HOST>|I|testTimeDelta
+    Following should generate error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
+    Error: time1->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeDelta
+    Following should generate error message for invalid time
+<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
+    Error: time2->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
+<DATE><TIME>|<HOST>|I|testTimeDelta
+    Following should generate error message for incorrect type
+<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
+    Specified type, 1, is incorrect.
+
+---> TESTPOINT PASSED (psTime{psTimeDelta} | tst_psTime_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_03.c                                            *
+*            TestPoint: psTime{psTimeConvert}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTime{psTimeConvert} | tst_psTime_03.c)
+
Index: /trunk/psLib/test/astro/verified/tst_psTime_04.stderr
===================================================================
--- /trunk/psLib/test/astro/verified/tst_psTime_04.stderr	(revision 4547)
+++ /trunk/psLib/test/astro/verified/tst_psTime_04.stderr	(revision 4547)
@@ -0,0 +1,74 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_04.c                                            *
+*            TestPoint: psTime{p_psTimeInit}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_04.c                                            *
+*            TestPoint: psTime{p_psTimeInit}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
+    Failed to open file 'zzz'. Check if it exists and it has the proper permissions.
+<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
+    Failed to initialize psTime.
+
+---> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_04.c                                            *
+*            TestPoint: psTime{p_psTimeInit}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
+    Failed find 'psLib.time.tables.index' in time metadata.
+<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
+    Failed to initialize psTime.
+
+---> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_04.c                                            *
+*            TestPoint: psTime{p_psTimeInit}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
+    Failed find 'psLib.time.tables.index' in time metadata.
+<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
+    Failed to initialize psTime.
+
+---> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_04.c                                            *
+*            TestPoint: psTime{p_psTimeInit}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
+    Incorrect vector size. Size: 3, Expected 4.
+<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
+    Failed to initialize psTime.
+
+---> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTime_04.c                                            *
+*            TestPoint: psTime{p_psTimeInit}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
+    Failed find 'psLib.time.tables.index' in time metadata.
+<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
+    Failed to initialize psTime.
+
+---> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
+
Index: unk/psLib/test/astronomy/tst_psCoord.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psCoord.c	(revision 4546)
+++ 	(revision )
@@ -1,1351 +1,0 @@
-/** @file  tst_psCoord.c
-*
-*  @brief The code will ...
-*
-*
-*  @author GLG, MHPCC
-*
-*  @version $Revision: 1.30 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-07-12 19:27:28 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-
-#include "psTest.h"
-#include "pslib_strict.h"
-static psS32 testSphereRotAlloc(void);
-static psS32 testPlaneTransformAlloc(void);
-static psS32 testPlaneDistortAlloc(void);
-static psS32 testPlaneTransformApply(void);
-static psS32 testPlaneDistortApply(void);
-static psS32 testSphereRotApply1(void);
-static psS32 testSphereRotApply2(void);
-static psS32 testSphereRotApply3(void);
-static psS32 testSphereRotApply4(void);
-static psS32 testSphereRotApply5(void);
-static psS32 testSphereRotICRSToEcliptic(void);
-static psS32 testSphereRotEclipticToICRS(void);
-static psS32 testSphereRotICRSToGalactic(void);
-static psS32 testSphereRotGalacticToICRS(void);
-static psS32 testSphereRotPrecess(void);
-testDescription tests[] = {
-                              {testSphereRotAlloc, 819, "psSphereRotAlloc()", 0, false},
-                              {testPlaneTransformAlloc, 826, "psPlaneTransformAlloc()", 0, false},
-                              {testPlaneDistortAlloc, 827, "psPlaneDistortAlloc()", 0, false},
-                              {testPlaneTransformApply, 831, "psPlaneTransformApply()", 0, false},
-                              {testPlaneDistortApply, 832, "psPlaneDistortApply()", 0, false},
-                              {testSphereRotApply1, 820, "psSphereRotApply()", 0, false},
-                              {testSphereRotApply2, 820, "psSphereRotApply()", 0, false},
-                              {testSphereRotApply3, 820, "psSphereRotApply()", 0, false},
-                              {testSphereRotApply4, 820, "psSphereRotApply()", 0, false},
-                              {testSphereRotApply5, 820, "psSphereRotApply()", 0, false},
-                              {testSphereRotICRSToEcliptic, 821, "psSphereRotICRSToEcliptic()", 0, false},
-                              {testSphereRotEclipticToICRS, 822, "psSphereRotEclipticToICRS()", 0, false},
-                              {testSphereRotICRSToGalactic, 824, "psSphereRotICRSToGalactic()", 0, false},
-                              {testSphereRotGalacticToICRS, 823, "psSphereRotGalacticToICRS()", 0, false},
-                              {testSphereRotPrecess, 825, "psSphereRotPrecess()", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psCoord", tests, argc, argv ) );
-}
-
-#define DEG_INC   30.0
-
-#define MJD_1900  15021.0        // Modified Julian Day 1/1/1900 00:00:00
-#define MJD_2000  51544.0        // Modified Julian Day 1/1/2000 00:00:00
-#define MJD_2100  88069.0        // Modified Julian Day 1/1/2100 00:00:00
-
-#define ERROR_TOL   0.0001
-
-#define ALPHA_P 1.0
-#define DELTA_P 2.0
-#define PHI_P 3.0
-
-psS32 testSphereRotAlloc( void )
-{
-    // Allocate data structure
-    psSphereRot* myST = psSphereRotAlloc(ALPHA_P, DELTA_P, PHI_P);
-
-    // Verify null not returned
-    if(myST == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL with valid parameters");
-        return 1;
-    }
-    // Verify sin member is updated
-    double vx = cos(DELTA_P)*cos(ALPHA_P);
-    double vy = cos(DELTA_P)*sin(ALPHA_P);
-    double vz = sin(DELTA_P);
-    double q0 = vx * sin(PHI_P/2.0);
-    double q1 = vy * sin(PHI_P/2.0);
-    double q2 = vz * sin(PHI_P/2.0);
-    double q3 = cos(PHI_P/2.0);
-
-    if (FLT_EPSILON < fabs(q0 - myST->q0)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f\n", myST->q0, q0);
-        return 2;
-    }
-    if (FLT_EPSILON < fabs(q1 - myST->q1)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q1 is %f, should be %f\n", myST->q1, q1);
-        return 3;
-    }
-    if (FLT_EPSILON < fabs(q2 - myST->q2)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q2 is %f, should be %f\n", myST->q2, q2);
-        return 4;
-    }
-    if (FLT_EPSILON < fabs(q3 - myST->q3)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f\n", myST->q3, q3);
-        return 5;
-    }
-
-    // Free data structure
-    psFree(myST);
-
-    return 0;
-}
-
-#define NX_TERMS 2
-#define NY_TERMS 3
-#define NZ_TERMS 4
-#define NT_TERMS 5
-
-psS32 testPlaneTransformAlloc( void )
-{
-    // Allocate psPlaneTransform with known x and y terms
-    psPlaneTransform *myPT = psPlaneTransformAlloc(NX_TERMS, NY_TERMS);
-
-    // Verify returned value is not NULL
-    if(myPT == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Function returned NULL not expected.");
-        return 1;
-    }
-
-    // Verify returned transform has members set properly
-    if (myPT->x->nX != NX_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPT->x->nX is %d, should be %d",
-                myPT->x->nX, NX_TERMS);
-        return 2;
-    }
-    if (myPT->y->nX != NX_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPT->y->nX is %d, should be %d",
-                myPT->y->nX, NX_TERMS);
-        return 3;
-    }
-    if (myPT->x->nY != NY_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPT->x->nY is %d, should be %d",
-                myPT->x->nY, NY_TERMS);
-        return 4;
-    }
-    if (myPT->y->nY != NY_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPT->y->nY is %d, should be %d",
-                myPT->y->nY, NY_TERMS);
-        return 5;
-    }
-
-    // Free plane transform
-    psFree(myPT);
-
-    // Attempt to specify negative x terms and verify NULL returned and errror message generated
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: negative x terms");
-    myPT = psPlaneTransformAlloc(-1.0, 1.0);
-    if (myPT != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psPlaneTransformAlloc() did not return NULL.");
-        return 6;
-    }
-
-    // Attempt to specify negative y terms and verify NULL returned and error message generated
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: negative y terms");
-    myPT = psPlaneTransformAlloc(1.0, -1.0);
-    if (myPT != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psPlaneTransformAlloc() did not return NULL.");
-        return 7;
-    }
-
-    psFree(myPT);
-
-    return 0;
-}
-
-
-psS32 testPlaneDistortAlloc( void )
-{
-    // Invoke function with known parameters
-    psPlaneDistort *myPD = psPlaneDistortAlloc(NX_TERMS, NY_TERMS, NZ_TERMS, NT_TERMS);
-
-    // Verify NULL is not returned
-    if(myPD == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL not expected");
-        return 1;
-    }
-    // Verify the terms are properly set after allocation
-    if (myPD->x->nX != NX_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->x->nX is %d, should be %d",
-                myPD->x->nX, NX_TERMS);
-        return 2;
-    }
-    if (myPD->y->nX != NX_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->y->nX is %d, should be %d",
-                myPD->y->nX, NX_TERMS);
-        return 3;
-    }
-    if (myPD->x->nY != NY_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->x->nY is %d, should be %d",
-                myPD->x->nY, NY_TERMS);
-        return 4;
-    }
-    if (myPD->y->nY != NY_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->y->nY is %d, should be %d",
-                myPD->y->nY, NY_TERMS);
-        return 5;
-    }
-    if (myPD->x->nZ != NZ_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->x->nZ is %d, should be %d",
-                myPD->x->nZ, NZ_TERMS);
-        return 6;
-    }
-    if (myPD->y->nZ != NZ_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->y->nZ is %d, should be %d",
-                myPD->y->nZ, NZ_TERMS);
-        return 7;
-    }
-    if (myPD->x->nT != NT_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->x->nT is %d, should be %d",
-                myPD->x->nT, NT_TERMS);
-        return 8;
-    }
-    if (myPD->y->nT != NT_TERMS) {
-        psError(PS_ERR_UNKNOWN,true,"myPD->y->nT is %d, should be %d",
-                myPD->y->nT, NT_TERMS);
-        return 9;
-    }
-    // Free psPlaneTransform
-    psFree(myPD);
-
-    // Invoke function with negative x term parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative x term");
-    myPD = psPlaneDistortAlloc(-1.0, 1.0, 1.0, 1.0);
-    if (myPD != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
-        return 10;
-    }
-
-    // Invoke function with negative y term parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative y term");
-    myPD = psPlaneDistortAlloc(1.0, -1.0, 1.0, 1.0);
-    if (myPD != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
-        return 11;
-    }
-
-    // Invoke function with negative z term parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative z term");
-    myPD = psPlaneDistortAlloc(1.0, 1.0, -1.0, 1.0);
-    if (myPD != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
-        return 12;
-    }
-
-    // Invoke function with negative w term parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for negative w term");
-    myPD = psPlaneDistortAlloc(1.0, 1.0, 1.0, -1.0);
-    if (myPD != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psPlaneDistortAlloc() did not return NULL.");
-    }
-
-    return 0;
-}
-
-#define N 10
-// We do a simple identity transformation on a few x,y pairs.
-psS32 testPlaneTransformApply( void )
-{
-    psPlane*          out = NULL;
-    psDPolynomial2D*  tmp2DPoly = NULL;
-    psPlane*          rc;
-
-    // Create input coordinate
-    psPlane* in = psPlaneAlloc();
-    if(in == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return from psPlaneAlloc");
-        return 1;
-    }
-
-    // Create transform
-    psPlaneTransform* pt = psPlaneTransformAlloc(2,2);
-
-    // Set transform coefficients so the x coord input will equal x coord output, same for y
-    pt->x->coeff[1][0] = 1.0;
-    pt->y->coeff[0][1] = 1.0;
-
-    // Apply transform for several points
-    for (psS32 i = 0; i < N; i++) {
-        in->x = (psF64) i;
-        in->y = (psF64) (i + 5.0);
-        in->xErr = 0.0;
-        in->yErr = 0.0;
-
-        // Verify function does not return NULL
-        out = psPlaneTransformApply(out, pt, in);
-        if( out  == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Expected non-NULL return value");
-            return 1;
-        }
-        // Verify the expected values are returned
-        if (FLT_EPSILON < fabs(out->x - in->x)) {
-            psError(PS_ERR_UNKNOWN,true,"out.x is %lf, should be %lf", out->x, in->x);
-            return 3;
-        }
-        if (FLT_EPSILON < fabs(out->y - in->y)) {
-            psError(PS_ERR_UNKNOWN,true,"out.y is %lf, should be %lf", out->y, in->y);
-            return 4;
-        }
-    }
-    psFree(out);
-
-    // Verify return null and error message generater for null specified transform
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL psPlaneTransform");
-    rc = psPlaneTransformApply(NULL, NULL, in);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL psPlaneTransform.");
-        return 5;
-    }
-
-    // Verify return null and error message generated for null psPlaneTransform x coeff
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL x coeff psPlaneTransform");
-    tmp2DPoly = pt->x;
-    pt->x = NULL;
-    rc = psPlaneTransformApply(NULL, pt, in);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL x coeff psPlaneTransform");
-        return 6;
-    }
-    pt->x = tmp2DPoly;
-
-    // Verify return null and error message generated for null psPlaneTransform y coeff
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL y coeff psPlaneTransform");
-    tmp2DPoly = pt->y;
-    pt->y = NULL;
-    rc = psPlaneTransformApply(NULL, pt, in);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL y coeff psPlaneTransform");
-        return 7;
-    }
-    pt->y = tmp2DPoly;
-
-    // Verify return null and error message generated for null psPlane coordinate
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL psPlane");
-    rc = psPlaneTransformApply(NULL, pt, NULL);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Function did not return NULL as expected for NULL psPlane");
-        return 8;
-    }
-
-    psFree(pt);
-    psFree(in);
-
-    return 0;
-}
-
-#define COLOR 1.0
-#define MAGNITUDE 1.0
-// We do a simple identity transformation on a few x,y pairs.  For x and y,
-// we add in the COLOR and MAGNITUDE.
-psS32 testPlaneDistortApply( void )
-{
-    psPlane*         out       = NULL;
-    psPlane*         rc        = NULL;
-    psDPolynomial4D* tmp4DPoly = NULL;
-
-    // Allocate input coordinate
-    psPlane* in = psPlaneAlloc();
-
-    // Create psPlaneTransform structure
-    psPlaneDistort*  pt = psPlaneDistortAlloc(2, 2, 2, 2);
-
-    pt->x->coeff[1][0][0][0] = 1.0;
-    pt->x->coeff[0][0][1][0] = 1.0;
-    pt->x->coeff[0][0][0][1] = 1.0;
-
-    pt->y->coeff[0][1][0][0] = 1.0;
-    pt->y->coeff[0][0][1][0] = 1.0;
-    pt->y->coeff[0][0][0][1] = 1.0;
-
-    for (psS32 i = 0; i < N; i++) {
-        in->x = (psF64) i;
-        in->y = (psF64) (i + 5.0);
-        in->xErr = 0.0;
-        in->yErr = 0.0;
-        out = psPlaneDistortApply(out, pt, in, COLOR, MAGNITUDE);
-
-        // Verify return value is not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Expected non-NULL return");
-            return 1;
-        }
-        // Verify return value contains expected values
-        if (FLT_EPSILON < fabs(out->x - COLOR - MAGNITUDE - in->x)) {
-            psError(PS_ERR_UNKNOWN,true,"out->x is %lf, should be %lf",
-                    out->x, in->x + COLOR + MAGNITUDE);
-            return 2;
-        }
-        if (FLT_EPSILON < fabs(out->y - COLOR - MAGNITUDE - in->y)) {
-            psError(PS_ERR_UNKNOWN,true,"out->y is %lf, should be %lf",
-                    out->y, in->y + COLOR + MAGNITUDE);
-            return 3;
-        }
-    }
-    psFree(out);
-
-    // Attempt to invoke psPlaneDistortApply with NULL psPlaneDistort
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null psPlaneDistort");
-    rc = psPlaneDistortApply(NULL, NULL, in, COLOR, MAGNITUDE);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL.");
-        return 4;
-    }
-
-    // Attempt to invoke psPlaneDistortApply with NULL psPlaneDistort x member
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null x member psPlaneDistort");
-    tmp4DPoly = pt->x;
-    pt->x = NULL;
-    rc = psPlaneDistortApply(NULL, pt, in, COLOR, MAGNITUDE);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL.");
-        return 5;
-    }
-    pt->x = tmp4DPoly;
-
-    // Attempt to invoke psPlaneDistortApply with NULL psPlaneDistort y member
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null y member psPlaneDistort");
-    tmp4DPoly = pt->y;
-    pt->y = NULL;
-    rc = psPlaneDistortApply(NULL, pt, in, COLOR, MAGNITUDE);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL.");
-        return 6;
-    }
-    pt->y = tmp4DPoly;
-
-    // Attempt to invoke psPlaneDistortApply with NULL input psPlane
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null input psPlane");
-    rc = psPlaneDistortApply(NULL, pt, NULL, COLOR, MAGNITUDE);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
-        return 7;
-    }
-
-    psFree(pt);
-    psFree(in);
-
-    return 0;
-}
-
-// We do a simple identity transformation on a few RA, DEC pairs.
-psS32 testSphereRotApply1( void )
-{
-    psSphere *in = psSphereAlloc();
-    psSphere *out = psSphereAlloc();
-    psSphere *temp = NULL;
-    psSphere *rc = NULL;
-    psSphereRot *myST = psSphereRotAlloc(0.0, 0.0, 0.0);
-
-    for (float r=0.0;r<180.0;r+=DEG_INC) {
-        for (float d=0.0;d<90.0;d+=DEG_INC) {
-            in->r = DEG_TO_RAD(r);
-            in->d = DEG_TO_RAD(d);
-            in->rErr = 0.0;
-            in->dErr = 0.0;
-
-            if(psSphereRotApply(out, myST, in) != out) {
-                psError(PS_ERR_UNKNOWN,true,"Did not return output pointer.");
-                return 1;
-            }
-            if (ERROR_TOL < fabs(out->r - in->r)) {
-                psError(PS_ERR_UNKNOWN,true,"out->r is %f, should be %f\n", out->r, in->r);
-                return 2;
-            }
-            if (ERROR_TOL < fabs(out->d - in->d)) {
-                psError(PS_ERR_UNKNOWN,true,"out->d is %f, should be %f\n", out->d, in->d);
-                return 3;
-            }
-        }
-    }
-
-    // Verify new sphere object is created if out parameter NULL
-    temp = psSphereRotApply(NULL, myST, in);
-    if ( temp == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL when out parameter was null");
-        return 4;
-    }
-    psFree(temp);
-
-    // Verify NULL returned if transform structure null
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
-    rc = psSphereRotApply(NULL, NULL, in);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply() did not return NULL.");
-        return 5;
-    }
-
-    // Verify NULL returned when input sphere is NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
-    rc = psSphereRotApply(NULL, myST, NULL);
-    if (rc != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply() did not return NULL");
-        return 6;
-    }
-
-    psFree(myST);
-    psFree(out);
-    psFree(in);
-
-    return 0;
-}
-
-/******************************************************************************
-testSphereRotApply2(): This test verifies that psSphereRotApply()
-works properly.  We create two psSphereRots: a forward transform and a
-reverse transform (which is the mathematical inverse of the forward transform).
-We apply both transforms to several spherical coordinates and ensure that the
-original input coordinate is obtained after applying both transforms.
- 
-XXX: We currently test the alpha and delta offsets independently.  Attempts to
-test them both concurrently failed.  Determine why this is.  Are the following
-spherical transforms not mathematical inverses?
-    psSphereRotAlloc(X, Y, 0.0)
-    psSphereRotAlloc(-X, -Y, 0.0)
- *****************************************************************************/
-#define ERROR_PERCENT 0.01
-psS32 testSphereRotApply2( void )
-{
-    psS32 testStatus = 0;
-    psSphere in;
-    psSphere out;
-    psSphere out2;
-    psSphereRot *mySphereRotForward = NULL;
-    psSphereRot *mySphereRotReverse = NULL;
-
-
-    mySphereRotForward = psSphereRotAlloc(DEG_TO_RAD(22.0),
-                                          0.0,
-                                          0.0);
-    mySphereRotReverse = psSphereRotAlloc(DEG_TO_RAD(-22.0),
-                                          0.0,
-                                          0.0);
-
-    for (float r=0.1;r<180.0;r+=(DEG_INC/5.0)) {
-        for (float d=0.1;d<90.0;d+=(DEG_INC/5.0)) {
-            in.r = DEG_TO_RAD(r);
-            in.d = DEG_TO_RAD(d);
-            in.rErr = 0.0;
-            in.dErr = 0.0;
-
-            psSphereRotApply(&out, mySphereRotForward, &in);
-            psSphereRotApply(&out2, mySphereRotReverse, &out);
-
-            if ((fabs((in.r - out2.r) / in.r) > ERROR_PERCENT) ||
-                    (fabs((in.d - out2.d) / in.d) > ERROR_PERCENT)) {
-                printf("ERROR: \n");
-                printf("Input  coords (R, D) are (%f, %f)\n", in.r, in.d);
-                printf("Output coords (R, D) are (%f, %f)\n", out2.r, out2.d);
-                testStatus = 4;
-            }
-        }
-    }
-    psFree(mySphereRotForward);
-    psFree(mySphereRotReverse);
-
-    mySphereRotForward = psSphereRotAlloc(0.0,
-                                          DEG_TO_RAD(33.0),
-                                          0.0);
-    mySphereRotReverse = psSphereRotAlloc(0.0,
-                                          DEG_TO_RAD(-33.0),
-                                          0.0);
-    for (float r=0.1;r<180.0;r+=(DEG_INC/5.0)) {
-        for (float d=0.1;d<90.0;d+=(DEG_INC/5.0)) {
-            in.r = DEG_TO_RAD(r);
-            in.d = DEG_TO_RAD(d);
-            in.rErr = 0.0;
-            in.dErr = 0.0;
-
-            psSphereRotApply(&out, mySphereRotForward, &in);
-            psSphereRotApply(&out2, mySphereRotReverse, &out);
-
-            if ((fabs((in.r - out2.r) / in.r) > ERROR_PERCENT) ||
-                    (fabs((in.d - out2.d) / in.d) > ERROR_PERCENT)) {
-                printf("ERROR: \n");
-                printf("Input  coords (R, D) are (%f, %f)\n", in.r, in.d);
-                printf("Output coords (R, D) are (%f, %f)\n", out2.r, out2.d);
-                testStatus = 4;
-            }
-        }
-    }
-    psFree(mySphereRotForward);
-    psFree(mySphereRotReverse);
-
-    return(testStatus);
-}
-
-// Test point 1  ADD  ICRS(0,0) to Galactic (96.337272,-60.188553)
-//                              to Ecliptic (0,0) with T=1
-#define SPHERE_COORD_TP1_GAL_R           1.681409       //  96.337272 degrees
-#define SPHERE_COORD_TP1_GAL_D          -1.050488       // -60.188553 degrees
-#define SPHERE_COORD_TP1_ECL_R           0.0
-#define SPHERE_COORD_TP1_ECL_D           0.0
-#define SPHERE_COORD_TP1_INVERSE_R       0.0
-#define SPHERE_COORD_TP1_INVERSE_D       0.0
-
-// Test point 2 ADD  ICRS(0,90) to Galactic (122.93192, 27.12825)
-//                              to Ecliptic (90,66.560719) with T=1
-#define SPHERE_COORD_TP2_GAL_R           2.145567       // 122.93192 degrees
-#define SPHERE_COORD_TP2_GAL_D           0.473477       // 27.12825  degrees
-#define SPHERE_COORD_TP2_ECL_R           1.570796       // 90        degrees
-#define SPHERE_COORD_TP2_ECL_D           1.161704       // 66.560719 degrees
-#define SPHERE_COORD_TP2_INVERSE_R       0.0            // 0         degrees
-#define SPHERE_COORD_TP2_INVERSE_D       1.570796       // 90        degrees
-
-// Test point 3 ADD  ICRS(180,30) to Galactic (195.639488, 78.353806)
-//                                to Ecliptic (167.072470, 27.308813) with T=2
-#define SPHERE_COORD_TP3_GAL_R           3.414553       // 195.639488 degrees
-#define SPHERE_COORD_TP3_GAL_D           1.367532       // 78.353806  degrees
-#define SPHERE_COORD_TP3_ECL_R           2.915965       // 167.07247  degrees
-#define SPHERE_COORD_TP3_ECL_D           0.476629       // 27.308813  degrees
-#define SPHERE_COORD_TP3_INVERSE_R       3.141593       // 180.0      degrees
-#define SPHERE_COORD_TP3_INVERSE_D       0.523599       // 30.0       degrees
-
-psS32 testSphereRotApply3( void)
-{
-
-    psSphereRot*  testTransform;
-    psSphere*           inputCoord = psSphereAlloc();
-    psSphere*           outputCoord = NULL;
-    psSphere*           inverseOutputCoord = NULL;
-
-    inputCoord->r = SPHERE_COORD_TP1_INVERSE_R;
-    inputCoord->d = SPHERE_COORD_TP1_INVERSE_D;
-    inputCoord->rErr = 0.0;
-    inputCoord->dErr = 0.0;
-
-    // Set test date time to 1/1/2000 00:00:00
-    psTime* testDateTime = psTimeFromMJD(MJD_2000);
-
-    // Create transform ICRS to Galactic
-    testTransform = psSphereRotICRSToGalactic();
-
-    // Perform transform from ICRS to Galactic
-    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
-    // Verify output not NULL and member values set correctly
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 1;
-    }
-    if(fabs(outputCoord->r - SPHERE_COORD_TP1_GAL_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                outputCoord->r, SPHERE_COORD_TP1_GAL_R);
-        return 2;
-    }
-    if(fabs(outputCoord->d - SPHERE_COORD_TP1_GAL_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                outputCoord->d, SPHERE_COORD_TP1_GAL_D);
-        return 3;
-    }
-    psFree(testTransform);
-
-    // Create inverse transform Galactic to ICRS
-    testTransform = psSphereRotGalacticToICRS();
-
-    // Perform transform from Galactic to ICRS
-    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
-    // Verify output not NULL and member values set correctly
-    if(inverseOutputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 4;
-    }
-
-    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP1_INVERSE_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                inverseOutputCoord->r, SPHERE_COORD_TP1_INVERSE_R);
-        return 5;
-    }
-    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP1_INVERSE_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                inverseOutputCoord->d, SPHERE_COORD_TP1_INVERSE_D);
-        return 6;
-    }
-    psFree(testTransform);
-
-    // Create transform ICRS to Ecliptic
-    testTransform = psSphereRotICRSToEcliptic(testDateTime);
-
-    // Perform transform from ICRS to Ecliptic
-    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
-    // Verify output not NULL and member values set correctly
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 7;
-    }
-    if(fabs(outputCoord->r - SPHERE_COORD_TP1_ECL_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                outputCoord->r, SPHERE_COORD_TP1_ECL_R);
-        return 8;
-    }
-    if(fabs(outputCoord->d - SPHERE_COORD_TP1_ECL_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                outputCoord->d, SPHERE_COORD_TP1_ECL_D);
-        return 9;
-    }
-    psFree(testTransform);
-
-    // Create inverse transform Ecliptic to ICRS
-    testTransform = psSphereRotEclipticToICRS(testDateTime);
-
-    // Perform transform from Ecliptic to ICRS
-    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
-    // Verify output not NULL and member values set correctly
-    if(inverseOutputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 10;
-    }
-    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP1_INVERSE_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                inverseOutputCoord->r, SPHERE_COORD_TP1_INVERSE_R);
-        return 11;
-    }
-    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP1_INVERSE_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                inverseOutputCoord->d, SPHERE_COORD_TP1_INVERSE_D);
-        return 12;
-    }
-    psFree(testTransform);
-
-    psFree(testDateTime);
-    psFree(outputCoord);
-    psFree(inputCoord);
-    psFree(inverseOutputCoord);
-
-    return 0;
-}
-
-psS32 testSphereRotApply4( void)
-{
-
-    psSphereRot*  testTransform;
-    psSphere*           inputCoord = psSphereAlloc();
-    psSphere*           outputCoord = NULL;
-    psSphere*           inverseOutputCoord = NULL;
-
-    inputCoord->r = SPHERE_COORD_TP2_INVERSE_R;
-    inputCoord->d = SPHERE_COORD_TP2_INVERSE_D;
-    inputCoord->rErr = 0.0;
-    inputCoord->dErr = 0.0;
-
-    // Set test date time to 1/1/2000 00:00:00
-    psTime* testDateTime = psTimeFromMJD(MJD_2000);
-
-    // Create transform ICRS to Galactic
-    testTransform = psSphereRotICRSToGalactic();
-
-    // Perform transform from ICRS to Galactic
-    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
-    // Verify output not NULL and member values set correctly
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 1;
-    }
-    if(fabs(outputCoord->r - SPHERE_COORD_TP2_GAL_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                outputCoord->r, SPHERE_COORD_TP2_GAL_R);
-        return 2;
-    }
-    if(fabs(outputCoord->d - SPHERE_COORD_TP2_GAL_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                outputCoord->d, SPHERE_COORD_TP2_GAL_D);
-        return 3;
-    }
-    psFree(testTransform);
-
-    // Create inverse transform Galactic to ICRS
-    testTransform = psSphereRotGalacticToICRS();
-
-    // Perform transform from Galactic to ICRS
-    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
-    // Verify output not NULL and member values set correctly
-    if(inverseOutputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 4;
-    }
-    // atan2 function introduces some error with y close to zero, increased error tolerance
-    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP2_INVERSE_R) > ERROR_TOL+0.1) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                inverseOutputCoord->r, SPHERE_COORD_TP2_INVERSE_R);
-        return 5;
-    }
-    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP2_INVERSE_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                inverseOutputCoord->d, SPHERE_COORD_TP2_INVERSE_D);
-        return 6;
-    }
-    psFree(testTransform);
-
-    // Create transform ICRS to Ecliptic
-    testTransform = psSphereRotICRSToEcliptic(testDateTime);
-
-    // Perform transform from ICRS to Ecliptic
-    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
-    // Verify output not NULL and member values set correctly
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 7;
-    }
-    if(fabs(outputCoord->r - SPHERE_COORD_TP2_ECL_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                outputCoord->r, SPHERE_COORD_TP2_ECL_R);
-        return 8;
-    }
-    if(fabs(outputCoord->d - SPHERE_COORD_TP2_ECL_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                outputCoord->d, SPHERE_COORD_TP2_ECL_D);
-        return 9;
-    }
-    psFree(testTransform);
-
-    // Create inverse transform Ecliptic to ICRS
-    testTransform = psSphereRotEclipticToICRS(testDateTime);
-
-    // Perform transform from Ecliptic to ICRS
-    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
-    // Verify output not NULL and member values set correctly
-    if(inverseOutputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 10;
-    }
-    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP2_INVERSE_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                inverseOutputCoord->r, SPHERE_COORD_TP2_INVERSE_R);
-        return 11;
-    }
-    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP2_INVERSE_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                inverseOutputCoord->d, SPHERE_COORD_TP2_INVERSE_D);
-        return 12;
-    }
-    psFree(testTransform);
-
-    psFree(testDateTime);
-    psFree(outputCoord);
-    psFree(inputCoord);
-    psFree(inverseOutputCoord);
-
-    return 0;
-}
-
-psS32 testSphereRotApply5( void)
-{
-    psSphereRot*  testTransform;
-    psSphere*           inputCoord = psSphereAlloc();
-    psSphere*           outputCoord = NULL;
-    psSphere*           inverseOutputCoord = NULL;
-
-    inputCoord->r = SPHERE_COORD_TP3_INVERSE_R;
-    inputCoord->d = SPHERE_COORD_TP3_INVERSE_D;
-    inputCoord->rErr = 0.0;
-    inputCoord->dErr = 0.0;
-
-    // Set test date time to 1/1/2100 00:00:00
-    psTime* testDateTime = psTimeFromMJD(MJD_2100);
-
-    // Create transform ICRS to Galactic
-    testTransform = psSphereRotICRSToGalactic();
-
-    // Perform transform from ICRS to Galactic
-    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
-    // Verify output not NULL and member values set correctly
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 1;
-    }
-    if(fabs(outputCoord->r - SPHERE_COORD_TP3_GAL_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                outputCoord->r, SPHERE_COORD_TP3_GAL_R);
-        return 2;
-    }
-    if(fabs(outputCoord->d - SPHERE_COORD_TP3_GAL_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                outputCoord->d, SPHERE_COORD_TP3_GAL_D);
-        return 3;
-    }
-    psFree(testTransform);
-
-    // Create inverse transform Galactic to ICRS
-    testTransform = psSphereRotGalacticToICRS();
-
-    // Perform transform from Galactic to ICRS
-    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
-    // Verify output not NULL and member values set correctly
-    if(inverseOutputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 4;
-    }
-    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP3_INVERSE_R) > ERROR_TOL+0.1) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                inverseOutputCoord->r, SPHERE_COORD_TP3_INVERSE_R);
-        return 5;
-    }
-    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP3_INVERSE_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                inverseOutputCoord->d, SPHERE_COORD_TP3_INVERSE_D);
-        return 6;
-    }
-    psFree(testTransform);
-
-    // Create transform ICRS to Ecliptic
-    testTransform = psSphereRotICRSToEcliptic(testDateTime);
-
-    // Perform transform from ICRS to Ecliptic
-    outputCoord = psSphereRotApply(outputCoord,testTransform,inputCoord);
-    // Verify output not NULL and member values set correctly
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 7;
-    }
-    if(fabs(outputCoord->r - SPHERE_COORD_TP3_ECL_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                outputCoord->r, SPHERE_COORD_TP3_ECL_R);
-        return 8;
-    }
-    if(fabs(outputCoord->d - SPHERE_COORD_TP3_ECL_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                outputCoord->d, SPHERE_COORD_TP3_ECL_D);
-        return 9;
-    }
-    psFree(testTransform);
-
-    // Create inverse transform Ecliptic to ICRS
-    testTransform = psSphereRotEclipticToICRS(testDateTime);
-
-    // Perform transform from Ecliptic to ICRS
-    inverseOutputCoord = psSphereRotApply(inverseOutputCoord,testTransform,outputCoord);
-    // Verify output not NULL and member values set correctly
-    if(inverseOutputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply returned NULL");
-        return 10;
-    }
-    if(fabs(inverseOutputCoord->r - SPHERE_COORD_TP3_INVERSE_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord r %lg not as expected %lg",
-                inverseOutputCoord->r, SPHERE_COORD_TP3_INVERSE_R);
-        return 11;
-    }
-    if(fabs(inverseOutputCoord->d - SPHERE_COORD_TP3_INVERSE_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotApply return coord d %ld not as expected %lg",
-                inverseOutputCoord->d, SPHERE_COORD_TP3_INVERSE_D);
-        return 12;
-    }
-    psFree(testTransform);
-
-    psFree(testDateTime);
-    psFree(outputCoord);
-    psFree(inputCoord);
-    psFree(inverseOutputCoord);
-
-    return 0;
-}
-
-#define SPHERE_PRECESS_TP1_R            0.0               //    0.0       degrees
-#define SPHERE_PRECESS_TP1_D            0.0               //    0.0       degrees
-#define SPHERE_PRECESS_TP1_EXPECT_R     6.238453          //  357.437     degrees
-#define SPHERE_PRECESS_TP1_EXPECT_D    -0.019426          //   -1.113     degrees
-#define SPHERE_PRECESS_TP2_R            0.0               //    0.0       degrees
-#define SPHERE_PRECESS_TP2_D            1.570796          //   90.0       degrees
-#define SPHERE_PRECESS_TP2_EXPECT_R     6.260828          //  358.719     degrees
-#define SPHERE_PRECESS_TP2_EXPECT_D     1.551353          //   88.886     degrees
-#define SPHERE_PRECESS_TP3_R            3.141593          //  180.0       degrees
-#define SPHERE_PRECESS_TP3_D            0.523599          //   30.0       degrees
-#define SPHERE_PRECESS_TP3_EXPECT_R     3.096616          //  177.423     degrees
-#define SPHERE_PRECESS_TP3_EXPECT_D     0.543024          //   31.113     degrees
-
-psS32 testSphereRotPrecess( void )
-{
-    psSphere*     inputCoord  = psSphereAlloc();
-    psSphere*     outputCoord = NULL;
-    psTime*       fromTime    = psTimeFromMJD(MJD_2100);
-    psTime*       toTime      = psTimeFromMJD(MJD_1900);
-
-    // Set input coordinate
-    inputCoord->r = SPHERE_PRECESS_TP1_R;
-    inputCoord->d = SPHERE_PRECESS_TP1_D;
-    inputCoord->rErr = 0.0;
-    inputCoord->dErr = 0.0;
-
-    // Calculate precess
-    outputCoord = psSpherePrecess(inputCoord, fromTime, toTime);
-    // Verify return is not NULL
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify return with expected values
-    if( fabs(outputCoord->r - SPHERE_PRECESS_TP1_EXPECT_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Precess r = %lg not equal to expected = %lg",
-                outputCoord->r,SPHERE_PRECESS_TP1_EXPECT_R);
-        return 2;
-    }
-    if( fabs(outputCoord->d - SPHERE_PRECESS_TP1_EXPECT_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Precess d = %lg not equal to expected = %lg",
-                outputCoord->d,SPHERE_PRECESS_TP1_EXPECT_D);
-        return 3;
-    }
-    psFree(outputCoord);
-
-    // Set input coordinate
-    inputCoord->r = SPHERE_PRECESS_TP2_R;
-    inputCoord->d = SPHERE_PRECESS_TP2_D;
-    inputCoord->rErr = 0.0;
-    inputCoord->dErr = 0.0;
-
-    // Calculate precess
-    outputCoord = psSpherePrecess(inputCoord, fromTime, toTime);
-    // Verify return is not NULL
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 4;
-    }
-    // Verify return with expected values
-    if( fabs(outputCoord->r - SPHERE_PRECESS_TP2_EXPECT_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Precess r = %lg not equal to expected = %lg",
-                outputCoord->r,SPHERE_PRECESS_TP2_EXPECT_R);
-        return 5;
-    }
-    if( fabs(outputCoord->d - SPHERE_PRECESS_TP2_EXPECT_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Precess d = %lg not equal to expected = %lg",
-                outputCoord->d,SPHERE_PRECESS_TP2_EXPECT_D);
-        return 6;
-    }
-    psFree(outputCoord);
-
-    // Set input coordinate
-    inputCoord->r = SPHERE_PRECESS_TP3_R;
-    inputCoord->d = SPHERE_PRECESS_TP3_D;
-    inputCoord->rErr = 0.0;
-    inputCoord->dErr = 0.0;
-
-    // Calculate precess
-    outputCoord = psSpherePrecess(inputCoord, fromTime, toTime);
-    // Verify return is not NULL
-    if(outputCoord == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 7;
-    }
-    // Verify return with expected values
-    if( fabs(outputCoord->r - SPHERE_PRECESS_TP3_EXPECT_R) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Precess r = %lg not equal to expected = %lg",
-                outputCoord->r,SPHERE_PRECESS_TP3_EXPECT_R);
-        return 8;
-    }
-    if( fabs(outputCoord->d - SPHERE_PRECESS_TP3_EXPECT_D) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Precess d = %lg not equal to expected = %lg",
-                outputCoord->d,SPHERE_PRECESS_TP3_EXPECT_D);
-        return 9;
-    }
-    psFree(outputCoord);
-
-    // Invoke precess with invalid parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    outputCoord = psSpherePrecess(inputCoord, fromTime, NULL);
-    if(outputCoord != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid input");
-        return 10;
-    }
-
-    // Invoke precess with invalid parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    outputCoord = psSpherePrecess(inputCoord, NULL, toTime);
-    if(outputCoord != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid input");
-        return 11;
-    }
-
-    // Invoke precess with invalid parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    outputCoord = psSpherePrecess(NULL, fromTime, toTime);
-    if(outputCoord != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid input");
-        return 12;
-    }
-
-    // Free objects
-    psFree(fromTime);
-    psFree(toTime);
-    psFree(inputCoord);
-
-    return 0;
-}
-
-psS32 testSphereRotICRSToEcliptic( void )
-{
-    psF64  expectedQ0 = 0.0;
-    psF64  expectedQ1 = 0.0;
-    psF64  expectedQ2 = 0.0;
-    psF64  expectedQ3 = 0.0;
-
-    // Set test date time to 1/1/2000 00:00:00
-    psTime* testDateTime = psTimeFromMJD(MJD_2000);
-
-    // Invoke function to set psSphereRota objec
-    psSphereRot *myST = psSphereRotICRSToEcliptic(testDateTime);
-
-    // Verify expected values for the specified time
-    if (ERROR_TOL < fabs(expectedQ0 - myST->q0)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f",
-                myST->q0, expectedQ0);
-        return 1;
-    }
-    if (ERROR_TOL < fabs(expectedQ1 - myST->q1)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q1 is %f, should be %f",
-                myST->q1, expectedQ1);
-        return 2;
-    }
-    if (ERROR_TOL < fabs(expectedQ2 - myST->q2)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q2 is %f, should be %f",
-                myST->q2, expectedQ2);
-        return 3;
-    }
-    if (ERROR_TOL < fabs(expectedQ3 - myST->q3)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q3 is %f, should be %f",
-                myST->q3, expectedQ3);
-        return 4;
-    }
-    psFree(myST);
-    psFree(testDateTime);
-
-    // Set test date time to 1/1/2100 00:00:00
-    testDateTime = psTimeFromMJD(MJD_2100);
-
-    // Invoke function to set psSphereRota objec
-    myST = psSphereRotICRSToEcliptic(testDateTime);
-
-    // Verify expected values for the specified time
-    // Verify expected values for the specified time
-    if (ERROR_TOL < fabs(expectedQ0 - myST->q0)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q0 is %f, should be %f",
-                myST->q0, expectedQ0);
-        return 5;
-    }
-    if (ERROR_TOL < fabs(expectedQ1 - myST->q1)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q1 is %f, should be %f",
-                myST->q1, expectedQ1);
-        return 6;
-    }
-    if (ERROR_TOL < fabs(expectedQ2 - myST->q2)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q2 is %f, should be %f",
-                myST->q2, expectedQ2);
-        return 7;
-    }
-    if (ERROR_TOL < fabs(expectedQ3 - myST->q3)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->q3 is %f, should be %f",
-                myST->q3, expectedQ3);
-        return 8;
-    }
-    psFree(myST);
-    psFree(testDateTime);
-
-    // Verify if argument psTime is NULL, function returns NULL and error message generated
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    myST = psSphereRotICRSToEcliptic(NULL);
-    if (myST != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotICRSToEcliptic() did not return NULL.");
-        return 9;
-    }
-
-    // Verify if argument psTime is less than 1900, function return NULL and error msg generated
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    testDateTime = psTimeFromMJD(MJD_1900 - 1.0);
-    myST = psSphereRotICRSToEcliptic(testDateTime);
-    if (myST != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotICRSToEcliptic() did not return NULL.");
-        return 10;
-    }
-    psFree(testDateTime);
-
-    return 0;
-}
-
-
-psS32 testSphereRotEclipticToICRS( void )
-{
-    psF64  expectedPhiP = 0.0;
-    psF64  expectedAlphaP = 0.0;
-    psF64  expectedCosDeltaP = 0.0;
-    psF64  expectedSinDeltaP = 0.0;
-
-    // Set test date time to 1/1/2000 00:00:00
-    psTime* testDateTime = psTimeFromMJD(MJD_2000);
-
-    // Invoke function to set psSphereRota object
-    psSphereRot *myST = psSphereRotEclipticToICRS(testDateTime);
-
-    // Verify expected values for the specified time
-    if (ERROR_TOL < fabs(expectedSinDeltaP - myST->sinDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
-                myST->sinDeltaP, expectedSinDeltaP);
-        return 1;
-    }
-    if (ERROR_TOL < fabs(expectedCosDeltaP - myST->cosDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
-                myST->cosDeltaP, expectedCosDeltaP);
-        return 2;
-    }
-    if (ERROR_TOL < fabs(expectedAlphaP - myST->alphaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
-                myST->alphaP, expectedAlphaP);
-        return 3;
-    }
-    if (ERROR_TOL < fabs(expectedPhiP - myST->phiP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
-                myST->phiP, expectedPhiP);
-        return 4;
-    }
-    psFree(myST);
-    psFree(testDateTime);
-
-    expectedCosDeltaP = EXPECT_COS_DELTAP_2100;
-    expectedSinDeltaP = -EXPECT_SIN_DELTAP_2100;
-
-    // Set test date time to 1/1/2100 00:00:00
-    testDateTime = psTimeFromMJD(MJD_2100);
-
-    // Invoke function to set psSphereRota objec
-    myST = psSphereRotEclipticToICRS(testDateTime);
-
-    // Verify expected values for the specified time
-    if (ERROR_TOL < fabs(expectedSinDeltaP - myST->sinDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
-                myST->sinDeltaP, expectedSinDeltaP);
-        return 5;
-    }
-    if (ERROR_TOL < fabs(expectedCosDeltaP - myST->cosDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
-                myST->cosDeltaP, expectedCosDeltaP);
-        return 6;
-    }
-    if (ERROR_TOL < fabs(expectedAlphaP - myST->alphaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
-                myST->alphaP, expectedAlphaP);
-        return 7;
-    }
-    if (ERROR_TOL < fabs(expectedPhiP - myST->phiP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
-                myST->phiP, expectedPhiP);
-        return 8;
-    }
-    psFree(myST);
-    psFree(testDateTime);
-
-    // Verify if argument psTime is NULL, function returns NULL and error message generated
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    myST = psSphereRotEclipticToICRS(NULL);
-    if (myST != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotEclipticICRS() did not return NULL.");
-        return 9;
-    }
-
-    // Verify if argument psTime is less than 1900, function return NULL and error msg generated
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    testDateTime = psTimeFromMJD(MJD_1900 - 1.0);
-    myST = psSphereRotEclipticToICRS(testDateTime);
-    if (myST != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotEclipticToICRS() did not return NULL.");
-        return 10;
-    }
-    psFree(testDateTime);
-
-    return 0;
-}
-
-#define ITG_EXPECT_ALPHAP      4.93683
-#define ITG_EXPECT_SINDELTAP   0.88999
-#define ITG_EXPECT_COSDELTAP   0.45598
-#define ITG_EXPECT_PHIP        0.57477
-
-psS32 testSphereRotICRSToGalactic( void )
-{
-    // Invoke function
-    psSphereRot *myST = psSphereRotICRSToGalactic();
-
-    // Verify did not return NULL
-    if(myST == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotICRSToGalactic returned NULL");
-        return 1;
-    }
-    // Verify returned structure has members set properly
-    if (ERROR_TOL < fabs(ITG_EXPECT_SINDELTAP - myST->sinDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
-                myST->sinDeltaP, ITG_EXPECT_SINDELTAP);
-        return 2;
-    }
-    if (ERROR_TOL < fabs(ITG_EXPECT_COSDELTAP - myST->cosDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
-                myST->cosDeltaP, ITG_EXPECT_COSDELTAP);
-        return 3;
-    }
-    if (ERROR_TOL < fabs(ITG_EXPECT_ALPHAP - myST->alphaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
-                myST->alphaP, ITG_EXPECT_ALPHAP);
-        return 4;
-    }
-    if (ERROR_TOL < fabs(ITG_EXPECT_PHIP - myST->phiP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
-                myST->phiP, ITG_EXPECT_PHIP);
-        return 5;
-    }
-    // Free data structure created
-    psFree(myST);
-
-    return 0;
-}
-
-#define GTI_EXPECT_PHIP        4.93683
-#define GTI_EXPECT_SINDELTAP  -0.88999
-#define GTI_EXPECT_COSDELTAP   0.45598
-#define GTI_EXPECT_ALPHAP      0.57477
-
-psS32 testSphereRotGalacticToICRS( void )
-{
-    // Invoke function
-    psSphereRot *myST = psSphereRotGalacticToICRS();
-
-    // Verify did not return NULL
-    if(myST == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psSphereRotGalacticToICRS returned NULL");
-        return 1;
-    }
-    // Verify returned structure has members set properly
-    if (ERROR_TOL < fabs(GTI_EXPECT_SINDELTAP - myST->sinDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->sinDeltaP is %f, should be %f",
-                myST->sinDeltaP, GTI_EXPECT_SINDELTAP);
-        return 2;
-    }
-    if (ERROR_TOL < fabs(GTI_EXPECT_COSDELTAP - myST->cosDeltaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->cosDeltaP is %f, should be %f",
-                myST->cosDeltaP, GTI_EXPECT_COSDELTAP);
-        return 3;
-    }
-    if (ERROR_TOL < fabs(GTI_EXPECT_ALPHAP - myST->alphaP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->alphaP is %f, should be %f",
-                myST->alphaP, GTI_EXPECT_ALPHAP);
-        return 4;
-    }
-    if (ERROR_TOL < fabs(GTI_EXPECT_PHIP - myST->phiP)) {
-        psError(PS_ERR_UNKNOWN,true,"myST->phiP is %f, should be %f",
-                myST->phiP, GTI_EXPECT_PHIP);
-        return 5;
-    }
-    // Free data structure created
-    psFree(myST);
-
-    return 0;
-}
-
Index: unk/psLib/test/astronomy/tst_psCoord01.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psCoord01.c	(revision 4546)
+++ 	(revision )
@@ -1,917 +1,0 @@
-/**  @file  tst_psCoord01.c
-*
-*    @brief  The code will test several functions with PSLib source file
-*            psCoord.c
-*
-*    @author Eric Van Alst, MHPCC
-*
-*    @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
-*    @date  $Date: 2005-04-07 20:27:41 $
-*
-*    Copyright 2005 Maui High Performance Computing Center, Univ. of Hawaii
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testProjectionAlloc(void);
-static psS32 testProjectTan(void);
-static psS32 testDeprojectTan(void);
-static psS32 testProjectSin(void);
-static psS32 testDeprojectSin(void);
-static psS32 testProjectAit(void);
-static psS32 testDeprojectAit(void);
-static psS32 testProjectPar(void);
-static psS32 testDeprojectPar(void);
-static psS32 testProjectFail(void);
-static psS32 testDeprojectFail(void);
-static psS32 testSetOffsetSphere(void);
-static psS32 testSetOffsetLinear(void);
-static psS32 testGetOffsetSphere(void);
-static psS32 testGetOffsetLinear(void);
-
-testDescription tests[] = {
-                              {testProjectionAlloc, 833, "psProjectionAlloc",0,false},
-                              {testProjectTan, 834, "psProject(TAN)",0,false},
-                              {testDeprojectTan, 835, "psDeproject(TAN)",0,false},
-                              {testProjectSin, 834, "psProject(SIN)",0,false},
-                              {testDeprojectSin, 835, "psDeproject(SIN)",0,false},
-                              {testProjectAit, 834, "psProject(AIT)",0,false},
-                              {testDeprojectAit, 835, "psDeproject(AIT)",0,false},
-                              {testProjectPar, 834, "psProject(PAR)",0,false},
-                              {testDeprojectPar, 835, "psDeproject(PAR)",0,false},
-                              {testProjectFail, 834, "psProject",0,false},
-                              {testDeprojectFail, 835, "psProject",0,false},
-                              {testSetOffsetSphere, 0000, "psSphereSetOffset",0,false},
-                              {testSetOffsetLinear, 0000, "psSphereSetOffset",0,false},
-                              {testGetOffsetSphere, 0000, "psSphereGetOffset",0,false},
-                              {testGetOffsetLinear, 0000, "psSphereGetOffset",0,false},
-                              {NULL}
-                          };
-
-
-#define ERROR_TOL    0.0001
-#define TESTPOINTS   4
-#define DEG_INC   30.0
-
-#define MY_TINY 0.0001
-#define PS_COMPARE_TINY_THEN_PRINT_ERROR(ACTUAL, EXPECT, TESTSTATUS) \
-if (MY_TINY < fabs(EXPECT - ACTUAL)) { \
-    psError(PS_ERR_UNKNOWN,true,"%s is %lg, should be %lg", #ACTUAL, ACTUAL, EXPECT, TESTSTATUS); \
-    return TESTSTATUS; \
-}
-
-
-//  alpha, delta, alpha-center, delta-center, scale-x, scale-y
-psF64 projectionTestPoint[TESTPOINTS][6] = {
-            {  0.785398,  0.785398,  0.000000,  0.000000,  1.000000,  1.000000 },
-            {  0.100000,  1.500000,  0.500000,  0.250000,  1.000000,  1.000000 },
-            {  0.628319,  0.448799,  0.000000,  0.000000,  0.250000,  0.750000 },
-            { -1.047196,  0.222222, -0.250000,  0.000000,  1.500000,  1.250000 }
-        };
-
-// Expected values for TAN
-psF64 projectionTanExpected[TESTPOINTS][2] = {
-            { -1.000000, -1.414214 },
-            {  0.088884, -3.066567 },
-            { -0.181636, -0.446444 },
-            {  1.535818, -0.404231 }
-        };
-
-// Expected values for SIN
-psF64 projectionSinExpected[TESTPOINTS][2] = {
-            { -0.500000, -0.707101 },
-            {  0.027546, -0.950366 },
-            { -0.132394, -0.325413 },
-            {  1.046712, -0.275497 }
-        };
-
-// Expected values for AIT
-psF64 projectionAitExpected[TESTPOINTS][2] = {
-            { -0.549175,  0.523375 },
-            {  0.027895,  0.313807 },
-            { -0.162822,  0.607646 },
-            {  1.455312,  0.955388 }
-        };
-
-// Expected values for PAR
-psF64 projectionParExpected[TESTPOINTS][2] = {
-            { -0.541244,  0.545532 },
-            {  0.027703,  0.329366 },
-            { -0.157157,  0.633550 },
-            {  1.432951,  0.971372 }
-        };
-
-// Testpoints, offset and expected values for psSphereSetOffset test
-#define TESTPOINTS_OFFSET  4
-psF64 setOffsetTestpoint[TESTPOINTS_OFFSET][2] = {
-            { 0.50,  0.50 },
-            {-0.50,  0.50 },
-            { 0.00,  0.00 },
-            { 1.50, -0.10 }
-        };
-
-psF64 setOffsetOffset[TESTPOINTS_OFFSET][2] = {
-            { 0.190761, -0.272205 },
-            {-0.553049, -0.460926 },
-            { 0.100335,-14.172222 },
-            {14.172222, -0.100335 }
-        };
-
-psF64 setOffsetResult[TESTPOINTS_OFFSET][2] = {
-            { 0.25,  0.75 },
-            { 0.20,  0.80 },
-            {-0.10,  1.50 },
-            { 0.00,  0.00 }
-        };
-
-psF64 getOffsetTestpoint1[TESTPOINTS_OFFSET][2] = {
-            { 0.00,  0.00 },
-            {-0.25,  0.50 },
-            { 0.50, -0.25 },
-            { 0.25, -0.10 }
-        };
-
-psF64 getOffsetTestpoint2[TESTPOINTS_OFFSET][2] = {
-            { 0.75,  0.25 },
-            { 0.40, -0.60 },
-            { 1.50,  0.50 },
-            { 0.10,  0.75 }
-        };
-
-psF64 getOffsetResult[TESTPOINTS_OFFSET][2] = {
-            { -0.931596, -0.348976 },
-            { -1.632830,  2.649629 },
-            { -2.166795, -1.707211 },
-            {  0.167752, -1.151351 }
-        };
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( !runTestSuite(stderr,"psCoord",tests,argc,argv) );
-}
-
-psS32 testProjectionAlloc(void)
-{
-    // Allocate new psProjection structure
-    psProjection*  myProjection = psProjectionAlloc(1.1, 2.2, 3.3, 4.4, PS_PROJ_AIT);
-
-    // Verify NULL is not returned
-    if(myProjection == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL");
-        return 1;
-    }
-    // Verify the members are set correctly
-    if(myProjection->R != 1.1) {
-        psError(PS_ERR_UNKNOWN,true,"R member set to %lg, but expected %lg",
-                myProjection->R, 1.1);
-        return 2;
-    }
-    if(myProjection->D != 2.2) {
-        psError(PS_ERR_UNKNOWN,true,"D member set to %lg, but expected %lg",
-                myProjection->D, 2.2);
-        return 3;
-    }
-    if(myProjection->Xs != 3.3) {
-        psError(PS_ERR_UNKNOWN,true,"Xs member set to %lg, but expected %lg",
-                myProjection->Xs, 3.3);
-        return 4;
-    }
-    if(myProjection->Ys != 4.4) {
-        psError(PS_ERR_UNKNOWN,true,"Ys member set to %lg, but expected %lg",
-                myProjection->Ys, 4.4);
-        return 5;
-    }
-    if(myProjection->type != PS_PROJ_AIT) {
-        psError(PS_ERR_UNKNOWN,true,"type member set to %d, but expected %d",
-                myProjection->type, PS_PROJ_AIT);
-        return 6;
-    }
-
-    // Free projection
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testProjectTan(void)
-{
-    psPlane*       out = NULL;
-    psSphere*      in = psSphereAlloc();
-    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
-
-    // Perform projecton on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and project members
-        in->r = projectionTestPoint[i][0];
-        in->d = projectionTestPoint[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform projection
-        out = psProject(in, myProjection);
-
-        // Verify output not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return i*10;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->x - projectionTanExpected[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
-                    i,out->x, projectionTanExpected[i][0]);
-            return i*10+1;
-        }
-        if(fabs(out->y - projectionTanExpected[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
-                    i,out->y, projectionTanExpected[i][1]);
-            return i*10+2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testDeprojectTan(void)
-{
-    psSphere*       out = NULL;
-    psPlane*        in = psPlaneAlloc();
-    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
-
-    // Perform deprojection on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and projection members
-        in->x = projectionTanExpected[i][0];
-        in->y = projectionTanExpected[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform deprojection
-        out = psDeproject(in, myProjection);
-
-        // Verify output is not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return 20*i;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
-                    i,out->r,projectionTestPoint[i][0]);
-            return 20*i + 1;
-        }
-        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
-                    i, out->d, projectionTestPoint[i][1]);
-            return 20*i + 2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testProjectSin(void)
-{
-    psPlane*       out = NULL;
-    psSphere*      in = psSphereAlloc();
-    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_SIN);
-
-    // Perform projecton on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and project members
-        in->r = projectionTestPoint[i][0];
-        in->d = projectionTestPoint[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform projection
-        out = psProject(in, myProjection);
-
-        // Verify output not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return i*10;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->x - projectionSinExpected[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
-                    i,out->x, projectionSinExpected[i][0]);
-            return i*10+1;
-        }
-        if(fabs(out->y - projectionSinExpected[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
-                    i,out->y, projectionSinExpected[i][1]);
-            return i*10+2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testDeprojectSin(void)
-{
-    psSphere*       out = NULL;
-    psPlane*        in = psPlaneAlloc();
-    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_SIN);
-
-    // Perform deprojection on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and projection members
-        in->x = projectionSinExpected[i][0];
-        in->y = projectionSinExpected[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform deprojection
-        out = psDeproject(in, myProjection);
-
-        // Verify output is not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return 20*i;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
-                    i,out->r,projectionTestPoint[i][0]);
-            return 20*i + 1;
-        }
-        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
-                    i, out->d, projectionTestPoint[i][1]);
-            return 20*i + 2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testProjectAit(void)
-{
-    psPlane*       out = NULL;
-    psSphere*      in = psSphereAlloc();
-    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_AIT);
-
-    // Perform projecton on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and project members
-        in->r = projectionTestPoint[i][0];
-        in->d = projectionTestPoint[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform projection
-        out = psProject(in, myProjection);
-
-        // Verify output not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return i*10;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->x - projectionAitExpected[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
-                    i,out->x, projectionAitExpected[i][0]);
-            return i*10+1;
-        }
-        if(fabs(out->y - projectionAitExpected[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
-                    i,out->y, projectionAitExpected[i][1]);
-            return i*10+2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testDeprojectAit(void)
-{
-    psSphere*       out = NULL;
-    psPlane*        in = psPlaneAlloc();
-    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_AIT);
-
-    // Perform deprojection on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and projection members
-        in->x = projectionAitExpected[i][0];
-        in->y = projectionAitExpected[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform deprojection
-        out = psDeproject(in, myProjection);
-
-        // Verify output is not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return 20*i;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
-                    i,out->r,projectionTestPoint[i][0]);
-            return 20*i + 1;
-        }
-        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
-                    i, out->d, projectionTestPoint[i][1]);
-            return 20*i + 2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testProjectPar(void)
-{
-    psPlane*       out = NULL;
-    psSphere*      in = psSphereAlloc();
-    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_PAR);
-
-    // Perform projecton on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and project members
-        in->r = projectionTestPoint[i][0];
-        in->d = projectionTestPoint[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform projection
-        out = psProject(in, myProjection);
-
-        // Verify output not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return i*10;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->x - projectionParExpected[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psPlane->x = %lg  expected %lg",
-                    i,out->x, projectionParExpected[i][0]);
-            return i*10+1;
-        }
-        if(fabs(out->y - projectionParExpected[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint % d  psPlane->y = %lg  expected %lg",
-                    i,out->y, projectionParExpected[i][1]);
-            return i*10+2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testDeprojectPar(void)
-{
-    psSphere*       out = NULL;
-    psPlane*        in = psPlaneAlloc();
-    psProjection*   myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_PAR);
-
-    // Perform deprojection on various test points
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-
-        // Initialize input and projection members
-        in->x = projectionParExpected[i][0];
-        in->y = projectionParExpected[i][1];
-        myProjection->R = projectionTestPoint[i][2];
-        myProjection->D = projectionTestPoint[i][3];
-        myProjection->Xs = projectionTestPoint[i][4];
-        myProjection->Ys = projectionTestPoint[i][5];
-
-        // Perform deprojection
-        out = psDeproject(in, myProjection);
-
-        // Verify output is not NULL
-        if(out == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Return null not expected");
-            return 20*i;
-        }
-
-        // Verify output is as expected
-        if(fabs(out->r - projectionTestPoint[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->r = %lg  expected %lg",
-                    i,out->r,projectionTestPoint[i][0]);
-            return 20*i + 1;
-        }
-        if(fabs(out->d - projectionTestPoint[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d  psSphere->d = %lg expected %lg",
-                    i, out->d, projectionTestPoint[i][1]);
-            return 20*i + 2;
-        }
-        psFree(out);
-    }
-
-    psFree(in);
-    psFree(myProjection);
-
-    return 0;
-}
-
-psS32 testProjectFail(void)
-{
-    psPlane*       out          = NULL;
-    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
-    psSphere*      in           = psSphereAlloc();
-
-    // Invoke function with null coordinate argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null coord arg");
-    out = psProject(NULL, myProjection);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
-        return 1;
-    }
-
-    // Invoke function with null projection argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null projection arg");
-    out = psProject(in, NULL);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
-        return 2;
-    }
-
-    // Invoke function with invalid projection type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid projection type");
-    myProjection->type = PS_PROJ_NTYPE;
-    out = psProject(in,myProjection);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
-        return 3;
-    }
-
-    psFree(myProjection);
-    psFree(in);
-
-    return 0;
-}
-
-psS32 testDeprojectFail(void)
-{
-    psSphere*      out          = NULL;
-    psProjection*  myProjection = psProjectionAlloc(0.0,0.0,1.0,1.0,PS_PROJ_TAN);
-    psPlane*       in           = psPlaneAlloc();
-
-    // Invoke function with null coordinate argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null coord arg");
-    out = psDeproject(NULL, myProjection);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
-        return 1;
-    }
-
-    // Invoke function with null projection argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null projection arg");
-    out = psDeproject(in, NULL);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
-        return 2;
-    }
-
-    // Invoke function with invalid projection type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid projection type");
-    myProjection->type = PS_PROJ_NTYPE;
-    out = psDeproject(in,myProjection);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null as expected");
-        return 3;
-    }
-
-    psFree(myProjection);
-    psFree(in);
-
-    return 0;
-}
-
-psS32 testSetOffsetSphere( void )
-{
-    psSphere* position1 = psSphereAlloc();
-    psSphere* position2 = NULL;
-    psSphere* offset    = psSphereAlloc();
-    psSphere* tmpOffset = psSphereAlloc();
-
-    // Initialize first position
-    position1->r = DEG_TO_RAD(90.0);
-    position1->d = DEG_TO_RAD(45.0);
-    position1->rErr = 0.0;
-    position1->dErr = 0.0;
-
-    //  Using various offset verify spherical offset
-    //  Use all the valid unit types
-    for (psF64 r = 0.0; r < 180.0; r += DEG_INC) {
-        for (psF64 d = 0.0; d < 90.0; d += DEG_INC) {
-
-            offset->r = DEG_TO_RAD(r);
-            offset->d = DEG_TO_RAD(d);
-            offset->rErr = 0.0;
-            offset->dErr = 0.0;
-
-            position2 = psSphereSetOffset(position1, offset, PS_SPHERICAL, PS_RADIAN);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 1);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 2);
-            psFree(position2);
-
-            tmpOffset->r = RAD_TO_DEG(offset->r);
-            tmpOffset->d = RAD_TO_DEG(offset->d);
-            tmpOffset->rErr = 0.0;
-            tmpOffset->dErr = 0.0;
-            position2 = psSphereSetOffset(position1, tmpOffset, PS_SPHERICAL, PS_DEGREE);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 3);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 4);
-            psFree(position2);
-
-            tmpOffset->r = RAD_TO_MIN(offset->r);
-            tmpOffset->d = RAD_TO_MIN(offset->d);
-            tmpOffset->rErr = 0.0;
-            tmpOffset->dErr = 0.0;
-            position2 = psSphereSetOffset(position1, tmpOffset, PS_SPHERICAL, PS_ARCMIN);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 5);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 6);
-            psFree(position2);
-
-            tmpOffset->r = RAD_TO_SEC(offset->r);
-            tmpOffset->d = RAD_TO_SEC(offset->d);
-            tmpOffset->rErr = 0.0;
-            tmpOffset->dErr = 0.0;
-            position2 = psSphereSetOffset(position1, tmpOffset, PS_SPHERICAL, PS_ARCSEC);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->r, (position1->r + offset->r), 7);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(position2->d, (position1->d + offset->d), 8);
-            psFree(position2);
-        }
-    }
-
-    // Attempt to call function with null input coordinate
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message null input coord");
-    position2 = psSphereSetOffset(NULL, offset, PS_LINEAR, PS_ARCSEC);
-    if (position2 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
-        return 30;
-    }
-
-    // Attempt to call function with null offset
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message null offset");
-    position2 = psSphereSetOffset(position1, NULL, PS_LINEAR, PS_ARCSEC);
-    if (position2 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
-        return 31;
-    }
-
-    // Attempt to call function with invalid mode
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid mode");
-    position2 = psSphereSetOffset(position1, offset, 0x54321, 0);
-    if (position2 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
-        return 32;
-    }
-
-    // Attempt to call function with invalid unit
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message invalid unit");
-    position2 = psSphereSetOffset(position1, offset, PS_SPHERICAL, 0x54321);
-    if (position2 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL");
-        return 33;
-    }
-
-    psFree(position1);
-    psFree(offset);
-    psFree(tmpOffset);
-
-    return 0;
-}
-
-psS32 testSetOffsetLinear(void)
-{
-    psSphere*   coord = psSphereAlloc();
-    psSphere*   offset = psSphereAlloc();
-    psSphere*   out = NULL;
-
-    for(psS32 i = 0; i < TESTPOINTS_OFFSET; i++) {
-
-        coord->r = setOffsetTestpoint[i][0];
-        coord->d = setOffsetTestpoint[i][1];
-
-        offset->r = setOffsetOffset[i][0];
-        offset->d = setOffsetOffset[i][1];
-
-        out = psSphereSetOffset(coord, offset, PS_LINEAR, PS_RADIAN);
-
-        if(fabs(out->r - setOffsetResult[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->r = %lg not equal to expected %lg",
-                    i, out->r, setOffsetResult[i][0]);
-            return i*10;
-        }
-        if(fabs(out->d - setOffsetResult[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->d = %lg not equal to expected %lg",
-                    i,out->d, setOffsetResult[i][1]);
-            return i*10+1;
-        }
-
-        psFree(out);
-    }
-
-    psFree(coord);
-    psFree(offset);
-
-    return 0;
-}
-
-psS32 testGetOffsetSphere( void )
-{
-    psSphere* position1 = psSphereAlloc();
-    psSphere* position2 = psSphereAlloc();
-    psSphere *offset = NULL;
-
-    position1->r = DEG_TO_RAD(90.0);
-    position1->d = DEG_TO_RAD(45.0);
-    position1->rErr = 0.0;
-    position1->dErr = 0.0;
-
-    for (psF64 r = 0.0; r < 180.0;r += DEG_INC) {
-        for (psF64 d = 0.0;d < 90.0; d += DEG_INC) {
-            position2->r = DEG_TO_RAD(r);
-            position2->d = DEG_TO_RAD(d);
-            position2->rErr = 0.0;
-            position2->dErr = 0.0;
-
-            offset = psSphereGetOffset( position1,  position2,
-                                        PS_SPHERICAL, PS_RADIAN);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 1);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 1);
-            psFree(offset);
-
-            offset = psSphereGetOffset( position1, position2,
-                                        PS_SPHERICAL, PS_DEGREE);
-            offset->r = DEG_TO_RAD(offset->r);
-            offset->d = DEG_TO_RAD(offset->d);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 2);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 3);
-            psFree(offset);
-
-            offset = psSphereGetOffset( position1,  position2,
-                                        PS_SPHERICAL, PS_ARCMIN);
-            offset->r = MIN_TO_RAD(offset->r);
-            offset->d = MIN_TO_RAD(offset->d);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 2);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 3);
-            psFree(offset);
-
-            offset = psSphereGetOffset( position1,  position2,
-                                        PS_SPHERICAL, PS_ARCSEC);
-            offset->r = SEC_TO_RAD(offset->r);
-            offset->d = SEC_TO_RAD(offset->d);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->r, (position2->r - position1->r), 2);
-            PS_COMPARE_TINY_THEN_PRINT_ERROR(offset->d, (position2->d - position1->d), 3);
-            psFree(offset);
-        }
-    }
-
-    // Attempt to invoke function with null position 1 parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null position");
-    offset = psSphereGetOffset(NULL, position2, PS_LINEAR, 0);
-    if (offset != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 10;
-    }
-
-    // Attempt to invoke function with null position 2 parameter
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for null position");
-    offset = psSphereGetOffset(position1, NULL, PS_LINEAR, 0);
-    if (offset != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 11;
-    }
-
-    // Attempt to invoke function with invalid mode
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid mode");
-    offset = psSphereGetOffset(position1, position2, 0x54321, 0);
-    if (offset != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 12;
-    }
-
-    // Attempt to invoke function with invalid unit type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid unit type");
-    offset = psSphereGetOffset(position1, position2, PS_SPHERICAL, 0x54321);
-    if (offset != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 13;
-    }
-
-    // Attempt to invoke function with coordinate 1 declination value 90.0 degree
-    position1->d = DEG_TO_RAD(90.0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate warning message");
-    offset = psSphereGetOffset(position1, position2, PS_SPHERICAL, PS_RADIAN);
-    if (offset != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 14;
-    }
-
-    // Attempt to invoke function with coordinate 2 declination value 90.0 degree
-    position1->d = DEG_TO_RAD(45.0);
-    position2->d = DEG_TO_RAD(90.0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate warning message");
-    offset = psSphereGetOffset(position1, position2, PS_SPHERICAL, PS_RADIAN);
-    if (offset != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 15;
-    }
-
-    psFree(position1);
-    psFree(position2);
-
-    return 0;
-}
-
-psS32 testGetOffsetLinear(void)
-{
-    psSphere*   coord1 = psSphereAlloc();
-    psSphere*   coord2 = psSphereAlloc();
-    psSphere*   out = NULL;
-
-    for(psS32 i = 0; i < TESTPOINTS_OFFSET; i++) {
-
-        coord1->r = getOffsetTestpoint1[i][0];
-        coord1->d = getOffsetTestpoint1[i][1];
-
-        coord2->r = getOffsetTestpoint2[i][0];
-        coord2->d = getOffsetTestpoint2[i][1];
-
-        out = psSphereGetOffset(coord1, coord2, PS_LINEAR, PS_RADIAN);
-
-        if(fabs(out->r - getOffsetResult[i][0]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->r = %lg not equal to expected %lg",
-                    i, out->r, getOffsetResult[i][0]);
-            return i*10;
-        }
-        if(fabs(out->d - getOffsetResult[i][1]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Testpoint %d: Result out->d = %lg not equal to expected %lg",
-                    i,out->d, getOffsetResult[i][1]);
-            return i*10+1;
-        }
-
-        psFree(out);
-    }
-
-    psFree(coord1);
-    psFree(coord2);
-
-    return 0;
-}
-
-
Index: unk/psLib/test/astronomy/tst_psTime_01.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psTime_01.c	(revision 4546)
+++ 	(revision )
@@ -1,1160 +1,0 @@
-/** @file  tst_psTime_01.c
- *
- *  @brief Test driver for psTime functions
- *
- *  This test driver contains the following tests for psTime:
- *     1) Allocate psTime structure
- *     2) Get current time
- *     3) Get UT1 UTC delta
- *     4) Convert psTime to MJD
- *     5) Convert psTime to JD
- *     6) Convert psTime to ISO
- *     7) Convert psTime to timeval
- *     8) Create psTime from MJD
- *     9) Create psTime from JD
- *    10) Create psTime from ISO
- *    11) Create psTime from timeval
- *    12) Create psTime from TM
- *    13) Convert time between different types
- *
- *     O) Convert psTime time to LMST
- *
- *  @author  Ross Harman, MHPCC
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.27 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-06-10 01:41:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-#include <string.h>
-
-#define ERROR_TOL    0.0001
-
-static psS32 testTimeAlloc(void);
-static psS32 testTimeGetNow(void);
-static psS32 testTimeGetUT1Delta(void);
-static psS32 testTimeToMJD(void);
-static psS32 testTimeToJD(void);
-static psS32 testTimeToISO(void);
-static psS32 testTimeToTimeval(void);
-static psS32 testTimeFromMJD(void);
-static psS32 testTimeFromJD(void);
-static psS32 testTimeFromISO(void);
-static psS32 testTimeFromTimeval(void);
-static psS32 testTimeFromTM(void);
-static psS32 testTimeConvert(void);
-
-testDescription tests[] = {
-                              {testTimeAlloc,000,"psTimeAlloc",0,false},
-                              {testTimeGetNow,000,"psTimeGetNow",0,false},
-                              {testTimeGetUT1Delta,000,"psTimeGetUT1Delta",0,false},
-                              {testTimeToMJD,000,"psTimeToMJD",0,false},
-                              {testTimeToJD,000,"psTimeToJD",0,false},
-                              {testTimeToISO,000,"psTimeToISO",0,false},
-                              {testTimeToTimeval,000,"psTimeToTimeval",0,false},
-                              {testTimeFromMJD,000,"psTimeFromMJD",0,false},
-                              {testTimeFromJD,000,"psTimeFromJD",0,false},
-                              {testTimeFromISO,000,"psTimeFromISO",0,false},
-                              {testTimeFromTimeval,000,"psTimeFromTimeval",0,false},
-                              {testTimeFromTM,000,"p_psTimeFromTM",0,false},
-                              {testTimeConvert,000,"psTimeConvert",0,false},
-                              {NULL}
-                          };
-
-// Test Time 1 : July 21, 2004  18:22:24.3
-//               MJD = 53207.765559
-//               JD = 2453208.265559
-// UTC Test Time 1
-const psS64 testTime1SecondsUTC     = 1090434144;
-const psU32 testTime1NanosecondsUTC = 272044000;
-// TAI Test Time 1
-const psS64 testTime1SecondsTAI     = 1090434176;
-const psU32 testTime1NanosecondsTAI = 272044000;
-const psF64 testTime1MJDTAI         = 53207.76592937;
-const psF64 testTime1JDTAI          = 2453208.26592937;
-
-// TT Test Time 1
-const psS64 testTime1SecondsTT      = 1090434208;
-const psU32 testTime1NanosecondsTT  = 456044000;
-// Expected UT1-UTC IERS A & B
-const psF64 testTime1UT1DeltaBullA  = -0.457233186;
-const psF64 testTime1UT1DeltaBullB  = -0.457227;
-// UT1 Test Time 1
-const psS64 testTime1SecondsUT1     = 1090434143;
-const psU32 testTime1NanosecondsUT1 = 814810814;
-// Expected MJD & JD
-const psF64 testTime1MJD            = 53207.765559;
-const psF64 testTime1JD             = 2453208.265559;
-// Expected ISO string
-const char* testTime1Str     = "2004-07-21T18:22:24,2Z";
-const char* testTime1StrLeap = "2004-07-21T18:22:60,2Z";
-// Expected timeval values
-const psS32 testTime1TimevalSec = 1090434144;
-const psS32 testTime1TimevalUsec = 272044;
-
-// Test Time 2 : Jan. 1, 1973 00:00:00.0000
-//               MJD = 41683.0000
-//               JD = 2441683.5000
-const psS64 testTime2SecondsUTC     = 94694400;
-const psU32 testTime2NanosecondsUTC = 0;
-
-// Expected UT1-UTC IERS A & B
-const psF64 testTime2UT1DeltaBullA  = 0.000000;
-const psF64 testTime2UT1DeltaBullB  = 0.000000;
-
-// Test Time 3 : Sept. 21, 2006 00:00:00.0000
-//               MJD = 53999
-//               JD = 2453999.5
-const psS64 testTime3SecondsUTC     = 1158796800;
-const psU32 testTime3NanosecondsUTC = 0;
-// Expected UT1-UTC IERS A & B
-const psF64 testTime3UT1DeltaBullA  = -0.63574;
-const psF64 testTime3UT1DeltaBullB  = -0.63574;
-
-// Test Time 4 : Jan. 1, 1969 00:00:00.0000
-//               MJD = 40222
-//               JD = 2440222.5
-const psS64 testTime4SecondsUTC     = -31536000;
-const psU32 testTime4NanosecondsUTC = 0;
-// Expected MJD and JD
-const psF64 testTime4MJD            = 40222.0;
-const psF64 testTime4JD             = 2440222.5;
-
-// Test Time 5 : Dec 31, 0001 BC 23:59:59
-//               MJD = -1397755
-//               JD = 1002245.4999
-const psS64 testTime5SecondsUTC     = -62125920001;
-const psU32 testTime5NanosecondsUTC  = 0;
-
-// Test Time 6 : Jan. 1, 10000 AD 00:00:00
-const psS64 testTime6SecondsUTC      = 253202544001;
-const psU32 testTime6NanosecondsUTC  = 0;
-
-// Test Time 7 : Jan. 1, 2004 00:00:00,0
-const psS64 testTime7Seconds         = 1072915200;
-const psU32 testTime7Nanoseconds     = 0;
-const psS32 testTime7TmYear          = 104;
-const psS32 testTime7TmMon           = 0;
-const psS32 testTime7TmDay           = 1;
-const psS32 testTime7TmHour          = 0;
-const psS32 testTime7TmMin           = 0;
-const psS32 testTime7TmSec           = 0;
-
-// Test Time 8 : Dec. 31, 2003 00:00:00,0
-const psS64 testTime8Seconds         = 1072828800;
-const psU32 testTime8Nanoseconds     = 0;
-const psS32 testTime8TmYear          = 103;
-const psS32 testTime8TmMon           = 11;
-const psS32 testTime8TmDay           = 31;
-const psS32 testTime8TmHour          = 0;
-const psS32 testTime8TmMin           = 0;
-const psS32 testTime8TmSec           = 0;
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    // Initialize library internal structures
-    psLibInit("psTime.config");
-
-    if( !runTestSuite(stderr,"psTime",tests,argc,argv)) {
-        return 1;
-    }
-
-    // Cleanup library
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeAlloc(void)
-{
-    psTime*  time = NULL;
-
-    // Allocate new psTime with valid time type
-    time = psTimeAlloc(PS_TIME_TAI);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL when psTime object ptr expected");
-        return 1;
-    }
-    // Verify members set properly
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Member type = %d not as expected %d",time->type,PS_TIME_TAI);
-        return 2;
-    }
-    if((time->sec != 0) && (time->nsec != 0) && (time->leapsecond != false)) {
-        psError(PS_ERR_UNKNOWN,true,"Members not set appropriately");
-        return 3;
-    }
-    psFree(time);
-
-    // Allocate new psTime with invalid time type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    time = psTimeAlloc(-100);
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time type");
-        return 4;
-    }
-
-    return 0;
-}
-psS32 testTimeGetNow(void)
-{
-    psTime*  timeNow = NULL;
-
-    // Get current time and verify return is psTime structure
-    timeNow = psTimeGetNow(PS_TIME_TAI);
-    if(timeNow == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return valid psTime struct");
-        return 1;
-    }
-    if(timeNow->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Time type %d not as expected %d",
-                timeNow->type, PS_TIME_TAI);
-        return 2;
-    }
-    psFree(timeNow);
-
-    // Attempt to get time with invalid type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time type");
-    timeNow = psTimeGetNow(-100);
-    if(timeNow != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time type");
-        return 3;
-    }
-
-    return 0;
-}
-
-psS32 testTimeGetUT1Delta(void)
-{
-    psTime*    time      = NULL;
-    psF64      ut1Delta  = 0.0;
-
-    // Attempt to convert NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
-    if( !isnan(ut1Delta)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for NULL psTime");
-        return 1;
-    }
-
-    // Attempt to convert invalid time
-    time = psTimeAlloc(PS_TIME_TAI);
-    time->sec = 1;
-    time->nsec = 2e9;
-    time->leapsecond = false;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
-    if( !isnan(ut1Delta)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid time");
-        return 2;
-    }
-
-    // Attempt to convert time with invalid bulletin
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid bulletin");
-    time->nsec = 2;
-    ut1Delta = psTimeGetUT1Delta(time,-100);
-    if( !isnan(ut1Delta)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid bulletin");
-        return 3;
-    }
-
-    // Attempt to get delta with valid time and bulletin A
-    time->sec  = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    time->type = PS_TIME_UTC;
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_A);
-    if(fabs(ut1Delta - testTime1UT1DeltaBullA) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 1 bulletin A",
-                ut1Delta,testTime1UT1DeltaBullA);
-        return 4;
-    }
-
-    // Attempt to get delta with valid time and bulletin B
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
-    if(fabs(ut1Delta - testTime1UT1DeltaBullB) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 1 bulletin B",
-                ut1Delta,testTime1UT1DeltaBullB);
-        return 5;
-    }
-
-    // Attempt to get delta with valid time and bulletin A
-    time->sec  = testTime2SecondsUTC;
-    time->nsec = testTime2NanosecondsUTC;
-    time->type = PS_TIME_UTC;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message predating table");
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_A);
-    if(fabs(ut1Delta - testTime2UT1DeltaBullA) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 2 bulletin A",
-                ut1Delta,testTime2UT1DeltaBullA);
-        return 6;
-    }
-
-    // Attempt to get delta with valid time and bulletin B
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message predating table");
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
-    if(fabs(ut1Delta - testTime2UT1DeltaBullB) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 2 bulletin B",
-                ut1Delta,testTime2UT1DeltaBullB);
-        return 7;
-    }
-
-    // Attempt to get delta with valid time and bulletin A
-    time->sec  = testTime3SecondsUTC;
-    time->nsec = testTime3NanosecondsUTC;
-    time->type = PS_TIME_UTC;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message postdating table");
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_A);
-    if(fabs(ut1Delta - testTime3UT1DeltaBullA) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 3 bulletin A",
-                ut1Delta,testTime3UT1DeltaBullA);
-        return 8;
-    }
-
-    // Attempt to get delta with valid time and bulletin B
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message postdating table");
-    ut1Delta = psTimeGetUT1Delta(time,PS_IERS_B);
-    if(fabs(ut1Delta - testTime3UT1DeltaBullB) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 Delta %lf not as expected %lf test time 3 bulletin B",
-                ut1Delta,testTime3UT1DeltaBullB);
-        return 9;
-    }
-
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeToMJD(void)
-{
-    psTime*  time = NULL;
-    psF64    mjd  = 0.0;
-
-    // Attempt to convert with time NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    mjd = psTimeToMJD(NULL);
-    if(!isnan(mjd)) {
-        psError(PS_ERR_UNKNOWN,true,"Expected NaN for NULL time");
-        return 1;
-    }
-
-    // Attempt to convert invalid time
-    time = psTimeAlloc(PS_TIME_UTC);
-    time->sec = 1;
-    time->nsec = 2e9;
-    time->leapsecond = false;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    mjd = psTimeToMJD(time);
-    if( !isnan(mjd)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid time");
-        return 2;
-    }
-
-    // Check valid time conversion to MJD after 1/1/1970 epoch
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    mjd = psTimeToMJD(time);
-    if(fabs(mjd - testTime1MJD) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected MJD = %lf not as expected %lf",
-                mjd, testTime1MJD);
-        return 3;
-    }
-
-    // Check valid time conversion to MJD before 1/1/1970 epoch
-    time->sec = testTime4SecondsUTC;
-    time->nsec = testTime4NanosecondsUTC;
-    mjd = psTimeToMJD(time);
-    if(fabs(mjd - testTime4MJD) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected MJD = %lf not as expected %lf",
-                mjd, testTime4MJD);
-        return 4;
-    }
-
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeToJD(void)
-{
-    psTime*  time = NULL;
-    psF64    jd  = 0.0;
-
-    // Attempt to convert with time NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    jd = psTimeToJD(NULL);
-    if(!isnan(jd)) {
-        psError(PS_ERR_UNKNOWN,true,"Expected NaN for NULL time");
-        return 1;
-    }
-
-    // Attempt to convert invalid time
-    time = psTimeAlloc(PS_TIME_UTC);
-    time->sec = 1;
-    time->nsec = 2e9;
-    time->leapsecond = false;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    jd = psTimeToJD(time);
-    if( !isnan(jd)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid time");
-        return 2;
-    }
-
-    // Check valid time conversion to MJD after 1/1/1970 epoch
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    jd = psTimeToJD(time);
-    if(fabs(jd - testTime1JD) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected JD = %lf not as expected %lf",
-                jd, testTime1JD);
-        return 3;
-    }
-
-    // Check valid time conversion to MJD before 1/1/1970 epoch
-    time->sec = testTime4SecondsUTC;
-    time->nsec = testTime4NanosecondsUTC;
-    jd = psTimeToJD(time);
-    if(fabs(jd - testTime4JD) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected JD = %lf not as expected %lf",
-                jd, testTime4JD);
-        return 4;
-    }
-
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeToISO(void)
-{
-    psTime*    time    = NULL;
-    char*      timeStr = NULL;
-
-    // Attempt to convert with NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
-    timeStr = psTimeToISO(time);
-    if(timeStr != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 1;
-    }
-
-    // Attempt to convert invalid time
-    time = psTimeAlloc(PS_TIME_UTC);
-    time->sec = 1;
-    time->nsec = 2e9;
-    time->leapsecond = false;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    timeStr = psTimeToISO(time);
-    if( timeStr != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
-        return 2;
-    }
-
-    // Verify return NULL for time prior to year 0000
-    time->sec = testTime5SecondsUTC;
-    time->nsec = testTime5NanosecondsUTC;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for time prior year 0000");
-    timeStr = psTimeToISO(time);
-    if(timeStr != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for time prior to year 0000");
-        return 3;
-    }
-
-    // Verify return NULL for time after to year 9999
-    time->sec = testTime6SecondsUTC;
-    time->nsec = testTime6NanosecondsUTC;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for time after year 9999");
-    timeStr = psTimeToISO(time);
-    if(timeStr != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for time after to year 9999");
-        return 4;
-    }
-
-    // Verify return string with valid time
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    timeStr = psTimeToISO(time);
-    if(strcmp(timeStr,testTime1Str) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"String %s not as expected %s",
-                timeStr, testTime1Str);
-        return 5;
-    }
-    psFree(timeStr);
-
-    // Verify return string with valid time and leap second set
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    time->leapsecond = true;
-    timeStr = psTimeToISO(time);
-    if(strcmp(timeStr,testTime1StrLeap) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"String %s not as expected %s",
-                timeStr, testTime1StrLeap);
-        return 6;
-    }
-    psFree(timeStr);
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeToTimeval(void)
-{
-    psTime*           time         = NULL;
-    struct timeval*   timevalTime  = NULL;
-
-    // Attempt to convert with NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
-    timevalTime = psTimeToTimeval(time);
-    if(timevalTime != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 1;
-    }
-
-    // Attempt to convert invalid time
-    time = psTimeAlloc(PS_TIME_UTC);
-    time->sec = 1;
-    time->nsec = 2e9;
-    time->leapsecond = false;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    timevalTime = psTimeToTimeval(time);
-    if( timevalTime != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
-        return 2;
-    }
-
-    // Attempt to convert invalid time
-    time->sec = -1;
-    time->nsec = 0;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    timevalTime = psTimeToTimeval(time);
-    if( timevalTime != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
-        return 2;
-    }
-
-    // Verify convert to timeval with valid time
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    timevalTime = psTimeToTimeval(time);
-    if(timevalTime->tv_sec != testTime1TimevalSec) {
-        psError(PS_ERR_UNKNOWN,true,"Timeval seconds %ld not as expectd %ld",
-                timevalTime->tv_sec,testTime1TimevalSec);
-        return 4;
-    }
-    if(timevalTime->tv_usec != testTime1TimevalUsec) {
-        psError(PS_ERR_UNKNOWN,true,"Timeval useconds %ld not as expected %ld",
-                timevalTime->tv_usec,testTime1TimevalUsec);
-        return 5;
-    }
-
-    psFree(timevalTime);
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromMJD(void)
-{
-    psTime*   time = NULL;
-
-    // Attempt to convert valid time to psTime
-    time = psTimeFromMJD(testTime1MJDTAI);
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                time->type,PS_TIME_TAI);
-        return 1;
-    }
-    if(time->sec != testTime1SecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec,testTime1SecondsTAI);
-        return 2;
-    }
-    psFree(time);
-
-    // Attempt to convert valid time before 1970 epoch
-    time = psTimeFromMJD(testTime4MJD);
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                time->type,PS_TIME_TAI);
-        return 3;
-    }
-    if(time->sec != testTime4SecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec,testTime4SecondsUTC);
-        return 4;
-    }
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromJD(void)
-{
-    psTime*   time = NULL;
-
-    // Attempt to convert valid time to psTime
-    time = psTimeFromJD(testTime1JDTAI);
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                time->type,PS_TIME_TAI);
-        return 1;
-    }
-    if(time->sec != testTime1SecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec,(long int)testTime1SecondsTAI);
-        return 2;
-    }
-    psFree(time);
-
-    // Attempt to convert valid time before 1970 epoch
-    time = psTimeFromJD(testTime4JD);
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                time->type,PS_TIME_TAI);
-        return 3;
-    }
-    if(time->sec != testTime4SecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec,testTime4SecondsUTC);
-        return 4;
-    }
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromISO(void)
-{
-    psTime*   time = NULL;
-
-    // Attempt to convert NULL string
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL ISO string");
-    time = psTimeFromISO(NULL);
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected for NULL ISO string");
-        return 1;
-    }
-
-    // Convert valid ISO string
-    time = psTimeFromISO(testTime1Str);
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                time->type, PS_TIME_TAI);
-        return 2;
-    }
-    if(time->sec != testTime1SecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec,testTime1SecondsTAI);
-        return 3;
-    }
-    psFree(time);
-
-    // Attempt to convert invalid ISO string
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid ISO string");
-    time = psTimeFromISO("Here I am");
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected for invalid ISO string");
-        return 4;
-    }
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromTimeval(void)
-{
-    psTime*          time        = NULL;
-    struct timeval*  timevalTime = NULL;
-
-    // Attempt to create psTime from NULL timeval ptr
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL timeval");
-    time = psTimeFromTimeval(NULL);
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL timeval ptr");
-        return 1;
-    }
-
-    // Convert valid timeval structure
-    timevalTime = (struct timeval*)psAlloc(sizeof(struct timeval));
-    timevalTime->tv_sec = testTime1SecondsTAI;
-    timevalTime->tv_usec = testTime1NanosecondsTAI / 1000;
-    time = psTimeFromTimeval(timevalTime);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return value for valid timeval");
-        return 2;
-    }
-    if(time->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"psTime type %d not as expected %d",
-                time->type, PS_TIME_TAI);
-        return 3;
-    }
-    if(time->sec != testTime1SecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                time->sec, testTime1SecondsTAI);
-        return 4;
-    }
-    if(time->nsec != testTime1NanosecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"psTime nanosec %ld not as expected %ld",
-                time->nsec, testTime1NanosecondsTAI);
-        return 5;
-    }
-    psFree(timevalTime);
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromTM(void)
-{
-    psTime*     time   = NULL;
-    struct tm*  tmTime = NULL;
-
-    // Attempt to convert from NULL tm structure ptr
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL tm ptr");
-    time = p_psTimeFromTM(tmTime);
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL tm ptr");
-        return 1;
-    }
-
-    // Verify convert for valid tm structure
-    tmTime = (struct tm*)psAlloc(sizeof(struct tm));
-    tmTime->tm_year = testTime7TmYear;
-    tmTime->tm_mon  = testTime7TmMon;
-    tmTime->tm_mday = testTime7TmDay;
-    tmTime->tm_hour = testTime7TmHour;
-    tmTime->tm_min  = testTime7TmMin;
-    tmTime->tm_sec  = testTime7TmSec;
-    time = p_psTimeFromTM(tmTime);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return value for valid tm structure");
-        return 2;
-    }
-    if(time->sec != testTime7Seconds) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec, (long int)testTime7Seconds);
-        return 3;
-    }
-    if(time->nsec != testTime7Nanoseconds) {
-        psError(PS_ERR_UNKNOWN,true,"psTime nanoseconds %ld not as expected %ld",
-                time->nsec, testTime7Nanoseconds);
-        return 4;
-    }
-    psFree(tmTime);
-    psFree(time);
-
-    // Verify convert for valid tm structure
-    tmTime = (struct tm*)psAlloc(sizeof(struct tm));
-    tmTime->tm_year = testTime8TmYear;
-    tmTime->tm_mon  = testTime8TmMon;
-    tmTime->tm_mday = testTime8TmDay;
-    tmTime->tm_hour = testTime8TmHour;
-    tmTime->tm_min  = testTime8TmMin;
-    tmTime->tm_sec  = testTime8TmSec;
-    time = p_psTimeFromTM(tmTime);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return value for valid tm structure");
-        return 2;
-    }
-    if(time->sec != testTime8Seconds) {
-        psError(PS_ERR_UNKNOWN,true,"psTime seconds %ld not as expected %ld",
-                (long int)time->sec, (long int)testTime8Seconds);
-        return 3;
-    }
-    if(time->nsec != testTime8Nanoseconds) {
-        psError(PS_ERR_UNKNOWN,true,"psTime nanoseconds %ld not as expected %ld",
-                time->nsec, testTime8Nanoseconds);
-        return 4;
-    }
-    psFree(tmTime);
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeConvert(void)
-{
-    psTime*  time1 = NULL;
-    psTime*  time2 = NULL;
-
-    // Attempt to convert NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    time2 = psTimeConvert(time1,PS_TIME_TAI);
-    // Verify return value is NULL
-    if(time2 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL time specified");
-        return 1;
-    }
-
-    // Attempt to convert to invalid type
-    time1 = psTimeAlloc(PS_TIME_TAI);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
-    time2 = psTimeConvert(time1,-100);
-    // Verify return value is NULL
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
-        return 2;
-    }
-    time1->type = PS_TIME_UTC;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
-    time2 = psTimeConvert(time1,-100);
-    // Verify return value is NULL
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
-        return 2;
-    }
-    time1->type = PS_TIME_TT;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
-    time2 = psTimeConvert(time1,-100);
-    // Verify return value is NULL
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
-        return 2;
-    }
-    time1->type = -100;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
-    time2 = psTimeConvert(time1,PS_TIME_TAI);
-    // Verify return value is NULL
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid type to convert to");
-        return 2;
-    }
-
-    // Attempt to convert with invalid time nsec > 1e9
-    time1->nsec = 2e9;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    time2 = psTimeConvert(time1,PS_TIME_TAI);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for invalid time specified");
-        return 3;
-    }
-
-    //Attempt to convert a time to the same type
-    time2 = NULL;
-    time1->sec = 1;
-    time1->nsec = 2;
-    time1->type = PS_TIME_TAI;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_TAI);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion to same type");
-        return 4;
-    }
-    // Verify time not changed
-    if((time2->sec != 1) || (time2->nsec != 2) || (time2->type != PS_TIME_TAI) ||
-            (time2->leapsecond != false) ) {
-        psError(PS_ERR_UNKNOWN,true,"Time member changes when no change expected");
-        return 5;
-    }
-
-    // Attempt to convert a UTC time to a TAI
-    time2 = NULL;
-    time1->sec = testTime1SecondsUTC;
-    time1->nsec = testTime1NanosecondsUTC;
-    time1->type = PS_TIME_UTC;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_TAI);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UTC to TAI");
-        return 6;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_TAI);
-        return 7;
-    }
-    // Verify time is TAI as expected
-    if(time2->sec != testTime1SecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"TAI seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsTAI);
-        return 7;
-    }
-    if(time2->nsec != testTime1NanosecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"TAI nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
-                (long int)testTime1NanosecondsTAI);
-        return 8;
-    }
-
-    // Attempt to convert a UTC time to a TT
-    time2 = NULL;
-    time1->sec = testTime1SecondsUTC;
-    time1->nsec = testTime1NanosecondsUTC;
-    time1->type = PS_TIME_UTC;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_TT);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UTC to TT");
-        return 6;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_TT) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_TT);
-        return 7;
-    }
-    // Verify time is TT as expected
-    if(time2->sec != testTime1SecondsTT) {
-        psError(PS_ERR_UNKNOWN,true,"TT seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsTT);
-        return 7;
-    }
-    if(time2->nsec != testTime1NanosecondsTT) {
-        psError(PS_ERR_UNKNOWN,true,"TT nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
-                (long int)testTime1NanosecondsTT);
-        return 8;
-    }
-
-    // Attempt to convert a UTC time to UT1
-    time2 = NULL;
-    time1->sec = testTime1SecondsUTC;
-    time1->nsec = testTime1NanosecondsUTC;
-    time1->type = PS_TIME_UTC;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_UT1);
-    if(time1 != time2) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UTC to UT1");
-        return 9;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_UT1) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_UT1);
-        return 7;
-    }
-    // Verify time is UT1 as expected
-    if(time2->sec != testTime1SecondsUT1) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsUT1);
-        return 9;
-    }
-    if(time2->nsec != testTime1NanosecondsUT1) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 nanoseconds = %d not as expected %d",time2->nsec,
-                testTime1NanosecondsUT1);
-        return 10;
-    }
-
-    // Attempt to convert a TAI time to UTC
-    time2 = NULL;
-    time1->sec = testTime1SecondsTAI;
-    time1->nsec = testTime1NanosecondsTAI;
-    time1->type = PS_TIME_TAI;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_UTC);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TAI to UTC");
-        return 11;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_UTC) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_UTC);
-        return 7;
-    }
-    // Verify time is UTC as expected
-    if(time2->sec != testTime1SecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"UTC seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsUTC);
-        return 12;
-    }
-    if(time2->nsec != testTime1NanosecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"UTC nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
-                (long int)testTime1NanosecondsUTC);
-        return 13;
-    }
-
-    // Attempt to convert a TAI time to TT
-    time2 = NULL;
-    time1->sec = testTime1SecondsTAI;
-    time1->nsec = testTime1NanosecondsTAI;
-    time1->type = PS_TIME_TAI;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_TT);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TAI to TT");
-        return 14;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_TT) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_TT);
-        return 7;
-    }
-    // Verify time is TT as expected
-    if(time2->sec != testTime1SecondsTT) {
-        psError(PS_ERR_UNKNOWN,true,"TT seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsTT);
-        return 15;
-    }
-    if(time2->nsec != testTime1NanosecondsTT) {
-        psError(PS_ERR_UNKNOWN,true,"TT nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
-                (long int)testTime1NanosecondsTT);
-        return 16;
-    }
-
-    // Attempt to convert a TAI time to UT1
-    time2 = NULL;
-    time1->sec = testTime1SecondsTAI;
-    time1->nsec = testTime1NanosecondsTAI;
-    time1->type = PS_TIME_TAI;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_UT1);
-    if(time1 != time2) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TAI to UT1");
-        return 9;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_UT1) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_UT1);
-        return 7;
-    }
-    // Verify time is UT1 as expected
-    if(time2->sec != testTime1SecondsUT1) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsUT1);
-        return 9;
-    }
-    if(time2->nsec != testTime1NanosecondsUT1) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 nanoseconds = %d not as expected %d",time2->nsec,
-                testTime1NanosecondsUT1);
-        return 10;
-    }
-
-    // Attempt to convert a TT time to UTC
-    time2 = NULL;
-    time1->sec = testTime1SecondsTT;
-    time1->nsec = testTime1NanosecondsTT;
-    time1->type = PS_TIME_TT;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_UTC);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TT to UTC");
-        return 17;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_UTC) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_UTC);
-        return 7;
-    }
-    // Verify time is UTC as expected
-    if(time2->sec != testTime1SecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"UTC seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsUTC);
-        return 18;
-    }
-    if(time2->nsec != testTime1NanosecondsUTC) {
-        psError(PS_ERR_UNKNOWN,true,"UTC nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
-                (long int)testTime1NanosecondsUTC);
-        return 19;
-    }
-
-    // Attempt to convert a TT time to TAI
-    time2 = NULL;
-    time1->sec = testTime1SecondsTT;
-    time1->nsec = testTime1NanosecondsTT;
-    time1->type = PS_TIME_TT;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_TAI);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TT to TAI");
-        return 20;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_TAI);
-        return 7;
-    }
-    // Verify time is TAI as expected
-    if(time2->sec != testTime1SecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"TAI seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsTAI);
-        return 21;
-    }
-    if(time2->nsec != testTime1NanosecondsTAI) {
-        psError(PS_ERR_UNKNOWN,true,"TT nanoseconds = %ld not as expected %ld",(long int)time2->nsec,
-                (long int)testTime1NanosecondsTAI);
-        return 22;
-    }
-
-    // Attempt to convert a TT time to UT1
-    time2 = NULL;
-    time1->sec = testTime1SecondsTT;
-    time1->nsec = testTime1NanosecondsTT;
-    time1->type = PS_TIME_TT;
-    time1->leapsecond = false;
-    time2 = psTimeConvert(time1,PS_TIME_UT1);
-    if(time1 != time2) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from TT to UT1");
-        return 9;
-    }
-    // Verify time type
-    if(time2->type != PS_TIME_UT1) {
-        psError(PS_ERR_UNKNOWN,true,"Returned time type %d not as expected %d",
-                time2->type, PS_TIME_UT1);
-        return 7;
-    }
-    // Verify time is UT1 as expected
-    if(time2->sec != testTime1SecondsUT1) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 seconds = %ld not as expected %ld",(long int)time2->sec,
-                (long int)testTime1SecondsUT1);
-        return 9;
-    }
-    if(time2->nsec != testTime1NanosecondsUT1) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 nanoseconds = %d not as expected %d",time2->nsec,
-                testTime1NanosecondsUT1);
-        return 10;
-    }
-
-    // Attempt to convert from UT1 to TAI, UTC, TT
-    time2 = NULL;
-    time1->sec = 1;
-    time1->nsec = 2;
-    time1->type = PS_TIME_UT1;
-    time1->leapsecond = false;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message converting from UT1");
-    time2 = psTimeConvert(time1,PS_TIME_UTC);
-    if(time2 != time1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return time for conversion from UT1");
-        return 23;
-    }
-
-    psFree(time1);
-
-    return 0;
-}
-
-//psS32 testTimeOther(void)
-//{
-//    psTime *testTime;
-//    char *testString = "2004-07-21T18:22:24.272Z";
-//
-//    psLibInit("psTime.config");
-//
-// Test time was taken at July 21, 2004 at 18:22:24.272044
-//    testTime = (psTime*)psAlloc(sizeof(psTime));
-//    testTime->sec = 1090434144;
-//    testTime->nsec = 272044000;
-//    testTime->type = PS_TIME_TAI;
-
-// Test O - psTime to LMST
-//    printPositiveTestHeader(stdout, "psTime", "Convert psTime time to LST");
-//    char *testString2 = "2004-09-10T1:00:00.00Z";
-//    psTime* testTime2 = NULL;
-//    testTime2 = psTimeFromISO(testString2);
-//    double dblTime = psTimeToLMST(testTime2, 1);
-//    printf("LST (rad): %lf\n", dblTime);
-//    psFree(testTime2);
-//    printFooter(stdout, "psTime", "Convert psTime time to LST", true);
-
-
-//    return 0;
-//}
Index: unk/psLib/test/astronomy/tst_psTime_02.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psTime_02.c	(revision 4546)
+++ 	(revision )
@@ -1,368 +1,0 @@
-/** @file  tst_psTime_02.c
- *
- *  @brief Test driver for psTime functions
- *
- *  This test driver contains the following tests for psTime:
- *     1) Convert psTime to Local Mean Sidereal Time (LMST)
- *     2) Calculate leap second delta between times
- *     3) Creation of psTime of type TT
- *     4) Creation of psTime of type UTC
- *
- *  @author  Ross Harman, MHPCC
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-06-10 01:41:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define ERROR_TOL  0.001
-
-static psS32 testTimeLMST(void);
-static psS32 testTimeLeapSecondDelta(void);
-static psS32 testTimeIsLeapSecond(void);
-static psS32 testTimeFromTT(void);
-static psS32 testTimeFromUTC(void);
-
-// Test Time 1 : May 9, 2005  00:00:00,0
-//               MJD = 53499.000
-//               JD = 2453499.5
-// UTC Test Time 1
-const psS64 testTime1SecondsUTC     = 1115596900;
-const psU32 testTime1NanosecondsUTC = 0;
-// Expected LMST  15:09:18
-const psF64 testTime1LMST0          = 3.967604;
-
-// Test Time 2 : May 9, 1995 00:00:00,0
-//               MJD = 49846.00
-//               JD = 2449846.5
-// UTC Test Time 2
-const psS64 testTime2SecondsUTC     = 799977600;
-const psU32 testTime2NanosecondsUTC = 0;
-// Expected leap second delta
-const psS64 testTimeLeapSecondDelta1 = 3;
-
-// Test Time 3: Jan 1, 1999 00:00:00,0
-//              MJD = 51179
-//              JD = 2451179.5
-const psS64 testTime3SecondsUTC     = 915148800;
-const psU32 testTime3NanosecondsUTC = 0;
-
-testDescription tests[] = {
-                              {testTimeLMST,000,"psTimeToLMST",0,false},
-                              {testTimeLeapSecondDelta,000,"psTimeLeapSecondDelta",0,false},
-                              {testTimeIsLeapSecond,000,"psTimeIsLeapSecond",0,false},
-                              {testTimeFromTT,000,"psTimeFromTT",0,false},
-                              {testTimeFromUTC,000,"psTimeFromUTC",0,false},
-                              {NULL}
-                          };
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    // Initialize library internal structures
-    psLibInit("psTime.config");
-
-    if( !runTestSuite(stderr,"psTime",tests,argc,argv)) {
-        return 1;
-    }
-
-    // Clean up library
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeLMST(void)
-{
-    psTime*       time      = NULL;
-    psF64         lmst      = 0.0;
-
-    // Attempt to get LMST with NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    lmst = psTimeToLMST(time,0);
-    if(!isnan(lmst)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NaN as expected %lf",lmst);
-        return 1;
-    }
-
-    // Attempt to get LMST with valid test time
-    // Allocate test time
-    time = psTimeAlloc(PS_TIME_UTC);
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    time->leapsecond = false;
-    lmst = psTimeToLMST(time,0.0);
-    if(fabs(lmst-testTime1LMST0) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"LMST %lf not as expected %lf",lmst,testTime1LMST0);
-        return 2;
-    }
-
-    // Attempt to get LMST with invalid input time UT1
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for incorrect type");
-    time->type = PS_TIME_UT1;
-    lmst = psTimeToLMST(time,0.0);
-    if(!isnan(lmst)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NaN as expected %lf",lmst);
-        return 3;
-    }
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeLeapSecondDelta(void)
-{
-    psTime*       time1   = NULL;
-    psTime*       time2   = NULL;
-    psS64         delta   = 0;
-
-    // Attempt to get delta with NULL time1 argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    delta = psTimeLeapSecondDelta(time1,time2);
-    if(delta != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
-        return 1;
-    }
-
-    // Set test time 1
-    time1 = psTimeAlloc(PS_TIME_UTC);
-    time1->sec = testTime1SecondsUTC;
-    time1->nsec = testTime1NanosecondsUTC;
-    time1->leapsecond = false;
-
-    // Attempt to get delta with NULL time2 argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    delta = psTimeLeapSecondDelta(time1,time2);
-    if(delta != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
-        return 2;
-    }
-
-    // Set test time 2 with invalid time
-    time2 = psTimeAlloc(PS_TIME_UTC);
-    time2->sec = 0;
-    time2->nsec = 2e9;
-    time2->leapsecond = false;
-
-    // Attempt to get delta with invalid time2
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    delta = psTimeLeapSecondDelta(time1,time2);
-    if(delta != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
-        return 3;
-    }
-
-    // Set test time 2 valid
-    time2->sec = testTime2SecondsUTC;
-    time2->nsec = testTime2NanosecondsUTC;
-
-    // Set test time 1 invalid
-    time1->sec = 0;
-    time1->nsec = 2e9;
-
-    // Attempt to get delta with invalid time1
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    delta = psTimeLeapSecondDelta(time1,time2);
-    if(delta != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Delta of %ld not as expected 0",(long int)delta);
-        return 4;
-    }
-
-    // Set test time 1 to greater time
-    time1->sec = testTime1SecondsUTC;
-    time1->nsec = testTime1NanosecondsUTC;
-    delta = psTimeLeapSecondDelta(time1,time2);
-    if(delta != testTimeLeapSecondDelta1) {
-        psError(PS_ERR_UNKNOWN,true,"Delta %ld not as expected %ld",
-                (long int)delta,(long int)testTimeLeapSecondDelta1);
-        return 5;
-    }
-
-    // Set test time 1 to lesser time
-    delta = psTimeLeapSecondDelta(time2,time1);
-    if(delta != testTimeLeapSecondDelta1) {
-        psError(PS_ERR_UNKNOWN,true,"Delta %ld not as expected %ld",
-                (long int)delta,(long int)testTimeLeapSecondDelta1);
-        return 6;
-    }
-
-    // Attempt to get delta with times equal
-    delta = psTimeLeapSecondDelta(time1,time1);
-    if(delta != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Delta %ld not as expected 0",(long int)delta);
-        return 7;
-    }
-
-    psFree(time2);
-    psFree(time1);
-
-    return 0;
-}
-
-psS32 testTimeIsLeapSecond(void)
-{
-    psTime*     time        = NULL;
-    psBool      leapsecond  = false;
-
-    // Attempt to determine if leap second with NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL time");
-    leapsecond = psTimeIsLeapSecond(time);
-    if(leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
-        return 1;
-    }
-
-    // Set time
-    time = psTimeAlloc(PS_TIME_TAI);
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    time->leapsecond = false;
-
-    // Attempt to determine if leap second with non-UTC time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid type");
-    leapsecond = psTimeIsLeapSecond(time);
-    if(leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
-        return 2;
-    }
-
-    // Set time to UTC
-    time->type = PS_TIME_UTC;
-
-    // Attempt to determine if leap second with valid time
-    leapsecond = psTimeIsLeapSecond(time);
-    if(leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not a expected 0",leapsecond);
-        return 3;
-    }
-
-    // Set time to UTC with leap second
-    time->sec = testTime3SecondsUTC;
-    time->nsec = testTime3NanosecondsUTC;
-    leapsecond = psTimeIsLeapSecond(time);
-    if(!leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not a expected 1",leapsecond);
-        return 4;
-    }
-
-    // Set time to 1 second before a known leap second
-    time->sec--;
-    leapsecond = psTimeIsLeapSecond(time);
-    if(leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
-        return 5;
-    }
-
-    // Set time to 1 second after a known leap second
-    time->sec +=2;
-    leapsecond = psTimeIsLeapSecond(time);
-    if(leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",leapsecond);
-        return 6;
-    }
-
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromTT(void)
-{
-    psTime*       time = NULL;
-
-    // Attempt to create psTime with invalid time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    time = psTimeFromTT(0,2e9);
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 1;
-    }
-
-    // Attempt to create psTime with valid time
-    time = psTimeFromTT(testTime1SecondsUTC,testTime1NanosecondsUTC);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL when not expected");
-        return 2;
-    }
-    if(time->type != PS_TIME_TT) {
-        psError(PS_ERR_UNKNOWN,true,"Type of time object %d not as expected %d",
-                time->type,PS_TIME_TT);
-        return 3;
-    }
-    if((time->sec != testTime1SecondsUTC) || (time->nsec != testTime1NanosecondsUTC)) {
-        psError(PS_ERR_UNKNOWN,true,"Seconds %ld nanoseconds %d not as expected seconds %ld nanoseconds %d",
-                (long int)time->sec,time->nsec,(long int)testTime1SecondsUTC,testTime1NanosecondsUTC);
-        return 4;
-    }
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeFromUTC(void)
-{
-    psTime*       time = NULL;
-
-    // Attempt to create psTime with invalid time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid time");
-    time = psTimeFromUTC(0,2e9,true);
-    if(time != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL as expected");
-        return 1;
-    }
-
-    // Attempt to create psTime with valid non-leapsecond time and leapsecond flag true
-    time = psTimeFromUTC(testTime1SecondsUTC,testTime1NanosecondsUTC,true);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL when not expected");
-        return 2;
-    }
-    if(time->type != PS_TIME_UTC) {
-        psError(PS_ERR_UNKNOWN,true,"Type of time object %d not as expected %d",
-                time->type,PS_TIME_UTC);
-        return 3;
-    }
-    if((time->sec != testTime1SecondsUTC) || (time->nsec != testTime1NanosecondsUTC)) {
-        psError(PS_ERR_UNKNOWN,true,"Seconds %ld nanoseconds %d not as expected seconds %ld nanoseconds %d",
-                (long int)time->sec,time->nsec,(long int)testTime1SecondsUTC,testTime1NanosecondsUTC);
-        return 4;
-    }
-    if(time->leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 0",time->leapsecond);
-        return 5;
-    }
-    psFree(time);
-
-    // Attempt to create psTime with valid leapsecond time but leapsecond flag false
-    time = psTimeFromUTC(testTime3SecondsUTC,testTime3NanosecondsUTC,false);
-    if(time == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL when not expected");
-        return 6;
-    }
-    if(time->type != PS_TIME_UTC) {
-        psError(PS_ERR_UNKNOWN,true,"Type of time object %d not as expected %d",
-                time->type,PS_TIME_UTC);
-        return 7;
-    }
-    if((time->sec != testTime3SecondsUTC) || (time->nsec != testTime3NanosecondsUTC)) {
-        psError(PS_ERR_UNKNOWN,true,"Seconds %ld nanoseconds %d not as expected seconds %ld nanoseconds %d",
-                (long int)time->sec,time->nsec,(long int)testTime1SecondsUTC,testTime1NanosecondsUTC);
-        return 8;
-    }
-    if(!time->leapsecond) {
-        psError(PS_ERR_UNKNOWN,true,"Leapsecond flag %d not as expected 1",time->leapsecond);
-        return 9;
-    }
-
-
-    psFree(time);
-
-    return 0;
-}
-
Index: unk/psLib/test/astronomy/tst_psTime_03.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psTime_03.c	(revision 4546)
+++ 	(revision )
@@ -1,501 +1,0 @@
-/** @file  tst_psTime_03.c
- *
- *  @brief Test driver for psTime functions
- *
- *  This test driver contains the following tests for psTime:
- *   1) psTimeMath invalid times
- *   2) psTimeMath valid time of different types
- *   3) psTimeDelta valid times with different types
- *
- *  @author  Ross Harman, MHPCC
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.18 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-06-10 01:41:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-#include <string.h>
-
-#define ERROR_TOL    0.001
-
-static psS32 testTimeMath(void);
-static psS32 testTimeDelta(void);
-static psS32 testTimeConvert1(void);
-
-// Test Time 1 : May 9, 2005 00:00:00,0
-//               MJD = 53499.00
-//               JD = 2453499.5
-// UTC Test Time 1
-const psS64 testTime1SecondsUTC         = 1115596900;
-const psU32 testTime1NanosecondsUTC     = 0;
-// TAI Test Time 1
-const psS64 testTime1SecondsTAI         = 1115596932;
-const psU32 testTime1NanosecondsTAI     = 0;
-// TT Test Time 1
-const psS64 testTime1SecondsTT          = 1115596964;
-const psU32 testTime1NanosecondsTT      = 184000000;
-// UT1 Test Time 1
-const psS64 testTime1SecondsUT1         = 1115596900;
-const psU32 testTime1NanosecondsUT1     = 184000000;
-// Delta 1
-const psF64 deltaTime1                  = -15.5;
-// Expected UTC Time 1
-const psS64 newTestTime1SecondsUTC      = 1115596884;
-const psU32 newTestTime1NanosecondsUTC  = 500000000;
-// Expected TAI Time 1
-const psS64 newTestTime1SecondsTAI      = 1115596916;
-const psU32 newTestTime1NanosecondsTAI  = 500000000;
-// Delta 2
-const psF64 deltaTime2                  = 123.066;
-// Expected TT Time 1 w/ delta 2
-const psS64 newTestTime1SecondsTT       = 1115597087;
-const psU32 newTestTime1NanosecondsTT   = 250000000;
-// Expected UT1 Time 1 w/ delta 2
-const psS64 newTestTime1SecondsUT1      = 1115597023;
-const psU32 newTestTime1NanosecondsUT1  = 250000000;
-
-// Test Time 2 : Dec. 31 1998 23:59:45,0
-//               MJD = 51178.99983
-//               JD = 2451179.49983
-// UTC Test Time 1
-const psS64 testTime2SecondsUTC         = 915148785;
-const psU32 testTime2NanosecondsUTC     = 0;
-// Delta 3
-const psF64 deltaTime3                    = 30.0;
-// Expected UTC Time
-const psS64 newTestTime2SecondsUTC      = 915148814;
-const psU32 newTestTime2NanosecondsUTC  = 0;
-
-// Appendix B time conversion tests
-//
-#define APPB_TESTS    8
-const psS64 testTimeBSeconds[APPB_TESTS] =
-    {
-        915148829,
-        915148829,
-        915148830,
-        915148830,
-        915148831,
-        915148831,
-        915148832,
-        915148832
-    };
-const psU32 testTimeBNanoseconds[APPB_TESTS] =
-    {
-        0,
-        500000000,
-        0,
-        500000000,
-        0,
-        500000000,
-        0,
-        500000000
-    };
-const psBool testTimeBLeapsecond[APPB_TESTS] =
-    {
-        false,
-        false,
-        false,
-        false,
-        true,
-        true,
-        false,
-        false
-    };
-// Expected results
-const char* testTimeBStrUTC[APPB_TESTS] =
-    {
-        "1998-12-31T23:59:58,0Z",
-        "1998-12-31T23:59:58,5Z",
-        "1998-12-31T23:59:59,0Z",
-        "1998-12-31T23:59:59,5Z",
-        "1998-12-31T23:59:60,0Z",
-        "1998-12-31T23:59:60,5Z",
-        "1999-01-01T00:00:00,0Z",
-        "1999-01-01T00:00:00,5Z"
-    };
-const char* testTimeBStrTAI[APPB_TESTS] =
-    {
-        "1999-01-01T00:00:29,0Z",
-        "1999-01-01T00:00:29,5Z",
-        "1999-01-01T00:00:30,0Z",
-        "1999-01-01T00:00:30,5Z",
-        "1999-01-01T00:00:31,0Z",
-        "1999-01-01T00:00:31,5Z",
-        "1999-01-01T00:00:32,0Z",
-        "1999-01-01T00:00:32,5Z"
-    };
-const char* testTimeBStrTT[APPB_TESTS] =
-    {
-        "1999-01-01T00:01:01,1Z",
-        "1999-01-01T00:01:01,6Z",
-        "1999-01-01T00:01:02,1Z",
-        "1999-01-01T00:01:02,6Z",
-        "1999-01-01T00:01:03,1Z",
-        "1999-01-01T00:01:03,6Z",
-        "1999-01-01T00:01:04,1Z",
-        "1999-01-01T00:01:04,6Z"
-    };
-const char* testTimeBStrUT1[APPB_TESTS] =
-    {
-        "1998-12-31T23:59:58,7Z",
-        "1998-12-31T23:59:59,2Z",
-        "1998-12-31T23:59:59,7Z",
-        "1998-12-31T23:59:60,2Z",
-        "1998-12-31T23:59:60,7Z",
-        "1999-01-01T00:00:00,2Z",
-        "1999-01-01T00:00:00,7Z",
-        "1999-01-01T00:00:01,2Z"
-    };
-
-// Test Time B1 : Dec 31, 1998 23:59:58,0
-//                MJD = 51178.99998
-//                JD = 2451179.49998
-//const psS64 testTimeB1SecondsUTC        = 915148798;
-//const psU32 testTimeB1NanosecondsUTC    = 0;
-// Expected ISO times
-//const char testTimeB1StrUTC[] = "1998-12-31T23:59:58,0Z";
-//const char testTimeB1StrTAI[] = "1999-01-01T00:00:29,0Z";
-//const char testTimeB1StrTT[]  = "1999-01-01T00:01:01,1Z";
-//const char testTimeB1StrUT1[] = "1998-12-31T23:59:57,7Z";
-//
-// Test Time B2 : Dec 31, 1998 23:59:58,5
-//
-//
-//const psS64 testTimeB2SecondsUTC       = 915148798;
-//const psU32 testTimeB2NanosecondsUTC   = 500000000;
-// Expected ISO times
-//const char testTimeB2StrUTC[] = "1998-12-31T23:59:58,5Z";
-//const char testTimeB2StrTAI[] = "1991-01-01T00:00:29,5Z";
-//const char testTimeB2StrTT[]  = "1999-01-01T00:01:01,6Z";
-//const char testTimeB2StrUT1[] = "1998-12-31T23:59:58,2Z";
-
-testDescription tests[] = {
-                              {testTimeMath,000,"psTimeMath",0,false},
-                              {testTimeDelta,000,"psTimeDelta",0,false},
-                              {testTimeConvert1,000,"psTimeConvert",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    // Initialize library internal structures
-    psLibInit("psTime.config");
-
-    if( !runTestSuite(stderr,"psTime",tests,argc,argv)) {
-        return 1;
-    }
-
-    // Clean up library
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeMath(void)
-{
-    psTime*     time      = NULL;
-    psTime*     newTime   = NULL;
-
-    // Attempt to perform math operation on NULL time
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
-    if(psTimeMath(time,-1.1) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL time");
-        return 1;
-    }
-
-    // Set up input time with invalid nanoseconds
-    time = psTimeAlloc(PS_TIME_UTC);
-    time->sec = 0;
-    time->nsec = 2e9;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid time");
-    if(psTimeMath(time,-1.1) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid time");
-        return 2;
-    }
-
-    // Set up input time with valid time
-    time->sec = testTime1SecondsUTC;
-    time->nsec = testTime1NanosecondsUTC;
-    newTime = psTimeMath(time,deltaTime1);
-    if(newTime == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
-        return 3;
-    }
-    if(newTime->type != PS_TIME_UTC) {
-        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
-                newTime->type,PS_TIME_UTC);
-        return 4;
-    }
-    if((newTime->sec != newTestTime1SecondsUTC) || (newTime->nsec != newTestTime1NanosecondsUTC)) {
-        psError(PS_ERR_UNKNOWN,true,"UTC sec %ld nsec %d not as expected sec %ld nsec %d",
-                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsUTC,
-                newTestTime1NanosecondsUTC);
-        return 5;
-    }
-    psFree(newTime);
-
-    // Set up input time with valid TAI time
-    time->sec = testTime1SecondsTAI;
-    time->nsec = testTime1NanosecondsTAI;
-    time->type = PS_TIME_TAI;
-    newTime = psTimeMath(time,deltaTime1);
-    if(newTime == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
-        return 3;
-    }
-    if(newTime->type != PS_TIME_TAI) {
-        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
-                newTime->type,PS_TIME_TAI);
-        return 4;
-    }
-    if((newTime->sec != newTestTime1SecondsTAI) || (newTime->nsec != newTestTime1NanosecondsTAI)) {
-        psError(PS_ERR_UNKNOWN,true,"TAI sec %ld nsec %d not as expected sec %ld nsec %d",
-                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsTAI,
-                newTestTime1NanosecondsTAI);
-        return 5;
-    }
-    psFree(newTime);
-
-    // Set up input time with valid TT time
-    time->sec = testTime1SecondsTT;
-    time->nsec = testTime1NanosecondsTT;
-    time->type = PS_TIME_TT;
-    newTime = psTimeMath(time,deltaTime2);
-    if(newTime == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
-        return 3;
-    }
-    if(newTime->type != PS_TIME_TT) {
-        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
-                newTime->type,PS_TIME_TT);
-        return 4;
-    }
-    if((newTime->sec != newTestTime1SecondsTT) || (newTime->nsec != newTestTime1NanosecondsTT)) {
-        psError(PS_ERR_UNKNOWN,true,"TT sec %ld nsec %d not as expected sec %ld nsec %d",
-                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsTT,
-                newTestTime1NanosecondsTT);
-        return 5;
-    }
-    psFree(newTime);
-
-    // Set up input time with valid TT time
-    time->sec = testTime1SecondsUT1;
-    time->nsec = testTime1NanosecondsUT1;
-    time->type = PS_TIME_UT1;
-    newTime = psTimeMath(time,deltaTime2);
-    if(newTime == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
-        return 3;
-    }
-    if(newTime->type != PS_TIME_UT1) {
-        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
-                newTime->type,PS_TIME_UT1);
-        return 4;
-    }
-    if((newTime->sec != newTestTime1SecondsUT1) || (newTime->nsec != newTestTime1NanosecondsUT1)) {
-        psError(PS_ERR_UNKNOWN,true,"UT1 sec %ld nsec %d not as expected sec %ld nsec %d",
-                (long int)newTime->sec,newTime->nsec,(long int)newTestTime1SecondsUT1,
-                newTestTime1NanosecondsUT1);
-        return 5;
-    }
-    psFree(newTime);
-
-    // Set up input time with valid UTC time and delt which crosses leap second
-    time->sec = testTime2SecondsUTC;
-    time->nsec = testTime2NanosecondsUTC;
-    time->type = PS_TIME_UTC;
-    newTime = psTimeMath(time,deltaTime3);
-    if(newTime == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return");
-        return 3;
-    }
-    if(newTime->type != PS_TIME_UTC) {
-        psError(PS_ERR_UNKNOWN,true,"New time type %d not as expected %d",
-                newTime->type,PS_TIME_UTC);
-        return 4;
-    }
-    if((newTime->sec != newTestTime2SecondsUTC) || (newTime->nsec != newTestTime2NanosecondsUTC)) {
-        psError(PS_ERR_UNKNOWN,true,"UTC sec %ld nsec %d not as expected sec %ld nsec %d",
-                (long int)newTime->sec,newTime->nsec,(long int)newTestTime2SecondsUTC,
-                newTestTime2NanosecondsUTC);
-        return 5;
-    }
-    psFree(newTime);
-
-    psFree(time);
-
-    return 0;
-}
-
-psS32 testTimeDelta(void)
-{
-    psTime*   time1   = NULL;
-    psTime*   time2   = NULL;
-    psF64     delta   = 0.0;
-
-    // Attempt to get delta with time1 NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
-    delta = psTimeDelta(time1,time2);
-    if(fabs(delta-0.0) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for NULL time argument");
-        return 1;
-    }
-
-    // Set time 1
-    time1 = psTimeAlloc(PS_TIME_UTC);
-
-    // Attempt to get delta with time2 NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL time");
-    delta = psTimeDelta(time1,time2);
-    if(fabs(delta-0.0) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for NULL time argument");
-        return 2;
-    }
-
-    // Set time 2
-    time2 = psTimeAlloc(PS_TIME_UTC);
-
-    // Set time1 invalid
-    time1->sec = 0;
-    time1->nsec = 2e9;
-    // Attempt to get delta with time1 invalid
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid time");
-    delta = psTimeDelta(time1,time2);
-    if(fabs(delta-0.0) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for invalid time argument");
-        return 3;
-    }
-
-    // Set time 1 valid
-    time1->sec = testTime1SecondsUTC;
-    time1->nsec = testTime1NanosecondsUTC;
-
-    // Set time 2 invalid
-    time2->sec = 0;
-    time2->nsec = 2e9;
-    // Attempt to get delta with time2 invalid
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid time");
-    delta = psTimeDelta(time1,time2);
-    if(fabs(delta-0.0) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for invalid time argument");
-        return 4;
-    }
-
-    // Set time 2 valid but different type
-    time2->sec = newTestTime1SecondsUTC;
-    time2->nsec = newTestTime1NanosecondsUTC;
-    time2->type = PS_TIME_TAI;
-    // Attempt to get delta with different time types
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for incorrect type");
-    delta = psTimeDelta(time1,time2);
-    if(fabs(delta-0.0) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for invalid time argument");
-        return 5;
-    }
-
-    // Set time 2 to same as time 1
-    time2->type = PS_TIME_UTC;
-    // Attempt to get delta with valid times of the same type
-    delta = psTimeDelta(time2,time1);
-    if(fabs(delta-deltaTime1) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Delta %lf not as expected %lf",
-                delta,deltaTime1);
-        return 6;
-    }
-
-    // Set time 1 and 2 as different times with same type
-    time1->sec = testTime1SecondsTT;
-    time1->nsec = testTime1NanosecondsTT;
-    time1->type = PS_TIME_TT;
-    time2->sec = newTestTime1SecondsTT;
-    time2->nsec = newTestTime1NanosecondsTT;
-    time2->type = PS_TIME_TT;
-    // Attempt to get delta with valid times of the same type
-    delta = psTimeDelta(time2,time1);
-    if(fabs(delta-deltaTime2) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Delta %lf not as expected %lf",
-                delta,deltaTime2);
-        return 7;
-    }
-
-    // Set time 1 and 2 as different times with same type
-    time1->sec = testTime2SecondsUTC;
-    time1->nsec = testTime2NanosecondsUTC;
-    time1->type = PS_TIME_UTC;
-    time2->sec = newTestTime2SecondsUTC;
-    time2->nsec = newTestTime2NanosecondsUTC;
-    time2->type = PS_TIME_UTC;
-    // Attempt to get delta with valid times of the same type
-    delta = psTimeDelta(time2,time1);
-    if(fabs(delta-deltaTime3) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Delta %lf not as expected %lf",
-                delta,deltaTime3);
-        return 7;
-    }
-
-    psFree(time1);
-    psFree(time2);
-
-    return 0;
-}
-
-psS32 testTimeConvert1(void)
-{
-    psTime*     time    = NULL;
-    char*       timeStr = NULL;
-
-    for(psS32 i = 0; i < APPB_TESTS; i++) {
-
-        // Initialize time for test time B1
-        time = psTimeAlloc(PS_TIME_TAI);
-        time->sec = testTimeBSeconds[i];
-        time->nsec = testTimeBNanoseconds[i];
-
-        // Verify TAI ISO string
-        timeStr = psTimeToISO(time);
-        if(strcmp(timeStr,testTimeBStrTAI[i]) != 0) {
-            psError(PS_ERR_UNKNOWN,true,"TAI ISO string %s not as expected %s",timeStr,testTimeBStrTAI[i]);
-            return i+1;
-        }
-        psFree(timeStr);
-
-        time = psTimeConvert(time,PS_TIME_TT);
-        timeStr = psTimeToISO(time);
-        if(strcmp(timeStr,testTimeBStrTT[i]) != 0) {
-            psError(PS_ERR_UNKNOWN,true,"TT ISO string %s not as expected %s",timeStr,testTimeBStrTT[i]);
-            return i+10;
-        }
-        psFree(timeStr);
-
-        // Verify UTC ISO string
-        time = psTimeConvert(time,PS_TIME_UTC);
-        time->leapsecond = testTimeBLeapsecond[i];
-        timeStr = psTimeToISO(time);
-        if(strcmp(timeStr,testTimeBStrUTC[i]) != 0) {
-            psError(PS_ERR_UNKNOWN,true,"UTC ISO string %s not as expected %s",timeStr,testTimeBStrUTC[i]);
-            return i+20;
-        }
-        psFree(timeStr);
-
-        time = psTimeConvert(time,PS_TIME_UT1);
-        timeStr = psTimeToISO(time);
-        if(strcmp(timeStr,testTimeBStrUT1[i]) != 0) {
-            psError(PS_ERR_UNKNOWN,true,"UT1 ISO string %s not as expected %s",timeStr,testTimeBStrUT1[i]);
-            return i+30;
-        }
-        psFree(timeStr);
-
-        psFree(time);
-    }
-
-    return 0;
-}
-
Index: unk/psLib/test/astronomy/tst_psTime_04.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psTime_04.c	(revision 4546)
+++ 	(revision )
@@ -1,106 +1,0 @@
-/** @file  tst_psTime_04.c
- *
- *  @brief Test driver for psTime functions
- *
- *  This test driver contains the following tests for psTime:
- *      Test A - Initialize time
- *      Test B - Attempt to open non-existant time config file
- *      Test C - Attempt to open non-existant time data files
- *      Test D - Attempt to read incorrect number of files
- *      Test E - Attempt to read incorrect number of from values
- *      Test F - Attempt to read data file with typo in number
- *      Test G - Free data
- *
- *  @author  Ross Harman, MHPCC
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-06-10 01:41:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-#include "config.h"
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testTimeInit1(void);
-static psS32 testTimeInit2(void);
-static psS32 testTimeInit3(void);
-static psS32 testTimeInit4(void);
-static psS32 testTimeInit5(void);
-static psS32 testTimeInit6(void);
-
-testDescription tests[] = {
-                              {testTimeInit1,000,"p_psTimeInit",0,false},
-                              {testTimeInit2,000,"p_psTimeInit",0,false},
-                              {testTimeInit3,000,"p_psTimeInit",0,false},
-                              {testTimeInit4,000,"p_psTimeInit",0,false},
-                              {testTimeInit5,000,"p_psTimeInit",0,false},
-                              {testTimeInit6,000,"p_psTimeInit",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    if(!runTestSuite(stderr,"psTime",tests,argc,argv)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-psS32 testTimeInit1(void)
-{
-    // Test A - Initialize time
-    psLibInit("psTime.config");
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeInit2(void)
-{
-    // Test B - Attempt to open non-existant time config file
-    psLibInit("zzz");
-
-    return 0;
-}
-
-psS32 testTimeInit3(void)
-{
-    // Test C - Attempt to open non-existant time data files
-    psLibInit("test.psTime.config1");
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeInit4(void)
-{
-    // Test D - Attempt to read incorrect number of files
-    psLibInit("test.psTime.config2");
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeInit5(void)
-{
-    // Test E - Attempt to read incorrect number of from values
-    psLibInit("test.psTime.config3");
-    psLibFinalize();
-
-    return 0;
-}
-
-psS32 testTimeInit6(void)
-{
-    // Test F - Attempt to read data file with typo in number
-    psLibInit("test.psTime.config4");
-    psLibFinalize();
-
-    return 0;
-}
-
Index: unk/psLib/test/astronomy/verified/tst_psCoord.stderr
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psCoord.stderr	(revision 4546)
+++ 	(revision )
@@ -1,227 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformAlloc()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformAlloc()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psPlaneTransformAlloc()}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPlaneTransformAlloc
-    Following should generate an error message: negative x terms
-<DATE><TIME>|<HOST>|E|psPlaneTransformAlloc (FILE:LINENO)
-    Error: n1 is less than 0.
-<DATE><TIME>|<HOST>|I|testPlaneTransformAlloc
-    Following should generate an error message: negative y terms
-<DATE><TIME>|<HOST>|E|psPlaneTransformAlloc (FILE:LINENO)
-    Error: n2 is less than 0.
-
----> TESTPOINT PASSED (psCoord{psPlaneTransformAlloc()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psPlaneDistortAlloc()}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
-    Following should generate an error message for negative x term
-<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
-    Error: n1 is less than 0.
-<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
-    Following should generate an error message for negative y term
-<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
-    Error: n2 is less than 0.
-<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
-    Following should generate an error message for negative z term
-<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
-    Error: n3 is less than 0.
-<DATE><TIME>|<HOST>|I|testPlaneDistortAlloc
-    Following should generate an error message for negative w term
-<DATE><TIME>|<HOST>|E|psPlaneDistortAlloc (FILE:LINENO)
-    Error: n4 is less than 0.
-
----> TESTPOINT PASSED (psCoord{psPlaneDistortAlloc()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psPlaneTransformApply()}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPlaneTransformApply
-    Following should generate error message for NULL psPlaneTransform
-<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
-    Unallowable operation: transform is NULL.
-<DATE><TIME>|<HOST>|I|testPlaneTransformApply
-    Following should generate error message for NULL x coeff psPlaneTransform
-<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
-    Unallowable operation: transform->x is NULL.
-<DATE><TIME>|<HOST>|I|testPlaneTransformApply
-    Following should generate error message for NULL y coeff psPlaneTransform
-<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
-    Unallowable operation: transform->y is NULL.
-<DATE><TIME>|<HOST>|I|testPlaneTransformApply
-    Following should generate error message for NULL psPlane
-<DATE><TIME>|<HOST>|E|psPlaneTransformApply (FILE:LINENO)
-    Unallowable operation: coords is NULL.
-
----> TESTPOINT PASSED (psCoord{psPlaneTransformApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psPlaneDistortApply()}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPlaneDistortApply
-    Following should generate an error message for null psPlaneDistort
-<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
-    Unallowable operation: distort is NULL.
-<DATE><TIME>|<HOST>|I|testPlaneDistortApply
-    Following should generate an error message for null x member psPlaneDistort
-<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
-    Unallowable operation: distort->x is NULL.
-<DATE><TIME>|<HOST>|I|testPlaneDistortApply
-    Following should generate an error message for null y member psPlaneDistort
-<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
-    Unallowable operation: distort->y is NULL.
-<DATE><TIME>|<HOST>|I|testPlaneDistortApply
-    Following should generate an error message for null input psPlane
-<DATE><TIME>|<HOST>|E|psPlaneDistortApply (FILE:LINENO)
-    Unallowable operation: coords is NULL.
-
----> TESTPOINT PASSED (psCoord{psPlaneDistortApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformApply()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testSphereTransformApply1
-    Following should generate an error
-<DATE><TIME>|<HOST>|E|psSphereTransformApply (FILE:LINENO)
-    Unallowable operation: transform is NULL.
-<DATE><TIME>|<HOST>|I|testSphereTransformApply1
-    Following should generate an error
-<DATE><TIME>|<HOST>|E|psSphereTransformApply (FILE:LINENO)
-    Unallowable operation: coord is NULL.
-
----> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformApply()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformApply()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformApply()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformApply()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformApply()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformICRSToEcliptic()}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testSphereTransformICRSToEcliptic
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSphereTransformICRSToEcliptic (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testSphereTransformICRSToEcliptic
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSphereTransformICRSToEcliptic (FILE:LINENO)
-    Specified time is less than 1900.
-
----> TESTPOINT PASSED (psCoord{psSphereTransformICRSToEcliptic()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformEclipticToICRS()}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testSphereTransformEclipticToICRS
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSphereTransformEclipticToICRS (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testSphereTransformEclipticToICRS
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSphereTransformEclipticToICRS (FILE:LINENO)
-    Specified time is less than 1900.
-
----> TESTPOINT PASSED (psCoord{psSphereTransformEclipticToICRS()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformICRSToGalactic()}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformICRSToGalactic()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformGalacticToICRS()}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereTransformGalacticToICRS()} | tst_psCoord.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord.c                                              *
-*            TestPoint: psCoord{psSphereTransformPrecess()}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testSphereTransformPrecess
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSpherePrecess (FILE:LINENO)
-    Unallowable operation: toTime is NULL.
-<DATE><TIME>|<HOST>|I|testSphereTransformPrecess
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSpherePrecess (FILE:LINENO)
-    Unallowable operation: fromTime is NULL.
-<DATE><TIME>|<HOST>|I|testSphereTransformPrecess
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSpherePrecess (FILE:LINENO)
-    Unallowable operation: coords is NULL.
-
----> TESTPOINT PASSED (psCoord{psSphereTransformPrecess()} | tst_psCoord.c)
-
Index: unk/psLib/test/astronomy/verified/tst_psCoord01.stderr
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psCoord01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,199 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProjectionAlloc}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psProjectionAlloc} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProject(TAN)}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psProject(TAN)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psDeproject(TAN)}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psDeproject(TAN)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProject(SIN)}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psProject(SIN)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psDeproject(SIN)}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psDeproject(SIN)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProject(AIT)}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psProject(AIT)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psDeproject(AIT)}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psDeproject(AIT)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProject(PAR)}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psProject(PAR)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psDeproject(PAR)}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psDeproject(PAR)} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProject}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testProjectFail
-    Following should generate an error message for null coord arg
-<DATE><TIME>|<HOST>|E|psProject (FILE:LINENO)
-    Unallowable operation: coord is NULL.
-<DATE><TIME>|<HOST>|I|testProjectFail
-    Following should generate an error message for null projection arg
-<DATE><TIME>|<HOST>|E|psProject (FILE:LINENO)
-    Unallowable operation: projection is NULL.
-<DATE><TIME>|<HOST>|I|testProjectFail
-    Following should generate an error message for invalid projection type
-<DATE><TIME>|<HOST>|E|psProject (FILE:LINENO)
-    The projection type, 4, is unknown.
-
----> TESTPOINT PASSED (psCoord{psProject} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psProject}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDeprojectFail
-    Following should generate an error message for null coord arg
-<DATE><TIME>|<HOST>|E|psDeproject (FILE:LINENO)
-    Unallowable operation: coord is NULL.
-<DATE><TIME>|<HOST>|I|testDeprojectFail
-    Following should generate an error message for null projection arg
-<DATE><TIME>|<HOST>|E|psDeproject (FILE:LINENO)
-    Unallowable operation: projection is NULL.
-<DATE><TIME>|<HOST>|I|testDeprojectFail
-    Following should generate an error message for invalid projection type
-<DATE><TIME>|<HOST>|E|psDeproject (FILE:LINENO)
-    The projection type, 4, is unknown.
-
----> TESTPOINT PASSED (psCoord{psProject} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psSphereSetOffset}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testSetOffsetSphere
-    Following should generate error message null input coord
-<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
-    Unallowable operation: position is NULL.
-<DATE><TIME>|<HOST>|I|testSetOffsetSphere
-    Following should generate error message null offset
-<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
-    Unallowable operation: offset is NULL.
-<DATE><TIME>|<HOST>|I|testSetOffsetSphere
-    Following should generate error message invalid mode
-<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
-    Specified offset mode, 0x54321, is not supported.
-<DATE><TIME>|<HOST>|I|testSetOffsetSphere
-    Following should generate an error message invalid unit
-<DATE><TIME>|<HOST>|E|psSphereSetOffset (FILE:LINENO)
-    Specified units, 0x54321, is not supported.
-
----> TESTPOINT PASSED (psCoord{psSphereSetOffset} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psSphereSetOffset}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereSetOffset} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psSphereGetOffset}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testGetOffsetSphere
-    Following should generate an error message for null position
-<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
-    Unallowable operation: position1 is NULL.
-<DATE><TIME>|<HOST>|I|testGetOffsetSphere
-    Following should generate an error message for null position
-<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
-    Unallowable operation: position2 is NULL.
-<DATE><TIME>|<HOST>|I|testGetOffsetSphere
-    Following should generate an error message for invalid mode
-<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
-    Specified offset mode, 0x54321, is not supported.
-<DATE><TIME>|<HOST>|I|testGetOffsetSphere
-    Following should generate an error message for invalid unit type
-<DATE><TIME>|<HOST>|E|psSphereGetOffset (FILE:LINENO)
-    Specified units, 0x54321, is not supported.
-<DATE><TIME>|<HOST>|I|testGetOffsetSphere
-    Following should generate warning message
-<DATE><TIME>|<HOST>|W|psSphereGetOffset
-    WARNING: psDeproject(): position1->d is larger than 90 degrees.  Returning NULL.
-<DATE><TIME>|<HOST>|I|testGetOffsetSphere
-    Following should generate warning message
-<DATE><TIME>|<HOST>|W|psSphereGetOffset
-    WARNING: psDeproject(): position2->d is larger than 90 degrees.  Returning NULL.
-
----> TESTPOINT PASSED (psCoord{psSphereGetOffset} | tst_psCoord01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psCoord01.c                                            *
-*            TestPoint: psCoord{psSphereGetOffset}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psCoord{psSphereGetOffset} | tst_psCoord01.c)
-
Index: unk/psLib/test/astronomy/verified/tst_psTime_01.stderr
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psTime_01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,241 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeAlloc}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeAlloc
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psTimeAlloc (FILE:LINENO)
-    Specified type, -100, is not supported.
-
----> TESTPOINT PASSED (psTime{psTimeAlloc} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeGetNow}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeGetNow
-    Following should generate an error message for invalid time type
-<DATE><TIME>|<HOST>|E|psTimeAlloc (FILE:LINENO)
-    Specified type, -100, is not supported.
-
----> TESTPOINT PASSED (psTime{psTimeGetNow} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeGetUT1Delta}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeGetUT1Delta (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeGetUT1Delta (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate an error message for invalid bulletin
-<DATE><TIME>|<HOST>|E|psTimeGetUT1Delta (FILE:LINENO)
-    Invalid bulletin specified -100
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate a warning message predating table
-<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
-    Specified psTime predates (41683) all tables of UT1-UTC information.
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate a warning message predating table
-<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
-    Specified psTime predates (41683) all tables of UT1-UTC information.
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate a warning message postdating table
-<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
-    Specified psTime postdates (53999) all tables of UT1-UTC information.
-<DATE><TIME>|<HOST>|I|testTimeGetUT1Delta
-    Following should generate a warning message postdating table
-<DATE><TIME>|<HOST>|W|psTimeGetUT1Delta
-    Specified psTime postdates (53999) all tables of UT1-UTC information.
-
----> TESTPOINT PASSED (psTime{psTimeGetUT1Delta} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeToMJD}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeToMJD
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeToMJD (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeToMJD
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeToMJD (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-
----> TESTPOINT PASSED (psTime{psTimeToMJD} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeToJD}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeToJD
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeToJD (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeToJD
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeToJD (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-
----> TESTPOINT PASSED (psTime{psTimeToJD} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeToISO}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeToISO
-    Following should generate error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeToISO
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeToISO
-    Following should generate error message for time prior year 0000
-<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
-    Error: time->sec, -62125920001, is out of range.
-<DATE><TIME>|<HOST>|I|testTimeToISO
-    Following should generate error message for time after year 9999
-<DATE><TIME>|<HOST>|E|psTimeToISO (FILE:LINENO)
-    Error: time->sec, 253202544001, is out of range.
-
----> TESTPOINT PASSED (psTime{psTimeToISO} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeToTimeval}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeToTimeval
-    Following should generate error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeToTimeval (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeToTimeval
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeToTimeval (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeToTimeval
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeToTimeval (FILE:LINENO)
-    Error: time->sec, -1, is out of range.  Must be between 0 and 2147483647.
-
----> TESTPOINT PASSED (psTime{psTimeToTimeval} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeFromMJD}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTime{psTimeFromMJD} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeFromJD}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTime{psTimeFromJD} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeFromISO}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeFromISO
-    Following should generate error message for NULL ISO string
-<DATE><TIME>|<HOST>|E|psTimeFromISO (FILE:LINENO)
-    Unallowable operation: input is NULL.
-<DATE><TIME>|<HOST>|I|testTimeFromISO
-    Following should generate an error for invalid ISO string
-<DATE><TIME>|<HOST>|E|psTimeFromISO (FILE:LINENO)
-    Specified ISO Time string, 'Here I am', is malformed.  Must be in 'YYYY-MM-DDThh:mm:ss.sss' format.
-
----> TESTPOINT PASSED (psTime{psTimeFromISO} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeFromTimeval}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeFromTimeval
-    Following should generate error message for NULL timeval
-<DATE><TIME>|<HOST>|E|psTimeFromTimeval (FILE:LINENO)
-    Unallowable operation: input is NULL.
-
----> TESTPOINT PASSED (psTime{psTimeFromTimeval} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{p_psTimeFromTM}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeFromTM
-    Following should generate error message for NULL tm ptr
-<DATE><TIME>|<HOST>|E|p_psTimeFromTM (FILE:LINENO)
-    Unallowable operation: time is NULL.
-
----> TESTPOINT PASSED (psTime{p_psTimeFromTM} | tst_psTime_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_01.c                                            *
-*            TestPoint: psTime{psTimeConvert}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message for invalid type
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Specified type, -100, is not supported.
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message for invalid type
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Specified type, -100, is not supported.
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message for invalid type
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Specified type, -100, is not supported.
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message for invalid type
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Specified type, -100, is not supported.
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeConvert
-    Following should generate an error message converting from UT1
-<DATE><TIME>|<HOST>|E|psTimeConvert (FILE:LINENO)
-    Cannot convert from UT1 time type
-
----> TESTPOINT PASSED (psTime{psTimeConvert} | tst_psTime_01.c)
-
Index: unk/psLib/test/astronomy/verified/tst_psTime_02.stderr
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psTime_02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,85 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_02.c                                            *
-*            TestPoint: psTime{psTimeToLMST}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeLMST
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeToLMST (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeLMST
-    Following should generate error message for incorrect type
-<DATE><TIME>|<HOST>|E|psTimeToLMST (FILE:LINENO)
-    Specified type, 2, is incorrect.
-
----> TESTPOINT PASSED (psTime{psTimeToLMST} | tst_psTime_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_02.c                                            *
-*            TestPoint: psTime{psTimeLeapSecondDelta}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
-    Unallowable operation: time1 is NULL.
-<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
-    Unallowable operation: time2 is NULL.
-<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
-    Error: time2->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeLeapSecondDelta
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeLeapSecondDelta (FILE:LINENO)
-    Error: time1->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-
----> TESTPOINT PASSED (psTime{psTimeLeapSecondDelta} | tst_psTime_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_02.c                                            *
-*            TestPoint: psTime{psTimeIsLeapSecond}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeIsLeapSecond
-    Following should generate an error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeIsLeapSecond (FILE:LINENO)
-    Unallowable operation: utc is NULL.
-<DATE><TIME>|<HOST>|I|testTimeIsLeapSecond
-    Following should generate an error message for invalid type
-<DATE><TIME>|<HOST>|E|psTimeIsLeapSecond (FILE:LINENO)
-    Specified type, 0, is incorrect.
-
----> TESTPOINT PASSED (psTime{psTimeIsLeapSecond} | tst_psTime_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_02.c                                            *
-*            TestPoint: psTime{psTimeFromTT}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeFromTT
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeFromTT (FILE:LINENO)
-    Error: nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-
----> TESTPOINT PASSED (psTime{psTimeFromTT} | tst_psTime_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_02.c                                            *
-*            TestPoint: psTime{psTimeFromUTC}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeFromUTC
-    Following should generate an error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeFromUTC (FILE:LINENO)
-    Error: nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-
----> TESTPOINT PASSED (psTime{psTimeFromUTC} | tst_psTime_02.c)
-
Index: unk/psLib/test/astronomy/verified/tst_psTime_03.stderr
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psTime_03.stderr	(revision 4546)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_03.c                                            *
-*            TestPoint: psTime{psTimeMath}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeMath
-    Following should generate error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeMath (FILE:LINENO)
-    Unallowable operation: time is NULL.
-<DATE><TIME>|<HOST>|I|testTimeMath
-    Following should generate error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeMath (FILE:LINENO)
-    Error: time->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-
----> TESTPOINT PASSED (psTime{psTimeMath} | tst_psTime_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_03.c                                            *
-*            TestPoint: psTime{psTimeDelta}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testTimeDelta
-    Following should generate error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
-    Unallowable operation: time1 is NULL.
-<DATE><TIME>|<HOST>|I|testTimeDelta
-    Following should generate error message for NULL time
-<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
-    Unallowable operation: time2 is NULL.
-<DATE><TIME>|<HOST>|I|testTimeDelta
-    Following should generate error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
-    Error: time1->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeDelta
-    Following should generate error message for invalid time
-<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
-    Error: time2->nsec, 2000000000, is out of range.  Must be between 0 and 999999999.
-<DATE><TIME>|<HOST>|I|testTimeDelta
-    Following should generate error message for incorrect type
-<DATE><TIME>|<HOST>|E|psTimeDelta (FILE:LINENO)
-    Specified type, 1, is incorrect.
-
----> TESTPOINT PASSED (psTime{psTimeDelta} | tst_psTime_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_03.c                                            *
-*            TestPoint: psTime{psTimeConvert}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTime{psTimeConvert} | tst_psTime_03.c)
-
Index: unk/psLib/test/astronomy/verified/tst_psTime_04.stderr
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psTime_04.stderr	(revision 4546)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_04.c                                            *
-*            TestPoint: psTime{p_psTimeInit}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_04.c                                            *
-*            TestPoint: psTime{p_psTimeInit}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
-    Failed to open file 'zzz'. Check if it exists and it has the proper permissions.
-<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
-    Failed to initialize psTime.
-
----> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_04.c                                            *
-*            TestPoint: psTime{p_psTimeInit}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
-    Failed find 'psLib.time.tables.index' in time metadata.
-<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
-    Failed to initialize psTime.
-
----> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_04.c                                            *
-*            TestPoint: psTime{p_psTimeInit}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
-    Failed find 'psLib.time.tables.index' in time metadata.
-<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
-    Failed to initialize psTime.
-
----> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_04.c                                            *
-*            TestPoint: psTime{p_psTimeInit}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
-    Incorrect vector size. Size: 3, Expected 4.
-<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
-    Failed to initialize psTime.
-
----> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTime_04.c                                            *
-*            TestPoint: psTime{p_psTimeInit}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|p_psTimeInit (FILE:LINENO)
-    Failed find 'psLib.time.tables.index' in time metadata.
-<DATE><TIME>|<HOST>|E|psLibInit (FILE:LINENO)
-    Failed to initialize psTime.
-
----> TESTPOINT PASSED (psTime{p_psTimeInit} | tst_psTime_04.c)
-
Index: unk/psLib/test/collections/data/header_1.fits
===================================================================
--- /trunk/psLib/test/collections/data/header_1.fits	(revision 4546)
+++ 	(revision )
@@ -1,1 +1,0 @@
-SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                    8 / number of bits per data pixel                  NAXIS   =                    0 / number of data axes                            HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18          END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
Index: unk/psLib/test/collections/data/header_2.fits
===================================================================
--- /trunk/psLib/test/collections/data/header_2.fits	(revision 4546)
+++ 	(revision )
@@ -1,1 +1,0 @@
-SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                  -64 / number of bits per data pixel                  NAXIS   =                    1 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -64 / number of bits per data pixel                  NAXIS   =                    1 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BITPIX  =                  -64 / number of bits per data pixel                  EXTNAME = 'MY_DATA_1'                                                           HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46          END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -64 / number of bits per data pixel                  NAXIS   =                    1 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     EXTNAME = 'MY_DATA_2'                                                           HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52          END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
Index: unk/psLib/test/collections/data/test.config
===================================================================
--- /trunk/psLib/test/collections/data/test.config	(revision 4546)
+++ 	(revision )
@@ -1,128 +1,0 @@
-##########################################################################################################
-#  test.config
-#
-#  This is a sample metadata configuration file used to test the metadata configuration file parser. 
-#  It tests both positive and negative cases as described in the comments below.
-#
-#  author  Ross Harman, MHPCC
-#
-#  version $Revision: 1.1 $  $Name: not supported by cvs2svn $
-#  date  $Date: 2005-04-09 00:04:58 $
-#
-#  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
-##########################################################################################################
-#
-#
-#
-########## Test 1 ##########
-# Lines beginning with # are comments. The line below, as well as those above are comments. They should be ignored by the parser.
-# I am a comment.
-#
-#
-#
-########## Test 2 ##########
-# The line below is a comment that begins with some whitespace. It should be ignored by the parser.
-      #        		Another comment
-#
-#
-#
-########## Test 3 ##########
-# The line below is completely blank except for a carriage return. It should be ignored by the parser.
-
-#
-#
-#
-########## Test 4 ##########
-# The line below consists of spaces and tabs (whitespace). It should be ignored by the parser.
-     	   			                    
-#
-#
-#
-########## Test 5 ##########
-# The line below consists of a variable name, type, value, and trailing comment. It should be read by the parser
-pi          F64         3.1415926535897932384626433832795029        # Definition of pi
-#
-#
-#
-########## Test 6 ##########
-# The line below consists of a variable name, type, and value, but without a trailing comment. It should be read by the parser.
-altitude          S32         10000   
-#
-#
-#
-########## Test 7 ##########
-# The lines below contain variations in name, type, value, trailing comment, and whitespace. They should all be read by the parser.
-   time F32 1234.5678 
- myBool     BOOL            F           # F, f, 0, T, t, 1 are also acceptable
-title1  STR   Hello world #This is a comment for the string value
-    title2  STRING   Good bye world   #    STRING or STR may be used as the string type 
-#
-#
-#
-########## Test 8 ##########
-# The line below creates a vector. It should be read by the parser.
-@primes     S32     2, 3, 5, 7, 11, 13, 17   # These are prime numbers
-#
-#
-#
-########## Test 9 ##########
-# The line below creates a vector with commas mixed with spaces in the values. It should be read by the parser.
-@negatives  S32     -1,  -2 -3    -4, -5, -6,      -7
-#
-#
-#
-########## Test 10  ##########
-# The lines below should create a folder node with children that are strings. They should be read by the parser.
-comment *STR This
-comment *STR     is
-comment *STR         an
-comment *STR             ugly
-comment *STR                 comment
-comment *STR                         but
-comment *STR                             still
-comment *STR                                 valid
-#
-#
-#
-########## Test 11  ##########
-# The line below contains an incorrect value. It should produce an error.
-xPosition    F64          9876.54qqq32
-#
-#
-#
-########## Test 12  ##########
-# The line below contains no value. It should produce an error.
-yPosition    F64          
-#
-#
-#
-########## Test 13  ##########
-# The line below contains no type. It should produce an error.
-zPosition       99.999          
-#
-#
-#
-########## Test 14  ##########
-# The line below contains two * characters. It should produce an error.
-aPosition   **          
-#
-#
-#
-########## Test 15 ##########
-# The line below contains two @ characters. It should produce an error.
-@@bPosition     F64     22.33             
-#
-#
-#
-########## Test 16 ##########
-# The line below contains a ~ character used for special processing. It should produce an error.
-range     F64     140.0 ~             
-#
-#
-#
-########## Test 17 ##########
-# The variable name below is repeated. It should produce an error if the overwrite function argument is set to false.
-# If overwrite is true, then the last name and value will be stored and there will be no error.
-speed     F32     55.55
-speed     F32     66.66
-             
Index: unk/psLib/test/collections/data/test1.config
===================================================================
--- /trunk/psLib/test/collections/data/test1.config	(revision 4546)
+++ 	(revision )
@@ -1,57 +1,0 @@
-Double	F64     1.23456789      # This is a comment
-Float     F32 0.98765#This is a comment too
-String   STR This is the string that forms the value #comment
-
- # This is a comment line and is to be ignored
-boolean     BOOL    T # The value of 'boolean' is 'true'
-
-@primes U8  2,3 5 7,11,13 17 #   These are prime numbers
-
-comment MULTI # The rest of this line is ignored, but 'comment' is set to be non-unique
-comment STR This
-comment STR     is
-comment STR       a
-comment STR        non-unique
-comment STR                  key
-Float F64 1.23456 # This generates a warning, and, if 'overwrite' is 'false', is ignored
-
-boolean1  BOOL   F # The value of 'boolean' is 'false'
-
-@negprimes S8 -2, -3, -5, -7,-11,-13,-17,-19
-
-@vector1 U16  0, 1, 2, 4, 8
-@vector2 U32  0, 8, 16, 32, 64, 128
-@vector3 U64  0, 64, 256,
-
-@vector4 S16  -2 -1 0 1 2
-@vector5 S32  -4, -2, 0, 2, 4, 6
-@vector6 S64  -16, -4, 0, 4 16 36 64
-
-@vector7 F32  -1.03, 1.04, -1.05, 1.06
-@vector8 F64  -2.22, 2.21 -2.20, 2.19, -2.18
-
-TYPE	CELL	EXTNAME		BIASSEC		CHIP       #
-CELL.00	CELL	CCD00		BSEC-00		CHIP.00
-CELL.01	CELL	CCD01		BSEC-01		CHIP.00
-
-MYCELL  MULTI
-MYCELL    METADATA
-  EXTNAME   STR   CCD00
-  BIASSEC   STR   BSEC-00
-  CHIP      STR   CHIP.00
-  NCELL     S32   24
-END
-MYCELL S32 123 # A number
-
-cell  METADATA
-   foo   METADATA
-       bar     STR   BAZ
-       ping    STR   PONG
-   END
-
-   EXTNAME   STR CCD00
-   BIASSEC   STR BSEC-00
-   CHIP      STR CHIP.00
-   NCELL     S32 12
-END
-
Index: unk/psLib/test/collections/data/test2.config
===================================================================
--- /trunk/psLib/test/collections/data/test2.config	(revision 4546)
+++ 	(revision )
@@ -1,44 +1,0 @@
- # This should generate error message
-boolean     BOOL    X # The value of 'boolean' is 'true'
-
-value1    S32  # No value
-
-# Invalid vector entries
-@vector  U8
-@vector1 U8  x,y,z
-@vector2
-@vector3 F8 ,,,
-
-# Multiple MULTI definitions
-comment MULTI
-comment MULTI
-
-# Type CELL not defined
-MYCELL CELL CCD00 BSEC-00 CHIP.00
-
-# Invalid value entries
-value1   F64   aabb
-value2   S32   ccdd
-
-# Repeated vector character
-@@vector4 U8 1 2 3 4 #
-
-# Invalid TYPE line
-TYPE
-
-# Duplicate TYPE
-TYPE CELL EXTNAME BIASSEC CHIP
-TYPE CELL EXTNAME BIASSEC CHIP
-
-# END with no matching METADATA
-END
-
-# Duplicate item names within metadata type specifier
-TYPE NEWCELL VALUE1 VALUE1 #
-
-# Not enough values in specified type
-OURCELL  CELL CCD00
-
-# Type with no item
-TYPE NEWCELL1
-
Index: unk/psLib/test/collections/data/test3.config
===================================================================
--- /trunk/psLib/test/collections/data/test3.config	(revision 4546)
+++ 	(revision )
@@ -1,16 +1,0 @@
-Double	F64     1.23456789      # This is a comment
-Float     F32 0.98765#This is a comment too
-String   STR This is the string that forms the value #comment
-
- # This is a comment line and is to be ignored
-boolean     BOOL    T # The value of 'boolean' is 'true'
-
-@primes U8  2,3 5 7,11,13 17 #   These are prime numbers
-
-comment MULTI # The rest of this line is ignored, but 'comment' is set to be non-unique
-comment STR This
-comment STR     is
-comment STR       a
-comment STR        non-unique
-comment STR                  key
-Float F64 1.23456 # This generates a warning, and, if 'overwrite' is 'false', is ignored
Index: unk/psLib/test/collections/data/test4.config
===================================================================
--- /trunk/psLib/test/collections/data/test4.config	(revision 4546)
+++ 	(revision )
@@ -1,161 +1,0 @@
-#
-# This file contains examples from SDR-14 appendix A
-#
-CELL1 METADATA
-  EXTNAME  STR  CCD00
-  BIASSEC  STR  BSEC-00
-  CHIP     STR  CHIP.00
-  NCELL    S32  24
-END
-
-CELL2 METADATA
-   FOO METADATA
-       BAR   STR  BAZ
-       PING  STR  PONG
-   END
-
-   EXTNAME   STR  CCD00
-   BIASSEC   STR  BSEC-00
-   CHIP      STR  CHIP.00
-   NCELL     S32  24
-END
-
-FOO1 METADATA
-    FOO2 METADATA
-        FOO3 METADATA
-            FOO4 METADATA
-                FOO5 METADATA
-                    FOO6 METADATA
-                        BAR    STR   BAZ
-                        PING   STR   PONG
-                    END
-                    BAR   STR  BAZ
-                    PING  STR  PONG
-                END
-                BAR   STR  BAZ
-                PING  STR  PONG
-            END
-            BAR   STR   BAZ
-            PING  STR   PONG
-        END
-        BAR   STR  BAZ
-        PING  STR  PONG
-    END
-    BAR   STR  BAZ
-    PING  STR  PONG
-END
-
-FOO2 METADATA
-    BAR   STR  BAZ
-    PING  STR  PONG
-    FOO3 METADATA
-        BAR  STR  BAZ
-        PING STR  PONG
-        FOO4 METADATA
-            BAR  STR  BAZ
-            PING STR  PONG
-            FOO5 METADATA
-                BAR  STR BAZ
-                PING STR PONG
-                FOO6 METADATA
-                    BAR  STR  BAZ
-                    PING STR  PONG
-                    FOO7  METADATA
-                        BAR  STR BAZ
-                        PING STR PONG
-                    END
-                END
-            END
-        END
-    END
-END
-
-FOO3 METADATA
-    BAR  STR  BAZ
-    FOO4 METADATA
-        BAR  STR  BAZ
-        FOO5 METADATA
-            BAR  STR  BAZ
-            FOO6 METADATA
-                BAR   STR  BAZ
-                FOO7 METADATA
-                    BAR   STR   BAZ
-                    FOO8 METADATA
-                        BAR   STR  BAZ
-                        PING  STR  PONG
-                    END
-                    PING  STR  PONG
-                END
-                PING STR  PONG
-            END
-            PING STR  PONG
-        END
-        PING STR PONG
-    END
-    PING STR PONG
-END
-
-FOO4 METADATA
-    FOO5 METADATA
-        BAR  STR  BAZ
-        PING STR  PONG
-    END
-    FOO6 METADATA
-        BAR  STR  BAZ
-        PING STR  PONG
-    END
-END
-
-TYPE    CELL    EXTNAME   BIASSEC   CHIP
-CELL.00  CELL  CCD00  BSEC-00 CHIP.00
-CELL.01  CELL  CCD01  BSEC-01 CHIP.00
-FOO5 METADATA
-    TYPE CELL EXTNAME BIASSEC
-    CELL.00 CELL CCD00 BSEC-00
-    CELL.01 CELL CCD01 BSEC-01
-    FOO6 METADATA
-        TYPE CELL EXTNAME
-        CELL.00  CELL  CCD00
-        CELL.01  CELL  CCD01
-    END
-END
-
-foo MULTI
-foo S32   -1
-foo STR   bar baz
-foo BOOL  T
-
-foo1 MULTI        # foo
-foo1 S32  -1      # bar
-foo1 STR  bar baz # baz
-foo1 BOOL T       #
-
-foo2 MULTI
-foo2 S32 -1
-foo2 STR  bar baz
-foo2 BOOL  T
-bar1 METADATA
-    foo MULTI
-    foo S32  -1
-    foo STR  bar baz
-    foo BOOL T
-END
-
-foo3 MULTI
-foo3 METADATA
-    bar   BOOL T
-END
-foo3 METADATA
-    bar  BOOL T
-END
-
-foo4 MULTI
-TYPE bar a b c
-foo4 bar x y z
-foo4 bar x y z
-
-TYPE bar1 a b c
-foo5 MULTI
-foo5 bar1 x y z
-foo5 bar1 x y z
-
Index: unk/psLib/test/collections/data/test5.config
===================================================================
--- /trunk/psLib/test/collections/data/test5.config	(revision 4546)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#
-# Examples from SDR-14 Appendix A which cause failures
-#
-TYPE  CELL1  EXTNAME  BIASSEC  CHIP
-FOO1 METADATA
-    CELL.00 CELL  CCD00  BSEC-00  CHIP.00
-END
-
-FOO2  METADATA
-    TYPE CELL2 EXTNAME BIASSEC CHIP
-END
-CELL.00 CELL2 CCD00 BSEC-00 CHIP.00
-
-FOO3 METADATA
-    TYPE CELL3 EXTNAME BIASSEC CHIP
-END
-BAR METADATA
-    CELL.00 CELL3 CCD00 BSEC-00 CHIP.00
-END
-
-TYPE CELL4 EXTNAME BIASSEC CHIP
-CELL.00 CELL4 CCD00 BSEC-00
-CELL.01 CELL4 CCD01 BSEC-01 CHIP.00
-
-TYPE CELL5 EXTNAME BIASSEC CHIP
-TYPE CELL5 EXTNAME BIASSEC CHIP
-CELL.02 CELL5 CCD00 BSEC-00 CHIP.00
-CELL.03 CELL5 CCD01 BSEC-01 CHIP.00
-
-CELL.04 CELL6 CCD00 BSEC-00 CHIP.00
-CELL.05 CELL6 CCD01 BSEC-01 CHIP.00
-
Index: unk/psLib/test/collections/tst_psArray.c
===================================================================
--- /trunk/psLib/test/collections/tst_psArray.c	(revision 4546)
+++ 	(revision )
@@ -1,441 +1,0 @@
-/** @file  tst_psArray.c
- *
- *  @brief Test driver for psArray integer functions
- *
- *  This test driver contains the following tests for psArray test point 1:
- *     A)  Create void pointer array
- *     B)  Add data to void pointer array
- *     C)  Reallocate void pointer array bigger
- *     D)  Reallocate void pointer array smaller
- *     E)  Reallocate with null pointer
- *     F)  Remove item from array
- *     G)  Remove invalid item from array
- *     H)  Remove item from null array
- *     I)  Remove null item from array
- *     J)  Free void pointer array
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.15 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-07-06 03:04:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include <math.h>
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-typedef struct
-{
-    psS32 x;
-    float y;
-}
-testStruct;
-
-static int testStructCompare(const void **a, const void **b)
-{
-    testStruct* first = (testStruct*)*a;
-    testStruct* second = (testStruct*)*b;
-
-    if(first->x < second->x)
-        return -1;
-    else if (first->x > second->x)
-        return 1;
-    else
-        return 0;
-}
-
-static psS32 testArray( void );
-static psS32 testArray01( void );
-static psS32 testArrayAdd( void );
-
-testDescription tests[] = {
-                              {testArray, -1, "psArray", 0, false},
-                              {testArray01, -2, "psArray", 0, false},
-                              {testArrayAdd, 788, "psArrayAdd", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psArray", tests, argc, argv ) );
-}
-
-
-psS32 testArray(void)
-{
-    // Create array of pointers
-    testStruct *mySt[10];
-    psArray *psArr1 = NULL;
-
-    // Test A - Create void pointer array
-    printPositiveTestHeader(stderr,"psArray", "Create void pointer array");
-    psArray *psArr = psArrayAlloc(5);
-    if (psArr->nalloc != 5) {
-        psError(PS_ERR_UNKNOWN, true,"psArray didn't have proper number of elements.");
-        return 1;
-    }
-    printFooter(stderr, "psArray", "Create void pointer array", true);
-
-
-    // Test B - Add data to void pointer array
-    printPositiveTestHeader(stderr, "psArray", "Add data to void pointer array");
-    for(psS32 i = 0; i < 5; i++) {
-        testStruct *ts = psAlloc(sizeof(testStruct));
-        ts->x = 10*i;
-        ts->y = 10.1*i;
-        mySt[i] = ts;
-        psArr->data[i] = ts;
-        psMemIncrRefCounter(ts);
-    }
-
-    for(psS32 i = 0; i < 5; i++) {
-        testStruct *ts = (testStruct*)psArr->data[i];
-        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
-        if (fabsf(ts->x - 10*i) > 0.01f || fabsf(ts->y - 10.1*i) > 0.01f) {
-            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
-            return 2;
-        }
-    }
-    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
-    if (psArr->nalloc != 5) {
-        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
-        return 3;
-    }
-    fprintf(stderr,"array population = %ld\n", psArr->n);
-    if (psArr->n != 5) {
-        psError(PS_ERR_UNKNOWN, true,"Array population wrong");
-        return 4;
-    }
-    printFooter(stderr, "psArray", "Add data to void pointer array", true);
-
-
-    // Test C - Reallocate void pointer array bigger
-    printPositiveTestHeader(stderr,"psArray", "Reallocate void pointer array bigger");
-    psArr = psArrayRealloc(psArr,10);
-    fprintf(stderr,"Adding more elements to void pointer array...\n");
-    for(psS32 i = 5; i < 10; i++) {
-        testStruct *ts = psAlloc(sizeof(testStruct));
-        ts->x = 10*i;
-        ts->y = 10.1*i;
-        mySt[i] = ts;
-        psArr->data[i] = ts;
-        psArr->n++;
-        psMemIncrRefCounter(ts);
-    }
-    for(psS32 i = 0; i < 10; i++) {
-        testStruct *ts = (testStruct*)psArr->data[i];
-        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
-        if (fabsf(ts->x - 10*i) > 0.01f || fabsf(ts->y - 10.1*i) > 0.01f) {
-            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
-            return 5;
-        }
-    }
-    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
-    if (psArr->nalloc != 10) {
-        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
-        return 6;
-    }
-    fprintf(stderr,"array population = %ld\n", psArr->n);
-    if (psArr->n != 10) {
-        psError(PS_ERR_UNKNOWN, true,"Array Population wrong");
-        return 7;
-    }
-    printFooter(stderr, "psArray", "Reallocate void pointer array bigger", true);
-
-    // Test D - Reallocate void pointer array smaller
-    printPositiveTestHeader(stderr,"psArray","Reallocate void pointer array smaller");
-    psArr = psArrayRealloc(psArr,3);
-    for(psS32 i = 0; i < 3; i++) {
-        testStruct *ts = (testStruct*)psArr->data[i];
-        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
-        if (fabsf(ts->x - 10*i) > 0.01f || fabsf(ts->y - 10.1*i) > 0.01f) {
-            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
-            return 8;
-        }
-    }
-    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
-    if (psArr->nalloc != 3) {
-        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
-        return 9;
-    }
-    fprintf(stderr,"array population = %ld\n", psArr->n);
-    if (psArr->n != 3) {
-        psError(PS_ERR_UNKNOWN, true,"Array Population wrong");
-        return 10;
-    }
-    printFooter(stderr, "psArray", "Reallocate integer void pointer smaller", true);
-
-    // Test E - Reallocate with a null
-    printNegativeTestHeader(stderr,"psArray","Reallocate with a null array",
-                            "Error message generator", 0 );
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    psArr1 = psArrayRealloc(NULL,5);
-    if ( psArr1 != NULL ) {
-        fprintf(stderr,"ERROR: Return is not NULL\n");
-    }
-    printFooter(stderr,"psArray","Reallocate with a null array",true);
-
-
-    // Test F - Remove item from array
-    printPositiveTestHeader(stderr, "psArray", "Remove valid item");
-    if( !psArrayRemove(psArr,mySt[0]) ) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to remove valid item");
-        return 100;
-    }
-    fprintf(stderr,"Array size after removal = %ld\n",psArr->n);
-    if ( psArr->n != 2 ) {
-        psError(PS_ERR_UNKNOWN, true, "Items in array not decremented after removal");
-        return 101;
-    }
-    for(psS32 i = 0; i < psArr->n; i++) {
-        testStruct *ts = (testStruct*)psArr->data[i];
-        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
-        if(fabsf(ts->x - 10*(i+1)) > 0.01f || fabsf(ts->y - 10.1*(i+1)) > 0.01f) {
-            psError(PS_ERR_UNKNOWN, true, "Elements not as expected after remove.");
-            return 102;
-        }
-    }
-    psMemDecrRefCounter(mySt[0]);
-    printFooter(stderr,"psArray","Remove valid item", true);
-
-    // Test G - Remove invalid item from array
-    printPositiveTestHeader(stderr, "psArray", "Remove invalid item from array");
-    if( psArrayRemove(psArr,mySt[9]) ) {
-        psError(PS_ERR_UNKNOWN,true,"Removed invalid item from array");
-        return 103;
-    }
-    printFooter(stderr,"psArray","Remove invalid item from array",true);
-
-    // Test H - Remove item from null array
-    printPositiveTestHeader(stderr, "psArray", "Remove item from null array");
-    if ( psArrayRemove(NULL,mySt[1]) ) {
-        psError(PS_ERR_UNKNOWN,true,"Removed valid item from null array");
-        return 104;
-    }
-    printFooter(stderr,"psArray","Remove item from null array",true);
-
-    // Test I - Remove null item from array
-    printPositiveTestHeader(stderr, "psArray", "Remove null item from array");
-    if( psArrayRemove(psArr,NULL) ) {
-        psError(PS_ERR_UNKNOWN,true,"Remove null item from array",true);
-        return 105;
-    }
-    printFooter(stderr,"psArray","Remove null item from array",true);
-
-    // Test J - Free void pointer array
-    printPositiveTestHeader(stderr, "psArray", "Free void pointer array");
-    psFree(psArr);
-    for(psS32 i = 0; i < 10; i++) {
-        psFree(mySt[i]);
-    }
-
-    printFooter(stderr, "psArray" ,"Free void pointer array", true);
-
-    return 0;
-}
-
-psS32 testArray01(void)
-{
-    // Create array of pointers
-    testStruct *mySt[10];
-
-    // Test A - Create void pointer array
-    printPositiveTestHeader(stderr,"psArray", "Create void pointer array");
-    psArray *psArr = psArrayAlloc(10);
-    if (psArr->nalloc != 10) {
-        psError(PS_ERR_UNKNOWN, true,"psArray didn't have proper number of elements.");
-        return 1;
-    }
-    printFooter(stderr, "psArray", "Create void pointer array", true);
-
-    // Test B - Add data to void pointer array
-    printPositiveTestHeader(stderr, "psArray", "Add data to void pointer array");
-    for(psS32 i = 0; i < 10; i++) {
-        testStruct *ts = psAlloc(sizeof(testStruct));
-        ts->x = 10*(10-i);
-        ts->y = 10.1*(10-i);
-        mySt[i] = ts;
-        psArr->data[i] = ts;
-        psMemIncrRefCounter(ts);
-    }
-
-    for(psS32 i = 0; i < 10; i++) {
-        testStruct *ts = (testStruct*)psArr->data[i];
-        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
-        if (fabsf(ts->x - 10*(10-i)) > 0.01f || fabsf(ts->y - 10.1*(10-i)) > 0.01f) {
-            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
-            return 2;
-        }
-    }
-    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
-    if (psArr->nalloc != 10) {
-        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
-        return 3;
-    }
-    fprintf(stderr,"array population = %ld\n", psArr->n);
-    if (psArr->n != 10) {
-        psError(PS_ERR_UNKNOWN, true,"Array population wrong");
-        return 4;
-    }
-    printFooter(stderr, "psArray", "Add data to void pointer array", true);
-
-    // Test C - Sort data in array
-    printPositiveTestHeader(stderr,"psArray","Sort data in array");
-    psArr = psArraySort(psArr,testStructCompare);
-    for(psS32 i = 0; i < 10; i++) {
-        testStruct *ts = (testStruct*)psArr->data[i];
-        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
-        if (fabsf(ts->x - 10*(i+1)) > 0.01f || fabsf(ts->y - 10.1*(i+1)) > 0.01f) {
-            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
-            return 5;
-        }
-    }
-    printFooter(stderr,"psArray","Sort data in array",true);
-
-    // Test D - Attempt to sort null array
-    printPositiveTestHeader(stderr,"psArray","Attempt to sort array");
-    psArray* tempArr = psArraySort(NULL,testStructCompare);
-    if(tempArr != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Array sort did not return null when sorting null array");
-        return 6;
-    }
-    printFooter(stderr,"psArray","Attempt to sort array",true);
-
-    // Test E - Free void pointer array
-    printPositiveTestHeader(stderr, "psArray", "Free void pointer array");
-    psFree(psArr);
-    for(psS32 i = 0; i < 10; i++) {
-        psFree(mySt[i]);
-    }
-    if( psMemCheckLeaks(0, NULL, stderr, false) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-        return 110;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        fprintf(stderr,"ERROR: Found %d bad memory blocks\n", nBad);
-        return 111;
-    }
-    printFooter(stderr, "psArray" ,"Free void pointer array", true);
-
-    return 0;
-}
-
-psS32 testArrayAdd( void )
-{
-    int subtest = 0;
-    float* data;
-    int nalloc = 5;
-    int n = 0;
-    int delta = 5;
-
-    // allocate the array.
-    psArray* arr = psArrayAlloc(nalloc);
-    arr->n = n;
-
-    // test arrayAdd until n == nalloc
-    while (n < nalloc) {
-        data = psAlloc(sizeof(float));
-        arr = psArrayAdd(arr, delta*2, data); // make delta unique versus next delta used.
-
-        subtest++;
-        if (psMemGetRefCounter(data) != 2) {
-            // in response of Bug #302
-            psError(PS_ERR_UNKNOWN, true,
-                    "psArrayAdd did not increment the data reference count.");
-            return subtest;
-        }
-
-        subtest++;
-        if (arr->nalloc != nalloc) {
-            psError(PS_ERR_UNKNOWN,true,
-                    "psArrayAdd expanded the psArray unnecessarily.  n=%d",
-                    n);
-            return subtest;
-        }
-
-        subtest++;
-        if (arr->n != ++n) {
-            psError(PS_ERR_UNKNOWN,true,
-                    "psArrayAdd did not increment the size of the psArray. n=%d",
-                    n);
-            return subtest;
-        }
-
-        subtest++;
-        if (arr->data[n-1] != data) {
-            psError(PS_ERR_UNKNOWN,true,
-                    "psArrayAdd didn't set the element to data. n=%d",
-                    n);
-            return subtest;
-        }
-
-        psFree(data);
-    }
-
-    // now try to add an element when the array is full.
-    data = psAlloc(sizeof(float));
-    arr = psArrayAdd(arr, delta, data);
-
-    // make sure the array was expanded
-    subtest++;
-    if (arr->nalloc != nalloc+delta) {
-        psError(PS_ERR_UNKNOWN,true,
-                "psArrayAdd did not expand the psArray when it was already full."
-                " old nalloc=%d, nalloc=%d, delta=%d",
-                nalloc, arr->nalloc, delta);
-        return subtest;
-    }
-    nalloc = arr->nalloc;
-
-    subtest++;
-    if (arr->n != ++n) {
-        psError(PS_ERR_UNKNOWN,true,
-                "psArrayAdd did not increment psArray.n by 1 after expanding it.");
-        return subtest;
-    }
-
-    subtest++;
-    if (arr->data[n-1] != data) {
-        psError(PS_ERR_UNKNOWN,true,
-                "psArrayAdd didn't set the second element to data.");
-        return subtest;
-    }
-
-    psFree(data);
-
-    // make the array full again (operation tested already)
-    while (arr->n < arr->nalloc) {
-        data = psAlloc(sizeof(float));
-        arr = psArrayAdd(arr, 0, data);
-        psFree(data);
-    }
-    nalloc = arr->nalloc;
-    n = arr->n;
-
-    // now add to full array with delta = 0; verify that the array is
-    // expanded by 10
-    data = psAlloc(sizeof(float));
-    arr = psArrayAdd(arr, 0, data);
-    psFree(data);
-
-    subtest++;
-    if (arr->nalloc != nalloc+10) {
-        psError(PS_ERR_UNKNOWN,true,
-                "psArrayAdd did not expand the psArray by 10 when delta < 1."
-                " old nalloc=%d, nalloc=%d",
-                nalloc, arr->nalloc);
-        return subtest;
-    }
-
-    psFree(arr);
-
-    return 0;  // the value that indicates success is part of the testDescription
-}
-
Index: unk/psLib/test/collections/tst_psBitSet.c
===================================================================
--- /trunk/psLib/test/collections/tst_psBitSet.c	(revision 4546)
+++ 	(revision )
@@ -1,683 +1,0 @@
-/** @file  tst_psBitSet_01.c
- *
- *  @brief Test driver for psBitSet functions
- *
- *  This test driver contains the following tests for psBitSet test point 1:
- *     A)  Create psBitSet
- *     B)  Set bits
- *     C)  Test bits
- *     D)  Attempt to test negative bit
- *     E)  Attempt to test bit to large
- *     F)  Attempt to test bit in null BitSet
- *     G)  Attempt to set negative bit
- *     H)  Attempt to set bit to large
- *     I)  Attempt to set bit in null BitSet
- *     J)  Free psBitSet
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:41 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testBitSet01a(void);
-static psS32 testBitSet01b(void);
-static psS32 testBitSet01c(void);
-static psS32 testBitSet02(void);
-static psS32 testBitSet03(void);
-static psS32 testBitSet04(void);
-static psS32 testBitSet05(void);
-static psS32 testBitSet06(void);
-
-testDescription tests[] = {
-                              {testBitSet01a, 1, "psBitSetAlloc", 0, false},
-                              {testBitSet01b, 2, "psBitSetSet/psBitSetClear", 0, false},
-                              {testBitSet01c, 3, "psBitSetTest", 0, false},
-                              {testBitSet06, 4, "psBitSetOp", 0, false},
-                              {testBitSet02, 5, "psBitSetOp AND Operator", 0, false},
-                              {testBitSet03, 6, "psBitSetOp OR Operator", 0, false},
-                              {testBitSet04, 7, "psBitSetOp XOR Operator", 0, false},
-                              {testBitSet05, 8, "psBitSetNot", 0, false},
-
-                              {NULL}
-                          };
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psBitSet", tests, argc, argv ) );
-}
-
-psS32 testBitSet01a(void)
-{
-    psErr* err;
-
-    // Test A - Create psBitSet
-    fprintf(stderr,"Creating psBitSet with 24 bits...\n");
-    psBitSet* bs = psBitSetAlloc(24);
-    if (bs == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Failed to create a psBitSet");
-        return 1;
-    }
-    if (bs->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Number of bytes for psBitSet incorrect (%d vs 3)",
-                bs->n);
-        return 2;
-    }
-    if (bs->bits[0] != 0 || bs->bits[1] != 0 || bs->bits[2] != 0) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetAlloc didn't clean ou the bits by default (%x%x%x).",
-                bs->bits[2],bs->bits[1],bs->bits[0]);
-        return 3;
-    }
-    psFree(bs);
-
-    // Test A - Create psBitSet
-    fprintf(stderr,"Creating psBitSet with 25 bits...\n");
-    bs = psBitSetAlloc(25);
-    if (bs == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Failed to create a psBitSet with 25 bits");
-        return 4;
-    }
-    if (bs->n != 4) {
-        psError(PS_ERR_UNKNOWN,true,"Number of bytes for psBitSet incorrect (%d vs 4)",bs->n);
-        return 5;
-    }
-    psFree(bs);
-
-    psErrorClear();
-    psLogMsg(__func__,PS_LOG_INFO,"Following is an error.");
-    bs = psBitSetAlloc(-4);
-    if (bs != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetAlloc returned something in case of a negative size");
-        return 6;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psError(PS_ERR_UNKNOWN,true,"psBitSetAlloc didn't generate expected error with size = -4");
-        return 7;
-    }
-    psFree(err);
-
-    return 0;
-}
-
-psS32 testBitSet01b(void)
-{
-    char *binOut = NULL;
-    psBitSet *tempBs = NULL;
-    psErr* err = NULL;
-
-    psBitSet* bs = psBitSetAlloc(24);
-
-    if (psBitSetTest(bs,0) ||
-            psBitSetTest(bs,2) ||
-            psBitSetTest(bs,23) ) {
-
-        psAbort("testBitSet01b","psBitSetAlloc failed to clear all bits at allocation.");
-    }
-
-    // Test B - Set bits
-    tempBs = bs;
-    fprintf(stderr,"Setting first bit...\n");
-    bs = psBitSetSet(bs, 0);
-    fprintf(stderr,"Setting third bit...\n");
-    bs = psBitSetSet(bs, 2);
-    fprintf(stderr,"Setting last bit...\n");
-    bs = psBitSetSet(bs, 23);
-    if(bs != tempBs) {
-        psAbort("testBitSet01b",
-                "Return pointer not equal to output argument pointer.");
-    }
-    if(bs->bits[0] != 0x05) {
-        psAbort(__func__,
-                "Unexpected value for first byte (%d vs 5).",
-                bs->bits[0]);
-    }
-
-
-    binOut = psBitSetToString(bs);
-    fprintf(stderr,"%s\n\n", binOut);
-    psFree(binOut);
-
-    // Test C - Test bits
-    if (! psBitSetTest(bs,0) ||
-            ! psBitSetTest(bs,2) ||
-            ! psBitSetTest(bs,23) ) {
-
-        psAbort("testBitSet01b","Failed to set a bit.");
-    }
-
-    fprintf(stderr,"Clearing first bit...\n");
-    bs = psBitSetClear(bs, 0);
-    fprintf(stderr,"Clearing third bit...\n");
-    bs = psBitSetClear(bs, 2);
-    fprintf(stderr,"Clearing last bit...\n");
-    bs = psBitSetClear(bs, 23);
-
-    binOut = psBitSetToString(bs);
-    fprintf(stderr,"%s\n\n", binOut);
-    psFree(binOut);
-
-
-    if (psBitSetTest(bs,0) ||
-            psBitSetTest(bs,2) ||
-            psBitSetTest(bs,23) ) {
-
-        psAbort("testBitSet01b","Failed to clear a bit.");
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
-    if(psBitSetClear(NULL,2) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetClear did not return NULL with NULL bitset");
-        return 20;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
-    if(psBitSetClear(bs,-3) != bs) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetClear did not return original bitset");
-        return 21;
-    }
-
-    psLogMsg("testBitSet01b",PS_LOG_INFO,"Following should be an error");
-    psErrorClear();
-    psBitSetSet(bs, -4);
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort("testBitSet01c","psBitSetSet(bs, -4) didn't generate expected error.\n");
-    }
-    psFree(err);
-
-    psLogMsg("testBitSet01b",PS_LOG_INFO,"Following should be an error");
-    psErrorClear();
-    psBitSetSet(bs, 200);
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort("testBitSet01c","psBitSetSet(bs, 200) didn't generate expected error.\n");
-    }
-    psFree(err);
-
-    psLogMsg("testBitSet01b",PS_LOG_INFO,"Following should be an error");
-    psErrorClear();
-    psBitSetSet(NULL, 0);
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort("testBitSet01c","psBitSetSet(NULL,0) didn't generate expected error.\n");
-    }
-    psFree(err);
-
-    psFree(bs);
-
-    return 0;
-}
-
-static psS32 testBitSet01c(void)
-{
-    psBitSet* bs = psBitSetAlloc(24);
-    psErr* err = NULL;
-
-    fprintf(stderr,"Setting first bit...\n");
-    bs = psBitSetSet(bs, 0);
-    fprintf(stderr,"Setting third bit...\n");
-    bs = psBitSetSet(bs, 2);
-    fprintf(stderr,"Setting last bit...\n");
-    bs = psBitSetSet(bs, 23);
-
-    if (! psBitSetTest(bs,0) ||
-            ! psBitSetTest(bs,2) ||
-            ! psBitSetTest(bs,23) ) {
-
-        psAbort("testBitSet01c","Set bits returned false.");
-    }
-
-    psLogMsg("testBitSet01c",PS_LOG_INFO,"Following should be an error");
-    psErrorClear();
-    if(psBitSetTest(bs, -4)) {
-        psAbort("testBitSet01c","psBitSetTest returned true with negative bit position.\n");
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort("testBitSet01c","psBitSetTest(bs, -4) didn't generate proper error.\n");
-    }
-    psFree(err);
-
-    psLogMsg("testBitSet01c",PS_LOG_INFO,"Following should be an error");
-    psErrorClear();
-    if(psBitSetTest(bs, 200)) {
-        psAbort("testBitSet01c","psBitSetTest returned true with too-large bit position.\n");
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort("testBitSet01c","psBitSetTest(bs, 200) didn't generate proper error.\n");
-    }
-    psFree(err);
-
-    psLogMsg("testBitSet01c",PS_LOG_INFO,"Following should be an error");
-    psErrorClear();
-    if (psBitSetTest(NULL, 0)) {
-        psAbort("testBitSet01c","psBitSetTest returned true with NULL psBitSet.\n");
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort("testBitSet01c","psBitSetTest(NULL, 0) didn't generate proper error.\n");
-    }
-    psFree(err);
-
-    psFree(bs);
-
-    return 0;
-}
-
-psS32 testBitSet02()
-{
-    char *binOut1 = NULL;
-    char *binOut2 = NULL;
-    char *binOut3 = NULL;
-
-    psBitSet* bs1 = psBitSetAlloc(24);
-    psBitSet* bs2 = psBitSetAlloc(24);
-    psBitSet* and = psBitSetAlloc(24);
-    for(psS32 i=0; i<24; i++) {
-        if ((i & 2) == 0) {
-            bs1 = psBitSetSet(bs1, i);
-        }
-        if ((i & 1) == 0) {
-            bs2 = psBitSetSet(bs2, i);
-        }
-        if (((i & 1) == 0) && ((i & 2) == 0) ) {
-            and = psBitSetSet(and, i);
-        }
-    }
-    binOut1 = psBitSetToString(bs1);
-    binOut2 = psBitSetToString(bs2);
-    binOut3 = psBitSetToString(and);
-    fprintf(stderr,"psBitSetOp input is %s, %s.  Truth is %s.\n",
-            binOut1,binOut2,binOut3);
-    psFree(binOut1);
-    psFree(binOut2);
-    psFree(binOut3);
-
-    // Test B - Perform binary AND with psBitSets
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary AND with psBitSets");
-    psBitSet* outbs = psBitSetAlloc(24);
-    outbs = psBitSetOp(outbs, bs1, "AND", bs2);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp returned a NULL result for AND operation");
-    }
-
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(and,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(bs2);
-            binOut3 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with AND operator failed.\nInput was %s, %s.  Output was %s",
-                    binOut1,binOut2,binOut3);
-        }
-    }
-    psFree(outbs);
-
-    // Test C - Perform binary AND and auto allocate output
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary AND and auto allocate output");
-    outbs = psBitSetOp(NULL, bs1, "AND", bs2);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
-    }
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(and,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(bs2);
-            binOut3 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with AND operator failed.\nInput was %s, %s.  Output was %s",
-                    binOut1,binOut2,binOut3);
-        }
-    }
-    psFree(outbs);
-
-    psFree(bs1);
-    psFree(bs2);
-    psFree(and);
-
-    return 0;
-}
-
-static psS32 testBitSet03(void)
-{
-    char *binOut1 = NULL;
-    char *binOut2 = NULL;
-    char *binOut3 = NULL;
-
-    psBitSet* bs1 = psBitSetAlloc(24);
-    psBitSet* bs2 = psBitSetAlloc(24);
-    psBitSet* or = psBitSetAlloc(24);
-    for(psS32 i=0; i<24; i++) {
-        if ((i/2) % 2) {
-            bs1 = psBitSetSet(bs1, i);
-        }
-        if ((i) % 2) {
-            bs2 = psBitSetSet(bs2, i);
-        }
-        if ( ((i/2) % 2) || ((i) % 2) ) {
-            or = psBitSetSet(or, i);
-        }
-    }
-
-    binOut1 = psBitSetToString(bs1);
-    binOut2 = psBitSetToString(bs2);
-    binOut3 = psBitSetToString(or);
-    fprintf(stderr,"psBitSetOp input is %s, %s.  Truth is %s.\n",
-            binOut1,binOut2,binOut3);
-    psFree(binOut1);
-    psFree(binOut2);
-    psFree(binOut3);
-
-    // Test B - Perform binary AND with psBitSets
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary OR with psBitSets");
-    psBitSet* outbs = psBitSetAlloc(24);
-    outbs = psBitSetOp(outbs, bs1, "OR", bs2);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp returned a NULL result for OR operation");
-    }
-
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(or,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(bs2);
-            binOut3 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with OR operator failed.\nInput was %s, %s.  Output was %s",
-                    binOut1,binOut2,binOut3);
-        }
-    }
-    psFree(outbs);
-
-    // Test C - Perform binary AND and auto allocate output
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary OR and auto allocate output");
-    outbs = psBitSetOp(NULL, bs1, "OR", bs2);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
-    }
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(or,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(bs2);
-            binOut3 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with OR operator failed.\nInput was %s, %s.  Output was %s",
-                    binOut1,binOut2,binOut3);
-        }
-    }
-    psFree(outbs);
-    outbs = NULL;
-
-    psFree(bs1);
-    psFree(bs2);
-    psFree(or);
-
-    return 0;
-}
-
-static psS32 testBitSet04(void)
-{
-    char *binOut1 = NULL;
-    char *binOut2 = NULL;
-    char *binOut3 = NULL;
-
-    psBitSet* bs1 = psBitSetAlloc(24);
-    psBitSet* bs2 = psBitSetAlloc(24);
-    psBitSet* xor = psBitSetAlloc(24);
-    for(psS32 i=0; i<24; i++) {
-        if ((i/2) % 2) {
-            bs1 = psBitSetSet(bs1, i);
-        }
-        if ((i) % 2) {
-            bs2 = psBitSetSet(bs2, i);
-        }
-        if ( ((i/2) % 2) != ((i) % 2) ) {
-            xor = psBitSetSet(xor, i);
-        }
-    }
-
-    binOut1 = psBitSetToString(bs1);
-    binOut2 = psBitSetToString(bs2);
-    binOut3 = psBitSetToString(xor);
-    fprintf(stderr,"psBitSetOp input is %s, %s.  Truth is %s.\n",
-            binOut1,binOut2,binOut3);
-    psFree(binOut1);
-    psFree(binOut2);
-    psFree(binOut3);
-
-    // Test B - Perform binary AND with psBitSets
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary XOR with psBitSets");
-    psBitSet* outbs = psBitSetAlloc(24);
-    outbs = psBitSetOp(outbs, bs1, "XOR", bs2);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp returned a NULL result for XOR operation");
-    }
-
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(xor,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(bs2);
-            binOut3 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with XOR operator failed.\nInput was %s, %s.  Output was %s",
-                    binOut1,binOut2,binOut3);
-        }
-    }
-    psFree(outbs);
-
-    // Test C - Perform binary AND and auto allocate output
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary XOR and auto allocate output");
-    outbs = psBitSetOp(NULL, bs1, "XOR", bs2);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
-    }
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(xor,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(bs2);
-            binOut3 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with XOR operator failed.\nInput was %s, %s.  Output was %s",
-                    binOut1,binOut2,binOut3);
-        }
-    }
-    psFree(outbs);
-    outbs = NULL;
-
-    psFree(bs1);
-    psFree(bs2);
-    psFree(xor);
-
-    return 0;
-}
-
-static psS32 testBitSet05(void)
-{
-    char *binOut1 = NULL;
-    char *binOut2 = NULL;
-
-    psBitSet* bs1 = psBitSetAlloc(24);
-    psBitSet* not = psBitSetAlloc(24);
-    for(psS32 i=0; i<24; i++) {
-        if (i % 2) {
-            bs1 = psBitSetSet(bs1, i);
-        }
-        if (i % 2 == 0) {
-            not = psBitSetSet(not, i);
-        }
-    }
-
-    binOut1 = psBitSetToString(bs1);
-    binOut2 = psBitSetToString(not);
-    fprintf(stderr,"psBitSetOp input is %s.  Truth is %s.\n",
-            binOut1,binOut2);
-    psFree(binOut1);
-    psFree(binOut2);
-
-    // Test B - Perform binary AND with psBitSets
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary NOT with psBitSets");
-    psBitSet* outbs = psBitSetAlloc(24);
-    outbs = psBitSetNot(outbs, bs1);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp returned a NULL result for NOT operation");
-    }
-
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(not,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with NOT operator failed.\nInput was %s.  Output was %s",
-                    binOut1,binOut2);
-        }
-    }
-    psFree(outbs);
-
-    // Test C - Perform binary AND and auto allocate output
-    psLogMsg(__func__,PS_LOG_INFO,"Perform binary NOT and auto allocate output");
-    outbs = psBitSetNot(NULL, bs1);
-    if (outbs == NULL) {
-        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
-    }
-    for(psS32 i=0; i<24; i++) {
-        psBool truth = psBitSetTest(not,i);
-        psBool res = psBitSetTest(outbs,i);
-        if ( res != truth) {
-            binOut1 = psBitSetToString(bs1);
-            binOut2 = psBitSetToString(outbs);
-            psAbort(__func__,"psBitSetOp with NOT operator failed.\nInput was %s.  Output was %s",
-                    binOut1,binOut2);
-        }
-    }
-    psFree(outbs);
-    outbs = NULL;
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
-    if(psBitSetNot(NULL,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetNot did not return NULL with NULL input");
-        return 30;
-    }
-
-    psFree(bs1);
-    psFree(not);
-
-    return 0;
-}
-
-static psS32 testBitSet06(void)
-{
-    psErr* err;
-
-    psBitSet* bs1 = psBitSetAlloc(24);
-    psBitSet* bs2 = psBitSetAlloc(40);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
-    psBitSet* outbs = psBitSetOp(NULL, bs1, "XOR", bs2);
-    if (outbs != NULL) {
-        psAbort(__func__,"psBitSetOp did not return a NULL result when input sizes differ");
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_SIZE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort(__func__,"psBitSetOp didn't generate expected error with operands' sizes differed.");
-    }
-    psFree(err);
-    psFree(bs1);
-    psFree(bs2);
-
-    bs1 = psBitSetAlloc(24);
-    bs2 = psBitSetAlloc(24);
-
-    outbs = psBitSetAlloc(40);
-    psBitSet* outbs2 = psBitSetOp(outbs, bs1, "XOR", bs2);
-    if (outbs2 == NULL) {
-        psAbort(__func__,"psBitSetOp failed when input size and output size differed (a recoverable error).");
-    }
-    if (outbs2 != outbs) {
-        psAbort(__func__,"psBitSetOp didn't reuse the given output struct.");
-    }
-    if (outbs2->n != bs1->n) {
-        psAbort(__func__,"psBitSetOp did properly adjust the output psBitSet size.");
-    }
-
-    psErrorClear();
-    psLogMsg(__func__,PS_LOG_INFO,"Following is an error.");
-    outbs = psBitSetOp(outbs, bs1, "FOO", bs2);
-    if (outbs != NULL) {
-        psAbort(__func__,"psBitSetOp returned something in case of a bogus operation.");
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort(__func__,"psBitSetOp didn't generate expected error with bogus operator.");
-    }
-    psFree(err);
-
-
-    // try again, though give a valid output bitset -- should free the out upon error to avoid leak.
-    outbs = psBitSetAlloc(24);
-    psErrorClear();
-    psLogMsg(__func__,PS_LOG_INFO,"Following is an error.");
-    outbs = psBitSetOp(outbs, bs1, "FOO", bs2);
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psErrorStackPrint(stderr,"Error Stack:");
-        psAbort(__func__,"psBitSetOp didn't generate expected error with bogus operator.");
-    }
-    psFree(err);
-
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
-    if(psBitSetOp(outbs,NULL,"AND",bs2) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetOp did not return NULL with NULL input 1 bit set");
-        return 40;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
-    if(psBitSetOp(outbs,bs1,NULL,bs2) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetOp did not return NULL with NULL operator");
-        return 41;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
-    if(psBitSetOp(outbs,bs1,"AND",NULL) != NULL)  {
-        psError(PS_ERR_UNKNOWN,true,"psBitSetOp did not return NULL with NULL input 2 bit set");
-        return 42;
-    }
-
-    psFree(bs1);
-    psFree(bs2);
-    psFree(outbs);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psHash00.c
===================================================================
--- /trunk/psLib/test/collections/tst_psHash00.c	(revision 4546)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*****************************************************************************
-    This code will test whether a hash table can be allocated successfully,
-    then deallocated successfully.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psHash.h"
-#define NUM_HASH_TABLE_BUCKETS 10
-psS32 main()
-{
-    psHash *myHashTable = NULL;
-    psS32 testStatus      = true;
-    psS32 i               = 0;
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks        = 0;
-    printPositiveTestHeader(stdout,
-                            "psHash functions",
-                            "psHashAlloc()");
-
-    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
-
-    if (myHashTable == NULL) {
-        fprintf(stderr, "%s: could not allocate a hash table.", __func__);
-        testStatus = false;
-    }
-
-    if (myHashTable->n != NUM_HASH_TABLE_BUCKETS) {
-        fprintf(stderr, "%s: myHashTable->nbucket not set properly.\n",
-                __func__);
-        testStatus = false;
-
-    }
-
-    if (myHashTable->buckets == NULL) {
-        fprintf(stderr, "%s: myHashTable->buckets is NULL.\n",
-                __func__);
-        testStatus = false;
-
-    }
-
-    for (i=0;i<NUM_HASH_TABLE_BUCKETS;i++) {
-        if (myHashTable->buckets[i] != NULL) {
-            fprintf(stderr, "%s: hash table bucket[%d] not equal to NULL.\n",
-                    __func__, i);
-            testStatus = false;
-        }
-    }
-
-    printFooter(stdout,
-                "psHash functions",
-                "psHashAlloc()",
-                testStatus);
-
-    psFree(myHashTable);
-
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/collections/tst_psHash01.c
===================================================================
--- /trunk/psLib/test/collections/tst_psHash01.c	(revision 4546)
+++ 	(revision )
@@ -1,155 +1,0 @@
-/*****************************************************************************
-    This code will test whether a hash table can be de-allocated successfully.
- *****************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psHash.h"
-#define NUM_HASH_TABLE_BUCKETS 100
-psS32 imGlobal = 0;
-
-typedef struct
-{
-    char *name;
-}
-ID;
-
-static void IdFree(ID *id);
-
-static ID *IdAlloc(const char *name)
-{
-    ID *id = psAlloc(sizeof(ID));
-    psMemSetDeallocator(id,(psFreeFunc)IdFree);
-    id->name = psStringCopy(name);
-
-    return id;
-}
-
-static void IdFree(ID *id)
-{
-    imGlobal++;
-    psFree(id->name);
-}
-
-psS32 main()
-{
-    psHash *myHashTable = NULL;
-    psS32 testStatus      = true;
-    psS32 currentId = psMemGetId();
-    ID* id = NULL;
-    ID* replaceId = NULL;
-    psS32 memLeaks        = 0;
-    psBool  retVal = false;
-
-    // Allocate memory for Hash Table
-    printPositiveTestHeader(stdout,"psHash functions","psHashAlloc");
-    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
-    if(myHashTable == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to allocate psHash table");
-        return 10;
-    }
-    printFooter(stdout,"psHash functions","psHashAlloc",true);
-
-    // Add items to Hash table
-    id = IdAlloc("IDA");
-    printPositiveTestHeader(stdout,"psHash functions","psHashAdd");
-    retVal = psHashAdd(myHashTable, "ENTRY00", id);
-    psFree(id);
-    if( !retVal) {
-        psError(PS_ERR_UNKNOWN, true, "psHashAdd unable to add ENTRY00");
-        return 1;
-    }
-
-    id = IdAlloc("IDB");
-    retVal = psHashAdd(myHashTable, "ENTRY01", id);
-    psFree(id);
-    if (!retVal) {
-        psError(PS_ERR_UNKNOWN, true, "psHashAdd unable to add ENTRY01");
-        return 2;
-    }
-
-    id = IdAlloc("IDC");
-    retVal = psHashAdd(myHashTable, "ENTRY02", id);
-    psFree(id);
-    if(!retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd unable to add ENTRY02");
-        return 3;
-    }
-
-    id = IdAlloc("IDD");
-    retVal =psHashAdd(myHashTable, "ENTRY03", id);
-    psFree(id);
-    if(!retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd unable to add ENTRY03");
-        return 4;
-    }
-    printFooter(stdout,"psHash functions","psHashAdd",true);
-
-    // Replace item with same key
-    printPositiveTestHeader(stdout,"psHash replace item","psHashAdd");
-    id = IdAlloc("IDE");
-    retVal = psHashAdd(myHashTable,"ENTRY02",id);
-    if(!retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd unable to replace ENTRY02");
-        return 5;
-    }
-    replaceId = psHashLookup(myHashTable,"ENTRY02");
-    if(strcmp(replaceId->name,"IDE") != 0) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd did not replace ENTRY02 with correct item");
-        return 6;
-    }
-    printFooter(stdout,"psHash replace item","psHashAdd",true);
-
-    // Add with NULL hash table specified
-    printNegativeTestHeader(stdout,"psHashAdd","NULL hash table","Hash table can not be NULL.",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashAdd with null table");
-    retVal = psHashAdd(NULL,"ENTRY04",id);
-    if(retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd added entry to NULL hash table.");
-        return 20;
-    }
-    printFooter(stdout,"psHashAdd","NULL hash table",true);
-
-    // Add with key to valid hash table NULL
-    printNegativeTestHeader(stdout,"psHashAdd","NULL key","Hash key can not be NULL.",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashAdd with null key");
-    retVal = psHashAdd(myHashTable,NULL,id);
-    if(retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd added entry to hash table with NULL key.");
-        return 21;
-    }
-    printFooter(stdout,"psHashAdd","NULL hash key",true);
-
-    // Add NULL hash data to valid table and key
-    printNegativeTestHeader(stdout,"psHashAdd","NULL hash data","Hash data can not be NULL.",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashAdd with null data");
-    retVal = psHashAdd(myHashTable,"ENTRY04",NULL);
-    if(retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashAdd added entry to hash table with NULL data.");
-        return 22;
-    }
-    printFooter(stdout,"psHashAdd","NULL hash data",true);
-
-    // Free hash table
-    printPositiveTestHeader(stdout,"psHash functions","psHashFree");
-    psFree(id);
-
-    psFree(myHashTable);
-
-    if (imGlobal != 5) {
-        fprintf(stderr, "%s: only (%d/4) entries were freed",
-                __func__, imGlobal);
-        testStatus = false;
-    }
-
-    printFooter(stdout,"psHash functions","psHashFree()",testStatus);
-
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (memLeaks != 0) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/collections/tst_psHash02.c
===================================================================
--- /trunk/psLib/test/collections/tst_psHash02.c	(revision 4546)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*****************************************************************************
-    This code will test whether hash tables entries can be inserted correctly,
-    and retrieved correctly.
- 
-    NOTE: Add code to test whether duplicates are handled correctly (use a
-    small hash table and lots of keys).
- *****************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psHash.h"
-#define NUM_HASH_TABLE_BUCKETS 100
-psS32 imGlobal = 0;
-
-typedef struct
-{
-    char *name;
-}
-ID;
-static void IdFree(ID *id);
-
-static ID *IdAlloc(const char *name)
-{
-    ID *id = psAlloc(sizeof(ID));
-    psMemSetDeallocator(id,(psFreeFunc)IdFree);
-    id->name = psStringCopy(name);
-
-    return id;
-}
-
-static void IdFree(ID *id)
-{
-    imGlobal++;
-    psFree(id->name);
-}
-
-psS32 main()
-{
-    psHash *myHashTable = NULL;
-    psS32 testStatus      = true;
-    psS32 i               = 0;
-    ID *id = NULL;
-    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL
-                     };
-    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL
-                     };
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks        = 0;
-
-    printPositiveTestHeader(stdout,"psHash functions","psHashLookup");
-
-    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
-    i = 0;
-    while (myKeys[i] != NULL) {
-        id = IdAlloc(myData[i]);
-        psHashAdd(myHashTable, myKeys[i], id);
-        psFree(id);
-        i++;
-    }
-
-    i = 0;
-    while (myKeys[i] != NULL) {
-        id = psHashLookup(myHashTable, myKeys[i]);
-        if (0 != strcmp(myData[i], id->name)) {
-            fprintf(stderr, "%s: Hash table entry for key %s was %s (should be %s).\n",
-                    __func__, myKeys[i], id->name, myData[i]);
-            return 1;
-        }
-        i++;
-    }
-    printFooter(stdout,"psHash functions","psHashLookup",true);
-
-    // Use an invalid key in the hash table: verify no item is returned
-    printNegativeTestHeader(stdout,"psHashLookup","Invalid key","Key is not found in the table",0);
-    id = psHashLookup(myHashTable, "BogusKey");
-    if (id != NULL) {
-        fprintf(stderr, "%s: Hash table entry for key %s was not NULL.\n",
-                __func__, "BogusKey");
-        return 2;
-    }
-    printFooter(stdout,"psHashLookup","Invalid key",true);
-
-    // Lookup with null table
-    printNegativeTestHeader(stdout,"psHashLookup","NULL table","Can not lookup with NULL table",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashLookup with null table");
-    id = psHashLookup(NULL,"ENTRY01");
-    if (id != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psHashLookup retrieved an entry from NULL hash table.");
-        return 3;
-    }
-    printFooter(stdout,"psHashLookup","NULL table",true);
-
-    // Lookup with null key
-    printNegativeTestHeader(stdout,"psHashLookup","NULL key","Can not lookup with NULL key.",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashLookup with null key");
-    id = psHashLookup(myHashTable,NULL);
-    if (id != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psHashLookup retrieved an entry with NULL key.");
-        return 4;
-    }
-    printFooter(stdout,"psHashLookup","NULL key",true);
-
-    psFree(myHashTable);
-
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/collections/tst_psHash03.c
===================================================================
--- /trunk/psLib/test/collections/tst_psHash03.c	(revision 4546)
+++ 	(revision )
@@ -1,142 +1,0 @@
-/*****************************************************************************
-    This code will test whether hash tables entries can be removed correctly.
- 
-    NOTE: Add code to test whether duplicates are handled correctly.
- *****************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psHash.h"
-#include "psMemory.h"
-#define NUM_HASH_TABLE_BUCKETS 100
-psS32 imGlobal = 0;
-psS32 currentId = 0;
-
-typedef struct
-{
-    char *name;
-}
-ID;
-static void IdFree(ID *id);
-
-static ID *IdAlloc(const char *name)
-{
-    ID *id = NULL;
-
-    id = psAlloc(sizeof(ID));
-    psMemSetDeallocator(id,(psFreeFunc)IdFree);
-
-    id->name = psStringCopy(name);
-
-    return id;
-}
-
-static void IdFree(ID *id)
-{
-    imGlobal++;
-    psFree(id->name);
-}
-
-psS32 main()
-{
-    psHash *myHashTable = NULL;
-    psS32 testStatus      = true;
-    psS32 i               = 0;
-    psS32 TotalKeys       = 0;
-    psBool retVal         = false;
-    ID *id = NULL;
-    ID *ids[4];
-    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL
-                     };
-    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL
-                     };
-    psS32 memLeaks        = 0;
-
-    currentId = psMemGetId();
-
-    printPositiveTestHeader(stdout,"psHash functions","psHashRemove");
-
-    // Add items to hash table
-    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
-    i = 0;
-    while (myKeys[i] != NULL) {
-        ids[i] = IdAlloc(myData[i]);
-        psHashAdd(myHashTable, myKeys[i], ids[i]);
-        i++;
-    }
-    TotalKeys = i - 1;
-
-    // Verify items which were just add to hash table
-    i = TotalKeys;
-    while (i >= 0) {
-
-        id = psHashLookup(myHashTable, myKeys[i]);
-        if (0 != strcmp(myData[i], id->name)) {
-            fprintf(stderr, "%s: Hash table entry for key %s was %s (should be %s).\n",
-                    __func__, myKeys[i], id->name, myData[i]);
-            return 1;
-        }
-        i--;
-    }
-
-    // Remove each item from the table and verify item is no longer in the list
-    i = 0;
-    while (myKeys[i] != NULL) {
-        // The psHashRemove() procedure removes the entry from the hash
-        // table and deletes the data.
-        retVal = psHashRemove(myHashTable, myKeys[i]);
-        if (!retVal) {
-            fprintf(stderr,"%s: Hash table entry not removed.\n",__func__);
-            return 2;
-        }
-        id = psHashLookup(myHashTable, myKeys[i]);
-        if (id != NULL) {
-            fprintf(stderr, "%s: Hash table entry for key %s not removed.\n",
-                    __func__, "IDA");
-            return 3;
-        }
-        i++;
-    }
-    printFooter(stdout,"psHash functions","psHashRemove()",true);
-
-    // Use an invalid key in the hash table: verify false is returned
-    printNegativeTestHeader(stdout,"psHashRemove","Invalid key","Key is not found in table",0);
-    if (psHashRemove(myHashTable,"BogusKey") ) {
-        psError(PS_ERR_UNKNOWN,true,"psHashRemove removed an entry with a bogus key.");
-        return 4;
-    }
-    printFooter(stdout,"psHashRemove","Invalid key",true);
-
-    // Remove with null table
-    printNegativeTestHeader(stdout,"psHashRemove","NULL table","Can not remove with NULL table",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashRemove with null table");
-    retVal = psHashRemove(NULL,"ENTRY02");
-    if (retVal) {
-        psError(PS_ERR_UNKNOWN,true,"psHashRemove removed an entry from NULL hash table.");
-        return 5;
-    }
-    printFooter(stdout,"psHashRemove","NULL table",true);
-
-    // Remove with null key
-    printNegativeTestHeader(stdout,"psHashRemove","NULL key","Can not remove with NULL key",0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashRemove with null key");
-    if (psHashRemove(myHashTable,NULL) ) {
-        psError(PS_ERR_UNKNOWN,true,"psHashRemove removed an entry from NULL key");
-        return 6;
-    }
-    printFooter(stdout,"psHashRemove","NULL key",true);
-
-    psFree(myHashTable);
-    for(i=0; i<(TotalKeys+1); i++) {
-        psFree(ids[i]);
-    }
-    memLeaks = psMemCheckLeaks(currentId,NULL,stdout,false);
-    if (memLeaks != 0) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(true);
-
-    return (!testStatus);
-}
-
Index: unk/psLib/test/collections/tst_psHash04.c
===================================================================
--- /trunk/psLib/test/collections/tst_psHash04.c	(revision 4546)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/*****************************************************************************
-    This code will test whether the call psHashKeyList() function works.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psHash.h"
-#define NUM_HASH_TABLE_BUCKETS 100
-psS32 imGlobal = 0;
-
-typedef struct
-{
-    char *name;
-}
-ID;
-static void IdFree(ID *id);
-
-static ID *IdAlloc(const char *name)
-{
-    ID *id = psAlloc(sizeof(ID));
-    psMemSetDeallocator(id,(psFreeFunc)IdFree);
-
-    id->name = psStringCopy(name);
-
-    return id;
-}
-
-static void IdFree(ID *id)
-{
-    imGlobal++;
-    psFree(id->name);
-}
-
-psS32 main()
-{
-    psHash *myHashTable = NULL;
-    psS32 testStatus      = true;
-    psS32 i               = 0;
-    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL
-                     };
-    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL
-                     };
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks        = 0;
-    psList *myLinkList = NULL;
-    psListElem *tmp = NULL;
-    ID* id = NULL;
-
-    printPositiveTestHeader(stdout,"psHash functions","psHashKeyList()");
-    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
-    i = 0;
-    while (myKeys[i] != NULL) {
-        id = IdAlloc(myData[i]);
-        psHashAdd(myHashTable, myKeys[i], id);
-        psFree(id);
-        i++;
-    }
-    myLinkList = psHashKeyList(myHashTable);
-    tmp = myLinkList->head;
-    while (tmp != NULL) {
-        printf("Linked List Entries: %s\n", (char *) tmp->data);
-        tmp = tmp->next;
-    }
-    printFooter(stdout,"psHash functions","psHashKeyList()",testStatus);
-    psFree(myLinkList);
-
-    printNegativeTestHeader(stdout,"psHashKeyList","NULL table","Can not lookup with NULL table",0);
-    myLinkList = psHashKeyList(NULL);
-    if(myLinkList != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psHashKeyList retrieved a key list from a NULL table.");
-        return 1;
-    }
-    printFooter(stdout,"psHashKeyList","NULL table",true);
-
-    psFree(myHashTable);
-
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (memLeaks != 0) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    return(!testStatus);
-}
Index: unk/psLib/test/collections/tst_psHash05.c
===================================================================
--- /trunk/psLib/test/collections/tst_psHash05.c	(revision 4546)
+++ 	(revision )
@@ -1,172 +1,0 @@
-/** @file  tst_psHash05.c
-*
-*  @brief Contains the tests for psHash.[ch]
-*
-*
-*  @author Robert DeSonia, MHPCC
-*
-*  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-04-07 20:27:41 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-static psS32 hashToArray( void );
-
-testDescription tests[] = {
-                              {hashToArray, 789, "psHashToArray", 0, false},
-                              {NULL}
-                          };
-
-static void printIntArray(char* name, psArray* arr)
-{
-    if (arr == NULL) {
-        printf("%s = NULL\n",name);
-        return;
-    }
-
-    printf("%s = {",name);
-    for (int i = 0; i < arr->n; i++) {
-        if (arr->data[i] == NULL) {
-            printf("NULL");
-        } else {
-            printf("%d",*(int*)arr->data[i]);
-        }
-        if (i != arr->n-1) {
-            printf(",");
-        }
-    }
-    printf("}");
-}
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psHash", tests, argc, argv ) );
-}
-
-psS32 hashToArray( void )
-{
-    int testNum = 0;
-    psArray* array;
-    #define BUCKETS 10
-
-    psHash* hash = psHashAlloc(BUCKETS);
-    char key[2] = "A";
-    bool found[BUCKETS];
-
-    for (int i = 0; i < BUCKETS; i++) {
-
-        array = psHashToArray(hash);
-
-        // return non-null?
-        testNum++;
-        if (array == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to create an array from a psHash of %d elements.",
-                    i);
-            return testNum;
-        }
-
-        // the size correct
-        testNum++;
-        if (array->n != i) {
-            printIntArray("array",array);
-            psError(PS_ERR_UNKNOWN, false,
-                    "psHashToArray created a psArray of %d elements from a psHash of %d elements.",
-                    array->n, i);
-            return testNum;
-        }
-
-        // the values correct?
-
-        // zero out the found boolean vector
-        for (int j = 0; j < i; j++) {
-            found[j] = false;
-        }
-
-        // check if all the items in array are valid
-        for (int k = 0; k < array->n; k++) {
-            int* item = array->data[k];
-
-            testNum++;
-            if (item == NULL) {
-                printIntArray("array",array);
-                psError(PS_ERR_UNKNOWN, true,
-                        "The array position %d was NULL.",
-                        k);
-                return testNum;
-            }
-
-            testNum++;
-            if (*item < 0 || *item >= BUCKETS) {
-                printIntArray("array",array);
-                psError(PS_ERR_UNKNOWN, true,
-                        "The array position %d was invalid (%d).",
-                        k,*item);
-                return testNum;
-            }
-
-            testNum++;
-            if (found[*item]) {
-                printIntArray("array",array);
-                psError(PS_ERR_UNKNOWN, true,
-                        "The array position %d was a duplicate (%d).",
-                        k,*item);
-                return testNum;
-            }
-
-            testNum++;
-            if (psMemGetRefCounter(item) != 2) {
-                printIntArray("array",array);
-                psError(PS_ERR_UNKNOWN, true,
-                        "The array position %d was not properly reference counted (%d).",
-                        k,psMemGetRefCounter(item));
-                return testNum;
-            }
-
-            found[*item] = true;
-        }
-
-        // check that all the items in psHash was found
-        for (int j = 0; j < i; j++) {
-            testNum++;
-            if (! found[j]) {
-                printIntArray("array",array);
-                psError(PS_ERR_UNKNOWN, true,
-                        "Item %d not found in array.",
-                        j);
-                return testNum;
-            }
-        }
-
-        psFree(array);
-
-        // add one element
-        int* value = psAlloc(sizeof(int));
-        *value = i;
-        psHashAdd(hash, key, value);
-        *key += 1; // increment the key value
-
-        psFree(value);
-    }
-
-    psFree(hash);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    array = psHashToArray(NULL);
-    testNum++;
-    if (array != NULL) {
-        printIntArray("array",array);
-        psError(PS_ERR_UNKNOWN, false,
-                "psHashToArray returned non-null psArray given a null psHash.");
-        return testNum;
-    }
-
-    return 0;
-}
-
Index: unk/psLib/test/collections/tst_psList.c
===================================================================
--- /trunk/psLib/test/collections/tst_psList.c	(revision 4546)
+++ 	(revision )
@@ -1,1272 +1,0 @@
-/** @file  tst_psList.c
- *
- *  @brief Contains the tests for psList.[ch]
- *
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.31 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-07-06 03:04:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-void printListInt(psList* list);
-
-
-static psS32 testListAlloc(void);
-static psS32 testListAdd(void);
-static psS32 testListGet(void);
-static psS32 testListRemove(void);
-static psS32 testListConvert(void);
-static psS32 testListIterator(void);
-static psS32 testListFree(void);
-static psS32 testListSort(void);
-static psS32 testListAddAfter(void);
-static psS32 testListAddBefore(void);
-
-testDescription tests[] = {
-                              {testListAlloc,487,"psListAlloc",0,false},
-                              {testListAdd,488,"psListAdd",0,false},
-                              {testListGet,489,"psListGet",0,false},
-                              {testListRemove,490,"psListRemove",0,false},
-                              {testListConvert,491,"psListConvert",0,false},
-                              {testListIterator,494,"psListIterator",0,false},
-                              {testListFree,627,"psListFree",0,false},
-                              {testListSort,624,"psListSort",0,false},
-                              {testListAddAfter,811,"psListAddAfter",0,false},
-                              {testListAddBefore,811,"psListAddBefore",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if (! runTestSuite(stderr,"psList",tests,argc,argv) ) {
-        psError(PS_ERR_UNKNOWN,true,"One or more tests failed");
-        return 1;
-    }
-    return 0;
-}
-
-psS32 testListAlloc(void)
-{
-    psList* list;
-    psS32 ref;
-    float* data;
-
-    psLogMsg(__func__,PS_LOG_INFO,"psListAlloc shall create a psList with either 0 or 1 element.");
-
-    data = psAlloc(sizeof(float));
-
-    // if psListAlloc is invoked with a NULL parameter, it shall return an
-    // empty psList struct with head=tail=NULL and n=0. Otherwise, it shall
-    // return a psList of one element (head=tail=data, n=1).
-    // Test requirement SDR-167
-    list = psListAlloc(NULL);
-    if (list == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListAlloc failed to return a list.");
-        return 1;
-    }
-    if (list->head != NULL || list->tail != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"head and/or tail was not NULL for empty list.");
-        return 2;
-    }
-    if (list->n != 0) {
-        psError(PS_ERR_UNKNOWN, true,"size of list wasn't zero for empty list.");
-        return 3;
-    }
-
-    psFree(list);
-
-    // Test requirement SDR-165
-    list = psListAlloc(data);
-    if (list == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListAlloc failed to return a list.");
-        return 4;
-    }
-
-    if (list->head == NULL || list->tail == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"head and/or tail was NULL for one-element new list.");
-        return 5;
-    }
-
-    if (list->head->data != data || list->tail->data != data) {
-        psError(PS_ERR_UNKNOWN, true,"head and/or tail didn't point to data's node for one-element new list.");
-        return 6;
-    }
-
-    if (list->n != 1) {
-        psError(PS_ERR_UNKNOWN, true,"size of list wasn't correctly set for new, one-element list.");
-        return 7;
-    }
-
-    ref = psMemGetRefCounter(data);
-    if (ref != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psList didn't increment reference count of data (%d.",ref);
-        return 8;
-    }
-
-    psFree(list);
-
-    psFree(data);
-
-    return 0;
-}
-
-psS32 testListAddAfter(void)
-{
-    psList* list = NULL;
-    psS32*  data = NULL;
-    psS32*  data1 = NULL;
-    psS32*  data2 = NULL;
-    psListIterator *currentIterator = NULL;
-
-    data = psAlloc(sizeof(psS32));
-    *data = 1;
-    data1 = psAlloc(sizeof(psS32));
-    *data1 = 2;
-    data2 = psAlloc(sizeof(psS32));
-    *data2 = 3;
-
-    list = psListAlloc(data);
-    currentIterator = psListIteratorAlloc(list,PS_LIST_HEAD,true);
-
-    // Add data after HEAD and verify data
-    // Test requirement SDR-755
-    if(!psListAddAfter(currentIterator,data1)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter failed to add item");
-        return 1;
-    }
-    if(*(psS32*)list->head->next->data != 2) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter did not add the item properly");
-        return 2;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data1) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAddAfter didn't increment the data reference count.");
-        return 20;
-    }
-    psFree(currentIterator);
-
-    currentIterator = psListIteratorAlloc(list,PS_LIST_TAIL,true);
-
-    // Add data after TAIL and verify data
-    if(!psListAddAfter(currentIterator,data2)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter failed to add item");
-        return 3;
-    }
-    if(*(psS32*)list->tail->data != 3) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter did not add the item properly");
-        return 4;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data2) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAddAfter didn't increment the data reference count.");
-        return 40;
-    }
-
-    // Verify error message generated with data pointer is NULL
-    psLogMsg(__func__,PS_LOG_INFO,"NULL data pointer should generate error message");
-    if(psListAddAfter(currentIterator,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter should have generated error.");
-        return 5;
-    }
-
-    // Verify error message generated with iterator NULL
-    psLogMsg(__func__,PS_LOG_INFO,"NULL iterator should generate error message");
-    if(psListAddAfter(NULL,data2)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter should have generated error.");
-        return 6;
-    }
-
-    // Verify error message is generate with non-mutable iterator
-    psLogMsg(__func__,PS_LOG_INFO,"Non-mutable list should generate error message");
-    currentIterator->mutable = false;
-    if(psListAddAfter(currentIterator,data2)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddAfter should have generated error for non-mutable list add");
-        return 7;
-    }
-    currentIterator->mutable = true;
-
-    psFree(data);
-    psFree(data1);
-    psFree(data2);
-    psFree(list);
-
-    return 0;
-}
-
-psS32 testListAddBefore(void)
-{
-    psList* list = NULL;
-    psS32*  data1 = NULL;
-    psS32*  data2 = NULL;
-    psListIterator *currentIterator = NULL;
-
-    data1 = psAlloc(sizeof(psS32));
-    *data1 = 2;
-    data2 = psAlloc(sizeof(psS32));
-    *data2 = 3;
-
-    list = psListAlloc(NULL);
-    currentIterator = psListIteratorAlloc(list,PS_LIST_HEAD,true);
-
-    // Add data before HEAD and verify data
-    // Test requirement SDR-756
-    if(!psListAddBefore(currentIterator,data1)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore failed to add item");
-        return 1;
-    }
-    if(*(psS32*)list->head->data != 2) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore did not add the item properly");
-        return 2;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data1) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAddBefore didn't increment the data reference count.");
-        return 20;
-    }
-    psFree(currentIterator);
-
-    currentIterator = psListIteratorAlloc(list,PS_LIST_TAIL,true);
-
-    // Add data after TAIL and verify data
-    if(!psListAddBefore(currentIterator,data2)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore failed to add item");
-        return 3;
-    }
-    if(*(psS32*)list->tail->prev->data != 3) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore did not add the item properly");
-        return 4;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data2) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAddBefore didn't increment the data reference count.");
-        return 40;
-    }
-
-    // Verify error message generated with data pointer is NULL
-    psLogMsg(__func__,PS_LOG_INFO,"NULL data pointer should generate error message");
-    if(psListAddBefore(currentIterator,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore should have generated error.");
-        return 5;
-    }
-
-    // Verify error message generated with iterator NULL
-    psLogMsg(__func__,PS_LOG_INFO,"NULL iterator should generate error message");
-    if(psListAddBefore(NULL,data2)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore should have generated error.");
-        return 6;
-    }
-
-    // Verify error message is generate with non-mutable iterator
-    psLogMsg(__func__,PS_LOG_INFO,"Non-mutable list should generate error message");
-    currentIterator->mutable = false;
-    if(psListAddBefore(currentIterator,data2)) {
-        psError(PS_ERR_UNKNOWN,true,"psListAddBefore should have generated error for non-mutable list add");
-        return 7;
-    }
-    currentIterator->mutable = true;
-
-    psFree(data1);
-    psFree(data2);
-    psFree(list);
-
-    return 0;
-}
-
-psS32 testListAdd(void)
-{
-    psList* list = NULL;
-    psS32* data = NULL;
-
-    psLogMsg(__func__,PS_LOG_INFO,"psListAdd shall add an element to list");
-
-    /*
-        psListAdd(list,data,where) should be tested in the instance where:
-
-        1. list is NULL (error)
-        2. data is NULL (error, list should not grow)
-        3. where is PS_LIST_HEAD or PS_LIST_TAIL
-        4. where is not PS_LIST_* but <0
-        5. where is >0
-    */
-
-    data = psAlloc(sizeof(psS32));
-    *data = 1;
-
-    //  1. list is NULL (error)
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for using NULL list.");
-    if (psListAdd(NULL,PS_LIST_HEAD,data)) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd was given a NULL list, but returned a true/success.");
-        return 1;
-    }
-
-    list = psListAlloc(data);
-    psFree(data);
-    if (list->n != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListAlloc didn't create a list properly.");
-        return 2;
-    }
-
-    //  2. data is NULL (error, list should not grow)
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error msg to add NULL data");
-    if (psListAdd(list, PS_LIST_HEAD,NULL)) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd successfully added a NULL data item?");
-        return 40;
-    }
-    if ( list->n != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd with a NULL data element changed the list size or returned success.");
-        return 3;
-    }
-
-    //  3. where is PS_LIST_HEAD or PS_LIST_TAIL
-    data = psAlloc(sizeof(psS32));
-    *data = 2;
-    if ( ! psListAdd(list,PS_LIST_HEAD,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add a data item to head.");
-        return 21;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
-        return 20;
-    }
-    psFree(data);
-
-    // verify that the size incremented
-    if (list->n != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the size by one");
-        return 4;
-    }
-
-    // verify that the head is the inserted data item
-    if (*(psS32*)list->head->data != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd with PS_LIST_HEAD didn't insert at the head.");
-        return 5;
-    }
-
-    data = psAlloc(sizeof(psS32));
-    *data = 3;
-    if ( ! psListAdd(list,PS_LIST_TAIL,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add a data item to tail.");
-        return 21;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
-        return 22;
-    }
-    psFree(data);
-    // verify that the size incremented
-    if (list->n != 3) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the size by 1");
-        return 6;
-    }
-
-    // verify that the head is still the same
-    if (*(psS32*)list->head->data != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd with PS_LIST_TAIL modified the head.");
-        return 7;
-    }
-
-    // verify that the tail is the data item inserted
-    if (*(psS32*)list->tail->data != 3) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd with PS_LIST_TAIL didn't insert at the tail.");
-        return 8;
-    }
-
-    // 4. where is not PS_LIST_* but <0
-
-    data = psAlloc(sizeof(psS32));
-    *data = 4;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error with invalid insert location");
-
-    if ( psListAdd(list,-10,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd successfully added data to a -10 position?");
-        return 30;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data) != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd incremented the data reference count.");
-        return 24;
-    }
-    psFree(data);
-    // verify that the size wasn't incremented
-    if (list->n != 3) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to head when where was invalid.");
-        return 9;
-    }
-
-    // 5. where is >0
-    data = psAlloc(sizeof(psS32));
-    *data = 5;
-
-    if ( ! psListAdd(list,1,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to 1 position.");
-        return 30;
-    }
-    // Test requirement SDR-175
-    if (psMemGetRefCounter(data) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
-        return 25;
-    }
-    psFree(data);
-    // verify that the size incremented
-    if (list->n != 4 || *(psS32*)list->head->next->data != 5) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to position #1.");
-        return 10;
-    }
-
-    data = psAlloc(sizeof(psS32));
-    *data = 6;
-    if ( ! psListAdd(list,3,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to 4 position.");
-        return 31;
-    }
-    // Test requirment SDR-175
-    if (psMemGetRefCounter(data) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
-        return 26;
-    }
-    psFree(data);
-    // verify that the size incremented
-    if (list->n != 5  || *(psS32 *)list->head->next->next->next->data != 6) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to position #4.");
-        return 50;
-    }
-
-    data = psAlloc(sizeof(psS32));
-    *data = 7;
-    // Test requirment SDR-169
-    if ( ! psListAdd(list,-2,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to 2 position.");
-        return 32;
-    }
-
-    // Test requirment SDR-175
-    if (psMemGetRefCounter(data) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
-        return 28;
-    }
-    psFree(data);
-    // verify that the size incremented
-    if (list->n != 6  || *(psS32 *)list->tail->prev->prev->data != 7) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to position #2.");
-        return 11;
-    }
-
-    // Test requirement SDR-757
-    data = psAlloc(sizeof(psS32));
-    *data = 8;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be a warning.");
-
-    if ( ! psListAdd(list,9,data) ) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to a 9 position?");
-        return 30;
-    }
-    // Test requirment SDR-175
-    if (psMemGetRefCounter(data) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
-        return 29;
-    }
-    if(list->n != 7 || *(psS32 *)list->tail->data != 8) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN,true,"psListAdd didn't place added item at tail.");
-        return 12;
-    }
-
-    psFree(data);
-
-    psFree(list);
-
-    return 0;
-}
-
-void printListInt(psList* list)
-{
-    psS32* data = NULL;
-    psBool first = true;
-
-    psListIterator* iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
-
-    while ( (data=(psS32*)psListGetAndIncrement(iter)) != NULL ) {
-        if (!first) {
-            printf(", %d",*(psS32*)data);
-        } else {
-            printf("%d",*(psS32*)data);
-            first = false;
-        }
-    }
-
-    printf(".\n");
-}
-
-
-psS32 testListGet(void)
-{
-    psList* list = NULL;
-    psS32* data;
-
-    /*
-     psListGet(list,which) shall be tested with the following instances
-
-        1. list is NULL.
-        2. which>0 and which<list.n.
-        3. which>list.n.
-        4. which=PS_LIST_HEAD
-        5. which=PS_LIST_NEXT
-        6. which=PS_LIST_TAIL
-        7. which=PS_LIST_PREV
-        8. which<0 and not any PS_LIST_* values
-    */
-
-    //  1. list is NULL.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
-    if (psListGet(list,PS_LIST_HEAD) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet didn't return NULL given a NULL list.");
-        return 1;
-    };
-
-    // create a list
-    data = psAlloc(sizeof(psS32));
-    *data = 0;
-    list = psListAlloc(data);
-    psFree(data);
-
-    data = psAlloc(sizeof(psS32));
-    *data = 1;
-    psListAdd(list,PS_LIST_TAIL,data);
-    psFree(data);
-
-    data = psAlloc(sizeof(psS32));
-    *data = 2;
-    psListAdd(list,PS_LIST_TAIL,data);
-    psFree(data);
-
-    data = psAlloc(sizeof(psS32));
-    *data = 3;
-    psListAdd(list,PS_LIST_TAIL,data);
-    psFree(data);
-
-    //  2. which>0 and which<list.n.
-    data = (psS32*)psListGet(list,3);
-    if (data == NULL || *data != 3) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=3");
-        return 2;
-    }
-    data = (psS32*)psListGet(list,1);
-    if (data == NULL || *data != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=1");
-        return 3;
-    }
-
-    //  3. which>=list.n.
-    data = (psS32*)psListGet(list,5);
-    if (data != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=5");
-        return 4;
-    }
-    data = (psS32*)psListGet(list,4);
-    if (data != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=4");
-        return 5;
-    }
-
-    //  4. which=PS_LIST_HEAD
-    data = (psS32*)psListGet(list,PS_LIST_HEAD);
-    if (data == NULL || *data != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=PS_LIST_HEAD");
-        return 6;
-    }
-
-    //  6. which=PS_LIST_TAIL
-    data = (psS32*)psListGet(list,PS_LIST_TAIL);
-    if (data == NULL || *data != 3) {
-        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=PS_LIST_TAIL");
-        return 8;
-    }
-
-    data = (psS32*)psListGet(list,-2);
-    if (data == NULL || *data !=2) {
-        psError(PS_ERR_UNKNOWN,true,"psListGet failed with location=-2");
-        return 9;
-    }
-
-    psFree(list);
-
-    return 0;
-}
-
-psS32 testListRemove(void)
-{
-    psList* list = NULL;
-    psS32* data;
-    int items = 15;
-
-    /*
-        psListRemove(list,data,which) should be tested under the following conditions:
-
-        1. list is NULL
-        2. which is PS_LIST_HEAD (remove first element of list)
-        3. which is PS_LIST_TAIL (remove last element of list)
-        4. which is PS_LIST_NEXT (element right of cursor [which should be head,tail, and neither])
-        5. which is PS_LIST_PREV (element left of cursor [which should be head,tail, and neither])
-        6. which is PS_LIST_UNKNOWN and data=NULL (error)
-        7. which is PS_LIST_UNKNOWN and data=[head,tail,other list items]
-        8. which is PS_LIST_UNKNOWN and data!=NULL and data!=any element in list
-
-        In all conditions that are not an error, list.n shall be decremented and only the specified element
-        shall be removed. After each step, list.n should be checked to verify that it is the true
-        number of elements in list.
-    */
-
-    //  1. list is NULL.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
-    if (psListRemove(list,PS_LIST_HEAD)) {
-        psError(PS_ERR_UNKNOWN, true,"psListRemove didn't return false given a NULL list.");
-        return 1;
-    };
-
-    // create a list
-    list = psListAlloc(NULL);
-
-    for (psS32 lcv=0;lcv<items;lcv++) {
-        data = psAlloc(sizeof(psS32));
-        *data = lcv;
-        psListAdd(list,PS_LIST_TAIL,data);
-        psMemDecrRefCounter(data);
-    }
-
-
-    // 2. which is PS_LIST_HEAD (remove first element of list)
-    psS32* data1 = (psS32 *)psListGet(list,PS_LIST_HEAD);
-    psMemIncrRefCounter(data1);
-    // Test requirement SDR-172, SDR-173
-    if ( (! psListRemove(list,PS_LIST_HEAD)) ||
-            (psListGet(list,PS_LIST_HEAD) == data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_HEAD");
-        return 1;
-    }
-
-    if (list->n != --items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
-        return 1;
-    }
-    // Test requirement SDR-176
-    if (psMemGetRefCounter(data1) != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListRemove didn't decrement the data reference count.");
-        return 20;
-    }
-    psMemDecrRefCounter(data1);
-
-    // 3. which is PS_LIST_TAIL (remove last element of list)
-    data = psListGet(list,PS_LIST_TAIL);
-    // Test requirement SDR-173
-    if ( (! psListRemove(list,PS_LIST_TAIL)) ||
-            (psListGet(list,PS_LIST_TAIL) == data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_TAIL");
-        return 1;
-    }
-
-    if (list->n != --items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
-        return 1;
-    }
-
-    data = psListGet(list,-2);
-    // Test requirement SDR-173
-    if ( (! psListRemove(list,-2)) ||
-            (psListGet(list,-2) == data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove from location -2");
-        return 11;
-    }
-
-    if (list->n != --items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
-        return 1;
-    }
-
-    // 6. psListRemoveData where data=NULL (error)
-    psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
-    if (psListRemoveData(list,NULL)) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_UNKNOWN with data=NULL");
-        return 1;
-    }
-
-    // 7. which is PS_LIST_UNKNOWN and data=[head,tail,other list items]
-    data = psListGet(list,PS_LIST_HEAD);
-    // Test requirement SDR-762
-    if ( (! psListRemoveData(list,data)) ||
-            (psListGet(list,PS_LIST_HEAD) == data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_UNKNOWN @ PS_LIST_HEAD");
-        return 1;
-    }
-
-    if (list->n != --items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
-        return 1;
-    }
-
-    psS32* data2 = psListGet(list,PS_LIST_TAIL);
-    psMemIncrRefCounter(data2);
-    if ( (!psListRemoveData(list,data2)) ||
-            (psListGet(list,PS_LIST_TAIL) == data2) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_UNKNOWN @ PS_LIST_TAIL");
-        return 1;
-    }
-
-    if (list->n != --items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
-        return 1;
-    }
-    // Test requirement SDR-176
-    if (psMemGetRefCounter(data2) != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListRemoveData didn't decrement the data reference count.");
-        return 20;
-    }
-    psMemDecrRefCounter(data2);
-
-    data = psListGet(list,1);
-    if ( (! psListRemoveData(list,data))||
-            (psListGet(list,1) == data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove data @ which=1");
-        return 1;
-    }
-
-    if (list->n != --items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
-        return 1;
-    }
-
-    // 8. data!=NULL and data!=any element in list
-    psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
-    // Test requirement SDR-764
-    if ( psListRemoveData(list,data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_UNKNOWN with previously removed item");
-        return 1;
-    }
-
-    if (list->n != items) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"size not %d, as expected.",items);
-        return 1;
-    }
-
-    // clear out the list
-    while (items > 1) {
-        psListRemove(list,PS_LIST_HEAD);
-        items--;
-    }
-
-    data = psListGet(list,PS_LIST_HEAD);
-    if ( (! psListRemove(list,PS_LIST_HEAD)) ||
-            (psListGet(list,PS_LIST_HEAD) == data) ) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Failed to remove last element");
-        return 1;
-    }
-
-    if (list->n != 0) {
-        printListInt(list);
-        psError(PS_ERR_UNKNOWN, true,"Didn't remove all the elements.");
-        return 1;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"NULL list in psListRemoveData should generate error message.");
-    if(psListRemoveData(NULL,data)) {
-        psError(PS_ERR_UNKNOWN,true,"psListRemoveData should have generated an error with NULL list");
-        return 2;
-    }
-
-    psFree(list);
-
-    return 0;
-
-}
-
-psS32 testListConvert(void)
-{
-
-    psList* list = NULL;
-    psArray* arr = NULL;
-    psS32* data;
-
-    /*
-        array=psListToArray(list) shall take each element of the list, increment
-        their reference, and insert them into the returned fresh psPtr array.
-        The list shall not be changed, except for the element reference increment.
-    */
-
-    // test dlist -> array
-
-    // create a list
-    list = psListAlloc(NULL);
-    for (psS32 lcv=0;lcv<15;lcv++) {
-        data = psAlloc(sizeof(psS32));
-        *data = lcv;
-        psListAdd(list,PS_LIST_TAIL,data);
-        psMemDecrRefCounter(data);
-    }
-
-    arr = psListToArray(list);
-
-    if (arr->n != 15 || list->n != 15) {
-        psError(PS_ERR_UNKNOWN, true,"The created array didn't have the proper size");
-        return 1;
-    }
-    for (psS32 i=0;i<arr->n;i++) {
-        if (i != *(psS32*)arr->data[i]) {
-            psError(PS_ERR_UNKNOWN, true,"Element %d of array is incorrect (%d).",
-                    i,*(psS32*)arr->data[i]);
-            return 1;
-        }
-        if (i != *(psS32*)psListGet(list,i)) {
-            psError(PS_ERR_UNKNOWN, true,"Element %d of list is incorrect (%d).",
-                    i,*(psS32*)arr->data[i]);
-            return 1;
-        }
-        if (psMemGetRefCounter(arr->data[i]) != 2) {
-            psError(PS_ERR_UNKNOWN, true,"Element %d had wrong reference count (%d).",
-                    i,psMemGetRefCounter(arr->data[i]));
-            return 1;
-        }
-    }
-
-    psFree(arr);
-    psFree(list);
-
-    // test array -> dlist
-
-    // create an array
-    arr = psArrayAlloc(15);
-    arr->n = arr->nalloc;
-    for (psS32 lcv=0;lcv<15;lcv++) {
-        data = psAlloc(sizeof(psS32));
-        *data = lcv;
-        arr->data[lcv] = data;
-    }
-
-    list = psArrayToList(arr);
-
-    if (arr->n != 15 || list->n != 15) {
-        psError(PS_ERR_UNKNOWN, true,"The created array didn't have the proper size");
-        return 1;
-    }
-    for (psS32 i=0;i<arr->n;i++) {
-        if (i != *(psS32*)arr->data[i]) {
-            psError(PS_ERR_UNKNOWN, true,"Element %d of array is incorrect (%d).",
-                    i,*(psS32*)arr->data[i]);
-            return 1;
-        }
-        if (i != *(psS32*)psListGet(list,i)) {
-            psError(PS_ERR_UNKNOWN, true,"Element %d of list is incorrect (%d).",
-                    i,*(psS32*)arr->data[i]);
-            return 1;
-        }
-        if (psMemGetRefCounter(arr->data[i]) != 2) {
-            psError(PS_ERR_UNKNOWN, true,"Element %d had wrong reference count (%d).",
-                    i,psMemGetRefCounter(arr->data[i]));
-            return 1;
-        }
-    }
-
-    psFree(arr);
-    psFree(list);
-
-    // now, make sure if input array/list is NULL, output is NULL
-
-    arr = psListToArray(NULL);
-    if (arr != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListToArray didn't return NULL when given NULL");
-        return 1;
-    }
-
-    list = psArrayToList(NULL);
-    if (list != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psArrayToList didn't return NULL when given NULL");
-        return 1;
-    }
-
-    // now, see what happens with a zero-size array/list
-    arr = psArrayAlloc(1);
-    arr->n = 0;
-    list = psArrayToList(arr);
-    if (list == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psArrayToList didn't create an empty list from an "
-                "empty array.");
-        return 1;
-    }
-    psFree(arr);
-    psFree(list);
-
-    list = psListAlloc(NULL);
-    arr = psListToArray(list);
-    if (arr == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psArrayToList didn't create an empty array from an "
-                "empty list.");
-        return 1;
-    }
-    psFree(arr);
-    psFree(list);
-
-    return 0;
-}
-
-psS32 testListIterator(void)
-{
-    psList* list = NULL;
-    psS32* data;
-
-    psLogMsg(__func__,PS_LOG_INFO," psListSetIterator/psListGetNext/psListGetPrev"
-             " shall move the list cursor to the specified location");
-
-    /*
-            psDlistSetIterator(list,where) shall:
-
-            1. output error message and do nothing if list=NULL
-            2. set list.cursor to list.head if where=PS_LIST_HEAD
-            3. set list.cursor to list.tail if where=PS_LIST_TAIL
-            4. set list.cursor to list.cursor->next if where=PS_LIST_NEXT
-            5. set list.cursor to list.cursor->prev if where=PS_LIST_PREV
-            6. leave list.cursor untouched if where=PS_LIST_UNKNOWN or PS_LIST_CURRENT
-
-            psDlistGetNext(list) shall be functionally equivalent to
-            psDlistSetIterator(list,PS_LIST_NEXT) but returns list.cursor.
-
-            psDlistGetPrev(list) shall be functionally equivalent to
-            psDlistSetIterator(list,PS_LIST_PREV) but returns list.cursor.
-    */
-
-    // create a list
-    list = psListAlloc(NULL);
-    for (psS32 lcv=0;lcv<15;lcv++) {
-        data = psAlloc(sizeof(psS32));
-        *data = lcv;
-        psListAdd(list,PS_LIST_TAIL,data);
-        psFree(data);
-    }
-
-    psListIterator* iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
-    if (iter == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"Failed to make an iterator.");
-        return 22;
-    }
-
-    // 1. output error message and do nothing if iterator=NULL
-    psListIteratorSet(NULL,PS_LIST_HEAD);
-    if (psListIteratorSet(NULL,PS_LIST_HEAD)) {
-        psError(PS_ERR_UNKNOWN, true,"Success while setting position of a NULL iterator?");
-        return 23;
-    }
-
-    // Attempt to get next with NULL iterator
-    if ( psListGetAndIncrement(NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL when NULL iterator specified");
-        return 24;
-    }
-
-    // Attempt to get previous with NULL iterator
-    if( psListGetAndDecrement(NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL when NULL iterator specified");
-        return 25;
-    }
-
-    // 3. set list.cursor to list.tail if where=PS_LIST_TAIL
-
-    if (!psListIteratorSet(iter,PS_LIST_TAIL) ||
-            *(psS32*)iter->cursor->data != 14 ||
-            iter->index != 14) {
-        psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to tail.");
-        return 1;
-    }
-
-    // 2. set list.cursor to list.head if where=PS_LIST_HEAD
-    if (!psListIteratorSet(iter,PS_LIST_HEAD) ||
-            *(psS32*)iter->cursor->data != 0 ||
-            iter->index != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to head.");
-        return 2;
-    }
-
-    // test psListGetPrevious/Next
-    if (*(psS32*)psListGetAndIncrement(iter) != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
-        return 8;
-    }
-    if (*(psS32*)psListGetAndIncrement(iter) != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
-        return 9;
-    }
-    if (*(psS32*)psListGetAndIncrement(iter) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
-        return 10;
-    }
-
-    if (*(psS32*)psListGetAndDecrement(iter) != 3) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous.");
-        return 11;
-    }
-    if (*(psS32*)psListGetAndDecrement(iter) != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous.");
-        return 12;
-    }
-    if (*(psS32*)psListGetAndDecrement(iter) != 1) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous..");
-        return 13;
-    }
-    if (*(psS32*)psListGetAndDecrement(iter) != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous..");
-        return 14;
-    }
-    if (psListGetAndDecrement(iter) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious moved cursor beyond head.");
-        return 15;
-    }
-    if (psListGetAndIncrement(iter) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psListGetNext should return NULL when above head");
-        return 22;
-    }
-    if (*(psS32*)psListGetAndIncrement(iter) != 0 ) {
-        psError(PS_ERR_UNKNOWN,true,"psListGetNext didn't move cursor to next.");
-        return 23;
-    }
-
-    psListIteratorSet(iter,PS_LIST_TAIL); // works according to an above test
-    if (*(psS32*)psListGetAndIncrement(iter) != 14) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetNext moved cursor beyond tail.");
-        return 16;
-    }
-    if ((psListGetAndIncrement(iter) != NULL) || (!iter->offEnd)) {
-        psError(PS_ERR_UNKNOWN, true,"psListGetNext moved cursor beyond tail.");
-        return 17;
-    }
-    if(psListGetAndDecrement(iter) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psListGetPrevious did not return NULL when offEnd is true");
-        return 18;
-    }
-    if(iter->offEnd) {
-        psError(PS_ERR_UNKNOWN,true,"psListGetPrevious did not move back onto the list.");
-        return 19;
-    }
-    if(*(psS32*)psListGetAndDecrement(iter) != 14) {
-        psError(PS_ERR_UNKNOWN,true,"psListGetPrevious did not return correct value of tail.");
-        return 20;
-    }
-
-    psFree(list);
-
-    return 0;
-}
-
-psS32 testListFree(void)
-{
-    float* data[15];
-    psList* list;
-
-    /*
-    Call psDlistAlloc to create a doubly linked list.
-
-    Create several data items and add them to the list.
-
-    Verify the data item's reference counter are incremented after adding to the list.
-    (not really needed, as psListAdd is tested elsewhere)
-    */
-
-    list = psListAlloc(NULL);
-    for (psS32 lcv=0;lcv<15;lcv++) {
-        data[lcv] = psAlloc(sizeof(psS32));
-        *data[lcv] = lcv;
-        psListAdd(list,PS_LIST_TAIL,data[lcv]);
-        if (psMemGetRefCounter(data[lcv]) != 2) {
-            psError(PS_ERR_UNKNOWN, true,"Reference counter for data was not incremented");
-            return 1;
-        }
-    }
-
-    /*
-    Verify items are within the list.
-    (not needed, as psListAdd is tested elsewhere, but check anyway.)
-    */
-    if (list->n != 15) {
-        psError(PS_ERR_UNKNOWN, true,"List wasn't populated as expected?");
-        return 2;
-    }
-
-    /*
-    Call psDlistFree with NULL specified as the elemFree function.
-    */
-
-    psFree(list);
-
-    /*
-    Verify the list is deallocated but not the data items.
-    (accomplished by checking for memory leaks)
-
-    Verify the data item's reference counters are decremented by one compared to when added to the list.
-    (technically, this could be accomplished by checking memory leaks too, but I checked anyway)
-    */
-
-    for (psS32 i=0;i<15;i++) {
-        if (psMemGetRefCounter(data[i]) != 1) {
-            psError(PS_ERR_UNKNOWN, true,"pslistFree didn't decrement the data item's reference counter");
-            return 3;
-        }
-        psFree(data[i]);
-    }
-
-    return 0;
-}
-
-psS32 testListSort(void)
-{
-    psList* list;
-    psListIterator* iter;
-    float* fValue;
-    psU32* uValue;
-
-    list = psListAlloc(NULL);
-
-    for (psS32 lcv=0;lcv<15;lcv++) {
-        float* data = psAlloc(sizeof(psS32));
-        if (lcv < 7) {
-            *data = 13-lcv*2;
-        } else {
-            *data = lcv*2-12;
-        }
-        psListAdd(list,PS_LIST_TAIL,data);
-        psFree(data);
-
-    }
-
-    printf("original list = [");
-    iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
-    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
-        printf(" %.1f",*fValue);
-    }
-    printf(" ]\n");
-
-    list = psListSort(list,psCompareF32Ptr);
-
-    printf("sorted list = [");
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
-        printf(" %.1f",*fValue);
-    }
-    printf(" ]\n");
-
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    float* prevFValue = psListGetAndIncrement(iter);
-    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
-        if (*prevFValue > *fValue) {
-            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
-            return 1;
-        }
-    }
-
-    list = psListSort(list,psCompareDescendingF32Ptr);
-
-    printf("descending sort list = [");
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
-        printf(" %.1f",*fValue);
-    }
-    printf(" ]\n");
-
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    prevFValue = psListGetAndIncrement(iter);
-    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
-        if (*prevFValue < *fValue) {
-            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
-            return 2;
-        }
-    }
-
-    psFree(list);
-
-    /********** OK, now do the same thing with ints. *************/
-
-    list = psListAlloc(NULL);
-
-    for (psS32 lcv=0;lcv<15;lcv++) {
-        psU32* data = psAlloc(sizeof(psS32));
-        if (lcv < 7) {
-            *data = 13-lcv*2;
-        } else {
-            *data = lcv*2-12;
-        }
-        psListAdd(list,PS_LIST_TAIL,data);
-        psFree(data);
-
-    }
-
-    printf("original list = [");
-    iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
-    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
-        printf(" %d",*uValue);
-    }
-    printf(" ]\n");
-
-    list = psListSort(list,psCompareU32Ptr);
-
-    printf("sorted list = [");
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
-        printf(" %d",*uValue);
-    }
-    printf(" ]\n");
-
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    psU32* prevUValue = psListGetAndIncrement(iter);
-    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
-        if (*prevUValue > *uValue) {
-            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
-            return 3;
-        }
-    }
-
-    list = psListSort(list,psCompareDescendingU32Ptr);
-
-    printf("descending sort list = [");
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
-        printf(" %d",*uValue);
-    }
-    printf(" ]\n");
-
-    psListIteratorSet(iter,PS_LIST_HEAD);
-    prevUValue = psListGetAndIncrement(iter);
-    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
-        if (*prevUValue < *uValue) {
-            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
-            return 4;
-        }
-    }
-
-    psFree(list);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadataIO.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadataIO.c	(revision 4546)
+++ 	(revision )
@@ -1,1021 +1,0 @@
-/** @file  tst_psMetadataIO.c
- *
- *  @brief Test driver for psMetadataIO functions
- *
- *  This test driver contains the following tests for psMetadata:
- *    Read config file with overwrite set true
- *    Read config file with overwrite set false
- *    Attempt to use null fileName argument
- *    Attempt to open nonexistant file
- *
- *  @author  Ross Harman, MHPCC
- *  @author  Robert DeSonia, MHPCC
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.20 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-07-06 03:04:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testMetadataParseConfig(void);
-static psS32 testMetadataParseConfig1(void);
-static psS32 testMetadataParseConfig2(void);
-static psS32 testMetadataParseConfig3(void);
-static psS32 testMetadataParseConfig4(void);
-
-testDescription tests[] = {
-                              {testMetadataParseConfig,000,"psMetadataConfigParse",0,false},
-                              {testMetadataParseConfig1,000,"psMetadataConfigParse",0,false},
-                              {testMetadataParseConfig2,000,"psMetadataConfigParse",0,false},
-                              {testMetadataParseConfig3,000,"psMetadataConfigParse",0,false},
-                              {testMetadataParseConfig4,000,"psMetadataConfigParse",0,false},
-                              {NULL}
-                          };
-
-static void writeMetadataItem(psMetadataItem* metadataIem, char* indentStr);
-static void writeMetadata(psMetadata* metadata, char* indentStr);
-static void writeMetadataList(psList *metadataItemList, char* indentStr);
-
-static psBool checkFailedLines(psS32 failedLines, psS32 expectedFailedLines, char* configFile);
-static psBool checkNumberOfItems(psMetadata* md, psS32 expectedItems, char* configFile);
-static psBool checkItemName(psMetadataItem* mdItem, char* expectedName, char* configFile);
-static psBool checkItemType(psMetadataItem* mdItem, psS32 expectedType, char* configFile);
-static psBool checkItemComment(psMetadataItem* mdItem, char* expectedComment, char* configFile);
-
-#define ERROR_TOL  0.0001
-
-const char testConfig5[] = "test5.config";
-const psS32 testConfig5Fails = 7;
-
-const char testConfig4[] = "test4.config";
-const psS32 testConfig4Fails = 0;
-
-const char testConfig3[] = "test3.config";
-const psS32 testConfig3Fails = 1;
-
-const char testConfig2[] = "test2.config";
-const psS32 testConfig2Fails = 17;
-
-// SDR-14 test config file #1
-const char  testConfig1[] = "test1.config";
-const psS32 testConfig1FailsOverwrite = 0;
-const psS32 testConfig1Fails = 1;
-const psS32 testConfig1Items = 25;
-const char* testConfig1KeyOverwrite[] =
-    {
-        "Double","String","boolean","primes","comment",
-        "comment","comment","comment","comment","Float",
-        "boolean1","negprimes","vector1","vector2","vector3",
-        "vector4","vector5","vector6","vector7","vector8",
-        "CELL.00", "CELL.01","MYCELL","MYCELL","cell"
-    };
-const char* testConfig1CommentOverwrite[] =
-    {
-        "This is a comment","comment","The value of 'boolean' is 'true'","These are prime numbers",
-        "","","","","",
-        "This generates a warning, and, if 'overwrite' is 'false', is ignored","The value of 'boolean' is 'false'",
-        "","","","","",
-        "","","","",
-        "","","","A number",""
-    };
-const psMetadataType testConfig1TypeOverwrite[] =
-    {
-        PS_META_F64, PS_META_STR, PS_META_BOOL, PS_META_VEC, PS_META_STR,
-        PS_META_STR, PS_META_STR, PS_META_STR, PS_META_STR,  PS_META_F64,
-        PS_META_BOOL, PS_META_VEC, PS_META_VEC, PS_META_VEC, PS_META_VEC,
-        PS_META_VEC, PS_META_VEC, PS_META_VEC, PS_META_VEC, PS_META_VEC,
-        PS_META_META, PS_META_META, PS_META_META, PS_META_S32, PS_META_META
-    };
-const psS32 testConfig1ValueS32Overwrite[] =
-    {
-        0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0,
-        0, 0, 0, 123, 0
-    };
-const psF32 testConfig1ValueF32Overwrite[] =
-    {
-        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, 0.0, 0.0, 0.0, 0.0,
-        0.0, 0.0, 0.0, 0.0, 0.0
-    };
-const psF64 testConfig1ValueF64Overwrite[] =
-    {
-        1.23456789, 0.0, 0.0, 0.0, 0.0,
-        0.0, 0.0, 0.0, 0.0, 1.23456,
-        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
-    };
-const psBool testConfig1ValueBoolOverwrite[] =
-    {
-        false, false, true, false, false,
-        false, false, false, false, false,
-        false, false, false, false, false,
-        false, false, false, false, false,
-        false, false, false, false, false
-    };
-const char* testConfig1ValueStrOverwrite[] =
-    {
-        "", "This is the string that forms the value","","","This",
-        "is","a","non-unique","key","",
-        "","","","","",
-        "","","","","",
-        "","","","",""
-    };
-const psS32 testConfig1ValueVecItemsU8 = 7;
-const psElemType testConfig1ValueVecTypeU8 = PS_TYPE_U8;
-const psU8 testConfig1ValueVecValueU8[] =
-    {
-        2, 3, 5, 7, 11, 13, 17
-    };
-const psS32 testConfig1ValueVecItemsS8 = 8;
-const psElemType testConfig1ValueVecTypeS8 = PS_TYPE_S8;
-const psS8 testConfig1ValueVecValueS8[] =
-    {
-        -2, -3, -5, -7, -11, -13, -17, -19
-    };
-const psS32 testConfig1ValueVecItemsU16 = 5;
-const psElemType testConfig1ValueVecTypeU16 = PS_TYPE_U16;
-const psU16 testConfig1ValueVecValueU16[] =
-    {
-        0, 1, 2, 4, 8
-    };
-const psS32 testConfig1ValueVecItemsU32 = 6;
-const psElemType testConfig1ValueVecTypeU32 = PS_TYPE_U32;
-const psU32 testConfig1ValueVecValueU32[] =
-    {
-        0, 8, 16, 32, 64, 128
-    };
-const psS32 testConfig1ValueVecItemsU64 = 3;
-const psElemType testConfig1ValueVecTypeU64 = PS_TYPE_U64;
-const psU64 testConfig1ValueVecValueU64[] =
-    {
-        0, 64, 256
-    };
-const psS32 testConfig1ValueVecItemsS16 = 5;
-const psElemType testConfig1ValueVecTypeS16 = PS_TYPE_S16;
-const psS16 testConfig1ValueVecValueS16[] =
-    {
-        -2, -1, 0, 1, 2
-    };
-const psS32 testConfig1ValueVecItemsS32 = 6;
-const psElemType testConfig1ValueVecTypeS32 = PS_TYPE_S32;
-const psS32 testConfig1ValueVecValueS32[] =
-    {
-        -4, -2, 0, 2, 4, 6
-    };
-const psS32 testConfig1ValueVecItemsS64 = 7;
-const psElemType testConfig1ValueVecTypeS64 = PS_TYPE_S64;
-const psS64 testConfig1ValueVecValueS64[] =
-    {
-        -16, -4, 0, 4, 16, 36, 64
-    };
-const psS32 testConfig1ValueVecItemsF32 = 4;
-const psElemType testConfig1ValueVecTypeF32 = PS_TYPE_F32;
-const psF32 testConfig1ValueVecValueF32[] =
-    {
-        -1.03, 1.04, -1.05, 1.06
-    };
-const psS32 testConfig1ValueVecItemsF64 = 5;
-const psElemType testConfig1ValueVecTypeF64 = PS_TYPE_F64;
-const psF64 testConfig1ValueVecValueF64[] =
-    {
-        -2.22, 2.21, -2.20, 2.19, -2.18
-    };
-const psS32 testConfig1ValueMetaItems1 = 3;
-const char* testConfig1ValueMetaNames1[] =
-    {
-        "EXTNAME","BIASSEC","CHIP"
-    };
-const psMetadataType testConfig1ValueMetaTypes1[] =
-    {
-        PS_META_STR, PS_META_STR, PS_META_STR
-    };
-const char* testConfig1ValueMetaValue1[] =
-    {
-        "CCD00","BSEC-00","CHIP.00"
-    };
-const psS32 testConfig1ValueMetaItems2 = 3;
-const char* testConfig1ValueMetaNames2[] =
-    {
-        "EXTNAME","BIASSEC","CHIP"
-    };
-const psMetadataType testConfig1ValueMetaTypes2[] =
-    {
-        PS_META_STR, PS_META_STR, PS_META_STR
-    };
-const char* testConfig1ValueMetaValue2[] =
-    {
-        "CCD01","BSEC-01","CHIP.00"
-    };
-const psS32 testConfig1ValueMetaItems3 = 4;
-const char* testConfig1ValueMetaNames3[] =
-    {
-        "EXTNAME","BIASSEC","CHIP","NCELL"
-    };
-const psMetadataType testConfig1ValueMetaTypes3[] =
-    {
-        PS_META_STR, PS_META_STR, PS_META_STR, PS_META_S32
-    };
-const char* testConfig1ValueMetaValueStr3[] =
-    {
-        "CCD00","BSEC-00","CHIP.00",""
-    };
-const psS32 testConfig1ValueMetaValueS323[] =
-    {
-        0, 0, 0, 24
-    };
-
-static void writeMetadata(psMetadata* metadata, char* indentStr)
-{
-    writeMetadataList(metadata->list, indentStr);
-}
-
-static void writeMetadataList(psList* metadataItemList, char* indentStr)
-{
-    psMetadataItem* entryChild        = NULL;
-    psMetadataItem* searchChild       = NULL;
-    psArray*        nonUniqueKeyArray = NULL;
-    psBool          keyFound          = false;
-    char*           tempKey           = NULL;
-
-    // Allocate iterator for moving through metadata list
-    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
-    psListIterator* searchIter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
-
-    // Allocate array for nonUnique key names
-    nonUniqueKeyArray = psArrayAlloc(10);
-    nonUniqueKeyArray->n = 0;
-
-
-    // Loop through all items in the list
-    while ( (entryChild = psListGetAndIncrement(iter)) != NULL) {
-        // Search list for another entry with same key name
-        // Check if last entry
-        if(iter->index != metadataItemList->n) {
-            // Set search iterator to index
-            if(!psListIteratorSet(searchIter,iter->index) ) {
-                psError(PS_ERR_UNKNOWN,true,"Error searching list for multiple keys");
-                break;
-            }
-            keyFound = false;
-            while ( (searchChild = psListGetAndIncrement(searchIter)) != NULL) {
-                if(strcmp(entryChild->name,searchChild->name) == 0) {
-                    // Search nonUnique key array
-                    for(psS32 i = 0; i < nonUniqueKeyArray->n; i++) {
-                        if(strcmp(entryChild->name,nonUniqueKeyArray->data[i]) == 0) {
-                            keyFound = true;
-                        }
-                    }
-                    if(!keyFound) {
-                        // Add key to non-unique array
-                        tempKey = psStringCopy(entryChild->name);
-                        nonUniqueKeyArray = psArrayAdd(nonUniqueKeyArray,1,tempKey);
-                        psFree(tempKey);
-
-                        // Print MULTI line
-                        printf("%-25s MULTI\n",entryChild->name);
-
-                        // Break out of loop
-                        break;
-                    }
-                }
-            }
-        }
-        writeMetadataItem(entryChild,indentStr);
-    }
-
-    psFree(iter);
-    psFree(searchIter);
-    psFree(nonUniqueKeyArray);
-}
-
-char* vectorToConfigString(psVector* vector)
-{
-    psS32  maxLength = 256;
-
-    char* str = psAlloc(sizeof(char)*maxLength+1);
-
-    if (vector == NULL) {
-        snprintf(str,maxLength, "NULL");
-        return str;
-    }
-
-    int size = vector->n;
-
-    if (size == 0) {
-        snprintf(str,maxLength, " ");
-        return str;
-    }
-
-    char* tempStr = psAlloc(sizeof(char)*maxLength+1);
-    *str = '\0';
-    bool full = false;
-
-    #define APPEND_ELEMENTS_CASE(TYPE, NATIVE_TYPE, FORMAT) \
-case PS_TYPE_##TYPE: \
-    strcat(str,#TYPE); \
-    for(psS32 i = 0; i < (strlen(str)-6); i++) {  \
-        strcat(str," "); \
-    } \
-    for (lcv=0; lcv < size && ! full; lcv++) { \
-        snprintf(tempStr, maxLength, "%s" FORMAT, prefix, (NATIVE_TYPE) (vector->data.TYPE[lcv])); \
-        strncat(str,tempStr,maxLength); \
-        full = (strlen(str) > maxLength-2); \
-        prefix = ","; \
-    } \
-    break;
-
-    int lcv;
-    char* prefix = " ";
-    switch(vector->type.type) {
-        APPEND_ELEMENTS_CASE(S8,char,"%hd")
-        APPEND_ELEMENTS_CASE(S16,short int,"%hd")
-        APPEND_ELEMENTS_CASE(S32,int,"%d")
-        APPEND_ELEMENTS_CASE(S64,long,"%ld")
-        APPEND_ELEMENTS_CASE(U8,unsigned char,"%hu")
-        APPEND_ELEMENTS_CASE(U16,unsigned short,"%hu")
-        APPEND_ELEMENTS_CASE(U32,unsigned int, "%u")
-        APPEND_ELEMENTS_CASE(U64,unsigned long,"%lu")
-        APPEND_ELEMENTS_CASE(F32,double,"%g")
-        APPEND_ELEMENTS_CASE(F64,double,"%g")
-    default:
-        snprintf(str,maxLength,"INVALID TYPE");
-        break;
-    }
-
-    psFree(tempStr);
-
-    return str;
-}
-
-
-static void writeMetadataItem(psMetadataItem *metadataItem, char* indentStr)
-{
-    char*  vecStr;
-
-    switch(metadataItem->type) {
-    case PS_META_BOOL:
-        printf("%s%-25s BOOL  %40d",indentStr,metadataItem->name,metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("%s%-25s S32   %40d",indentStr,metadataItem->name,metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("%s%-25s F32   %40f",indentStr,metadataItem->name,metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("%s%-25s F64   %40lf",indentStr,metadataItem->name,metadataItem->data.F64);
-        break;
-    case PS_META_VEC:
-        vecStr = (char*)vectorToConfigString((psVector*)metadataItem->data.V);
-        printf("%s@%-24s %s",indentStr,metadataItem->name,vecStr);
-        psFree(vecStr);
-        break;
-    case PS_META_STR:
-        printf("%s%-25s STR   %40s",indentStr,metadataItem->name,(char*)metadataItem->data.V);
-        break;
-    case PS_META_META:
-        printf("%s%-25s METADATA\n",indentStr,metadataItem->name);
-        char nestedStr[256] = "    ";
-        strcat(nestedStr,indentStr);
-        writeMetadata((psMetadata*)metadataItem->data.md,nestedStr);
-        printf("%sEND",indentStr);
-        break;
-    default:
-        printf("#%s%-24s BAD TYPE=%d",indentStr,metadataItem->name,metadataItem->type);
-        break;
-    }
-    if(strlen(metadataItem->comment) > 0) {
-        printf("  # %-20s\n",metadataItem->comment);
-    } else {
-        printf("\n");
-    }
-}
-
-static psBool checkFailedLines(psS32 failedLines, psS32 expectedFailedLines, char* configFile)
-{
-    psBool     returnValue = true;
-
-    // Verify the expected number of failed lines
-    if(failedLines != expectedFailedLines) {
-        psError(PS_ERR_UNKNOWN,true,"File: %s : Number of failed lines = %d not as expected %d",
-                configFile,failedLines,expectedFailedLines);
-        returnValue = false;
-    }
-    return returnValue;
-}
-
-static psBool checkNumberOfItems(psMetadata* md, psS32 expectedItems, char* configFile)
-{
-    psBool     returnValue = true;
-
-    // Verify the number of items in metadata
-    if(md->list->n != expectedItems) {
-        psError(PS_ERR_UNKNOWN,true,"File: %s : Number of items = %d not as expected %d",
-                configFile,md->list->n, expectedItems);
-        returnValue = false;
-    }
-    return returnValue;
-}
-
-static psBool checkItemName(psMetadataItem* mdItem, char* expectedName, char* configFile)
-{
-    psBool    returnValue = true;
-
-    // Compare key names
-    if(strcmp(mdItem->name,expectedName) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"File: %s : Key name %s not as expected %s",
-                configFile,mdItem->name,expectedName);
-        returnValue = false;
-    }
-
-    return returnValue;
-}
-
-static psBool checkItemType(psMetadataItem* mdItem, psS32 expectedType, char* configFile)
-{
-    psBool     returnValue = true;
-
-    // Compare types
-    if(mdItem->type != expectedType) {
-        psError(PS_ERR_UNKNOWN,true,"File: %s : Type %d not as expected %d",
-                configFile,mdItem->type,expectedType);
-        returnValue = false;
-    }
-    return returnValue;
-}
-
-static psBool checkItemComment(psMetadataItem* mdItem, char* expectedComment, char* configFile)
-{
-    psBool    returnValue = true;
-
-    // Compare comments
-    if(strcmp(mdItem->comment,expectedComment) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"File: %s : Comment %s not as expected %s",
-                configFile,mdItem->comment,expectedComment);
-        returnValue = false;
-    }
-    return returnValue;
-}
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if( !runTestSuite(stderr,"psMetadataConfigParse",tests,argc,argv)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-psS32 testMetadataParseConfig(void)
-{
-    psMetadata*       metadata1      = NULL;
-    psMetadataItem*   entryChild     = NULL;
-    psU32             failedLines    = 0;
-    psListIterator*   iter           = NULL;
-    psListIterator*   mdIter         = NULL;
-    psMetadataItem*   mdChild        = NULL;
-    psS32             metaCounter    = 0;
-    psS32             mdCounter      = 0;
-
-    // Read config file test1.config with overwrite set true
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig1,true);
-    // Verify the expected number of failed lines
-    if(!checkFailedLines(failedLines,testConfig1FailsOverwrite,(char*)testConfig1)) {
-        return 1;
-    }
-    // Verify the number of items in metadata
-    if(!checkNumberOfItems(metadata1,testConfig1Items,(char*)testConfig1)) {
-        return 2;
-    }
-    // Verify metadata item quads
-    iter = psListIteratorAlloc(metadata1->list, PS_LIST_HEAD, true);
-    for(psS32 i = 0; i < testConfig1Items; i++) {
-        // Get list item
-        entryChild = psListGetAndIncrement(iter);
-
-        // Verify end of list not reached prematurely
-        if(entryChild == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"End of list encountered at %d not as expected %d",
-                    i,testConfig1Items);
-            return i*10+1;
-        }
-        // Verify name
-        if(!checkItemName(entryChild,(char*)testConfig1KeyOverwrite[i],(char*)testConfig1)) {
-            return i*10+2;
-        }
-        // Verify type
-        if(!checkItemType(entryChild,testConfig1TypeOverwrite[i],(char*)testConfig1)) {
-            return i*10+3;
-        }
-        // Verify comment
-        if(!checkItemComment(entryChild,(char*)testConfig1CommentOverwrite[i],(char*)testConfig1)) {
-            return i*10+4;
-        }
-        // Compare values
-        switch(entryChild->type) {
-        case PS_META_S32:
-            if(entryChild->data.S32 != testConfig1ValueS32Overwrite[i]) {
-                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %d not as expected %d",
-                        testConfig1,entryChild->data.S32, testConfig1ValueS32Overwrite[i]);
-                return i*10+5;
-            }
-            break;
-        case PS_META_F32:
-            if(fabs(entryChild->data.F32 - testConfig1ValueF32Overwrite[i]) > ERROR_TOL) {
-                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %f not as expected %f",
-                        testConfig1,entryChild->data.F32, testConfig1ValueF32Overwrite[i]);
-                return i*10+5;
-            }
-            break;
-        case PS_META_F64:
-            if(fabs(entryChild->data.F64 - testConfig1ValueF64Overwrite[i]) > ERROR_TOL) {
-                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %lf not as expected %lf",
-                        testConfig1,entryChild->data.F64, testConfig1ValueF64Overwrite[i]);
-                return i*10+5;
-            }
-            break;
-        case PS_META_BOOL:
-            if(entryChild->data.B != testConfig1ValueBoolOverwrite[i]) {
-                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %d not as expected %d",
-                        testConfig1,entryChild->data.B,testConfig1ValueBoolOverwrite[i]);
-                return i*10+5;
-            }
-            break;
-        case PS_META_STR:
-            if(strcmp(entryChild->data.V,testConfig1ValueStrOverwrite[i]) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %s not as expected %s",
-                        testConfig1,entryChild->data.V,testConfig1ValueStrOverwrite[i]);
-                return i*10+5;
-            }
-            break;
-        case PS_META_VEC:
-            // Verify the correct number of entries
-            switch(((psVector*)(entryChild->data.V))->type.type) {
-            case PS_TYPE_U8:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU8) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU8);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU8) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU8);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsU8; j++) {
-                    if(((psVector*)entryChild->data.V)->data.U8[j] != testConfig1ValueVecValueU8[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.U8[j],
-                                testConfig1ValueVecValueU8[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_U16:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU16) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU16);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU16) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU16);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsU16; j++) {
-                    if(((psVector*)entryChild->data.V)->data.U16[j] != testConfig1ValueVecValueU16[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.U16[j],
-                                testConfig1ValueVecValueU16[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_U32:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU32) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU32);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU32) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU32);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsU32; j++) {
-                    if(((psVector*)entryChild->data.V)->data.U32[j] != testConfig1ValueVecValueU32[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.U32[j],
-                                testConfig1ValueVecValueU32[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_U64:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU64) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU64);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU64) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU64);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsU64; j++) {
-                    if(((psVector*)entryChild->data.V)->data.U64[j] != testConfig1ValueVecValueU64[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %ld not as expected %ld",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.U64[j],
-                                testConfig1ValueVecValueU64[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_S8:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS8) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS8);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS8) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS8);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsS8; j++) {
-                    if(((psVector*)entryChild->data.V)->data.S8[j] != testConfig1ValueVecValueS8[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.S8[j],
-                                testConfig1ValueVecValueS8[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_S16:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS16) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS16);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS16) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS16);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsS16; j++) {
-                    if(((psVector*)entryChild->data.V)->data.S16[j] != testConfig1ValueVecValueS16[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.S16[j],
-                                testConfig1ValueVecValueS16[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_S32:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS32) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS32);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS32) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS32);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsS32; j++) {
-                    if(((psVector*)entryChild->data.V)->data.S32[j] != testConfig1ValueVecValueS32[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.S32[j],
-                                testConfig1ValueVecValueS32[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_S64:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS64) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS64);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS64) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS64);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsS64; j++) {
-                    if(((psVector*)entryChild->data.V)->data.S64[j] != testConfig1ValueVecValueS64[j]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %ld not as expected %ld",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.S64[j],
-                                testConfig1ValueVecValueS64[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_F32:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsF32) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsF32);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeF32) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeF32);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsF32; j++) {
-                    if(fabs(((psVector*)entryChild->data.V)->data.F32[j]-testConfig1ValueVecValueF32[j])
-                            > ERROR_TOL) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %f not as expected %f",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.F32[j],
-                                testConfig1ValueVecValueF32[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            case PS_TYPE_F64:
-                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsF64) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
-                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsF64);
-                    return i*10+5;
-                }
-                // Verify the correct type
-                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeF64) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
-                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeF64);
-                    return i*10+5;
-                }
-                // Verify the values in vector
-                for(psS32 j = 0; j < testConfig1ValueVecItemsF64; j++) {
-                    if(fabs(((psVector*)entryChild->data.V)->data.F64[j]-testConfig1ValueVecValueF64[j])
-                            > ERROR_TOL) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %lf not as expected %lf",
-                                testConfig1,j,((psVector*)entryChild->data.V)->data.F64[j],
-                                testConfig1ValueVecValueF64[j]);
-                        return i*10+5*j;
-                    }
-                }
-                break;
-            default:
-                break;
-            }
-            break;
-        case PS_META_META:
-            if(metaCounter == 0) {
-                // Check if number of items is as expected
-                if(entryChild->data.md->list->n != testConfig1ValueMetaItems1) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 items %d not as expected %d",
-                            testConfig1,entryChild->data.md->list->n,testConfig1ValueMetaItems1);
-                    return i*10+6;
-                }
-                // Loop through metadata items
-                mdIter = psListIteratorAlloc(entryChild->data.md->list, PS_LIST_HEAD, true);
-                mdCounter = 0;
-                while ( (mdChild = psListGetAndIncrement(mdIter)) != NULL) {
-                    if(strcmp(mdChild->name,testConfig1ValueMetaNames1[mdCounter]) != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 name[%d] %s not as expected %s",
-                                testConfig1,mdCounter,mdChild->name,testConfig1ValueMetaNames1[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    if(mdChild->type != testConfig1ValueMetaTypes1[mdCounter]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 type[%d] %d not as expected %d",
-                                testConfig1,mdCounter,mdChild->type,testConfig1ValueMetaTypes1[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    if(strcmp((char*)mdChild->data.V,testConfig1ValueMetaValue1[mdCounter]) != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 value[%d] %s not as expected %s",
-                                testConfig1,mdCounter,(char*)mdChild->data.V,testConfig1ValueMetaValue1[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    mdCounter++;
-                }
-                psFree(mdIter);
-            } else if(metaCounter == 1) {
-                // Check if number of items is as expected
-                if(entryChild->data.md->list->n != testConfig1ValueMetaItems2) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 items %d not as expected %d",
-                            testConfig1,entryChild->data.md->list->n,testConfig1ValueMetaItems2);
-                    return i*10+6;
-                }
-                // Loop through metadata items
-                mdIter = psListIteratorAlloc(entryChild->data.md->list, PS_LIST_HEAD, true);
-                mdCounter = 0;
-                while ( (mdChild = psListGetAndIncrement(mdIter)) != NULL) {
-                    if(strcmp(mdChild->name,testConfig1ValueMetaNames2[mdCounter]) != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 name[%d] %s not as expected %s",
-                                testConfig1,mdCounter,mdChild->name,testConfig1ValueMetaNames2[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    if(mdChild->type != testConfig1ValueMetaTypes2[mdCounter]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 type[%d] %d not as expected %d",
-                                testConfig1,mdCounter,mdChild->type,testConfig1ValueMetaTypes2[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    if(strcmp((char*)mdChild->data.V,testConfig1ValueMetaValue2[mdCounter]) != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 value[%d] %s not as expected %s",
-                                testConfig1,mdCounter,(char*)mdChild->data.V,testConfig1ValueMetaValue2[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    mdCounter++;
-                }
-                psFree(mdIter);
-            } else if(metaCounter == 2) {
-                // Check if number of items is as expected
-                if(entryChild->data.md->list->n != testConfig1ValueMetaItems3) {
-                    psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 items %d not as expected %d",
-                            testConfig1,entryChild->data.md->list->n,testConfig1ValueMetaItems3);
-                    return i*10+6;
-                }
-                // Loop through metadata items
-                mdIter = psListIteratorAlloc(entryChild->data.md->list, PS_LIST_HEAD, true);
-                mdCounter = 0;
-                while ( (mdChild = psListGetAndIncrement(mdIter)) != NULL) {
-                    if(strcmp(mdChild->name,testConfig1ValueMetaNames3[mdCounter]) != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 name[%d] %s not as expected %s",
-                                testConfig1,mdCounter,mdChild->name,testConfig1ValueMetaNames3[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    if(mdChild->type != testConfig1ValueMetaTypes3[mdCounter]) {
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 type[%d] %d not as expected %d",
-                                testConfig1,mdCounter,mdChild->type,testConfig1ValueMetaTypes3[mdCounter]);
-                        return i*10+6*mdCounter;
-                    }
-                    switch(mdChild->type) {
-                    case PS_META_STR:
-                        if(strcmp((char*)mdChild->data.V,testConfig1ValueMetaValueStr3[mdCounter]) != 0) {
-                            psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 value[%d] %s not as expected %s",
-                                    testConfig1,mdCounter,(char*)mdChild->data.V,
-                                    testConfig1ValueMetaValueStr3[mdCounter]);
-                            return i*10+6*mdCounter;
-                        }
-                        break;
-                    case PS_META_S32:
-                        if(mdChild->data.S32 != testConfig1ValueMetaValueS323[mdCounter]) {
-                            psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 value[%d] %d not as expected %d",
-                                    testConfig1,mdCounter,mdChild->data.S32,
-                                    testConfig1ValueMetaValueS323[mdCounter]);
-                            return i*10+6*mdCounter;
-                        }
-                        break;
-                    default:
-                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 value[%d] unknown type",
-                                testConfig1,mdCounter);
-                        return i*10+6*mdCounter;
-                        break;
-                    }
-                    mdCounter++;
-                }
-                psFree(mdIter);
-            }
-            metaCounter++;
-            break;
-        default:
-            psError(PS_ERR_UNKNOWN,true,"Unexpected type %d encountered",entryChild->type);
-            return i*10+5;
-            break;
-        }
-    }
-
-    writeMetadata(metadata1,"");
-
-    psFree(metadata1);
-
-    return 0;
-}
-
-psS32 testMetadataParseConfig1(void)
-{
-    psMetadata*       metadata1      = NULL;
-    psU32             failedLines    = 0;
-
-    // Read config file test2.config with overwrite set true
-    // This file contains parse errors
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate parse error message");
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig2,true);
-    // Verify the expected number of failed lines
-    if(!checkFailedLines(failedLines,testConfig2Fails,(char*)testConfig2)) {
-        return 1;
-    }
-    // Verify return value is null
-    if(metadata1 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expected a NULL return for failed parse");
-        return 2;
-    }
-    psFree(metadata1);
-
-    // Attempt parse a non-existant file
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,"ab.config",true);
-    if(metadata1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected a NULL return for non-existant file");
-        return 3;
-    }
-
-    // Attempt parse with NULL failed lines ptr
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL failed lines arg");
-    metadata1 = psMetadataConfigParse(metadata1,NULL,testConfig2,true);
-    if(metadata1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected a NULL return for NULL failed lines argument");
-        return 4;
-    }
-
-    // Attempt parse with NULL file name
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL file name arg");
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,NULL,true);
-    if(metadata1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected a NULL return for NULL filename argument");
-        return 5;
-    }
-
-    psFree(metadata1);
-
-    return 0;
-}
-
-psS32 testMetadataParseConfig2(void)
-{
-    psMetadata*       metadata1      = NULL;
-    psU32             failedLines    = 0;
-
-    // Read config file test3.config with overwrite set false
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error of duplicate key names");
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig3,false);
-    // Verify the expected number of failed lines
-    if(!checkFailedLines(failedLines,testConfig3Fails,(char*)testConfig3)) {
-        return 1;
-    }
-    if(metadata1 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expected a NULL return for failed due to overwrite false");
-        return 2;
-    }
-    psFree(metadata1);
-
-    return 0;
-}
-
-psS32 testMetadataParseConfig3(void)
-{
-    psMetadata*       metadata1      = NULL;
-    psU32             failedLines    = 0;
-
-    // Read config file test4.config with overwrite set false
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig4,false);
-    // Verify the expected number of failed lines
-    if(!checkFailedLines(failedLines,testConfig4Fails,(char*)testConfig4)) {
-        return 1;
-    }
-    // Print out metadata items for comparison against STDERR verified file
-    writeMetadata(metadata1,"");
-
-    psFree(metadata1);
-
-    return 0;
-}
-
-psS32 testMetadataParseConfig4(void)
-{
-    psMetadata*       metadata1      = NULL;
-    psU32             failedLines    = 0;
-
-    // Read config file test4.config with overwrite set false
-    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig5,true);
-    // Verify the expected number of failed lines
-    if(!checkFailedLines(failedLines,testConfig5Fails,(char*)testConfig5)) {
-        return 1;
-    }
-    psFree(metadata1);
-
-    return 0;
-}
-
Index: unk/psLib/test/collections/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_01.c	(revision 4546)
+++ 	(revision )
@@ -1,259 +1,0 @@
-/** @file  tst_psMetadata_01.c
-*
-*  @brief Test driver for psMetadata functions
-*
-*  This test driver contains the following tests for psMetadata:
-*     Test A - Read 1st hdr from simple FITS file
-*     Test B - Read 2nd hdr from complex FITS file
-*     Test C - Read named hdr from complex FITS file
-*     Test D - Remove items with same name from all metadata
-*     Test E - Attempt to use null file descriptor
-*     Test F - Attempt to open nonexistant file
-*     Test G - Attempt to use two null inputs
-*     Test H - Attempt to use bad extNum
-*     Test I - Attempt to use bad extNameTest
-*     Test J - Read named hdr w/ invalid extnum
-*     Test K - Free psMetadata
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.26 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-07-06 03:04:35 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
-static void printMetadata(psMetadata *metadata);
-static void printMetadataList(psList *metadataItemList, char* spaces);
-static void printMetadataTable(psHash *mdTable);
-
-static void printMetadata(psMetadata *metadata)
-{
-    printf("Contents of metadata list:\n");
-    printMetadataList(metadata->list, " ");
-    printf("\nContents of metadata table:\n");
-    printMetadataTable(metadata->table);
-}
-
-static void printMetadataList(psList *metadataItemList, char* spaces)
-{
-    psMetadataItem *entryChild = NULL;
-
-    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
-
-    while ( (entryChild=psListGetAndIncrement(iter)) != NULL) {
-        printMetadataItem(entryChild, spaces);
-    }
-
-    psFree(iter);
-
-}
-
-static void printMetadataTable(psHash *mdTable)
-{
-    psS32 i;
-    psHashBucket* ptr = NULL;
-    for(i=0; i<mdTable->n; i++) {
-        ptr = mdTable->buckets[i];
-        while (ptr != NULL) {
-            printMetadataItem(ptr->data, " ");
-            ptr = ptr->next;
-        }
-    }
-}
-
-static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
-{
-    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
-
-    switch (metadataItem->type) {
-    case PS_META_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_META_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
-    }
-    printf("Key Comment: %s\n", metadataItem->comment);
-
-    if(metadataItem->data.V && metadataItem->type==PS_META_MULTI) {
-        printMetadataList(metadataItem->data.V, "    ");
-    }
-}
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psMetadata *metadata1 = NULL;
-    psMetadata *metadata2 = NULL;
-    psMetadata *metadata3 = NULL;
-
-
-    // Test A - Read 1st hdr from simple FITS file
-
-    /* Header contents for header_1.fits:
-
-        SIMPLE  =                    T / file does conform to FITS standard
-        BITPIX  =                    8 / number of bits per data pixel
-        NAXIS   =                    0 / number of data axes
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18
-        END
-    */
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file");
-    metadata1 = psMetadataReadHeader(metadata1, NULL, 1, "header_1.fits");
-    printMetadata(metadata1);
-    printFooter(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file", true);
-
-    // Test B - Read 2nd hdr from complex FITS file
-
-    /* Header contents for header_2.fits:
-
-        SIMPLE  =                    T / file does conform to FITS standard
-        BITPIX  =                  -64 / number of bits per data pixel
-        NAXIS   =                    1 / number of data axes
-        NAXIS1  =                   64 / length of data axis 1
-        EXTEND  =                    T / FITS dataset may contain extensions
-        COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
-        COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
-        END
-        <DATA>
-
-        XTENSION= 'IMAGE   '           / IMAGE extension
-        BITPIX  =                  -64 / number of bits per data pixel
-        NAXIS   =                    1 / number of data axes
-        NAXIS1  =                   64 / length of data axis 1
-        PCOUNT  =                    0 / required keyword; must = 0
-        GCOUNT  =                    1 / required keyword; must = 1
-        BITPIX  =                  -64 / number of bits per data pixel
-        EXTNAME = 'MY_DATA_1'
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46
-        END
-        <DATA>
-
-        XTENSION= 'IMAGE   '           / IMAGE extension
-        BITPIX  =                  -64 / number of bits per data pixel
-        NAXIS   =                    1 / number of data axes
-        NAXIS1  =                   64 / length of data axis 1
-        PCOUNT  =                    0 / required keyword; must = 0
-        GCOUNT  =                    1 / required keyword; must = 1
-        EXTNAME = 'MY_DATA_2'
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52
-        END
-        <DATA>
-    */
-    printPositiveTestHeader(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file");
-    metadata2 = psMetadataReadHeader(metadata2, NULL, 2, "header_2.fits");
-    printMetadata(metadata2);
-    printFooter(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file", true);
-
-    // Test C - Read named hdr from complex FITS file
-    printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
-    metadata3 = psMetadataReadHeader(metadata3, "MY_DATA_2", -1, "header_2.fits");
-    printMetadata(metadata3);
-    printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
-
-
-    // Test D - Remove items with same name from all metadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test D - Remove items with same name from all metadata");
-    printf("Removed HISTORY from all metadata from prior test. Resulting metadata:\n\n");
-    psMetadataRemove(metadata3, 0, "HISTORY");
-    printMetadata(metadata3);
-    printFooter(stdout, "psMetadata", "Test D - Remove items with same name from all metadata", true);
-
-
-    // Test E - Attempt to use null file filename
-    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to use null filename",
-                            "Null fileName not allowed", 0);
-    psMetadataReadHeader(NULL, NULL, 1, NULL);
-    printFooter(stdout, "psMetadata", "Test E - Attempt to use null filename", true);
-
-
-    // Test F - Attempt to open nonexistant file
-    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to open nonexistant file",
-                            "FITS error while opening file: missing.dat...Couldn't close FITS file...", 0);
-    psMetadataReadHeader(NULL, NULL, 1, "missing.dat");
-    printFooter(stdout, "psMetadata", "Test F - Attempt to open nonexistant file", true);
-
-
-    // Test G - Attempt to use two null inputs
-    printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use two null inputs",
-                            "Null extName and extNum = 0 not allowed", 0);
-    psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
-    printFooter(stdout, "psMetadata", "Test G - Attempt to use two null inputs", true);
-
-
-    // Test H - Attempt to use bad extNum
-    printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use bad extNum",
-                            "FITS error while locating header 22: tried to move past end of file", 0);
-    metadata1 = psMetadataReadHeader(metadata1, NULL, 22, "header_2.fits");
-    if (metadata1 != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null when invalid ext given.");
-        return 10;
-    }
-    printFooter(stdout, "psMetadata", "Test H - Attempt to use bad extNum", true);
-
-
-    // Test I - Attempt to use bad extName
-    printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use bad extName",
-                            "FITS error while locating header AARGH: illegal HDU number", 0);
-    metadata1 = psMetadataReadHeader(NULL, "AARGH", -1, "header_2.fits");
-    if (metadata1 != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null invalid extname give.");
-        return 11;
-    }
-    printFooter(stdout, "psMetadata", "Test I - Attempt to use bad extName", true);
-
-
-    // Test J - Read named hdr w/ invalid extnum
-    printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum",
-                            "If extName specified, extNum should be -1.", 0);
-    metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
-    if (metadata1 != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum");
-        return 12;
-    }
-    printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true);
-
-
-    // Test K - Free psMetadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
-    psFree(metadata1);
-    psFree(metadata2);
-    psFree(metadata3);
-    if(psMemCheckLeaks(0, NULL, stdout,false)) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-    }
-    psMemCheckCorruption(0);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadata_02.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_02.c	(revision 4546)
+++ 	(revision )
@@ -1,145 +1,0 @@
-/** @file  tst_psMetadata_02.c
- *
- *  @brief Test driver for psMetadata functions
- *
- *  This test driver contains the following tests for psMetadata:
- *     Test A - Allocate metadata items
- *     Test B - Attempt to create metadata item with null name
- *     Test C - Attempt to create metadata item with invalid type
- *     Test D - Allocate metadata
- *     Test E - Attempt to add metadata item to null metadata
- *     Test F - Attempt to add null metadata item to metadata
- *     Test G - Free psMetadata
- *
- *  @author  Ross Harman, MHPCC
- *  @author  Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.15 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:41 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static void printMetadataItem(psMetadataItem *metadataItem)
-{
-    printf("Key Name: %8s  ", metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
-
-    switch (metadataItem->type) {
-    case PS_META_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_META_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
-    }
-    printf("Key Comment: %s\n", metadataItem->comment);
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psMetadataItem *item1 = NULL;
-    psMetadata *metadata = NULL;
-    psMetadataItem *item2 = NULL;
-    psMetadataItem *item3 = NULL;
-    psMetadataItem *item4 = NULL;
-    psMetadataItem *item5 = NULL;
-    psMetadataItem *badItem = NULL;
-
-
-    // Test A - Allocate metadata items
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
-    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
-    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 111);
-    item3 = psMetadataItemAlloc("myItem3", PS_META_F32, "I am a single precision floating point", 222.222);
-    item4 = psMetadataItemAlloc("myItem4", PS_META_F64, "I am a double precision floating point", 333.333);
-    item5 = psMetadataItemAlloc("myItem5", PS_META_STR, "I am a string", "HELLO WORLD");
-    printMetadataItem(item1);
-    printMetadataItem(item2);
-    printMetadataItem(item3);
-    printMetadataItem(item4);
-    printMetadataItem(item5);
-    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
-
-
-    // Test B - Attempt to create metadata item with null name
-    printNegativeTestHeader(stdout,"psMetadata", "Test B - Attempt to create metadata item with null name",
-                            "Null value for name not allowed", 0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should produce error for null name.");
-    badItem = psMetadataItemAlloc(NULL, PS_META_STR, "I am a string", "HELLO WORLD");
-    if (badItem != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataItemAlloc did not return null with null name item.");
-        return 10;
-    }
-    printFooter(stdout, "psMetadata", "Test B - Attempt to create metadata item with null name", true);
-
-
-    // Test C - Attempt to create metadata item with invalid type
-    printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to create metadata item with invalid type",
-                            "Invalid psMetadataType: 6", 0);
-    badItem = psMetadataItemAlloc("badItem", -1, "I am bad", "Bad comment");
-    printFooter(stdout, "psMetadata", "Test C - Attempt to create metadata item with invalid type", true);
-
-
-    // Test D - Allocate metadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test D - Allocate metadata");
-    metadata = psMetadataAlloc();
-    printFooter(stdout, "psMetadata", "Test D - Allocate metadata", true);
-
-
-    // Test E - Attempt add metadata item to null metadata
-    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to add metadata item to null metadata",
-                            "Null metadata collection not allowed", 0);
-    psMetadataAddItem(NULL, item1, PS_LIST_HEAD, PS_META_DEFAULT);
-    printFooter(stdout, "psMetadata", "Test E - Attempt to add metadata item to null metadata", true);
-
-
-    // Test F - Attempt add null metadata item to metadata
-    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to add null metadata item to metadata",
-                            "Null metadata item not allowed", 0);
-    psMetadataAddItem(metadata, NULL, PS_LIST_HEAD, PS_META_DEFAULT);
-    printFooter(stdout, "psMetadata", "Test F - Attempt to add null metadata item to metadata", true);
-
-
-    // Test G - Free psMetadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test G - Free psMetadata");
-    psFree(item1);
-    psFree(item2);
-    psFree(item3);
-    psFree(item4);
-    psFree(item5);
-    psFree(badItem);
-    psFree(metadata);
-    if(psMemCheckLeaks(0, NULL, stdout,false) ) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-        return 10;
-    }
-    psMemCheckCorruption(0);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMetadata", "Test G - Free psMetadata", true);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadata_03.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_03.c	(revision 4546)
+++ 	(revision )
@@ -1,241 +1,0 @@
-/** @file  tst_psMetadata_03.c
-*
-*  @brief Test driver for psMetadata functions
-*
-*  This test driver contains the following tests for psMetadata:
-*     Test A - Allocate metadata and items
-*     Test B - Remove items from metadata by name
-*     Test C - Remove items from metadata by index
-*     Test D - Attempt to use null metadata
-*     Test E - Attempt to remove non-existant metadata item by name
-*     Test F - Attempt to remove non-existant metadata item by index
-*     Test G - Attempt to add item to an invalid metadata structure
-*     Test H - Attempt to add item to an invalid metadata structure
-*     Test I - Attempt to add item with a null name
-*     Test J - Attempt to add item to an invalid metadata structure
-*     Test K - Free psMetadata
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.17 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:41 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static void printMetadataItem(psMetadataItem *metadataItem)
-{
-    printf("Key Name: %8s  ", metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
-
-    switch (metadataItem->type) {
-    case PS_META_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_META_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
-    }
-    printf("Key Comment: %s\n", metadataItem->comment);
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psMetadataItem *item1 = NULL;
-    psMetadataItem *item2 = NULL;
-    psMetadataItem *item3 = NULL;
-    psMetadataItem *item4 = NULL;
-    psMetadataItem *errItem = NULL;
-    psMetadata *metadata = NULL;
-    psMetadata *errMetadata = NULL;
-    psHash *mdTable = NULL;
-    psList *mdList = NULL;
-    char *errName = NULL;
-
-    // Test A - Allocate metadata and items
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
-    metadata = psMetadataAlloc();
-    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
-    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
-    item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
-    item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
-    errItem = psMetadataItemAlloc("errItem", PS_META_S32, "I am a integer", 99);
-    printMetadataItem(item1);
-    printMetadataItem(item2);
-    printMetadataItem(item3);
-    printMetadataItem(item4);
-    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
-
-
-    // Test B - Remove items from metadata by name
-    printPositiveTestHeader(stdout, "psMetadata", "Test B - Remove items from metadata by name");
-    if(!psMetadataAddItem(metadata, item1, PS_LIST_HEAD, PS_META_DEFAULT)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
-        return 10;
-    }
-    if(!psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2", PS_META_S32, "I am S32 integer",77)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
-        return 11;
-    }
-    if (!psMetadataRemove(metadata, 0, "myItem1")) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
-        return 12;
-    }
-    if (!psMetadataRemove(metadata, 0, "myItem2")) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
-        return 13;
-    }
-    printFooter(stdout, "psMetadata", "Test B - Remove items from metadata by name", true);
-
-
-    // Test C - Remove items from metadata by index
-    printPositiveTestHeader(stdout, "psMetadata", "Test C - Remove items from metadata by index");
-    if ( ! psMetadataAddItem(metadata, item3, PS_LIST_HEAD, PS_META_DEFAULT) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index.");
-        return 14;
-    }
-    if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_META_S32, "I am S32 integer",88) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index.");
-        return 15;
-    }
-    if( ! psMetadataRemove(metadata, 0, NULL) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by index.");
-        return 16;
-    }
-    if ( ! psMetadataRemove(metadata, 0, NULL ) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by index.");
-        return 17;
-    }
-    printFooter(stdout, "psMetadata", "Test C - Remove items from metadata by index", true);
-
-
-    // Test D - Attempt to use null metadata
-    printNegativeTestHeader(stdout,"psMetadata", "Test D - Attempt to use null metadata",
-                            "Null metadata collection not allowed", 0);
-    if ( psMetadataRemove(NULL, 0, NULL) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false when removing from null metadata.");
-        return 18;
-    }
-    printFooter(stdout, "psMetadata", "Test D - Attempt to use null metadata", true);
-
-
-    // Test E - Attempt to remove non-existant metadata item by name
-    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to remove non-existant metadata item by name",
-                            "Couldn't find metadata item. Name: AARGH", 0);
-    if( psMetadataRemove(metadata, 0, "AARGH") ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false when removing non-existant item.");
-        return 19;
-    }
-    printFooter(stdout, "psMetadata", "Test E - Attempt to remove non-existant metadata item by name", true);
-
-
-    // Test F - Attempt to remove non-existant metadata item by index
-    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to remove non-existant metadata item by index",
-                            "Couldn't find metadata item in list. Index: 22", 0);
-    if( psMetadataRemove(metadata, 22, NULL) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false when removing non-existant item.");
-        return 20;
-    }
-    printFooter(stdout, "psMetadata", "Test E - Attempt to remove non-existant metadata item by index", true);
-
-
-    // Test G - Attempt to add item to an invalid metadata structure
-    printNegativeTestHeader(stdout,"psMetadata","Test G - Attempt to add item to metadata w/o hash table",
-                            "Couldn't add item to invalid metadata structure.",0);
-    errMetadata = psMetadataAlloc();
-    mdTable = errMetadata->table;
-    errMetadata->table = NULL;
-    if ( psMetadataAddItem(errMetadata, item3, PS_LIST_HEAD, PS_META_DEFAULT) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table.");
-        return 21;
-    }
-    if ( psMetadataRemove(errMetadata, PS_LIST_HEAD, "errItem") ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false w/ invalid metadata struct w/o hash table.");
-        return 31;
-    }
-    errMetadata->table = mdTable;
-    printFooter(stdout,"psMetadata","Test G - Attempt to add item to invalid metadata w/o hash table", true);
-
-    // Test H - Attempt to add item to an invalid metadata structure
-    printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o link list",
-                            "Couldn't add item to invalid metadata structure.",0);
-    mdList = errMetadata->list;
-    errMetadata->list = NULL;
-    if ( psMetadataAddItem(errMetadata, item3, PS_LIST_HEAD, PS_META_DEFAULT) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o link list.");
-        return 22;
-    }
-    if ( psMetadataRemove(errMetadata, PS_LIST_HEAD, "errItem") ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false w/ invalid metadata struct w/o link list.");
-        return 32;
-    }
-    errMetadata->list = mdList;
-    printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o link list", true);
-
-    // Test I - Attempt to add item with a null name
-    printNegativeTestHeader(stdout,"psMetadata","Test I - Attempt to add item with null name",
-                            "Couldn't add item with null name.",0);
-    errName = errItem->name;
-    errItem->name = NULL;
-    if ( psMetadataAddItem(errMetadata, errItem, PS_LIST_HEAD, PS_META_DEFAULT) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false with item with null name.");
-        return 23;
-    }
-    errItem->name = errName;
-    printFooter(stdout,"psMetadata","Test I - Attempt to add item with null name", true);
-
-    // Test J - Attempt to add item to an invalid metadata structure
-    printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o hash table",
-                            "Couldn't add item to invalid metadata structure.",0);
-    mdTable = errMetadata->table;
-    errMetadata->table = NULL;
-    if (psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_META_S32, "Integer",22) ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table.");
-        return 24;
-    }
-    errMetadata->table = mdTable;
-    printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o hash table", true);
-
-    // Test K - Free psMetadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
-    psFree(metadata);
-    psFree(item1);
-    psFree(item2);
-    psFree(item3);
-    psFree(item4);
-    psFree(errItem);
-    psFree(errMetadata);
-    if( psMemCheckLeaks(0, NULL, stdout,false) != 0 ) {
-        psError(PS_ERR_UNKNOWN, true,"Memory leaks detected.");
-        return 25;
-    }
-    psMemCheckCorruption(0);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
-
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadata_04.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_04.c	(revision 4546)
+++ 	(revision )
@@ -1,292 +1,0 @@
-
-/** @file  tst_psMetadata_04.c
-*
-*  @brief Test driver for psMetadata functions
-*
-*  This test driver contains the following tests for psMetadata:
-*     Test A - Allocate metadata and items
-*     Test B - Lookup metadata item by name
-*     Test C - Attempt to use null metadata
-*     Test D - Attempt to use null key
-*     Test E - Attempt to lookup non-existant metadata item
-*     Test F - Lookup metadata item by index
-*     Test G - Lookup metadata item and return psS32 value
-*     Test H - Lookup metadata item and return psF64 value
-*     Test I - Lookup metadata item and return psVector pointer
-*     Test J - Attempt to use null metadata
-*     Test K - Attempt to get non-existant metadata item
-*     Test L - Attempt to look up with an invalid metadata object
-*     Test M - Attempt get item  with an invalid metadata object
-*     Test N - Attempt get value of non-existant metadata item
-*     Test O - Free psMetadata
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.19 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-06-17 23:44:22 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static void printMetadataItem(psMetadataItem *metadataItem)
-{
-    printf("Key Name: %8s  ", metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
-
-    switch (metadataItem->type) {
-    case PS_META_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_META_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
-    }
-    printf("Key Comment: %s\n", metadataItem->comment);
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psBool status = 0;
-    psMetadataItem *item1 = NULL;
-    psMetadataItem *item2 = NULL;
-    psMetadataItem *item3 = NULL;
-    psMetadataItem *item4 = NULL;
-    psMetadataItem *item5 = NULL;
-    psMetadataItem *item6 = NULL;
-    psMetadataItem *item = NULL;
-    psMetadata *metadata = NULL;
-    psHash* tmpTable = NULL;
-    psList* tmpList = NULL;
-
-
-    // Test A - Allocate metadata and items
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
-    psVector *vec = psVectorAlloc(5, PS_TYPE_S32);
-    metadata = psMetadataAlloc();
-    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
-    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
-    item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
-    item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
-    item5 = psMetadataItemAlloc("myItem5", PS_META_F64, "I am a double", 3.14);
-    item6 = psMetadataItemAlloc("myItem6", PS_META_VEC, "I am a vector", vec);
-    printMetadataItem(item1);
-    printMetadataItem(item2);
-    printMetadataItem(item3);
-    printMetadataItem(item4);
-    printMetadataItem(item5);
-    psMetadataAddItem(metadata, item1, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item2, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item3, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item4, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item5, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item6, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMemDecrRefCounter(vec); // vs. psFree, which now would set vec to NULL (want to keep it to comparison later)
-    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
-
-
-    // Test B - Lookup metadata item by name
-    printPositiveTestHeader(stdout, "psMetadata", "Test B - Lookup metadata item by name");
-    item = psMetadataLookup(metadata, "myItem2");
-    printf("Found item named %s\n", item->name);
-    if(item == NULL) {
-        printf("ERROR: Item should not be null\n");
-        return 10;
-    }
-    printFooter(stdout, "psMetadata", "Test B - Lookup metadata item by name", true);
-
-
-    // Test C - Attempt to use null metadata
-    printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to use null metadata",
-                            "Null metadata collection not allowed", 0);
-    if ( psMetadataLookup(NULL, "myItem2") != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataLookup did not return NULL with null metadata.");
-        return 11;
-    }
-    printFooter(stdout, "psMetadata", "Test C - Attempt to use null metadata", true);
-
-
-    // Test D - Attempt to use null key
-    printNegativeTestHeader(stdout,"psMetadata", "Test D - Attempt to use null key",
-                            "Null key name not allowed", 0);
-    if ( psMetadataLookup(metadata, NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadata did not return NULL with null key.");
-        return 12;
-    }
-    printFooter(stdout, "psMetadata", "Test D - Attempt to use null key", true);
-
-
-    // Test E - Attempt to lookup non-existant metadata item
-    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to lookup non-existant metadata item",
-                            "Couldn't find metadata item. Name: AARGH", 0);
-    if ( psMetadataLookup(metadata, "AARGH") != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadata did not return NULL with a non-existant item.");
-        return 13;
-    }
-    printFooter(stdout, "psMetadata", "Test E - Attempt to lookup non-existant metadata item", true);
-
-
-    // Test F - Lookup metadata item by index
-    printPositiveTestHeader(stdout, "psMetadata", "Test F - Lookup metadata item by index");
-    item = psMetadataGet(metadata, 0);
-    printf("Found item named %s\n", item->name);
-    if(item == NULL) {
-        printf("ERROR: Item should not be null\n");
-        return 14;
-    }
-    printFooter(stdout, "psMetadata", "Test F - Lookup metadata item by index", true);
-
-    // Test G - Lookup metadata item and return psS32 value
-    printPositiveTestHeader(stdout, "psMetadata", "Test G - Lookup metadata item and return psS32 value");
-    psS32 valueS32 = 0;
-    valueS32 = psMetadataLookupS32(&status, metadata, "myItem2");
-    if(valueS32 != 55) {
-        printf("ERROR: Bad value, %d, Expected 55\n", valueS32);
-        return 15;
-    } else if(! status) {
-        printf("ERROR: Bad status, %d\n", status);
-        return 15;
-    }
-    printFooter(stdout, "psMetadata", "Test G - Lookup metadata item and return psS32 value", true);
-
-    // Test H - Lookup metadata item and return psF64 value
-    printPositiveTestHeader(stdout, "psMetadata", "Test H - Lookup metadata item and return psF64 value");
-    psF64 valueF64 = 0.0;
-    valueF64 = psMetadataLookupF64(&status, metadata, "myItem5");
-    if(fabs(valueF64-3.14) > FLT_EPSILON) {
-        printf("ERROR: Bad value, %g, Expected 3.14\n", valueF64);
-        return 16;
-    } else if(! status) {
-        printf("ERROR: Bad status, %d\n", status);
-        return 16;
-    }
-    printFooter(stdout, "psMetadata", "Test H - Lookup metadata item and return psF64 value", true);
-
-    // Test I - Lookup metadata item and return psVector pointer
-    printPositiveTestHeader(stdout, "psMetadata", "Test I - Lookup metadata item and return psVector pointer");
-    psVector *valueVec = NULL;
-    valueVec = psMetadataLookupPtr(&status, metadata, "myItem6");
-    if(valueVec != vec) {
-        printf("ERROR: Bad vector pointer\n");
-        return 17;
-    } else if(! status) {
-        printf("ERROR: Bad status, %d\n", status);
-        return 17;
-    }
-    printFooter(stdout, "psMetadata", "Test I - Lookup metadata item and return psVector pointer", true);
-
-
-    // Test J - Attempt to use null metadata
-    printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null metadata",
-                            "Null metadata collection not allowed", 0);
-    item = psMetadataGet(NULL, 0);
-    if ( item != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataGet did not return NULL with null metadata structure");
-        return 18;
-    }
-    printFooter(stdout, "psMetadata", "Test J - Attempt to use null metadata", true);
-
-
-    // Test K - Attempt to get non-existant metadata item
-    printNegativeTestHeader(stdout,"psMetadata", "Test K - Attempt to get non-existant metadata item",
-                            "Couldn't find metadata item with given index. Index: 22", 0);
-    if ( psMetadataGet(metadata, 22) != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataGet did not return NULL with non-existant metadata item");
-        return 19;
-    }
-    printFooter(stdout, "psMetadata", "Test K - Attempt to get non-existant metadata item", true);
-
-    // Test L - Attempt to look up with an invalid metadata object
-    printNegativeTestHeader(stdout,"psMetadata","Test L - Attemp to look up with an invalid metadata",
-                            "Lookup item with invalid metadata object.", 0 );
-    tmpTable = metadata->table;
-    metadata->table = NULL;
-    if ( psMetadataLookup(metadata,"myItem2") != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataLookup did not return null for invalid metadata object");
-        return 20;
-    }
-    metadata->table = tmpTable;
-    printFooter(stdout, "psMetadata","Test L - Attempt to lookup an invalid metadata object.",true);
-
-    // Test M - Attempt get item with an invalid metadata object
-    printNegativeTestHeader(stdout,"psMetadata","Test M - Attempt to get item with an invalid metadata",
-                            "Get item with invalid metadata object.", 0 );
-    tmpList = metadata->list;
-    metadata->list = NULL;
-    if ( psMetadataGet(metadata,0) != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataLookup did not return null for invalid metadata object");
-        return 21;
-    }
-    metadata->list = tmpList;
-    printFooter(stdout, "psMetadata","Test M - Attempt to get item with  invalid metadata object",true);
-
-    // Test N - Attempt get psS32 value of non-existant metadata item
-    printPositiveTestHeader(stdout, "psMetadata", "Test N - Attempt get psS32 value of non-existant metadata item");
-    valueS32 = psMetadataLookupS32(&status, metadata, "myItem22");
-    if(status) {
-        printf("ERROR: Bad status, %d, \n", status);
-        return 22;
-    }
-    printFooter(stdout, "psMetadata","Test N - Attempt get psS32 value of non-existant metadata item",true);
-
-    // Test O - Attempt get psF64 value of non-existant metadata item
-    printPositiveTestHeader(stdout, "psMetadata", "Test O - Attempt get psF64 value of non-existant metadata item");
-    valueF64 = psMetadataLookupF64(&status, metadata, "myItem22");
-    if(status) {
-        printf("ERROR: Bad status, %d, \n", status);
-        return 23;
-    }
-    printFooter(stdout, "psMetadata","Test O - Attempt get psF64 value of non-existant metadata item",true);
-
-    // Test P - Attempt get psVector value of non-existant metadata item
-    printPositiveTestHeader(stdout, "psMetadata", "Test P - Attempt get psVector value of non-existant metadata item");
-    valueVec = psMetadataLookupPtr(&status, metadata, "myItem22");
-    if(status) {
-        printf("ERROR: Bad status, %d, \n", status);
-        return 24;
-    }
-    printFooter(stdout, "psMetadata","Test P - Attempt get psVector value of non-existant metadata item",true);
-
-    // Test Q - Free psMetadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test Q - Free psMetadata");
-    psFree(metadata);
-    psFree(item1);
-    psFree(item2);
-    psFree(item3);
-    psFree(item4);
-    psFree(item5);
-    psFree(item6);
-    if ( psMemCheckLeaks(0, NULL, stdout,false) != 0 ) {
-        psError(PS_ERR_UNKNOWN, true,"memory leaks detected.");
-        return 23;
-    }
-    psMemCheckCorruption(0);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-        return 24;
-    }
-    printFooter(stdout, "psMetadata", "Test Q - Free psMetadata", true);
-
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadata_05.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_05.c	(revision 4546)
+++ 	(revision )
@@ -1,342 +1,0 @@
-
-
-/** @file  tst_psMetadata_05.c
-*
-*  @brief Test driver for psMetadata functions
-*
-*  This test driver contains the following tests for psMetadata:
-*     Test A - Allocate metadata and items
-*     Test B - Set iterator at second index
-*     Test C - Get next item at index
-*     Test D - Get next item at index and string
-*     Test E - Get previous item at index
-*     Test F - Write metadata item to file
-*     Test G - Attempt to use null metadata with setIterator
-*     Test H - Attempt to use null metadata with getNext
-*     Test I - Attempt to use null metadata with getPrevious
-*     Test J - Attempt to use null file with itemPrint
-*     Test K - Attempt to use null format with itemPrint
-*     Test L - Attempt to use null item with itemPrint
-*     Test M - Free psMetadata
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.24 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:41 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static void printMetadataItem(psMetadataItem *metadataItem)
-{
-    printf("Key Name: %8s  ", metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
-
-    switch (metadataItem->type) {
-    case PS_META_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_META_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
-    }
-    printf("Key Comment: %s\n", metadataItem->comment);
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psMetadataItem *item1 = NULL;
-    psMetadataItem *item2 = NULL;
-    psMetadataItem *item3 = NULL;
-    psMetadataItem *item4 = NULL;
-    psMetadataItem *item5 = NULL;
-    psMetadataItem *item6 = NULL;
-    psMetadataItem *item7 = NULL;
-    //    psMetadataItem *item8 = NULL;
-    psMetadata *metadata = NULL;
-    FILE *fd = NULL;
-
-    // Test A - Allocate metadata and items
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
-    metadata = psMetadataAlloc();
-    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
-    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
-    item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
-    item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
-    item5 = psMetadataItemAlloc("myItem5", PS_META_F32, "I am a float", 3.14);
-    item6 = psMetadataItemAlloc("myItem6", PS_META_F64,"I am a double", 6.28);
-    item7 = psMetadataItemAlloc("myItem7", PS_META_STR, "I am a string", "GNIRTS");
-    //    item8 = psMetadataItemAlloc("myItem8", PS_TYPE_PTR, PS_META_UNKNOWN, "I am unknown");
-    printMetadataItem(item1);
-    printMetadataItem(item2);
-    printMetadataItem(item3);
-    printMetadataItem(item4);
-    psMetadataAddItem(metadata, item1, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item2, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item3, PS_LIST_HEAD, PS_META_DEFAULT);
-    psMetadataAddItem(metadata, item4, PS_LIST_HEAD, PS_META_DEFAULT);
-    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
-
-    /*
-        // Test B - Set iterator at second index
-        printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");
-        if (!psMetadataSetIterator(metadata, 2)) {
-            psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");
-            return 100;
-        }
-        printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);
-
-
-        // Test C - Get next item at index
-        printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");
-        item = psMetadataGetNext(metadata, NULL, 2);
-        if(item == NULL) {
-            printf("ERROR: Item should not be null\n");
-        } else {
-            printf("Found item named %s\n", item->name);
-        }
-        printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);
-
-
-        // Test D - Get next item at index and string
-        printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");
-        item = psMetadataGetNext(metadata, "myItem1", 1);
-        if(item == NULL) {
-            printf("ERROR: Item should not be null\n");
-        } else {
-            printf("Found item named %s\n", item->name);
-        }
-        printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);
-
-
-        // Test E - Get previous item at index
-        printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");
-        item = psMetadataGetPrevious(metadata, NULL, 1);
-        if(item == NULL) {
-            printf("ERROR: Item should not be null\n");
-        } else {
-            printf("Found item named %s\n", item->name);
-        }
-        if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");
-            return 45;
-        }
-        tmpList = metadata->list;
-        metadata->list = NULL;
-        if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");
-            return 50;
-        }
-        metadata->list = tmpList;
-        printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);
-
-    */
-    // Test F - Write metadata item to file
-    printPositiveTestHeader(stdout, "psMetadata", "Test F - Write metadata item to file");
-    fd = fopen("temp/tst_psMetadata05_OUT", "w");
-    if(fd == NULL) {
-        printf("ERROR: Couldn't open file for writing\n");
-    }
-
-    if (psMetadataItemPrint(fd, "S32 = %ld\n", item2) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 10;
-    }
-
-    if (psMetadataItemPrint(fd, "S32 = %+06.1f\n", item2) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 10;
-    }
-
-    if (psMetadataItemPrint(fd, "BOL = %ld\n", item3) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 11;
-    }
-
-    if (psMetadataItemPrint(fd, "F32 = %g\n", item5) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 12;
-    }
-
-    if (psMetadataItemPrint(fd, "F32 = % #i\n", item5) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 12;
-    }
-
-    if (psMetadataItemPrint(fd, "F64 = %g\n", item6) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 13;
-    }
-
-    if (psMetadataItemPrint(fd, "STR = %s\n", item7) == false) {
-        printf("ERROR: Return type should be true\n");
-        return 14;
-    }
-    //    psLogMsg(__func__,PS_LOG_INFO,"Attempt to print item of invalid type, should generate error message");
-    //    if (psMetadataItemPrint(fd, "UNK = \n", item8) == true) {
-    //        printf("ERROR: Return type should be false\n");
-    //        fclose(fd);
-    //        return 15;
-    //    }
-    fclose(fd);
-
-    fd = fopen("temp/tst_psMetadata05_OUT", "r");
-    if(fd == NULL) {
-        printf("ERROR: Couldn't open file for reading\n");
-    }
-
-    char line[256];
-    char truth1[] = "S32 = 55";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth1, 8)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1);
-    }
-
-    char truth1b[] = "S32 = +055.0";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth1b, 12)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1b);
-    }
-
-    char truth2[] = "BOL = 0";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth2, 7)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth2);
-    }
-
-    char truth3[] = "F32 = 3.14";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth3, 10)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3);
-    }
-
-    char truth3b[] = "F32 =  3";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth3b, 8)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3b);
-    }
-
-    char truth4[] = "F64 = 6.28";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth4, 10)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth4);
-    }
-
-    char truth5[] = "STR = GNIRTS";
-    fgets(line, 256, fd);
-    if(strncmp(line, truth5, 12)) {
-        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth5);
-    }
-
-    fclose(fd);
-    printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true);
-    /*
-        // Test G - Attempt to use null metadata with setIterator
-        printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator",
-                                "Null metadata collection not allowed", 0);
-        if( psMetadataSetIterator(NULL, 0)) {
-            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter.");
-            return 101;
-        }
-        tmpList = metadata->list;
-        metadata->list = NULL;
-        if( psMetadataSetIterator(metadata,0)) {
-            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list.");
-            return 102;
-        }
-        metadata->list = tmpList;
-        printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true);
-
-
-        // Test H - Attempt to use null metadata with getNext
-        printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext",
-                                "Null metadata collection not allowed", 0);
-        if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata.");
-            return 40;
-        }
-        tmpList = metadata->list;
-        metadata->list = NULL;
-        if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata.");
-            return 41;
-        }
-        metadata->list = tmpList;
-
-        printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true);
-
-
-        // Test I - Attempt to use null metadata with getPrevious
-        printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious",
-                                "Null metadata collection not allowed", 0);
-        psMetadataGetPrevious(NULL, "myItem2", 0);
-        printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true);
-
-    */
-    // Test J - Attempt to use null file with itemPrint
-    printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null file with itemPrint",
-                            "Null file descriptor not allowed", 0);
-    psMetadataItemPrint(NULL, "Item value: %ld", item2);
-    printFooter(stdout, "psMetadata", "Test J - Attempt to use null file with itemPrint", true);
-
-
-    // Test K - Attempt to use null format with itemPrint
-    printNegativeTestHeader(stdout,"psMetadata", "Test K - Attempt to use null format with itemPrint",
-                            "Null format not allowed", 0);
-    psMetadataItemPrint(fd, NULL, item2);
-    printFooter(stdout, "psMetadata", "Test K - Attempt to use null format with itemPrint", true);
-
-
-    // Test L - Attempt to use null item with itemPrint
-    printNegativeTestHeader(stdout,"psMetadata", "Test L - Attempt to use null item with itemPrint",
-                            "Null metadata not allowed", 0);
-    psMetadataItemPrint(fd, "Item value: %ld", NULL);
-    printFooter(stdout, "psMetadata", "Test L - Attempt to use null item with itemPrint", true);
-
-
-    // Test M - Free psMetadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test M - Free psMetadata");
-    psFree(metadata);
-    psFree(item1);
-    psFree(item2);
-    psFree(item3);
-    psFree(item4);
-    psFree(item5);
-    psFree(item6);
-    psFree(item7);
-    //    psFree(item8);
-    if ( psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {
-        psError(PS_ERR_UNKNOWN, true,"Memory leaks detected.");
-        return 50;
-    }
-    psMemCheckCorruption(0);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-        return 51;
-    }
-    printFooter(stdout, "psMetadata", "Test M - Free psMetadata", true);
-
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadata_06.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_06.c	(revision 4546)
+++ 	(revision )
@@ -1,166 +1,0 @@
-
-/** @file  tst_psMetadata_06.c
-*
-*  @brief Test driver for psMetadata functions
-*
-*  This test driver contains the following tests for psMetadata:
-*     Test A - Allocate metadata and items
-*     Test B - Add leaf node on top of existing leaf node
-*     Test C - Add leaf node to existing folder node
-*     Test D - Add folder node on top of existing leaf node
-*     Test E - Free psMetadata
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:41 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static void printMetadataItem(psMetadataItem *metadataItem)
-{
-    printf("Key Name: %8s  ", metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
-
-    switch (metadataItem->type) {
-    case PS_META_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_META_LIST:
-        printf("Key Value: %15s  ", "psList");
-        break;
-    case PS_META_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
-    }
-    printf("Key Comment: %s\n", metadataItem->comment);
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psMetadataItem *item1a = NULL;
-    psMetadataItem *item1b = NULL;
-    psMetadataItem *item1c = NULL;
-    psMetadataItem *item2a = NULL;
-    psMetadataItem *item2b = NULL;
-    psMetadata *metadata = NULL;
-
-
-    // Test A - Allocate metadata and items
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata and items");
-    item1a = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
-    item1b = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 111);
-    item1c = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 222);
-    item2a = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 333);
-    item2b = psMetadataItemAlloc("myItem2", PS_META_LIST, "I am a list", NULL);
-    metadata = psMetadataAlloc();
-    printMetadataItem(item1a);
-    printMetadataItem(item1b);
-    printMetadataItem(item1c);
-    printMetadataItem(item2a);
-    printMetadataItem(item2b);
-    printFooter(stdout, "psMetadata", "Test A - Allocate metadata and items", true);
-
-
-    // Test B - Add leaf node on top of existing leaf node
-    printPositiveTestHeader(stdout, "psMetadata", "Test B - replace an item in the metadata");
-    if(!psMetadataAddItem(metadata, item1a, PS_LIST_HEAD, PS_META_DEFAULT)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
-        return 20;
-    }
-    psMetadataItem* tempItem = psMetadataLookup(metadata, item1a->name);
-    if (tempItem != item1a) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't add the metadata entry.");
-        return 20;
-    }
-
-    if (!psMetadataAddItem(metadata, item1b, PS_LIST_HEAD, PS_META_REPLACE)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
-        return 21;
-    }
-
-    tempItem = psMetadataLookup(metadata, item1a->name);
-    if (tempItem != item1b) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't replace the metadata entry.");
-        return 21;
-    }
-
-    printFooter(stdout, "psMetadata", "Test B - replace an item in the metadata", true);
-
-
-    // Test C - Add leaf node to existing folder node
-    printPositiveTestHeader(stdout, "psMetadata", "Test C - add duplicate-key metadata item");
-    if (!psMetadataAddItem(metadata, item1c, PS_LIST_HEAD, PS_META_DUPLICATE_OK)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem return false for adding a not to existing node.");
-        return 22;
-    }
-
-    tempItem = psMetadataLookup(metadata, item1a->name);
-    if (tempItem == NULL || tempItem->type != PS_META_MULTI) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't add additional metadata entry of same key.");
-        return 22;
-    }
-    printFooter(stdout, "psMetadata", "Test C - add duplicate-key metadata item", true);
-
-
-    // Test D - Add folder node on top of existing leaf node
-    printPositiveTestHeader(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node");
-    if (!psMetadataAddItem(metadata, item2a, PS_LIST_HEAD, PS_META_DEFAULT)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node to existing leaf node.");
-        return 23;
-    }
-    if (!psMetadataAddItem(metadata, item2b, PS_LIST_HEAD, PS_META_DUPLICATE_OK)) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a nod to existing leaf node.");
-        return 24;
-    }
-    printFooter(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node", true);
-    tempItem = psMetadataLookup(metadata, item1a->name);
-    if (tempItem == NULL || tempItem->type != PS_META_MULTI) {
-        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't add additional metadata entry of same key.");
-        return 24;
-    }
-
-
-    // Test E - Free psMetadata
-    printPositiveTestHeader(stdout, "psMetadata", "Test E - Free psMetadata");
-    psFree(item1a);
-    psFree(item1b);
-    psFree(item1c);
-    psFree(item2a);
-    psFree(item2b);
-    psFree(metadata);
-    if ( psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {
-        psError(PS_ERR_UNKNOWN, true,"Memory leaks detected.");
-        return 25;
-    }
-    psMemCheckCorruption(0);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMetadata", "Test E - Free psMetadata", true);
-
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psMetadata_07.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_07.c	(revision 4546)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/** @file  tst_psMetadata_07.c
-*
-*  @brief Test driver for psMetadataIO functions
-*
-*  This test driver contains the following tests for psMetadata:
-*     Test A - Read an XML config file
-*     Test B - Free data
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.11 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-06-10 18:09:12 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-#include "config.h"
-#include "pslib_strict.h"
-#include "psTest.h"
-
-int main(int argc, char* argv[])
-{
-    // Test A - Read an XML config file
-    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read an XML config file");
-    int res = 0;
-    psU32 nFail = 0;
-    psMetadata *md = NULL;
-    md = psMetadataConfigParseXml(md, &nFail, XML_CONFIG_FILE, true);
-    if (nFail != 0) {
-        printf("psMetadataConfigParseXml returned error %d\n", res);
-    }
-
-    psFree(md);
-    printFooter(stdout, "psMetadata", "Test A - Read an XML config file", true);
-
-    // Test B - Free data
-    printPositiveTestHeader(stdout, "psMetadata", "Test B - Free data");
-    psMemCheckLeaks(0, NULL, stdout, false);
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMetadata", "Test B - Free data", true);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psPixels.c
===================================================================
--- /trunk/psLib/test/collections/tst_psPixels.c	(revision 4546)
+++ 	(revision )
@@ -1,503 +1,0 @@
-/** @file  tst_psPixels.c
- *
- *  @brief Contains the tests for psPixels.[ch]
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.7 $
- *           $Name: not supported by cvs2svn $
- *  @date $Date: 2005-06-09 23:51:49 $
- *
- *  Copyright 2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-static psS32 testPixelsAlloc(void);
-static psS32 testPixelsRealloc(void);
-static psS32 testPixelsCopy(void);
-static int testPixelsToMask(void);
-static int testPixelsFromMask(void);
-static int testPixelsConcatenate(void);
-
-testDescription tests[] = {
-                              {testPixelsAlloc,860,"psPixelsAlloc",0,false},
-                              {testPixelsRealloc,862,"psPixelsRealloc",0,false},
-                              {testPixelsCopy,863,"psPixelsCopy",0,false},
-                              {testPixelsToMask,864,"psPixelsToMask",0,false},
-                              {testPixelsFromMask,865,"psPixelsFromMask",0,false},
-                              {testPixelsConcatenate,866,"psPixelsConcatenate",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if ( ! runTestSuite(stderr,"psPixels",tests,argc,argv) ) {
-        psError(PS_ERR_UNKNOWN,true,"One or more tests failed");
-        return 1;
-    }
-    return 0;
-}
-
-psS32 testPixelsAlloc(void)
-{
-
-    psPixels* p0 = psPixelsAlloc(0);
-
-    if (p0 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to allocate a zero-sized psPixels");
-        return 1;
-    }
-    if (p0->data != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set data to NULL for a zero-sized psPixels");
-        return 2;
-    }
-    if (p0->n != p0->nalloc) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set n = 0");
-        return 3;
-    }
-    if (p0->nalloc != 0) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set nalloc = 0");
-        return 4;
-    }
-
-    psPixels* p1 = psPixelsAlloc(1);
-
-    if (p1 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to allocate a one-sized psPixels");
-        return 11;
-    }
-    if (p1->data == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to allocate data for a one-sized psPixels");
-        return 12;
-    }
-    p1->data[0].x = 1;
-    p1->data[0].y = 2;
-
-    if (p1->n != p1->nalloc) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set n = %d", p1->nalloc);
-        return 13;
-    }
-    if (p1->nalloc != 1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set nalloc = 1 (%d)",
-                p1->nalloc);
-        return 14;
-    }
-
-    psPixels* p2 = psPixelsAlloc(10);
-
-    if (p2 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to allocate a one-sized psPixels");
-        return 11;
-    }
-    if (p2->data == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to allocate data for a one-sized psPixels");
-        return 12;
-    }
-    for (int i = 0; i < 10; i++) {
-        p2->data[i].x = i;
-        p2->data[i].y = 100+i;
-    }
-
-    if (p2->n != p2->nalloc) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set n = %d", p2->nalloc);
-        return 13;
-    }
-    if (p2->nalloc != 10) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsAlloc failed to set nalloc = 1 (%d)",
-                p2->nalloc);
-        return 14;
-    }
-
-
-    psFree(p2);
-    psFree(p1);
-    psFree(p0);
-
-    return 0;
-}
-
-psS32 testPixelsRealloc(void)
-{
-
-    // first, tests that reallocing a NULL just allocates
-    psPixels* p0 = psPixelsRealloc(NULL,10);
-
-    if (p0 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to allocate a zero-sized psPixels");
-        return 1;
-    }
-    if (p0->data == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set data to NULL for a zero-sized psPixels");
-        return 2;
-    }
-    if (p0->n != p0->nalloc) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set n = 0");
-        return 3;
-    }
-    if (p0->nalloc != 10) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set nalloc = 10");
-        return 4;
-    }
-    for (int i = 0; i < 10; i++) {
-        p0->data[i].x = i;
-        p0->data[i].y = 100+i;
-    }
-    p0->n = 10;
-
-    psPixels* p1 = psPixelsRealloc(p0, 20);
-
-    if (p1 != p0) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to return a resized input psPixels");
-        return 11;
-    }
-    if (p1->data == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set data to non-NULL");
-        return 12;
-    }
-    if (p1->n != 10) {
-        psError(PS_ERR_UNKNOWN, true,
-                "resizing up didn't preserve the size");
-        return 13;
-    }
-    if (p1->nalloc != 20) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set nalloc = 0");
-        return 14;
-    }
-    for (int i = 0; i < 10; i++) {
-        if (p0->data[i].x != i || p0->data[i].y != 100+i) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The value of pixel %d was not preserved (%d,%d) vs (%d,%d).",
-                    i, p0->data[i].x, p0->data[i].y, i, 100+i);
-            return 15;
-        }
-    }
-    for (int i = 10; i < 20; i++) {
-        p1->data[i].x = i;
-        p1->data[i].y = 100+i;
-    }
-    p1->n = 20;
-
-
-    psPixels* p2 = psPixelsRealloc(p1,5);
-
-    if (p2 != p1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc didn't return input psPixels.");
-        return 21;
-    }
-    if (p2->data == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to allocate data");
-        return 22;
-    }
-
-    if (p2->n != 5) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set n=nalloc after shrinking");
-        return 23;
-    }
-    if (p2->nalloc != 5) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set nalloc properly");
-        return 24;
-    }
-
-    psPixels* p3 = psPixelsRealloc(p2,0);
-
-    if (p3 != p2) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc didn't return input psPixels.");
-        return 31;
-    }
-    if (p3->data != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to deallocate data when size=0");
-        return 32;
-    }
-
-    if (p3->n != 0) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set n=nalloc after shrinking");
-        return 33;
-    }
-    if (p3->nalloc != 0) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psPixelsRealloc failed to set nalloc properly");
-        return 34;
-    }
-
-    psFree(p3);
-
-    return 0;
-}
-
-psS32 testPixelsCopy(void)
-{
-    psPixels* in1 = psPixelsAlloc(10);
-
-    for (int i = 0; i < 10; i++) {
-        in1->data[i].x = i;
-        in1->data[i].y = 100+i;
-    }
-    in1->n = 10;
-
-    psPixels* out1 = psPixelsCopy(NULL, in1);
-    if (out1 == in1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "output == input?");
-        return 1;
-    }
-    if (out1 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "output == NULL?");
-        return 2;
-    }
-
-    if (out1->n != in1->n) {
-        psError(PS_ERR_UNKNOWN, true,
-                "out->n != in->n");
-        return 3;
-    }
-    for (int i = 0; i < out1->n; i++) {
-        if (out1->data[i].x != in1->data[i].x || out1->data[i].y != in1->data[i].y) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "failed to copy the values correctly at index %d", i);
-            return 4;
-        }
-    }
-
-    // now test what happens when copying a 0-length list.
-    psPixels* in2 = psPixelsAlloc(0);
-    psPixels* out2 = psPixelsCopy(out1, in2);
-    if (out2 != out1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "failed to recycle.");
-        return 10;
-    }
-    if (out2->n != in2->n) {
-        psError(PS_ERR_UNKNOWN, true,
-                "failed to set size when copying 0-length pixel list.");
-        return 11;
-    }
-
-    // Attempt to copy from NULL input
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input");
-    out2 = psPixelsCopy(out2,NULL);
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "Copying a NULL should create a NULL.");
-        return 20;
-    }
-
-    psFree(in1);
-    psFree(in2);
-
-    return 0;
-}
-
-int testPixelsToMask(void)
-{
-    // create a pixel list for
-    psPixels* pixels = psPixelsAlloc(10);
-    for (int i = 0; i < 10; i++) {
-        pixels->data[i].x = i;
-        pixels->data[i].y = i;
-    }
-    pixels->n = 10;
-
-    psImage* mask = psPixelsToMask(NULL,pixels, psRegionSet(0,10,0,10), 1);
-
-    if (mask == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "Resulting mask was null.");
-        return 1;
-    }
-    if (mask->type.type != PS_TYPE_MASK) {
-        psError(PS_ERR_UNKNOWN, true,
-                "mask type was not PS_TYPE_MASK.");
-        return 2;
-    }
-
-    for (int row=0;row<10;row++) {
-        psMaskType* rowData = mask->data.PS_TYPE_MASK_DATA[row];
-        for (int col=0;col<10;col++) {
-            if ( (col==row && rowData[col] != 1) ||
-                    (col!=row && rowData[col] != 0) ) {
-                psError(PS_ERR_UNKNOWN,true,
-                        "Mask has unexpected value, %d, at (%d,%d)",
-                        rowData[col], col, row);
-                return 10;
-            }
-        }
-    }
-
-    // test when input psPixels is NULL.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL pixels");
-    mask = psPixelsToMask(mask, NULL, psRegionSet(0,10,0,10), 1);
-    if (mask != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "Resulting mask was not null though input psPixels was NULL.");
-        return 20;
-    }
-
-
-    // Test for invalid region
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid range");
-    mask = psPixelsToMask(mask,pixels,psRegionSet(10,0,10,0),1);
-    if(mask != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL for invalid range");
-        return 21;
-    }
-
-    psFree(mask);
-    psFree(pixels);
-
-    return 0;
-}
-
-int testPixelsFromMask(void)
-{
-    const int numRows = 10;
-    const int numCols = 20;
-    psImage* mask = psImageAlloc(numCols,numRows,PS_TYPE_MASK);
-    for (int row=0;row<numRows;row++) {
-        for (int col=0;col<numCols;col++) {
-            mask->data.PS_TYPE_MASK_DATA[row][col] = (row*2 == col) ? 1 : 0;
-        }
-    }
-
-    psPixels* pixels = psPixelsFromMask(NULL, mask, 1);
-
-    if (pixels == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "resulting psPixels was NULL?");
-        return 1;
-    }
-
-    if (pixels->n != numRows) {
-        psError(PS_ERR_UNKNOWN, false,
-                "wrong number of pixels in list.  Got %d, should be %d.",
-                pixels->n, numRows);
-        return 2;
-    }
-
-    for (int i = 0; i < pixels->n; i++) {
-        if (mask->data.PS_TYPE_MASK_DATA[pixels->data[i].y][pixels->data[i].x] != 1) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Item in psPixels list (%d,%d) didn't coorespond to a masked value in image",
-                    pixels->data[i].x, pixels->data[i].y);
-            return 3;
-        }
-    }
-
-    // Attempt to create pixels from NULL mask
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for NULL mask");
-    pixels = psPixelsFromMask(pixels, NULL, 1);
-
-    if (pixels != NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "given a NULL image, got a non-NULL mask?");
-        return 4;
-    }
-
-    psFree(mask);
-
-    return 0;
-}
-
-int testPixelsConcatenate(void)
-{
-    // create a pixel list for
-    psPixels* pixels = psPixelsAlloc(10);
-    psPixels* pixels1 = psPixelsAlloc(10);
-    for (int i = 0; i < 10; i++) {
-        pixels->data[i].x = i;
-        pixels->data[i].y = i;
-        if (i%2) {
-            pixels1->data[i].x = -i;
-        } else {
-            pixels1->data[i].x = i;
-        }
-        pixels1->data[i].y = i;
-    }
-    pixels->n = 10;
-    pixels1->n = 10;
-    p_psPixelsPrint(stdout, pixels, "pixels");
-    p_psPixelsPrint(stdout, pixels1, "pixels1");
-
-    psPixels* pixels2 = psPixelsConcatenate(NULL, pixels);
-    p_psPixelsPrint(stdout, pixels2, "pixels2");
-    if (pixels2 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "pixels2 == NULL?");
-        return 1;
-    }
-    if (pixels == pixels2) {
-        psError(PS_ERR_UNKNOWN, true,
-                "pixels == pixels2?  Should have made a copy.");
-        return 2;
-    }
-    if (pixels2->n != pixels->n) {
-        psError(PS_ERR_UNKNOWN, true,
-                "pixels2->n != pixels->n");
-        return 3;
-    }
-    for (int i = 0; i < pixels2->n; i++) {
-        if (pixels2->data[i].x != pixels->data[i].x || pixels2->data[i].y != pixels->data[i].y) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "failed to copy the values correctly at index %d", i);
-            return 4;
-        }
-    }
-
-    // add pixels that are half unique.
-    psPixels* pixels3 = psPixelsConcatenate(pixels2, pixels1);
-    p_psPixelsPrint(stdout, pixels3, "pixels3");
-    if (pixels3 != pixels2) {
-        psError(PS_ERR_UNKNOWN, true,
-                "return expected to be the out parameter.");
-        return 10;
-    }
-    if (pixels3->n != 15) {
-        psError(PS_ERR_UNKNOWN, true,
-                "pixels3->n != 15, == %d", pixels3->n);
-        return 11;
-    }
-
-    // Attempt to concatenate with NULL pixels
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL pixels");
-    if(psPixelsConcatenate(pixels2,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return to be non-NULL for NULL input pixels");
-        return 12;
-    }
-
-    psFree(pixels3);
-    psFree(pixels1);
-    psFree(pixels);
-
-    return 0;
-}
-
Index: unk/psLib/test/collections/tst_psScalar.c
===================================================================
--- /trunk/psLib/test/collections/tst_psScalar.c	(revision 4546)
+++ 	(revision )
@@ -1,138 +1,0 @@
-/** @file  tst_psScalar.c
- *
- *  @brief Contains the tests for psScalar.[ch]
- *
- *  @author Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.4 $
- *           $Name: not supported by cvs2svn $
- *  @date $Date: 2005-04-07 20:27:41 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-static psS32 testScalarAlloc(void);
-static psS32 testScalarCopy(void);
-
-#define tstScalarAllocByType(datatype,value)                                                                    \
-scalar = psScalarAlloc(value,PS_TYPE_##datatype);                                                               \
-if(scalar == NULL) {                                                                                            \
-    psError(PS_ERR_UNKNOWN,true,"psScalarAlloc returned NULL.");                                                \
-    return 1+value;                                                                                             \
-} else {                                                                                                        \
-    if( (scalar->type.type != PS_TYPE_##datatype) && (scalar->data.datatype != value) ) {                       \
-        psError(PS_ERR_UNKNOWN,true,"psScalarAlloc created object with unexpected type and/or value");          \
-        return 2+value;                                                                                         \
-    }                                                                                                           \
-}                                                                                                               \
-psFree(scalar);
-
-#define tstScalarCopyByType(datatype,value)                                                                               \
-scalarOrig = psScalarAlloc(value,PS_TYPE_##datatype);                                                                     \
-scalarCopy = psScalarCopy(scalarOrig);                                                                                    \
-if(scalarCopy == NULL) {                                                                                                  \
-    psError(PS_ERR_UNKNOWN,true,"psScalarCopy returned NULL.");                                                           \
-    return 3+value;                                                                                                       \
-} else {                                                                                                                  \
-    if( (scalarCopy->type.type != scalarOrig->type.type) || (scalarCopy->data.datatype != scalarOrig->data.datatype) ) {  \
-        psError(PS_ERR_UNKNOWN,true,"psScalarCopy did not copy the original scalar by type and/or value");                \
-        return 4+value;                                                                                                   \
-    }                                                                                                                     \
-}                                                                                                                         \
-psFree(scalarCopy);                                                                                                       \
-psFree(scalarOrig);
-
-testDescription tests[] = {
-                              {testScalarAlloc,783,"psScalarAlloc",0,false},
-                              {testScalarCopy,784,"psScalarCopy",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if ( ! runTestSuite(stderr,"psScalar",tests,argc,argv) ) {
-        psError(PS_ERR_UNKNOWN,true,"One or more tests failed");
-        return 1;
-    }
-    return 0;
-}
-
-psS32 testScalarAlloc(void)
-{
-    psScalar* scalar;
-
-    psLogMsg(__func__,PS_LOG_INFO,"psScalarAlloc shall create scalar data objects");
-
-    // Verify the proper allocation/deallocation of scalar objects of valid types
-    tstScalarAllocByType(S8,10);
-    tstScalarAllocByType(U8,12);
-    tstScalarAllocByType(S16,14);
-    tstScalarAllocByType(U16,16);
-    tstScalarAllocByType(S32,18);
-    tstScalarAllocByType(U32,20);
-    tstScalarAllocByType(S64,22);
-    tstScalarAllocByType(U64,24);
-    tstScalarAllocByType(F32,26);
-    tstScalarAllocByType(F64,28);
-    tstScalarAllocByType(C32,30);
-    tstScalarAllocByType(C64,32);
-
-    // Verify return is null for invalid scalar type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    scalar = psScalarAlloc(true,PS_TYPE_BOOL);
-    if(scalar != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psScalarAlloc did not return null for invalid type");
-        return 5;
-    }
-
-    return 0;
-}
-
-psS32 testScalarCopy(void)
-{
-    psScalar*  scalarOrig;
-    psScalar*  scalarCopy;
-
-    psLogMsg(__func__,PS_LOG_INFO,"psScalarCopy shall copy scalar objects");
-
-    // Verify the proper copying of scalar objects for all valid types
-    tstScalarCopyByType(S8,100);
-    tstScalarCopyByType(U8,110);
-    tstScalarCopyByType(S16,120);
-    tstScalarCopyByType(U16,130);
-    tstScalarCopyByType(S32,140);
-    tstScalarCopyByType(U32,150);
-    tstScalarCopyByType(S64,160);
-    tstScalarCopyByType(U64,170);
-    tstScalarCopyByType(F32,180);
-    tstScalarCopyByType(F64,190);
-    tstScalarCopyByType(C32,200);
-    tstScalarCopyByType(C64,210);
-
-    // Verify the return is null for invalid scalar type in the original
-    scalarOrig = psScalarAlloc(0,PS_TYPE_S8);
-    scalarOrig->type.type = PS_TYPE_BOOL;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    scalarCopy = psScalarCopy(scalarOrig);
-    if(scalarCopy != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psScalarCopy did not return NULL for invalid type");
-        return 6;
-    }
-    psFree(scalarOrig);
-
-    // Verify the return is null for null original scalar value
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    scalarCopy = psScalarCopy(NULL);
-    if(scalarCopy != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psScalarCopy did not return NULL for NULL argument");
-        return 7;
-    }
-
-    return 0;
-}
-
Index: unk/psLib/test/collections/tst_psVector.c
===================================================================
--- /trunk/psLib/test/collections/tst_psVector.c	(revision 4546)
+++ 	(revision )
@@ -1,271 +1,0 @@
-/** @file  tst_psVector.c
- *
- *  @brief Test driver for psVector integer functions
- *
- *  This test driver contains the following tests for psVector test point 1:
- *     A)  Create S32 vector
- *     B)  Add data to S32 vector
- *     C)  Reallocate S32 vector bigger
- *     D)  Reallocate S32 vector smaller
- *     E)  Free S32 vector
- *     F)  Attempt to create a S32 vector with zero size
- *     G)  Attempt to realloc a null S32 vector
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.10 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-07-07 02:17:53 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-static psS32 testVectorAlloc(void);
-static psS32 testVectorRealloc(void);
-static psS32 testVectorExtend(void);
-
-testDescription tests[] = {
-                              {testVectorAlloc,-1,"psVectorAlloc",0,false},
-                              {testVectorRealloc,-2,"psVectorRealloc",0,false},
-                              {testVectorExtend,-3,"psVectorExtend",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if ( ! runTestSuite(stderr,"psVector",tests,argc,argv) ) {
-        return 1;
-    }
-    return 0;
-}
-
-psS32 testVectorAlloc(void)
-{
-    psVector *psVec = psVectorAlloc(5, PS_TYPE_S32);
-
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 1;
-    }
-    if (psVec->nalloc != 5) {
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 1;
-    }
-    if (psVec->n != psVec->nalloc) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 2;
-    }
-
-    if (psVec->type.type != PS_TYPE_S32) {
-        fprintf(stderr,"Vector type = %d\n", psVec->type.type);
-        return 3;
-    }
-    if (psVec->type.dimen != PS_DIMEN_VECTOR) {
-        fprintf(stderr,"Vector dimen = %d\n", psVec->type.dimen);
-        return 4;
-    }
-
-    // Test B - Add data to integer vector
-    for(psS32 i = 0; i < 5; i++) {
-        psVec->data.S32[i] = i*10;
-    }
-
-    psVector* vecZero = psVectorAlloc(0, PS_TYPE_S32);
-    if(vecZero == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 5;
-    }
-    if (vecZero->nalloc != 0) {
-        fprintf(stderr,"Vector size = %ld\n", vecZero->nalloc);
-        return 6;
-    }
-    if (vecZero->n != vecZero->nalloc) {
-        fprintf(stderr,"Vector population = %ld\n", vecZero->n);
-        return 7;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    psVector* vecBogus = psVectorAlloc(10, 0);
-    if (vecBogus != NULL) {
-        fprintf(stderr,"Huh!  bogus type generated a psVector?");
-        return 20;
-    }
-
-    psFree(psVec);
-    psFree(vecZero);
-
-    return 0;
-}
-
-psS32 testVectorRealloc(void)
-{
-    // create new psVector
-    psVector *psVec = psVectorAlloc(5, PS_TYPE_S32);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 30;
-    }
-    for(psS32 i = 0; i < 5; i++) {
-        psVec->data.S32[i] = i*10;
-    }
-
-    // Test C - Reallocate S32 vector bigger
-    psVec = psVectorRealloc(psVec,10);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 1;
-    }
-    if (psVec->nalloc != 10) {
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 1;
-    }
-    if (psVec->n != 5) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 2;
-    }
-
-    if (psVec->type.type != PS_TYPE_S32) {
-        fprintf(stderr,"Vector type = %d\n", psVec->type.type);
-        return 3;
-    }
-    if (psVec->type.dimen != PS_DIMEN_VECTOR) {
-        fprintf(stderr,"Vector dimen = %d\n", psVec->type.dimen);
-        return 4;
-    }
-
-    for(psS32 i = 5; i < 10; i++) {
-        psVec->data.S32[i] = i*10;
-        psVec->n++;
-    }
-
-    for(psS32 i = 0; i < 10; i++) {
-        if (psVec->data.S32[i] != i*10) {
-            fprintf(stderr,"Elem %d = %d, expected %d\n", i, psVec->data.S32[i], i*10);
-            return 5;
-        }
-    }
-
-    // Test D - Reallocate S32 vector smaller
-    psVec = psVectorRealloc(psVec,3);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 9;
-    }
-    if (psVec->nalloc != 3) {
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 10;
-    }
-    if (psVec->n != 3) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 11;
-    }
-
-    for(psS32 i = 0; i < 3; i++) {
-        if (psVec->data.S32[i] != i*10) {
-            fprintf(stderr,"Elem %d = %d, expected %d\n", i, psVec->data.S32[i], i*10);
-            return 12;
-        }
-    }
-
-    psVec = psVectorRealloc(psVec,0);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 20;
-    }
-    if (psVec->nalloc != 0) {
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 21;
-    }
-    if (psVec->n != 0) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 22;
-    }
-
-    psVector* vecBogus = psVectorRealloc(NULL, 6);
-    if (vecBogus != NULL) {
-        fprintf(stderr,"Huh!  bogus type generated a psVector?");
-        return 25;
-    }
-
-    // Test E - Free S32 vector
-    psFree(psVec);
-
-    return 0;
-}
-
-psS32 testVectorExtend(void)
-{
-    // create new psVector
-    psVector *psVec = psVectorAlloc(5, PS_TYPE_S32);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 1;
-    }
-
-    psVec->n = 0;
-
-    psVec = psVectorExtend(psVec, 0, 2);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 2;
-    }
-    if (psVec->nalloc != 5) { // no growth should occur
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 3;
-    }
-    if (psVec->n != 2) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 4;
-    }
-
-    psVec = psVectorExtend(psVec, 0, 2);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 10;
-    }
-    if (psVec->nalloc != 15) { // growth should occur
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 11;
-    }
-    if (psVec->n != 4) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 12;
-    }
-
-    psVec = psVectorExtend(psVec, 0, -2);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 20;
-    }
-    if (psVec->nalloc != 15) { // no growth
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 21;
-    }
-    if (psVec->n != 2) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 22;
-    }
-
-    psVec = psVectorExtend(psVec, 0, -20);
-    if (psVec == NULL) {
-        fprintf(stderr,"ERROR: Return is NULL\n");
-        return 30;
-    }
-    if (psVec->nalloc != 15) { // no growth
-        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
-        return 31;
-    }
-    if (psVec->n != 0) {
-        fprintf(stderr,"Vector population = %ld\n", psVec->n);
-        return 32;
-    }
-
-    psFree(psVec);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psVectorSort_01.c
===================================================================
--- /trunk/psLib/test/collections/tst_psVectorSort_01.c	(revision 4546)
+++ 	(revision )
@@ -1,182 +1,0 @@
-/** @file  tst_psVectorSort_01.c
- *
- *  @brief Test driver for psVectorSort functions
- *
- *  This test driver contains the following tests for psVectorSort test point 1:
- *     A)  Sort input vector to output vector for all types
- *     B)  Sort input float vector into itself
- *     C)  Attempt to sort vector with invalid type (i.e. PS_TYPE_BOOL)
- *     D)  Sort input vector with zero items
- *     C)  Free float vectors
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-21 21:18:23 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define tstVectorSortByType(datatype,value)   \
-in = psVectorAlloc(7,PS_TYPE_##datatype); \
-in->n = 7;  \
-out = psVectorAlloc(7,PS_TYPE_##datatype); \
-out->n = 7;  \
-in->data.datatype[0] = 7+value; \
-in->data.datatype[1] = 9+value; \
-in->data.datatype[2] = 3+value; \
-in->data.datatype[3] = 1+value; \
-in->data.datatype[4] = 5+value; \
-in->data.datatype[5] = 5+value; \
-in->data.datatype[6] = 0+value; \
-tempVec = out; \
-out = psVectorSort(out, in); \
-if(tempVec != out) {  \
-    psError(PS_ERR_UNKNOWN,true,"Return value not equal to orignal output argument passed to function"); \
-    return 5; \
-} \
-if(out->data.datatype[0] != in->data.datatype[6]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[0] type %s",#datatype); \
-    return 10; \
-} \
-if(out->data.datatype[1] != in->data.datatype[3]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[1] type %s",#datatype); \
-    return 20; \
-} \
-if(out->data.datatype[2] != in->data.datatype[2]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[2] type %s",#datatype); \
-    return 30; \
-} \
-if(out->data.datatype[3] != in->data.datatype[4]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[3] type %s",#datatype); \
-    return 40; \
-} \
-if(out->data.datatype[4] != in->data.datatype[5]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[4] %s",#datatype); \
-    return 50; \
-} \
-if(out->data.datatype[5] != in->data.datatype[0]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[5] %s",#datatype); \
-    return 60; \
-} \
-if(out->data.datatype[6] != in->data.datatype[1]) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper sort out[6] %s",#datatype); \
-    return 70; \
-} \
-psFree(in); \
-psFree(out);
-
-
-
-psS32 main(psS32 argc,
-           char* argv[])
-{
-    psVector *in = NULL;
-    psVector *out = NULL;
-    psVector *tempVec = NULL;
-
-    // Test A - Verify the sort for all supported types
-    printPositiveTestHeader(stdout,"psVectorSort","Sort all types");
-    tstVectorSortByType(S8,0);
-    tstVectorSortByType(S16,1);
-    tstVectorSortByType(S32,2);
-    tstVectorSortByType(S64,3);
-    tstVectorSortByType(U8,4);
-    tstVectorSortByType(U16,5);
-    tstVectorSortByType(U32,6);
-    tstVectorSortByType(U64,7);
-    tstVectorSortByType(F32,8);
-    tstVectorSortByType(F64,9);
-    printFooter(stdout,"psVectorSort","Sort all types",true);
-
-    // Test B - Sort input vector into itself
-    printPositiveTestHeader(stdout,"psVectorSort", "Sort input float vector into itself");
-    in = psVectorAlloc(7, PS_TYPE_F32);
-    in->n = 7;
-    in->data.F32[0] = 0.7f;
-    in->data.F32[1] = 0.9f;
-    in->data.F32[2] = 0.3f;
-    in->data.F32[3] = 0.1f;
-    in->data.F32[4] = 0.5f;
-    in->data.F32[5] = 0.5f;
-    in->data.F32[6] = -2.0f;
-    in = psVectorSort(in, in);
-    if(in->data.F32[0] != -2.0f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[0]");
-        return 100;
-    }
-    if(in->data.F32[1] != 0.1f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[1]");
-        return 200;
-    }
-    if(in->data.F32[2] != 0.3f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[2]");
-        return 300;
-    }
-    if(in->data.F32[3] != 0.5f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[3]");
-        return 400;
-    }
-    if(in->data.F32[4] != 0.5f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[4]");
-        return 500;
-    }
-    if(in->data.F32[5] != 0.7f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[5]");
-        return 600;
-    }
-    if(in->data.F32[6] != 0.9f) {
-        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[6]");
-        return 700;
-    }
-    printFooter(stdout, "psVectorSort", "Sort input float vector into itself", true);
-
-    // Test C - Attempt to sort vector with invalid type
-    printPositiveTestHeader(stdout,"psVectorSort","Invalid vector type");
-    in->type.type = PS_TYPE_BOOL;
-    out = psVectorAlloc(7,PS_TYPE_F32);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error messgae");
-    tempVec = psVectorSort(out,in);
-    if(tempVec != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL on error or didn't error?");
-        return 33;
-    }
-    printFooter(stdout,"psVectorSort","Invalid vector type",true);
-
-    // Test D - Sort vector with zero elements
-    printPositiveTestHeader(stdout,"psVectorSort","Sort zero element vector");
-    out = psVectorAlloc(7,PS_TYPE_F32);
-    tempVec = out;
-    in->n = 0;
-    out = psVectorSort(out,in);
-    if(tempVec != out) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return the specified output vector");
-        return 44;
-    }
-    if(out->n != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not proper set the number of elements to zero");
-        return 55;
-    }
-    printFooter(stdout,"psVectorSort","Sort zero element vector",true);
-
-
-    // Test D - Free float vectors
-    printPositiveTestHeader(stdout,"psVectorSort", "Free float vectors");
-    psFree(in);
-    psFree(out);
-    if ( psMemCheckLeaks(0, NULL, stdout, false)) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-        return 10;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psVectorSort", "Free float vectors", true);
-
-    return 0;
-}
Index: unk/psLib/test/collections/tst_psVectorSort_02.c
===================================================================
--- /trunk/psLib/test/collections/tst_psVectorSort_02.c	(revision 4546)
+++ 	(revision )
@@ -1,179 +1,0 @@
-/** @file  tst_psVectorSort_02.c
- *
- *  @brief Test driver for psVectorSort functions
- *
- *  This test driver contains the following tests for psVectorSort test point 2:
- *     A)  Create vectors
- *     B)  Sort integer vector of indices based on pre-sort order of floating point vector
- *     C)  Attempt to sort with null input vector
- *     D)  Sort with output vector which needs to be resized
- *     E)  Sort input vector with zero elements
- *     F)  Attempt to sort input vector with invalid type
- *     G)  Free vectors
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-21 21:18:23 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define tstVectorSortIndexByType(datatype,value) \
-in = psVectorAlloc( 5, PS_TYPE_##datatype ); \
-in->n = 5; \
-in->data.datatype[0] = 7+value; \
-in->data.datatype[1] = 9+value; \
-in->data.datatype[2] = 5+value; \
-in->data.datatype[3] = 1+value; \
-in->data.datatype[4] = 5+value; \
-out = psVectorSortIndex(out,in); \
-if(out->type.type != PS_TYPE_U32) { \
-    psError(PS_ERR_UNKNOWN,true,"Output vector is not of type PS_TYPE_U32"); \
-    return 10; \
-} \
-if(out->data.U32[0] != 3 ) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[0] = %ld",out->data.U32[0]); \
-    return 20; \
-} \
-if(out->data.U32[1] != 2 ) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[1] = %ld",out->data.U32[1]); \
-    return 30; \
-} \
-if(out->data.U32[2] != 4 ) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[2] = %ld",out->data.U32[2]); \
-    return 40; \
-} \
-if(out->data.U32[3] != 0 ) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[3] = %ld",out->data.U32[3]); \
-    return 50; \
-} \
-if(out->data.U32[4] != 1 ) { \
-    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[4] = %ld",out->data.U32[4]); \
-    return 60; \
-} \
-psFree(in);
-
-psS32 main(psS32 argc,
-           char* argv[])
-{
-    psVector *in = NULL;
-    psVector *out = NULL;
-    psVector *tempVect = NULL;
-
-    // Test A - Sort vectors by index for all types
-    printPositiveTestHeader(stdout,"psVectorSortIndex","Sort by index for all types");
-    tstVectorSortIndexByType(S8,0)
-    tstVectorSortIndexByType(U8,1)
-    tstVectorSortIndexByType(S16,2)
-    tstVectorSortIndexByType(U16,3)
-    tstVectorSortIndexByType(S32,4)
-    tstVectorSortIndexByType(U32,5)
-    tstVectorSortIndexByType(S64,6)
-    tstVectorSortIndexByType(U64,7)
-    tstVectorSortIndexByType(F32,8)
-    tstVectorSortIndexByType(F64,9)
-    psFree(out);
-    printFooter(stdout,"psVectorSortIndex","Sort by index for all types",true);
-
-    // Test  C  Attempt to sort with null input vector
-    printPositiveTestHeader(stdout,"psVectorSortIndex","Attempt to sort with NULL input");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    in = NULL;
-    out = psVectorAlloc(5,PS_TYPE_U32);
-    out = psVectorSortIndex(out,in);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input specified");
-        return 111;
-    }
-    printFooter(stdout,"psVectorSortIndex","Attempt to sort with NULL input",true);
-
-    // Test  D  Sort with output vector which needs to be resized
-    printPositiveTestHeader(stdout,"psVectorSortIndex","Sort with resize output vector");
-    in = psVectorAlloc(5,PS_TYPE_U8);
-    for(psS32 m=0; m<5; m++) {
-        in->data.U8[m]= 20-m;
-    }
-    out = psVectorAlloc(3,PS_TYPE_U32);
-    out = psVectorSortIndex(out,in);
-    if(out->n != 5) {
-        psError(PS_ERR_UNKNOWN,true,"Did not properly resize output vector");
-        return 112;
-    }
-    if(out->data.U32[0] != 4) {
-        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[0] = %d",out->data.U32[0]);
-        return 113;
-    }
-    if(out->data.U32[1] != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[1] = %d",out->data.U32[1]);
-        return 114;
-    }
-    if(out->data.U32[2] != 2) {
-        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[2] = %d",out->data.U32[2]);
-        return 115;
-    }
-    if(out->data.U32[3] != 1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[3] = %d",out->data.U32[3]);
-        return 116;
-    }
-    if(out->data.U32[4] != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[4] = %d",out->data.U32[4]);
-        return 117;
-    }
-    psFree(in);
-    psFree(out);
-    printFooter(stdout,"psVectorSortIndex","Sort with resize output vector",true);
-
-    // Test E - Sort input vector with zero elements
-    printPositiveTestHeader(stdout,"psVectorSortIndex","Sort with input vector with zero elements");
-    in = psVectorAlloc(5,PS_TYPE_U8);
-    out = psVectorAlloc(5,PS_TYPE_U32);
-    in->n = 0;
-    out->n = 0;
-    tempVect = out;
-    out = psVectorSortIndex(out,in);
-    if ( out != tempVect ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return the same output vector");
-        return 118;
-    }
-    in->n=5;
-    out->n=5;
-    psFree(out);
-    psFree(in);
-    printFooter(stdout,"psVectorSortIndex","Sort with input vector with zero elements",true);
-
-    // Test F - Attempt to sort input vector with invalid type
-    printPositiveTestHeader(stdout,"psVectorSortIndex","Attempt to sort with invalid type");
-    in = psVectorAlloc(5,PS_TYPE_U8);
-    out = psVectorAlloc(5,PS_TYPE_U32);
-    tempVect = out;
-    in->type.type = PS_TYPE_BOOL;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate two error messages(psVectorSort,psVectorSortIndex)");
-    out = psVectorSortIndex(out,in);
-    if( out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL on error or didn't error?");
-        return 119;
-    }
-    in->type.type = PS_TYPE_U8;
-    psFree(in);
-    printFooter(stdout,"psVectorSortIndex","Attempt to sort with invalid type",true);
-
-    // Test G - Free vectors
-    printPositiveTestHeader(stdout,"psVectorSortIndex", "Free vectors");
-    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
-    if(nLeaks) {
-        printf("ERROR: Found %d memory leaks\n", nLeaks);
-        return 222;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-        return 333;
-    }
-    printFooter(stdout, "psVectorSort", "Free vectors", true);
-
-}
Index: unk/psLib/test/collections/tst_psVectorSort_03.c
===================================================================
--- /trunk/psLib/test/collections/tst_psVectorSort_03.c	(revision 4546)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/** @file  tst_psVectorSort_03.c
- *
- *  @brief Test driver for psVectorSort functions
- *
- *  This test driver contains the following tests for psVectorSort test point 3:
- *     A)  Create float vectors of different sizes
- *     B)  Attempt to sort vectors...should get errors
- *     C)  Create float vector and double vector
- *     D)  Attempt to sort vectors...should get errors
- *     E)  Free float, double vectors
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:41 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-psS32 main(psS32 argc,
-           char* argv[])
-{
-    psVector *in = NULL;
-    psVector *out = NULL;
-    psVector *in2 = NULL;
-    psVector *out2 = NULL;
-
-    // Test A - Create float vectors
-    printPositiveTestHeader(stdout,"psVectorSort", "Create float vectors of different sizes");
-    in = psVectorAlloc(5, PS_TYPE_F32);
-    in->n = 5;
-    out = psVectorAlloc(6, PS_TYPE_F32);
-    out->n = 6;
-    in->n = 5;
-    for(psS32 i=0; i<5; i++) {
-        printf("arr[%d] = %f\n", i, in->data.F32[i]);
-    }
-    printFooter(stdout, "psVectorSort", "Create float vectors of different sizes", true);
-
-
-    // Test B - Sort input float vector and put results into output float vector
-    printNegativeTestHeader(stdout,"psVectorSort", "Sort float vector",
-                            "Input and output vector sizes are not equal", 0);
-    out = psVectorSort(out, in);
-    printFooter(stdout, "psVectorSort", "Sort float vector", true);
-
-    // Test C - Create float vector and double vector
-    printPositiveTestHeader(stdout,"psVectorSort","Create float & double vectors of same size");
-    in2 = psVectorAlloc(5, PS_TYPE_F32);
-    in2->n = 5;
-    out2 = psVectorAlloc(5, PS_TYPE_F64);
-    out2->n = 5;
-    for(psS32 j=0; j<5; j++) {
-        printf("vec[%d] = %f\n", j, in2->data.F32[j]);
-    }
-    printFooter(stdout, "psVectorSort", "Create float and double vectors same size", true);
-
-    // Test D - Attempt to sort vectors with output of different type should create error
-    printNegativeTestHeader(stdout,"psVectorSort", "Sort F32/F64 vector",
-                            "Input and output vector different types", 0);
-    out2 = psVectorSort(out2, in2);
-    printFooter(stdout, "psVectorSort", "Sort float vector", true);
-
-    // Test C - Free float vectors
-    printPositiveTestHeader(stdout,"psVectorSort", "Free float vectors");
-    psFree(in);
-    psFree(in2);
-    psFree(out);
-    psFree(out2);
-    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
-    if(nLeaks) {
-        printf("ERROR: Found %d memory leaks\n", nLeaks);
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psVectorSort", "Free float vectors", true);
-
-}
Index: unk/psLib/test/collections/tst_psVectorSort_04.c
===================================================================
--- /trunk/psLib/test/collections/tst_psVectorSort_04.c	(revision 4546)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/** @file  tst_psVectorSort_04.c
- *
- *  @brief Test driver for psVectorSort functions
- *
- *  This test driver contains the following tests for psVectorSort test point 4:
- *     A)  Attempt to sort with null input vector
- *     B)  Free vectors
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.7 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:41 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-psS32 main(psS32 argc,
-           char* argv[])
-{
-    psVector *badIn = NULL;
-    psVector *goodOut = psVectorAlloc(5, PS_TYPE_F32);
-
-    // Test A - Attempt to sort with null input vector
-    printNegativeTestHeader(stdout,"psVectorSort", "Attempt to sort with null input vector",
-                            "Null input vector", 0);
-    goodOut = psVectorSort(goodOut, badIn);
-    printFooter(stdout, "psVectorSort", "Attempt to sort with null input vector", true);
-
-    // Test B - Free vectors
-    printPositiveTestHeader(stdout, "psVectorSort", "Free vectors");
-    psFree(goodOut);
-    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
-    if(nLeaks) {
-        printf("ERROR: Found %d memory blocks\n", nLeaks);
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psVectorSort", "Free arays", true);
-
-    return 0;
-}
Index: unk/psLib/test/collections/verified/tst_psArray.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psArray.stderr	(revision 4546)
+++ 	(revision )
@@ -1,220 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{psArray}                                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Create void pointer array}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Create void pointer array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Add data to void pointer array}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-ts[0].x = 0 ts[0].y = 0.00
-ts[1].x = 10 ts[1].y = 10.10
-ts[2].x = 20 ts[2].y = 20.20
-ts[3].x = 30 ts[3].y = 30.30
-ts[4].x = 40 ts[4].y = 40.40
-array size = 5
-array population = 5
-
----> TESTPOINT PASSED (psArray{Add data to void pointer array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Reallocate void pointer array bigger}              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Adding more elements to void pointer array...
-ts[0].x = 0 ts[0].y = 0.00
-ts[1].x = 10 ts[1].y = 10.10
-ts[2].x = 20 ts[2].y = 20.20
-ts[3].x = 30 ts[3].y = 30.30
-ts[4].x = 40 ts[4].y = 40.40
-ts[5].x = 50 ts[5].y = 50.50
-ts[6].x = 60 ts[6].y = 60.60
-ts[7].x = 70 ts[7].y = 70.70
-ts[8].x = 80 ts[8].y = 80.80
-ts[9].x = 90 ts[9].y = 90.90
-array size = 10
-array population = 10
-
----> TESTPOINT PASSED (psArray{Reallocate void pointer array bigger} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Reallocate void pointer array smaller}             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-ts[0].x = 0 ts[0].y = 0.00
-ts[1].x = 10 ts[1].y = 10.10
-ts[2].x = 20 ts[2].y = 20.20
-array size = 3
-array population = 3
-
----> TESTPOINT PASSED (psArray{Reallocate integer void pointer smaller} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Reallocate with a null array}                      *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Error message generator                                    *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testArray
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psArrayRealloc (FILE:LINENO)
-    psArrayRealloc must be given a non-NULL psArray to resize.
-
----> TESTPOINT PASSED (psArray{Reallocate with a null array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Remove valid item}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Array size after removal = 2
-ts[0].x = 10 ts[0].y = 10.10
-ts[1].x = 20 ts[1].y = 20.20
-
----> TESTPOINT PASSED (psArray{Remove valid item} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Remove invalid item from array}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Remove invalid item from array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Remove item from null array}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psArrayRemove (FILE:LINENO)
-    Specified psArray can not be NULL.
-
----> TESTPOINT PASSED (psArray{Remove item from null array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Remove null item from array}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Remove null item from array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Free void pointer array}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Free void pointer array} | tst_psArray.c)
-
-
----> TESTPOINT PASSED (psArray{psArray} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{psArray}                                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Create void pointer array}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Create void pointer array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Add data to void pointer array}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-ts[0].x = 100 ts[0].y = 101.00
-ts[1].x = 90 ts[1].y = 90.90
-ts[2].x = 80 ts[2].y = 80.80
-ts[3].x = 70 ts[3].y = 70.70
-ts[4].x = 60 ts[4].y = 60.60
-ts[5].x = 50 ts[5].y = 50.50
-ts[6].x = 40 ts[6].y = 40.40
-ts[7].x = 30 ts[7].y = 30.30
-ts[8].x = 20 ts[8].y = 20.20
-ts[9].x = 10 ts[9].y = 10.10
-array size = 10
-array population = 10
-
----> TESTPOINT PASSED (psArray{Add data to void pointer array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Sort data in array}                                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-ts[0].x = 10 ts[0].y = 10.10
-ts[1].x = 20 ts[1].y = 20.20
-ts[2].x = 30 ts[2].y = 30.30
-ts[3].x = 40 ts[3].y = 40.40
-ts[4].x = 50 ts[4].y = 50.50
-ts[5].x = 60 ts[5].y = 60.60
-ts[6].x = 70 ts[6].y = 70.70
-ts[7].x = 80 ts[7].y = 80.80
-ts[8].x = 90 ts[8].y = 90.90
-ts[9].x = 100 ts[9].y = 101.00
-
----> TESTPOINT PASSED (psArray{Sort data in array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Attempt to sort array}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Attempt to sort array} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{Free void pointer array}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Free void pointer array} | tst_psArray.c)
-
-
----> TESTPOINT PASSED (psArray{psArray} | tst_psArray.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray.c                                              *
-*            TestPoint: psArray{psArrayAdd}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{psArrayAdd} | tst_psArray.c)
-
Index: unk/psLib/test/collections/verified/tst_psArray01.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psArray01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray01.c                                            *
-*            TestPoint: psArray{Create void pointer array}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Create void pointer array} | tst_psArray01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray01.c                                            *
-*            TestPoint: psArray{Add data to void pointer array}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-ts[0].x = 100 ts[0].y = 101.00
-ts[1].x = 90 ts[1].y = 90.90
-ts[2].x = 80 ts[2].y = 80.80
-ts[3].x = 70 ts[3].y = 70.70
-ts[4].x = 60 ts[4].y = 60.60
-ts[5].x = 50 ts[5].y = 50.50
-ts[6].x = 40 ts[6].y = 40.40
-ts[7].x = 30 ts[7].y = 30.30
-ts[8].x = 20 ts[8].y = 20.20
-ts[9].x = 10 ts[9].y = 10.10
-array size = 10
-array population = 10
-
----> TESTPOINT PASSED (psArray{Add data to void pointer array} | tst_psArray01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray01.c                                            *
-*            TestPoint: psArray{Sort data in array}                                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-ts[0].x = 10 ts[0].y = 10.10
-ts[1].x = 20 ts[1].y = 20.20
-ts[2].x = 30 ts[2].y = 30.30
-ts[3].x = 40 ts[3].y = 40.40
-ts[4].x = 50 ts[4].y = 50.50
-ts[5].x = 60 ts[5].y = 60.60
-ts[6].x = 70 ts[6].y = 70.70
-ts[7].x = 80 ts[7].y = 80.80
-ts[8].x = 90 ts[8].y = 90.90
-ts[9].x = 100 ts[9].y = 101.00
-
----> TESTPOINT PASSED (psArray{Sort data in array} | tst_psArray01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray01.c                                            *
-*            TestPoint: psArray{Attempt to sort array}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Attempt to sort array} | tst_psArray01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psArray01.c                                            *
-*            TestPoint: psArray{Free void pointer array}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psArray{Free void pointer array} | tst_psArray01.c)
-
Index: unk/psLib/test/collections/verified/tst_psBitSet.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psBitSet.stderr	(revision 4546)
+++ 	(revision )
@@ -1,171 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetAlloc}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Creating psBitSet with 24 bits...
-Creating psBitSet with 25 bits...
-<DATE><TIME>|<HOST>|I|testBitSet01a
-    Following is an error.
-<DATE><TIME>|<HOST>|E|psBitSetAlloc (FILE:LINENO)
-    The number of bit in a psBitSet (-4) must be greater than zero.
-
----> TESTPOINT PASSED (psBitSet{psBitSetAlloc} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetSet/psBitSetClear}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Setting first bit...
-Setting third bit...
-Setting last bit...
-100000000000000000000101
-
-Clearing first bit...
-Clearing third bit...
-Clearing last bit...
-000000000000000000000000
-
-<DATE><TIME>|<HOST>|I|testBitSet01b
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetClear (FILE:LINENO)
-    Can not operate on a NULL psBitSet.
-<DATE><TIME>|<HOST>|I|testBitSet01b
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetClear (FILE:LINENO)
-    The specified bit position (-3) is invalid.  Position must be between 0 and 23.
-<DATE><TIME>|<HOST>|I|testBitSet01b
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetSet (FILE:LINENO)
-    The specified bit position (-4) is invalid.  Position must be between 0 and 23.
-<DATE><TIME>|<HOST>|I|testBitSet01b
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetSet (FILE:LINENO)
-    The specified bit position (200) is invalid.  Position must be between 0 and 23.
-<DATE><TIME>|<HOST>|I|testBitSet01b
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetSet (FILE:LINENO)
-    Can not operate on a NULL psBitSet.
-
----> TESTPOINT PASSED (psBitSet{psBitSetSet/psBitSetClear} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetTest}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Setting first bit...
-Setting third bit...
-Setting last bit...
-<DATE><TIME>|<HOST>|I|testBitSet01c
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetTest (FILE:LINENO)
-    The specified bit position (-4) is invalid.  Position must be between 0 and 23.
-<DATE><TIME>|<HOST>|I|testBitSet01c
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetTest (FILE:LINENO)
-    The specified bit position (200) is invalid.  Position must be between 0 and 23.
-<DATE><TIME>|<HOST>|I|testBitSet01c
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetTest (FILE:LINENO)
-    Can not operate on a NULL psBitSet.
-
----> TESTPOINT PASSED (psBitSet{psBitSetTest} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetOp}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testBitSet06
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
-    The psBitSet operand must be the same size.
-<DATE><TIME>|<HOST>|I|testBitSet06
-    Following is an error.
-<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
-    Specified operator, FOO, is invalid.  Valid operators are AND, OR, and XOR.
-<DATE><TIME>|<HOST>|I|testBitSet06
-    Following is an error.
-<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
-    Specified operator, FOO, is invalid.  Valid operators are AND, OR, and XOR.
-<DATE><TIME>|<HOST>|I|testBitSet06
-    Following should generate an error
-<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
-    First psBitSet operand can not be NULL.
-<DATE><TIME>|<HOST>|I|testBitSet06
-    Following should generate an error
-<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
-    Specified operator is NULL.  Must specify desired operator.
-<DATE><TIME>|<HOST>|I|testBitSet06
-    Following should generate an error
-<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
-    Second psBitSet operand can not be NULL.
-
----> TESTPOINT PASSED (psBitSet{psBitSetOp} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetOp AND Operator}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psBitSetOp input is 001100110011001100110011, 010101010101010101010101.  Truth is 000100010001000100010001.
-<DATE><TIME>|<HOST>|I|testBitSet02
-    Perform binary AND with psBitSets
-<DATE><TIME>|<HOST>|I|testBitSet02
-    Perform binary AND and auto allocate output
-
----> TESTPOINT PASSED (psBitSet{psBitSetOp AND Operator} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetOp OR Operator}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psBitSetOp input is 110011001100110011001100, 101010101010101010101010.  Truth is 111011101110111011101110.
-<DATE><TIME>|<HOST>|I|testBitSet03
-    Perform binary OR with psBitSets
-<DATE><TIME>|<HOST>|I|testBitSet03
-    Perform binary OR and auto allocate output
-
----> TESTPOINT PASSED (psBitSet{psBitSetOp OR Operator} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetOp XOR Operator}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psBitSetOp input is 110011001100110011001100, 101010101010101010101010.  Truth is 011001100110011001100110.
-<DATE><TIME>|<HOST>|I|testBitSet04
-    Perform binary XOR with psBitSets
-<DATE><TIME>|<HOST>|I|testBitSet04
-    Perform binary XOR and auto allocate output
-
----> TESTPOINT PASSED (psBitSet{psBitSetOp XOR Operator} | tst_psBitSet.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psBitSet.c                                             *
-*            TestPoint: psBitSet{psBitSetNot}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psBitSetOp input is 101010101010101010101010.  Truth is 010101010101010101010101.
-<DATE><TIME>|<HOST>|I|testBitSet05
-    Perform binary NOT with psBitSets
-<DATE><TIME>|<HOST>|I|testBitSet05
-    Perform binary NOT and auto allocate output
-<DATE><TIME>|<HOST>|I|testBitSet05
-    Following should generate an error
-<DATE><TIME>|<HOST>|E|psBitSetNot (FILE:LINENO)
-    Operand can not be NULL.
-
----> TESTPOINT PASSED (psBitSet{psBitSetNot} | tst_psBitSet.c)
-
Index: unk/psLib/test/collections/verified/tst_psHash00.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash00.stdout	(revision 4546)
+++ 	(revision )
@@ -1,9 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash00.c                                             *
-*            TestPoint: psHash functions{psHashAlloc()}                            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash functions{psHashAlloc()} | tst_psHash00.c)
-
Index: unk/psLib/test/collections/verified/tst_psHash01.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,12 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashAdd with null table
-<DATE><TIME>|<HOST>|E|psHashAdd (FILE:LINENO)
-    Unallowable operation: hash is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashAdd with null key
-<DATE><TIME>|<HOST>|E|psHashAdd (FILE:LINENO)
-    Unallowable operation: key is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashAdd with null data
-<DATE><TIME>|<HOST>|E|psHashAdd (FILE:LINENO)
-    Unallowable operation: data is NULL.
Index: unk/psLib/test/collections/verified/tst_psHash01.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHash functions{psHashAlloc}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash functions{psHashAlloc} | tst_psHash01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHash functions{psHashAdd}                                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash functions{psHashAdd} | tst_psHash01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHash replace item{psHashAdd}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash replace item{psHashAdd} | tst_psHash01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHashAdd{NULL hash table}                                 *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Hash table can not be NULL.                                *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashAdd{NULL hash table} | tst_psHash01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHashAdd{NULL key}                                        *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Hash key can not be NULL.                                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashAdd{NULL hash key} | tst_psHash01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHashAdd{NULL hash data}                                  *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Hash data can not be NULL.                                 *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashAdd{NULL hash data} | tst_psHash01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash01.c                                             *
-*            TestPoint: psHash functions{psHashFree}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash functions{psHashFree()} | tst_psHash01.c)
-
Index: unk/psLib/test/collections/verified/tst_psHash02.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashLookup with null table
-<DATE><TIME>|<HOST>|E|psHashLookup (FILE:LINENO)
-    Unallowable operation: hash is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashLookup with null key
-<DATE><TIME>|<HOST>|E|psHashLookup (FILE:LINENO)
-    Unallowable operation: key is NULL.
Index: unk/psLib/test/collections/verified/tst_psHash02.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,42 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash02.c                                             *
-*            TestPoint: psHash functions{psHashLookup}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash functions{psHashLookup} | tst_psHash02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash02.c                                             *
-*            TestPoint: psHashLookup{Invalid key}                                  *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Key is not found in the table                              *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashLookup{Invalid key} | tst_psHash02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash02.c                                             *
-*            TestPoint: psHashLookup{NULL table}                                   *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Can not lookup with NULL table                             *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashLookup{NULL table} | tst_psHash02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash02.c                                             *
-*            TestPoint: psHashLookup{NULL key}                                     *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Can not lookup with NULL key.                              *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashLookup{NULL key} | tst_psHash02.c)
-
Index: unk/psLib/test/collections/verified/tst_psHash03.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash03.stderr	(revision 4546)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashRemove with null table
-<DATE><TIME>|<HOST>|E|psHashRemove (FILE:LINENO)
-    Unallowable operation: hash is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message: psHashRemove with null key
-<DATE><TIME>|<HOST>|E|psHashRemove (FILE:LINENO)
-    Unallowable operation: key is NULL.
Index: unk/psLib/test/collections/verified/tst_psHash03.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash03.stdout	(revision 4546)
+++ 	(revision )
@@ -1,42 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash03.c                                             *
-*            TestPoint: psHash functions{psHashRemove}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHash functions{psHashRemove()} | tst_psHash03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash03.c                                             *
-*            TestPoint: psHashRemove{Invalid key}                                  *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Key is not found in table                                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashRemove{Invalid key} | tst_psHash03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash03.c                                             *
-*            TestPoint: psHashRemove{NULL table}                                   *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Can not remove with NULL table                             *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashRemove{NULL table} | tst_psHash03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash03.c                                             *
-*            TestPoint: psHashRemove{NULL key}                                     *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Can not remove with NULL key                               *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashRemove{NULL key} | tst_psHash03.c)
-
Index: unk/psLib/test/collections/verified/tst_psHash04.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash04.stdout	(revision 4546)
+++ 	(revision )
@@ -1,24 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash04.c                                             *
-*            TestPoint: psHash functions{psHashKeyList()}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Linked List Entries: ENTRY03
-Linked List Entries: ENTRY02
-Linked List Entries: ENTRY01
-Linked List Entries: ENTRY00
-
----> TESTPOINT PASSED (psHash functions{psHashKeyList()} | tst_psHash04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash04.c                                             *
-*            TestPoint: psHashKeyList{NULL table}                                  *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Can not lookup with NULL table                             *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psHashKeyList{NULL table} | tst_psHash04.c)
-
Index: unk/psLib/test/collections/verified/tst_psHash05.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psHash05.stderr	(revision 4546)
+++ 	(revision )
@@ -1,13 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHash05.c                                             *
-*            TestPoint: psHash{psHashToArray}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|hashToArray
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psHashToArray (FILE:LINENO)
-    Unallowable operation: hash is NULL.
-
----> TESTPOINT PASSED (psHash{psHashToArray} | tst_psHash05.c)
-
Index: unk/psLib/test/collections/verified/tst_psList.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psList.stderr	(revision 4546)
+++ 	(revision )
@@ -1,166 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListAlloc}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListAlloc
-    psListAlloc shall create a psList with either 0 or 1 element.
-
----> TESTPOINT PASSED (psList{psListAlloc} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListAdd}                                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListAdd
-    psListAdd shall add an element to list
-<DATE><TIME>|<HOST>|I|testListAdd
-    Following should generate an error for using NULL list.
-<DATE><TIME>|<HOST>|E|psListAdd (FILE:LINENO)
-    Specified psList reference is NULL.
-<DATE><TIME>|<HOST>|I|testListAdd
-    Following should generate an error msg to add NULL data
-<DATE><TIME>|<HOST>|E|psListAdd (FILE:LINENO)
-    Specified data item is NULL.
-<DATE><TIME>|<HOST>|I|testListAdd
-    Following should error with invalid insert location
-<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
-    Specified location, -7, is invalid.
-<DATE><TIME>|<HOST>|I|testListAdd
-    Following should be a warning.
-<DATE><TIME>|<HOST>|W|psListAdd
-    Specified location, 9, is beyond the end of the list.  Adding data item to tail.
-
----> TESTPOINT PASSED (psList{psListAdd} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListGet}                                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListGet
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
-    Specified psList reference is NULL.
-<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
-    Specified location, 5, is invalid.
-<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
-    Specified location, 5, is invalid.
-<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
-    Specified location, 4, is invalid.
-<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
-    Specified location, 4, is invalid.
-
----> TESTPOINT PASSED (psList{psListGet} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListRemove}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListRemove
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psListRemove (FILE:LINENO)
-    Specified psList reference is NULL.
-<DATE><TIME>|<HOST>|I|testListRemove
-    Next message should be an error
-<DATE><TIME>|<HOST>|E|psListRemoveData (FILE:LINENO)
-    Specified data item is NULL.
-<DATE><TIME>|<HOST>|I|testListRemove
-    Next message should be an error
-<DATE><TIME>|<HOST>|E|psListRemoveData (FILE:LINENO)
-    Specified data item is not found in the psList.
-<DATE><TIME>|<HOST>|I|testListRemove
-    NULL list in psListRemoveData should generate error message.
-<DATE><TIME>|<HOST>|E|psListRemoveData (FILE:LINENO)
-    Specified psList reference is NULL.
-
----> TESTPOINT PASSED (psList{psListRemove} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListConvert}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psList{psListConvert} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListIterator}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListIterator
-     psListSetIterator/psListGetNext/psListGetPrev shall move the list cursor to the specified location
-<DATE><TIME>|<HOST>|W|psListGetAndDecrement
-    Attempt to get previous with itertator cursor NULL and offEnd false
-
----> TESTPOINT PASSED (psList{psListIterator} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListFree}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psList{psListFree} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListSort}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psList{psListSort} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListAddAfter}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListAddAfter
-    NULL data pointer should generate error message
-<DATE><TIME>|<HOST>|E|psListAddAfter (FILE:LINENO)
-    Specified data item is NULL.
-<DATE><TIME>|<HOST>|I|testListAddAfter
-    NULL iterator should generate error message
-<DATE><TIME>|<HOST>|E|psListAddAfter (FILE:LINENO)
-    Specified iterator is NULL.
-<DATE><TIME>|<HOST>|I|testListAddAfter
-    Non-mutable list should generate error message
-<DATE><TIME>|<HOST>|E|psListAddAfter (FILE:LINENO)
-    Specified iterator indicates list is non-mutable.
-
----> TESTPOINT PASSED (psList{psListAddAfter} | tst_psList.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psList.c                                               *
-*            TestPoint: psList{psListAddBefore}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testListAddBefore
-    NULL data pointer should generate error message
-<DATE><TIME>|<HOST>|E|psListAddBefore (FILE:LINENO)
-    Specified data item is NULL.
-<DATE><TIME>|<HOST>|I|testListAddBefore
-    NULL iterator should generate error message
-<DATE><TIME>|<HOST>|E|psListAddBefore (FILE:LINENO)
-    Specified iterator is NULL.
-<DATE><TIME>|<HOST>|I|testListAddBefore
-    Non-mutable list should generate error message
-<DATE><TIME>|<HOST>|E|psListAddBefore (FILE:LINENO)
-    Specified iterator indicates list is non-mutable.
-
----> TESTPOINT PASSED (psList{psListAddBefore} | tst_psList.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadataIO.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadataIO.stderr	(revision 4546)
+++ 	(revision )
@@ -1,117 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadataIO.c                                         *
-*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|psMetadataAddItem
-    Metadata item Float has been replaced
-
----> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadataIO.c                                         *
-*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
-    Following should generate parse error message
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to parse the value 'X' of metadata item boolean, type BOOL, on line 2 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to read a metadata value on line 4 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to read a metadata value on line 7 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to parse the value 'x,y,z' of metadata item @vector1, type U8, on line 8 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to read a metadata type on line 9 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to read a metadata value on line 9 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to parse the value '' of metadata item @vector3, type F8, on line 10 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Duplicate MULTI specifier on line 14 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Metadata type 'CELL', found on line 17 of test2.config, is invalid.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to parse the value 'aabb' of metadata item value1, type F64, on line 20 of test2.config.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to parse the value 'ccdd' of metadata item value2, type S32, on line 21 of test2.config.
-<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
-    More than one '@' character not allowed.  Found on line 24 of test2.config.
-<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
-    Failed to read a metadata type on line 27 of test2.config.
-<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
-    Specified type, CELL, on line 31 of test2.config is already defined.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Duplicate metadata item name is not allowed.  Use a psMetadataFlags option to allow such action.
-<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
-    Metadata type 'NEWCELL', found on line 37 of test2.config, is invalid.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to read a metadata OURCELL on line 40 of test2.config.
-<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
-    Metadata type 'NEWCELL1', found on line 43 of test2.config, is invalid.
-<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
-    Failed to open file 'ab.config'. Check if it exists and it has the proper permissions.
-<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
-    Following should generate an error message for NULL failed lines arg
-<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
-    Unallowable operation: nFail is NULL.
-<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
-    Following should generate an error message for NULL file name arg
-<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
-    Unallowable operation: fileName is NULL.
-
----> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadataIO.c                                         *
-*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testMetadataParseConfig2
-    Following should generate an error of duplicate key names
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Duplicate metadata item name is not allowed.  Use a psMetadataFlags option to allow such action.
-<DATE><TIME>|<HOST>|E|psMetadataAddV (FILE:LINENO)
-    Failed to add metadata item to metadata collection list.
-
----> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadataIO.c                                         *
-*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadataIO.c                                         *
-*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Metadata type 'CELL', found on line 6 of test5.config, is invalid.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Metadata type 'CELL2', found on line 12 of test5.config, is invalid.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Metadata type 'CELL3', found on line 18 of test5.config, is invalid.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Failed to read a metadata CELL.00 on line 22 of test5.config.
-<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
-    Specified type, CELL5, on line 26 of test5.config is already defined.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Metadata type 'CELL6', found on line 30 of test5.config, is invalid.
-<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
-    Metadata type 'CELL6', found on line 31 of test5.config, is invalid.
-
----> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadataIO.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadataIO.stdout	(revision 4546)
+++ 	(revision )
@@ -1,222 +1,0 @@
-Double                    F64                                   1.234568  # This is a comment   
-String                    STR    This is the string that forms the value  # comment             
-boolean                   BOOL                                         1  # The value of 'boolean' is 'true'
-@primes                   U8     2,3,5,7,11,13,17  # These are prime numbers
-comment                   MULTI
-comment                   STR                                       This
-comment                   STR                                         is
-comment                   STR                                          a
-comment                   STR                                 non-unique
-comment                   STR                                        key
-Float                     F64                                   1.234560  # This generates a warning, and, if 'overwrite' is 'false', is ignored
-boolean1                  BOOL                                         0  # The value of 'boolean' is 'false'
-@negprimes                S8     -2,-3,-5,-7,-11,-13,-17,-19
-@vector1                  U16    0,1,2,4,8
-@vector2                  U32    0,8,16,32,64,128
-@vector3                  U64    0,64,256
-@vector4                  S16    -2,-1,0,1,2
-@vector5                  S32    -4,-2,0,2,4,6
-@vector6                  S64    -16,-4,0,4,16,36,64
-@vector7                  F32    -1.03,1.04,-1.05,1.06
-@vector8                  F64    -2.22,2.21,-2.2,2.19,-2.18
-CELL.00                   METADATA
-    EXTNAME                   STR                                      CCD00
-    BIASSEC                   STR                                    BSEC-00
-    CHIP                      STR                                    CHIP.00
-END
-CELL.01                   METADATA
-    EXTNAME                   STR                                      CCD01
-    BIASSEC                   STR                                    BSEC-01
-    CHIP                      STR                                    CHIP.00
-END
-MYCELL                    MULTI
-MYCELL                    METADATA
-    EXTNAME                   STR                                      CCD00
-    BIASSEC                   STR                                    BSEC-00
-    CHIP                      STR                                    CHIP.00
-    NCELL                     S32                                         24
-END
-MYCELL                    S32                                        123  # A number            
-cell                      METADATA
-    foo                       METADATA
-        bar                       STR                                        BAZ
-        ping                      STR                                       PONG
-    END
-    EXTNAME                   STR                                      CCD00
-    BIASSEC                   STR                                    BSEC-00
-    CHIP                      STR                                    CHIP.00
-    NCELL                     S32                                         12
-END
-CELL1                     METADATA
-    EXTNAME                   STR                                      CCD00
-    BIASSEC                   STR                                    BSEC-00
-    CHIP                      STR                                    CHIP.00
-    NCELL                     S32                                         24
-END
-CELL2                     METADATA
-    FOO                       METADATA
-        BAR                       STR                                        BAZ
-        PING                      STR                                       PONG
-    END
-    EXTNAME                   STR                                      CCD00
-    BIASSEC                   STR                                    BSEC-00
-    CHIP                      STR                                    CHIP.00
-    NCELL                     S32                                         24
-END
-FOO1                      METADATA
-    FOO2                      METADATA
-        FOO3                      METADATA
-            FOO4                      METADATA
-                FOO5                      METADATA
-                    FOO6                      METADATA
-                        BAR                       STR                                        BAZ
-                        PING                      STR                                       PONG
-                    END
-                    BAR                       STR                                        BAZ
-                    PING                      STR                                       PONG
-                END
-                BAR                       STR                                        BAZ
-                PING                      STR                                       PONG
-            END
-            BAR                       STR                                        BAZ
-            PING                      STR                                       PONG
-        END
-        BAR                       STR                                        BAZ
-        PING                      STR                                       PONG
-    END
-    BAR                       STR                                        BAZ
-    PING                      STR                                       PONG
-END
-FOO2                      METADATA
-    BAR                       STR                                        BAZ
-    PING                      STR                                       PONG
-    FOO3                      METADATA
-        BAR                       STR                                        BAZ
-        PING                      STR                                       PONG
-        FOO4                      METADATA
-            BAR                       STR                                        BAZ
-            PING                      STR                                       PONG
-            FOO5                      METADATA
-                BAR                       STR                                        BAZ
-                PING                      STR                                       PONG
-                FOO6                      METADATA
-                    BAR                       STR                                        BAZ
-                    PING                      STR                                       PONG
-                    FOO7                      METADATA
-                        BAR                       STR                                        BAZ
-                        PING                      STR                                       PONG
-                    END
-                END
-            END
-        END
-    END
-END
-FOO3                      METADATA
-    BAR                       STR                                        BAZ
-    FOO4                      METADATA
-        BAR                       STR                                        BAZ
-        FOO5                      METADATA
-            BAR                       STR                                        BAZ
-            FOO6                      METADATA
-                BAR                       STR                                        BAZ
-                FOO7                      METADATA
-                    BAR                       STR                                        BAZ
-                    FOO8                      METADATA
-                        BAR                       STR                                        BAZ
-                        PING                      STR                                       PONG
-                    END
-                    PING                      STR                                       PONG
-                END
-                PING                      STR                                       PONG
-            END
-            PING                      STR                                       PONG
-        END
-        PING                      STR                                       PONG
-    END
-    PING                      STR                                       PONG
-END
-FOO4                      METADATA
-    FOO5                      METADATA
-        BAR                       STR                                        BAZ
-        PING                      STR                                       PONG
-    END
-    FOO6                      METADATA
-        BAR                       STR                                        BAZ
-        PING                      STR                                       PONG
-    END
-END
-CELL.00                   METADATA
-    EXTNAME                   STR                                      CCD00
-    BIASSEC                   STR                                    BSEC-00
-    CHIP                      STR                                    CHIP.00
-END
-CELL.01                   METADATA
-    EXTNAME                   STR                                      CCD01
-    BIASSEC                   STR                                    BSEC-01
-    CHIP                      STR                                    CHIP.00
-END
-FOO5                      METADATA
-    CELL.00                   METADATA
-        EXTNAME                   STR                                      CCD00
-        BIASSEC                   STR                                    BSEC-00
-    END
-    CELL.01                   METADATA
-        EXTNAME                   STR                                      CCD01
-        BIASSEC                   STR                                    BSEC-01
-    END
-    FOO6                      METADATA
-        CELL.00                   METADATA
-            EXTNAME                   STR                                      CCD00
-        END
-        CELL.01                   METADATA
-            EXTNAME                   STR                                      CCD01
-        END
-    END
-END
-foo                       MULTI
-foo                       S32                                         -1
-foo                       STR                                    bar baz
-foo                       BOOL                                         1
-foo1                      MULTI
-foo1                      S32                                         -1  # bar                 
-foo1                      STR                                    bar baz  # baz                 
-foo1                      BOOL                                         1
-foo2                      MULTI
-foo2                      S32                                         -1
-foo2                      STR                                    bar baz
-foo2                      BOOL                                         1
-bar1                      METADATA
-foo                       MULTI
-    foo                       S32                                         -1
-    foo                       STR                                    bar baz
-    foo                       BOOL                                         1
-END
-foo3                      MULTI
-foo3                      METADATA
-    bar                       BOOL                                         1
-END
-foo3                      METADATA
-    bar                       BOOL                                         1
-END
-foo4                      MULTI
-foo4                      METADATA
-    a                         STR                                          x
-    b                         STR                                          y
-    c                         STR                                          z
-END
-foo4                      METADATA
-    a                         STR                                          x
-    b                         STR                                          y
-    c                         STR                                          z
-END
-foo5                      MULTI
-foo5                      METADATA
-    a                         STR                                          x
-    b                         STR                                          y
-    c                         STR                                          z
-END
-foo5                      METADATA
-    a                         STR                                          x
-    b                         STR                                          y
-    c                         STR                                          z
-END
Index: unk/psLib/test/collections/verified/tst_psMetadata_01.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,14 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    Unallowable operation: fileName is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    FITS error while opening file: missing.dat could not open the named file
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    Couldn't close FITS file. FITS error: NULL input pointer
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    Specified extension number, 0, is invalid.  Value must be positive if no extension name is given.
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    FITS error while locating header 22: tried to move past end of file
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    FITS error while locating header AARGH: illegal HDU number
-<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
-    Specified extension number, 0, is invalid.  Value must be positive if no extension name is given.
Index: unk/psLib/test/collections/verified/tst_psMetadata_01.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,192 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test A - Read 1st hdr from simple FITS file}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Contents of metadata list:
- Key Name:   SIMPLE  Key mdType: 0x00001301  Key Value:               1  Key Comment: file does conform to FITS standard
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:               8  Key Comment: number of bits per data pixel
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               0  Key Comment: number of data axes
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-
-Contents of metadata table:
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               0  Key Comment: number of data axes
- Key Name:   SIMPLE  Key mdType: 0x00001301  Key Value:               1  Key Comment: file does conform to FITS standard
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:               8  Key Comment: number of bits per data pixel
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-
----> TESTPOINT PASSED (psMetadata{Test A - Read 1st hdr from simple FITS file} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test B - Read 2nd hdr from complex FITS file}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Contents of metadata list:
- Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
- Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
- Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
- Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_1'  Key Comment: 
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-
-Contents of metadata table:
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
- Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
- Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
- Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
- Key Name:   BITPIX  Key mdType: 0x0001000a  Key Value:                  Key Comment: 
-    Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
-    Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
- Key Name:  HISTORY  Key mdType: 0x0001000a  Key Value:                  Key Comment: 
-    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
- Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_1'  Key Comment: 
-
----> TESTPOINT PASSED (psMetadata{Test B - Read 2nd hdr from complex FITS file} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test C - Read named hdr from complex FITS file} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Contents of metadata list:
- Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
- Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
- Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
- Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
- Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
- Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-
-Contents of metadata table:
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
- Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
- Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
- Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
- Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:  HISTORY  Key mdType: 0x0001000a  Key Value:                  Key Comment: 
-    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
-    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
- Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
-
----> TESTPOINT PASSED (psMetadata{Test C - Read named hdr from complex FITS file} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test D - Remove items with same name from all metadata} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Removed HISTORY from all metadata from prior test. Resulting metadata:
-
-Contents of metadata list:
- Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
- Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
- Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
- Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
- Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
-
-Contents of metadata table:
- Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
- Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
- Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
- Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
- Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
- Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
- Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
-
----> TESTPOINT PASSED (psMetadata{Test D - Remove items with same name from all metadata} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test E - Attempt to use null filename}          *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null fileName not allowed                                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test E - Attempt to use null filename} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test F - Attempt to open nonexistant file}      *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: FITS error while opening file: missing.dat...Couldn't close FITS file... *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test F - Attempt to open nonexistant file} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test G - Attempt to use two null inputs}        *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null extName and extNum = 0 not allowed                    *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test G - Attempt to use two null inputs} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test H - Attempt to use bad extNum}             *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: FITS error while locating header 22: tried to move past end of file *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test H - Attempt to use bad extNum} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test I - Attempt to use bad extName}            *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: FITS error while locating header AARGH: illegal HDU number *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test I - Attempt to use bad extName} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test J - Read named hdr w/ invalid extnum}      *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: If extName specified, extNum should be -1.                 *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test J - Read named hdr w/ invalid extnum} | tst_psMetadata_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{Test K - Free psMetadata}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test K - Free psMetadata} | tst_psMetadata_01.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadata_02.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,10 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should produce error for null name.
-<DATE><TIME>|<HOST>|E|psMetadataItemAllocV (FILE:LINENO)
-    Unallowable operation: name is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataItemAllocV (FILE:LINENO)
-    Specified psMetadataType, -1, is not supported.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Unallowable operation: md is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Unallowable operation: item is NULL.
Index: unk/psLib/test/collections/verified/tst_psMetadata_02.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
-Key Name:  myItem2  Key mdType: 0x00000104  Key Value:             111  Key Comment: I am a signed integer
-Key Name:  myItem3  Key mdType: 0x00000404  Key Value:         222.222  Key Comment: I am a single precision floating point
-Key Name:  myItem4  Key mdType: 0x00000408  Key Value:         333.333  Key Comment: I am a double precision floating point
-Key Name:  myItem5  Key mdType: 0x00010001  Key Value:     HELLO WORLD  Key Comment: I am a string
-
----> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test B - Attempt to create metadata item with null name} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null value for name not allowed                            *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test B - Attempt to create metadata item with null name} | tst_psMetadata_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test C - Attempt to create metadata item with invalid type} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid psMetadataType: 6                                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test C - Attempt to create metadata item with invalid type} | tst_psMetadata_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test D - Allocate metadata}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test D - Allocate metadata} | tst_psMetadata_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test E - Attempt to add metadata item to null metadata} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null metadata collection not allowed                       *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test E - Attempt to add metadata item to null metadata} | tst_psMetadata_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test F - Attempt to add null metadata item to metadata} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null metadata item not allowed                             *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test F - Attempt to add null metadata item to metadata} | tst_psMetadata_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_02.c                                        *
-*            TestPoint: psMetadata{Test G - Free psMetadata}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test G - Free psMetadata} | tst_psMetadata_02.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadata_03.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_03.stderr	(revision 4546)
+++ 	(revision )
@@ -1,20 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
-    Unallowable operation: md is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
-    Failed to remove metadata item, AARGH, from metadata table.
-<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
-    Could not find metadata item at index 22.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Unallowable operation: md->table is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
-    Unallowable operation: md->table is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Unallowable operation: md->list is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
-    Unallowable operation: md->list is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Unallowable operation: item->name is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
-    Unallowable operation: md->table is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataAddV (FILE:LINENO)
-    Failed to add metadata item to metadata collection list.
Index: unk/psLib/test/collections/verified/tst_psMetadata_03.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_03.stdout	(revision 4546)
+++ 	(revision )
@@ -1,117 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
-Key Name:  myItem2  Key mdType: 0x00000104  Key Value:              55  Key Comment: I am a integer
-Key Name:  myItem3  Key mdType: 0x00001301  Key Value:               0  Key Comment: I am a boolean
-Key Name:  myItem4  Key mdType: 0x00000104  Key Value:              66  Key Comment: I am a integer
-
----> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test B - Remove items from metadata by name}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test B - Remove items from metadata by name} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test C - Remove items from metadata by index}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test C - Remove items from metadata by index} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test D - Attempt to use null metadata}          *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null metadata collection not allowed                       *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test D - Attempt to use null metadata} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test E - Attempt to remove non-existant metadata item by name} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't find metadata item. Name: AARGH                   *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test E - Attempt to remove non-existant metadata item by name} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test E - Attempt to remove non-existant metadata item by index} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't find metadata item in list. Index: 22             *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test E - Attempt to remove non-existant metadata item by index} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test G - Attempt to add item to metadata w/o hash table} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't add item to invalid metadata structure.           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test G - Attempt to add item to invalid metadata w/o hash table} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test H - Attempt to add item to metadata w/o link list} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't add item to invalid metadata structure.           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test H - Attempt to add item to invalid metadata w/o link list} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test I - Attempt to add item with null name}    *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't add item with null name.                          *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test I - Attempt to add item with null name} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test J - Attempt to add item to metadata w/o hash table} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't add item to invalid metadata structure.           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test J - Attempt to add item to invalid metadata w/o hash table} | tst_psMetadata_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_03.c                                        *
-*            TestPoint: psMetadata{Test K - Free psMetadata}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test K - Free psMetadata} | tst_psMetadata_03.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadata_04.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_04.stderr	(revision 4546)
+++ 	(revision )
@@ -1,16 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMetadataLookup (FILE:LINENO)
-    Unallowable operation: md is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataLookup (FILE:LINENO)
-    Unallowable operation: key is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataGet (FILE:LINENO)
-    Unallowable operation: md is NULL.
-<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
-    Specified location, 22, is invalid.
-<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
-    Specified location, 22, is invalid.
-<DATE><TIME>|<HOST>|E|psMetadataGet (FILE:LINENO)
-    Could not find metadata item at index 22.
-<DATE><TIME>|<HOST>|E|psMetadataLookup (FILE:LINENO)
-    Unallowable operation: md->table is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataGet (FILE:LINENO)
-    Unallowable operation: md->list is NULL.
Index: unk/psLib/test/collections/verified/tst_psMetadata_04.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_04.stdout	(revision 4546)
+++ 	(revision )
@@ -1,174 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
-Key Name:  myItem2  Key mdType: 0x00000104  Key Value:              55  Key Comment: I am a integer
-Key Name:  myItem3  Key mdType: 0x00001301  Key Value:               0  Key Comment: I am a boolean
-Key Name:  myItem4  Key mdType: 0x00000104  Key Value:              66  Key Comment: I am a integer
-Key Name:  myItem5  Key mdType: 0x00000408  Key Value:           3.140  Key Comment: I am a double
-
----> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test B - Lookup metadata item by name}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Found item named myItem2
-
----> TESTPOINT PASSED (psMetadata{Test B - Lookup metadata item by name} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test C - Attempt to use null metadata}          *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null metadata collection not allowed                       *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test C - Attempt to use null metadata} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test D - Attempt to use null key}               *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null key name not allowed                                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test D - Attempt to use null key} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test E - Attempt to lookup non-existant metadata item} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't find metadata item. Name: AARGH                   *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test E - Attempt to lookup non-existant metadata item} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test F - Lookup metadata item by index}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Found item named myItem6
-
----> TESTPOINT PASSED (psMetadata{Test F - Lookup metadata item by index} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test G - Lookup metadata item and return psS32 value} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test G - Lookup metadata item and return psS32 value} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test H - Lookup metadata item and return psF64 value} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test H - Lookup metadata item and return psF64 value} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test I - Lookup metadata item and return psVector pointer} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test I - Lookup metadata item and return psVector pointer} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test J - Attempt to use null metadata}          *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null metadata collection not allowed                       *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test J - Attempt to use null metadata} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test K - Attempt to get non-existant metadata item} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Couldn't find metadata item with given index. Index: 22    *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test K - Attempt to get non-existant metadata item} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test L - Attemp to look up with an invalid metadata} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Lookup item with invalid metadata object.                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test L - Attempt to lookup an invalid metadata object.} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test M - Attempt to get item with an invalid metadata} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Get item with invalid metadata object.                     *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test M - Attempt to get item with  invalid metadata object} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test N - Attempt get psS32 value of non-existant metadata item} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test N - Attempt get psS32 value of non-existant metadata item} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test O - Attempt get psF64 value of non-existant metadata item} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test O - Attempt get psF64 value of non-existant metadata item} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test P - Attempt get psVector value of non-existant metadata item} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test P - Attempt get psVector value of non-existant metadata item} | tst_psMetadata_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_04.c                                        *
-*            TestPoint: psMetadata{Test Q - Free psMetadata}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test Q - Free psMetadata} | tst_psMetadata_04.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadata_05.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_05.stderr	(revision 4546)
+++ 	(revision )
@@ -1,6 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMetadataItemPrint (FILE:LINENO)
-    Unallowable operation: fd is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataItemPrint (FILE:LINENO)
-    Unallowable operation: format is NULL.
-<DATE><TIME>|<HOST>|E|psMetadataItemPrint (FILE:LINENO)
-    Unallowable operation: item is NULL.
Index: unk/psLib/test/collections/verified/tst_psMetadata_05.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_05.stdout	(revision 4546)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_05.c                                        *
-*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
-Key Name:  myItem2  Key mdType: 0x00000104  Key Value:              55  Key Comment: I am a integer
-Key Name:  myItem3  Key mdType: 0x00001301  Key Value:               0  Key Comment: I am a boolean
-Key Name:  myItem4  Key mdType: 0x00000104  Key Value:              66  Key Comment: I am a integer
-
----> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_05.c                                        *
-*            TestPoint: psMetadata{Test F - Write metadata item to file}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test F - Write metadata item to file} | tst_psMetadata_05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_05.c                                        *
-*            TestPoint: psMetadata{Test J - Attempt to use null file with itemPrint} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null file descriptor not allowed                           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test J - Attempt to use null file with itemPrint} | tst_psMetadata_05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_05.c                                        *
-*            TestPoint: psMetadata{Test K - Attempt to use null format with itemPrint} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null format not allowed                                    *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test K - Attempt to use null format with itemPrint} | tst_psMetadata_05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_05.c                                        *
-*            TestPoint: psMetadata{Test L - Attempt to use null item with itemPrint} *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null metadata not allowed                                  *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test L - Attempt to use null item with itemPrint} | tst_psMetadata_05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_05.c                                        *
-*            TestPoint: psMetadata{Test M - Free psMetadata}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test M - Free psMetadata} | tst_psMetadata_05.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadata_06.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_06.stdout	(revision 4546)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_06.c                                        *
-*            TestPoint: psMetadata{Test A - Allocate metadata and items}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
-Key Name:  myItem1  Key mdType: 0x00000104  Key Value:             111  Key Comment: I am a signed integer
-Key Name:  myItem1  Key mdType: 0x00000104  Key Value:             222  Key Comment: I am a signed integer
-Key Name:  myItem2  Key mdType: 0x00000104  Key Value:             333  Key Comment: I am a signed integer
-Key Name:  myItem2  Key mdType: 0x00010000  Key Value:          psList  Key Comment: I am a list
-
----> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata and items} | tst_psMetadata_06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_06.c                                        *
-*            TestPoint: psMetadata{Test B - replace an item in the metadata}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test B - replace an item in the metadata} | tst_psMetadata_06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_06.c                                        *
-*            TestPoint: psMetadata{Test C - add duplicate-key metadata item}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test C - add duplicate-key metadata item} | tst_psMetadata_06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_06.c                                        *
-*            TestPoint: psMetadata{Test D - Add folder node on top of existing leaf node} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test D - Add folder node on top of existing leaf node} | tst_psMetadata_06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_06.c                                        *
-*            TestPoint: psMetadata{Test E - Free psMetadata}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test E - Free psMetadata} | tst_psMetadata_06.c)
-
Index: unk/psLib/test/collections/verified/tst_psMetadata_07.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadata_07.stdout	(revision 4546)
+++ 	(revision )
@@ -1,18 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_07.c                                        *
-*            TestPoint: psMetadata{Test A - Read an XML config file}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test A - Read an XML config file} | tst_psMetadata_07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMetadata_07.c                                        *
-*            TestPoint: psMetadata{Test B - Free data}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMetadata{Test B - Free data} | tst_psMetadata_07.c)
-
Index: unk/psLib/test/collections/verified/tst_psPixels.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psPixels.stderr	(revision 4546)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psPixels.c                                             *
-*            TestPoint: psPixels{psPixelsAlloc}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPixels{psPixelsAlloc} | tst_psPixels.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psPixels.c                                             *
-*            TestPoint: psPixels{psPixelsRealloc}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPixels{psPixelsRealloc} | tst_psPixels.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psPixels.c                                             *
-*            TestPoint: psPixels{psPixelsCopy}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPixelsCopy
-    Following should generate an error message for NULL input
-<DATE><TIME>|<HOST>|E|psPixelsCopy (FILE:LINENO)
-    Input psPixels can not be NULL.
-
----> TESTPOINT PASSED (psPixels{psPixelsCopy} | tst_psPixels.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psPixels.c                                             *
-*            TestPoint: psPixels{psPixelsToMask}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPixelsToMask
-    Following should generate an error for NULL pixels
-<DATE><TIME>|<HOST>|E|psPixelsToMask (FILE:LINENO)
-    Input psPixels can not be NULL.
-<DATE><TIME>|<HOST>|I|testPixelsToMask
-    Following should generate an error for invalid range
-<DATE><TIME>|<HOST>|E|psPixelsToMask (FILE:LINENO)
-    Specified psRegion, [10:0,10:0], does not specify a valid region.
-
----> TESTPOINT PASSED (psPixels{psPixelsToMask} | tst_psPixels.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psPixels.c                                             *
-*            TestPoint: psPixels{psPixelsFromMask}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPixelsFromMask
-    Following should generate error for NULL mask
-<DATE><TIME>|<HOST>|E|psPixelsFromMask (FILE:LINENO)
-    Specified mask can not be NULL.
-
----> TESTPOINT PASSED (psPixels{psPixelsFromMask} | tst_psPixels.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psPixels.c                                             *
-*            TestPoint: psPixels{psPixelsConcatenate}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPixelsConcatenate
-    Following should generate an error message for NULL pixels
-<DATE><TIME>|<HOST>|E|psPixelsConcatenate (FILE:LINENO)
-    Input psPixels can not be NULL.
-
----> TESTPOINT PASSED (psPixels{psPixelsConcatenate} | tst_psPixels.c)
-
Index: unk/psLib/test/collections/verified/tst_psScalar.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psScalar.stderr	(revision 4546)
+++ 	(revision )
@@ -1,34 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psScalar.c                                             *
-*            TestPoint: psScalar{psScalarAlloc}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testScalarAlloc
-    psScalarAlloc shall create scalar data objects
-<DATE><TIME>|<HOST>|I|testScalarAlloc
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psScalarAlloc (FILE:LINENO)
-    Specified datatype (4865) is unsupported by psScalar.
-
----> TESTPOINT PASSED (psScalar{psScalarAlloc} | tst_psScalar.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psScalar.c                                             *
-*            TestPoint: psScalar{psScalarCopy}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testScalarCopy
-    psScalarCopy shall copy scalar objects
-<DATE><TIME>|<HOST>|I|testScalarCopy
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psScalarCopy (FILE:LINENO)
-    Specified datatype (4865) is unsupported by psScalar.
-<DATE><TIME>|<HOST>|I|testScalarCopy
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psScalarCopy (FILE:LINENO)
-    Can not copy a NULL psScalar.
-
----> TESTPOINT PASSED (psScalar{psScalarCopy} | tst_psScalar.c)
-
Index: unk/psLib/test/collections/verified/tst_psVector.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVector.stderr	(revision 4546)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVector.c                                             *
-*            TestPoint: psVector{psVectorAlloc}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psVectorAlloc (FILE:LINENO)
-    Input psVector is an unsupported type (0x0).
-
----> TESTPOINT PASSED (psVector{psVectorAlloc} | tst_psVector.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVector.c                                             *
-*            TestPoint: psVector{psVectorRealloc}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psVectorRealloc (FILE:LINENO)
-    psVectorRealloc must a given a non-NULL psVector to resize.  Desired datatype unknown.
-
----> TESTPOINT PASSED (psVector{psVectorRealloc} | tst_psVector.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVector.c                                             *
-*            TestPoint: psVector{psVectorExtend}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVector{psVectorExtend} | tst_psVector.c)
-
Index: unk/psLib/test/collections/verified/tst_psVectorSort_01.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error messgae
-<DATE><TIME>|<HOST>|E|psVectorSort (FILE:LINENO)
-    Input psVector is an unsupported type (0x1301).
Index: unk/psLib/test/collections/verified/tst_psVectorSort_01.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_01.c                                      *
-*            TestPoint: psVectorSort{Sort all types}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Sort all types} | tst_psVectorSort_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_01.c                                      *
-*            TestPoint: psVectorSort{Sort input float vector into itself}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Sort input float vector into itself} | tst_psVectorSort_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_01.c                                      *
-*            TestPoint: psVectorSort{Invalid vector type}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Invalid vector type} | tst_psVectorSort_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_01.c                                      *
-*            TestPoint: psVectorSort{Sort zero element vector}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Sort zero element vector} | tst_psVectorSort_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_01.c                                      *
-*            TestPoint: psVectorSort{Free float vectors}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Free float vectors} | tst_psVectorSort_01.c)
-
Index: unk/psLib/test/collections/verified/tst_psVectorSort_02.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psVectorSortIndex (FILE:LINENO)
-    psVectorSort can not sort a NULL psVector.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate two error messages(psVectorSort,psVectorSortIndex)
-<DATE><TIME>|<HOST>|E|psVectorSortIndex (FILE:LINENO)
-    Input psVector is an unsupported type (0x1301).
Index: unk/psLib/test/collections/verified/tst_psVectorSort_02.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,54 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_02.c                                      *
-*            TestPoint: psVectorSortIndex{Sort by index for all types}             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSortIndex{Sort by index for all types} | tst_psVectorSort_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_02.c                                      *
-*            TestPoint: psVectorSortIndex{Attempt to sort with NULL input}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSortIndex{Attempt to sort with NULL input} | tst_psVectorSort_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_02.c                                      *
-*            TestPoint: psVectorSortIndex{Sort with resize output vector}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSortIndex{Sort with resize output vector} | tst_psVectorSort_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_02.c                                      *
-*            TestPoint: psVectorSortIndex{Sort with input vector with zero elements} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSortIndex{Sort with input vector with zero elements} | tst_psVectorSort_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_02.c                                      *
-*            TestPoint: psVectorSortIndex{Attempt to sort with invalid type}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSortIndex{Attempt to sort with invalid type} | tst_psVectorSort_02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_02.c                                      *
-*            TestPoint: psVectorSortIndex{Free vectors}                            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Free vectors} | tst_psVectorSort_02.c)
-
Index: unk/psLib/test/collections/verified/tst_psVectorSort_03.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_03.stdout	(revision 4546)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_03.c                                      *
-*            TestPoint: psVectorSort{Create float vectors of different sizes}      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-arr[0] = 0.000000
-arr[1] = 0.000000
-arr[2] = 0.000000
-arr[3] = 0.000000
-arr[4] = 0.000000
-
----> TESTPOINT PASSED (psVectorSort{Create float vectors of different sizes} | tst_psVectorSort_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_03.c                                      *
-*            TestPoint: psVectorSort{Sort float vector}                            *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Input and output vector sizes are not equal                *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Sort float vector} | tst_psVectorSort_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_03.c                                      *
-*            TestPoint: psVectorSort{Create float & double vectors of same size}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-vec[0] = 0.000000
-vec[1] = 0.000000
-vec[2] = 0.000000
-vec[3] = 0.000000
-vec[4] = 0.000000
-
----> TESTPOINT PASSED (psVectorSort{Create float and double vectors same size} | tst_psVectorSort_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_03.c                                      *
-*            TestPoint: psVectorSort{Sort F32/F64 vector}                          *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Input and output vector different types                    *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Sort float vector} | tst_psVectorSort_03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_03.c                                      *
-*            TestPoint: psVectorSort{Free float vectors}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Free float vectors} | tst_psVectorSort_03.c)
-
Index: unk/psLib/test/collections/verified/tst_psVectorSort_04.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_04.stderr	(revision 4546)
+++ 	(revision )
@@ -1,2 +1,0 @@
-<DATE><TIME>|<HOST>|E|psVectorSort (FILE:LINENO)
-    psVectorSort can not sort a NULL psVector.
Index: unk/psLib/test/collections/verified/tst_psVectorSort_04.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psVectorSort_04.stdout	(revision 4546)
+++ 	(revision )
@@ -1,20 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_04.c                                      *
-*            TestPoint: psVectorSort{Attempt to sort with null input vector}       *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Null input vector                                          *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Attempt to sort with null input vector} | tst_psVectorSort_04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorSort_04.c                                      *
-*            TestPoint: psVectorSort{Free vectors}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorSort{Free arays} | tst_psVectorSort_04.c)
-
Index: unk/psLib/test/dataIO/tst_psDB.c
===================================================================
--- /trunk/psLib/test/dataIO/tst_psDB.c	(revision 4546)
+++ 	(revision )
@@ -1,2216 +1,0 @@
-/** @file  tst_psDB.c
- *
- * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
- * vim: set cindent ts=8 sw=4 expandtab:
- *
- *  @brief Contains the tests for psDB.[ch]
- *
- *
- *  @author Aaron Culliney, MHPCC
- *
- *  @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-07-06 03:04:35 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-#define STR_1 "hello world!"
-#define STR_2 "foobar"
-#define S32_1 1974
-#define S32_2 -18
-#define F32_1 3.14159
-#define F32_2 3.33
-#define F64_1 2.7182818
-#define F64_2 1.23456789
-#define B_1 TRUE
-#define B_2 FALSE
-
-#define ERROR_TOL   0.001
-
-#define CONST_ROW_1_STR      "randrow1"
-#define CONST_ROW_1_S32      12345
-#define CONST_ROW_1_F32      9876.5
-#define CONST_ROW_1_F64      456.75
-#define CONST_ROW_1_BOOL     TRUE
-
-#define CONST_ROW_2_STR      "randrow2"
-#define CONST_ROW_2_S32      2345
-#define CONST_ROW_2_F32      876.5
-#define CONST_ROW_2_F64      56.75
-#define CONST_ROW_2_BOOL     FALSE
-
-#define TAB_COL_0_NAME      "key_string"
-#define TAB_COL_1_NAME      "key_s32"
-#define TAB_COL_2_NAME      "key_f32"
-#define TAB_COL_3_NAME      "key_f64"
-#define TAB_COL_4_NAME      "key_bool"
-#define TAB_COL_5_NAME      "key_s32_0"
-
-static psDB *_init_psDB( void );
-static psMetadata *_get_CreateTableMetadata( void );
-static psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4);
-static psMetadata *_get_RowMetadata(
-    const char *key0, const char *comm0, const char *val0,
-    const char *key1, const char *comm1, psS32  val1,
-    const char *key2, const char *comm2, psF32  val2,
-    const char *key3, const char *comm3, psF64  val3,
-    const char *key4, const char *comm4, psBool val4,
-    const char *key5, const char *comm5, psS32  val5);
-static psMetadata *_get_row( void );
-static psMetadata *_get_invalid_row( void );
-static psMetadata *_get_where( void );
-static psMetadata *_get_invalid_where( void );
-static psMetadata *_get_where_bad_value( void );
-static psMetadata *_get_update_values(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4);
-static bool _check_row(psMetadata* row);
-static bool _check_row_update(psMetadata* row);
-static bool _check_const_row1(psMetadata* row);
-static bool _check_const_row2(psMetadata* row);
-
-//static psS32 TPDBCreate( void );
-//static psS32 TPDBDrop( void );
-static psS32 TPDBInit( void );
-static psS32 TPDBChange( void );
-static psS32 TPDBCreateTable( void );
-static psS32 TPDBDropTable( void );
-static psS32 TPDBSelectColumn( void );
-static psS32 TPDBSelectColumnNum( void );
-static psS32 TPDBSelectRows( void );
-static psS32 TPDBInsertOneRow( void );
-static psS32 TPDBInsertRows( void );
-static psS32 TPDBDumpRows( void );
-static psS32 TPDBDumpCols( void );
-static psS32 TPDBUpdateRows( void );
-static psS32 TPDBDeleteRows( void );
-
-testDescription tests[] = {
-                              {TPDBInit,           841,  "dbInit",            0, false},
-                              {TPDBChange,         842,  "dbChange",          0, false},
-                              {TPDBCreateTable,    843,  "dbCreateTable",     0, false},
-                              {TPDBDropTable,      844,  "dbDropTable",       0, false},
-                              {TPDBSelectColumn,   845,  "dbSelectColumn",    0, false},
-                              {TPDBSelectColumnNum,846,  "dbSelectColumnNum", 0, false},
-                              {TPDBSelectRows,     847,  "dbSelectRows",      0, false},
-                              {TPDBInsertOneRow,   848,  "dbInsertOneRow",    0, false},
-                              {TPDBInsertRows,     849,  "dbInsertRows",      0, false},
-                              {TPDBDumpRows,       850,  "dbDumpRows",        0, false},
-                              {TPDBDumpCols,       851,  "dbDumpCols",        0, false},
-                              {TPDBUpdateRows,     852,  "dbUpdateRows",      0, false},
-                              {TPDBDeleteRows,     853,  "dbDeleteRows",      0, false},
-                              //{TPDBCreate,        -14, "dbCreate",          0, false},
-                              //{TPDBDrop,          -15, "dbDrop",            0, false},
-                              {NULL}
-                          };
-
-static const char *host    = "localhost";
-static const char *user    = "test";
-static const char *passwd  = "";
-static const char *dbname  = "test";
-
-// internal method to initialize DB
-psDB *_init_psDB( void )
-{
-    psDB *dbh = NULL;
-
-    // Initialize database connection with test database
-    dbh = psDBInit(host, user, passwd, dbname);
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not initialize DB connection in %s!", __func__ );
-    }
-
-    return dbh;
-}
-
-psMetadata *_get_CreateTableMetadata( void )
-{
-    return _get_RowMetadata(
-               TAB_COL_0_NAME, "comment-string",     "90000", // value used to determine size of field
-               TAB_COL_1_NAME,    "Primary Key",        0,       // values unused here ...
-               TAB_COL_2_NAME,    "Key",                0.0,
-               TAB_COL_3_NAME,    "",                   0.0,
-               TAB_COL_4_NAME,   "",                   FALSE,
-               TAB_COL_5_NAME,  "Key,AUTO_INCREMENT", 0);
-}
-
-psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4)
-{
-    return _get_RowMetadata(
-               TAB_COL_0_NAME, "comment-string", val0,
-               TAB_COL_1_NAME,    "comment-s32",    val1,
-               TAB_COL_2_NAME,    "comment-f32",    val2,
-               TAB_COL_3_NAME,    "comment-f64",    val3,
-               TAB_COL_4_NAME,   "comment-bool",   val4,
-               NULL,         NULL,             0.0);
-}
-
-psMetadata *_get_RowMetadata(
-    const char *key0, const char *comm0, const char *val0,
-    const char *key1, const char *comm1, psS32  val1,
-    const char *key2, const char *comm2, psF32  val2,
-    const char *key3, const char *comm3, psF64  val3,
-    const char *key4, const char *comm4, psBool val4,
-    const char *key5, const char *comm5, psS32  val5)
-{
-    psMetadata *md = NULL;
-    psMetadataItem *str=NULL, *s32_0=NULL, *s32=NULL, *f32=NULL, *f64=NULL, *b;
-
-    md = psMetadataAlloc();
-    if (md == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
-        return NULL;
-    }
-    if (key0 != NULL) {
-        str = psMetadataItemAllocStr(key0, comm0, val0);
-    }
-    if (key5 != NULL) {
-        s32_0 = psMetadataItemAllocS32(key5, comm5, val5);
-    }
-    s32 = psMetadataItemAllocS32 (key1, comm1, val1);
-    f32 = psMetadataItemAllocF32 (key2, comm2, val2);
-    f64 = psMetadataItemAllocF64 (key3, comm3, val3);
-    b   = psMetadataItemAllocBool(key4, comm4, val4);
-
-    if ( ((key0 != NULL) && (str == NULL)) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL) || (b == NULL) ||
-            ((key5 != NULL) && (s32_0 == NULL)) ) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem(s) in %s!", __func__ );
-        return NULL;
-    }
-    if ( ((key0 != NULL) && !psMetadataAddItem(md, str, 0, 0)) ||
-            !psMetadataAddItem(md, s32, 0, 0) || !psMetadataAddItem(md, f32, 0, 0) ||
-            !psMetadataAddItem(md, f64, 0, 0) || !psMetadataAddItem(md, b,   0, 0) ||
-            ((key5 != NULL) && !psMetadataAddItem(md, s32_0, 0, 0))) {
-        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
-        return NULL;
-    }
-
-    if (str != NULL) {
-        psFree(str);
-    }
-    psFree(s32);
-    psFree(f32);
-    psFree(f64);
-    psFree(b);
-    if (s32_0 != NULL) {
-        psFree(s32_0);
-    }
-
-    return md;
-}
-
-psMetadata *_get_const_row1( void )
-{
-    char buf[32];
-    snprintf(buf, 32, "%s", CONST_ROW_1_STR );
-    return _get_RowMetadata(
-               TAB_COL_0_NAME, "comment-string", buf,
-               TAB_COL_1_NAME,    "comment-s32",    CONST_ROW_1_S32,
-               TAB_COL_2_NAME,    "comment-f32",    CONST_ROW_1_F32,
-               TAB_COL_3_NAME,    "comment-f64",    CONST_ROW_1_F64,
-               TAB_COL_4_NAME,   "comment-bool",   CONST_ROW_1_BOOL,
-               NULL,         NULL,             0.0);
-}
-
-psMetadata *_get_const_row2( void )
-{
-    char buf[32];
-    snprintf(buf, 32, "%s",CONST_ROW_2_STR);
-    return _get_RowMetadata(
-               TAB_COL_0_NAME, "comment-string", buf,
-               TAB_COL_1_NAME,    "comment-s32",    CONST_ROW_2_S32,
-               TAB_COL_2_NAME,    "comment-f32",    CONST_ROW_2_F32,
-               TAB_COL_3_NAME,    "comment-f64",    CONST_ROW_2_F64,
-               TAB_COL_4_NAME,   "comment-bool",   CONST_ROW_2_BOOL,
-               NULL,         NULL,             0.0);
-}
-
-psMetadata *_get_row( void )
-{
-    return _get_RowMetadata(
-               TAB_COL_0_NAME, "comment-string", STR_1,
-               TAB_COL_1_NAME,    "comment-s32",    S32_1,
-               TAB_COL_2_NAME,    "comment-f32",    F32_1,
-               TAB_COL_3_NAME,    "comment-f64",    F64_1,
-               TAB_COL_4_NAME,   "comment-bool",   B_1,
-               NULL,         NULL,             0.0);
-}
-
-psMetadata *_get_invalid_row( void )
-{
-    return _get_RowMetadata(
-               TAB_COL_0_NAME, "comment-string", STR_1,
-               TAB_COL_1_NAME,    "comment-s32",    S32_1,
-               "key_999",    "comment-f32",    F32_1,
-               TAB_COL_3_NAME,    "comment-f64",    F64_1,
-               TAB_COL_4_NAME,   "comment-bool",   B_1,
-               NULL,         NULL,             0.0);
-}
-
-psMetadata *_get_where( void )
-{
-    psMetadata *md = NULL;
-    psMetadataItem *s32=NULL;
-
-    md = psMetadataAlloc();
-    if (md == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
-        return NULL;
-    }
-    s32 = psMetadataItemAllocS32(TAB_COL_1_NAME, "", S32_1);
-    if (s32 == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
-        return NULL;
-    }
-    if (!psMetadataAddItem(md, s32, 0, 0)) {
-        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
-        return NULL;
-    }
-
-    psFree(s32);
-    return md;
-}
-
-psMetadata *_get_invalid_where( void )
-{
-    psMetadata *md = NULL;
-    psMetadataItem *s32=NULL;
-
-    md = psMetadataAlloc();
-    if (md == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
-        return NULL;
-    }
-    s32 = psMetadataItemAllocS32("col999", "", S32_1);
-    if (s32 == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
-        return NULL;
-    }
-    if (!psMetadataAddItem(md, s32, 0, 0)) {
-        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
-        return NULL;
-    }
-
-    psFree(s32);
-    return md;
-}
-
-psMetadata *_get_where_bad_value( void )
-{
-    psMetadata *md = NULL;
-    psMetadataItem *s32=NULL;
-
-    md = psMetadataAlloc();
-    if (md == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
-        return NULL;
-    }
-    s32 = psMetadataItemAllocS32(TAB_COL_1_NAME, "", S32_1 + 1);
-    if (s32 == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
-        return NULL;
-    }
-    if (!psMetadataAddItem(md, s32, 0, 0)) {
-        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
-        return NULL;
-    }
-
-    psFree(s32);
-    return md;
-}
-
-psMetadata *_get_update_values(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4)
-{
-    return _get_RowMetadataValues(val0, val1, val2, val3, val4);
-}
-
-bool _check_row(psMetadata* row)
-{
-    bool              returnValue = true;
-    psMetadataItem*   item        = NULL;
-
-    item = psMetadataLookup(row,TAB_COL_0_NAME);
-    if((item==NULL) || (strcmp(item->data.V,STR_1)!=0)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
-                item->data.V,STR_1);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_1_NAME);
-    if((item==NULL) || (item->data.S32 != S32_1)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
-                item->data.S32, S32_1);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_2_NAME);
-    if((item==NULL) || (fabs(item->data.F32-F32_1)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
-                item->data.F32, F32_1);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_3_NAME);
-    if((item==NULL) || (fabs(item->data.F64-F64_1)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
-                item->data.F64,F64_1);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_4_NAME);
-    if((item==NULL) || (item->data.B != B_1)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
-                item->data.B, B_1);
-        return false;
-    }
-
-    return returnValue;
-}
-
-bool _check_row_update(psMetadata* row)
-{
-    bool              returnValue = true;
-    psMetadataItem*   item        = NULL;
-
-    item = psMetadataLookup(row,TAB_COL_0_NAME);
-    if((item==NULL) || (strcmp(item->data.V,STR_2)!=0)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
-                item->data.V,STR_2);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_1_NAME);
-    if((item==NULL) || (item->data.S32 != S32_2)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
-                item->data.S32, S32_2);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_2_NAME);
-    if((item==NULL) || (fabs(item->data.F32-F32_2)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
-                item->data.F32, F32_2);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_3_NAME);
-    if((item==NULL) || (fabs(item->data.F64-F64_2)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
-                item->data.F64,F64_2);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_4_NAME);
-    if((item==NULL) || (item->data.B != B_2)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
-                item->data.B, B_2);
-        return false;
-    }
-
-    return returnValue;
-}
-
-bool _check_const_row1(psMetadata* row)
-{
-    bool              returnValue = true;
-    psMetadataItem*   item        = NULL;
-
-    item = psMetadataLookup(row,TAB_COL_0_NAME);
-    if((item==NULL) || (strcmp(item->data.V,CONST_ROW_1_STR)!=0)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
-                item->data.V,CONST_ROW_1_STR);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_1_NAME);
-    if((item==NULL) || (item->data.S32 != CONST_ROW_1_S32)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
-                item->data.S32, CONST_ROW_1_S32);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_2_NAME);
-    if((item==NULL) || (fabs(item->data.F32-CONST_ROW_1_F32)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
-                item->data.F32, CONST_ROW_1_F32);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_3_NAME);
-    if((item==NULL) || (fabs(item->data.F64-CONST_ROW_1_F64)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
-                item->data.F64,CONST_ROW_1_F64);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_4_NAME);
-    if((item==NULL) || (item->data.B != CONST_ROW_1_BOOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
-                item->data.B, CONST_ROW_1_BOOL);
-        return false;
-    }
-
-    return returnValue;
-}
-
-bool _check_const_row2(psMetadata* row)
-{
-    bool              returnValue = true;
-    psMetadataItem*   item        = NULL;
-
-    item = psMetadataLookup(row,TAB_COL_0_NAME);
-    if((item==NULL) || (strcmp(item->data.V,CONST_ROW_2_STR)!=0)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
-                item->data.V,CONST_ROW_2_STR);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_1_NAME);
-    if((item==NULL) || (item->data.S32 != CONST_ROW_2_S32)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
-                item->data.S32, CONST_ROW_2_S32);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_2_NAME);
-    if((item==NULL) || (fabs(item->data.F32-CONST_ROW_2_F32)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
-                item->data.F32, CONST_ROW_2_F32);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_3_NAME);
-    if((item==NULL) || (fabs(item->data.F64-CONST_ROW_2_F64)>ERROR_TOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
-                item->data.F64,CONST_ROW_2_F64);
-        return false;
-    }
-
-    item = psMetadataLookup(row,TAB_COL_4_NAME);
-    if((item==NULL) || (item->data.B != CONST_ROW_2_BOOL)) {
-        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
-                item->data.B, CONST_ROW_2_BOOL);
-        return false;
-    }
-
-    return returnValue;
-}
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    srand(time(NULL));
-
-    return ( ! runTestSuite( stderr, "psDB", tests, argc, argv ) );
-}
-
-// Testpoint #841, initialize/break-down MySQL connection.
-psS32 TPDBInit( void )
-{
-    psDB *dbh = NULL;
-
-    // Initialize database with valid arguments
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL to be returned for valid arguments");
-        return 1;
-    }
-
-    // Cleanup database/connection with valid psDB object
-    psDBCleanup(dbh);
-
-    // Attempt to initialize database with invalid arguments
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid host");
-    dbh = psDBInit("xxx",NULL,NULL,NULL);
-    if(dbh != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL psDB with invalid arguments");
-        return 2;
-    }
-
-    // Attempt cleanup database/connection with NULL psDB object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database objec");
-    psDBCleanup(NULL);
-
-    return 0;
-}
-
-// Testpoint #842, psDBChange shall change databases.
-psS32 TPDBChange( void )
-{
-    psDB *dbh = NULL;
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL for valid arguments");
-        return 1;
-    }
-
-    // Attempt to change database with valid arguments
-    if(!psDBChange(dbh, dbname)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for valid arguments");
-        return 2;
-    }
-
-    // Attemp to change database to invalid database name
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid database");
-    if(psDBChange(dbh,"abc")) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return true for unknown database name");
-        return 3;
-    }
-
-    // Cleanup database connection
-    psDBCleanup(dbh);
-
-    // Attempt to change database with NULL database object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for null database object");
-    if(psDBChange(NULL,dbname)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return true for NULL database object");
-        return 4;
-    }
-
-    return 0;
-}
-
-// Testpoint #843, psDBCreateTable shall create tables in the test database ...
-psS32 TPDBCreateTable( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table1";
-
-    // Create metadata for table definition
-    psMetadata *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL for valid argument in database connection");
-        return 1;
-    }
-
-    // Attempt to create database table with valid arguments
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for valid arguments");
-        return 2;
-    } else {
-        // Drop the table from the test database
-        psDBDropTable(dbh, table);
-    }
-
-    // Free metadata definition of table
-    psFree(md);
-
-    // Attempt to create table with NULL table definition
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL parameter");
-    if(psDBCreateTable(dbh,table,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL metadata object");
-        return 3;
-    }
-
-    // Attempt to create table with NULL connection
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL parameter");
-    if(psDBCreateTable(NULL, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL database object");
-        return 4;
-    }
-
-    // Close/cleanup database connection
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #844, psDBDropTable shall remove tables in the test database ...
-psS32 TPDBDropTable( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table2";
-
-    // Create table definition metadata
-    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return to initialize database");
-        return 1;
-    }
-
-    // Create table in database
-    if(psDBCreateTable(dbh, table, md)) {
-
-        // Drop table with valid arguments
-        if(!psDBDropTable(dbh, table)) {
-            psError(PS_ERR_UNKNOWN,true,"Did not expect return false for valid arguments");
-            return 2;
-        }
-
-        // insert should fail since the table has been drop from database
-        psLogMsg( __func__, PS_LOG_INFO, "psDBDropTable: insert should fail here...\n" );
-        row = _get_row();
-        if (psDBInsertOneRow(dbh, table, row)) {
-            psError(PS_ERR_UNKNOWN,true,"Did not expect to successfully insert row into dropped table");
-            return 3;
-        }
-        psFree(row);
-    } else {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false to create table");
-        return 4;
-    }
-
-    // Attempt to drop table from NULL psDB object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database object");
-    if(psDBDropTable(NULL,table)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return false as expected for NULL database object");
-        return 5;
-    }
-
-    // Attempt to drop table from valid psDB but invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
-    if(psDBDropTable(dbh,"table99")) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return false as expected for invalid table");
-        return 6;
-    }
-
-    // Attempt to drop table from valid psDB but NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
-    if(psDBDropTable(dbh,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return false as expected for NULL table");
-        return 7;
-    }
-
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #845, TPDBSelectColumn shall write/select a column from a test table ...
-psS32 TPDBSelectColumn( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table3";
-    psArray *ary = NULL;
-    char *ptr=NULL;
-
-    // Create table definition metadata
-    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL to initialize database connection");
-        return 1;
-    }
-
-    // Create database table
-    if(!psDBCreateTable(dbh,table,md)) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to create database table for testing");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Insert known constant row #1
-    row = _get_const_row1();
-    if(!psDBInsertOneRow(dbh, table, row)) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to add rows to test database");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-    psFree(row);
-
-    // Insert known constant row #2
-    row = _get_const_row2();
-    if(!psDBInsertOneRow(dbh, table, row)) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to add rows to test database");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-    psFree(row);
-
-    // Insert known row
-    row = _get_row();
-    if(!psDBInsertOneRow(dbh, table, row)) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to add rows to test database");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-    psFree(row);
-
-    // Select all items in column key_string with valid arguments
-    ary = psDBSelectColumn(dbh, table, TAB_COL_0_NAME, 0);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value of NULL");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-
-    // Verify array contents
-    if(ary->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Array number of items %d not equal to expected %d",
-                ary->n, 3);
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 60;
-    }
-    ptr = psArrayGet(ary, 2);
-    if (strcmp(ptr, CONST_ROW_1_STR)) {
-        psError(PS_ERR_UNKNOWN,true,"key_str column entry[%d] = %s not as expected %s",
-                2,CONST_ROW_1_STR,ptr);
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-    ptr = psArrayGet(ary, 1);
-    if (strcmp(ptr, CONST_ROW_2_STR)) {
-        psError(PS_ERR_UNKNOWN,true,"key_str column entry[%d] = %s not as expected %s",
-                1,CONST_ROW_2_STR,ptr);
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-    ptr = psArrayGet(ary, 0);
-    if (strcmp(ptr, STR_1)) {
-        psError(PS_ERR_UNKNOWN,true,"key_str column entry[%d] = %s not as expected %s",
-                0,STR_1,ptr);
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 9;
-    }
-    psFree(ary);
-
-    // Select items in column key_bool with limit 10 and valid arguments
-    ary = psDBSelectColumn(dbh, table, TAB_COL_4_NAME, 10);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value of NULL");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 10;
-    }
-
-    // Verify array contents
-    if(ary->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Array number of items %d not equal to expected %d",
-                ary->n, 3);
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 100;
-    }
-    ptr = psArrayGet(ary, 2);
-    if(atoi(ptr) != CONST_ROW_1_BOOL) {
-        psError(PS_ERR_UNKNOWN,true,"key_bool column entry[%d] = %d not as expected %d",
-                2,CONST_ROW_1_BOOL,atoi(ptr));
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 11;
-    }
-    ptr = psArrayGet(ary, 1);
-    if(atoi(ptr) != CONST_ROW_2_BOOL) {
-        psError(PS_ERR_UNKNOWN,true,"key_bool column entry[%d] = %d not as expected %d",
-                1,CONST_ROW_2_BOOL,atoi(ptr));
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 12;
-    }
-    ptr = psArrayGet(ary, 0);
-    if(atoi(ptr) != B_1) {
-        psError(PS_ERR_UNKNOWN,true,"key_bool column entry[%d] = %d not as expected %d",
-                0,B_1,atoi(ptr));
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 13;
-    }
-    psFree(ary);
-
-    // Attempt to select columns from NULL database object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
-    if(psDBSelectColumn(NULL,table,"key_str",10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for selecting from NULL database");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 14;
-    }
-
-    // Attempt to select column from NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL table");
-    if(psDBSelectColumn(dbh,NULL,"key_str",10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL table");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 15;
-    }
-
-    // Attempt to select column from invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
-    if(psDBSelectColumn(dbh,"table99","key_str",10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for invalid table");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 16;
-    }
-
-    // Attempt to select invalid column from valid database object and valid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid column");
-    if(psDBSelectColumn(dbh,table,"key_null",10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for invalid column");
-        psDBDropTable(dbh, table);
-        psDBCleanup(dbh);
-        return 17;
-    }
-
-    // Clean up table and memory
-    psDBDropTable(dbh, table);
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #846, TPDBSelectColumnNum shall write/select a column from a test table ...
-psS32 TPDBSelectColumnNum( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table4";
-    psVector *vec = NULL;
-
-    // Create table definition metadata
-    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expected NULL return to initialize database");
-        return 1;
-    }
-
-    // Create database table for test
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create table");
-        return 2;
-    }
-
-    // Initialize database table with known rows
-    row = _get_const_row1();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_const_row2();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_row();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    // Use valid arguments to select column with numeric values to return vector
-    vec = psDBSelectColumnNum(dbh, table, TAB_COL_1_NAME, PS_TYPE_S32, 0);
-
-    // Verify vector returned
-    if (vec == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return with valid arguments");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-    // Verify vector values
-    if(vec->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector size not equal to 3");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 30;
-    }
-    if(vec->type.type != PS_TYPE_S32) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector type not equal to PS_TYPE_S32");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 31;
-    }
-    if ((vec->data.S32)[0] != S32_1) {
-        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
-                0,vec->data.S32[0], S32_1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-    if ((vec->data.S32)[1] != CONST_ROW_2_S32) {
-        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
-                1,vec->data.S32[1], CONST_ROW_2_S32);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-    if ((vec->data.S32)[2] != CONST_ROW_1_S32) {
-        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
-                2,vec->data.S32[2], CONST_ROW_1_S32);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-    psFree(vec);
-
-    // Use valid arguments to select column with numeric values to return vector
-    vec = psDBSelectColumnNum(dbh, table, TAB_COL_4_NAME, PS_TYPE_BOOL, 0);
-
-    // Verify vector returned
-    if (vec == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return with valid arguments");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-    // Verify vector values
-    if(vec->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector size not equal to 3");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-    if(vec->type.type != PS_TYPE_BOOL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector type not equal to PS_TYPE_BOOL");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 9;
-    }
-    if ((vec->data.U8)[0] != B_1) {
-        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
-                0,vec->data.U8[0],B_1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 10;
-    }
-    if ((vec->data.U8)[1] != CONST_ROW_2_BOOL) {
-        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
-                0,vec->data.U8[0],CONST_ROW_2_BOOL);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 11;
-    }
-    if ((vec->data.U8)[2] != CONST_ROW_1_BOOL) {
-        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
-                0,vec->data.U8[0],CONST_ROW_1_BOOL);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 12;
-    }
-    psFree(vec);
-
-    // Attempt to select columns from NULL database
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL database object");
-    if(psDBSelectColumnNum(NULL,table,TAB_COL_4_NAME,PS_TYPE_BOOL,10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with NULL database object");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 13;
-    }
-
-    // Attempt to select columns from NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL table");
-    if(psDBSelectColumnNum(dbh,NULL,TAB_COL_4_NAME,PS_TYPE_BOOL,10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with NULL table");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 14;
-    }
-
-    // Attempt to select columns from invalid column
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid column");
-    if(psDBSelectColumnNum(dbh,table,"key_999",PS_TYPE_BOOL,10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with NULL column");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 15;
-    }
-
-    // Attempt to select columns from invalid column
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid type");
-    if(psDBSelectColumnNum(dbh,table,TAB_COL_0_NAME,0,10) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with invalid type");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 16;
-    }
-
-    psDBDropTable(dbh, table);
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #847, TPDBSelectRows shall write/select data from a test table ...
-psS32 TPDBSelectRows( void )
-{
-    int i;
-    psDB *dbh = NULL;
-    const char* table = "table5";
-    psArray *ary=NULL, *ary1=NULL, *ary2=NULL;
-    psMetadataItem *item = NULL;
-
-    // Create database table definition
-    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expected NULL return to initialize database");
-        return 1;
-    }
-
-    psDBDropTable(dbh,table);
-    // Create database table for test
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create table");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Initialize database table with known rows
-    row = _get_const_row1();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_const_row2();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_row();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    // Generate valid where clause
-    where = _get_where();
-
-    // Select rows with non limit
-    ary1 = psDBSelectRows(dbh, table, where, 0);
-
-    // Select rows with a limit
-    ary2 = psDBSelectRows(dbh, table, where, 1);
-    psFree(where);
-
-    // Cycle through both arrays to verify results
-    for (i=0; i<2; i++) {
-        ary = i ? ary2 : ary1;
-
-        // Verify return array not NULL
-        if (ary == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL");
-            psDBDropTable(dbh,table);
-            psDBCleanup(dbh);
-            return 1;
-        }
-
-        if(ary->n != 1) {
-            psError(PS_ERR_UNKNOWN,true,"Number of rows %d not as expected %d",
-                    ary->n, 1);
-            psDBDropTable(dbh,table);
-            psDBCleanup(dbh);
-            return 2;
-        }
-
-        // Get metadata which contains row from array
-        row = (psMetadata*)psArrayGet(ary, 0);
-
-        // Get key_s32 item from metadata
-        item = psMetadataLookup(row, TAB_COL_1_NAME);
-        if (item == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Could not find key_s32 item in row metadata");
-            psDBDropTable(dbh,table);
-            psDBCleanup(dbh);
-            return 2;
-        }
-        if (item->data.S32 != S32_1) {
-            psError(PS_ERR_UNKNOWN,true,"Row item %d not as expected %d",
-                    item->data.S32,S32_1);
-            psDBDropTable(dbh,table);
-            psDBCleanup(dbh);
-            return 3;
-        }
-
-        // Get key_bool item from metadata
-        item = psMetadataLookup(row, TAB_COL_4_NAME);
-        if (item == NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Could not find key_bool item in row metadata");
-            psDBDropTable(dbh,table);
-            psDBCleanup(dbh);
-            return 2;
-        }
-        if (item->data.B != B_1) {
-            psError(PS_ERR_UNKNOWN,true,"Row item %d not as expected %d",
-                    item->data.S32,S32_1);
-            psDBDropTable(dbh,table);
-            psDBCleanup(dbh);
-            return 4;
-        }
-        psFree(ary);
-    }
-
-    // Attempt to select rows with NULL database object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database object");
-    if(psDBSelectRows(NULL, table, where, 0) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL database object");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-
-    // Attempt to select rows with invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
-    if(psDBSelectRows(dbh, NULL, where, 0) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL database object");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-
-    // Select rows with no where specified
-    ary1 = psDBSelectRows(dbh, table, NULL, 0);
-    if(ary1 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return using NULL where");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-    if(ary1->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Rows return %d not as expected %d",
-                ary->n,3);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-    psFree(ary1);
-
-    psDBDropTable(dbh, table);
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #848, TPDBInsertOneRow shall write a row of data into a test table ...
-psS32 TPDBInsertOneRow( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table6";
-    psMetadata *invalidRow = NULL;
-    psArray*    ary = NULL;
-
-    // Create table definition metadata
-    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for database initialization");
-        return 1;
-    }
-
-    // Create database table
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create database");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Insert a single row with valid arguments
-    row = _get_const_row1();
-    if(!psDBInsertOneRow(dbh, table, row)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting row w/ valid arguments");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-    // Verify row was added to table
-    ary = psDBSelectRows(dbh,table,NULL,0);
-    if(ary->n != 1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of rows %d not as expected %d",
-                ary->n,1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 30;
-    }
-    psFree(ary);
-
-    // Insert a single row with NULL database
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
-    if(psDBInsertOneRow(NULL,table,row)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for NULL database");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-
-    // Insert a single row which has column which does not match table
-    invalidRow = _get_invalid_row();
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid column item");
-    if(psDBInsertOneRow(dbh,table,invalidRow)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for invalid column item");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-
-    // Insert a single row with invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
-    if(psDBInsertOneRow(dbh,"table999",row)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for invalid table");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-
-    // Insert a single row with NULL row
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL row");
-    if(psDBInsertOneRow(dbh,table,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for NULL row");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-
-    psFree(row);
-    psFree(invalidRow);
-    psDBDropTable(dbh, table);
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #849, TPDBInsertRows shall write rows of data into a test table ...
-psS32 TPDBInsertRows( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table7";
-    psArray *rowSet = NULL;
-    psArray* dumpRowSet = NULL;
-    psMetadataItem *item=NULL;
-    psArray* ary = NULL;
-    psMetadata* invalidRow = NULL;
-    psArray* invalidRowSet = NULL;
-
-    //Create database table definition metadata
-    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL for initializing database connection");
-        return 1;
-    }
-
-    // Create database table for testing
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for creating table");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Create array of row elements
-    rowSet = psArrayAlloc(3);
-    rowSet->n = 0;
-
-    row = _get_const_row1();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-
-    row = _get_const_row2();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-
-    row = _get_row();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-
-    // Insert rows with valid arguments
-    if(!psDBInsertRows(dbh, table, rowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting rows w/ valid args");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-
-    // Verify row was added to table
-    ary = psDBSelectRows(dbh,table,NULL,0);
-    if(ary->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Number of rows %d not as expected %d",
-                ary->n,3);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 30;
-    }
-    psFree(ary);
-
-    // extra checks ...
-    dumpRowSet = psDBDumpRows(dbh, table);
-    if (dumpRowSet == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL from dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-
-    // Get first row from array
-    row = (psMetadata*)psArrayGet(dumpRowSet, 0);
-    // Verify contents for column key_s32
-    item = psMetadataLookup(row, TAB_COL_1_NAME);
-    if ((item == NULL) || (item->data.S32 != S32_1)) {
-        psError(PS_ERR_UNKNOWN,true,"Column value %d not as expected %d",
-                item->data.S32, S32_1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-    // Verify contents for column key_bool
-    item = psMetadataLookup(row, TAB_COL_4_NAME);
-    if ((item == NULL) || (item->data.B != B_1)) {
-        psError(PS_ERR_UNKNOWN,true,"Column value %d not as expected %d",
-                item->data.B, B_1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-    psFree(dumpRowSet);
-
-    // Insert rows with NULL database object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database");
-    if(psDBInsertRows(NULL,table,rowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for NULL database");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-
-    // Insert rows with NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
-    if(psDBInsertRows(dbh,NULL,rowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for NULL table");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 70;
-    }
-
-    // Insert rows with invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
-    if(psDBInsertRows(dbh,"table999",rowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for invalid table");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-
-    // Insert rows with NULL array of rows to be inserted
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL row array");
-    if(psDBInsertRows(dbh,table,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for NULL row array");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 9;
-    }
-
-    // Insert a single row which has column which does not match table
-    invalidRow = _get_invalid_row();
-    // Create array of invalid row element
-    invalidRowSet = psArrayAlloc(1);
-    invalidRowSet->n = 0;
-    psArrayAdd(invalidRowSet, 0, invalidRow);
-    psFree(invalidRow);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid column item");
-    if(psDBInsertRows(dbh,table,invalidRowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for invalid column item");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 10;
-    }
-    psFree(invalidRowSet);
-
-    psFree(rowSet);
-    psDBDropTable(dbh, table);
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #850, TPDBDumpRows shall dump all rows from a test table ...
-psS32 TPDBDumpRows( void )
-{
-    psDB *dbh = NULL;
-    const char* table = "table8";
-    psArray *ary = NULL;
-
-    // Create table definition metadata
-    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL from initializing database");
-        return 1;
-    }
-
-    // Create table for testing
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false from creating table");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Insert known data rows into table
-    row = _get_const_row1();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_const_row2();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_row();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    // Dump row with valid parameters
-    ary = psDBDumpRows(dbh, table);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-    if(ary->n != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Rows dumped %d not as expected %d",
-                ary->n, 3);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-
-    row = (psMetadata*)psArrayGet(ary, 0);
-    if(!_check_row(row)) {
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-    row = (psMetadata*)psArrayGet(ary, 1);
-    if(!_check_const_row2(row)) {
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-    row = (psMetadata*)psArrayGet(ary, 2);
-    if(!_check_const_row1(row)) {
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-    psFree(ary);
-
-    // Attempt to dump row with database NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
-    if(psDBDumpRows(NULL,table)!=NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return non-NULL for NULL database specified");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-
-    // Attempt to dump row with table NULL
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL table");
-    if(psDBDumpRows(dbh,NULL)!=NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return non-NULL for NULL table specified");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 9;
-    }
-
-    psDBDropTable(dbh, table);
-
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #851, TPDBDumpCols shall dump all cols from a test table ...
-psS32 TPDBDumpCols( void )
-{
-    psDB*                dbh     = NULL;
-    const char*          table   = "table9";
-    psMetadata*          row     = NULL;
-    psMetadata*          meta    = NULL;
-    psMetadata*          md      = NULL;
-    psMetadataIterator*  mdIter  = NULL;
-    psMetadataItem*      mdItem  = NULL;
-    int                  itemNum = 0;
-
-    // Create database table definition
-    md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return to initialize database");
-        return 1;
-    }
-
-    // Create database table for testing
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false to create test table");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Add row with known data values
-    row = _get_const_row1();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_const_row2();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    row = _get_row();
-    psDBInsertOneRow(dbh, table, row);
-    psFree(row);
-
-    // Dump columns with valid arguments
-    meta = psDBDumpCols(dbh, table);
-    mdIter = psMetadataIteratorAlloc(meta,PS_LIST_HEAD,NULL);
-
-    // Verify contents of metadata returned
-    if (meta == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return value NULL for dumpCols with valid args");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-    if(meta->list->n != 6) {
-        psError(PS_ERR_UNKNOWN,true,"Number of cols = %d not as expected %d",
-                meta->list->n,6);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-    // Verify the metadata items
-    itemNum = 0;
-    while ((mdItem = psMetadataGetAndIncrement(mdIter)) != NULL) {
-        switch(itemNum) {
-        case 0:
-            if(mdItem->type != PS_META_VEC) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
-                        itemNum,mdItem->type,PS_META_VEC);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 5*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_S32) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_S32);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 6*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->n != 3) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->n,3);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 7*(itemNum+1);
-            }
-            if(strcmp(mdItem->name,TAB_COL_5_NAME) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
-                        itemNum,mdItem->name,TAB_COL_5_NAME);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 8*(itemNum+1);
-            }
-            break;
-        case 1:
-            if(mdItem->type != PS_META_VEC) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
-                        itemNum,mdItem->type,PS_META_VEC);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 5*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_BOOL) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_BOOL);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 6*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->n != 3) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->n,3);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 7*(itemNum+1);
-            }
-            if(strcmp(mdItem->name,TAB_COL_4_NAME) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
-                        itemNum,mdItem->name,TAB_COL_4_NAME);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 8*(itemNum+1);
-            }
-            break;
-        case 2:
-            if(mdItem->type != PS_META_VEC) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
-                        itemNum,mdItem->type,PS_META_VEC);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 5*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_F64) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_F64);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 6*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->n != 3) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->n,3);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 7*(itemNum+1);
-            }
-            if(strcmp(mdItem->name,TAB_COL_3_NAME) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
-                        itemNum,mdItem->name,TAB_COL_3_NAME);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 8*(itemNum+1);
-            }
-            break;
-        case 3:
-            if(mdItem->type != PS_META_VEC) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
-                        itemNum,mdItem->type,PS_META_VEC);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 5*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_F32) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_F32);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 6*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->n != 3) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->n,3);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 7*(itemNum+1);
-            }
-            if(strcmp(mdItem->name,TAB_COL_2_NAME) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
-                        itemNum,mdItem->name,TAB_COL_2_NAME);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 8*(itemNum+1);
-            }
-            break;
-        case 4:
-            if(mdItem->type != PS_META_VEC) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
-                        itemNum,mdItem->type,PS_META_VEC);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 5*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_S32) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_S32);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 6*(itemNum+1);
-            }
-            if(((psVector*)mdItem->data.V)->n != 3) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
-                        itemNum,((psVector*)mdItem->data.V)->n,3);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 7*(itemNum+1);
-            }
-            if(strcmp(mdItem->name,TAB_COL_1_NAME) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
-                        itemNum,mdItem->name,TAB_COL_1_NAME);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 8*(itemNum+1);
-            }
-            break;
-        case 5:
-            if(mdItem->type != PS_META_ARRAY) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
-                        itemNum,mdItem->type,PS_META_ARRAY);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 5*(itemNum+1);
-            }
-            if(((psArray*)mdItem->data.V)->n != 3) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
-                        itemNum,((psArray*)mdItem->data.V)->n,3);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 7*(itemNum+1);
-            }
-            if(strcmp(mdItem->name,TAB_COL_0_NAME) != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
-                        itemNum,mdItem->name,TAB_COL_0_NAME);
-                psDBDropTable(dbh,table);
-                psDBCleanup(dbh);
-                return 8*(itemNum+1);
-            }
-            break;
-
-        default:
-            break;
-        }
-        itemNum++;
-    }
-    psFree(mdIter);
-    psFree(meta);
-
-    // Attempt to dump columns from NULL database object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database");
-    if(psDBDumpCols(NULL,table) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL when dumping columns from NULL database");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 10;
-    }
-
-    // Attempt to dump columns for NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
-    if(psDBDumpCols(dbh,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL when dumping columns from NULL table");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 11;
-    }
-
-
-    psDBDropTable(dbh, table);
-
-    psFree(md);
-
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #852, TPDBUpdateRows shall update rows in a test table ...
-psS32 TPDBUpdateRows( void )
-{
-    psDB*            dbh       = NULL;
-    const char*      table     = "table10";
-    psArray*         ary       = NULL;
-    psArray*         rowSet    = NULL;
-    psMetadata*      row       = NULL;
-    psMetadata*      where     = NULL;
-    psMetadata*      updates   = NULL;
-    psMetadata*      md        = NULL;
-    int              chgRows   = 0;
-
-    // Create database table definition
-    md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL when initializing database");
-        return 1;
-    }
-
-    // Create test table
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false to create test table");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Create array to hold rows to be added to test table
-    rowSet = psArrayAlloc(3);
-    rowSet->n = 0;
-
-    row = _get_const_row1();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-
-    row = _get_const_row2();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-
-    row = _get_row();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-
-    // Insert rows into test table
-    if(!psDBInsertRows(dbh, table, rowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-
-    // Create where metadata to specify update - only one row
-    where = _get_where();
-
-    // Create update metadata to specify values
-    updates = _get_update_values(STR_2, S32_2, F32_2, F64_2, B_2);
-
-    // Perform database update with valid parameters
-    chgRows = psDBUpdateRows(dbh,table,where,updates);
-    if(chgRows != 1) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return other than 1 for valid arguments");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-    // Verify row contents after update
-    ary = psDBDumpRows(dbh, table);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return from dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-    row = (psMetadata*)psArrayGet(ary, 0);
-    if(!_check_row_update(row)) {
-        psError(PS_ERR_UNKNOWN,true,"Update row not verified");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-    psFree(ary);
-
-    // Attempt to update rows with NULL database
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database");
-    chgRows = psDBUpdateRows(NULL,table,where,updates);
-    if(chgRows != -1) {
-        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
-                chgRows,-1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-
-    // Attempt to update rows with invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
-    chgRows = psDBUpdateRows(dbh,"table999",where,updates);
-    if(chgRows != -1) {
-        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
-                chgRows,-1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-
-    // Attempt to update rows with NULL updates
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL updates");
-    chgRows = psDBUpdateRows(dbh,table,where,NULL);
-    if(chgRows != -1) {
-        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
-                chgRows,-1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-
-    // Attempt to update rows with invalid where specifying non-existent column
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid where");
-    psFree(where);
-    where = _get_invalid_where();
-    chgRows = psDBUpdateRows(dbh,table,where,updates);
-    if(chgRows != -1) {
-        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
-                chgRows,-1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 9;
-    }
-
-    // Attempt to update rows with bad value in where statement
-    psFree(where);
-    where = _get_where_bad_value();
-    chgRows = psDBUpdateRows(dbh,table,where,updates);
-    if(chgRows != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
-                chgRows,0);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 10;
-    }
-    // Verify row contents after update - no change
-    ary = psDBDumpRows(dbh, table);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return from dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 11;
-    }
-    row = (psMetadata*)psArrayGet(ary, 0);
-    if(!_check_row_update(row)) {
-        psError(PS_ERR_UNKNOWN,true,"Update row not verified");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 12;
-    }
-    psFree(ary);
-
-    psFree(updates);
-    psFree(where);
-    psFree(rowSet);
-    psDBDropTable(dbh, table);
-
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-// Testpoint #853, TPDBDeleteRows shall update rows in a test table ...
-psS32 TPDBDeleteRows( void )
-{
-    psDB*         dbh       = NULL;
-    const char*   table     = "table11";
-    psArray*      ary       = NULL;
-    psArray*      rowSet    = NULL;
-    psMetadata*   where     = NULL;
-    psMetadata*   row       = NULL;
-    psMetadata*   md        = NULL;
-    int           chgRows   = 0;
-
-    // Create database table definition
-    md = _get_CreateTableMetadata();
-
-    // Initialize database connection
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for initialize database");
-        return 1;
-    }
-
-    // Create test table
-    if(!psDBCreateTable(dbh, table, md)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for creating test table");
-        psDBCleanup(dbh);
-        return 2;
-    }
-
-    // Create known data rows to put into test table
-    rowSet = psArrayAlloc(3);
-    rowSet->n = 0;
-    row = _get_const_row1();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-    row = _get_const_row2();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-    row = _get_row();
-    psArrayAdd(rowSet, 0, row);
-    psFree(row);
-    if(!psDBInsertRows(dbh, table, rowSet)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting data into table");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 3;
-    }
-
-    // Create where clause to specify the row to remove
-    where = _get_where();
-
-    // Delete row with valid arguments
-    chgRows = psDBDeleteRows(dbh,table,where,10);
-    if(chgRows != 1) {
-        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
-                chgRows,1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 4;
-    }
-    // Verify table contents
-    ary = psDBDumpRows(dbh, table);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 5;
-    }
-    if (ary->n != 2) {
-        psError(PS_ERR_UNKNOWN,true,"Remaining rows %d not as expected %d",
-                ary->n,2);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 6;
-    }
-    psFree(ary);
-
-    // Attempt to delete row just deleted again
-    chgRows = psDBDeleteRows(dbh,table,where,10);
-    if(chgRows != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
-                chgRows,0);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 7;
-    }
-    // Verify table contents
-    ary = psDBDumpRows(dbh, table);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 8;
-    }
-    if (ary->n != 2) {
-        psError(PS_ERR_UNKNOWN,true,"Remaining rows %d not as expected %d",
-                ary->n,2);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 9;
-    }
-    psFree(ary);
-
-    // Attempt to delete row with NULL database
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
-    chgRows = psDBDeleteRows(NULL,table,where,10);
-    if(chgRows > 0) {
-        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
-                chgRows, -1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 10;
-    }
-
-    // Attempt to delete row with invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
-    chgRows = psDBDeleteRows(dbh,"table999",where,10);
-    if(chgRows > 0) {
-        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
-                chgRows, -1);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 11;
-    }
-
-    // Attempt to delete row with NULL where - deletes all rows
-    chgRows = psDBDeleteRows(dbh,table,NULL,10);
-    if(chgRows != 2) {
-        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
-                chgRows, 2);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 12;
-    }
-    // Verify table contents
-    ary = psDBDumpRows(dbh, table);
-    if (ary == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 13;
-    }
-    if (ary->n != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Remaining rows %d not as expected %d",
-                ary->n,0);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 14;
-    }
-    psFree(ary);
-
-    // Attempt to delete row with NULL where - deletes all rows from an empty table
-    chgRows = psDBDeleteRows(dbh,table,NULL,10);
-    if(chgRows != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
-                chgRows, 0);
-        psDBDropTable(dbh,table);
-        psDBCleanup(dbh);
-        return 15;
-    }
-
-    psFree(where);
-    psFree(rowSet);
-    psDBDropTable(dbh, table);
-
-    psFree(md);
-    psDBCleanup(dbh);
-
-    return 0;
-}
-
-//
-// Tests for psDBCreate and psDBDrop can only be executed if the user
-// has system admin privileges for the SQL server so the tests have been
-// commented out.
-//
-// Testpoint #XXX, psDBCreate shall create a new test database.
-//psS32 TPDBCreate( void )
-//{
-//    const char *test_db = "ps_test_db";
-//    psS32 failed = 0;
-//    psDB *dbh = NULL;
-//
-//    dbh = _init_psDB();
-//    if (dbh == NULL) {
-//        return 1;
-//    }
-//
-//    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
-//
-//    failed = ! psDBCreate(dbh, test_db);
-//    if (!failed) {
-//        psDBDrop(dbh, test_db);
-//    }
-//
-//    psDBCleanup(dbh);
-//
-//    return failed;
-//}
-
-// Testpoint #XXX, psDBDrop shall create a new test database.
-//psS32 TPDBDrop( void )
-//{
-//    const char *test_db = "ps_test_db";
-//    psS32 failed = 0;
-//    psDB *dbh = NULL;
-//
-//    dbh = _init_psDB();
-//    if (dbh == NULL) {
-//        return 1;
-//    }
-//
-//    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
-//
-//    failed = psDBCreate(dbh, test_db);
-//    if (!failed) {
-//        failed = ! psDBDrop(dbh, test_db);
-//    }
-//
-//    psDBCleanup(dbh);
-//
-//    return failed;
-//}
-
Index: unk/psLib/test/dataIO/tst_psFits.c
===================================================================
--- /trunk/psLib/test/dataIO/tst_psFits.c	(revision 4546)
+++ 	(revision )
@@ -1,1523 +1,0 @@
-/** @file  tst_psFits.c
-*
-*  @brief Contains the tests for psFits.[ch]
-*
-*
-*  @author Robert DeSonia, MHPCC
-*
-*  @version $Revision: 1.32 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-07-06 03:04:35 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-
-#include <unistd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-#define GENIMAGE(img,c,r,TYP, valueFcn) \
-img = psImageAlloc(c,r,PS_TYPE_##TYP); \
-for (psU32 row=0;row<r;row++) { \
-    ps##TYP* imgRow = img->data.TYP[row]; \
-    for (psU32 col=0;col<c;col++) { \
-        imgRow[col] = (ps##TYP)(valueFcn); \
-    } \
-}
-
-static bool makeMulti(void);  // implicitly tests psFitsSetExtName
-static bool makeTable(void);
-const char* multiFilename = "multi.fits";
-const char* tableFilename = "table.fits";
-const int tableNumRows = 10;
-
-
-// N.B., the tests to Image read/write was liberally taken from the now
-// deprecated psImageReadSection/psImageWriteSection function tests.
-static psS32 testImageRead(void);
-static psS32 testImageWrite(void);
-
-static psS32 tst_psFitsAlloc( void );
-static psS32 tst_psFitsMoveExtName( void ); // also tests psFitsGetExtName
-static psS32 tst_psFitsMoveExtNum( void );  // also tests psFitsGetExtNum, psFitsGetSize
-static psS32 tst_psFitsReadHeader( void );
-static psS32 tst_psFitsReadHeaderSet( void );
-static psS32 tst_psFitsReadTable( void );
-static psS32 tst_psFitsReadTableColumnNum(void);
-static psS32 tst_psFitsReadTableColumn(void);
-static psS32 tst_psFitsUpdateTable(void);
-static psS32 tst_psFitsWriteHeader(void);
-
-testDescription tests[] = {
-                              {tst_psFitsAlloc, 801, "psFitsAlloc", 0, false},
-                              {tst_psFitsMoveExtName, 802, "psFitsMoveExtName", 0, false},
-                              {tst_psFitsMoveExtName, 802, "psFitsGetExtName", 0, true},
-                              {tst_psFitsMoveExtNum, 803, "psFitsMoveExtNum", 0, false},
-                              {tst_psFitsMoveExtNum, 803, "psFitsGetExtNum", 0, true},
-                              {tst_psFitsMoveExtNum, 803, "psFitsGetSize", 0, true},
-                              {tst_psFitsReadHeader, 804, "psFitsReadHeader", 0, false},
-                              {tst_psFitsReadHeaderSet,805, "psFitsReadHeaderSet", 0, false},
-                              {tst_psFitsReadTable,809, "psFitsReadTable", 0, false},
-                              {tst_psFitsReadTableColumnNum,836, "psFitsReadTableColumnNum", 0, false},
-                              {tst_psFitsReadTableColumn,839, "psFitsReadTableColumn", 0, false},
-                              {tst_psFitsUpdateTable,840, "psFitsUpdateTable", 0, false},
-                              {testImageRead,567, "psFitsReadImage", 0, false},
-                              {testImageWrite,569, "psFitsWriteImage", 0, false},
-                              {tst_psFitsWriteHeader,000,"psFitsWriteHeader",0,false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psImage", tests, argc, argv ) );
-}
-
-bool makeMulti(void)
-{
-
-    remove
-        (multiFilename);
-
-    psFits* fitsFile = psFitsAlloc(multiFilename);
-
-    if (fitsFile == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Could not create 'multi' FITS file.");
-        return false;
-    }
-
-    psImage* image = psImageAlloc(16,16,PS_TYPE_F32);
-
-    char extname[80];
-    for (int lcv = 0; lcv < 8; lcv++) {
-        snprintf(extname,80,"ext-%d", lcv);
-
-        psMetadata* header = psMetadataAlloc();
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYINT",
-                      PS_META_S32,
-                      "psS32 Item", (psS32)lcv);
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYFLT",
-                      PS_META_F32,
-                      "psF32 Item", (float)(1.0f/(float)(1+lcv)));
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYDBL",
-                      PS_META_F64,
-                      "psF64 Item", (double)(1.0/(double)(1+lcv)));
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL",
-                      PS_META_BOOL,
-                      "psBool Item",
-                      (lcv%2 == 0));
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYSTR",
-                      PS_META_STR,
-                      "String Item",
-                      extname);
-
-        psMetadataAdd(header,PS_LIST_TAIL, "EXTNAME",
-                      PS_META_STR,
-                      "Extension Name",
-                      extname);
-
-        // set the pixels in the image
-        psBinaryOp(image,image,"=",psScalarAlloc(lcv,PS_TYPE_F32));
-        if (! psFitsWriteImage(fitsFile,header,image,1) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Could not write image.");
-            return false;
-        }
-
-        psFree(header);
-    }
-    psFree(image);
-    psFree(fitsFile);
-
-    return true;
-}
-
-bool makeTable(void)
-{
-
-    remove
-        (tableFilename);
-
-    psFits* fitsFile = psFitsAlloc(tableFilename);
-
-    if (fitsFile == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Could not create 'table' FITS file.");
-        return false;
-    }
-
-    // make the PHU an image (per FITS standard, it must be)
-    psImage* image = psImageAlloc(16,16,PS_TYPE_F32);
-
-    if (! psFitsWriteImage(fitsFile,NULL,image,1) ) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Could not write PHU image.");
-        return false;
-    }
-
-    psFree(image);
-
-    // build a table structure
-    psArray* table = psArrayAlloc(tableNumRows);
-    psMetadata* header = NULL;
-    for (int row = 0; row < tableNumRows; row++) {
-        header = psMetadataAlloc();
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYINT",
-                      PS_META_S32,
-                      "psS32 Item",
-                      (psS32)row);
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYFLT",
-                      PS_META_F32,
-                      "psF32 Item",
-                      (float)(1.0f/(float)(1+row)));
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYDBL",
-                      PS_META_F64,
-                      "psF64 Item",
-                      (double)(1.0/(double)(1+row)));
-
-        psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL",
-                      PS_META_BOOL,
-                      "psBool Item",
-                      (row%2 == 0));
-
-        table->data[row] = header;
-    }
-
-    psFitsWriteTable(fitsFile, NULL, table);
-
-    psFree(table);
-    psFree(fitsFile);
-
-    return ! psMemCheckLeaks(15,NULL,stderr,false);
-}
-
-psS32 tst_psFitsAlloc( void )
-{
-
-    if (! makeMulti() ) {
-        return 1;
-    }
-
-    psFits* fitsFile = psFitsAlloc(multiFilename);
-
-    if (fitsFile == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    int extNum = psFitsGetExtNum(fitsFile);
-    if (extNum != 0) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc was not queued to the PHU, but to extension #%d.",
-                extNum);
-        return 2;
-    }
-
-    psFree(fitsFile);
-
-    // make sure the file doesn't already exist.
-    if (access("new.fits", F_OK) == 0) {
-        if (remove
-                ("new.fits") != 0) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Couldn't delete the new.fits file.");
-            return 3;
-        }
-    }
-
-    fitsFile = psFitsAlloc("new.fits");
-
-    if (fitsFile == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 4;
-    }
-
-    psFree(fitsFile);
-
-    // now, if psFitsAlloc actually created the file, I shouldn't error in removing it.
-    if (remove
-            ("new.fits") != 0) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc seemed to not have created a new file.");
-        return 5;
-    }
-
-    // Attempt to allocate with NULL filename
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    fitsFile = psFitsAlloc(NULL);
-    if(fitsFile != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psFitsAlloc did not return NULL for NULL input");
-        return 5;
-    }
-
-    return 0;
-}
-
-psS32 tst_psFitsMoveExtName( void )
-{
-
-    if (! makeMulti() ) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(multiFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    int numHDUs = psFitsGetSize(fits);
-
-    if (numHDUs < 2) {
-        psError(PS_ERR_UNKNOWN,true,
-                "The 'multi' FITS file does not have multiple HDUs.");
-        return 2;
-    }
-
-    char extName[80];
-    psRegion region = {0,0,0,0};
-
-    for (int lcv = 0; lcv < numHDUs; lcv++) {
-        snprintf(extName,80,"ext-%d",lcv);
-        // try to move to the named extension.
-        if (! psFitsMoveExtName(fits, extName) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to move to ext-%d.",
-                    lcv);
-            return 3;
-        }
-
-        // check to see if I can retrieve the name back from the psFits object.
-        char* nameFromFile = psFitsGetExtName(fits);
-        if (strcmp(nameFromFile,extName) != 0) { // hey, it didn't move?
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to retrieve the extension name back ('%s' vs '%s'",
-                    nameFromFile, extName);
-            return 3;
-        }
-        psFree(nameFromFile);
-
-        // check that the image is associated to the extension moved, i.e.,
-        // did we really move to the proper extension?
-        psImage* image = psFitsReadImage(NULL, fits,region,0);
-
-        if (image == NULL || abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
-                    lcv,image->data.F32[0][0],lcv);
-            return 4;
-        }
-        psFree(image);
-    }
-
-    for (int lcv = numHDUs-1; lcv >= 0; lcv--) {
-        snprintf(extName,80,"ext-%d",lcv);
-        // try to move to the named extension.
-        if (! psFitsMoveExtName(fits, extName) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to move to ext-%d.",
-                    lcv);
-            return 5;
-        }
-
-        // check to see if I can retrieve the name back from the psFits object.
-        char* nameFromFile = psFitsGetExtName(fits);
-        if (strcmp(nameFromFile,extName) != 0) { // hey, it didn't move?
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to retrieve the extension name back ('%s' vs '%s'",
-                    nameFromFile, extName);
-            return 5;
-        }
-        psFree(nameFromFile);
-
-        // check that the image is associated to the extension moved, i.e.,
-        // did we really move to the proper extension?
-        psImage* image = psFitsReadImage(NULL, fits,region,0);
-
-        if (abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
-                    lcv,image->data.F32[0][0],lcv);
-            return 6;
-        }
-        psFree(image);
-    }
-
-    // check to see if given a bogus extension name, it errors.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    if (psFitsMoveExtName(fits, "bogus") || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Moving to non-existant HDU didn't fail.");
-        return 7;
-    }
-
-    // check to see if given a NULL psFits, it errors.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    if (psFitsMoveExtName(NULL, "bogus") || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Operation of NULL psFits didn't fail.");
-        return 8;
-    }
-
-    // check to see if given a NULL extname, it errors.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    if (psFitsMoveExtName(fits, NULL) || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Operation of NULL extname didn't fail.");
-        return 9;
-    }
-
-    psFree(fits);
-
-    // Attempt to get ext name from null fits file
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL fits file");
-    if(psFitsGetExtName(NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Expected NULL return from psFitsGetExtName with NULL fits file");
-        return 10;
-    }
-
-    return 0;
-}
-
-psS32 tst_psFitsMoveExtNum( void )
-{
-
-    if (! makeMulti() ) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(multiFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    int numHDUs = psFitsGetSize(fits);
-
-    // as a side test, let's make sure psFitsGetSize can handle NULL.
-    psLogMsg(__func__,PS_LOG_INFO,
-             "Following should be an error.");
-    psErrorClear();
-    if (psFitsGetSize(NULL) != 0 || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN,true,
-                "The 'multi' FITS file does not have multiple HDUs.");
-        return 2;
-    }
-
-    if (numHDUs != 8) {
-        psError(PS_ERR_UNKNOWN,true,
-                "The 'multi' FITS file does not have multiple HDUs.");
-        return 2;
-    }
-
-    psRegion region = {0,0,0,0};
-
-    // test absolute positioning
-    for (int lcv = 0; lcv < numHDUs; lcv++) {
-        // try to move to the extension
-        if (! psFitsMoveExtNum(fits, lcv, false) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to move to extension %d.",
-                    lcv);
-            return 3;
-        }
-
-        // check to see if I can retrieve the number back from the psFits object.
-        if (psFitsGetExtNum(fits) != lcv) { // hey, it didn't move?
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to retrieve the extension number back (%d vs %d)",
-                    psFitsGetExtNum(fits), lcv);
-            return 5;
-        }
-
-        // check that the image is associated to the extension moved, i.e.,
-        // did we really move to the proper extension?
-        psImage* image = psFitsReadImage(NULL, fits,region,0);
-
-        if (image == NULL || abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
-                    lcv,image->data.F32[0][0],lcv);
-            return 4;
-        }
-        psFree(image);
-    }
-
-    for (int lcv = numHDUs-1; lcv >= 0; lcv--) {
-        // try to move to the extension
-        if (! psFitsMoveExtNum(fits, lcv, false) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to move to extension %d.",
-                    lcv);
-            return 5;
-        }
-
-        // check that the image is associated to the extension moved, i.e.,
-        // did we really move to the proper extension?
-        psImage* image = psFitsReadImage(NULL, fits,region,0);
-
-        if (abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
-                    lcv,image->data.F32[0][0],lcv);
-            return 6;
-        }
-        psFree(image);
-    }
-
-    // test relative positioning
-    psFitsMoveExtNum(fits,0,false);
-    for (int lcv = 1; lcv < numHDUs; lcv++) {
-        // try to move to the extension
-        if (! psFitsMoveExtNum(fits, 1, true) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to move to extension %d.",
-                    lcv);
-            return 13;
-        }
-
-        // check to see if I can retrieve the number back from the psFits object.
-        if (psFitsGetExtNum(fits) != lcv) { // hey, it didn't move?
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to retrieve the extension number back (%d vs %d)",
-                    psFitsGetExtNum(fits), lcv);
-            return 13;
-        }
-
-        // check that the image is associated to the extension moved, i.e.,
-        // did we really move to the proper extension?
-        psImage* image = psFitsReadImage(NULL, fits,region,0);
-
-        if (image == NULL || abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
-                    lcv,image->data.F32[0][0],lcv);
-            return 14;
-        }
-        psFree(image);
-    }
-
-    for (int lcv = numHDUs-2; lcv >= 0; lcv--) {
-        // try to move to the extension
-        if (! psFitsMoveExtNum(fits, -1, true) ) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to move to extension %d.",
-                    lcv);
-            return 15;
-        }
-
-        // check to see if I can retrieve the number back from the psFits object.
-        if (psFitsGetExtNum(fits) != lcv) { // hey, it didn't move?
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to retrieve the extension number back (%d vs %d)",
-                    psFitsGetExtNum(fits), lcv);
-            return 15;
-        }
-
-        // check that the image is associated to the extension moved, i.e.,
-        // did we really move to the proper extension?
-        psImage* image = psFitsReadImage(NULL, fits,region,0);
-
-        if (abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
-                    lcv,image->data.F32[0][0],lcv);
-            return 16;
-        }
-        psFree(image);
-    }
-
-    // check to see if given a negative extension number, it errors.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    psErrorClear();
-    if (psFitsMoveExtNum(fits, -1, false) || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Moving to negative HDU didn't fail.");
-        return 21;
-    }
-
-    // check to see if relative positioning beyond PHU, it errors.
-    psFitsMoveExtNum(fits,0,false);
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    psErrorClear();
-    if (psFitsMoveExtNum(fits, -1, true) || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Moving to negative HDU didn't fail.");
-        return 22;
-    }
-
-
-    // check to see if given a extension greater than the total #HDUs, it errors.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    psErrorClear();
-    if (psFitsMoveExtNum(fits, numHDUs, false) || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Moving to a HDU beyond the file's contents didn't fail.");
-        return 31;
-    }
-
-    // check to see if relative positioning beyond PHU, it errors.
-    psFitsMoveExtNum(fits,numHDUs-1,false);
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    psErrorClear();
-    if (psFitsMoveExtNum(fits, 1, true) || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Moving to negative HDU didn't fail.");
-        return 32;
-    }
-
-    // check to see if given a NULL psFits, it errors.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    psErrorClear();
-    if (psFitsMoveExtNum(NULL, 0, false) || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Operation of NULL psFits didn't fail.");
-        return 40;
-    }
-
-    psFree(fits);
-
-    // Attempt to get ext name from null fits file
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL fits file");
-    if(psFitsGetExtNum(NULL) != PS_FITS_TYPE_NONE) {
-        psError(PS_ERR_UNKNOWN,true,"Expected NULL return from psFitsGetExtNum with NULL fits file");
-        return 10;
-    }
-
-    return 0;
-}
-
-static psS32 tst_psFitsReadHeader( void )
-{
-    if (! makeMulti() ) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(multiFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    int numHDUs = psFitsGetSize(fits);
-
-    if (numHDUs < 8) {
-        psError(PS_ERR_UNKNOWN,true,
-                "The 'multi' FITS file does not have multiple HDUs.");
-        return 2;
-    }
-
-    char extname[80];
-    for (int hdunum = 0; hdunum < numHDUs; hdunum++) {
-        snprintf(extname,80,"ext-%d",hdunum);
-
-        psFitsMoveExtNum(fits,hdunum,false);
-
-        psMetadata* header = psFitsReadHeader(NULL,fits);
-        if (header == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to read header");
-            return 3;
-        }
-
-        psMetadata* header2 = psMetadataAlloc();
-        header2 = psFitsReadHeader(header2,fits);
-        if (header2 == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "Failed to read header");
-            return 11;
-        }
-
-        if (header->list->n < 1 || header->list->n != header2->list->n) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Reading the header given a NULL input psMetadata differed "
-                    "from giving an existing psMetadata.");
-            return 12;
-        }
-
-        // check for the extra metadata items
-        psS32 intItem = psMetadataLookupS32(NULL,header, "MYINT");
-        psF32 fltItem = psMetadataLookupF32(NULL,header, "MYFLT");
-        psF64 dblItem = psMetadataLookupF64(NULL,header, "MYDBL");
-        psMetadataItem* boolItem = psMetadataLookup(header, "MYBOOL");
-        char* strItem = psMetadataLookupPtr(NULL, header, "MYSTR");
-
-        if (intItem != hdunum) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psS32 metadata item from file.");
-            return 20;
-        }
-
-        if (fabsf(fltItem - 1.0f/(float)(1+hdunum)) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psF32 metadata item from file.  Got %f vs %f",
-                    fltItem,1.0f/(float)(1+hdunum));
-            return 21;
-        }
-
-        if (abs(dblItem - 1.0/(double)(1+hdunum)) > DBL_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psF64 metadata item from file.  Got %g vs %g",
-                    dblItem, 1.0/(double)(1+hdunum));
-            return 22;
-        }
-
-        if (boolItem == NULL ||
-                boolItem->type != PS_META_BOOL) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psBool metadata item from file.");
-            return 23;
-        }
-
-        if (strItem == NULL || strncmp(strItem,extname,strlen(extname)) != 0) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve string metadata item from file.  Got '%s' vs '%s' (%d)",
-                    strItem,extname,strlen(extname));
-            return 24;
-        }
-
-        psFree(header);
-        psFree(header2);
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"following should be an error (input psFits = NULL)");
-    psMetadata* header = psFitsReadHeader(NULL,NULL);
-
-    if (header != NULL || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psFitsReadHeader didn't error on a NULL psFits.");
-        return 30;
-    }
-
-
-    psFree(fits);
-
-    return 0;
-}
-
-static psS32 tst_psFitsReadHeaderSet( void )
-{
-    if (! makeMulti() ) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(multiFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    int numHDUs = psFitsGetSize(fits);
-
-    if (numHDUs < 8) {
-        psError(PS_ERR_UNKNOWN,true,
-                "The 'multi' FITS file does not have multiple HDUs.");
-        return 2;
-    }
-
-    // move to the middle
-    psFitsMoveExtNum(fits,numHDUs/2, false);
-
-    psMetadata* headerSet = psFitsReadHeaderSet(NULL, fits);
-
-    if (headerSet == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadHeaderSet returned NULL unexpectedly.");
-        return 3;
-    }
-
-    if (psFitsGetExtNum(fits) != numHDUs/2) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadHeaderSet changed the CHU.");
-        return 4;
-    }
-
-    char extname[80];
-    for (int i = 0; i < numHDUs; i++) {
-        if (i == 0) {
-            snprintf(extname, 80, "PHU");
-        } else {
-            snprintf(extname, 80, "ext-%d", i);
-        }
-
-        psMetadata* header = psMetadataLookupPtr(NULL,headerSet, extname);
-
-        if (header == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadHeader returned NULL unexpectedly for HDU#%d.",
-                    i);
-            return 5;
-        }
-
-        psS32 intItem = psMetadataLookupS32(NULL, header, "MYINT");
-
-        if (intItem != i) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadHeader for HDU#%d had a MYINT of %d, expected %d.",
-                    intItem, i);
-            return 6;
-        }
-
-    }
-
-    psMetadata* set2 = psMetadataAlloc();
-    set2 = psFitsReadHeaderSet(set2,NULL);
-    if (set2 != NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadHeaderSet returned non-NULL given a NULL psFits.");
-        return 10;
-    }
-
-    psMetadata* set3 = psMetadataAlloc();
-    set3 = psFitsReadHeaderSet(set3,fits);
-
-    if (set3 == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadHeaderSet returned NULL unexpectedly.");
-        return 11;
-    }
-
-    for (int i = 0; i < numHDUs; i++) {
-        if (i == 0) {
-            snprintf(extname, 80, "PHU");
-        } else {
-            snprintf(extname, 80, "ext-%d", i);
-        }
-
-        psMetadata* header = psMetadataLookupPtr(NULL, set3, extname);
-
-        if (header == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadHeader returned NULL unexpectedly for HDU#%d.",
-                    i);
-            return 5;
-        }
-
-        psS32 intItem = psMetadataLookupS32(NULL, header, "MYINT");
-
-        if (intItem != i) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadHeader for HDU#%d had a MYINT of %d, expected %d.",
-                    intItem, i);
-            return 6;
-        }
-
-    }
-
-
-
-    psFree(headerSet);
-    psFree(set3);
-    // set2 should have been freed by psFitsReadHeaderSet upon an error.
-
-    psFree(fits);
-
-    return 0;
-}
-
-static psS32 tst_psFitsReadTable( void )
-{
-
-
-    if (! makeTable()) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(tableFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    psFitsMoveExtNum(fits,1,false);
-
-    psArray* table = psFitsReadTable(fits);
-
-    if (table == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTable returned NULL unexpectedly.");
-        return 2;
-    }
-
-    if (table->n != tableNumRows) {
-        psError(PS_ERR_UNKNOWN, false,
-                "Expected %d rows, but read %d.",
-                tableNumRows, table->n);
-        return 3;
-    }
-
-
-    for (int row = 0; row < table->n; row++) {
-        psMetadata* rowData = table->data[row];
-
-        psS32 intItem = psMetadataLookupS32(NULL, rowData, "MYINT");
-        psF32 fltItem = psMetadataLookupF32(NULL, rowData, "MYFLT");
-        psF64 dblItem = psMetadataLookupF64(NULL, rowData, "MYDBL");
-        psBool boolItem = psMetadataLookupBool(NULL, rowData, "MYBOOL");
-
-        if (intItem != row) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psS32 metadata item from file (row=%d).  Got %d vs %d",
-                    row, intItem, row);
-            return 20;
-        }
-
-        if (fabsf(fltItem - 1.0f/(float)(1+row)) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psF32 metadata item from file (row=%d).  Got %f vs %f",
-                    row, fltItem,1.0f/(float)(1+row));
-            return 21;
-        }
-
-        if (abs(dblItem - 1.0/(double)(1+row)) > DBL_EPSILON) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psF64 metadata item from file (row=%d).  Got %g vs %g",
-                    row, dblItem, 1.0/(double)(1+row));
-            return 22;
-        }
-
-        if ( boolItem != ((row&0x01) == 0)) {
-            psError(PS_ERR_UNKNOWN, true,
-                    "Failed to retrieve psBool metadata item from file (row=%d). Got %d vs %d",
-                    row, boolItem, ((row&0x01) == 0));
-            return 23;
-        }
-    }
-
-    psFree(table);
-    psFree(fits);
-
-    psArray* nullTest = psFitsReadTable(NULL);
-
-    if (nullTest != NULL || psErrorGetStackSize() != 1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "psFitsReadTable returned non-NULL when given NULL.");
-        return 30;
-    }
-
-    return 0;
-}
-
-static psS32 tst_psFitsReadTableColumnNum( void )
-{
-    if (! makeTable()) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(tableFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    psFitsMoveExtNum(fits,1,false);
-
-    // read the column data via number
-    psVector* colData;
-    psElemType type[4] = {PS_TYPE_S32, PS_TYPE_F32, PS_TYPE_F32, PS_TYPE_BOOL};
-    psElemType altType[4] = {PS_TYPE_S64, PS_TYPE_F64, PS_TYPE_F64, PS_TYPE_BOOL};
-    char* colname[4] = {"MYINT","MYFLT","MYDBL","MYBOOL"};
-    psF64 expectedValues[4][10] = {
-                                      {0,1,2,3,4,5,6,7,8,9},
-                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
-                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
-                                      {1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0}
-                                  };
-
-    for (int col = 0; col < 4; col++) {
-        colData = psFitsReadTableColumnNum(fits,colname[col]);
-        if (colData == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadTableColumnNum returned NULL for col=%d",
-                    col);
-            return 2;
-        }
-        if (colData->type.type != type[col] &&
-                colData->type.type != altType[col]) {
-            char* typeRead;
-            char* typeExpected;
-            PS_TYPE_NAME(typeRead, colData->type.type);
-            PS_TYPE_NAME(typeExpected, type[col]);
-
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadTableColumnNum returned different type, %s vs %s, for col=%d",
-                    typeRead, typeExpected, col);
-            return 3;
-        }
-        if (colData->n != tableNumRows) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadTableColumnNum returned different number of rows, %d vs %d, for col=%d",
-                    colData->n, tableNumRows, col);
-            return 4;
-        }
-        for (int row = 0; row < tableNumRows; row++) {
-            if (abs(p_psVectorGetElementF64(colData,row) - expectedValues[col][row]) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, false,
-                        "psFitsReadTableColumnNum returned unexpected values (%g vs %g) for col=%d",
-                        p_psVectorGetElementF64(colData,row), expectedValues[col][row], col);
-                return 5;
-            }
-        }
-        psFree(colData);
-    }
-
-    psWarning("Following should be an error.");
-    psErrorClear();
-    psVector* data = psFitsReadTableColumnNum(NULL,colname[0]);
-    psErr* err = psErrorLast();
-    if (data != NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumnNum did not return NULL with NULL psFits");
-        return 6;
-    }
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumnNum did not error with NULL psFits");
-        return 7;
-    }
-    psFree(err);
-
-    psWarning("Following should be an error.");
-    psErrorClear();
-    data = psFitsReadTableColumnNum(fits,"BOGUS");
-    err = psErrorLast();
-    if (data != NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumnNum did not return NULL with bogus column name.");
-        return 8;
-    }
-    if (err->code != PS_ERR_IO) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumnNum did not error with bogus column name.");
-        return 9;
-    }
-    psFree(err);
-
-    psFree(fits);
-
-    return 0;
-}
-
-static psS32 tst_psFitsReadTableColumn( void )
-{
-    if (! makeTable()) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(tableFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 1;
-    }
-
-    psFitsMoveExtNum(fits,1,false);
-
-    // read the column data via number
-    psArray* colData;
-    char* colname[4] = {"MYINT","MYFLT","MYDBL","MYBOOL"};
-    psF64 expectedValues[4][10] = {
-                                      {0,1,2,3,4,5,6,7,8,9},
-                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
-                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
-                                      {1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0}
-                                  };
-
-    for (int col = 0; col < 4; col++) {
-        colData = psFitsReadTableColumn(fits,colname[col]);
-        if (colData == NULL) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadTableColumn returned NULL for col=%d",
-                    col);
-            return 2;
-        }
-        if (colData->n != tableNumRows) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsReadTableColumn returned different number of rows, %d vs %d, for col=%d",
-                    colData->n, tableNumRows, col);
-            return 4;
-        }
-        if (col < 3) {
-            for (int row = 0; row < tableNumRows; row++) {
-                if (abs(atof((char*)colData->data[row]) - expectedValues[col][row]) > 0.0001) {
-                    psError(PS_ERR_UNKNOWN, false,
-                            "psFitsReadTableColumn returned unexpected values (%g vs %g) for col=%d",
-                            atof((char*)colData->data[row]), expectedValues[col][row], col);
-                    return 5;
-                }
-            }
-        }
-        psFree(colData);
-    }
-
-    psWarning("Following should be an error.");
-    psErrorClear();
-    psArray* data = psFitsReadTableColumn(NULL,"MYINT");
-    psErr* err = psErrorLast();
-    if (data != NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumn did not return NULL with NULL psFits");
-        return 6;
-    }
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumn did not error with NULL psFits");
-        return 7;
-    }
-    psFree(err);
-
-    psWarning(__func__,"Following should be an error.");
-    psErrorClear();
-    data = psFitsReadTableColumn(fits,"BOGUS");
-    err = psErrorLast();
-    if (data != NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumn did not return NULL with col=\"BOGUS\"");
-        return 8;
-    }
-    if (err->code != PS_ERR_IO) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsReadTableColumn did not error with col=\"BOGUS\"");
-        return 9;
-    }
-    psFree(err);
-
-    psFree(fits);
-
-    return 0;
-}
-
-static psS32 tst_psFitsUpdateTable( void )
-{
-    psErr* err;
-
-    if (! makeTable()) {
-        return 1;
-    }
-
-    psFits* fits = psFitsAlloc(tableFilename);
-
-    if (fits == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsAlloc returned NULL on existing file.");
-        return 2;
-    }
-
-    psFitsMoveExtNum(fits,1,false);
-
-    // change the data in the file, going past by one (implicit new row of data)
-    for (int row = 0; row < tableNumRows+1; row++) {
-        psMetadata* md = psMetadataAlloc();
-        psMetadataAddF32(md,PS_LIST_TAIL,"MYFLT","",(float)row/-10.0);
-        psMetadataAddF64(md,PS_LIST_TAIL,"MYDBL","",(double)row/-100.0);
-        psMetadataAddS32(md,PS_LIST_TAIL,"MYINT","",-row);
-
-        if (! psFitsUpdateTable(fits,md,row)) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsUpdateTable returned false, but expected true for row=%d.",
-                    row);
-            return 3;
-        }
-        psFree(md);
-    }
-
-    for (int row = 0; row < tableNumRows+1; row++) {
-        psMetadata* md = psFitsReadTableRow(fits, row);
-        if (abs(psMetadataLookupF32(NULL,md,"MYFLT") - (float)row/-10.0) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsUpdateTable did not change the float value for row=%d.",
-                    row);
-            return 4;
-        }
-        if (abs(psMetadataLookupF64(NULL,md,"MYDBL") - (float)row/-100.0) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsUpdateTable did not change the double value for row=%d.",
-                    row);
-            return 5;
-        }
-        if (psMetadataLookupS32(NULL,md,"MYINT") != -row) {
-            psError(PS_ERR_UNKNOWN, false,
-                    "psFitsUpdateTable did not change the integer value for row=%d.",
-                    row);
-            return 6;
-        }
-        psFree(md);
-    }
-
-    psMetadata* md = psMetadataAlloc();
-    psMetadataAddF32(md,PS_LIST_TAIL,"BOGUS","",-1.0f);
-    psWarning("Following should be a warning.");
-    psErrorClear();
-    if (! psFitsUpdateTable(fits,md,0)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not return false with bogus column data");
-        return 10;
-    }
-    psFree(md);
-
-    md = psMetadataAlloc();
-    psMetadataAddF32(md,PS_LIST_TAIL,"MYFLT","",-1.0f);
-    psMetadataAddF64(md,PS_LIST_TAIL,"MYDBL","",-2.0);
-    psMetadataAddS32(md,PS_LIST_TAIL,"MYINT","",-3);
-
-    psWarning("Following should be an error.");
-    psErrorClear();
-    if (psFitsUpdateTable(NULL,md,0)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not return false with NULL psFits");
-        return 20;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not error with NULL psFits");
-        return 21;
-    }
-    psFree(err);
-
-    psWarning("Following should be an error.");
-    psErrorClear();
-    if (psFitsUpdateTable(fits,NULL,0)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not return false with NULL psMetadata");
-        return 22;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not error with NULL psMetadata");
-        return 23;
-    }
-    psFree(err);
-
-    psWarning("Following should be an error.");
-    psErrorClear();
-    if (psFitsUpdateTable(fits,md,-1)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not return false with row=-1");
-        return 24;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_IO) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psFitsUpdateTable did not error with row=-1");
-        return 25;
-    }
-
-    psFree(err);
-    psFree(md);
-    psFree(fits);
-
-    return 0;
-}
-
-psS32 testImageRead(void)
-{
-    psS32 N = 256;
-    psS32 M = 128;
-
-    /*
-        This function shall open the specified FITS file, read the specified data
-        and place the data into a psImage structure. This function shall generate
-        an error message and return NULL if any of the input parameters are out of
-        range, image file doesn't exist or image is zero or one dimensional.
-
-        Verify the returned psImage structure contains expected values, if the input
-        parameter filename specifies an available FITS file with known 2dimensional
-        data, input parameters col, row, ncol, nrow, z specify data range with the
-        FITS file. Cases should include 1x1, Nx1, 1xN, NxN and MxN sub images and
-        total FITS file image. (done in macro)
-
-        Verify the returned psImage structure is equal to the input parameter
-        'output', if specified. (done in macro)
-
-        */
-
-    /* generate FITS file to read */
-
-    #define testReadTypeSize(m, n, readM0, readN0, readM, readN, TYP, filename) \
-    { \
-        psImage* img = NULL; \
-        psImage* img2 = NULL; \
-        psImage* img3 = NULL; \
-        psImage* img4 = NULL; \
-        /*        psImagimge* img_ref = NULL; */ \
-        \
-        GENIMAGE(img,m,n,TYP,row+2*col); \
-        img2 = psImageCopy(img2,img,PS_TYPE_##TYP); \
-        GENIMAGE(img3,m,n,TYP,row+2*col); \
-        psImageClip(img3,32.0,32.0,120.0,120.0); \
-        img4 = psImageCopy(img4,img3,PS_TYPE_##TYP); \
-        remove(filename); \
-        psFits* fits = psFitsAlloc(filename); \
-        psRegion region = {0,0,0,0}; \
-        if (! psFitsWriteImage(fits, NULL, img, 2)) { \
-            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
-            return 1; \
-        } \
-        if (! psFitsUpdateImage(fits,img3, region, 1)) { \
-            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
-            return 2; \
-        } \
-        if (! psFitsWriteImage(fits,NULL, img3, 2)) { \
-            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
-            return 3; \
-        } \
-        if (! psFitsUpdateImage(fits,img,region, 1)) { \
-            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
-            return 4; \
-        } \
-        psFree(img); \
-        psFree(fits); \
-        img = NULL; \
-        psFree(img3); \
-        img3 = NULL; \
-        fits = psFitsAlloc(filename); \
-        psRegion reg = {readM0, readM, readN0, readN}; \
-        img = psFitsReadImage(img, fits, reg, 0); \
-        img3 = psFitsReadImage(img3, fits, reg, 1); \
-        if (img3 == NULL) { \
-            psError(PS_ERR_UNKNOWN, true,"Failed to read test image %s",filename); \
-            return 6; \
-        } \
-        for (psU32 row = readN0; row < readN; row++) { \
-            ps##TYP* imgRow = img->data.TYP[row-readN0]; \
-            ps##TYP* img2Row = img2->data.TYP[row]; \
-            ps##TYP* img3Row = img3->data.TYP[row-readN0]; \
-            ps##TYP* img4Row = img4->data.TYP[row]; \
-            for (psU32 col = readM0; col < readM; col++) { \
-                if (fabsf(imgRow[col-readM0]-img2Row[col]) > FLT_EPSILON) { \
-                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,0 (%.2f vs %.2f) for %s", \
-                            col,row,(psF32)imgRow[col-readM0],(psF32)img2Row[col],filename); \
-                    return 7; \
-                } \
-                if (fabsf(img3Row[col-readM0]-img4Row[col]) > FLT_EPSILON) { \
-                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,1 (%.2f vs %.2f) for %s", \
-                            col,row,(psF32)img3Row[col-readM0],(psF32)img4Row[col],filename); \
-                    return 8; \
-                } \
-            } \
-        } \
-        psFree(img); \
-        img = NULL; \
-        psFree(img3); \
-        img3 = NULL; \
-        psFitsMoveExtNum(fits,1, false); \
-        img3 = psFitsReadImage(img3, fits, reg, 0); \
-        img = psFitsReadImage(img, fits, reg, 1); \
-        if (img == NULL) { \
-            psError(PS_ERR_UNKNOWN, true,"Failed to read test image %s",filename); \
-            return 9; \
-        } \
-        for (psU32 row = readN0; row < readN; row++) { \
-            ps##TYP* imgRow = img->data.TYP[row-readN0]; \
-            ps##TYP* img2Row = img2->data.TYP[row]; \
-            ps##TYP* img3Row = img3->data.TYP[row-readN0]; \
-            ps##TYP* img4Row = img4->data.TYP[row]; \
-            for (psU32 col = readM0; col < readM; col++) { \
-                if (fabsf(imgRow[col-readM0]-img2Row[col]) > FLT_EPSILON) { \
-                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,0 (%.2f vs %.2f) for %s", \
-                            col,row,(psF32)imgRow[col-readM0],(psF32)img2Row[col],filename); \
-                    return 10; \
-                } \
-                if (fabsf(img3Row[col-readM0]-img4Row[col]) > FLT_EPSILON) { \
-                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,1 (%.2f vs %.2f) for %s", \
-                            col,row,(psF32)img3Row[col-readM0],(psF32)img4Row[col],filename); \
-                    return 11; \
-                } \
-            } \
-        } \
-        psFree(img); \
-        psFree(img2); \
-        psFree(img3); \
-        psFree(img4); \
-        psFree(fits); \
-    }
-
-    #define testReadType(TYP,filename) \
-    testReadTypeSize(1,1,0,0,0,0,TYP,"tmpImages/1x1_" filename); \
-    testReadTypeSize(M,1,M/4,0,M*3/4,0,TYP,"tmpImages/Mx1_" filename); \
-    testReadTypeSize(1,N,0,N/4,0,N*3/4,TYP,"tmpImages/1xN_" filename); \
-    testReadTypeSize(M,N,M/4,N/4,M*3/4,N*3/4,TYP,"tmpImages/MxN_" filename);
-
-    mkdir("tmpImages",0777);
-
-    testReadTypeSize(1,1,0,0,0,0,U8,"tmpImages/1x1_" "U8.fits");
-    testReadTypeSize(M,1,M/4,0,M*3/4,0,U8,"tmpImages/Mx1_" "U8.fits");
-    testReadTypeSize(1,N,0,N/4,0,N*3/4,U8,"tmpImages/1xN_" "U8.fits");
-    testReadTypeSize(M,N,M/4,N/4,M*3/4,N*3/4,U8,"tmpImages/MxN_" "U8.fits");
-
-
-    testReadType(U8,"U8.fits");
-    testReadType(S8,"S8.fits");   // Not a requirement
-    testReadType(S16,"S16.fits");
-    testReadType(U16,"U16.fits"); // Not a requirement
-    testReadType(S32,"S32.fits");
-    testReadType(U32,"U32.fits"); // Not a requirement
-    testReadType(F32,"F32.fits");
-    testReadType(F64,"F64.fits");
-
-    // Attempt to read from NULL fits object
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL psFits");
-    psRegion region = {
-                          0,0,0,0
-                      };
-    if(psFitsReadImage(NULL,NULL,region,0) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL psFits");
-        return 100;
-    }
-
-    return 0;
-}
-
-psS32 testImageWrite(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psS32 m = 64;
-    psS32 n = 96;
-
-    /*
-    This function shall write the specified section within a psImage structure
-    to a FITS file. If the specifiedfile exists, then data should overwrite the
-    section to write. If the specified file doesn't exist, it shall be created.
-    If an extenstion is specified, then a basic primary header data unit shall
-    be created.
-    */
-
-    /*
-    Verify a FITS file named filename is generated and contains expected
-    values, if the input parameter input contains known data values, input
-    parameters col, row, ncol, nrow specify a valid data region within psImage
-    structure.
-
-    Verify a FITS file named filename is generated and contains a primary
-    header data unit with extension with expected values, if the input
-    parameter input contains known data values, input parameters col, row,
-    ncol, nrow specify a valid data region within psImage structure and
-    extname and/or extnum specify an extenstion to write.
-
-    N.B. : these are done in testImageRead tests, see above.
-    */
-
-    /*
-    Verify a FITS file named filename is overwritten and contains
-    expected values, if the input parameter input contains known data values,
-    input parameters col, row, ncol, nrow specify a valid data region within
-    psImage structure.
-    */
-
-    GENIMAGE(img,m,n,F32,0);
-    GENIMAGE(img2,m,n,F32,row+2*col);
-    mkdir("tmpImages",0777);
-    remove
-        ("tmpImages/writeTest.fits");
-    psRegion region = {
-                          0,0,0,0
-                      };
-    psFits* fits = psFitsAlloc("tmpImages/writeTest.fits");
-
-    if (! psFitsWriteImage(fits, NULL, img,1)) {
-        psError(PS_ERR_UNKNOWN, true,"Couldn't write writeTest.fits.");
-        return 14;
-    }
-    if (! psFitsUpdateImage(fits, img2, region, 0)) {
-        psError(PS_ERR_UNKNOWN, true,"Couldn't update writeTest.fits.");
-        return 15;
-    }
-    psFree(img);
-    psFree(img2);
-
-    // Did it really overwrite the pixel values?  Let's read it in and see.
-    psFree(fits);
-    fits = psFitsAlloc("tmpImages/writeTest.fits");
-    img = psFitsReadImage(NULL, fits, region, 0);
-    if (img == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"Could not read in writeTest.fits.");
-        return 16;
-    }
-    for (psU32 row=0;row<n;row++) {
-        psF32* imgRow = img->data.F32[row];
-        for (psU32 col=0;col<m;col++) {
-            if (fabsf(imgRow[col] - (row+2*col)) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"The image values were not overwritten at %d,%d (%.2f vs %.2f)",
-                        col,row,imgRow[col],(row+2*col));
-                return 17;
-            }
-        }
-    }
-
-    psFree(img);
-
-    /*
-    Verify false is returned and program execution is not stopped, if the input image
-    is null.
-    */
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message because input image is null.");
-    if ( psFitsWriteImage(fits,NULL,NULL, 1) ) {
-        psError(PS_ERR_UNKNOWN, true,"psImageWriteSection did not return false when input image is NULL.");
-        return 20;
-    }
-
-    psFree(fits);
-
-    return 0;
-}
-
-psS32 tst_psFitsWriteHeader(void)
-{
-    if (! makeMulti() ) {
-        return 1;
-    }
-
-    psMetadata* header   = psMetadataAlloc();
-    psFits*     fitsFile = psFitsAlloc(multiFilename);
-
-    // Test psFitsReadWrite generates files from psFitsWriteImage which calls psFitsWriteHeader
-    // so these additional tests check for error conditions
-    // Attempt call function with NULL metadata
-    if(psFitsWriteHeader(NULL,fitsFile)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL metadata pointer");
-        return 2;
-    }
-
-    psFree(fitsFile);
-
-    // Attempt to call function with NULL fits
-    if(psFitsWriteHeader(header,NULL)) {
-        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL fits file pointer");
-        return 3;
-    }
-    psFree(header);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataIO/tst_psLookupTable_01.c
===================================================================
--- /trunk/psLib/test/dataIO/tst_psLookupTable_01.c	(revision 4546)
+++ 	(revision )
@@ -1,855 +1,0 @@
-/** @file  tst_psLookupTable_01.c
-*
-*  @brief Test driver for psLookupTable functions
-*
-*  This test driver contains the following tests for psLookupTable functions:
-*     testLookupAlloc - test allocation and freeing of psLookupTable
-*     testLookupRead - test different files and types within files
-*                      being read correctly and some failure cases
-*     testLookupTableInterpolate - test the interpolation function
-*     testLookupTableInterpolateAll - test interpolation of all row values
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-06-23 03:19:29 $
-*
-*  Copyright 2004-5 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-#include <string.h>
-
-static psS32 testLookupTableAlloc(void);
-static psS32 testVectorsReadFromFile(void);
-static psS32 testLookupTableImport(void);
-static psS32 testLookupTableRead(void);
-static psS32 testLookupTableInterpolate(void);
-static psS32 testLookupTableInterpolateAll(void);
-
-const psF64 errorTol_psF64 = 1.0e-4;
-const psF64 tableU8_validFrom = 0;
-const psF64 tableU8_validTo = 3;
-const psS32 tableU8_size = 4;
-const char tableU8_format[] = "\%d \%d \%d \%ld \%d \%d \%d \%ld \%f \%lf";
-const char tableU8_filename[] = "verified/tableU8.dat";
-const psS32 tableU8_indexCol = 0;
-const psS32 tableU8_index[] =
-    {
-        0,   1,    2,   3
-    };
-const psU16 tableU8_val1[]  =
-    {
-        2,   4,    6,   8
-    };
-const psU32 tableU8_val2[]  =
-    {
-        4,   8,   12,  16
-    };
-const psU64 tableU8_val3[]  =
-    {
-        8,  16,   24,  32
-    };
-const psS8  tableU8_val4[]  =
-    {
-        0,  -1,   -2,  -3
-    };
-const psS16 tableU8_val5[]  =
-    {
-        -2,  -4,   -6,  -8
-    };
-const psS32 tableU8_val6[]  =
-    {
-        -4,  -8,  -12, -16
-    };
-const psS64 tableU8_val7[]  =
-    {
-        -8, -16,  -24, -32
-    };
-const psF32 tableU8_val8[]  =
-    {
-        -0.5, 0.0,  0.5,0.75
-    };
-const psF64 tableU8_val9[]  =
-    {
-        -1.5,-1.0,-0.25,1.75
-    };
-
-const psF64 tableF32_validFrom = -10.05;
-const psF64 tableF32_validTo = 3500.67;
-const psS32 tableF32_size = 4;
-const psS32 tableF32_cols = 9;
-const char tableF32_filename[] = "verified/tableF32.dat";
-const char tableF32_format[] = "\%f \%d \%d \%ld \%d \%d \%d \%ld \%d \%lf";
-const char tableF32_indexCol = 0;
-const psElemType tableF32_colType[] =
-    {
-        PS_TYPE_F32, PS_TYPE_S32, PS_TYPE_S32, PS_TYPE_S64,
-        PS_TYPE_S32, PS_TYPE_S32, PS_TYPE_S32, PS_TYPE_S64,
-        PS_TYPE_F64
-    };
-const psF32 tableF32_index[] =
-    {
-        -10.05,1.009,23.45,3500.67
-    };
-const psS32 tableF32_col1[] =
-    {
-        2, 4, 6, 8
-    };
-const psS32 tableF32_col2[] =
-    {
-        4, 8, 12, 16
-    };
-const psS64 tableF32_col3[] =
-    {
-        8, 16, 24, 32
-    };
-const psS32 tableF32_col4[] =
-    {
-        0, -1, -2, -3
-    };
-const psS32 tableF32_col5[] =
-    {
-        -2, -4, -6, -8
-    };
-const psS32 tableF32_col6[] =
-    {
-        -4, -8, -12, -16
-    };
-const psS64 tableF32_col7[] =
-    {
-        -8, -16, -24, -32
-    };
-const psF64 tableF32_col8[] =
-    {
-        -1.5, -1.0, -0.25, 1.75
-    };
-
-
-const psF64 table10_validFrom = 1;
-const psF64 table10_validTo   = 10;
-const psS32 table10_size      = 10;
-const char table10_format[] = "\%d \%d \%d \%ld \%d \%d \%d \%ld \%f \%lf";
-const char table10_filename[] = "verified/table10.dat";
-const psS32 table10_indexCol = 0;
-const psS32  table10_index[]   =
-    {
-        1,   2,    3,   4,    5,    6,    7,    8,   9,    10
-    };
-const psS32 table10_val1[]    =
-    {
-        4,   6,    8,  10,   12,   14,   16,   18,   20,   22
-    };
-const psS32 table10_val2[]    =
-    {
-        8,  12,   16,  20,   24,   28,   32,   36,   40,   44
-    };
-const psS64 table10_val3[]    =
-    {
-        16,  24,   32,  64,  128,  256,  512, 1024, 2048, 4096
-    };
-const psS32  table10_val4[]    =
-    {
-        -1,  -2,   -3,  -4,   -5,   -6,   -7,   -8,   -9,  -10
-    };
-const psS32 table10_val5[]    =
-    {
-        -4,  -6,   -8, -10,  -12,  -14,  -16,  -18,  -20,  -22
-    };
-const psS32 table10_val6[]    =
-    {
-        -8, -12,  -16, -20,  -24,  -28,  -32,  -36,  -40,  -44
-    };
-const psS64 table10_val7[]    =
-    {
-        -16, -24,  -32, -64, -128, -256, -512,-1024,-2048,-4096
-    };
-const psF32 table10_val8[]    =
-    {
-        -2.25,-1.5,-0.75, 0.0, 0.75, 1.50, 2.25, 3.00, 3.75, 4.50
-    };
-const psF64 table10_val9[]    =
-    {
-        -2.67,0.66, 3.99,7.32,10.65,13.98,17.31,20.64,23.97,27.30
-    };
-const psF64 interpolVal1[]    =
-    {
-        5.25, 12.5, 25, 160, -5.25, -12.5, -25, -160, 0.9375, 11.4825
-    };
-const psF64 interpolVal2[]    =
-    {
-        5, 12, 24, 128, -5, -12, -24, -128, 0.75, 10.65
-    };
-const psF64 interpolVal3[]    =
-    {
-        4, 8, 16, -1, -4, -8, -16, -2.25, -2.67
-    };
-
-testDescription tests[] = {
-                              {testLookupTableAlloc,817,"psLookupTableAlloc",0,false},
-                              {testVectorsReadFromFile,999,"psVectorsReadFromFile",0,false},
-                              {testLookupTableImport,999,"psLookupTableImport",0,false},
-                              {testLookupTableRead,998,"psLookupTableRead",0,false},
-                              {testLookupTableInterpolate,997,"psLookupTableInterpolate",0,false},
-                              {testLookupTableInterpolateAll,996,"psLookupTableInterpolateAll",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if ( ! runTestSuite(stderr,"psLookupTable",tests,argc,argv)) {
-        return 1;
-    }
-    return 0;
-}
-
-psS32 testLookupTableAlloc(void)
-{
-    psLookupTable*  table1 = NULL;
-
-    // Allocate lookup table with valid parameters
-    table1 = psLookupTableAlloc("tableF32.dat","\%f \%lf \%d \%ld",10);
-    if(table1 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Null lookup table generated from valid parameters");
-        return 1;
-    }
-    if(strcmp(table1->filename,"tableF32.dat") != 0) {
-        psError(PS_ERR_UNKNOWN,true,"File name not properly stored in psLookupTable structure.");
-        return 2;
-    }
-    if(strcmp(table1->format,"\%f \%lf \%d \%ld") != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Format string not properly storeed in psLookupTable structure.");
-        return 3;
-    }
-    if(table1->indexCol != 10) {
-        psError(PS_ERR_UNKNOWN,true,"Member indexCol not set properly");
-        return 3;
-    }
-    psFree(table1);
-
-    // Allocate lookup table with invalid filename
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid file name");
-    table1 = psLookupTableAlloc(NULL,"\%d",3);
-    if(table1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Null file name accepted by psLookupTableAlloc");
-        return 4;
-    }
-
-    // Allocate lookup table with invalid format
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid format string");
-    table1 = psLookupTableAlloc("tableF32.dat",NULL,3);
-    if(table1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Null format string accepted by psLookupTableAlloc");
-        return 5;
-    }
-
-    return 0;
-}
-
-psS32 testVectorsReadFromFile(void)
-{
-    psArray*   out        = NULL;
-    psVector*  tempVector = NULL;
-
-    // Read file and place into an array of vectors
-    out = psVectorsReadFromFile("verified/tableF32.dat","\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf");
-    if(out == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unable to read file into array of vectors");
-        return 1;
-    }
-    // Verify the number of vectors in array is as expected
-    if(out->n != tableF32_cols) {
-        psError(PS_ERR_UNKNOWN,true,"Expected number of columns = %d not equal to actual = %d",
-                tableF32_cols, out->n);
-        return 2;
-    }
-    // Verify the number of entries in vectors is as expected
-    for(int i = 0; i < out->n; i++ ) {
-        tempVector = out->data[i];
-        if(tempVector->n != tableF32_size) {
-            psError(PS_ERR_UNKNOWN,true,"Col #%d Expected number of entries = %d  not equal to actual = %d",
-                    i,tableF32_size,tempVector->n);
-            return 3;
-        }
-    }
-    // Verify the vector types are as expected
-    for(int i = 0; i < out->n; i++) {
-        tempVector = out->data[i];
-        if(tempVector->type.type != tableF32_colType[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #%d Expected type = %d not equal to actual = %d",
-                    i,tableF32_colType[i],tempVector->type.type);
-            return 4;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[0];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.F32[i] != tableF32_index[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #0 Vector element[%d] expected = %f not equal to actual = %f",
-                    i, tableF32_index[i],tempVector->data.F32[i]);
-            return 5 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[1];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col1[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #1 Vector element[%d] expected = %d not equal to actual = %d",
-                    i, tableF32_col1[i],tempVector->data.S32[i]);
-            return 10 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[2];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col2[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #2 Vector element[%d] expected = %d not equal to actual = %d",
-                    i, tableF32_col2[i],tempVector->data.S32[i]);
-            return 15 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[3];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S64[i] != tableF32_col3[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #3 Vector element[%d] expected = %ld not equal to actual = %ld",
-                    i, tableF32_col3[i],tempVector->data.S64[i]);
-            return 20 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[4];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col4[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #4 Vector element[%d] expected = %d not equal to actual = %d",
-                    i, tableF32_col4[i],tempVector->data.S32[i]);
-            return 25 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[5];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col5[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #5 Vector element[%d] expected = %d not equal to actual = %d",
-                    i, tableF32_col5[i],tempVector->data.S32[i]);
-            return 30 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[6];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col6[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #6 Vector element[%d] expected = %d not equal to actual = %d",
-                    i, tableF32_col6[i],tempVector->data.S32[i]);
-            return 35 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[7];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S64[i] != tableF32_col7[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #7 Vector element[%d] expected = %ld not equal to actual = %ld",
-                    i, tableF32_col7[i],tempVector->data.S64[i]);
-            return 40 + i;
-        }
-    }
-    // Verify the values in the vectors are as expected
-    tempVector = out->data[8];
-    for(int i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.F64[i] != tableF32_col8[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Col #8 Vector element[%d] expected = %lf not equal to actual = %lf",
-                    i, tableF32_col8[i],tempVector->data.F64[i]);
-            return 45 + i;
-        }
-    }
-    psFree(out);
-
-    // Attempt to read vectors from valid file with invalid format
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL format");
-    out = psVectorsReadFromFile("verified/tableF32.dat",NULL);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL format string");
-        return 50;
-    }
-
-    // Attempt to read vectors from invalid file with valid format
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL filename");
-    out = psVectorsReadFromFile(NULL,"%f %f");
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL file name");
-        return 51;
-    }
-
-    // Attempt to read vectors from valid file with invalid format specifiers
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid format specifier");
-    out = psVectorsReadFromFile("verified/tableF32.data","\%f \%c \%d");
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid format specifier");
-        return 52;
-    }
-
-    // Attempt to read vectors from non-existant file
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for non-existant file");
-    out = psVectorsReadFromFile("verified/nonexistant.dat","\%f \%d \%d");
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with non-existant file");
-        return 53;
-    }
-
-    // Attempt to read vectors from file with errors in the numbers
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for error is file");
-    out = psVectorsReadFromFile("verified/tableF32_err.dat","\%f \%d \%d \%ld \%d \%d \%d \%ld \%d \%lf");
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with file with errors");
-        return 54;
-    }
-
-    return 0;
-}
-
-psS32 testLookupTableImport(void)
-{
-    psLookupTable*  outTable = NULL;
-    psLookupTable*  inTable  = NULL;
-    psArray*        vectors  = NULL;
-
-    // Attempt to import table with NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL table argument");
-    outTable = psLookupTableImport(NULL,vectors,1);
-    if(outTable != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input table");
-        return 1;
-    }
-
-    // Allocate valid table, format string and index column
-    inTable = psLookupTableAlloc(table10_filename,table10_format,table10_indexCol);
-
-    // Attempt to import table with NULL vector argument
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL vectors");
-    outTable = psLookupTableImport(inTable,vectors,table10_indexCol);
-    if(outTable != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input vectors");
-        return 2;
-    }
-
-    // Allocate valid array
-    vectors = psArrayAlloc(10);
-
-    // Attempt to import table with invalid index column
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid index column");
-    outTable = psLookupTableImport(inTable,vectors,-1);
-    if(outTable != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid index column specified");
-        return 3;
-    }
-    psFree(vectors);
-
-    // Attempt to import file with file with unsorted index vector
-    // Read vectors from file
-    vectors = psVectorsReadFromFile(table10_filename,table10_format);
-    outTable = psLookupTableImport(inTable,vectors,table10_indexCol);
-    if(outTable != inTable) {
-        psError(PS_ERR_UNKNOWN,true,"Did not set proper return value");
-        return 4;
-    }
-    // Verify the index column vector
-    psVector* indexVector = outTable->index;
-    for(int i = 0; i < indexVector->n; i++) {
-        if(indexVector->data.S32[i] != table10_index[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Index value[%d] = %d is not as expected %d",
-                    i,indexVector->data.S32[i],table10_index[i]);
-            return i*4;
-        }
-    }
-    // Verify the value array vectors
-    psVector* valueVector = outTable->values->data[1];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S32[i] != table10_val1[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
-                    i,valueVector->data.S32[i],table10_val1[i]);
-            return i*5;
-        }
-    }
-    valueVector = outTable->values->data[2];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S32[i] != table10_val2[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
-                    i,valueVector->data.S32[i],table10_val2[i]);
-            return i*6;
-        }
-    }
-    valueVector = outTable->values->data[3];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S64[i] != table10_val3[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %ld is not as expected %ld",
-                    i,valueVector->data.S64[i],table10_val3[i]);
-            return i*7;
-        }
-    }
-    valueVector = outTable->values->data[4];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S32[i] != table10_val4[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
-                    i,valueVector->data.S32[i],table10_val4[i]);
-            return i*8;
-        }
-    }
-    valueVector = outTable->values->data[5];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S32[i] != table10_val5[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
-                    i,valueVector->data.S32[i],table10_val5[i]);
-            return i*9;
-        }
-    }
-    valueVector = outTable->values->data[6];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S32[i] != table10_val6[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
-                    i,valueVector->data.S32[i],table10_val6[i]);
-            return i*10;
-        }
-    }
-    valueVector = outTable->values->data[7];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.S64[i] != table10_val7[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %ld is not as expected %ld",
-                    i,valueVector->data.S64[i],table10_val7[i]);
-            return i*11;
-        }
-    }
-    valueVector = outTable->values->data[8];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.F32[i] != table10_val8[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %f is not as expected %f",
-                    i,valueVector->data.F32[i],table10_val8[i]);
-            return i*12;
-        }
-    }
-    valueVector = outTable->values->data[9];
-    for(int i = 0; i < valueVector->n; i++) {
-        if(valueVector->data.F64[i] != table10_val9[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %lf is not as expected %lf",
-                    i,valueVector->data.F64[i],table10_val9[i]);
-            return i*13;
-        }
-    }
-    // Verify the table members are set properly
-    if(outTable->indexCol != table10_indexCol) {
-        psError(PS_ERR_UNKNOWN,true,"Member indexCol = %d not as expected %d",
-                outTable->indexCol,table10_indexCol);
-        return 100;
-    }
-    if(outTable->validFrom != table10_validFrom) {
-        psError(PS_ERR_UNKNOWN,true,"Member validFrom = %d not as expected %d",
-                outTable->validFrom, table10_validFrom);
-        return 101;
-    }
-    if(outTable->validTo != table10_validTo) {
-        psError(PS_ERR_UNKNOWN,true,"Member validTo = %d not as expected %d",
-                outTable->validTo, table10_validTo);
-        return 102;
-    }
-    if(strcmp(outTable->filename,table10_filename) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Member filename = %d not as expected %s",
-                outTable->filename,table10_filename);
-        return 103;
-    }
-    if(strcmp(outTable->format,table10_format) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Member format = %d not as expected %s",
-                outTable->format,table10_format);
-        return 104;
-    }
-    psFree(vectors);
-    psFree(inTable);
-
-    // Attempt to import file with file with sorted index vector
-    // Read vectors from file
-    // Allocate valid table, format string and index column
-    inTable = psLookupTableAlloc(tableU8_filename,tableU8_format,tableU8_indexCol);
-    vectors = psVectorsReadFromFile(tableU8_filename,tableU8_format);
-    outTable = psLookupTableImport(inTable,vectors,tableU8_indexCol);
-    if(outTable != inTable) {
-        psError(PS_ERR_UNKNOWN,true,"Did not set proper return value");
-        return 4;
-    }
-    // Verify the index column vector
-    indexVector = outTable->index;
-    for(int i = 0; i < indexVector->n; i++) {
-        if(indexVector->data.S32[i] != tableU8_index[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Index value[%d] = %d is not as expected %d",
-                    i,indexVector->data.S32[i],tableU8_index[i]);
-        }
-    }
-    // Verify the table members are set properly
-    if(outTable->indexCol != tableU8_indexCol) {
-        psError(PS_ERR_UNKNOWN,true,"Member indexCol = %d not as expected %d",
-                outTable->indexCol,tableU8_indexCol);
-        return 100;
-    }
-    if(outTable->validFrom != tableU8_validFrom) {
-        psError(PS_ERR_UNKNOWN,true,"Member validFrom = %d not as expected %d",
-                outTable->validFrom, tableU8_validFrom);
-        return 101;
-    }
-    if(outTable->validTo != tableU8_validTo) {
-        psError(PS_ERR_UNKNOWN,true,"Member validTo = %d not as expected %d",
-                outTable->validTo, tableU8_validTo);
-        return 102;
-    }
-    if(strcmp(outTable->filename,tableU8_filename) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Member filename = %d not as expected %s",
-                outTable->filename,tableU8_filename);
-        return 103;
-    }
-    if(strcmp(outTable->format,tableU8_format) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Member format = %d not as expected %s",
-                outTable->format,tableU8_format);
-        return 104;
-    }
-    psFree(inTable);
-    psFree(vectors);
-
-    return 0;
-}
-
-psS32 testLookupTableRead(void)
-{
-    psLookupTable*  table1  = NULL;
-    long           numRows = 0;
-
-    // Attempt to read table with NULL input table specified
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
-    numRows = psLookupTableRead(table1);
-    if(numRows != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return zero for NULL input table");
-        return 1;
-    }
-
-    // Set up valid table to read
-    table1 = psLookupTableAlloc(tableF32_filename,tableF32_format,tableF32_indexCol);
-    // Read table
-    numRows = psLookupTableRead(table1);
-    // Verify return value equals number of lines read
-    if(numRows != tableF32_size) {
-        psError(PS_ERR_UNKNOWN,true,"Return value %d not as expected %d",
-                numRows,tableF32_size);
-        return 1;
-    }
-    // Verify the members and values in table
-    if(fabs(table1->validFrom - tableF32_validFrom) > errorTol_psF64) {
-        psError(PS_ERR_UNKNOWN,true,"Member validFrom = %f not as expected %f",
-                table1->validFrom,tableF32_validFrom);
-        return 2;
-    }
-    if(fabs(table1->validTo - tableF32_validTo) > errorTol_psF64) {
-        psError(PS_ERR_UNKNOWN,true,"Member validTo = %f not as expected %f",
-                table1->validTo,tableF32_validTo);
-        return 3;
-    }
-    if(strcmp(table1->filename,tableF32_filename) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Member filename %s not as expected %s",
-                table1->filename,tableF32_filename);
-        return 4;
-    }
-    if(strcmp(table1->format,tableF32_format) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Member format %s not as expected %s",
-                table1->format,tableF32_format);
-        return 5;
-    }
-    if(table1->indexCol != tableF32_indexCol) {
-        psError(PS_ERR_UNKNOWN,true,"Member indexCol %d not as expected %d",
-                table1->indexCol,tableF32_indexCol);
-        return 6;
-    }
-    for(psS32 i = 0; i < table1->index->n; i++) {
-        if(fabs(table1->index->data.F32[i]-tableF32_index[i]) > errorTol_psF64) {
-            psError(PS_ERR_UNKNOWN,true,"Index column[%d] = %f not as expected %f",
-                    i,table1->index->data.F32[i],tableF32_index[i]);
-            return i*7;
-        }
-    }
-    psVector* tempVector = table1->values->data[1];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col1[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
-                    i,tempVector->data.S32[i],tableF32_col1[i]);
-            return i*8;
-        }
-    }
-    tempVector = table1->values->data[2];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col2[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
-                    i,tempVector->data.S32[i],tableF32_col2[i]);
-            return i*9;
-        }
-    }
-    tempVector = table1->values->data[3];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S64[i] != tableF32_col3[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %ld not as expected %ld",
-                    i,tempVector->data.S64[i],tableF32_col3[i]);
-            return i*10;
-        }
-    }
-    tempVector = table1->values->data[4];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col4[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
-                    i,tempVector->data.S32[i],tableF32_col4[i]);
-            return i*11;
-        }
-    }
-    tempVector = table1->values->data[5];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col5[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
-                    i,tempVector->data.S32[i],tableF32_col5[i]);
-            return i*12;
-        }
-    }
-    tempVector = table1->values->data[6];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S32[i] != tableF32_col6[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
-                    i,tempVector->data.S32[i],tableF32_col6[i]);
-            return i*13;
-        }
-    }
-    tempVector = table1->values->data[7];
-    for(psS32 i = 0; i < tempVector->n; i++) {
-        if(tempVector->data.S64[i] != tableF32_col7[i]) {
-            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %ld not as expected %ld",
-                    i,tempVector->data.S64[i],tableF32_col7[i]);
-            return i*14;
-        }
-    }
-    psFree(table1);
-
-    // Set up invalid table to read
-    table1 = psLookupTableAlloc(tableF32_filename,tableF32_format,tableF32_indexCol);
-    table1->indexCol = -1;
-    // Read invalid table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid table indexCol");
-    numRows = psLookupTableRead(table1);
-    // Verify the num of rows read is zero
-    if(numRows != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for line read for invalid table");
-        return 15;
-    }
-    psFree(table1);
-
-    return 0;
-}
-
-psS32 testLookupTableInterpolate(void)
-{
-    psLookupTable*  table1 = NULL;
-    psF64            out1 = 0.0;
-
-    // Attempt to perform interpolation with NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
-    out1 = psLookupTableInterpolate(table1,0,0);
-    if( !isnan(out1) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NaN as expected");
-        return 1;
-    }
-
-    // Interpolate values within the list and verify return values
-    table1 = psLookupTableAlloc(table10_filename,table10_format,table10_indexCol);
-    psS32 numLines = psLookupTableRead(table1);
-    if(numLines != table10_size) {
-        psError(PS_ERR_UNKNOWN,true,"Line read %d not as expected %d",numLines,table10_size);
-        return 2;
-    }
-    for(psS32 i = 0; i < table1->values->n; i++ ) {
-        out1 = psLookupTableInterpolate(table1, 5.25, i);
-        if( fabs(out1-interpolVal1[i]) > errorTol_psF64) {
-            psError(PS_ERR_UNKNOWN,true,"Did not return expected value. %lg expected %lg",out1,interpolVal1[i]);
-            return 3*i;
-        }
-    }
-    for(psS32 i = 0; i < table1->values->n; i++ ) {
-        out1 = psLookupTableInterpolate(table1, 5.0, i);
-        if( fabs(out1-interpolVal2[i]) > errorTol_psF64) {
-            psError(PS_ERR_UNKNOWN,true,"Did not return expected value. %lg expected %lg",out1,interpolVal2[i]);
-            return 4*i;
-        }
-    }
-
-    // Interpolate value just below the lowest index value
-    out1 = psLookupTableInterpolate(table1,0,0);
-    if ( fabs(out1- NAN) > FLT_EPSILON ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN returned %lf",out1);
-        return 5;
-    }
-
-    // Interpolate value just above the highest index value
-    out1 = psLookupTableInterpolate(table1,11,0);
-    if ( fabs(out1-NAN) > FLT_EPSILON ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN returned %lf",out1);
-        return 7;
-    }
-
-    // Interpolate value with a column number greater than the table has
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error out of range.");
-    out1 = psLookupTableInterpolate(table1, 5, 100);
-    if ( fabs(out1-NAN) > FLT_EPSILON ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN returned %lf",out1);
-        return 9;
-    }
-    psFree(table1);
-
-    return 0;
-}
-
-psS32 testLookupTableInterpolateAll(void)
-{
-    psLookupTable*  table1 = NULL;
-    psVector*        interpValues;
-
-    // Interpolate values with NULL table
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
-    interpValues = psLookupTableInterpolateAll(table1,5);
-    if(interpValues != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL table");
-        return 5;
-    }
-
-    // Interpolate values within the list and verify return values
-    table1 = psLookupTableAlloc(table10_filename,table10_format,table10_indexCol);
-    psS32 numLines = psLookupTableRead(table1);
-    if(numLines != table10_size) {
-        psError(PS_ERR_UNKNOWN,true,"Num lines read %d not as expected %d",numLines,table10_size);
-        return 6;
-    }
-    interpValues = psLookupTableInterpolateAll(table1,5.25);
-    if(interpValues == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned vector is NULL.");
-        return 1;
-    }
-    for(psS32 i = 0; i < table1->values->n; i++ ) {
-        if( fabs(interpValues->data.F64[i]-interpolVal1[i]) > errorTol_psF64) {
-            psError(PS_ERR_UNKNOWN,true,"Did not return expected value. %lg expected %lg",
-                    interpValues->data.F64[i],interpolVal1[i]);
-            return 2*i;
-        }
-    }
-    psFree(interpValues);
-
-    // Interpolate values with index outside table
-    interpValues = psLookupTableInterpolateAll(table1,0);
-    if(interpValues != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did return NULL");
-        return 4;
-    }
-    psFree(table1);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataIO/verified/tst_psDB.stderr
===================================================================
--- /trunk/psLib/test/dataIO/verified/tst_psDB.stderr	(revision 4546)
+++ 	(revision )
@@ -1,321 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbInit}                                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBInit
-    Following should generate error message for invalid host
-<DATE><TIME>|<HOST>|E|psDBInit (FILE:LINENO)
-    Failed to connect to database.  Error: Unknown MySQL server host 'xxx' (NUM)
-<DATE><TIME>|<HOST>|I|TPDBInit
-    Following should generate error message for NULL database objec
-<DATE><TIME>|<HOST>|E|psDBCleanup (FILE:LINENO)
-    Invalid psDB has been specified.
-
----> TESTPOINT PASSED (psDB{dbInit} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbChange}                                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBChange
-    Following should generate error message for invalid database
-<DATE><TIME>|<HOST>|E|psDBChange (FILE:LINENO)
-    Failed to change database.  Error: Access denied for user ''@'localhost' to database 'abc'
-<DATE><TIME>|<HOST>|I|TPDBChange
-    Following should generate error message for null database object
-<DATE><TIME>|<HOST>|E|psDBChange (FILE:LINENO)
-    Invalid psDB has been specified.
-
----> TESTPOINT PASSED (psDB{dbChange} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbCreateTable}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBCreateTable
-    Following should generate an error message for NULL parameter
-<DATE><TIME>|<HOST>|E|psDBGenerateCreateTableSQL (FILE:LINENO)
-    Create table parameters may not be NULL.
-<DATE><TIME>|<HOST>|E|psDBCreateTable (FILE:LINENO)
-    Query generation failed.
-<DATE><TIME>|<HOST>|I|TPDBCreateTable
-    Following should generate an error message for NULL parameter
-<DATE><TIME>|<HOST>|E|psDBCreateTable (FILE:LINENO)
-    Invalid psDB has been specified.
-
----> TESTPOINT PASSED (psDB{dbCreateTable} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbDropTable}                                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBDropTable
-    psDBDropTable: insert should fail here...
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Failed to prepare query.  Error: Table 'test.table2' doesn't exist
-<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
-    Failed to insert row.
-<DATE><TIME>|<HOST>|I|TPDBDropTable
-    Following should generate an error message for NULL database object
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
-    Failed to drop table.
-<DATE><TIME>|<HOST>|I|TPDBDropTable
-    Following should generate an error message for invalid table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: Unknown table 'table99'
-<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
-    Failed to drop table.
-<DATE><TIME>|<HOST>|I|TPDBDropTable
-    Following should generate an error message for NULL table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(null)' at line 1
-<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
-    Failed to drop table.
-
----> TESTPOINT PASSED (psDB{dbDropTable} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbSelectColumn}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBSelectColumn
-    Following should generate error message for NULL database
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-<DATE><TIME>|<HOST>|I|TPDBSelectColumn
-    Following should generate error message for NULL table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null) LIMIT 10' at line 1
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-<DATE><TIME>|<HOST>|I|TPDBSelectColumn
-    Following should generate error message for invalid table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: Table 'test.table99' doesn't exist
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-<DATE><TIME>|<HOST>|I|TPDBSelectColumn
-    Following should generate error message for invalid column
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: Unknown column 'key_null' in 'field list'
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-
----> TESTPOINT PASSED (psDB{dbSelectColumn} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbSelectColumnNum}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
-    Following should generate an error for NULL database object
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
-    Following should generate an error for NULL table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null) LIMIT 10' at line 1
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
-    Following should generate an error for invalid column
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: Unknown column 'key_999' in 'field list'
-<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
-    Failed to select column.
-<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
-    Following should generate an error for invalid type
-<DATE><TIME>|<HOST>|E|psVectorAlloc (FILE:LINENO)
-    Input psVector is an unsupported type (0x0).
-
----> TESTPOINT PASSED (psDB{dbSelectColumnNum} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbSelectRows}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: Unknown table 'table5'
-<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
-    Failed to drop table.
-<DATE><TIME>|<HOST>|I|TPDBSelectRows
-    Following should generate an error message for NULL database object
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
-    Query execution failed.
-<DATE><TIME>|<HOST>|I|TPDBSelectRows
-    Following should generate an error message for invalid table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null)' at line 1
-<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
-    Query execution failed.
-
----> TESTPOINT PASSED (psDB{dbSelectRows} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbInsertOneRow}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
-    Following should generate error message for NULL database
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
-    Failed to insert row.
-<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
-    Following should generate error message for invalid column item
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Failed to prepare query.  Error: Unknown column 'key_999' in 'field list'
-<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
-    Failed to insert row.
-<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
-    Following should generate error message for invalid table
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Failed to prepare query.  Error: Table 'test.table999' doesn't exist
-<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
-    Failed to insert row.
-<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
-    Following should generate error message for NULL row
-<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
-    Failed to insert row.
-
----> TESTPOINT PASSED (psDB{dbInsertOneRow} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbInsertRows}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBInsertRows
-    Following should generate an error message for NULL database
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|I|TPDBInsertRows
-    Following should generate an error message for NULL table
-<DATE><TIME>|<HOST>|E|psDBGenerateInsertRowSQL (FILE:LINENO)
-    Query generation failed.
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Query generation failed.
-<DATE><TIME>|<HOST>|I|TPDBInsertRows
-    Following should generate an error message for invalid table
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Failed to prepare query.  Error: Table 'test.table999' doesn't exist
-<DATE><TIME>|<HOST>|I|TPDBInsertRows
-    Following should generate an error message for NULL row array
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Failed to insert row.
-<DATE><TIME>|<HOST>|I|TPDBInsertRows
-    Following should generate error message for invalid column item
-<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
-    Failed to prepare query.  Error: Unknown column 'key_999' in 'field list'
-
----> TESTPOINT PASSED (psDB{dbInsertRows} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbDumpRows}                                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBDumpRows
-    Following should generate error message for NULL database
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
-    Query execution failed.
-<DATE><TIME>|<HOST>|I|TPDBDumpRows
-    Following should generate error message for NULL table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null)' at line 1
-<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
-    Query execution failed.
-
----> TESTPOINT PASSED (psDB{dbDumpRows} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbDumpCols}                                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBDumpCols
-    Following should generate an error message for NULL database
-<DATE><TIME>|<HOST>|E|psDBDumpCols (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|I|TPDBDumpCols
-    Following should generate an error message for NULL table
-<DATE><TIME>|<HOST>|E|psDBDumpCols (FILE:LINENO)
-    NULL table specified.
-
----> TESTPOINT PASSED (psDB{dbDumpCols} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbUpdateRows}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBUpdateRows
-    Following should generate an error message for NULL database
-<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|I|TPDBUpdateRows
-    Following should generate an error message for invalid table
-<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
-    Failed to prepare query.  Error: Table 'test.table999' doesn't exist
-<DATE><TIME>|<HOST>|I|TPDBUpdateRows
-    Following should generate an error message for NULL updates
-<DATE><TIME>|<HOST>|E|psDBGenerateUpdateRowSQL (FILE:LINENO)
-    Update row SQL generate fail: values and where params may not be NULL.
-<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
-    Query generation failed.
-<DATE><TIME>|<HOST>|I|TPDBUpdateRows
-    Following should generate an error message for invalid where
-<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
-    Failed to prepare query.  Error: Unknown column 'col999' in 'where clause'
-
----> TESTPOINT PASSED (psDB{dbUpdateRows} | tst_psDB.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psDB.c                                                 *
-*            TestPoint: psDB{dbDeleteRows}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPDBDeleteRows
-    Following should generate error message for NULL database
-<DATE><TIME>|<HOST>|E|psDBDeleteRows (FILE:LINENO)
-    Invalid psDB has been specified.
-<DATE><TIME>|<HOST>|I|TPDBDeleteRows
-    Following should generate error message for invalid table
-<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
-    Failed to execute SQL query.  Error: Table 'test.table999' doesn't exist
-<DATE><TIME>|<HOST>|E|psDBDeleteRows (FILE:LINENO)
-    Delete failed.
-
----> TESTPOINT PASSED (psDB{dbDeleteRows} | tst_psDB.c)
-
Index: unk/psLib/test/dataIO/verified/tst_psFits.stderr
===================================================================
--- /trunk/psLib/test/dataIO/verified/tst_psFits.stderr	(revision 4546)
+++ 	(revision )
@@ -1,216 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsAlloc}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|tst_psFitsAlloc
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psFitsAlloc (FILE:LINENO)
-    Specified filename can not be NULL.
-
----> TESTPOINT PASSED (psImage{psFitsAlloc} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsMoveExtName}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtName (FILE:LINENO)
-    Could not find HDU 'bogus' in file multi.fits.
-    CFITSIO Error: illegal HDU number
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtName (FILE:LINENO)
-    The input psFits object can not NULL.
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtName (FILE:LINENO)
-    Specified extension name can not be NULL.
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
-    Following should generate an error for NULL fits file
-<DATE><TIME>|<HOST>|E|psFitsGetExtName (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsMoveExtName} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsMoveExtNum}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsGetSize (FILE:LINENO)
-    The input psFits object can not NULL.
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
-    Could not move to specified HDU #-1 in file multi.fits.
-    CFITSIO Error: illegal HDU number
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
-    Could not move -1 HDUs from current position in file multi.fits.
-    CFITSIO Error: illegal HDU number
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
-    Could not move to specified HDU #8 in file multi.fits.
-    CFITSIO Error: tried to move past end of file
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
-    Could not move 1 HDUs from current position in file multi.fits.
-    CFITSIO Error: tried to move past end of file
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
-    The input psFits object can not NULL.
-<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
-    Following should generate an error for NULL fits file
-<DATE><TIME>|<HOST>|E|psFitsGetExtNum (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsMoveExtNum} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsReadHeader}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|tst_psFitsReadHeader
-    following should be an error (input psFits = NULL)
-<DATE><TIME>|<HOST>|E|psFitsReadHeader (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsReadHeader} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsReadHeaderSet}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psFitsReadHeaderSet (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsReadHeaderSet} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsReadTable}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psFitsReadTable (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsReadTable} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsReadTableColumnNum}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumnNum (FILE:LINENO)
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsReadTableColumnNum (FILE:LINENO)
-    The input psFits object can not NULL.
-<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumnNum (FILE:LINENO)
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsReadTableColumnNum (FILE:LINENO)
-    Specified column, BOGUS, was not found.
-    CFITSIO Error: named column not found
-
----> TESTPOINT PASSED (psImage{psFitsReadTableColumnNum} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsReadTableColumn}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumn (FILE:LINENO)
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsReadTableColumn (FILE:LINENO)
-    The input psFits object can not NULL.
-<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumn (FILE:LINENO)
-    tst_psFitsReadTableColumn
-<DATE><TIME>|<HOST>|E|psFitsReadTableColumn (FILE:LINENO)
-    Specified column, BOGUS, was not found.
-    CFITSIO Error: named column not found
-
----> TESTPOINT PASSED (psImage{psFitsReadTableColumn} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsUpdateTable}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
-    Following should be a warning.
-<DATE><TIME>|<HOST>|W|psFitsUpdateTable (FILE:LINENO)
-    No column with the name 'BOGUS' exists in the table.
-<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsUpdateTable (FILE:LINENO)
-    The input psFits object can not NULL.
-<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsUpdateTable (FILE:LINENO)
-    The input psImage was NULL.  Need a non-NULL psImage for operation to be performed.
-<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psFitsUpdateTable (FILE:LINENO)
-    Could not write data to file,'table.fits'.
-    CFITSIO Error: bad first row number
-
----> TESTPOINT PASSED (psImage{psFitsUpdateTable} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsReadImage}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRead
-    Following should generate error message for NULL psFits
-<DATE><TIME>|<HOST>|E|psFitsReadImage (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsReadImage} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsWriteImage}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageWrite
-    Following should generate an error message because input image is null.
-<DATE><TIME>|<HOST>|E|psFitsWriteImage (FILE:LINENO)
-    The input psImage was NULL.  Need a non-NULL psImage for operation to be performed.
-
----> TESTPOINT PASSED (psImage{psFitsWriteImage} | tst_psFits.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFits.c                                               *
-*            TestPoint: psImage{psFitsWriteHeader}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psFitsWriteHeader (FILE:LINENO)
-    The input psMetadata was NULL.  Need a non-NULL psMetadata for operation to be performed.
-<DATE><TIME>|<HOST>|E|psFitsWriteHeader (FILE:LINENO)
-    The input psFits object can not NULL.
-
----> TESTPOINT PASSED (psImage{psFitsWriteHeader} | tst_psFits.c)
-
Index: unk/psLib/test/dataIO/verified/tst_psLookupTable_01.stderr
===================================================================
--- /trunk/psLib/test/dataIO/verified/tst_psLookupTable_01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLookupTable_01.c                                     *
-*            TestPoint: psLookupTable{psLookupTableAlloc}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testLookupTableAlloc
-    Following should generate error message for invalid file name
-<DATE><TIME>|<HOST>|E|psLookupTableAlloc (FILE:LINENO)
-    Unallowable operation: fileName is NULL.
-<DATE><TIME>|<HOST>|I|testLookupTableAlloc
-    Following should generate error message for invalid format string
-<DATE><TIME>|<HOST>|E|psLookupTableAlloc (FILE:LINENO)
-    Unallowable operation: format is NULL.
-
----> TESTPOINT PASSED (psLookupTable{psLookupTableAlloc} | tst_psLookupTable_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLookupTable_01.c                                     *
-*            TestPoint: psLookupTable{psVectorsReadFromFile}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
-    Following should generate error message for NULL format
-<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
-    Unallowable operation: format is NULL.
-<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
-    Following should generate error message for NULL filename
-<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
-    Unallowable operation: filename is NULL.
-<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
-    Following should generate error message for invalid format specifier
-<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
-    Invalid format specifier
-<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
-    Format string was not parsed sucessfully
-<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
-    Following should generate error message for non-existant file
-<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
-    Failed to open file verified/nonexistant.dat.
-<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
-    Following should generate error message for error is file
-<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
-    Parsing text file failed.
-
----> TESTPOINT PASSED (psLookupTable{psVectorsReadFromFile} | tst_psLookupTable_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLookupTable_01.c                                     *
-*            TestPoint: psLookupTable{psLookupTableImport}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testLookupTableImport
-    Following should generate error message for NULL table argument
-<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
-    Unallowable operation: table is NULL.
-<DATE><TIME>|<HOST>|I|testLookupTableImport
-    Following should generate error message for NULL vectors
-<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
-    Unallowable operation: vectors is NULL.
-<DATE><TIME>|<HOST>|I|testLookupTableImport
-    Following should generate error message for invalid index column
-<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
-    Index column cannot be less than zero
-
----> TESTPOINT PASSED (psLookupTable{psLookupTableImport} | tst_psLookupTable_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLookupTable_01.c                                     *
-*            TestPoint: psLookupTable{psLookupTableRead}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testLookupTableRead
-    Following should generate an error message for NULL table
-<DATE><TIME>|<HOST>|E|psLookupTableRead (FILE:LINENO)
-    Unallowable operation: table is NULL.
-<DATE><TIME>|<HOST>|I|testLookupTableRead
-    Following should generate error message invalid table indexCol
-<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
-    Index column cannot be less than zero
-
----> TESTPOINT PASSED (psLookupTable{psLookupTableRead} | tst_psLookupTable_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLookupTable_01.c                                     *
-*            TestPoint: psLookupTable{psLookupTableInterpolate}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testLookupTableInterpolate
-    Following should generate error message for invalid table
-<DATE><TIME>|<HOST>|E|psLookupTableInterpolate (FILE:LINENO)
-    Unallowable operation: table is NULL.
-<DATE><TIME>|<HOST>|I|testLookupTableInterpolate
-    Following should generate error out of range.
-<DATE><TIME>|<HOST>|E|psLookupTableInterpolate (FILE:LINENO)
-    Error: column, 100, is out of range.  Must be between 0 and 9.
-
----> TESTPOINT PASSED (psLookupTable{psLookupTableInterpolate} | tst_psLookupTable_01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLookupTable_01.c                                     *
-*            TestPoint: psLookupTable{psLookupTableInterpolateAll}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testLookupTableInterpolateAll
-    Following should generate an error message for NULL table
-<DATE><TIME>|<HOST>|E|psLookupTableInterpolateAll (FILE:LINENO)
-    Unallowable operation: table is NULL.
-
----> TESTPOINT PASSED (psLookupTable{psLookupTableInterpolateAll} | tst_psLookupTable_01.c)
-
Index: unk/psLib/test/dataManip/tst_psFunc00.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc00.c	(revision 4546)
+++ 	(revision )
@@ -1,642 +1,0 @@
-/** tst_Func00.c
-*
-*    This routine must ensure that the psPolynomial structures are
-*    allocated and deallocated by the psPolynomialXXXlloc() procedures.
-*    It also calls the various psPolynomialXXXEval() procedures.
-* 
-*    The F32 and F64 polynomials are tested for all orders (1 - 4) and for
-*    both ordinary and chebyshev polynomials.
-* 
-*    NOTE: This test code requries the stdout file to verify that the results
-*    are good.
-* 
-*    XXX: Modify these tests so that polynomials with a variety of different
-*    orders are created.
-* 
-*    @version $Revision: 1.23 $  $Name: not supported by cvs2svn $
-*    @date $Date: 2005-06-29 03:23:19 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*   
-*****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-// Defines
-#define ORDER    3
-
-static psS32 testPolynomial1DAlloc(void);
-static psS32 testPolynomial2DAlloc(void);
-static psS32 testPolynomial3DAlloc(void);
-static psS32 testPolynomial4DAlloc(void);
-static psS32 testDPolynomial1DAlloc(void);
-static psS32 testDPolynomial2DAlloc(void);
-static psS32 testDPolynomial3DAlloc(void);
-static psS32 testDPolynomial4DAlloc(void);
-
-testDescription tests[] = {
-                              {testPolynomial1DAlloc,578,"psPolynomial1DAlloc",0,false},
-                              {testPolynomial2DAlloc,578,"psPolynomial2DAlloc",0,false},
-                              {testPolynomial3DAlloc,578,"psPolynomial3DAlloc",0,false},
-                              {testPolynomial4DAlloc,578,"psPolynomial4DAlloc",0,false},
-                              {testDPolynomial1DAlloc,579,"psDPolynomial1DAlloc",0,false},
-                              {testDPolynomial2DAlloc,579,"psDPolynomial2DAlloc",0,false},
-                              {testDPolynomial3DAlloc,579,"psDPolynomial3DAlloc",0,false},
-                              {testDPolynomial4DAlloc,579,"psDPolynomial4DAlloc",0,false},
-                              {NULL}
-                          };
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return !runTestSuite(stderr,"psPolynomialXD", tests, argc, argv);
-}
-
-
-// This test will allocate a 1D polynomial and verify the structure allocated
-psS32 testPolynomial1DAlloc(void)
-{
-    psPolynomial1D*  my1DPoly  = NULL;
-
-    // Allocate polynomial
-    my1DPoly = psPolynomial1DAlloc(ORDER,PS_POLYNOMIAL_ORD);
-    // Verify structure allocated
-    if(my1DPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my1DPoly->n != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my1DPoly->n, ORDER);
-        return 2;
-    }
-    if(my1DPoly->type != PS_POLYNOMIAL_ORD) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my1DPoly->type, PS_POLYNOMIAL_ORD);
-        return 3;
-    }
-    for(psS32 i = 0; i < ORDER; i++) {
-        if(my1DPoly->coeff[i] != 0.0) {
-            psError(PS_ERR_UNKNOWN,true,"Coeff[%d] %lg not as expected %lg",
-                    i, my1DPoly->coeff[i], 0.0);
-            return 4;
-        }
-        if(my1DPoly->coeffErr[i] != 0.0) {
-            psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d] %lg not as expected %lg",
-                    i, my1DPoly->coeffErr[i], 0.0);
-            return 5;
-        }
-        if(my1DPoly->mask[i] != 0) {
-            psError(PS_ERR_UNKNOWN,true,"Mask[%d] %d not as expected %d",
-                    i, my1DPoly->mask[i], 0);
-            return 6;
-        }
-    }
-    psFree(my1DPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial1DAlloc(-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 7;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 1D polynomial and verify the structure allocated
-psS32 testDPolynomial1DAlloc(void)
-{
-    psDPolynomial1D*  my1DDPoly  = NULL;
-
-    // Allocate polynomial
-    my1DDPoly = psDPolynomial1DAlloc(ORDER,PS_POLYNOMIAL_CHEB);
-    // Verify structure allocated
-    if(my1DDPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my1DDPoly->n != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my1DDPoly->n, ORDER);
-        return 2;
-    }
-    if(my1DDPoly->type != PS_POLYNOMIAL_CHEB) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my1DDPoly->type, PS_POLYNOMIAL_CHEB);
-        return 3;
-    }
-    for(psS32 i = 0; i < ORDER; i++) {
-        if(my1DDPoly->coeff[i] != 0.0) {
-            psError(PS_ERR_UNKNOWN,true,"Coeff[%d] %lg not as expected %lg",
-                    i, my1DDPoly->coeff[i], 0.0);
-            return 4;
-        }
-        if(my1DDPoly->coeffErr[i] != 0.0) {
-            psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d] %lg not as expected %lg",
-                    i, my1DDPoly->coeffErr[i], 0.0);
-            return 5;
-        }
-        if(my1DDPoly->mask[i] != 0) {
-            psError(PS_ERR_UNKNOWN,true,"Mask[%d] %d not as expected %d",
-                    i, my1DDPoly->mask[i], 0);
-            return 6;
-        }
-    }
-    psFree(my1DDPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial1DAlloc(-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 7;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 2D polynomial and verify the structure allocated
-psS32 testPolynomial2DAlloc(void)
-{
-    psPolynomial2D* my2DPoly = NULL;
-
-    // Allocate polynomial
-    my2DPoly = psPolynomial2DAlloc(ORDER,ORDER+1,PS_POLYNOMIAL_ORD);
-    // Verify structure allocated
-    if(my2DPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my2DPoly->nX != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my2DPoly->nX, ORDER);
-        return 2;
-    }
-    // Verify polynomial structure members set properly
-    if(my2DPoly->nY != ORDER+1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my2DPoly->nY, ORDER+1);
-        return 3;
-    }
-    if(my2DPoly->type != PS_POLYNOMIAL_ORD) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my2DPoly->type, PS_POLYNOMIAL_ORD);
-        return 4;
-    }
-    for(psS32 i = 0; i < ORDER; i++) {
-        for(psS32 j = 0; j < ORDER+1; j++) {
-            if(my2DPoly->coeff[i][j] != 0.0) {
-                psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d] %lg not as expected %lg",
-                        i, j, my2DPoly->coeff[i][j], 0.0);
-                return 5;
-            }
-            if(my2DPoly->coeffErr[i][j] != 0.0) {
-                psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d] %lg not as expected %lg",
-                        i, j, my2DPoly->coeffErr[i][j], 0.0);
-                return 6;
-            }
-            if(my2DPoly->mask[i][j] != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
-                        i, j, my2DPoly->mask[i][j], 0);
-                return 7;
-            }
-        }
-    }
-    psFree(my2DPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial2DAlloc(-1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 8;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial2DAlloc(1,-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 9;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 2D polynomial and verify the structure allocated
-psS32 testDPolynomial2DAlloc(void)
-{
-    psDPolynomial2D* my2DDPoly = NULL;
-
-    // Allocate polynomial
-    my2DDPoly = psDPolynomial2DAlloc(ORDER,ORDER+1,PS_POLYNOMIAL_CHEB);
-    // Verify structure allocated
-    if(my2DDPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my2DDPoly->nX != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my2DDPoly->nX, ORDER);
-        return 2;
-    }
-    // Verify polynomial structure members set properly
-    if(my2DDPoly->nY != ORDER+1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my2DDPoly->nY, ORDER+1);
-        return 3;
-    }
-    if(my2DDPoly->type != PS_POLYNOMIAL_CHEB) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my2DDPoly->type, PS_POLYNOMIAL_ORD);
-        return 4;
-    }
-    for(psS32 i = 0; i < ORDER; i++) {
-        for(psS32 j = 0; j < ORDER+1; j++) {
-            if(my2DDPoly->coeff[i][j] != 0.0) {
-                psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d] %lg not as expected %lg",
-                        i, j, my2DDPoly->coeff[i][j], 0.0);
-                return 5;
-            }
-            if(my2DDPoly->coeffErr[i][j] != 0.0) {
-                psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d] %lg not as expected %lg",
-                        i, j, my2DDPoly->coeffErr[i][j], 0.0);
-                return 6;
-            }
-            if(my2DDPoly->mask[i][j] != 0) {
-                psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
-                        i, j, my2DDPoly->mask[i][j], 0);
-                return 7;
-            }
-        }
-    }
-    psFree(my2DDPoly);
-    /*
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial2DAlloc(-1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 8;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial2DAlloc(1,-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 9;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 3D polynomial and verify the structure allocated
-psS32 testPolynomial3DAlloc(void)
-{
-    psPolynomial3D* my3DPoly = NULL;
-
-    // Allocate polynomial
-    my3DPoly = psPolynomial3DAlloc(ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_ORD);
-    // Verify structure allocated
-    if(my3DPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my3DPoly->nX != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my3DPoly->nX, ORDER);
-        return 2;
-    }
-    // Verify polynomial structure members set properly
-    if(my3DPoly->nY != ORDER+1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my3DPoly->nY, ORDER+1);
-        return 3;
-    }
-    // Verify polynomial structure members set properly
-    if(my3DPoly->nZ != ORDER+2) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my3DPoly->nZ, ORDER+2);
-        return 4;
-    }
-    if(my3DPoly->type != PS_POLYNOMIAL_ORD) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my3DPoly->type, PS_POLYNOMIAL_ORD);
-        return 5;
-    }
-    for(psS32 i = 0; i < ORDER; i++) {
-        for(psS32 j = 0; j < ORDER+1; j++) {
-            for(psS32 k = 0; k < ORDER+2; k++) {
-                if(my3DPoly->coeff[i][j][k] != 0.0) {
-                    psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d] %lg not as expected %lg",
-                            i, j, k, my3DPoly->coeff[i][j][k], 0.0);
-                    return 6;
-                }
-                if(my3DPoly->coeffErr[i][j][k] != 0.0) {
-                    psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d] %lg not as expected %lg",
-                            i, j, k, my3DPoly->coeffErr[i][j][k], 0.0);
-                    return 7;
-                }
-                if(my3DPoly->mask[i][j][k] != 0) {
-                    psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
-                            i, j, k, my3DPoly->mask[i][j][k], 0);
-                    return 8;
-                }
-            }
-        }
-    }
-    psFree(my3DPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial3DAlloc(-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 9;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial3DAlloc(1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 10;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial3DAlloc(1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 11;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 3D polynomial and verify the structure allocated
-psS32 testDPolynomial3DAlloc(void)
-{
-    psDPolynomial3D* my3DDPoly = NULL;
-
-    // Allocate polynomial
-    my3DDPoly = psDPolynomial3DAlloc(ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_CHEB);
-    // Verify structure allocated
-    if(my3DDPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my3DDPoly->nX != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my3DDPoly->nX, ORDER);
-        return 2;
-    }
-    // Verify polynomial structure members set properly
-    if(my3DDPoly->nY != ORDER+1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my3DDPoly->nY, ORDER+1);
-        return 3;
-    }
-    // Verify polynomial structure members set properly
-    if(my3DDPoly->nZ != ORDER+2) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my3DDPoly->nZ, ORDER+2);
-        return 4;
-    }
-    if(my3DDPoly->type != PS_POLYNOMIAL_CHEB) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my3DDPoly->type, PS_POLYNOMIAL_ORD);
-        return 5;
-    }
-    for(psS32 i = 0; i < ORDER; i++) {
-        for(psS32 j = 0; j < ORDER+1; j++) {
-            for(psS32 k = 0; k < ORDER+2; k++) {
-                if(my3DDPoly->coeff[i][j][k] != 0.0) {
-                    psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d] %lg not as expected %lg",
-                            i, j, k, my3DDPoly->coeff[i][j][k], 0.0);
-                    return 6;
-                }
-                if(my3DDPoly->coeffErr[i][j][k] != 0.0) {
-                    psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d] %lg not as expected %lg",
-                            i, j, k, my3DDPoly->coeffErr[i][j][k], 0.0);
-                    return 7;
-                }
-                if(my3DDPoly->mask[i][j][k] != 0) {
-                    psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
-                            i, j, k, my3DDPoly->mask[i][j][k], 0);
-                    return 8;
-                }
-            }
-        }
-    }
-    psFree(my3DDPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial3DAlloc(-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 9;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial3DAlloc(1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 10;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial3DAlloc(1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 11;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 4D polynomial and verify the structure allocated
-psS32 testPolynomial4DAlloc(void)
-{
-    psPolynomial4D* my4DPoly = NULL;
-
-    // Allocate polynomial
-    my4DPoly = psPolynomial4DAlloc(ORDER+3,ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_ORD);
-    // Verify structure allocated
-    if(my4DPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DPoly->nY != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DPoly->nY, ORDER);
-        return 2;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DPoly->nZ != ORDER+1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DPoly->nZ, ORDER+1);
-        return 3;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DPoly->nT != ORDER+2) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DPoly->nT, ORDER+2);
-        return 4;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DPoly->nX != ORDER+3) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DPoly->nX, ORDER+3);
-        return 5;
-    }
-    if(my4DPoly->type != PS_POLYNOMIAL_ORD) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my4DPoly->type, PS_POLYNOMIAL_ORD);
-        return 6;
-    }
-    for(psS32 i = 0; i < ORDER+3; i++) {
-        for(psS32 j = 0; j < ORDER; j++) {
-            for(psS32 k = 0; k < ORDER+1; k++) {
-                for(psS32 l = 0; l < ORDER+2; l++) {
-                    if(my4DPoly->coeff[i][j][k][l] != 0.0) {
-                        psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d][%d] %lg not as expected %lg",
-                                i, j, k, l, my4DPoly->coeff[i][j][k][l], 0.0);
-                        return 7;
-                    }
-                    if(my4DPoly->coeffErr[i][j][k][l] != 0.0) {
-                        psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d][l] %lg not as expected %lg",
-                                i, j, k, l, my4DPoly->coeffErr[i][j][k][l], 0.0);
-                        return 8;
-                    }
-                    if(my4DPoly->mask[i][j][k][l] != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d][%d][%d] %d not as expected %d",
-                                i, j, k, l, my4DPoly->mask[i][j][k][l], 0);
-                        return 9;
-                    }
-                }
-            }
-        }
-    }
-    psFree(my4DPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial4DAlloc(-1,1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 10;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial4DAlloc(1,-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 11;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial4DAlloc(1,1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 12;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psPolynomial4DAlloc(1,1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 13;
-        }
-    */
-    return 0;
-}
-
-// This test will allocate a 4D polynomial and verify the structure allocated
-psS32 testDPolynomial4DAlloc(void)
-{
-    psDPolynomial4D* my4DDPoly = NULL;
-
-    // Allocate polynomial
-    my4DDPoly = psDPolynomial4DAlloc(ORDER+3,ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_ORD);
-    // Verify structure allocated
-    if(my4DDPoly == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
-        return 1;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DDPoly->nY != ORDER) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DDPoly->nY, ORDER);
-        return 2;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DDPoly->nZ != ORDER+1) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DDPoly->nZ, ORDER+1);
-        return 3;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DDPoly->nT != ORDER+2) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DDPoly->nT, ORDER+2);
-        return 4;
-    }
-    // Verify polynomial structure members set properly
-    if(my4DDPoly->nX != ORDER+3) {
-        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
-                my4DDPoly->nX, ORDER+3);
-        return 5;
-    }
-    if(my4DDPoly->type != PS_POLYNOMIAL_ORD) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
-                my4DDPoly->type, PS_POLYNOMIAL_ORD);
-        return 6;
-    }
-    for(psS32 i = 0; i < ORDER+3; i++) {
-        for(psS32 j = 0; j < ORDER; j++) {
-            for(psS32 k = 0; k < ORDER+1; k++) {
-                for(psS32 l = 0; l < ORDER+2; l++) {
-                    if(my4DDPoly->coeff[i][j][k][l] != 0.0) {
-                        psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d][%d] %lg not as expected %lg",
-                                i, j, k, l, my4DDPoly->coeff[i][j][k][l], 0.0);
-                        return 7;
-                    }
-                    if(my4DDPoly->coeffErr[i][j][k][l] != 0.0) {
-                        psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d][l] %lg not as expected %lg",
-                                i, j, k, l, my4DDPoly->coeffErr[i][j][k][l], 0.0);
-                        return 8;
-                    }
-                    if(my4DDPoly->mask[i][j][k][l] != 0) {
-                        psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d][%d][%d] %d not as expected %d",
-                                i, j, k, l, my4DDPoly->mask[i][j][k][l], 0);
-                        return 9;
-                    }
-                }
-            }
-        }
-    }
-    psFree(my4DDPoly);
-
-    /*    // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial4DAlloc(-1,1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 10;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial4DAlloc(1,-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 11;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial4DAlloc(1,1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 12;
-        }
-        // Attempt to allocate with negative order
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
-        if(psDPolynomial4DAlloc(1,1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
-            return 13;
-        }
-    */
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psFunc01.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc01.c	(revision 4546)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psGaussian() shall evaluate a
-    specified Gaussian at some X.
- 
-    It also tests the p_psGaussianDev() procedure.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psFunctions.h"
-#define MY_MEAN 30.0
-#define MY_STDEV 2.0
-#define N 30
-psS32 main()
-{
-    psS32 testStatus = true;
-    float x = 0.0;
-    psS32  memLeaks;
-    psS32  currentId = psMemGetId();
-    psVector *myGaussData = NULL;
-    printPositiveTestHeader(stdout,
-                            "psFunctions functions",
-                            "psGaussian()");
-
-
-    for (x = 0.0 ; x < (MY_MEAN * 2.0) ; x+= 1.0) {
-        printf("normal psGaussian(%f) is %f\n", x, psGaussian(x, MY_MEAN, MY_STDEV, true));
-        x = x + 1.0;
-    }
-
-    for (x = 0.0 ; x < (MY_MEAN * 2.0) ; x+= 1.0) {
-        printf("NON-normal psGaussian(%f) is %f\n", x, psGaussian(x, MY_MEAN, MY_STDEV, false));
-        x = x + 1.0;
-    }
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psGaussian()",
-                testStatus);
-
-
-    printPositiveTestHeader(stdout,
-                            "psFunctions functions",
-                            "p_psGaussianDev()");
-
-    myGaussData = p_psGaussianDev(MY_MEAN, MY_STDEV, N);
-    for (psS32 i = 0; i < N ; i++) {
-        printf("Gaussian Deviate [%d] is %f\n", i, myGaussData->data.F32[i]);
-    }
-
-    if ( myGaussData->type.type != PS_TYPE_F32) {
-        psAbort(__func__,"p_psGaussianDev did not return a vector of type F32");
-    }
-
-    psFree(myGaussData);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "p_psGaussianDev()",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psFunc02.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc02.c	(revision 4546)
+++ 	(revision )
@@ -1,446 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psSpline1DAlloc() function properly
-    allocates the spline data structure.  It allocates both linear and cubic
-    splines with a variety of min/max ranges.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psFunctions.h"
-
-#define N 4
-#define LINEAR 1
-#define CUBIC 3
-
-psS32 main()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32 i;
-    psS32  currentId = psMemGetId();
-    psSpline1D *tmpSpline;
-    psVector* bounds;
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(): linear, normal");
-
-    tmpSpline = psSpline1DAlloc(N, LINEAR, 1.0, 10.0);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != LINEAR+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
-               tmpSpline->knots->data.F32[i]);
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(): linear, normal",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(): linear, min/max are equal");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    tmpSpline = psSpline1DAlloc(N, LINEAR, 1.0, 1.0);
-
-    if (tmpSpline != NULL) {
-        printf("ERROR: allocated psSpline1D data structure when min==max\n");
-        testStatus = false;
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(): linear, min/max are equal",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(): linear, min > max.");
-
-    tmpSpline = psSpline1DAlloc(N, LINEAR, 1.0, -1.0);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != LINEAR+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
-               tmpSpline->knots->data.F32[i]);
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(): linear, min > max.",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(), cubic, normal");
-
-    tmpSpline = psSpline1DAlloc(N, CUBIC, 1.0, 10.0);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != CUBIC+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        printf("psSpline1D->data.F32[%d] is %f\n", i,
-               tmpSpline->knots->data.F32[i]);
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(): cubic, normal",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(): cubic, min/max are equal");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    tmpSpline = psSpline1DAlloc(N, CUBIC, 1.0, 1.0);
-
-    if (tmpSpline != NULL) {
-        printf("ERROR: allocated psSpline1D data structure when min==max\n");
-        testStatus = false;
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(): cubic, min/max are equal",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(): cubic, min > max.");
-
-    tmpSpline = psSpline1DAlloc(N, CUBIC, 1.0, -1.0);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != CUBIC+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
-               tmpSpline->knots->data.F32[i]);
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(): cubic, min > max.",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAllocGeneric(): linear, normal");
-
-    bounds = psVectorAlloc(5,PS_TYPE_F32);
-    bounds->n = bounds->nalloc;
-    for(psU32 n = 0; n < 5; n++ ) {
-        bounds->data.F32[n] = (n+1) * 2;
-    }
-    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != LINEAR+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
-               tmpSpline->knots->data.F32[i]);
-    }
-    psFree(bounds);
-    psFree(tmpSpline);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
-        testStatus = false;
-    }
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAllocGeneric(): linear, normal",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    ///XXX: REMOVED FOLLOWING TEST AFTER CHANGING TO UNSIGNED INT///
-    /*    testStatus = true;
-        printPositiveTestHeader(stdout,
-                                "psFunction functions",
-                                "psSpline1DAllocGeneric(): negative order");
-     
-        bounds = psVectorAlloc(5,PS_TYPE_F32);
-        bounds->n = bounds->nalloc;
-        for(psU32 n = 0; n < 5; n++ ) {
-            bounds->data.F32[n] = (n+1) * 2;
-        }
-        psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-        tmpSpline = psSpline1DAllocGeneric(bounds, -1);
-        if (tmpSpline != NULL) {
-            psError(PS_ERR_UNKNOWN,true,"Did not return null for negative order");
-            return 10;
-        }
-        psFree(bounds);
-        psMemCheckCorruption(1);
-        memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-        if (0 != memLeaks) {
-            psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
-            testStatus = false;
-        }
-        printFooter(stdout,
-                    "psFunctions functions",
-                    "psSpline1DAllocGeneric(): negative order",
-                    testStatus);
-    */
-    psFree(bounds);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAllocGeneric(): bound equal to NULL");
-
-    bounds = NULL;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
-    if (tmpSpline != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null for bounds equal to NULL");
-        return 20;
-    }
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
-        testStatus = false;
-    }
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAllocGeneric(): bound equal to NULL",
-                testStatus);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAllocGeneric(): bounds with zero elements");
-
-    bounds = psVectorAlloc(5,PS_TYPE_F32);
-    bounds->n = 0;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
-    if (tmpSpline != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return null for negative order");
-        return 30;
-    }
-    psFree(bounds);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
-        testStatus = false;
-    }
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAllocGeneric(): bounds with zero elements",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psFunc03.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc03.c	(revision 4546)
+++ 	(revision )
@@ -1,150 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psSpline1DAllocGeneric() function properly
-    allocates the spline data structure.
- 
-    XXX: test bounds?
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psFunctions.h"
-
-#define N 10
-#define LINEAR 1
-#define CUBIC 3
-
-psS32 main()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32 i;
-    psS32  currentId = psMemGetId();
-    psSpline1D *tmpSpline;
-    psVector *bounds;
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAllocGeneric(): linear");
-    bounds = psVectorAlloc(N+1, PS_TYPE_F32);
-    for (i=0;i<N+1;i++) {
-        bounds->data.F32[i] = (float) (3 * i);
-    }
-
-    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != LINEAR+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        if (tmpSpline->knots->data.F32[i] != bounds->data.F32[i]) {
-            printf("ERROR: psSpline1D->knots->data.F32[%d] is %f\n", i,
-                   tmpSpline->knots->data.F32[i]);
-        }
-    }
-
-    psFree(tmpSpline);
-    psFree(bounds);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAllocGeneric(): linear",
-                testStatus);
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAllocGeneric(): cubic");
-    bounds = psVectorAlloc(N+1, PS_TYPE_F32);
-    for (i=0;i<N+1;i++) {
-        bounds->data.F32[i] = (float) (3 * i);
-    }
-
-    tmpSpline = psSpline1DAllocGeneric(bounds, CUBIC);
-    if (tmpSpline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D data structure\n");
-        testStatus = false;
-    }
-    if (tmpSpline->spline == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
-        testStatus = false;
-    }
-
-    if (tmpSpline->n != N) {
-        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
-        testStatus = false;
-    }
-
-    for (i=0;i<N;i++) {
-        if (tmpSpline->spline[i] == NULL) {
-            printf("ERROR: Could not allocate spline %d\n", i);
-            testStatus = false;
-        }
-        if ((tmpSpline->spline[i])->n != CUBIC+1) {
-            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
-            testStatus = false;
-        }
-    }
-
-    if (tmpSpline->knots == NULL) {
-        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
-        testStatus = false;
-    }
-
-    for (i=0;i<N+1;i++) {
-        if (tmpSpline->knots->data.F32[i] != bounds->data.F32[i]) {
-            printf("ERROR: psSpline1D->knots->data.F32[%d] is %f\n", i,
-                   tmpSpline->knots->data.F32[i]);
-        }
-    }
-
-    psFree(tmpSpline);
-    psFree(bounds);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAllocGeneric(): cubic",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psFunc04.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc04.c	(revision 4546)
+++ 	(revision )
@@ -1,133 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psSpline1DEval() function works
-    properly.  It creates a spline with psSpline1DAlloc(), creates a set of
-    data values, sets the spline polynomials with psVectorFitSpline1D(), then
-    calls psSpline1DEval() on new data values and ensures that the results
-    are correct.
- 
-    XXX: figure out the memory deallocator
- *****************************************************************************/
-#include <stdio.h>
-#include <math.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psFunctions.h"
-
-#define N 8
-
-psS32 t00()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32 i;
-    float x;
-    float y;
-    psS32  currentId = psMemGetId();
-    psSpline1D *tmpSpline;
-    psVector *data;
-
-    psTraceSetLevel(".", 0);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc()");
-    data = psVectorAlloc(N+1, PS_TYPE_F32);
-    tmpSpline = psSpline1DAlloc(N, 1, 1.0, 10.0);
-
-    for (i=0;i<N+1;i++) {
-        data->data.F32[i] = tmpSpline->knots->data.F32[i];
-    }
-    psVectorFitSpline1D(tmpSpline, data, data, NULL);
-
-    for (i=0;i<N+1;i++) {
-        x = 0.5 + (float) i+1;
-        y = psSpline1DEval(
-                tmpSpline,
-                x
-            );
-        if (fabs(x-y) > FLT_EPSILON) {
-            printf("ERROR: f(%f) is %f\n", x, y);
-            testStatus = true;
-        }
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    psFree(data);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc()",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t01()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32 i;
-    float x;
-    float y;
-    psS32  currentId = psMemGetId();
-    psSpline1D *tmpSpline;
-    psVector *data;
-
-    psTraceSetLevel(".", 0);
-
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc()");
-    data = psVectorAlloc(N+1, PS_TYPE_F32);
-    tmpSpline = psSpline1DAlloc(N, 1, 1.0, 10.0);
-
-    for (i=0;i<N+1;i++) {
-        data->data.F32[i] = tmpSpline->knots->data.F32[i];
-    }
-    psVectorFitSpline1D(tmpSpline, data, data, NULL);
-
-    for (i=0;i<N+1;i++) {
-        x = 0.5 + (float) i+1;
-        y = psSpline1DEval(
-                tmpSpline,
-                x
-            );
-        if (fabs(x-y) > FLT_EPSILON) {
-            printf("ERROR: f(%f) is %f\n", x, y);
-            testStatus = true;
-        }
-    }
-
-    psFree(tmpSpline);
-    psMemCheckCorruption(1);
-    psFree(data);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc()",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    t00();
-    //    t01();
-}
Index: unk/psLib/test/dataManip/tst_psFunc05.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc05.c	(revision 4546)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psSpline1DEvalVector() function works
-    properly.  It creates a spline with psSpline1DAlloc(), (1-D functions
-    are used for the spline polynomials) creates a set of data values, sets
-    the spline polynomials with psVectorFitSpline1D(), then calls
-    psSpline1DEvalVector() on new data values and ensures that the results
-    are correct.
- 
-    XXX: Only F32 types are tested here.  F64 types are tested elsewhere.
- *****************************************************************************/
-#include <stdio.h>
-#include <math.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psFunctions.h"
-#define N 8
-#define SPLINE_ORDER 1
-
-psS32 main()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32 i;
-    psS32  currentId = psMemGetId();
-    psSpline1D *tmpSpline;
-    psVector *data;
-    psVector *x;
-    psVector *y;
-
-    psTraceSetLevel(".", 0);
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc()");
-    data = psVectorAlloc(N+1, PS_TYPE_F32);
-    x = psVectorAlloc(N+1, PS_TYPE_F32);
-    tmpSpline = psSpline1DAlloc(N, SPLINE_ORDER, 1.0, 10.0);
-
-    for (i=0;i<N+1;i++) {
-        data->data.F32[i] = tmpSpline->knots->data.F32[i];
-    }
-
-    psVectorFitSpline1D(tmpSpline, data, data, NULL);
-
-    for (i=0;i<N+1;i++) {
-        x->data.F32[i] = 0.5 + (float) i+1;
-    }
-
-    y = psSpline1DEvalVector(
-            tmpSpline,
-            x
-        );
-
-    for (i=0;i<N+1;i++) {
-        if (fabs(x->data.F32[i]-y->data.F32[i]) > FLT_EPSILON) {
-            printf("ERROR: f(%f) is %f\n", x->data.F32[i], y->data.F32[i]);
-            testStatus = true;
-        }
-    }
-
-    psFree(tmpSpline);
-
-    psFree(x);
-    psFree(y);
-    psFree(data);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc()",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psFunc07.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc07.c	(revision 4546)
+++ 	(revision )
@@ -1,181 +1,0 @@
-/*****************************************************************************
-This routine must ensure that the psVectorFitSpline1D() function works
-properly.  It creates a spline with psSpline1DAlloc(), creates a set of data
-values, sets the spline polynomials with psVectorFitSpline1D(), then calls
-psSpline1DEval() on new data values and ensures that the results are correct.
- 
-F32 and F64 versions are used here.
- 
-XXX: The spline eval functions are F32 only, while the spline fit functions
-are F32 and F64.
- *****************************************************************************/
-#include <stdio.h>
-#include <math.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psFunctions.h"
-
-#define NUM_SPLINES 50
-#define A 4.0
-#define B -3.0
-#define C 0.2
-#define D 0.1
-#define MIN 1.0
-#define MAX 30
-#define ERROR_TOLERANCE 0.10
-#define OFFSET (NUM_SPLINES * ERROR_TOLERANCE)
-
-float myFunc(float x)
-{
-    return(A + x * (B + x * (C + x * (D))));
-}
-
-psS32 t00()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32  currentId = psMemGetId();
-    psS32 i;
-    psSpline1D *tmpSpline = NULL;
-    psVector *x = NULL;
-    psVector *newX = NULL;
-    psVector *y = NULL;
-    psVector *newY = NULL;
-
-    psTraceSetLevel(".", 0);
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    x = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F32);
-    newX = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F32);
-    y = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F32);
-    tmpSpline = psSpline1DAlloc(NUM_SPLINES, 3, MIN, MAX);
-
-    for (i=0;i<NUM_SPLINES+1;i++) {
-        x->data.F32[i] = tmpSpline->knots->data.F32[i];
-        y->data.F32[i] = myFunc(x->data.F32[i]);
-    }
-
-    for (i=0;i<NUM_SPLINES;i++) {
-        newX->data.F32[i]= ((x->data.F32[i] + x->data.F32[i+1])/2.0);
-    }
-    newX->data.F32[NUM_SPLINES] = x->data.F32[NUM_SPLINES];
-    /****************************************************************************/
-    /*   psLib Code      */
-    /****************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F32 versions");
-
-    psVectorFitSpline1D(tmpSpline, x, y, NULL);
-    newY = psSpline1DEvalVector(
-               tmpSpline,
-               newX
-           );
-
-    for (i=OFFSET;i<NUM_SPLINES-OFFSET+1;i++) {
-        if ( fabs( newY->data.F32[i] - myFunc(newX->data.F32[i]) ) > fabs( ERROR_TOLERANCE * myFunc(newX->data.F32[i]) ) ) {
-            printf("ERROR[%d]: f(%f) is %f.  Should be %f\n", i,
-                   newX->data.F32[i], newY->data.F32[i], myFunc(newX->data.F32[i]));
-            testStatus = false;
-        }
-    }
-
-    psFree(x);
-    psFree(newX);
-    psFree(y);
-    psFree(tmpSpline);
-    psFree(newY);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F32 versions",
-                testStatus);
-
-    return (!testStatus);
-}
-
-// This is the F64 version of the above test code.
-psS32 t01()
-{
-    psS32 testStatus = true;
-    psS32 memLeaks=0;
-    psS32  currentId = psMemGetId();
-    psS32 i;
-    psSpline1D *tmpSpline = NULL;
-    psVector *x = NULL;
-    psVector *newX = NULL;
-    psVector *y = NULL;
-    psVector *newY = NULL;
-
-    psTraceSetLevel(".", 0);
-    /****************************************************************************/
-    /****************************************************************************/
-    testStatus = true;
-    x = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F64);
-    newX = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F64);
-    y = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F64);
-    tmpSpline = psSpline1DAlloc(NUM_SPLINES, 3, MIN, MAX);
-
-    for (i=0;i<NUM_SPLINES+1;i++) {
-        x->data.F64[i] = tmpSpline->knots->data.F32[i];
-        y->data.F64[i] = myFunc(x->data.F64[i]);
-    }
-
-    for (i=0;i<NUM_SPLINES;i++) {
-        newX->data.F64[i]= ((x->data.F64[i] + x->data.F64[i+1])/2.0);
-    }
-    newX->data.F64[NUM_SPLINES] = x->data.F64[NUM_SPLINES];
-    /****************************************************************************/
-    /*   psLib Code      */
-    /****************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psFunction functions",
-                            "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F64 versions");
-
-    psVectorFitSpline1D(tmpSpline, x, y, NULL);
-    newY = psSpline1DEvalVector(
-               tmpSpline,
-               newX
-           );
-
-    for (i=OFFSET;i<NUM_SPLINES-OFFSET+1;i++) {
-        if ( fabs( newY->data.F32[i] - myFunc(newX->data.F64[i]) ) > fabs( ERROR_TOLERANCE * myFunc((float)newX->data.F64[i]) ) ) {
-            printf("ERROR[%d]: f(%f) is %f.  Should be %f\n", i,
-                   newX->data.F64[i], newY->data.F32[i], myFunc((float)newX->data.F64[i]));
-            testStatus = false;
-        }
-    }
-
-    psFree(x);
-    psFree(newX);
-    psFree(y);
-    psFree(tmpSpline);
-    psFree(newY);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psFunctions functions",
-                "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F64 versions",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    //    t00();
-    t01();
-}
Index: unk/psLib/test/dataManip/tst_psFunc08.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc08.c	(revision 4546)
+++ 	(revision )
@@ -1,334 +1,0 @@
-/** tst_psFunc08.c
-*
-*  This test driver will exercise the psPolynomialXDEval functions for both
-*  ORD and CHEB type polynomials.
-*
-*  @version  $Revision: 1.3 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-05-19 22:50:05 $
-*
-*  XXX: Probably should test single- and multi-dimensional polynomials in
-*  which one diminsion is constant (n == 1).
-*
-* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*
-***************************************************************************/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define  TERMS        4
-#define  TESTPOINTS   5
-#define  ERROR_TOL    0.001
-
-static psS32 testPoly1DEval(void);
-static psS32 testDPoly1DEval(void);
-static psS32 testPoly1DEvalVector(void);
-static psS32 testDPoly1DEvalVector(void);
-
-testDescription tests[] = {
-                              {testPoly1DEval,000,"psPolynomial1DEval",0,false},
-                              {testDPoly1DEval,000,"psDPolynomial1DEval",0,false},
-                              {testPoly1DEvalVector,000,"psPolynomial1DEvalVector",0,false},
-                              {testDPoly1DEvalVector,000,"psDPolynomial1DEvalVector",0,false},
-                              {NULL}
-                          };
-
-psF32 poly1DCoeff[TERMS]        = { -4.3, 2.3, -3.2, 1.9};
-psF64 Dpoly1DCoeff[TERMS]        = { -4.3, 2.3, -3.2, 1.9};
-psF32 poly1DMask[TERMS]         = {    0,   0,    1,   0  };
-
-psF32 poly1DXValue[TESTPOINTS]   = { 2.550000,    -9.8000,   0.00134,   -12.2500,   0.000};
-psF64 Dpoly1DXValue[TESTPOINTS]  = { 2.550000,    -9.8000,   0.00134,   -12.2500,   0.000};
-psF32 poly1DXResult[TESTPOINTS]  = {33.069613, -1815.1048, -4.296918, -3525.1797, -4.3000};
-psF64 Dpoly1DXResult[TESTPOINTS] = {33.069613, -1815.1048, -4.296918, -3525.1797, -4.3000};
-
-psF32 poly1DXChebValue[TESTPOINTS]   = { -0.99,    -0.33,     0.125,    0.564,    0.875};
-psF64 Dpoly1DXChebValue[TESTPOINTS]  = { -0.99,    -0.33,     0.125,    0.564,    0.875};
-psF32 poly1DXChebResult[TESTPOINTS]  = { -1.401196, 1.016252, 0.257813, 0.089625, 1.429688};
-psF64 Dpoly1DXChebResult[TESTPOINTS] = { -1.401196, 1.016252, 0.257813, 0.089625, 1.429688};
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testPoly1DEval(void)
-{
-    psF32  result;
-    psF32  resultCheb;
-
-    // Allocate polynomial structure
-    psPolynomial1D*  polyOrd = psPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_ORD);
-    psPolynomial1D*  polyCheb = psPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        polyOrd->coeff[i] = poly1DCoeff[i];
-        polyOrd->mask[i]  = poly1DMask[i];
-        polyCheb->coeff[i] = 1.0;
-        polyCheb->mask[i]  = poly1DMask[i];
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psPolynomial1DEval(polyOrd,poly1DXValue[i]);
-        if(fabs(poly1DXResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
-                    result, poly1DXResult[i]);
-            return i;
-        }
-        resultCheb = psPolynomial1DEval(polyCheb,poly1DXChebValue[i]);
-        if(fabs(poly1DXChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, poly1DXChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psPolynomial1DAlloc(TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psPolynomial1DEval(polyOrd,0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testDPoly1DEval(void)
-{
-    psF64  result;
-    psF64  resultCheb;
-
-    // Allocate polynomial structure
-    psDPolynomial1D*  polyOrd = psDPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_ORD);
-    psDPolynomial1D*  polyCheb = psDPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        polyOrd->coeff[i] = Dpoly1DCoeff[i];
-        polyOrd->mask[i]  = poly1DMask[i];
-        polyCheb->coeff[i] = 1.0;
-        polyCheb->mask[i]  = poly1DMask[i];
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psDPolynomial1DEval(polyOrd,Dpoly1DXValue[i]);
-        if(fabs(Dpoly1DXResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
-                    result, Dpoly1DXResult[i]);
-            return i;
-        }
-        resultCheb = psDPolynomial1DEval(polyCheb,Dpoly1DXChebValue[i]);
-        if(fabs(Dpoly1DXChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, Dpoly1DXChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psDPolynomial1DAlloc(TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psDPolynomial1DEval(polyOrd,0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-psS32 testPoly1DEvalVector(void)
-{
-    // Allocate polynomial
-    psPolynomial1D* polyOrd = psPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_ORD);
-    psPolynomial1D* polyCheb = psPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        polyOrd->coeff[i] = poly1DCoeff[i];
-        polyOrd->mask[i]  = poly1DMask[i];
-        polyCheb->coeff[i] = 1.0;
-        polyCheb->mask[i]  = poly1DMask[i];
-    }
-
-    // Create input vectors
-    psVector* inputOrd = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputCheb = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrd->data.F32[i] = poly1DXValue[i];
-        inputCheb->data.F32[i] = poly1DXChebValue[i];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psPolynomial1DEvalVector(polyOrd, inputOrd);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F32);
-        return 2;
-    }
-    psVector* outputCheb = psPolynomial1DEvalVector(polyCheb, inputCheb);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F32);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(poly1DXResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
-                    i, outputOrd->data.F32[i], poly1DXResult[i]);
-            return i*5;
-        }
-        if(fabs(poly1DXChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
-                    i, outputCheb->data.F32[i], poly1DXChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psPolynomial1DEvalVector(NULL, inputOrd) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial1DEvalVector(polyOrd,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrd->type.type = PS_TYPE_U8;
-    if(psPolynomial1DEvalVector(polyOrd,inputOrd) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 62;
-    }
-    inputOrd->type.type = PS_TYPE_F32;
-
-    psFree(inputOrd);
-    psFree(inputCheb);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
-psS32 testDPoly1DEvalVector(void)
-{
-    // Allocate polynomial
-    psDPolynomial1D* polyOrd = psDPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_ORD);
-    psDPolynomial1D* polyCheb = psDPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        polyOrd->coeff[i] = poly1DCoeff[i];
-        polyOrd->mask[i]  = poly1DMask[i];
-        polyCheb->coeff[i] = 1.0;
-        polyCheb->mask[i]  = poly1DMask[i];
-    }
-
-    // Create input vectors
-    psVector* inputOrd = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputCheb = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrd->data.F64[i] = poly1DXValue[i];
-        inputCheb->data.F64[i] = poly1DXChebValue[i];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psDPolynomial1DEvalVector(polyOrd, inputOrd);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F64);
-        return 2;
-    }
-    psVector* outputCheb = psDPolynomial1DEvalVector(polyCheb, inputCheb);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F64);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(poly1DXResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
-                    i, outputOrd->data.F64[i], poly1DXResult[i]);
-            return i*5;
-        }
-        if(fabs(poly1DXChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
-                    i, outputCheb->data.F64[i], poly1DXChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psDPolynomial1DEvalVector(NULL, inputOrd) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial1DEvalVector(polyOrd,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrd->type.type = PS_TYPE_U8;
-    if(psDPolynomial1DEvalVector(polyOrd,inputOrd) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 62;
-    }
-    inputOrd->type.type = PS_TYPE_F64;
-
-    psFree(inputOrd);
-    psFree(inputCheb);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psFunc09.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc09.c	(revision 4546)
+++ 	(revision )
@@ -1,411 +1,0 @@
-/** tst_psFunc09.c
-*
-*  This test driver will exercise the psPolynomialXDEval functions for both
-*  ORD and CHEB type polynomials.
-*
-*  @version  $Revision: 1.2 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:42 $
-*
-* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*
-***************************************************************************/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define  TERMS        4
-#define  TESTPOINTS   5
-#define  ERROR_TOL    0.001
-
-static psS32 testPoly2DEval(void);
-static psS32 testDPoly2DEval(void);
-static psS32 testPoly2DEvalVector(void);
-static psS32 testDPoly2DEvalVector(void);
-
-testDescription tests[] = {
-                              {testPoly2DEval,583,"psPolynomial2DEval",0,false},
-                              {testDPoly2DEval,582,"psDPolynomial2DEval",0,false},
-                              {testPoly2DEvalVector,000,"psPolynomial2DEvalVector",0,false},
-                              {testDPoly2DEvalVector,000,"psDPolynomial2DEvalVector",0,false},
-                              {NULL}
-                          };
-
-psF32 poly2DCoeff[TERMS][TERMS]   = {  { -4.3,  2.3, -3.2,  1.9},
-                                       {  1.2,  0.7, -0.3,  1.3},
-                                       {  0.4, -2.9,  0.8, -3.1},
-                                       { -1.1,  2.1,  1.9,  0.6}
-                                    };
-psF64 Dpoly2DCoeff[TERMS][TERMS]  = {  { -4.3,  2.3, -3.2,  1.9},
-                                       {  1.2,  0.7, -0.3,  1.3},
-                                       {  0.4, -2.9,  0.8, -3.1},
-                                       { -1.1,  2.1,  1.9,  0.6}
-                                    };
-psF32 poly2DMask[TERMS][TERMS]    = {  {  0,    0,    0,    1},
-                                       {  0,    0,    1,    0},
-                                       {  1,    0,    0,    0},
-                                       {  0,    0,    0,    1}
-                                    };
-
-psF32 poly2DXYValue[TESTPOINTS][2] = {  {  1.40,  0.55},
-                                        { -0.55,  1.40},
-                                        {  0.00,  2.34},
-                                        { -0.88,  0.00},
-                                        {  3.45, -0.78}
-                                     };
-psF32 Dpoly2DXYValue[TESTPOINTS][2] = {  {  1.40,  0.55},
-                                      { -0.55,  1.40},
-                                      {  0.00,  2.34},
-                                      { -0.88,  0.00},
-                                      {  3.45, -0.78}
-                                      };
-psF32 poly2DResult[TESTPOINTS] = {  -3.415938, -14.765687, -16.43992, -4.606381, -22.650702 };
-psF64 Dpoly2DResult[TESTPOINTS] = {  -3.415938, -14.765687, -16.43992, -4.606381, -22.650702 };
-
-psF32 poly2DXYChebValue[TESTPOINTS][2] = {  {  0.500,  0.500},
-        {  0.000,  0.250},
-        { -0.250,  0.000},
-        {  0.990,  0.150},
-        {  0.333, -0.666}
-                                         };
-psF32 Dpoly2DXYChebValue[TESTPOINTS][2] = {  {  0.500,  0.500},
-        {  0.000,  0.250},
-        { -0.250,  0.000},
-        {  0.990,  0.150},
-        {  0.333, -0.666}
-                                          };
-psF32 poly2DChebResult[TESTPOINTS] = {  0.750000, 1.687500, 0.625000, -0.113040, 0.386786 };
-psF32 Dpoly2DChebResult[TESTPOINTS] = {  0.750000, 1.687500, 0.625000, -0.113040, 0.386786 };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testPoly2DEval(void)
-{
-    psF32  result;
-    psF32  resultCheb;
-
-    // Allocate polynomial structure
-    psPolynomial2D*  polyOrd = psPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_ORD);
-    psPolynomial2D*  polyCheb = psPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
-            polyOrd->mask[i][j]  = poly2DMask[i][j];
-            polyCheb->coeff[i][j] = 1.0;
-            polyCheb->mask[i][j]  = poly2DMask[i][j];
-        }
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psPolynomial2DEval(polyOrd,poly2DXYValue[i][0],poly2DXYValue[i][1]);
-        if(fabs(poly2DResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
-                    result, poly2DResult[i]);
-            return i;
-        }
-        resultCheb = psPolynomial2DEval(polyCheb,poly2DXYChebValue[i][0], poly2DXYChebValue[i][1]);
-        if(fabs(poly2DChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, poly2DChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psPolynomial2DAlloc(TERMS, TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psPolynomial2DEval(polyOrd,0.0, 0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testDPoly2DEval(void)
-{
-    psF64  result;
-    psF64  resultCheb;
-
-    // Allocate polynomial structure
-    psDPolynomial2D*  polyOrd = psDPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_ORD);
-    psDPolynomial2D*  polyCheb = psDPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
-            polyOrd->mask[i][j]  = poly2DMask[i][j];
-            polyCheb->coeff[i][j] = 1.0;
-            polyCheb->mask[i][j]  = poly2DMask[i][j];
-        }
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psDPolynomial2DEval(polyOrd,Dpoly2DXYValue[i][0],Dpoly2DXYValue[i][1]);
-        if(fabs(Dpoly2DResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
-                    result, Dpoly2DResult[i]);
-            return i;
-        }
-        resultCheb = psDPolynomial2DEval(polyCheb,Dpoly2DXYChebValue[i][0],Dpoly2DXYChebValue[i][1]);
-        if(fabs(Dpoly2DChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, Dpoly2DChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psDPolynomial2DAlloc(TERMS, TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psDPolynomial2DEval(polyOrd,0.0, 0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-psS32 testPoly2DEvalVector(void)
-{
-    // Allocate polynomial
-    psPolynomial2D* polyOrd = psPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psPolynomial2D* polyCheb = psPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
-            polyOrd->mask[i][j]  = poly2DMask[i][j];
-            polyCheb->coeff[i][j] = 1.0;
-            polyCheb->mask[i][j]  = poly2DMask[i][j];
-        }
-    }
-
-    // Create input vectors
-    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrdX->data.F32[i] = poly2DXYValue[i][0];
-        inputOrdY->data.F32[i] = poly2DXYValue[i][1];
-        inputChebX->data.F32[i] = poly2DXYChebValue[i][0];
-        inputChebY->data.F32[i] = poly2DXYChebValue[i][1];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psPolynomial2DEvalVector(polyOrd, inputOrdX, inputOrdY);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F32);
-        return 2;
-    }
-    psVector* outputCheb = psPolynomial2DEvalVector(polyCheb, inputChebX, inputChebY);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F32);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(poly2DResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
-                    i, outputOrd->data.F32[i], poly2DResult[i]);
-            return i*5;
-        }
-        if(fabs(poly2DChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
-                    i, outputCheb->data.F32[i], poly2DChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psPolynomial2DEvalVector(NULL, inputOrdX, inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial2DEvalVector(polyOrd,NULL, inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial2DEvalVector(polyOrd, inputOrdX, NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 62;
-    }
-
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdX->type.type = PS_TYPE_U8;
-    if(psPolynomial2DEvalVector(polyOrd,inputOrdX,inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 63;
-    }
-    inputOrdX->type.type = PS_TYPE_F32;
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdY->type.type = PS_TYPE_U8;
-    if(psPolynomial2DEvalVector(polyOrd,inputOrdX,inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 64;
-    }
-    inputOrdY->type.type = PS_TYPE_F32;
-
-    psFree(inputOrdX);
-    psFree(inputOrdY);
-    psFree(inputChebX);
-    psFree(inputChebY);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
-psS32 testDPoly2DEvalVector(void)
-{
-    // Allocate polynomial
-    psDPolynomial2D* polyOrd = psDPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psDPolynomial2D* polyCheb = psDPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
-            polyOrd->mask[i][j]  = poly2DMask[i][j];
-            polyCheb->coeff[i][j] = 1.0;
-            polyCheb->mask[i][j]  = poly2DMask[i][j];
-        }
-    }
-
-    // Create input vectors
-    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrdX->data.F64[i]  = poly2DXYValue[i][0];
-        inputOrdY->data.F64[i]  = poly2DXYValue[i][1];
-        inputChebX->data.F64[i] = poly2DXYChebValue[i][0];
-        inputChebY->data.F64[i] = poly2DXYChebValue[i][1];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psDPolynomial2DEvalVector(polyOrd, inputOrdX, inputOrdY);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F64);
-        return 2;
-    }
-    psVector* outputCheb = psDPolynomial2DEvalVector(polyCheb, inputChebX, inputChebY);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F64);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(poly2DResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
-                    i, outputOrd->data.F64[i], poly2DResult[i]);
-            return i*5;
-        }
-        if(fabs(poly2DChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
-                    i, outputCheb->data.F64[i], poly2DChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psDPolynomial2DEvalVector(NULL, inputOrdX, inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial2DEvalVector(polyOrd,NULL,inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial2DEvalVector(polyOrd,inputOrdX,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 62;
-    }
-
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdX->type.type = PS_TYPE_U8;
-    if(psDPolynomial2DEvalVector(polyOrd,inputOrdX, inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 63;
-    }
-    inputOrdX->type.type = PS_TYPE_F64;
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdY->type.type = PS_TYPE_U8;
-    if(psDPolynomial2DEvalVector(polyOrd,inputOrdX, inputOrdY) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 64;
-    }
-    inputOrdY->type.type = PS_TYPE_F64;
-
-    psFree(inputOrdX);
-    psFree(inputOrdY);
-    psFree(inputChebX);
-    psFree(inputChebY);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psFunc10.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc10.c	(revision 4546)
+++ 	(revision )
@@ -1,514 +1,0 @@
-/** tst_psFunc10.c
-*
-*  This test driver will exercise the psPolynomialXDEval functions for both
-*  ORD and CHEB type polynomials.
-*
-*  @version  $Revision: 1.2 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:42 $
-*
-* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*
-***************************************************************************/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define  TERMS        4
-#define  TESTPOINTS   5
-#define  ERROR_TOL    0.001
-
-static psS32 testPoly3DEval(void);
-static psS32 testDPoly3DEval(void);
-static psS32 testPoly3DEvalVector(void);
-static psS32 testDPoly3DEvalVector(void);
-
-testDescription tests[] = {
-                              {testPoly3DEval,583,"psPolynomial3DEval",0,false},
-                              {testDPoly3DEval,582,"psDPolynomial3DEval",0,false},
-                              {testPoly3DEvalVector,000,"psPolynomial3DEvalVector",0,false},
-                              {testDPoly3DEvalVector,000,"psDPolynomial3DEvalVector",0,false},
-                              {NULL}
-                          };
-
-psF32 poly3DCoeff[TERMS][TERMS][TERMS] = {  { { -1.1,  1.2, -1.3,  1.4},
-        {  1.5, -1.6,  1.7, -1.8},
-        {  0.1, -0.2,  0.3, -0.4},
-        { -0.5,  0.6, -0.7,  0.8}
-                                            },
-        { { -2.1,  2.2, -2.3,  2.4},
-          {  2.5, -2.6,  2.7, -2.8},
-          {  3.1, -3.2,  3.3, -3.4},
-          { -3.5,  3.6, -3.7,  3.8}
-        },
-        { { -4.1,  4.2, -4.3,  4.4},
-          {  4.5, -4.6,  4.7, -4.8},
-          {  5.1, -5.2,  5.3, -5.4},
-          { -5.5,  5.6, -5.7,  5.8}
-        },
-        { { -6.1,  6.2, -6.3,  6.4},
-          {  6.5, -6.6,  6.7, -6.8},
-          {  7.1, -7.2,  7.3, -7.4},
-          { -7.5,  7.6, -7.7,  7.8}
-        }
-                                         };
-psF64 Dpoly3DCoeff[TERMS][TERMS][TERMS] = {  { { -1.1,  1.2, -1.3,  1.4},
-        {  1.5, -1.6,  1.7, -1.8},
-        {  0.1, -0.2,  0.3, -0.4},
-        { -0.5,  0.6, -0.7,  0.8}
-                                             },
-        { { -2.1,  2.2, -2.3,  2.4},
-          {  2.5, -2.6,  2.7, -2.8},
-          {  3.1, -3.2,  3.3, -3.4},
-          { -3.5,  3.6, -3.7,  3.8}
-        },
-        { { -4.1,  4.2, -4.3,  4.4},
-          {  4.5, -4.6,  4.7, -4.8},
-          {  5.1, -5.2,  5.3, -5.4},
-          { -5.5,  5.6, -5.7,  5.8}
-        },
-        { { -6.1,  6.2, -6.3,  6.4},
-          {  6.5, -6.6,  6.7, -6.8},
-          {  7.1, -7.2,  7.3, -7.4},
-          { -7.5,  7.6, -7.7,  7.8}
-        }
-                                          };
-
-
-psF32 poly3DMask[TERMS][TERMS][TERMS]    = { {  {  0,    0,    0,    1},
-        {  0,    0,    1,    0},
-        {  1,    0,    0,    0},
-        {  0,    0,    0,    1}
-                                             },
-        {  {  1,    0,    0,    0},
-           {  1,    0,    0,    0},
-           {  1,    0,    0,    0},
-           {  1,    0,    0,    0}
-        },
-        {  {  0,    1,    0,    0},
-           {  0,    0,    1,    0},
-           {  0,    1,    0,    0},
-           {  0,    0,    1,    0}
-        },
-        {  {  1,    0,    0,    0},
-           {  0,    0,    0,    1},
-           {  1,    0,    0,    0},
-           {  0,    0,    0,    1}
-        },
-                                           };
-
-psF32 poly3DXYZValue[TESTPOINTS][3] = {  {  0.450, -0.780,  0.500},
-                                      {  0.297,  0.153, -0.354},
-                                      {  0.000,  0.153, -0.354},
-                                      {  0.297,  0.000, -0.354},
-                                      {  0.297,  0.153,  0.000}
-                                      };
-psF64 Dpoly3DXYZValue[TESTPOINTS][3] = {  {  0.450, -0.780,  0.500},
-                                       {  0.297,  0.153, -0.354},
-                                       {  0.000,  0.153, -0.354},
-                                       {  0.297,  0.000, -0.354},
-                                       {  0.297,  0.153,  0.000}
-                                       };
-psF32 poly3DResult[TESTPOINTS]  = { -1.298691, -2.011591, -1.359247, -2.548266, -1.139072};
-psF64 Dpoly3DResult[TESTPOINTS] = { -1.298691, -2.011591, -1.359247, -2.548266, -1.139072};
-
-
-psF32 poly3DXYZChebValue[TESTPOINTS][3] = {  {  0.000,  0.250, -0.250},
-        { -0.250,  0.000,  0.250},
-        {  0.250, -0.250,  0.000},
-        {  0.100, -0.300, -0.400},
-        {  0.990, -0.010,  0.500}
-                                          };
-psF64 Dpoly3DXYZChebValue[TESTPOINTS][3] = {  {  0.000,  0.250, -0.250},
-        { -0.250,  0.000,  0.250},
-        {  0.250, -0.250,  0.000},
-        {  0.100, -0.300, -0.400},
-        {  0.990, -0.010,  0.500}
-                                           };
-psF32 poly3DChebResult[TESTPOINTS]  = {  1.230469, 1.687500, 0.187500, -1.452707, 2.032344 };
-psF64 Dpoly3DChebResult[TESTPOINTS] = {  1.230469, 1.687500, 0.187500, -1.452707, 2.032344 };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testPoly3DEval(void)
-{
-    psF32  result;
-    psF32  resultCheb;
-
-    // Allocate polynomial structure
-    psPolynomial3D*  polyOrd = psPolynomial3DAlloc(TERMS, TERMS, TERMS, PS_POLYNOMIAL_ORD);
-    psPolynomial3D*  polyCheb = psPolynomial3DAlloc(TERMS, TERMS, TERMS, PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                polyOrd->coeff[i][j][k] = poly3DCoeff[i][j][k];
-                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
-                polyCheb->coeff[i][j][k] = 1.0;
-                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
-            }
-        }
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psPolynomial3DEval(polyOrd,poly3DXYZValue[i][0],poly3DXYZValue[i][1],
-                                    poly3DXYZValue[i][2]);
-        if(fabs(poly3DResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
-                    result, poly3DResult[i]);
-            return i;
-        }
-        resultCheb = psPolynomial3DEval(polyCheb,poly3DXYZChebValue[i][0], poly3DXYZChebValue[i][1],
-                                        poly3DXYZChebValue[i][2]);
-        if(fabs(poly3DChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, poly3DChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psPolynomial3DAlloc(TERMS, TERMS, TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psPolynomial3DEval(polyOrd,0.0, 0.0, 0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testDPoly3DEval(void)
-{
-    psF64  result;
-    psF64  resultCheb;
-
-    // Allocate polynomial structure
-    psDPolynomial3D*  polyOrd = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psDPolynomial3D*  polyCheb = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                polyOrd->coeff[i][j][k] = Dpoly3DCoeff[i][j][k];
-                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
-                polyCheb->coeff[i][j][k] = 1.0;
-                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
-            }
-        }
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psDPolynomial3DEval(polyOrd,Dpoly3DXYZValue[i][0],Dpoly3DXYZValue[i][1],
-                                     Dpoly3DXYZValue[i][2]);
-        if(fabs(Dpoly3DResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
-                    result, Dpoly3DResult[i]);
-            return i;
-        }
-        resultCheb = psDPolynomial3DEval(polyCheb,Dpoly3DXYZChebValue[i][0],Dpoly3DXYZChebValue[i][1],
-                                         Dpoly3DXYZChebValue[i][2]);
-        if(fabs(Dpoly3DChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, Dpoly3DChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psDPolynomial3DAlloc(TERMS, TERMS, TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psDPolynomial3DEval(polyOrd,0.0, 0.0, 0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-psS32 testPoly3DEvalVector(void)
-{
-    // Allocate polynomial
-    psPolynomial3D* polyOrd  = psPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psPolynomial3D* polyCheb = psPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                polyOrd->coeff[i][j][k] = poly3DCoeff[i][j][k];
-                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
-                polyCheb->coeff[i][j][k] = 1.0;
-                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
-            }
-        }
-    }
-
-    // Create input vectors
-    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrdX->data.F32[i] = poly3DXYZValue[i][0];
-        inputOrdY->data.F32[i] = poly3DXYZValue[i][1];
-        inputOrdZ->data.F32[i] = poly3DXYZValue[i][2];
-        inputChebX->data.F32[i] = poly3DXYZChebValue[i][0];
-        inputChebY->data.F32[i] = poly3DXYZChebValue[i][1];
-        inputChebZ->data.F32[i] = poly3DXYZChebValue[i][2];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F32);
-        return 2;
-    }
-    psVector* outputCheb = psPolynomial3DEvalVector(polyCheb,inputChebX,inputChebY,inputChebZ);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F32);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(poly3DResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
-                    i, outputOrd->data.F32[i], poly3DResult[i]);
-            return i*5;
-        }
-        if(fabs(poly3DChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
-                    i, outputCheb->data.F32[i], poly3DChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psPolynomial3DEvalVector(NULL, inputOrdX, inputOrdY, inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial3DEvalVector(polyOrd,NULL, inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial3DEvalVector(polyOrd, inputOrdX, NULL,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 62;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial3DEvalVector(polyOrd, inputOrdX,inputOrdY,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 63;
-    }
-
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdX->type.type = PS_TYPE_U8;
-    if(psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 65;
-    }
-    inputOrdX->type.type = PS_TYPE_F32;
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdY->type.type = PS_TYPE_U8;
-    if(psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 66;
-    }
-    inputOrdY->type.type = PS_TYPE_F32;
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdZ->type.type = PS_TYPE_U8;
-    if(psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 67;
-    }
-    inputOrdZ->type.type = PS_TYPE_F32;
-
-    psFree(inputOrdX);
-    psFree(inputOrdY);
-    psFree(inputOrdZ);
-    psFree(inputChebX);
-    psFree(inputChebY);
-    psFree(inputChebZ);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
-psS32 testDPoly3DEvalVector(void)
-{
-    // Allocate polynomial
-    psDPolynomial3D* polyOrd = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psDPolynomial3D* polyCheb = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                polyOrd->coeff[i][j][k] = Dpoly3DCoeff[i][j][k];
-                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
-                polyCheb->coeff[i][j][k] = 1.0;
-                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
-            }
-        }
-    }
-
-    // Create input vectors
-    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrdX->data.F64[i]  = Dpoly3DXYZValue[i][0];
-        inputOrdY->data.F64[i]  = Dpoly3DXYZValue[i][1];
-        inputOrdZ->data.F64[i]  = Dpoly3DXYZValue[i][2];
-        inputChebX->data.F64[i] = Dpoly3DXYZChebValue[i][0];
-        inputChebY->data.F64[i] = Dpoly3DXYZChebValue[i][1];
-        inputChebZ->data.F64[i] = Dpoly3DXYZChebValue[i][2];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F64);
-        return 2;
-    }
-    psVector* outputCheb = psDPolynomial3DEvalVector(polyCheb,inputChebX,inputChebY,inputChebZ);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F64);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(Dpoly3DResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
-                    i, outputOrd->data.F64[i], Dpoly3DResult[i]);
-            return i*5;
-        }
-        if(fabs(Dpoly3DChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
-                    i, outputCheb->data.F64[i], Dpoly3DChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psDPolynomial3DEvalVector(NULL,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial3DEvalVector(polyOrd,NULL,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,NULL,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 62;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 63;
-    }
-
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdX->type.type = PS_TYPE_U8;
-    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 64;
-    }
-    inputOrdX->type.type = PS_TYPE_F64;
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdY->type.type = PS_TYPE_U8;
-    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 65;
-    }
-    inputOrdY->type.type = PS_TYPE_F64;
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdZ->type.type = PS_TYPE_U8;
-    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 66;
-    }
-    inputOrdZ->type.type = PS_TYPE_F64;
-
-    psFree(inputOrdX);
-    psFree(inputOrdY);
-    psFree(inputOrdZ);
-    psFree(inputChebX);
-    psFree(inputChebY);
-    psFree(inputChebZ);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psFunc11.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc11.c	(revision 4546)
+++ 	(revision )
@@ -1,804 +1,0 @@
-/** tst_psFunc11.c
-*
-*  This test driver will exercise the psPolynomialXDEval functions for both
-*  ORD and CHEB type polynomials.
-*
-*  @version  $Revision: 1.2 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:42 $
-*
-* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*
-***************************************************************************/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define  TERMS        4
-#define  TESTPOINTS   5
-#define  ERROR_TOL    0.001
-
-static psS32 testPoly4DEval(void);
-static psS32 testDPoly4DEval(void);
-static psS32 testPoly4DEvalVector(void);
-static psS32 testDPoly4DEvalVector(void);
-
-testDescription tests[] = {
-                              {testPoly4DEval,583,"psPolynomial4DEval",0,false},
-                              {testDPoly4DEval,582,"psDPolynomial4DEval",0,false},
-                              {testPoly4DEvalVector,000,"psPolynomial4DEvalVector",0,false},
-                              {testDPoly4DEvalVector,000,"psDPolynomial4DEvalVector",0,false},
-                              {NULL}
-                          };
-
-psF32 poly4DCoeff[TERMS][TERMS][TERMS][TERMS] = {
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            },
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            },
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            },
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            }
-        };
-psF64 Dpoly4DCoeff[TERMS][TERMS][TERMS][TERMS] = {
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            },
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            },
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            },
-            {
-                {
-                    { -1.1,  1.2, -1.3,  1.4},
-                    {  1.5, -1.6,  1.7, -1.8},
-                    {  0.1, -0.2,  0.3, -0.4},
-                    { -0.5,  0.6, -0.7,  0.8}
-                },
-                {
-                    { -2.1,  2.2, -2.3,  2.4},
-                    {  2.5, -2.6,  2.7, -2.8},
-                    {  3.1, -3.2,  3.3, -3.4},
-                    { -3.5,  3.6, -3.7,  3.8}
-                },
-                { { -4.1,  4.2, -4.3,  4.4},
-                  {  4.5, -4.6,  4.7, -4.8},
-                  {  5.1, -5.2,  5.3, -5.4},
-                  { -5.5,  5.6, -5.7,  5.8}
-                },
-                { { -6.1,  6.2, -6.3,  6.4},
-                  {  6.5, -6.6,  6.7, -6.8},
-                  {  7.1, -7.2,  7.3, -7.4},
-                  { -7.5,  7.6, -7.7,  7.8}
-                }
-            }
-        };
-
-psF32 poly4DMask[TERMS][TERMS][TERMS][TERMS]    = {
-            {
-                {
-                    {  0,    0,    0,    1},
-                    {  0,    0,    1,    0},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0}
-                },
-                {
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0},
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                }
-            },
-            {
-                {
-                    {  0,    0,    0,    1},
-                    {  0,    0,    1,    0},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0}
-                },
-                {
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0},
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                }
-            },
-            {
-                {
-                    {  0,    0,    0,    1},
-                    {  0,    0,    1,    0},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0}
-                },
-                {
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0},
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                }
-            },
-            {
-                {
-                    {  0,    0,    0,    1},
-                    {  0,    0,    1,    0},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0},
-                    {  1,    0,    0,    0}
-                },
-                {
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0},
-                    {  0,    1,    0,    0},
-                    {  0,    0,    1,    0}
-                },
-                {
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1},
-                    {  1,    0,    0,    0},
-                    {  0,    0,    0,    1}
-                }
-            }
-        };
-
-psF32 poly4DWXYZValue[TESTPOINTS][4] = {
-                                           {  0.450, -0.780,  0.500, -0.123},
-                                           {  0.297,  0.153, -0.354,  0.000},
-                                           {  0.000,  0.153, -0.354,  0.321},
-                                           {  0.297,  0.000, -0.354,  0.321},
-                                           {  0.297,  0.153,  0.000,  0.321}
-                                       };
-psF64 Dpoly4DWXYZValue[TESTPOINTS][4] = {
-                                            {  0.450, -0.780,  0.500, -0.123},
-                                            {  0.297,  0.153, -0.354,  0.000},
-                                            {  0.000,  0.153, -0.354,  0.321},
-                                            {  0.297,  0.000, -0.354,  0.321},
-                                            {  0.297,  0.153,  0.000,  0.321}
-                                        };
-
-psF32 poly4DResult[TESTPOINTS]  = { -3.588753, -2.439566, -1.175955, -1.645497, -1.216915};
-psF64 Dpoly4DResult[TESTPOINTS]  = { -3.588753, -2.439566, -1.175955, -1.645497, -1.216915};
-
-psF32 poly4DWXYZChebValue[TESTPOINTS][4] = {
-            {  0.100,  0.000,  0.250, -0.250},
-            {  0.100, -0.250,  0.000,  0.250},
-            {  0.100,  0.250, -0.250,  0.000},
-            {  0.300,  0.200, -0.300, -0.400},
-            { -0.780,  0.990, -0.010,  0.500}
-        };
-psF64 Dpoly4DWXYZChebValue[TESTPOINTS][4] = {
-            {  0.100,  0.000,  0.250, -0.250},
-            {  0.100, -0.250,  0.000,  0.250},
-            {  0.100,  0.250, -0.250,  0.000},
-            {  0.300,  0.200, -0.300, -0.400},
-            { -0.780,  0.990, -0.010,  0.500}
-        };
-psF32 poly4DChebResult[TESTPOINTS]   = { -0.216563, -0.297000, -0.033000, 0.432198, 1.785601 };
-psF64 Dpoly4DChebResult[TESTPOINTS]  = { -0.216563, -0.297000, -0.033000, 0.432198, 1.785601 };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testPoly4DEval(void)
-{
-    psF32  result;
-    psF32  resultCheb;
-
-    // Allocate polynomial structure
-    psPolynomial4D*  polyOrd  = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psPolynomial4D*  polyCheb = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                for(psS32 l = 0; l < TERMS; l++) {
-                    polyOrd->coeff[i][j][k][l] = poly4DCoeff[i][j][k][l];
-                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                    polyCheb->coeff[i][j][k][l] = 1.0;
-                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                }
-            }
-        }
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psPolynomial4DEval(polyOrd,poly4DWXYZValue[i][0],poly4DWXYZValue[i][1],
-                                    poly4DWXYZValue[i][2], poly4DWXYZValue[i][3]);
-        if(fabs(poly4DResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
-                    result, poly4DResult[i]);
-            return i;
-        }
-        resultCheb = psPolynomial4DEval(polyCheb,poly4DWXYZChebValue[i][0], poly4DWXYZChebValue[i][1],
-                                        poly4DWXYZChebValue[i][2], poly4DWXYZChebValue[i][3]);
-        if(fabs(poly4DChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, poly4DChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psPolynomial4DAlloc(TERMS, TERMS, TERMS, TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psPolynomial4DEval(polyOrd,0.0, 0.0, 0.0, 0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-// This test will verify operation of 1D polynomial evaluation
-psS32 testDPoly4DEval(void)
-{
-    psF64  result;
-    psF64  resultCheb;
-
-    // Allocate polynomial structure
-    psDPolynomial4D*  polyOrd = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psDPolynomial4D*  polyCheb = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                for(psS32 l = 0; l < TERMS; l++) {
-                    polyOrd->coeff[i][j][k][l] = Dpoly4DCoeff[i][j][k][l];
-                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                    polyCheb->coeff[i][j][k][l] = 1.0;
-                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                }
-            }
-        }
-    }
-    // Evaluate test points and verify results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        result = psDPolynomial4DEval(polyOrd,Dpoly4DWXYZValue[i][0],Dpoly4DWXYZValue[i][1],
-                                     Dpoly4DWXYZValue[i][2],Dpoly4DWXYZValue[i][3]);
-        if(fabs(Dpoly4DResult[i]-result) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
-                    result, Dpoly4DResult[i]);
-            return i;
-        }
-        resultCheb = psDPolynomial4DEval(polyCheb,Dpoly4DWXYZChebValue[i][0],Dpoly4DWXYZChebValue[i][1],
-                                         Dpoly4DWXYZChebValue[i][2],Dpoly4DWXYZChebValue[i][3]);
-        if(fabs(Dpoly4DChebResult[i]-resultCheb) > ERROR_TOL ) {
-            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
-                    resultCheb, Dpoly4DChebResult[i]);
-            return 5*i;
-        }
-    }
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    // Allocate polynomial with invalid type
-    polyOrd = psDPolynomial4DAlloc(TERMS, TERMS, TERMS, TERMS, 99);
-    // Attempt to evaluation invalid polynomial type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
-    result = psDPolynomial4DEval(polyOrd,0.0, 0.0, 0.0, 0.0);
-    if ( !isnan(result) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
-        return 20;
-    }
-    psFree(polyOrd);
-
-    return 0;
-}
-
-psS32 testPoly4DEvalVector(void)
-{
-    // Allocate polynomial
-    psPolynomial4D* polyOrd  = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psPolynomial4D* polyCheb = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                for(psS32 l = 0; l < TERMS; l++) {
-                    polyOrd->coeff[i][j][k][l] = poly4DCoeff[i][j][k][l];
-                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                    polyCheb->coeff[i][j][k][l] = 1.0;
-                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                }
-            }
-        }
-    }
-
-    // Create input vectors
-    psVector* inputOrdW  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebW = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrdW->data.F32[i] = poly4DWXYZValue[i][0];
-        inputOrdX->data.F32[i] = poly4DWXYZValue[i][1];
-        inputOrdY->data.F32[i] = poly4DWXYZValue[i][2];
-        inputOrdZ->data.F32[i] = poly4DWXYZValue[i][3];
-        inputChebW->data.F32[i] = poly4DWXYZChebValue[i][0];
-        inputChebX->data.F32[i] = poly4DWXYZChebValue[i][1];
-        inputChebY->data.F32[i] = poly4DWXYZChebValue[i][2];
-        inputChebZ->data.F32[i] = poly4DWXYZChebValue[i][3];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F32);
-        return 2;
-    }
-    psVector* outputCheb = psPolynomial4DEvalVector(polyCheb,inputChebW,inputChebX,inputChebY,inputChebZ);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F32);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(poly4DResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
-                    i, outputOrd->data.F32[i], poly4DResult[i]);
-            return i*5;
-        }
-        if(fabs(poly4DChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
-                    i, outputCheb->data.F32[i], poly4DChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psPolynomial4DEvalVector(NULL, inputOrdW, inputOrdX, inputOrdY, inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial4DEvalVector(polyOrd,NULL,inputOrdX, inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial4DEvalVector(polyOrd, inputOrdW, NULL, inputOrdY, inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 62;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial4DEvalVector(polyOrd, inputOrdW, inputOrdX,NULL,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 63;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psPolynomial4DEvalVector(polyOrd, inputOrdW, inputOrdX,inputOrdY,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 64;
-    }
-
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdX->type.type = PS_TYPE_U8;
-    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 65;
-    }
-    inputOrdX->type.type = PS_TYPE_F32;
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdY->type.type = PS_TYPE_U8;
-    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 66;
-    }
-    inputOrdY->type.type = PS_TYPE_F32;
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdZ->type.type = PS_TYPE_U8;
-    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 67;
-    }
-    inputOrdZ->type.type = PS_TYPE_F32;
-    // Attempt to invoke function with a non F32 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdW->type.type = PS_TYPE_U8;
-    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
-        return 68;
-    }
-    inputOrdW->type.type = PS_TYPE_F32;
-
-    psFree(inputOrdW);
-    psFree(inputOrdX);
-    psFree(inputOrdY);
-    psFree(inputOrdZ);
-    psFree(inputChebW);
-    psFree(inputChebX);
-    psFree(inputChebY);
-    psFree(inputChebZ);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
-psS32 testDPoly4DEvalVector(void)
-{
-    // Allocate polynomial
-    psDPolynomial4D* polyOrd = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
-    psDPolynomial4D* polyCheb = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
-
-    // Set polynomial members
-    for(psS32 i = 0; i < TERMS; i++) {
-        for(psS32 j = 0; j < TERMS; j++) {
-            for(psS32 k = 0; k < TERMS; k++) {
-                for(psS32 l = 0; l < TERMS; l++) {
-                    polyOrd->coeff[i][j][k][l] = Dpoly4DCoeff[i][j][k][l];
-                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                    polyCheb->coeff[i][j][k][l] = 1.0;
-                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
-                }
-            }
-        }
-    }
-
-    // Create input vectors
-    psVector* inputOrdW  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebW = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        inputOrdW->data.F64[i]  = Dpoly4DWXYZValue[i][0];
-        inputOrdX->data.F64[i]  = Dpoly4DWXYZValue[i][1];
-        inputOrdY->data.F64[i]  = Dpoly4DWXYZValue[i][2];
-        inputOrdZ->data.F64[i]  = Dpoly4DWXYZValue[i][3];
-        inputChebW->data.F64[i] = Dpoly4DWXYZChebValue[i][0];
-        inputChebX->data.F64[i] = Dpoly4DWXYZChebValue[i][1];
-        inputChebY->data.F64[i] = Dpoly4DWXYZChebValue[i][2];
-        inputChebZ->data.F64[i] = Dpoly4DWXYZChebValue[i][3];
-    }
-
-    // Evaluate the vectors
-    psVector* outputOrd = psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ);
-    if(outputOrd == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputOrd->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputOrd->type.type, PS_TYPE_F64);
-        return 2;
-    }
-    psVector* outputCheb = psDPolynomial4DEvalVector(polyCheb,inputChebW,inputChebX,inputChebY,inputChebZ);
-    if(outputCheb == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
-        return 1;
-    }
-    if(outputCheb->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
-                outputCheb->type.type, PS_TYPE_F64);
-        return 2;
-    }
-
-    // Verify the results
-    for(psS32 i = 0; i < TESTPOINTS; i++) {
-        if(fabs(Dpoly4DResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
-                    i, outputOrd->data.F64[i], Dpoly4DResult[i]);
-            return i*5;
-        }
-        if(fabs(Dpoly4DChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
-            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
-                    i, outputCheb->data.F64[i], Dpoly4DChebResult[i]);
-            return i*10;
-        }
-    }
-
-    // Attempt to invoke function with null polynomial
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
-    if(psDPolynomial4DEvalVector(NULL,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
-        return 60;
-    }
-
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial4DEvalVector(polyOrd,NULL,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 61;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,NULL,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 62;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,NULL,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 63;
-    }
-    // Attempt to invoke function with null input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
-        return 64;
-    }
-
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdX->type.type = PS_TYPE_U8;
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 65;
-    }
-    inputOrdX->type.type = PS_TYPE_F64;
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdY->type.type = PS_TYPE_U8;
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 66;
-    }
-    inputOrdY->type.type = PS_TYPE_F64;
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdZ->type.type = PS_TYPE_U8;
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 67;
-    }
-    inputOrdZ->type.type = PS_TYPE_F64;
-    // Attempt to invoke function with a non F64 type input vector
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
-    inputOrdW->type.type = PS_TYPE_U8;
-    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
-        return 68;
-    }
-    inputOrdW->type.type = PS_TYPE_F64;
-
-    psFree(inputOrdX);
-    psFree(inputOrdY);
-    psFree(inputOrdZ);
-    psFree(inputOrdW);
-    psFree(inputChebW);
-    psFree(inputChebX);
-    psFree(inputChebY);
-    psFree(inputChebZ);
-    psFree(outputOrd);
-    psFree(outputCheb);
-    psFree(polyOrd);
-    psFree(polyCheb);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psHist00.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psHist00.c	(revision 4546)
+++ 	(revision )
@@ -1,125 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psHistogram structure is correctly
-    allocated and deallocated by the procedure psHistogramAlloc().
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#define LOWER 20.0
-#define UPPER 30.0
-
-psS32 main()
-{
-    psHistogram *myHist = NULL;
-    psS32 testStatus      = true;
-    psS32 memLeaks        = 0;
-    psS32 i               = 0;
-    psS32 nb              = 0;
-    psS32 numBins         = 0;
-    psS32 currentId       = 0;
-
-    currentId       = psMemGetId();
-    for (nb=0;nb<4;nb++) {
-        if (nb == 0)
-            numBins = 1;
-        if (nb == 1)
-            numBins = 2;
-        if (nb == 2)
-            numBins = 10;
-        if (nb == 3)
-            numBins = 20;
-        /*********************************************************************/
-        /*  Allocate and initialize data structures                          */
-        /*********************************************************************/
-        printPositiveTestHeader(stdout,
-                                "psStats functions",
-                                "Allocate the psHistogram structure.");
-
-        myHist = psHistogramAlloc(LOWER, UPPER, numBins);
-
-        if (myHist->nums->n != numBins) {
-            printf("ERROR: myHist->nums->n is wrong size (%ld)\n", myHist->nums->n);
-            testStatus = false;
-        }
-
-        if (myHist->bounds->n != numBins+1) {
-            printf("ERROR: myHist->bounds->n is wrong size (%ld)\n", myHist->bounds->n);
-            testStatus = false;
-        }
-
-        for (i=0;i<numBins;i++) {
-            if (myHist->nums->data.F32[i] != 0.0) {
-                printf("ERROR: myHist->nums->data.U32[%d] not initialized to 0.\n", i);
-                testStatus = false;
-            }
-            myHist->nums->data.F32[i] = 0.0;
-        }
-
-        if (myHist->minNum != 0) {
-            printf("ERROR: myHist->minNum is %d\n", myHist->minNum);
-            testStatus = false;
-        }
-
-        if (myHist->maxNum != 0) {
-            printf("myHist->maxNum is %d\n", myHist->maxNum);
-            testStatus = false;
-        }
-
-        if (myHist->uniform != true) {
-            printf("ERROR: myHist->uniform is %d\n", myHist->uniform);
-            testStatus = false;
-        }
-
-        for (i=0;i<numBins;i++) {
-            printf("Bin number %d bounds: (%6.3f - %6.3f)\n", i,
-                   myHist->bounds->data.F32[i],
-                   myHist->bounds->data.F32[i+1]);
-        }
-
-        psMemCheckCorruption(1);
-        psFree(myHist);
-        psMemCheckCorruption(1);
-
-        printFooter(stdout,
-                    "psStats functions",
-                    "Allocate the psHistogram structure.",
-                    testStatus);
-    }
-
-
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "Allocate the psHistogram structure. (UPPER<LOWER)");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    myHist = psHistogramAlloc(UPPER, LOWER, numBins);
-    if (myHist != NULL) {
-        printf("ERROR: myHist != NULL\n");
-    }
-    printFooter(stdout,
-                "psStats functions",
-                "Allocate the psHistogram structure. (UPPER<LOWER)",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "Deallocate the psHistogram structure.");
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    printFooter(stdout,
-                "psStats functions",
-                "Deallocate the psHistogram structure.",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psHist01.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psHist01.c	(revision 4546)
+++ 	(revision )
@@ -1,114 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psHistogram structure is correctly
-    allocated and deallocated by the procedure psHistogramAllocGeneric().
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#define LOWER 20.0
-#define UPPER 30.0
-
-psS32 main()
-{
-    psHistogram *myHist = NULL;
-    psVector *myBounds  = NULL;
-    psS32 testStatus      = true;
-    psS32 memLeaks        = 0;
-    psS32 i               = 0;
-    psS32 nb              = 0;
-    psS32 numBins         = 0;
-    psS32 currentId       = 0;
-
-    currentId       = psMemGetId();
-    for (nb=0;nb<4;nb++) {
-        if (nb == 0)
-            numBins = 1;
-        if (nb == 1)
-            numBins = 2;
-        if (nb == 2)
-            numBins = 10;
-        if (nb == 3)
-            numBins = 20;
-        /*********************************************************************/
-        /*  Allocate and initialize data structures                          */
-        /*********************************************************************/
-        printPositiveTestHeader(stdout,
-                                "psStats functions",
-                                "Allocate the psHistogram structure.");
-        myBounds = psVectorAlloc(numBins+1, PS_TYPE_F32);
-        myBounds->n = myBounds->nalloc;
-        for (i=0;i<numBins+1;i++) {
-            myBounds->data.F32[i] = LOWER + ((UPPER - LOWER) / (float) numBins) *
-                                    (float) i;
-        }
-        myHist = psHistogramAllocGeneric(myBounds);
-
-        if (myHist->nums->n != numBins) {
-            printf("ERROR: myHist->nums->n is wrong size (%ld)\n", myHist->nums->n);
-            testStatus = false;
-        }
-
-        if (myHist->bounds->n != numBins+1) {
-            printf("ERROR: myHist->bounds->n is wrong size (%ld)\n", myHist->bounds->n);
-            testStatus = false;
-        }
-
-        for (i=0;i<numBins;i++) {
-            if (myHist->nums->data.F32[i] != 0.0) {
-                printf("ERROR: myHist->nums->data.F32[%d] not initialized to 0.\n", i);
-                testStatus = false;
-            }
-            myHist->nums->data.F32[i] = 0.0;
-        }
-
-        if (myHist->minNum != 0) {
-            printf("ERROR: myHist->minNum is %d\n", myHist->minNum);
-            testStatus = false;
-        }
-
-        if (myHist->maxNum != 0) {
-            printf("myHist->maxNum is %d\n", myHist->maxNum);
-            testStatus = false;
-        }
-
-        if (myHist->uniform != false) {
-            printf("ERROR: myHist->uniform is %d\n", myHist->uniform);
-            testStatus = false;
-        }
-
-        for (i=0;i<numBins;i++) {
-            printf("Bin number %d bounds: (%6.3f - %6.3f)\n", i,
-                   myHist->bounds->data.F32[i],
-                   myHist->bounds->data.F32[i+1]);
-        }
-        psMemCheckCorruption(1);
-        psFree(myHist);
-        psMemCheckCorruption(1);
-        psFree(myBounds);
-
-        printFooter(stdout,
-                    "psStats functions",
-                    "Allocate the psHistogram structure.",
-                    testStatus);
-    }
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "Deallocate the psHistogram structure.");
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    printFooter(stdout,
-                "psStats functions",
-                "Deallocate the psHistogram structure.",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psHist02.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psHist02.c	(revision 4546)
+++ 	(revision )
@@ -1,190 +1,0 @@
-/*****************************************************************************
-   This routine must ensure that the psHistogram structure is correctly
-   populated by the procedure psGetArrayHistogram().
- 
-*****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#define MISC_FLOAT_NUMBER 345.0
-#define MISC_INT_NUMBER 345
-#define LOWER 20.0
-#define UPPER 30.0
-#define NUM_DATA 10000
-
-psS32 main()
-{
-    psHistogram * myHist = NULL;
-    psHistogram *myHist2 = NULL;
-    psVector *myData = NULL;
-    psVector *myMask = NULL;
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    psS32 nb = 0;
-    psS32 numBins = 0;
-    psS32 i = 0;
-    psS32 currentId = 0;
-
-    currentId = psMemGetId();
-
-    /*********************************************************************/
-    /*  Allocate and initialize data structures                          */
-    /*********************************************************************/
-    myData = psVectorAlloc( NUM_DATA, PS_TYPE_F32 );
-    myData->n = myData->nalloc;
-    for ( i = 0;i < NUM_DATA;i++ ) {
-        myData->data.F32[ i ] = LOWER + ( ( UPPER - LOWER ) / ( float ) NUM_DATA ) * ( float ) i;
-    }
-
-    myMask = psVectorAlloc( NUM_DATA, PS_TYPE_U8 );
-    myMask->n = myMask->nalloc;
-    for ( i = 0;i < NUM_DATA;i++ ) {
-        if ( i >= ( NUM_DATA / 2 ) ) {
-            myMask->data.U8[ i ] = 1;
-        } else {
-            myMask->data.U8[ i ] = 0;
-        }
-    }
-
-    for ( nb = 0;nb < 4;nb++ ) {
-        if ( nb == 0 )
-            numBins = 1;
-        if ( nb == 1 )
-            numBins = 2;
-        if ( nb == 2 )
-            numBins = 10;
-        if ( nb == 3 )
-            numBins = 20;
-
-        /*********************************************************************/
-        /*  Allocate and Perform Histogram, no mask                          */
-        /*********************************************************************/
-        printPositiveTestHeader( stdout,
-                                 "psStats functions",
-                                 "Allocate and Perform Histogram, no mask" );
-
-        myHist = psHistogramAlloc( LOWER, UPPER, numBins );
-        myHist = psVectorHistogram( myHist, myData, NULL, NULL, 0 );
-
-        for ( i = 0;i < numBins;i++ ) {
-            printf( "Bin number %d bounds: (%.2f - %.2f) data (%f)\n", i,
-                    myHist->bounds->data.F32[ i ],
-                    myHist->bounds->data.F32[ i + 1 ],
-                    myHist->nums->data.F32[ i ] );
-        }
-        psMemCheckCorruption( 1 );
-        psFree( myHist );
-        psMemCheckCorruption( 1 );
-
-        printFooter( stdout,
-                     "psStats functions",
-                     "Allocate and Perform Histogram, no mask",
-                     testStatus );
-
-        /*********************************************************************/
-        /*  Allocate and Perform Histogram with mask                         */
-        /*********************************************************************/
-        printPositiveTestHeader( stdout,
-                                 "psStats functions",
-                                 "Allocate and Perform Histogram with mask" );
-
-        myHist = psHistogramAlloc( LOWER, UPPER, numBins );
-        myHist = psVectorHistogram( myHist, myData, NULL, myMask, 1 );
-
-        for ( i = 0;i < numBins;i++ ) {
-            printf( "Bin number %d bounds: (%6.3f - %6.3f) data (%f)\n", i,
-                    myHist->bounds->data.F32[ i ],
-                    myHist->bounds->data.F32[ i + 1 ],
-                    myHist->nums->data.F32[ i ] );
-        }
-        psMemCheckCorruption( 1 );
-        psFree( myHist );
-        psMemCheckCorruption( 1 );
-
-        printFooter( stdout,
-                     "psStats functions",
-                     "Allocate and Perform Histogram with mask",
-                     testStatus );
-    }
-    psFree( myMask );
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "Calling psVectorHistogram() with various NULL inputs." );
-
-
-
-    // ********************************************************************
-    // Verify the return value is null and program execution doesn't stop,
-    // if input parameter myHist is null.
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    myHist2 = psVectorHistogram( NULL, myData, NULL, NULL, 0 );
-    if ( myHist2 != NULL ) {
-        printf( "ERROR: myHist2!=NULL\n" );
-        testStatus = false;
-    }
-    psFree( myData );
-
-
-    // ********************************************************************
-    // Verify the return value is the same as the input parameter myHist and
-    // program execution doesn't stop, if the input parameter myArray is
-    // null.
-
-    myHist = psHistogramAlloc( LOWER, UPPER, numBins );
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    myHist = psVectorHistogram( myHist, NULL, NULL, NULL, 0 );
-    if ( myHist == NULL ) {
-        printf( "ERROR: myHist==NULL\n" );
-        testStatus = false;
-    }
-    psFree( myHist );
-
-
-    //    exit(0);
-    // ********************************************************************
-    // Verify the return value is the same as the input parameter myHist and
-    // program execution doesn't stop, if the input parameter myArray has no
-    // elements.
-    // NOTE: This code segment is commented out because psVectorAlloc returns
-    // NULL if called with an N element data.
-    /*
-    myData = psVectorAlloc(0, PS_TYPE_F32);
-    myData->n = myData->nalloc;
-    myHist = psHistogramAlloc(LOWER, UPPER, numBins);
-    myHist = psVectorHistogram(myHist, NULL, NULL, NULL, 0);
-    if (myHist == NULL) {
-        printf("ERROR: myHist==NULL\n");
-        testStatus = false;
-    }
-    psFree(myHist);
-    psFree(myData);
-    */
-    printFooter( stdout,
-                 "psStats functions",
-                 "Calling psVectorHistogram() with various NULL inputs.",
-                 testStatus );
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "Deallocate the psHistogram structure." );
-
-    psMemCheckCorruption( 1 );
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if ( 0 != memLeaks ) {
-        psAbort( __func__, "Memory Leaks! (%d leaks)", memLeaks );
-    }
-    psMemCheckCorruption( 1 );
-
-    printFooter( stdout,
-                 "psStats functions",
-                 "Deallocate the psHistogram structure.",
-                 testStatus );
-
-    return ( !testStatus );
-}
Index: unk/psLib/test/dataManip/tst_psHist03.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psHist03.c	(revision 4546)
+++ 	(revision )
@@ -1,128 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psHistogram structure is correctly
-    allocated and deallocated by the procedure psHistogramAllocGeneric() and
-    that it can be populated correctly by psVectorHistogram().
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#define LOWER 20.0
-#define UPPER 30.0
-#define NUM_DATA 20
-
-psS32 main()
-{
-    psHistogram *myHist = NULL;
-    psVector *myBounds  = NULL;
-    psVector *myData = psVectorAlloc( NUM_DATA, PS_TYPE_F32 );
-    psS32 testStatus      = true;
-    psS32 memLeaks        = 0;
-    psS32 i               = 0;
-    psS32 nb              = 0;
-    psS32 numBins         = 0;
-    psS32 currentId       = 0;
-
-    currentId       = psMemGetId();
-
-    psTraceSetLevel(".psLib", 0);
-
-    myData->n = myData->nalloc;
-    for ( i = 0;i < NUM_DATA;i++ ) {
-        myData->data.F32[ i ] = LOWER + ( ( UPPER - LOWER ) / ( float ) NUM_DATA ) * ( float ) i;
-    }
-
-    for (nb=0;nb<4;nb++) {
-        if (nb == 0)
-            numBins = 1;
-        if (nb == 1)
-            numBins = 2;
-        if (nb == 2)
-            numBins = 10;
-        if (nb == 3)
-            numBins = 20;
-        /*********************************************************************/
-        /*  Allocate and initialize data structures                          */
-        /*********************************************************************/
-        printPositiveTestHeader(stdout,
-                                "psStats functions",
-                                "Allocate the psHistogram structure.");
-        myBounds = psVectorAlloc(numBins+1, PS_TYPE_F32);
-        myBounds->n = myBounds->nalloc;
-        for (i=0;i<numBins+1;i++) {
-            myBounds->data.F32[i] = LOWER + ((UPPER - LOWER) / (float) numBins) *
-                                    (float) i;
-        }
-        myHist = psHistogramAllocGeneric(myBounds);
-
-        if (myHist->nums->n != numBins) {
-            printf("ERROR: myHist->nums->n is wrong size (%ld)\n", myHist->nums->n);
-            testStatus = false;
-        }
-
-        if (myHist->bounds->n != numBins+1) {
-            printf("ERROR: myHist->bounds->n is wrong size (%ld)\n", myHist->bounds->n);
-            testStatus = false;
-        }
-
-        for (i=0;i<numBins;i++) {
-            if (myHist->nums->data.F32[i] != 0.0) {
-                printf("ERROR: myHist->nums->data.F32[%d] not initialized to 0.\n", i);
-                testStatus = false;
-            }
-            myHist->nums->data.F32[i] = 0.0;
-        }
-
-        if (myHist->minNum != 0) {
-            printf("ERROR: myHist->minNum is %d\n", myHist->minNum);
-            testStatus = false;
-        }
-
-        if (myHist->maxNum != 0) {
-            printf("myHist->maxNum is %d\n", myHist->maxNum);
-            testStatus = false;
-        }
-
-        if (myHist->uniform != false) {
-            printf("ERROR: myHist->uniform is %d\n", myHist->uniform);
-            testStatus = false;
-        }
-
-        myHist = psVectorHistogram( myHist, myData, NULL, NULL, 0 );
-        for (i=0;i<numBins;i++) {
-            printf("Bin number %d bounds: (%6.3f - %6.3f): data: (%f)\n", i,
-                   myHist->bounds->data.F32[i],
-                   myHist->bounds->data.F32[i+1],
-                   myHist->nums->data.F32[i]);
-        }
-
-        psMemCheckCorruption(1);
-        psFree(myHist);
-        psMemCheckCorruption(1);
-        psFree(myBounds);
-
-        printFooter(stdout,
-                    "psStats functions",
-                    "Allocate the psHistogram structure.",
-                    testStatus);
-    }
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "Deallocate the psHistogram structure.");
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    printFooter(stdout,
-                "psStats functions",
-                "Deallocate the psHistogram structure.",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psMatrix01.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix01.c	(revision 4546)
+++ 	(revision )
@@ -1,131 +1,0 @@
-/** @file  tst_psMatrix_01.c
-*
-*  @brief Test driver for psMatrix transpose function
-*
-*  This test driver contains the following tests for psMatrix test point 1:
-*     A)  Create input and output images
-*     B)  Transpose input image into output image
-*     C)  Transpose input image into auto allocated NULL output image
-*     D)  Free images and check for leaks
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:42 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define TOLERANCE 0.000001
-
-#define CHECK_MATRIX(IMAGE)                                                                                  \
-for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
-    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
-        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
-            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
-                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
-            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
-                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psImage * tempImage = NULL;
-
-    double truthMatrix[3][3] = {{1, 4, 7},
-                                {2, 5, 8},
-                                {3, 6, 9}};
-
-    // Test A - Create input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
-    psImage *inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psImage *outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    inImage->data.F64[0][0] = 1;
-    inImage->data.F64[0][1] = 2;
-    inImage->data.F64[0][2] = 3;
-    inImage->data.F64[1][0] = 4;
-    inImage->data.F64[1][1] = 5;
-    inImage->data.F64[1][2] = 6;
-    inImage->data.F64[2][0] = 7;
-    inImage->data.F64[2][1] = 8;
-    inImage->data.F64[2][2] = 9;
-    psImage *inImageF32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
-    psImage *outImageF32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
-    inImageF32->data.F32[0][0] = 1;
-    inImageF32->data.F32[0][1] = 2;
-    inImageF32->data.F32[0][2] = 3;
-    inImageF32->data.F32[1][0] = 4;
-    inImageF32->data.F32[1][1] = 5;
-    inImageF32->data.F32[1][2] = 6;
-    inImageF32->data.F32[2][0] = 7;
-    inImageF32->data.F32[2][1] = 8;
-    inImageF32->data.F32[2][2] = 9;
-    printFooter(stdout, "psMatrix", "Create input and output images", true);
-
-
-    // Test B - Transpose input image into output image
-    printPositiveTestHeader(stdout, "psMatrix", "Transpose input image into output image");
-    tempImage = outImage;
-    outImage = psMatrixTranspose(outImage, inImage);
-    CHECK_MATRIX(outImage);
-    if (outImage->type.dimen != PS_DIMEN_IMAGE) {
-        printf( "Error: Resulting image is not PS_DIMEN_IMAGE\n");
-    } else if (outImage != tempImage) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-
-    tempImage = outImageF32;
-    outImageF32 = psMatrixTranspose(outImageF32, inImageF32);
-    CHECK_MATRIX(outImageF32);
-    if (outImageF32->type.dimen != PS_DIMEN_IMAGE) {
-        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
-    } else if (outImageF32 != tempImage) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-    printFooter(stdout, "psMatrix", "Transpose input image into output image", true);
-
-
-    // Test C - Transpose input image into auto allocated NULL output image
-    printPositiveTestHeader(stdout, "psMatrix", "Transpose input image into auto allocated NULL output image");
-    psImage *outImageNull = NULL;
-    outImageNull = psMatrixTranspose(outImageNull, inImage);
-    CHECK_MATRIX(outImageNull);
-
-    psImage *outImageNullF32 = NULL;
-    outImageNullF32 = psMatrixTranspose(outImageNullF32, inImageF32);
-    CHECK_MATRIX(outImageNullF32);
-    printFooter(stdout, "psMatrix", "Transpose input image into auto allocated NULL output image", true);
-
-
-    // Test D - Free images and check for leaks
-    printPositiveTestHeader(stdout, "psMatrix", "Free images and check for leaks");
-    psFree(inImage);
-    psFree(outImage);
-    psFree(outImageNull);
-    psFree(inImageF32);
-    psFree(outImageF32);
-    psFree(outImageNullF32);
-    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
-    if (nLeaks != 0) {
-        printf("ERROR: Found %d memory leaks\n", nLeaks);
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if (nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMatrix" , "Free images and check for leaks", true);
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrix02.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix02.c	(revision 4546)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/** @file  tst_psMatrix_02.c
- *
- *  @brief Test driver for negative tests for psMatrix transpose function
- *
- *  This test driver contains the following tests for psMatrix test point 2:
- *     A)  Input pointer same as output pointer
- *     B)  Null input psImage
- *     C)  Incorrect type for input pointer
- *     D)  Incorrect type for output pointer
- *     E)  Matrix not square for output pointer
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.7 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-psS32 main(psS32 argc,
-           char* argv[])
-{
-    psImage *nullImage = NULL;
-    psImage *inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psImage *outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psImage *badImage1 = (psImage*)psImageAlloc(3, 3, PS_TYPE_C32);
-    psImage *badImage2 = (psImage*)psImageAlloc(3, 2, PS_TYPE_F64);
-
-    // Test A - Input pointer same as output pointer
-    printPositiveTestHeader(stdout,"psMatrix", "Input pointer same as output pointer");
-    psMemIncrRefCounter(inImage);
-    if (psMatrixTranspose(inImage, inImage) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "inImage = outImage didn't results in NULL return");
-        return 1;
-    }
-    if (psMemGetRefCounter(inImage) != 1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "the output image was not freed on an error.");
-        return 2;
-    }
-    printFooter(stdout, "psMatrix", "Input pointer same as output pointer", true);
-
-    // Test B - Null input psImage
-    printPositiveTestHeader(stdout,"psMatrix", "Null input psImage");
-    psMemIncrRefCounter(outImage);
-    if (psMatrixTranspose(outImage, nullImage) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "inImage = outImage didn't results in NULL return");
-        return 3;
-    }
-    if (psMemGetRefCounter(outImage) != 1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "the output image was not freed on an error.");
-        return 4;
-    }
-    printFooter(stdout, "psMatrix", "Null input psImage", true);
-
-    // Test C - Incorrect type for input pointer
-    printPositiveTestHeader(stdout,"psMatrix", "Incorrect type for input pointer");
-    psMemIncrRefCounter(outImage);
-    if (psMatrixTranspose(outImage, badImage1) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "inImage = outImage didn't results in NULL return");
-        return 5;
-    }
-    if (psMemGetRefCounter(outImage) != 1) {
-        psError(PS_ERR_UNKNOWN, true,
-                "the output image was not freed on an error.");
-        return 6;
-    }
-    printFooter(stdout, "psMatrix", "Incorrect type for input pointer", true);
-
-    // Test D - Incorrect type for output pointer
-    printPositiveTestHeader(stdout,"psMatrix", "Incorrect type for output pointer");
-    badImage1 = psMatrixTranspose(badImage1, inImage);
-    if (badImage1 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,
-                "inImage = outImage didn't results in NULL return");
-        return 7;
-    }
-    // check that the type was changed.
-    if (badImage1->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN, true,
-                "the output image was not freed on an error.");
-        return 8;
-    }
-    printFooter(stdout, "psMatrix", "Incorrect type for output pointer", true);
-
-    // Test E - Matrix not square for output pointer
-    printPositiveTestHeader(stdout,"psMatrix", "Matrix not square for output pointer");
-    psMatrixTranspose(badImage2, inImage);
-    printFooter(stdout, "psMatrix", "Matrix not square for output pointer", true);
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrix03.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix03.c	(revision 4546)
+++ 	(revision )
@@ -1,234 +1,0 @@
-/** @file  tst_psMatrix_03.c
- *
- *  @brief Test driver for psMatrix LU functions
- *
- *  This test driver contains the following tests for psMatrix test point 3:
- *     A)  Create input and output images and vectors
- *     B)  Calculate LU matrix
- *     C)  Determine solution to matrix equation
- *     D)  Free input and output images and vectors
- *     E)  Attempt to use null image input argument
- *     F)  Attempt to use null input vector argument
- *     G)  ttempt to use null LU image argument
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define TOLERANCE 0.000001
-
-#define CHECK_MATRIX(IMAGE)                                                                                  \
-for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
-    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
-        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
-            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
-                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
-            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
-                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-#define CHECK_VECTOR(VECTOR)                                                                                 \
-for(psU32 i=0; i<VECTOR->n; i++) {                                                                       \
-    if(VECTOR->type.type == PS_TYPE_F64) {                                                               \
-        if(fabs(VECTOR->data.F64[i]-truthVector[i]) > TOLERANCE) {                                       \
-            printf("Vector values at element %d don't agree %lf vs %lf\n", i,                            \
-                   VECTOR->data.F64[i], truthVector[i]);                                                 \
-        }                                                                                                \
-    } else if(VECTOR->type.type == PS_TYPE_F32){                                                         \
-        if(fabs(VECTOR->data.F32[i]-truthVector[i]) > TOLERANCE) {                                       \
-            printf("Vector values at element %d don't agree %f vs %lf\n", i,                             \
-                   VECTOR->data.F32[i], truthVector[i]);                                                 \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psImage *luImage = NULL;
-    psImage *inImage = NULL;
-    psImage *tempImage = NULL;
-    psVector *tempVector = NULL;
-    psVector *perm = NULL;
-    psVector *outVector = NULL;
-    psVector *inVector = NULL;
-    psImage *luImage32 = NULL;
-    psImage *inImage32 = NULL;
-    psImage *tempImage32 = NULL;
-    psVector *tempVector32 = NULL;
-    psVector *perm32 = NULL;
-    psVector *outVector32 = NULL;
-    psVector *inVector32 = NULL;
-
-    double truthVector[3] = {
-                                4.000000,
-                                -2.000000,
-                                3.000000
-                            };
-
-    double truthMatrix[3][3] = {{4.000000,  5.000000,  6.000000},
-                                {0.750000, -2.750000, -6.500000},
-                                {0.500000, -0.545455, -0.545455}};
-
-
-    // Test A - Create input and output images and vectors
-    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images and vectors");
-    luImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    perm = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    outVector = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    inVector = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    inImage->data.F64[0][0] =  2;
-    inImage->data.F64[0][1] =  4;
-    inImage->data.F64[0][2] =  6;
-    inImage->data.F64[1][0] =  4;
-    inImage->data.F64[1][1] =  5;
-    inImage->data.F64[1][2] =  6;
-    inImage->data.F64[2][0] =  3;
-    inImage->data.F64[2][1] =  1;
-    inImage->data.F64[2][2] = -2;
-    inVector->data.F64[0] = 18.0;
-    inVector->data.F64[1] = 24.0;
-    inVector->data.F64[2] =  4.0;
-    inVector->n = 3;
-    luImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
-    outVector32 = (psVector*)psVectorAlloc(3, PS_TYPE_F32);
-    inVector32 = (psVector*)psVectorAlloc(3, PS_TYPE_F32);
-    inImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
-    inImage32->data.F32[0][0] =  2;
-    inImage32->data.F32[0][1] =  4;
-    inImage32->data.F32[0][2] =  6;
-    inImage32->data.F32[1][0] =  4;
-    inImage32->data.F32[1][1] =  5;
-    inImage32->data.F32[1][2] =  6;
-    inImage32->data.F32[2][0] =  3;
-    inImage32->data.F32[2][1] =  1;
-    inImage32->data.F32[2][2] = -2;
-    inVector32->data.F32[0] = 18.0;
-    inVector32->data.F32[1] = 24.0;
-    inVector32->data.F32[2] =  4.0;
-    inVector32->n = 3;
-    printFooter(stdout, "psMatrix", "Create input and output images and vectors", true);
-
-
-    // Test B - Calculate LU matrix
-    printPositiveTestHeader(stdout, "psMatrix", "Calculate LU matrix");
-    tempImage = luImage;
-    luImage = psMatrixLUD(luImage, &perm, inImage);
-    CHECK_MATRIX(luImage);
-    if(luImage->type.dimen != PS_DIMEN_IMAGE) {
-        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
-    } else if(luImage != tempImage) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-
-    tempImage32 = luImage32;
-    luImage32 = psMatrixLUD(luImage32, &perm32, inImage32);
-    CHECK_MATRIX(luImage32);
-    if(luImage32->type.dimen != PS_DIMEN_IMAGE) {
-        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
-    } else if(luImage32 != tempImage32) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-    printFooter(stdout, "psMatrix", "Calculate LU matrix", true);
-
-    // Test C - Determine solution to matrix equation
-    printPositiveTestHeader(stdout, "psMatrix", "Determine solution to matrix equation");
-    tempVector = outVector;
-    outVector = psMatrixLUSolve(outVector, luImage, inVector, perm);
-    CHECK_VECTOR(outVector);
-    if(outVector->type.dimen != PS_DIMEN_VECTOR) {
-        printf("Error: Resulting image is not PS_DIMEN_VECTOR\n");
-    } else if(outVector != tempVector) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-
-    tempVector32 = outVector32;
-    outVector32 = psMatrixLUSolve(outVector32, luImage32, inVector32, perm32);
-    CHECK_VECTOR(outVector32);
-    if(outVector32->type.dimen != PS_DIMEN_VECTOR) {
-        printf("Error: Resulting image is not PS_DIMEN_VECTOR\n");
-    } else if(outVector32 != tempVector32) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-    printFooter(stdout, "psMatrix", "Determine solution to matrix equation", true);
-
-
-    // Test D - Free input and output images and vectors
-    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images and vectors");
-    psFree(inImage);
-    psFree(luImage);
-    psFree(perm);
-    psFree(outVector);
-    psFree(inVector);
-    psFree(inImage32);
-    psFree(luImage32);
-    psFree(perm32);
-    psFree(outVector32);
-    psFree(inVector32);
-    if( psMemCheckLeaks(0, NULL, stdout, false) ) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected");
-        return 10;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMatrix" ,"Free input and output images and vectors", true);
-
-
-    // Test E - Attempt to use null image input argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null image input argument",
-                            "Invalid operation: inImage or its data is NULL.", 0);
-    psImage *imageTest = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psMatrixLUD(imageTest, NULL, NULL);
-    printFooter(stdout, "psMatrix", "Attempt to use null image input argument", true);
-
-
-    // Test F - Attempt to use null input vector argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input vector argument",
-                            "Invalid operation: inVector or its data is NULL.", 0);
-    psVector *vectorBad = NULL;
-    psVector *vectorBadOut = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    psVector *permBad = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    imageTest = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psMatrixLUSolve(vectorBadOut, imageTest, vectorBad, permBad);
-    printFooter(stdout, "psMatrix", "Attempt to use null input vector argument", true);
-
-
-    // Test G - Attempt to use null LU image argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null LU image argument",
-                            "Invalid operation: inImage or its data is NULL.", 0);
-    vectorBadOut = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    psMatrixLUSolve(vectorBadOut, NULL, vectorBad, permBad);
-    printFooter(stdout, "psMatrix", "Attempt to use null LU image argument", true);
-
-    psFree(permBad);
-    psFree(imageTest);
-
-    if( psMemCheckLeaks(0, NULL, stdout, false) ) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected");
-        return 10;
-    }
-    nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrix04.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix04.c	(revision 4546)
+++ 	(revision )
@@ -1,163 +1,0 @@
-/** @file  tst_psMatrix_04.c
- *
- *  @brief Test driver for psMatrix invert function
- *
- *  This test driver contains the following tests for psMatrix test point 4:
- *     A)  Create input and output images
- *     B)  Invert matrix and calculate determinant
- *     C)  Calculate determinant only
- *     D)  Free input and output images
- *     E)  Attempt to use null input image argument
- *     F)  Attempt to use null input float argument
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-
-#define TOLERANCE 0.000001
-
-#define CHECK_MATRIX(IMAGE)                                                                                  \
-for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
-    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
-        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
-            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
-                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
-            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
-                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-#define CHECK_VALUE(VALUE)                                                                                   \
-if(fabs(VALUE-truthValue) > TOLERANCE) {                                                                     \
-    printf("Values don't agree %lf vs %lf\n", VALUE, truthValue);                                            \
-}
-
-psS32 main(psS32 argc, char* argv[])
-{
-    float det = 0.0f;
-    float *det2 = NULL;
-    psImage *outImage = NULL;
-    psImage *inImage = NULL;
-    psImage *tempImage = NULL;
-    psImage *outImage32 = NULL;
-    psImage *inImage32 = NULL;
-    psImage *tempImage32 = NULL;
-
-    double truthMatrix[3][3] = {{4.0000000, -4.333333, -2.333333},
-                                {-1.000000,  1.666667,  0.666667},
-                                {-1.000000,  0.666667,  0.666667}};
-    double truthValue = 3.0;
-
-
-    // Test A - Create input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
-    outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    inImage->data.F64[0][0] =  2;
-    inImage->data.F64[0][1] =  4;
-    inImage->data.F64[0][2] =  3;
-    inImage->data.F64[1][0] =  0;
-    inImage->data.F64[1][1] =  1;
-    inImage->data.F64[1][2] = -1;
-    inImage->data.F64[2][0] =  3;
-    inImage->data.F64[2][1] =  5;
-    inImage->data.F64[2][2] =  7;
-
-    outImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
-    inImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
-    inImage32->data.F32[0][0] =  2;
-    inImage32->data.F32[0][1] =  4;
-    inImage32->data.F32[0][2] =  3;
-    inImage32->data.F32[1][0] =  0;
-    inImage32->data.F32[1][1] =  1;
-    inImage32->data.F32[1][2] = -1;
-    inImage32->data.F32[2][0] =  3;
-    inImage32->data.F32[2][1] =  5;
-    inImage32->data.F32[2][2] =  7;
-    printFooter(stdout, "psMatrix", "Create input and output images", true);
-
-
-    // Test B - Invert matrix and calculate determinant
-    printPositiveTestHeader(stdout, "psMatrix", "Invert matrix and calculate determinant");
-    tempImage = outImage;
-    outImage = psMatrixInvert(outImage, inImage, &det);
-    CHECK_MATRIX(outImage);
-    CHECK_VALUE(det);
-    if(outImage->type.dimen != PS_DIMEN_IMAGE) {
-        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
-    } else if(outImage != tempImage) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-    det = 0.0f;
-    tempImage32 = outImage32;
-    outImage32 = psMatrixInvert(outImage32, inImage32, &det);
-    CHECK_MATRIX(outImage32);
-    CHECK_VALUE(det);
-    if(outImage32->type.dimen != PS_DIMEN_IMAGE) {
-        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
-    } else if(outImage32 != tempImage32) {
-        printf("Error: Return pointer not equal to output argument pointer\n");
-    }
-    printFooter(stdout, "psMatrix", "Invert matrix and calculate determinant", true);
-
-
-    // Test C - Calculate determinant only
-    printPositiveTestHeader(stdout, "psMatrix", "Calculate determinant only");
-    det2 = psMatrixDeterminant(inImage);
-    CHECK_VALUE(*det2);
-    psFree(det2);
-    det2 = psMatrixDeterminant(inImage32);
-    CHECK_VALUE(*det2);
-    psFree(det2);
-    printFooter(stdout, "psMatrix", "Calculate determinant only", true);
-
-
-    // Test D - Free input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images");
-    psFree(outImage);
-    psFree(inImage);
-    psFree(outImage32);
-    psFree(inImage32);
-    if(psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-        return 10;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMatrix" ,"Free input and output images", true);
-
-
-    // Test E - Attempt to use null input image argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input image argument",
-                            "Invalid operation: inImage or its data is NULL.", 0);
-    psImage *badOutImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psMatrixInvert(badOutImage, NULL, &det);
-    printFooter(stdout, "psMatrix", "Attempt to use null input image argument", true);
-
-
-    // Test F - Attempt to use null input float argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input float argument",
-                            "Invalid operation: determinant argument is NULL.", 0);
-    psImage *badInImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
-    psMatrixInvert(badOutImage, badInImage, NULL);
-    printFooter(stdout, "psMatrix", "Attempt to use null input float argument", true);
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrix05.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix05.c	(revision 4546)
+++ 	(revision )
@@ -1,118 +1,0 @@
-/** @file  tst_psMatrix_05.c
-*
-*  @brief Test driver for psMatrix multiplication function
-*
-*  This test driver contains the following tests for psMatrix test point 5:
-*     A)  Create input and output images
-*     B)  Multiply images
-*     C)  Free input and output images
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.10 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-06-08 22:28:08 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define TOLERANCE 0.000001
-
-#define CHECK_MATRIX(IMAGE)                                                                                  \
-for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
-    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
-        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
-            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
-                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
-            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
-                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-
-psS32 main( psS32 argc,
-            char* argv[] )
-{
-    psImage * outImage = NULL;
-    psImage *inImage1 = NULL;
-    psImage *inImage2 = NULL;
-    psImage * outImage32 = NULL;
-    psImage *inImage132 = NULL;
-    psImage *inImage232 = NULL;
-
-    double truthMatrix[3][3] = {{  0.0, 52.0},
-                                {-14.0, 51.0}};
-
-    // Test A - Create input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
-    outImage = (psImage*) psImageAlloc(2, 2, PS_TYPE_F64);
-    inImage1 = (psImage*) psImageAlloc(3, 2, PS_TYPE_F64);
-    inImage2 = (psImage*) psImageAlloc(2, 3, PS_TYPE_F64);
-    inImage1->data.F64[0][0] = 2;
-    inImage1->data.F64[0][1] = 3;
-    inImage1->data.F64[0][2] = 4;
-    inImage1->data.F64[1][0] = -1;
-    inImage1->data.F64[1][1] = 2;
-    inImage1->data.F64[1][2] = 5;
-    inImage2->data.F64[0][0] = 4;
-    inImage2->data.F64[0][1] = 1;
-    inImage2->data.F64[1][0] = 0;
-    inImage2->data.F64[1][1] = 6;
-    inImage2->data.F64[2][0] = -2;
-    inImage2->data.F64[2][1] = 8;
-    outImage32 = (psImage*)psImageAlloc(2, 2, PS_TYPE_F32);
-    inImage132 = (psImage*)psImageAlloc(3, 2, PS_TYPE_F32);
-    inImage232 = (psImage*)psImageAlloc(2, 3, PS_TYPE_F32);
-    inImage132->data.F32[0][0] = 2;
-    inImage132->data.F32[0][1] = 3;
-    inImage132->data.F32[0][2] = 4;
-    inImage132->data.F32[1][0] = -1;
-    inImage132->data.F32[1][1] = 2;
-    inImage132->data.F32[1][2] = 5;
-    inImage232->data.F32[0][0] = 4;
-    inImage232->data.F32[0][1] = 1;
-    inImage232->data.F32[1][0] = 0;
-    inImage232->data.F32[1][1] = 6;
-    inImage232->data.F32[2][0] = -2;
-    inImage232->data.F32[2][1] = 8;
-    printFooter( stdout, "psMatrix", "Create input and output images", true );
-
-
-    // Test B - Multiply images
-    printPositiveTestHeader(stdout, "psMatrix", "Multiply images");
-    psMatrixMultiply(outImage, inImage1, inImage2);
-    CHECK_MATRIX(outImage);
-    psMatrixMultiply(outImage32, inImage132, inImage232);
-    CHECK_MATRIX(outImage32);
-    printFooter(stdout, "psMatrix", "Multiply images", true);
-
-
-    // Test C - Free input and output images
-    printPositiveTestHeader( stdout, "psMatrix", "Free input and output images" );
-    psFree(outImage);
-    psFree(inImage1);
-    psFree(inImage2);
-    psFree(outImage32);
-    psFree(inImage132);
-    psFree(inImage232);
-    psS32 nLeaks = psMemCheckLeaks( 0, NULL, stdout, false );
-    if ( nLeaks != 0 ) {
-        printf( "ERROR: Found %d memory leaks\n", nLeaks );
-    }
-    psS32 nBad = psMemCheckCorruption( 0 );
-    if ( nBad ) {
-        printf( "ERROR: Found %d bad memory blocks\n", nBad );
-    }
-    printFooter( stdout, "psMatrix" , "Free input and output images", true );
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrix06.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix06.c	(revision 4546)
+++ 	(revision )
@@ -1,124 +1,0 @@
-/** @file  tst_psMatrix_06.c
-*
-*  @brief Test driver for psMatrix Eigenvectors function
-*
-*  This test driver contains the following tests for psMatrix test point 6:
-*     A)  Create input and output images
-*     B)  Calculate Eigenvectors
-*     C)  Free input and output images
-*
-*  @author  Ross Harman, MHPCC
-*
-*  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-04-07 20:27:42 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define TOLERANCE 0.000001
-
-#define CHECK_MATRIX(IMAGE)                                                                                  \
-for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
-    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
-        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
-            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
-                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
-            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
-                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
-                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
-            }                                                                                            \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psImage * outImage = NULL;
-    psImage *inImage = NULL;
-    psImage * outImage32 = NULL;
-    psImage *inImage32 = NULL;
-
-    double truthMatrix[4][4] = {{0.792608,  0.582076, -0.179186, -0.029193},
-                                {0.451923, -0.370502,  0.741918,  0.328712},
-                                {0.322416, -0.509579, -0.100228, -0.791411},
-                                {0.252161, -0.514048, -0.638283,  0.514553}};
-
-
-    // Test A - Create input and output images
-    printPositiveTestHeader( stdout, "psMatrix", "Create input and output images" );
-    outImage = (psImage*) psImageAlloc(4, 4, PS_TYPE_F64);
-    inImage = (psImage*)  psImageAlloc(4, 4, PS_TYPE_F64);
-
-    inImage->data.F64[0][0] = 1./1.;
-    inImage->data.F64[0][1] = 1./2.;
-    inImage->data.F64[0][2] = 1./3.;
-    inImage->data.F64[0][3] = 1./4.;
-    inImage->data.F64[1][0] = 1./2.;
-    inImage->data.F64[1][1] = 1./3.;
-    inImage->data.F64[1][2] = 1./4.;
-    inImage->data.F64[1][3] = 1./5.;
-    inImage->data.F64[2][0] = 1./3.;
-    inImage->data.F64[2][1] = 1./4.;
-    inImage->data.F64[2][2] = 1./5.;
-    inImage->data.F64[2][3] = 1./6.;
-    inImage->data.F64[3][0] = 1./4.;
-    inImage->data.F64[3][1] = 1./5.;
-    inImage->data.F64[3][2] = 1./6.;
-    inImage->data.F64[3][3] = 1./7.;
-
-    outImage32 = (psImage*) psImageAlloc(4, 4, PS_TYPE_F32);
-    inImage32 = (psImage*)  psImageAlloc(4, 4, PS_TYPE_F32);
-    inImage32->data.F32[0][0] = 1./1.;
-    inImage32->data.F32[0][1] = 1./2.;
-    inImage32->data.F32[0][2] = 1./3.;
-    inImage32->data.F32[0][3] = 1./4.;
-    inImage32->data.F32[1][0] = 1./2.;
-    inImage32->data.F32[1][1] = 1./3.;
-    inImage32->data.F32[1][2] = 1./4.;
-    inImage32->data.F32[1][3] = 1./5.;
-    inImage32->data.F32[2][0] = 1./3.;
-    inImage32->data.F32[2][1] = 1./4.;
-    inImage32->data.F32[2][2] = 1./5.;
-    inImage32->data.F32[2][3] = 1./6.;
-    inImage32->data.F32[3][0] = 1./4.;
-    inImage32->data.F32[3][1] = 1./5.;
-    inImage32->data.F32[3][2] = 1./6.;
-    inImage32->data.F32[3][3] = 1./7.;
-    printFooter(stdout, "psMatrix", "Create input and output images", true);
-
-
-    // Test B - Calculate Eigenvectors
-    printPositiveTestHeader(stdout, "psMatrix", "Calculate Eigenvectors");
-    psMatrixEigenvectors(outImage, inImage);
-    CHECK_MATRIX(outImage);
-    psMatrixEigenvectors(outImage32, inImage32);
-    CHECK_MATRIX(outImage32);
-    printFooter(stdout, "psMatrix", "Calculate Eigenvectors", true);
-
-
-    // Test C - Free input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images");
-    psFree(outImage);
-    psFree(inImage);
-    psFree(outImage32);
-    psFree(inImage32);
-    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
-    if (nLeaks != 0) {
-        printf("ERROR: Found %d memory leaks\n", nLeaks);
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if (nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMatrix" , "Free input and output images", true);
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrix07.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrix07.c	(revision 4546)
+++ 	(revision )
@@ -1,313 +1,0 @@
-/** @file  tst_psMatrix_07.c
- *
- *  @brief Test driver for psMatrix vector conversion functions
- *
- *  This test driver contains the following tests for psMatrix test point 7:
- *     A)  Create input and output images and vectors
- *     B)  Convert matrix to PS_DIMEN_VECTOR vector
- *     C)  Attempt to use null image input argument
- *     D)  Convert matrix to PS_DIMEN_TRANSV vector
- *     E)  Improper image size
- *     F)  Convert PS_DIMEN_VECTOR vector to matrix
- *     G)  Attempt to use null input vector argument
- *     H)  Convert PS_DIMEN_TRANSV vector to matrix
- *     I)  Free input and output images and vectors
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.12 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-
-#define TOLERANCE 0.000001
-
-#define CHECK_MATRIX(IMAGE,TRUTH)                                                                        \
-for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
-    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
-        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
-            if(fabs(IMAGE->data.F64[i][j]-TRUTH[i][j]) > TOLERANCE) {                                    \
-                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
-                       IMAGE->data.F64[i][j], TRUTH[i][j]);                                              \
-            }                                                                                            \
-        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
-            if(fabs(IMAGE->data.F32[i][j]-TRUTH[i][j]) > TOLERANCE) {                                    \
-                printf("Matrix values at element %d, %d don't agree %f vs %f\n", i, j,                  \
-                       IMAGE->data.F32[i][j], TRUTH[i][j]);                                              \
-            }                                                                                            \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-#define CHECK_VECTOR(VECTOR)                                                                                 \
-for(psU32 i=0; i<VECTOR->n; i++) {                                                                       \
-    if(VECTOR->type.type == PS_TYPE_F64) {                                                               \
-        if(fabs(VECTOR->data.F64[i]-truthVector[i]) > TOLERANCE) {                                       \
-            printf("Vector values at element %d don't agree %lf vs %lf\n", i,                            \
-                   VECTOR->data.F64[i], truthVector[i]);                                                 \
-        }                                                                                                \
-    } else if(VECTOR->type.type == PS_TYPE_F32){                                                         \
-        if(fabs(VECTOR->data.F32[i]-truthVector_32[i]) > TOLERANCE) {                                       \
-            printf("Vector values at element %d don't agree %f vs %lf\n", i,                             \
-                   VECTOR->data.F32[i], truthVector[i]);                                                 \
-        }                                                                                                \
-    }                                                                                                    \
-}
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psVector *v1 = NULL;
-    psVector *v1_32 = NULL;
-    psVector *tempVector = NULL;
-    psVector *tempVector_32 = NULL;
-    psImage *tempImage = NULL;
-    psImage *tempImage_32 = NULL;
-    psImage *m1 = NULL;
-    psImage *m1_32 = NULL;
-    psVector *v2 = NULL;
-    psVector *v2_32 = NULL;
-    psVector *v3 = NULL;
-    psVector *v3_32 = NULL;
-    psImage *m2 = NULL;
-    psImage *m2_32 = NULL;
-    psImage *m3 = NULL;
-    psImage *m3_32 = NULL;
-    psImage *m4 = NULL;
-    psImage *m4_32 = NULL;
-    psImage *badImage = NULL;
-    psImage *badImage_32 = NULL;
-
-    psF64 truthVector[3] = {0.0, 1.0, 2.0};
-    psF32 truthVector_32[3] = {0.0, 1.0, 2.0};
-    psF64 truthMatrix[3][1] = {{0.0}, {1.0}, {2.0}};
-    psF32 truthMatrix_32[3][1] = {{0.0}, {1.0}, {2.0}};
-
-    // Test A - Create input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images and vectors");
-    v1 = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    v1_32 = (psVector*)psVectorAlloc(3, PS_TYPE_F32);
-    m1 = (psImage*)psImageAlloc(1, 3, PS_TYPE_F64);
-    m1_32 = (psImage*)psImageAlloc(1,3,PS_TYPE_F32);
-    v2 = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
-    v2_32 = (psVector*)psVectorAlloc(3,PS_TYPE_F32);
-    m2 = (psImage*)psImageAlloc(1, 3, PS_TYPE_F64);
-    m2_32 = (psImage*)psImageAlloc(1,3,PS_TYPE_F32);
-    m3 = (psImage*)psImageAlloc(3, 1, PS_TYPE_F64);
-    m3_32 = (psImage*)psImageAlloc(3,1,PS_TYPE_F32);
-    m4 = (psImage*)psImageAlloc(3, 1, PS_TYPE_F64);
-    m4_32 = (psImage*)psImageAlloc(3,1,PS_TYPE_F32);
-    badImage = (psImage*)psImageAlloc(2, 2, PS_TYPE_F64);
-    badImage_32 = (psImage*)psImageAlloc(2,2,PS_TYPE_F32);
-    m1->data.F64[0][0] = 0.0;
-    m1->data.F64[1][0] = 1.0;
-    m1->data.F64[2][0] = 2.0;
-    m1_32->data.F32[0][0] = 0.0;
-    m1_32->data.F32[1][0] = 1.0;
-    m1_32->data.F32[2][0] = 2.0;
-    v2->data.F64[0] = 0.0;
-    v2->data.F64[1] = 1.0;
-    v2->data.F64[2] = 2.0;
-    v2->n = 3;
-    v2_32->data.F32[0] = 0.0;
-    v2_32->data.F32[1] = 1.0;
-    v2_32->data.F32[2] = 2.0;
-    v2_32->n = 3;
-    m4->data.F64[0][0] = 0.0;
-    m4->data.F64[0][1] = 1.0;
-    m4->data.F64[0][2] = 2.0;
-    m4_32->data.F32[0][0] = 0.0;
-    m4_32->data.F32[0][1] = 1.0;
-    m4_32->data.F32[0][2] = 2.0;
-    printFooter(stdout, "psMatrix", "Create input and output images and vectors", true);
-
-    // Test B - Convert matrix to PS_DIMEN_VECTOR vector
-    printPositiveTestHeader(stdout, "psMatrix", "Convert matrix to PS_DIMEN_VECTOR vector");
-    tempVector = v1;
-    v1 = psMatrixToVector(v1, m1);
-    CHECK_VECTOR(v1);
-    if(v1->type.dimen != PS_DIMEN_VECTOR) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_VECTOR");
-        return 1;
-    } else if(v1 != tempVector) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 2;
-    }
-    tempVector_32 = v1_32;
-    v1_32 = psMatrixToVector(v1_32, m1_32);
-    CHECK_VECTOR(v1_32);
-    if(v1_32->type.dimen != PS_DIMEN_VECTOR) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_VECTOR");
-        return 1;
-    } else if(v1_32 != tempVector_32) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 2;
-    }
-    printFooter(stdout, "psMatrix", "Convert matrix to PS_DIMEN_VECTOR vector", true);
-
-
-    // Test C - Attempt to use null image input argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null image input argument",
-                            "Invalid operation: inImage or its data is NULL.", 0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error.");
-    v1 = psMatrixToVector(v1, NULL);
-    if(v1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input");
-        return 3;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error.");
-    v1_32 = psMatrixToVector(v1_32, NULL);
-    if(v1_32 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input");
-        return 3;
-    }
-    printFooter(stdout, "psMatrix", "Attempt to use null image input argument", true);
-
-
-    // Test D - Convert matrix to PS_DIMEN_TRANSV vector
-    printPositiveTestHeader(stdout, "psMatrix", "Convert matrix to PS_DIMEN_TRANSV vector");
-    v3 = psVectorAlloc(3, PS_TYPE_F64);
-    tempVector = v3;
-    v3->type.dimen = PS_DIMEN_TRANSV;
-    psMatrixToVector(v3, m4);
-    CHECK_VECTOR(v3);
-    if(v3->type.dimen != PS_DIMEN_TRANSV) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_TRANSV");
-        return 4;
-    } else if(v3 != tempVector) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 5;
-    }
-    v3_32 = psVectorAlloc(3, PS_TYPE_F32);
-    tempVector_32 = v3_32;
-    v3_32->type.dimen = PS_DIMEN_TRANSV;
-    psMatrixToVector(v3_32, m4_32);
-    CHECK_VECTOR(v3_32);
-    if(v3_32->type.dimen != PS_DIMEN_TRANSV) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_TRANSV");
-        return 6;
-    } else if(v3_32 != tempVector_32) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 7;
-    }
-    printFooter(stdout, "psMatrix", "Convert matrix to PS_DIMEN_TRANSV vector", true);
-
-
-    // Test E - Improper image size
-    printNegativeTestHeader(stdout,"psMatrix", "Improper image size",
-                            "Image does not have dim with 1 col or 1 row: (2 x 2).", 0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    if(psMatrixToVector(v1, badImage) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with improper sizes");
-        return 8;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    if(psMatrixToVector(v1_32, badImage_32) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with improper sizes");
-        return 9;
-    }
-    printFooter(stdout, "psMatrix", "Improper image size", true);
-
-
-    // Test F - Convert PS_DIMEN_VECTOR vector to matrix
-    printPositiveTestHeader(stdout, "psMatrix", "Convert PS_DIMEN_VECTOR vector to matrix");
-    tempImage = m2;
-    m2 = psVectorToMatrix(m2, v2);
-    CHECK_MATRIX(m2,truthMatrix);
-    if(m2->type.dimen != PS_DIMEN_IMAGE) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
-        return 10;
-    } else if(m2 != tempImage) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 11;
-    }
-    tempImage_32 = m2_32;
-    m2_32 = psVectorToMatrix(m2_32, v2_32);
-    CHECK_MATRIX(m2_32,truthMatrix_32);
-    if(m2_32->type.dimen != PS_DIMEN_IMAGE) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
-        return 10;
-    } else if(m2_32 != tempImage_32) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 11;
-    }
-    printFooter(stdout, "psMatrix", "Convert PS_DIMEN_VECTOR vector to matrix", true);
-
-
-    // Test G - Attempt to use null input vector argument
-    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input vector argument",
-                            "Invalid operation: inVector or its data is NULL.", 0);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    if(psVectorToMatrix(m2, NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return output image");
-        return 12;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    if(psVectorToMatrix(m2_32, NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return output image");
-        return 13;
-    }
-    printFooter(stdout, "psMatrix", "Attempt to use null input vector argument", true);
-
-
-    // Test H - Convert PS_DIMEN_TRANSV vector to matrix
-    printPositiveTestHeader(stdout, "psMatrix", "Convert PS_DIMEN_TRANSV vector to matrix");
-    v2->type.dimen = PS_DIMEN_TRANSV;
-    tempImage = m3;
-    psVectorToMatrix(m3, v2);
-    CHECK_MATRIX(m3, truthMatrix);
-    if(m3->type.dimen != PS_DIMEN_IMAGE) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
-        return 14;
-    } else if(m3 != tempImage) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 15;
-    }
-    v2_32->type.dimen = PS_DIMEN_TRANSV;
-    tempImage_32 = m3_32;
-    psVectorToMatrix(m3_32, v2_32);
-    CHECK_MATRIX(m3_32, truthMatrix_32);
-    if(m3_32->type.dimen != PS_DIMEN_IMAGE) {
-        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
-        return 16;
-    } else if(m3_32 != tempImage_32) {
-        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
-        return 17;
-    }
-    printFooter(stdout, "psMatrix", "Convert PS_DIMEN_TRANSV vector to matrix", true);
-
-
-    // Test I - Free input and output images
-    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images and vectors");
-    psFree(m1);
-    psFree(v1);
-    psFree(v2);
-    psFree(v3);
-    psFree(m3);
-    psFree(m4);
-    psFree(m1_32);
-    psFree(v1_32);
-    psFree(v2_32);
-    psFree(v3_32);
-    psFree(m3_32);
-    psFree(m4_32);
-    psFree(badImage);
-    psFree(badImage_32);
-    if( psMemCheckLeaks(0, NULL, stdout, false) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-        return 10;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        printf("ERROR: Found %d bad memory blocks\n", nBad);
-    }
-    printFooter(stdout, "psMatrix" ,"Free input and output images and vectors", true);
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/tst_psMatrixVectorArithmetic01.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrixVectorArithmetic01.c	(revision 4546)
+++ 	(revision )
@@ -1,205 +1,0 @@
-/** @file  tst_psMatrixVectorArithmetic01.c
- *
- *  @brief Test driver for psMatrixVector arithmetic functions
- *
- *  This test driver tests combinations of matrix, vector, and scalar binary operations including:
- *     Matrix-matrix with +,-,*,/ with S32, F32, F64, C32
- *     Matrix-vector with +,-,*,/ with S32, F32, F64, C32
- *     Matrix-scalar with +,-,*,/ with S32, F32, F64, C32
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define PRINT_SCALAR(SCALAR,TYPE)                                                                            \
-if(PS_IS_PSELEMTYPE_COMPLEX(SCALAR->type.type)) {                                                        \
-    printf("%f+%fi ", creal(SCALAR->data.TYPE), cimag(SCALAR->data.TYPE));                               \
-} else if(PS_IS_PSELEMTYPE_INT(SCALAR->type.type)) {                                                     \
-    printf("%d ", (psS32)SCALAR->data.TYPE);                                                               \
-} else {                                                                                                 \
-    printf("%f ", (double)SCALAR->data.TYPE);                                                            \
-}                                                                                                        \
-printf("\n\n");
-
-#define PRINT_VECTOR(VECTOR,TYPE)                                                                            \
-for(psS32 i=0; i<VECTOR->n; i++) {                                                                         \
-    if(PS_IS_PSELEMTYPE_COMPLEX(VECTOR->type.type)) {                                                    \
-        printf("%f+%fi ", creal(VECTOR->data.TYPE[i]), cimag(VECTOR->data.TYPE[i]));                     \
-    } else if(PS_IS_PSELEMTYPE_INT(VECTOR->type.type)) {                                                 \
-        printf("%d ", (psS32)VECTOR->data.TYPE[i]);                                                        \
-    } else {                                                                                             \
-        printf("%f ", (double)VECTOR->data.TYPE[i]);                                                     \
-    }                                                                                                    \
-}                                                                                                        \
-printf("\n\n");
-
-
-#define PRINT_MATRIX(IMAGE,TYPE)                                                                             \
-for(psS32 i=IMAGE->numRows-1; i>-1; i--) {                                                                 \
-    for(psS32 j=0; j<IMAGE->numCols; j++) {                                                                \
-        if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                 \
-            printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j]));             \
-        } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                              \
-            printf("%d ", (psS32)IMAGE->data.TYPE[i][j]);                                                  \
-        } else {                                                                                         \
-            printf("%f ", (double)IMAGE->data.TYPE[i][j]);                                               \
-        }                                                                                                \
-    }                                                                                                    \
-    printf("\n");                                                                                        \
-}                                                                                                        \
-printf("\n");
-
-
-#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE)                                                          \
-psVector *NAME = (psVector*)psVectorAlloc(SIZE, PS_TYPE_##TYPE);                                         \
-for(psS32 i=0; i<SIZE; i++) {                                                                              \
-    NAME->data.TYPE[i] = VALUE;                                                                          \
-}                                                                                                        \
-NAME->n = SIZE;
-
-
-#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS)                                                    \
-psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE);                                      \
-for(psS32 i=0; i<NAME->numRows; i++) {                                                                     \
-    for(psS32 j=0; j<NAME->numCols; j++) {                                                                 \
-        NAME->data.TYPE[i][j] = VALUE;                                                                   \
-    }                                                                                                    \
-}
-
-
-#define CHECK_MEMORY                                                                                     \
-if(psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {                                                             \
-    psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");                                                \
-    return 10;                                                                                            \
-}                                                                                                        \
-psS32 nBad = psMemCheckCorruption(0);                                                                    \
-if(nBad) {                                                                                               \
-    printf("ERROR: Found %d bad memory blocks\n", nBad);                                                 \
-}
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-
-    // Test matrix-matrix binary operations
-    #define testBinaryOpMM(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS)                                                \
-    {                                                                                                        \
-        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix-matrix psBinaryOp");        \
-        printf("Operation: %s\n", #OP);                                                                      \
-        CREATE_AND_SET_IMAGE(inImage,TYPE,VALUE1,NROWS,NCOLS);                                               \
-        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE2,NROWS,NCOLS);                                              \
-        printf("Input:\n");                                                                                  \
-        PRINT_MATRIX(inImage,TYPE);                                                                          \
-        PRINT_MATRIX(outImage,TYPE);                                                                         \
-        outImage = (psImage*)psBinaryOp(outImage, inImage, #OP, outImage);                                   \
-        printf("Output:\n");                                                                                 \
-        PRINT_MATRIX(outImage,TYPE);                                                                         \
-        psFree(inImage);                                                                                     \
-        psFree(outImage);                                                                                    \
-        CHECK_MEMORY;                                                                                        \
-        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix-matrix psBinaryOp", true);              \
-    }
-
-    testBinaryOpMM(+,S32,10,10,3,2);
-    testBinaryOpMM(+,F32,10.0,10.0,3,2);
-    testBinaryOpMM(+,F64,10.0,10.0,3,2);
-    testBinaryOpMM(+,C32,10.0+10.0i,10.0+10.0i,3,2);
-    testBinaryOpMM(-,S32,20,10,3,2);
-    testBinaryOpMM(-,F32,20.0,10.0,3,2);
-    testBinaryOpMM(-,F64,20.0,10.0,3,2);
-    testBinaryOpMM(*,C32,20.0+20.0i,10.0+10.0i,3,2);
-    testBinaryOpMM(*,S32,20,10,3,2);
-    testBinaryOpMM(*,F32,20.0,10.0,3,2);
-    testBinaryOpMM(*,F64,20.0,10.0,3,2);
-    testBinaryOpMM(*,C32,20.0+20.0i,10.0+10.0i,3,2);
-    testBinaryOpMM(/,C32,20.0+20.0i,10.0+10.0i,3,2);
-    testBinaryOpMM(/,S32,20,10,3,2);
-    testBinaryOpMM(/,F32,20.0,10.0,3,2);
-    testBinaryOpMM(/,F64,20.0,10.0,3,2);
-    testBinaryOpMM(/,C32,20.0+20.0i,10.0+10.0i,3,2);
-
-    // Test Matrix-Vector binary operations
-    #define testBinaryOpMV(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS)                                                \
-    {                                                                                                        \
-        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix-vector psBinaryOp");        \
-        printf("Operation: %s\n", #OP);                                                                      \
-        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE1,NROWS,NCOLS);                                              \
-        CREATE_AND_SET_VECTOR(inVector,TYPE,VALUE2,NROWS);                                                   \
-        printf("Input:\n");                                                                                  \
-        PRINT_MATRIX(outImage,TYPE);                                                                         \
-        PRINT_VECTOR(inVector,TYPE);                                                                         \
-        outImage = (psImage*)psBinaryOp(outImage, outImage, #OP, inVector);                                  \
-        printf("Output:\n");                                                                                 \
-        PRINT_MATRIX(outImage,TYPE);                                                                         \
-        psFree(inVector);                                                                                    \
-        psFree(outImage);                                                                                    \
-        CHECK_MEMORY;                                                                                        \
-        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix-vector psBinaryOp", true);              \
-    }
-
-    testBinaryOpMV(+,S32,10,5,3,2);
-    testBinaryOpMV(+,F32,10.0,5.0,3,2);
-    testBinaryOpMV(+,F64,10.0,5.0,3,2);
-    testBinaryOpMV(+,C32,10.0+10.0i,5.0+5.0i,3,2);
-    testBinaryOpMV(-,S32,20,5,3,2);
-    testBinaryOpMV(-,F32,20.0,5.0,3,2);
-    testBinaryOpMV(-,F64,20.0,5.0,3,2);
-    testBinaryOpMV(*,C32,20.0+20.0i,5.0+5.0i,3,2);
-    testBinaryOpMV(*,S32,20,5,3,2);
-    testBinaryOpMV(*,F32,20.0,5.0,3,2);
-    testBinaryOpMV(*,F64,20.0,5.0,3,2);
-    testBinaryOpMV(*,C32,20.0+20.0i,5.0+5.0i,3,2);
-    testBinaryOpMV(/,C32,20.0+20.0i,5.0+5.0i,3,2);
-    testBinaryOpMV(/,S32,20,5,3,2);
-    testBinaryOpMV(/,F32,20.0,5.0,3,2);
-    testBinaryOpMV(/,F64,20.0,5.0,3,2);
-    testBinaryOpMV(/,C32,20.0+20.0i,5.0+5.0i,3,2);
-
-    // Test Matrix-Scalar binary operations
-    #define testBinaryOpMS(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS)                                                \
-    {                                                                                                        \
-        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix-scalar psBinaryOp");        \
-        printf("Operation: %s\n", #OP);                                                                      \
-        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE1,NROWS,NCOLS);                                              \
-        psScalar *inScalar = (psScalar*)psScalarAlloc(VALUE2,PS_TYPE_##TYPE);                                \
-        printf("Input:\n");                                                                                  \
-        PRINT_MATRIX(outImage,TYPE);                                                                         \
-        PRINT_SCALAR(inScalar,TYPE);                                                                         \
-        outImage = (psImage*)psBinaryOp(outImage, outImage, #OP, psScalarCopy(inScalar));                    \
-        printf("Output:\n");                                                                                 \
-        PRINT_MATRIX(outImage,TYPE);                                                                         \
-        psFree(inScalar);                                                                                    \
-        psFree(outImage);                                                                                    \
-        CHECK_MEMORY;                                                                                        \
-        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix-scalar psBinaryOp", true);              \
-    }
-
-    testBinaryOpMS(+,S32,10,5,3,2);
-    testBinaryOpMS(+,F32,10.0,5.0,3,2);
-    testBinaryOpMS(+,F64,10.0,5.0,3,2);
-    testBinaryOpMS(+,C32,10.0+10.0i,5.0+5.0i,3,2);
-    testBinaryOpMS(-,S32,20,5,3,2);
-    testBinaryOpMS(-,F32,20.0,5.0,3,2);
-    testBinaryOpMS(-,F64,20.0,5.0,3,2);
-    testBinaryOpMS(*,C32,20.0+20.0i,5.0+5.0i,3,2);
-    testBinaryOpMS(*,S32,20,5,3,2);
-    testBinaryOpMS(*,F32,20.0,5.0,3,2);
-    testBinaryOpMS(*,F64,20.0,5.0,3,2);
-    testBinaryOpMS(*,C32,20.0+20.0i,5.0+5.0i,3,2);
-    testBinaryOpMS(/,C32,20.0+20.0i,5.0+5.0i,3,2);
-    testBinaryOpMS(/,S32,20,5,3,2);
-    testBinaryOpMS(/,F32,20.0,5.0,3,2);
-    testBinaryOpMS(/,F64,20.0,5.0,3,2);
-    testBinaryOpMS(/,C32,20.0+20.0i,5.0+5.0i,3,2);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psMatrixVectorArithmetic02.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrixVectorArithmetic02.c	(revision 4546)
+++ 	(revision )
@@ -1,269 +1,0 @@
-
-/** @file  tst_psMatrixVectorArithmetic02.c
- *
- *  @brief Test driver for psMatrixVector arithmetic functions
- *
- *  This test driver tests combinations of matrix, vector, and scalar unary operations including:
- *     Matrix with all math operators with S32, F32, F64, C32
- *     Vector with all math operators with S32, F32, F64, C32
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-05-11 22:02:16 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#include <math.h>
-
-
-#define CHECK_VECTOR(VECTOR,TYPE,TRUTH)                                                                      \
-for(psS32 i=0; i<VECTOR->n; i++) {                                                                             \
-    if(cabs(VECTOR->data.TYPE[i])-cabs(TRUTH) > FLT_EPSILON){                                                \
-        printf("ERROR:Truth and calculated values don't match for vector operation:\n");                     \
-        if(PS_IS_PSELEMTYPE_COMPLEX(VECTOR->type.type)) {                                                    \
-            printf("Truth: %.2f%+.2fi\n", creal(VECTOR->data.TYPE[i]), cimag(VECTOR->data.TYPE[i]));         \
-            printf("Calculated: %.2f%+.2fi\n", creal(TRUTH), cimag(TRUTH));                                  \
-        } else if(PS_IS_PSELEMTYPE_INT(VECTOR->type.type)) {                                                 \
-            printf("Truth: %d\n", (psS32)(VECTOR->data.TYPE[i]));                                              \
-            printf("Calculated: %d\n", (psS32)(TRUTH));                                                        \
-        } else {                                                                                             \
-            printf("Truth: %.2f\n", (double)(VECTOR->data.TYPE[i]));                                         \
-            printf("Calculated: %.2f\n", (double)(TRUTH));                                                   \
-        }                                                                                                    \
-    }                                                                                                        \
-}                                                                                                            \
-printf("\n");
-
-
-#define CHECK_MATRIX(IMAGE,TYPE,TRUTH)                                                                       \
-for(psS32 i=IMAGE->numRows-1; i>-1; i--) {                                                                     \
-    for(psS32 j=0; j<IMAGE->numCols; j++) {                                                                    \
-        if(cabs(IMAGE->data.TYPE[i][j])-cabs(TRUTH) > FLT_EPSILON){                                          \
-            printf("ERROR:Truth and calculated values don't match for matrix operation:\n");                 \
-            if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                 \
-                printf("Truth: %.2f%+.2fi\n", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j])); \
-                printf("Calculated: %.2f%+.2fi\n", creal(TRUTH), cimag(TRUTH));                              \
-            } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                              \
-                printf("Truth: %d\n", (psS32)(IMAGE->data.TYPE[i][j]));                                        \
-                printf("Calculated: %d\n", (psS32)(TRUTH));                                                    \
-            } else {                                                                                         \
-                printf("Truth: %.2f\n", (double)(IMAGE->data.TYPE[i][j]));                                   \
-                printf("Calculated: %.2f\n", (double)(TRUTH));                                               \
-            }                                                                                                \
-        }                                                                                                    \
-    }                                                                                                        \
-    printf("\n");                                                                                            \
-}                                                                                                            \
-printf("\n");
-
-
-#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE)                                                          \
-psVector *NAME = (psVector*)psVectorAlloc(SIZE, PS_TYPE_##TYPE);                                             \
-for(psS32 i=0; i<SIZE; i++) {                                                                                  \
-    NAME->data.TYPE[i] = VALUE;                                                                              \
-}                                                                                                            \
-NAME->n = SIZE;
-
-
-#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS)                                                    \
-psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE);                                          \
-for(psS32 i=0; i<NAME->numRows; i++) {                                                                         \
-    for(psS32 j=0; j<NAME->numCols; j++) {                                                                     \
-        NAME->data.TYPE[i][j] = VALUE;                                                                       \
-    }                                                                                                        \
-}
-
-
-#define CHECK_MEMORY \
-if( psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {  \
-    psError(PS_ERR_UNKNOWN, true,"Memory leaks detected."); \
-    return 50; \
-} \
-psS32 nBad = psMemCheckCorruption(0); \
-if(nBad) { \
-    psError(PS_ERR_UNKNOWN, true,"ERROR: Found %d bad memory blocks\n", nBad); \
-    return 51; \
-}
-
-
-psS32 main( psS32 argc, char* argv[] )
-{
-
-    // Test matrix unary operations
-    #define testUnaryOpM(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS,TRUTH)                                            \
-    {                                                                                                        \
-        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix psUnaryOp");                \
-        printf("Operation: %s\n", #OP);                                                                      \
-        CREATE_AND_SET_IMAGE(inImage,TYPE,VALUE1,NROWS,NCOLS);                                               \
-        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE2,NROWS,NCOLS);                                              \
-        outImage = (psImage*)psUnaryOp(outImage, inImage, #OP);                                              \
-        CHECK_MATRIX(outImage,TYPE,TRUTH);                                                                   \
-        psFree(inImage);                                                                                     \
-        psFree(outImage);                                                                                    \
-        CHECK_MEMORY;                                                                                        \
-        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix psUnaryOp", true);                      \
-    }
-
-    testUnaryOpM( abs, S32, -10, 0, 3, 2, 10 );
-    testUnaryOpM( abs, F32, -10.0, 0.0, 3, 2, 10.0 );
-    testUnaryOpM( abs, F64, -10.0, 0.0, 3, 2, 10.0 );
-    testUnaryOpM( abs, C32, -10.0 - 10.0i, 0.0 + 0.0i, 3, 2,10+10i );
-    testUnaryOpM( exp, S32, 10, 0, 3, 2, cexp(10));
-    testUnaryOpM( exp, F32, 10.0, 0.0, 3, 2, cexp(10.0) );
-    testUnaryOpM( exp, F64, 10.0, 0.0, 3, 2, cexp(10.0) );
-    testUnaryOpM( exp, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 2, cexp(1.0+1.0i) );
-    testUnaryOpM( ln, S32, 10, 0, 3, 2, clog(10) );
-    testUnaryOpM( ln, F32, 10.0, 0.0, 3, 2, clog(10.0) );
-    testUnaryOpM( ln, F64, 10.0, 0.0, 3, 2, clog(10.0) );
-    testUnaryOpM( ln, C32, 10.0 + 10.0i, 0.0 + 0.0i, 3, 2, clog(10.0+10.0i) );
-    testUnaryOpM( ten, S32, 3, 0, 3, 2, 1000 );
-    testUnaryOpM( ten, F32, 3.0, 0.0, 3, 2, 1000 );
-    testUnaryOpM( ten, F64, 3.0, 0.0, 3, 2, 1000 );
-    testUnaryOpM( ten, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 2, 10.0 );
-    testUnaryOpM( log, S32, 1000, 0, 3, 2, 3 );
-    testUnaryOpM( log, F32, 1000.0, 0.0, 3, 2, 3 );
-    testUnaryOpM( log, F64, 1000.0, 0.0, 3, 2, 3 );
-    testUnaryOpM( log, C32, 1000.0 + 0.0i, 0.0 + 0.0i, 3, 2, 3 );
-    testUnaryOpM( sin, S32, M_PI_2, 0, 3, 2, 1 );
-    testUnaryOpM( sin, F32, M_PI_2, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( sin, F64, M_PI_2, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( sin, C32, M_PI_2 + 0.0i, 0.0 + 0.0i, 3, 2, 1.0 );
-    testUnaryOpM( dsin, S32, 90, 0, 3, 2 , 1);
-    testUnaryOpM( dsin, F32, 90.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( dsin, F64, 90.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( dsin, C32, 90.0 + 00.0i, 0.0 + 0.0i, 3, 2, 1.0 );
-    testUnaryOpM( cos, S32, 0, 0, 3, 2, 1 );
-    testUnaryOpM( cos, F32, 0.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( cos, F64, 0.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( cos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, 1.0 );
-    testUnaryOpM( dcos, S32, 0, 0, 3, 2, 1 );
-    testUnaryOpM( dcos, F32, 0.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( dcos, F64, 0.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( dcos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, 1.0 );
-    testUnaryOpM( tan, S32, M_PI_4, 0, 3, 2, 1);
-    testUnaryOpM( tan, F32, M_PI_4, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( tan, F64, M_PI_4, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( tan, C32, M_PI_4 + 0.0i, 0.0 + 0.0i, 3, 2, 1 );
-    testUnaryOpM( dtan, S32, 45, 0, 3, 2, 1 );
-    testUnaryOpM( dtan, F32, 45.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( dtan, F64, 45.0, 0.0, 3, 2, 1.0 );
-    testUnaryOpM( dtan, C32, 45.0 + 45.0i, 0.0 + 0.0i, 3, 2, 1.0 );
-    testUnaryOpM( asin, S32, 1, 0, 3, 2, M_PI_2);
-    testUnaryOpM( asin, F32, 1.0, 0.0, 3, 2, M_PI_2  );
-    testUnaryOpM( asin, F64, 1.0, 0.0, 3, 2, M_PI_2);
-    testUnaryOpM( asin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 2, M_PI_2);
-    testUnaryOpM( dasin, S32, 1.0, 0, 3, 2, 90 );
-    testUnaryOpM( dasin, F32, 1.0, 0.0, 3, 2, 90.0 );
-    testUnaryOpM( dasin, F64, 1.0, 0.0, 3, 2, 90.0 );
-    testUnaryOpM( dasin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 2, 90.0 );
-    testUnaryOpM( acos, S32, 0, 0, 3, 2, M_PI_2);
-    testUnaryOpM( acos, F32, 0.0, 0.0, 3, 2, M_PI_2 );
-    testUnaryOpM( acos, F64, 0.0, 0.0, 3, 2, M_PI_2 );
-    testUnaryOpM( acos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, M_PI_2 );
-    testUnaryOpM( dacos, S32, 0, 0, 3, 2, 90 );
-    testUnaryOpM( dacos, F32, 0.0, 0.0, 3, 2, 90.0 );
-    testUnaryOpM( dacos, F64, 0.0, 0.0, 3, 2, 90.0 );
-    testUnaryOpM( dacos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, 90.0 );
-    testUnaryOpM( atan, S32, 1, 0, 3, 2, M_PI_4);
-    testUnaryOpM( atan, F32, 1.0, 0.0, 3, 2, M_PI_4 );
-    testUnaryOpM( atan, F64, 1.0, 0.0, 3, 2, M_PI_4);
-    testUnaryOpM( atan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 2, M_PI_4);
-    testUnaryOpM( datan, S32, 1, 0, 3, 2, 45 );
-    testUnaryOpM( datan, F32, 1.0, 0.0, 3, 2, 45.0 );
-    testUnaryOpM( datan, F64, 1.0, 0.0, 3, 2, 45.0 );
-    testUnaryOpM( datan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 2, 45.0 );
-
-
-    // Test vector unary operations
-    #define testUnaryOpV(OP,TYPE,VALUE1,VALUE2,SIZE,TRUTH)                                                   \
-    {                                                                                                        \
-        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test vector psUnaryOp");                \
-        printf("Operation: %s\n", #OP);                                                                      \
-        CREATE_AND_SET_VECTOR(inVector,TYPE,VALUE1,SIZE);                                                    \
-        CREATE_AND_SET_VECTOR(outVector,TYPE,VALUE2,SIZE);                                                   \
-        outVector = (psVector*)psUnaryOp(outVector, inVector, #OP);                                          \
-        CHECK_VECTOR(outVector,TYPE,TRUTH);                                                                  \
-        psFree(inVector);                                                                                    \
-        psFree(outVector);                                                                                   \
-        CHECK_MEMORY;                                                                                        \
-        printFooter(stdout, "psMatrixVectorArithmetic", "Test vector psUnaryOp", true);                      \
-    }
-
-    testUnaryOpV( abs, S32, -10, 0, 3, 10 );
-    testUnaryOpV( abs, F32, -10.0, 0.0, 3, 10.0 );
-    testUnaryOpV( abs, F64, -10.0, 0.0, 3, 10.0 );
-    testUnaryOpV( abs, C32, -10.0 - 10.0i, 0.0 + 0.0i, 3, 10+10i );
-    testUnaryOpV( exp, S32, 10, 0, 3, cexp(10));
-    testUnaryOpV( exp, F32, 10.0, 0.0, 3, cexp(10.0) );
-    testUnaryOpV( exp, F64, 10.0, 0.0, 3, cexp(10.0) );
-    testUnaryOpV( exp, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, cexp(1.0+1.0i) );
-    testUnaryOpV( ln, S32, 10, 0, 3, clog(10) );
-    testUnaryOpV( ln, F32, 10.0, 0.0, 3, clog(10.0) );
-    testUnaryOpV( ln, F64, 10.0, 0.0, 3, clog(10.0) );
-    testUnaryOpV( ln, C32, 10.0 + 10.0i, 0.0 + 0.0i, 3, clog(10.0+10.0i) );
-    testUnaryOpV( ten, S32, 3, 0, 3, 1000 );
-    testUnaryOpV( ten, F32, 3.0, 0.0, 3, 1000 );
-    testUnaryOpV( ten, F64, 3.0, 0.0, 3, 1000 );
-    testUnaryOpV( ten, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 10.0 );
-    testUnaryOpV( log, S32, 1000, 0, 3,  3 );
-    testUnaryOpV( log, F32, 1000.0, 0.0, 3, 3 );
-    testUnaryOpV( log, F64, 1000.0, 0.0, 3, 3 );
-    testUnaryOpV( log, C32, 1000.0 + 0.0i, 0.0 + 0.0i, 3, 3 );
-    testUnaryOpV( sin, S32, M_PI_2, 0, 3, 1 );
-    testUnaryOpV( sin, F32, M_PI_2, 0.0, 3, 1.0 );
-    testUnaryOpV( sin, F64, M_PI_2, 0.0, 3, 1.0 );
-    testUnaryOpV( sin, C32, M_PI_2 + 0.0i, 0.0 + 0.0i, 3, 1.0 );
-    testUnaryOpV( dsin, S32, 90, 0, 3, 1);
-    testUnaryOpV( dsin, F32, 90.0, 0.0, 3, 1.0 );
-    testUnaryOpV( dsin, F64, 90.0, 0.0, 3, 1.0 );
-    testUnaryOpV( dsin, C32, 90.0 + 00.0i, 0.0 + 0.0i, 3, 1.0 );
-    testUnaryOpV( cos, S32, 0, 0, 3, 1 );
-    testUnaryOpV( cos, F32, 0.0, 0.0, 3, 1.0 );
-    testUnaryOpV( cos, F64, 0.0, 0.0, 3, 1.0 );
-    testUnaryOpV( cos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 1.0 );
-    testUnaryOpV( dcos, S32, 0, 0, 3, 1 );
-    testUnaryOpV( dcos, F32, 0.0, 0.0, 3, 1.0 );
-    testUnaryOpV( dcos, F64, 0.0, 0.0, 3, 1.0 );
-    testUnaryOpV( dcos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 1.0 );
-    testUnaryOpV( tan, S32, M_PI_4, 0, 3, 1);
-    testUnaryOpV( tan, F32, M_PI_4, 0.0, 3, 1.0 );
-    testUnaryOpV( tan, F64, M_PI_4, 0.0, 3, 1.0 );
-    testUnaryOpV( tan, C32, M_PI_4 + 0.0i, 0.0 + 0.0i, 3, 1 );
-    testUnaryOpV( dtan, S32, 45, 0, 3, 1 );
-    testUnaryOpV( dtan, F32, 45.0, 0.0, 3, 1.0 );
-    testUnaryOpV( dtan, F64, 45.0, 0.0, 3, 1.0 );
-    testUnaryOpV( dtan, C32, 45.0 + 45.0i, 0.0 + 0.0i, 3, 1.0 );
-    testUnaryOpV( asin, S32, 1, 0, 3, M_PI_2);
-    testUnaryOpV( asin, F32, 1.0, 0.0, 3, M_PI_2  );
-    testUnaryOpV( asin, F64, 1.0, 0.0, 3, M_PI_2);
-    testUnaryOpV( asin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, M_PI_2);
-    testUnaryOpV( dasin, S32, 1.0, 0, 3, 90 );
-    testUnaryOpV( dasin, F32, 1.0, 0.0, 3, 90.0 );
-    testUnaryOpV( dasin, F64, 1.0, 0.0, 3, 90.0 );
-    testUnaryOpV( dasin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 90.0 );
-    testUnaryOpV( acos, S32, 0, 0, 3, M_PI_2);
-    testUnaryOpV( acos, F32, 0.0, 0.0, 3, M_PI_2 );
-    testUnaryOpV( acos, F64, 0.0, 0.0, 3, M_PI_2 );
-    testUnaryOpV( acos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, M_PI_2 );
-    testUnaryOpV( dacos, S32, 0, 0, 3, 90 );
-    testUnaryOpV( dacos, F32, 0.0, 0.0, 3, 90.0 );
-    testUnaryOpV( dacos, F64, 0.0, 0.0, 3, 90.0 );
-    testUnaryOpV( dacos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 90.0 );
-    testUnaryOpV( atan, S32, 1, 0, 3, M_PI_4);
-    testUnaryOpV( atan, F32, 1.0, 0.0, 3, M_PI_4 );
-    testUnaryOpV( atan, F64, 1.0, 0.0, 3, M_PI_4);
-    testUnaryOpV( atan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, M_PI_4);
-    testUnaryOpV( datan, S32, 1, 0, 3, 45 );
-    testUnaryOpV( datan, F32, 1.0, 0.0, 3, 45.0 );
-    testUnaryOpV( datan, F64, 1.0, 0.0, 3, 45.0 );
-    testUnaryOpV( datan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 45.0 );
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psMatrixVectorArithmetic03.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrixVectorArithmetic03.c	(revision 4546)
+++ 	(revision )
@@ -1,314 +1,0 @@
-/** @file  tst_psMatrixVectorArithmetic03.c
- *
- *  @brief Test driver for psMatrixVector arithmetic functions
- *
- *  This test driver contains negative tests for psBinaryOp and psUanryOp:
- *     Check for NULL arguments
- *     Inconsistent element types
- *     Inconsistent element count
- *     Inconsistent dimensionality
- *     Division by zero
- *     Attempt to use min with complex numbers
- *     Attempt to use max with complex numbers
- *     Invalid operation
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.10 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define PRINT_VECTOR(VECTOR,TYPE) \
-for(psS32 i=0; i<VECTOR->n; i++) { \
-    if(PS_IS_PSELEMTYPE_COMPLEX(VECTOR->type.type)) { \
-        printf("%f+%fi ", creal(VECTOR->data.TYPE[i]), cimag(VECTOR->data.TYPE[i])); \
-    } else if(PS_IS_PSELEMTYPE_INT(VECTOR->type.type)) { \
-        printf("%d ", (psS32)VECTOR->data.TYPE[i]); \
-    } else { \
-        printf("%f ", (double)VECTOR->data.TYPE[i]); \
-    } \
-} \
-printf("\n\n");
-
-#define PRINT_MATRIX(IMAGE,TYPE) \
-for(psS32 i=IMAGE->numRows-1; i>-1; i--) { \
-    for(psS32 j=0; j<IMAGE->numCols; j++) { \
-        if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) { \
-            printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j])); \
-        } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) { \
-            printf("%d ", (psS32)IMAGE->data.TYPE[i][j]); \
-        } else { \
-            printf("%f ", (double)IMAGE->data.TYPE[i][j]); \
-        } \
-    } \
-    printf("\n"); \
-} \
-printf("\n");
-
-
-#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE) \
-psVector *NAME = (psVector*)psVectorAlloc(SIZE, PS_TYPE_##TYPE); \
-for(psS32 i=0; i<SIZE; i++) { \
-    NAME->data.TYPE[i] = VALUE; \
-} \
-NAME->n = SIZE;
-
-
-#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS) \
-psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE); \
-for(psS32 i=0; i<NAME->numRows; i++) { \
-    for(psS32 j=0; j<NAME->numCols; j++) { \
-        NAME->data.TYPE[i][j] = VALUE; \
-    } \
-}
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    CREATE_AND_SET_IMAGE(image1,F64,0,3,3);
-    CREATE_AND_SET_IMAGE(image2,F64,0,3,3);
-    CREATE_AND_SET_IMAGE(image3,F32,0,3,3);
-    CREATE_AND_SET_IMAGE(image4,F64,0,2,2);
-    CREATE_AND_SET_IMAGE(image5,C32,1+1i,3,3);
-    CREATE_AND_SET_VECTOR(vector1,F64,0,2);
-    CREATE_AND_SET_VECTOR(vector2,F64,0,3);
-
-    // Check for NULL output argument
-    printPositiveTestHeader(stdout,"psBinaryOp", "Check for output generated");
-    psImage* image6 = (psImage*)psBinaryOp(NULL, image1, "+", image2);
-    if (image6 == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp failed to make an image given no output to recycle.");
-        return 1;
-    }
-    printFooter(stdout,"psBinaryOp","Check for output generated",true);
-
-    // Check for NULL input argument #1
-    printPositiveTestHeader(stdout,"psBinaryOp","Check for null input arg 1");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, NULL, "+", image2);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given a NULL first operand.");
-        return 2;
-    }
-    printFooter(stdout,"psBinaryOp","Check for null input arg 1",true);
-
-    // Check for NULL input argument #2
-    printPositiveTestHeader(stdout,"psBinaryOp","Check for null input arg 2");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, image1, "+", NULL);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given a NULL second operand.");
-        return 3;
-    }
-    printFooter(stdout,"psBinaryOp","Check for null input arg 2",true);
-
-    // Check for NULL operand
-    printPositiveTestHeader(stdout,"psBinaryOp","Check for null operand");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, image1, NULL, image2);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given a NULL operator.");
-        return 4;
-    }
-    printFooter(stdout,"psBinaryOp","Check for null operand",true);
-
-    // Check for null output
-    printPositiveTestHeader(stdout,"psUnaryOp","Check for null output");
-    image6 = (psImage*)psUnaryOp(NULL, image1, "sin");
-    if (image6 == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp failed to make an image given no output to recycle.");
-        return 5;
-    }
-    printFooter(stdout,"psUnaryOp","Check for null output",true);
-
-    // Check for NULL input arg
-    printPositiveTestHeader(stdout,"psUnaryOp","Check for null input");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psUnaryOp(image6, NULL, "sin");
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned a result given a NULL operand.");
-        return 6;
-    }
-    printFooter(stdout,"psUnaryOp","Check for null input",true);
-
-    // Check for NULL operand
-    printPositiveTestHeader(stdout,"psUnaryOp","Check for null operator");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psUnaryOp(image6, image1, NULL);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned a result given a NULL operator.");
-        return 7;
-    }
-    printFooter(stdout,"psUnaryOp","Check for null operator",true);
-
-    // Inconsistent element types
-    printPositiveTestHeader(stdout,"psBinaryOp", "Inconsistent element types");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, image3, "+", image2);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different types.");
-        return 8;
-    }
-    printFooter(stdout,"psBinaryOp","Inconsistent element types",true);
-
-    // Check unary op to convert to correct type
-    printPositiveTestHeader(stdout,"psUnaryOp","Check output type conversion");
-    image6 = psImageCopy(image6,image2,PS_TYPE_F64);
-    image6 = (psImage*)psUnaryOp(image6, image3, "sin");
-    if (image6 == NULL || image6->type.type != PS_TYPE_F32) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp failed to convert the type of the output.");
-        return 9;
-    }
-    printFooter(stdout,"psUnaryOp","Check output type conversion",true);
-
-    // Inconsistent element count
-    printPositiveTestHeader(stdout,"psBinaryOp","Check for inconsistent elements");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, image4, "+", image2);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different sizes.");
-        return 10;
-    }
-    printFooter(stdout,"psBinaryOp","Check for inconsistent elements",true);
-
-    // Inconsistent element in input and output
-    printPositiveTestHeader(stdout,"psUnaryOp","Check inconsistent elements in input and output");
-    image6 = psImageCopy(image6,image2,PS_TYPE_F64);
-    image6 = (psImage*)psUnaryOp(image6, image4, "sin");
-    if (image6 == NULL ||
-            image6->numCols != image6->numCols ||
-            image6->numRows != image6->numRows) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp failed to resize the output.");
-        return 11;
-    }
-    printFooter(stdout,"psUnaryOp","Check inconsistent elements in input and output",true);
-
-    // Inconsistent size of input 1 and input 2
-    printPositiveTestHeader(stdout,"psBinaryOp","Check inconsistent size");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, vector1, "+", image2);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different sizes.");
-        return 12;
-    }
-    printFooter(stdout,"psBinaryOp","Check inconsistent size",true);
-
-    // Inconsistent size of input 1 and input 2
-    printPositiveTestHeader(stdout,"psBinaryOp","Check inconsistent size");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    vector1->type.dimen = PS_DIMEN_TRANSV;
-    image6 = (psImage*)psBinaryOp(image6, vector1, "+", image2);
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different sizes.");
-        return 13;
-    }
-    printFooter(stdout, "psBinaryOp", "Check inconsistent size", true);
-
-
-    // Inconsistent dimensionality
-    printPositiveTestHeader(stdout,"psUnaryOp","Check inconsistent dimensionality");
-    image6 = psImageCopy(image6,image2,PS_TYPE_F64);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an two error messages");
-    image6 = (psImage*)psUnaryOp(image6, vector2, "sin");
-    if (image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result given wrong type out parameter.");
-        return 14;
-    }
-    printFooter(stdout,"psUnaryOp","Check inconsistent dimensionality",true);
-
-    // Attempt to use min with complex numbers
-    printPositiveTestHeader(stdout,"psBinaryOp","Attempt to use min with complex numbers");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    image6 = (psImage*)psBinaryOp(image6, image5, "min", image5);
-    if(image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result with min of complex numbers");
-        return 15;
-    }
-    printFooter(stdout, "psBinaryOp", "Attempt to use  min with complex numbers", true);
-
-
-    // Attempt to use max with complex numbers
-    printPositiveTestHeader(stdout,"psBinaryOp","Attempt to use max with complex numbers");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psBinaryOp(image6, image5, "max", image5);
-    if(image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result with max of complex numbers");
-        return 16;
-    }
-    printFooter(stdout, "psBinaryOp", "Attempt to use max with complex numbers", true);
-
-
-    // Invalid operation
-    printPositiveTestHeader(stdout,"psBinary","Attempt to use invalid operator");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error messgae");
-    image6 = (psImage*)psBinaryOp(image6, image1, "yarg", image2);
-    if(image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned result with invalid operator");
-        return 17;
-    }
-    printFooter(stdout,"psBinaryOp","Attempt to use invalid operator",true);
-
-    printPositiveTestHeader(stdout,"psUnaryOp","Attempt to use invalid operator");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    image6 = (psImage*)psUnaryOp(image6, image1, "yarg");
-    if(image6 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result with invalid operator");
-        return 18;
-    }
-    printFooter(stdout, "psUnaryOp", "Attempt to use invalid operator", true);
-
-    CREATE_AND_SET_VECTOR(vector4,F64,0,3);
-    CREATE_AND_SET_VECTOR(vector5,F64,0,3);
-
-    // Input parameter with dimension of PS_DIMEN_OTHER
-    printPositiveTestHeader(stdout,"psBinaryOp","Attempt to use input with PS_DIMEN_OTHER");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    vector4->type.dimen = PS_DIMEN_OTHER;
-    if ( psBinaryOp(NULL,vector4,"+",vector5) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psBinaryOp should return null when input dimen PS_DIMEN_OTHER.");
-        return 19;
-    }
-    vector4->type.dimen = PS_DIMEN_VECTOR;
-    printFooter(stdout,"psBinaryOp","Attempt to use input with PS_DIMEN_OTHER",true);
-
-    // Input parameter with dimension of PS_DIMEN_OTHER
-    printPositiveTestHeader(stdout,"psUnaryOp","Attempt to use input with PS_DIMEN_OTHER");
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    vector4->type.dimen = PS_DIMEN_OTHER;
-    if ( psUnaryOp(NULL,vector4,"sin") != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psUnaryOp should return null when input dimen PS_DIMEN_OTHER");
-        return 20;
-    }
-    vector4->type.dimen = PS_DIMEN_VECTOR;
-    printFooter(stdout,"psUnaryOp","Attempt to use input with PS_DIMEN_OTHER",true);
-
-    psFree(vector4);
-    psFree(vector5);
-    psFree(image1);
-    psFree(image2);
-    psFree(image3);
-    psFree(image4);
-    psFree(image5);
-    psFree(vector1);
-    psFree(vector2);
-
-    psS32 nLeaks = psMemCheckLeaks(0,NULL,stdout,false);
-    if(nLeaks != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected");
-        return 50;
-    }
-    psS32 nBad = psMemCheckCorruption(0);
-    if(nBad) {
-        psError(PS_ERR_UNKNOWN,true,"Memory corruption detected");
-        return 51;
-    }
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psMatrixVectorArithmetic04.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMatrixVectorArithmetic04.c	(revision 4546)
+++ 	(revision )
@@ -1,212 +1,0 @@
-/** @file  tst_psMatrixVectorArithmetic04.c
- *
- *  @brief Test driver for psBinary arithmetic operations with scalars
- *
- *  This test driver will test the following binary operation with scalar inputs
- *        vector addition with scalar in first argument
- *        image addition with scalar in second argument
- *
- * @author  Eric Van Alst, MHPCC
- *
- * @version $Revision: 1.3 $  $Name: not supported by cvs2svn $
- * @date  $Date: 2005-04-07 20:27:42 $
- *
- * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testBinOpScalarFirst(void);
-static psS32 testBinOpScalarSecond(void);
-static psS32 testBinOpScalarBoth(void);
-static psS32 testUnaryOpScalar(void);
-
-testDescription testsBinary[] = {
-                                    {testBinOpScalarFirst,737,"psBinaryOp",0,false},
-                                    {testBinOpScalarSecond,737,"psBinaryOp",0,false},
-                                    {testBinOpScalarBoth,737,"psBinaryOp",0,false},
-                                    {NULL}
-                                };
-
-testDescription testUnary[] = {
-                                  {testUnaryOpScalar,737,"psUnaryOp",0,false},
-                                  {NULL}
-                              };
-
-// Create vector
-#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE) \
-psVector *NAME = psVectorAlloc(SIZE,PS_TYPE_##TYPE); \
-for(psS32 i=0; i<SIZE; i++) { \
-    NAME->data.TYPE[i] = VALUE; \
-} \
-NAME->n = SIZE;
-
-// Create image
-#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS) \
-psImage *NAME = psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE); \
-for(psS32 i=0; i<NAME->numRows; i++) { \
-    for(psS32 j=0; j<NAME->numCols; j++) { \
-        NAME->data.TYPE[i][j] = VALUE; \
-    } \
-}
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    runTestSuite(stderr,"psBinaryOp",testsBinary,argc,argv);
-    runTestSuite(stderr,"psUnaryOp",testUnary,argc,argv);
-
-    return 0;
-}
-
-psS32 testBinOpScalarFirst(void)
-{
-    CREATE_AND_SET_VECTOR(vector1,S8,1,5)
-    CREATE_AND_SET_VECTOR(vector2,S8,0,5)
-
-    psScalar* inScalar1 = psScalarAlloc(2,PS_TYPE_S8);
-
-    // Add vector and scalar
-    vector2 = (psVector*)psBinaryOp(vector2,inScalar1,"+",vector1);
-    // Verify the result vector
-    for(psS32 i=0; i<vector2->n; i++) {
-        if(vector2->data.S8[i] != 3 ) {
-            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
-            return 1;
-        }
-    }
-    psFree(vector1);
-    psFree(vector2);
-
-    CREATE_AND_SET_VECTOR(vector3,S8,1,5);
-    CREATE_AND_SET_VECTOR(vector4,S8,0,3);
-
-    psScalar* inScalar2 = psScalarAlloc(2,PS_TYPE_S8);
-    vector4->type.dimen = PS_DIMEN_TRANSV;
-    vector4 = (psVector*)psBinaryOp(vector4,inScalar2,"+",vector3);
-    for(psS32 i=0; i<vector4->n; i++) {
-        if(vector4->data.S8[i] != 3 ) {
-            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
-            return 2;
-        }
-    }
-    psFree(vector3);
-    psFree(vector4);
-
-    CREATE_AND_SET_IMAGE(image1,S8,1,5,5)
-    psImage* image2 = NULL;
-
-    psScalar* inScalar3 = psScalarAlloc(2,PS_TYPE_S8);
-
-    image2 = (psImage*)psBinaryOp(image2,inScalar3,"+",image1);
-    for(psS32 i=0; i<image2->numRows; i++) {
-        for(psS32 j=0; j<image2->numCols; j++) {
-            if(image2->data.S8[i][j] != 3 ) {
-                psError(PS_ERR_UNKNOWN,true,"Unexpected value in return image[%d][%d]",i,j);
-                return 10;
-            }
-        }
-    }
-    psFree(image1);
-    psFree(image2);
-
-    return 0;
-}
-
-psS32 testBinOpScalarSecond(void)
-{
-    CREATE_AND_SET_VECTOR(vector1,S8,1,5)
-    CREATE_AND_SET_VECTOR(vector2,S8,0,5)
-
-    psScalar* inScalar1 = psScalarAlloc(2,PS_TYPE_S8);
-
-    vector2 = (psVector*)psBinaryOp(vector2,vector1,"+",inScalar1);
-    for(psS32 i=0; i<vector2->n; i++) {
-        if(vector2->data.S8[i] != 3 ) {
-            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
-            return 1;
-        }
-    }
-    psFree(vector1);
-    psFree(vector2);
-
-    CREATE_AND_SET_VECTOR(vector3,S8,1,5);
-    CREATE_AND_SET_VECTOR(vector4,S8,0,3);
-
-    psScalar* inScalar2 = psScalarAlloc(2,PS_TYPE_S8);
-    vector4->type.dimen = PS_DIMEN_TRANSV;
-    vector4 = (psVector*)psBinaryOp(vector4,vector3,"+",inScalar2);
-    for(psS32 i=0; i<vector4->n; i++) {
-        if(vector4->data.S8[i] != 3 ) {
-            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
-            return 2;
-        }
-    }
-    psFree(vector3);
-    psFree(vector4);
-
-    CREATE_AND_SET_IMAGE(image1,S8,1,5,5);
-    psImage* image2 = NULL;
-
-    psScalar* inScalar3 = psScalarAlloc(2,PS_TYPE_S8);
-
-    image2 = (psImage*)psBinaryOp(image2,image1,"+",inScalar3);
-    for(psS32 i=0; i<image2->numRows; i++) {
-        for(psS32 j=0; j<image2->numCols; j++) {
-            if(image2->data.S8[i][j] != 3 ) {
-                psError(PS_ERR_UNKNOWN,true,"Unexpected value in return image[%d][%d]",i,j);
-                return 10;
-            }
-        }
-    }
-    psFree(image1);
-    psFree(image2);
-
-    return 0;
-}
-
-psS32 testBinOpScalarBoth(void)
-{
-    psScalar* inScalar1 = psScalarAlloc(1,PS_TYPE_S8);
-    psScalar* inScalar2 = psScalarAlloc(2,PS_TYPE_S8);
-    psScalar* outScalar = psScalarAlloc(4,PS_TYPE_S8);
-
-    outScalar = (psScalar*)psBinaryOp(outScalar,inScalar1,"+",inScalar2);
-    if(outScalar->data.S8 != 3) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected value in return scalar");
-        return 3;
-    }
-    psFree(outScalar);
-
-    psScalar* inScalar3 = psScalarAlloc(10,PS_TYPE_S8);
-    psScalar* inScalar4 = psScalarAlloc(20,PS_TYPE_S8);
-    psScalar* outScalar1 = NULL;
-
-    outScalar1 = (psScalar*)psBinaryOp(outScalar1,inScalar3,"+",inScalar4);
-    if(outScalar1->data.S8 != 30 ) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected value in return scalar");
-        return 4;
-    }
-    psFree(outScalar1);
-
-    return 0;
-}
-
-psS32 testUnaryOpScalar(void)
-{
-    psScalar* inScalar = psScalarAlloc(-1,PS_TYPE_F32);
-    psScalar* outScalar = NULL;
-
-    outScalar = (psScalar*)psUnaryOp(outScalar,inScalar,"abs");
-    if(outScalar->data.F32 != 1) {
-        psError(PS_ERR_UNKNOWN,true,"Unexpected value in return scalar = %d  in = %d",outScalar->data.F32,inScalar->data.F32);
-        return 5;
-    }
-    psFree(outScalar);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psMinimize00.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize00.c	(revision 4546)
+++ 	(revision )
@@ -1,166 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psMinimizeChi2 function correctly
-    minimizes an arbitrary function.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define NUM_DATA 10
-#define DATA_WIDTH 2
-#define NUM_PARAMS 4
-
-float myFunc(const psVector *restrict myData,
-             const psVector *restrict myParams)
-{
-    float x = myData->data.F32[0];
-    float y = myData->data.F32[1];
-    float A = myParams->data.F32[0];
-    float B = myParams->data.F32[1];
-    float C = myParams->data.F32[2];
-    float D = myParams->data.F32[3];
-    float tmp = 0.0;
-
-    tmp = (A * x) + (B*x*x) + (C*y*y) + (D*x*x*y);
-    //    printf("--------- myFunc((%.1f %.1f) %.1f %.1f %.1f %.1f) is %.1f ---------\n",
-    //           x, y, A, B, C, D, tmp);
-
-    return(tmp);
-}
-
-float myFuncDeriv(const psVector *restrict myData,
-                  const psVector *restrict myParams,
-                  psS32 whichParamDeriv)
-{
-    float x = myData->data.F32[0];
-    float y = myData->data.F32[1];
-    float tmp = 0.0;
-
-    if (whichParamDeriv == 0) {
-        tmp = 1.0;
-        tmp = x;
-    } else
-        if (whichParamDeriv == 1) {
-            tmp = x;
-            tmp = x*x;
-        } else
-            if (whichParamDeriv == 2) {
-                tmp = y;
-                tmp = y*y;
-            } else
-                if (whichParamDeriv == 3) {
-                    tmp = x * x * y;
-                }
-
-    //    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
-    //            x, y, myParams->data.F32[0], myParams->data.F32[1],
-    //            myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
-    return(tmp);
-}
-
-
-psS32 main()
-{
-    psImage *domain = NULL;
-    psVector *data = NULL;
-    psVector *errors = NULL;
-    psVector *initialGuess = NULL;
-    psVector *paramMask = NULL;
-    psVector *tmpVecPtr = NULL;
-    float chiSq = 0.0;
-    psS32 i = 0;
-    psS32 j = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    psVector *theParams = NULL;
-
-    domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32);
-    data = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    errors = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
-
-
-    //--------- myFunc((0.0 1.0) -8.6 -7.6 14.6 5.0) is 6.0 ---------
-
-    initialGuess->data.F32[0] = -8.6;
-    initialGuess->data.F32[1] = -7.6;
-    initialGuess->data.F32[2] = 14.6;
-    initialGuess->data.F32[3] = 5.0;
-
-    // Build the data.
-    initialGuess->data.F32[0] = 2.0;
-    initialGuess->data.F32[1] = 3.0;
-    initialGuess->data.F32[2] = 4.0;
-    initialGuess->data.F32[3] = 5.0;
-
-
-    for (i = 0; i<NUM_DATA; i++) {
-        for (j=0; j<DATA_WIDTH; j++) {
-            domain->data.F32[i][j] = (float) (i + j);
-        }
-    }
-    for (i = 0; i<NUM_DATA; i++) {
-        errors->data.F32[i] = 0.1;
-    }
-
-    //    printf("========== Setting Data Values ==========\n");
-    for (i = 0; i<NUM_DATA; i++) {
-        for (j=0; j<DATA_WIDTH; j++) {
-            tmpVecPtr->data.F32[j] = domain->data.F32[i][j];
-        }
-        data->data.F32[i] = myFunc(tmpVecPtr, initialGuess);
-    }
-    //    printf("=========================================\n");
-
-    for (i=0;i<NUM_PARAMS;i++) {
-        initialGuess->data.F32[i]+= 1.0;
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimizeChi2(): no masks");
-
-    theParams = psMinimizeChi2(myFunc,
-                               myFuncDeriv,
-                               domain,
-                               data,
-                               errors,
-                               initialGuess,
-                               NULL,
-                               &chiSq);
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("theParams[%d] is %.1f\n", i, theParams->data.F32[i]);
-    }
-
-    printf("chiSq is %f\n", chiSq);
-    psMemCheckCorruption(1);
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimizeChi2(): no masks",
-                testStatus);
-
-
-    psMemCheckCorruption(1);
-    psFree(domain);
-    psFree(data);
-    psFree(errors);
-    psFree(initialGuess);
-    psFree(paramMask);
-    psFree(tmpVecPtr);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psMinimize01.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize01.c	(revision 4546)
+++ 	(revision )
@@ -1,172 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psMinimizeChi2 function correctly
-    minimizes an arbitrary function.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define NUM_DATA 40
-#define DATA_WIDTH 1
-#define NUM_PARAMS 3
-
-// The function is f(x) = (A * e^(lambda x)) + b
-
-float myFunc(const psVector *restrict myData,
-             const psVector *restrict myParams)
-{
-    float x = myData->data.F32[0];
-    float A = myParams->data.F32[0];
-    float lambda = myParams->data.F32[1];
-    float b = myParams->data.F32[2];
-    float tmp = A * exp(-lambda * x) + b;
-
-    //    printf("--------- myFunc((%.1f) %.1f %.1f %.1f) is %.1f ---------\n",
-    //           x, A, lambda, b, tmp);
-
-    return(tmp);
-}
-
-float myFuncDeriv(const psVector *restrict myData,
-                  const psVector *restrict myParams,
-                  psS32 whichParamDeriv)
-{
-    float x = myData->data.F32[0];
-    float A = myParams->data.F32[0];
-    float lambda = myParams->data.F32[1];
-    float tmp = 0.0;
-
-    if (whichParamDeriv == 0) {
-        tmp = exp(-lambda * x);
-    } else
-        if (whichParamDeriv == 1) {
-            tmp = -x * A * exp(-lambda * x);
-        } else
-            if (whichParamDeriv == 2) {
-                tmp = 1.0;
-            }
-
-    //    printf("--------- myFuncDeriv((%.1f) %.1f %.1f %.1f, %d) is %.1f ---------\n",
-    //           x, A, lambda, myParams->data.F32[2], whichParamDeriv, tmp);
-
-    return(tmp);
-}
-
-psS32 main()
-{
-    psImage *domain = NULL;
-    psVector *data = NULL;
-    psVector *errors = NULL;
-    psVector *initialGuess = NULL;
-    psVector *paramMask = NULL;
-    psVector *tmpVecPtr = NULL;
-    float chiSq = 0.0;
-    psS32 i = 0;
-    psVector *theParams = NULL;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32);
-    data = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    errors = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
-
-    // Build the data.
-    initialGuess->data.F32[0] = 1.0;
-    initialGuess->data.F32[1] = 0.0;
-    initialGuess->data.F32[2] = 0.0;
-
-    for (i = 0; i<NUM_DATA; i++) {
-        errors->data.F32[i] = 0.1;
-        domain->data.F32[i][0] = (float) i;
-    }
-
-    printf("========== Setting Data Values ==========\n");
-    data->data.F32[0] = 6.013392;
-    data->data.F32[1] = 5.515377;
-    data->data.F32[2] = 5.261095;
-    data->data.F32[3] = 4.777455;
-    data->data.F32[4] = 4.451353;
-    data->data.F32[5] = 3.904903;
-    data->data.F32[6] = 3.504387;
-    data->data.F32[7] = 3.414999;
-    data->data.F32[8] = 3.242736;
-    data->data.F32[9] = 3.122204;
-    data->data.F32[10] = 2.837632;
-    data->data.F32[11] = 2.534700;
-    data->data.F32[12] = 2.439173;
-    data->data.F32[13] = 2.380830;
-    data->data.F32[14] = 2.316090;
-    data->data.F32[15] = 2.060826;
-    data->data.F32[16] = 1.945679;
-    data->data.F32[17] = 1.914126;
-    data->data.F32[18] = 1.759509;
-    data->data.F32[19] = 1.665067;
-    data->data.F32[20] = 1.737926;
-    data->data.F32[21] = 1.575523;
-    data->data.F32[22] = 1.525066;
-    data->data.F32[23] = 1.409607;
-    data->data.F32[24] = 1.395209;
-    data->data.F32[25] = 1.416887;
-    data->data.F32[26] = 1.376042;
-    data->data.F32[27] = 1.260955;
-    data->data.F32[28] = 1.289627;
-    data->data.F32[29] = 1.422672;
-    data->data.F32[30] = 1.228287;
-    data->data.F32[31] = 1.199176;
-    data->data.F32[32] = 1.189989;
-    data->data.F32[33] = 0.930076;
-    data->data.F32[34] = 1.224608;
-    data->data.F32[35] = 1.147376;
-    data->data.F32[36] = 1.114001;
-    data->data.F32[37] = 1.195118;
-    data->data.F32[38] = 1.269581;
-    data->data.F32[39] = 1.061982;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimizeChi2(): no masks");
-
-    theParams = psMinimizeChi2(myFunc,
-                               myFuncDeriv,
-                               domain,
-                               data,
-                               errors,
-                               initialGuess,
-                               NULL,
-                               &chiSq);
-
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("theParams[%d] is %.1f\n", i, theParams->data.F32[i]);
-    }
-    printf("chiSq is %f\n", chiSq);
-
-    psMemCheckCorruption(1);
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimizeChi2(): no masks",
-                testStatus);
-    psMemCheckCorruption(1);
-    psFree(domain);
-    psFree(data);
-    psFree(errors);
-    psFree(initialGuess);
-    psFree(paramMask);
-    psFree(tmpVecPtr);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psMinimize02.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize02.c	(revision 4546)
+++ 	(revision )
@@ -1,168 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psMinimize function correctly
-    minimizes an arbitrary function.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define DATA_WIDTH 2
-#define NUM_PARAMS 2
-
-float myFunc0(const psVector *restrict myParams,
-              const psVector *restrict myCoords)
-{
-    float P0 = myCoords->data.F32[0];
-    float P1 = myCoords->data.F32[1];
-    float x = myParams->data.F32[0];
-    float y = myParams->data.F32[1];
-    float tmp = 0.0;
-
-    tmp = 10.0 * (x - P0) * (x - P0) + 20.0 * (y - P1) * (y - P1) + 30.0;
-    //    printf("--------- myFunc((%.1f %.1f) %.1f %.1f) is %.1f ---------\n",
-    //    printf("--------- myFunc() params: (%.1f %.1f) coords: (%.1f %.1f) is %.1f ---------\n",
-    //           x, y, P0, P1, tmp);
-
-    return(tmp);
-}
-
-float myFuncDeriv0(const psVector *restrict myParams,
-                   const psVector *restrict myCoords,
-                   psS32 whichParamDeriv)
-{
-    float P0 = myCoords->data.F32[0];
-    float P1 = myCoords->data.F32[1];
-    float x = myParams->data.F32[0];
-    float y = myParams->data.F32[1];
-    float tmp = 0.0;
-
-    if (whichParamDeriv == 0) {
-        tmp = 20.0 * (x - P0);
-    } else
-        if (whichParamDeriv == 1) {
-            tmp = 40.0 * (y - P1);
-        }
-
-    //    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f (%d)) is %.1f ---------\n",
-    //            x, y, myParams->data.F32[0], myParams->data.F32[1], whichParamDeriv, tmp);
-    return(tmp);
-}
-
-
-float myFunc(const psVector *restrict myParams,
-             const psVector *restrict myCoords)
-{
-    float x = myCoords->data.F32[0];
-    float y = myCoords->data.F32[1];
-    float A = myParams->data.F32[0];
-    float B = myParams->data.F32[1];
-    float C = myParams->data.F32[2];
-    float D = myParams->data.F32[3];
-    float tmp = 0.0;
-
-    tmp = (A * x) + (B*x*x) + (C*y*y) + (D*x*x*y);
-    printf("--------- myFunc((%.1f %.1f) %.1f %.1f %.1f %.1f) is %.1f ---------\n",
-           x, y, A, B, C, D, tmp);
-
-    return(tmp);
-}
-
-float myFuncDeriv(const psVector *restrict myParams,
-                  const psVector *restrict myCoords,
-                  psS32 whichParamDeriv)
-{
-    float x = myCoords->data.F32[0];
-    float y = myCoords->data.F32[1];
-    float tmp = 0.0;
-
-    if (whichParamDeriv == 0) {
-        tmp = 1.0;
-        tmp = x;
-    } else
-        if (whichParamDeriv == 1) {
-            tmp = x;
-            tmp = x*x;
-        } else
-            if (whichParamDeriv == 2) {
-                tmp = y;
-                tmp = y*y;
-            } else
-                if (whichParamDeriv == 3) {
-                    tmp = x * x * y;
-                }
-
-    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
-           x, y, myParams->data.F32[0], myParams->data.F32[1],
-           myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
-    return(tmp);
-}
-
-
-psS32 main()
-{
-    psVector *initialGuess = NULL;
-    psVector *paramMask = NULL;
-    psVector *coord = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    psVector *theParams = NULL;
-
-    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    coord = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
-
-
-    //--------- myFunc((0.0 1.0) -8.6 -7.6 14.6 5.0) is 6.0 ---------
-
-    // Build the data.
-    initialGuess->data.F32[0] = 5.0;
-    initialGuess->data.F32[1] = 7.0;
-
-    for (i=0;i<DATA_WIDTH;i++) {
-        coord->data.F32[i] = (float) i;
-    }
-    coord->data.F32[0] = 1.0;
-    coord->data.F32[1] = 2.0;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimize(): no masks");
-
-    for (i=0;i<NUM_PARAMS;i++)
-        printf("Initial parameter %d is: %.1f\n", i, initialGuess->data.F32[i]);
-
-    theParams = psMinimize(initialGuess,
-                           myFunc0,
-                           myFuncDeriv0,
-                           coord,
-                           NULL);
-
-    for (i=0;i<NUM_PARAMS;i++)
-        printf("Parameter %d is: %.1f\n", i, theParams->data.F32[i]);
-
-    psMemCheckCorruption(1);
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimize(): no masks",
-                testStatus);
-
-    psMemCheckCorruption(1);
-    psFree(initialGuess);
-    psFree(paramMask);
-    psFree(coord);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psMinimize03.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize03.c	(revision 4546)
+++ 	(revision )
@@ -1,172 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psMinimize function correctly
-    minimizes an arbitrary function.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define DATA_WIDTH 2
-#define NUM_PARAMS 4
-
-float myFunc0(const psVector *restrict myParams,
-              const psVector *restrict myCoords)
-{
-    float P0 = myCoords->data.F32[0];
-    float P1 = myCoords->data.F32[1];
-    float x = myParams->data.F32[0];
-    float y = myParams->data.F32[1];
-    float tmp = 0.0;
-
-    tmp = 10.0 * (x - P0) * (x - P0) + 20.0 * (y - P1) * (y - P1) + 30.0;
-    //    printf("--------- myFunc((%.1f %.1f) %.1f %.1f) is %.1f ---------\n",
-    //    printf("--------- myFunc() params: (%.1f %.1f) coords: (%.1f %.1f) is %.1f ---------\n",
-    //           x, y, P0, P1, tmp);
-
-    return(tmp);
-}
-
-float myFuncDeriv0(const psVector *restrict myParams,
-                   const psVector *restrict myCoords,
-                   psS32 whichParamDeriv)
-{
-    float P0 = myCoords->data.F32[0];
-    float P1 = myCoords->data.F32[1];
-    float x = myParams->data.F32[0];
-    float y = myParams->data.F32[1];
-    float tmp = 0.0;
-
-    if (whichParamDeriv == 0) {
-        tmp = 20.0 * (x - P0);
-    } else
-        if (whichParamDeriv == 1) {
-            tmp = 40.0 * (y - P1);
-        }
-
-    //    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f (%d)) is %.1f ---------\n",
-    //            x, y, myParams->data.F32[0], myParams->data.F32[1], whichParamDeriv, tmp);
-    return(tmp);
-}
-
-
-float myFunc(const psVector *restrict myParams,
-             const psVector *restrict myCoords)
-{
-    float x = myCoords->data.F32[0];
-    float y = myCoords->data.F32[1];
-    float A = myParams->data.F32[0];
-    float B = myParams->data.F32[1];
-    float C = myParams->data.F32[2];
-    float D = myParams->data.F32[3];
-    float tmp = 0.0;
-
-    tmp = (A * x) + (B*x*x) + (C*y*y) + (D*x*x*y);
-    printf("-- myFunc() params: (%.1f %.1f %.1f %.1f) coords: (%.1f %.1f) is %.1f ---------\n",
-           A, B, C, D, x, y, tmp);
-
-    return(tmp);
-}
-
-float myFuncDeriv(const psVector *restrict myParams,
-                  const psVector *restrict myCoords,
-                  psS32 whichParamDeriv)
-{
-    float x = myCoords->data.F32[0];
-    float y = myCoords->data.F32[1];
-    float tmp = 0.0;
-
-    if (whichParamDeriv == 0) {
-        tmp = 1.0;
-        tmp = x;
-    } else
-        if (whichParamDeriv == 1) {
-            tmp = x;
-            tmp = x*x;
-        } else
-            if (whichParamDeriv == 2) {
-                tmp = y;
-                tmp = y*y;
-            } else
-                if (whichParamDeriv == 3) {
-                    tmp = x * x * y;
-                }
-
-    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
-           x, y, myParams->data.F32[0], myParams->data.F32[1],
-           myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
-    return(tmp);
-}
-
-
-psS32 main()
-{
-    psVector *initialGuess = NULL;
-    psVector *paramMask = NULL;
-    psVector *coord = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    psVector *theParams = NULL;
-
-    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    coord = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
-
-
-    //--------- myFunc((0.0 1.0) -8.6 -7.6 14.6 5.0) is 6.0 ---------
-
-    // Build the data.
-    initialGuess->data.F32[0] = 2.0;
-    initialGuess->data.F32[1] = 3.0;
-    initialGuess->data.F32[2] = 4.0;
-    initialGuess->data.F32[3] = 5.0;
-
-    for (i=0;i<DATA_WIDTH;i++) {
-        coord->data.F32[i] = (float) i;
-    }
-    coord->data.F32[0] = 1.0;
-    coord->data.F32[1] = 2.0;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimize(): no masks");
-
-    for (i=0;i<NUM_PARAMS;i++)
-        printf("Initial parameter %d is: %.1f\n", i, initialGuess->data.F32[i]);
-
-    theParams = psMinimize(initialGuess,
-                           myFunc,
-                           myFuncDeriv,
-                           coord,
-                           NULL);
-
-    for (i=0;i<NUM_PARAMS;i++)
-        printf("Parameter %d is: %.1f\n", i, theParams->data.F32[i]);
-
-    printf("Function is %.1f\n", myFunc(theParams, coord));
-
-    psMemCheckCorruption(1);
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimize(): no masks",
-                testStatus);
-
-    psMemCheckCorruption(1);
-    psFree(initialGuess);
-    psFree(paramMask);
-    psFree(coord);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psMinimize04.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize04.c	(revision 4546)
+++ 	(revision )
@@ -1,274 +1,0 @@
-/*****************************************************************************
-This routine must ensure that the psVectorFitPolynomial1D works correctly.
-We create a vectors of data points (x and y), and populate them with the
-values from an arbitrary function setData().  We then call
-psVectorFitPolynomial1D() with a regular polynomial data structure.  We then
-evaluate the polynomial with the coefficients generated above and determine
-if they are within an error tolerance of the expected values.
- 
-    t00(): all input vectors are non-NULL.
-    t01(): yErr is NULL.
-    t02(): x, yErr is NULL.
-    t03(): x, y, yErr is NULL.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define NUM_DATA 10
-#define POLY_ORDER 5
-#define A 3.0
-#define B 2.0
-#define C 3.0
-#define ERROR_TOLERANCE 0.10
-#define YERR 1.0
-double setData(double x)
-{
-    return(A + (B * x) + (C * x * x));
-}
-
-psS32 t00()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psVector *yErr = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    double expectData;
-    double actualData;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F64[i] = (double) i;
-        y->data.F64[i] = setData(x->data.F64[i]);
-        yErr->data.F64[i] = YERR;
-        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F64[i], y->data.F64[i]);
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): equal difference in variable yErr");
-
-    psVectorFitPolynomial1D(myPoly, x, y, yErr);
-
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    for (i=0;i<NUM_DATA;i++) {
-        expectData = setData(x->data.F64[i]);
-        actualData = psPolynomial1DEval(
-                         myPoly,
-                         x->data.F64[i]
-                     );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F64[i], actualData, expectData);
-            testStatus = false;
-        }
-        //        } else {
-        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-        //                   i, x->data.F64[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psFree(yErr);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): equal differences in variable yErr",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t01()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    double expectData;
-    double actualData;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F64[i] = (double) i;
-        y->data.F64[i] = setData(x->data.F64[i]);
-        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F64[i], y->data.F64[i]);
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, x, y, NULL);
-
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    for (i=0;i<NUM_DATA;i++) {
-        expectData = setData(x->data.F64[i]);
-        actualData = psPolynomial1DEval(
-                         myPoly,
-                         x->data.F64[i]
-                     );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F64[i], actualData, expectData);
-            testStatus = false;
-            //        } else {
-            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-            //                   i, x->data.F64[i], actualData, expectData);
-        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): yErr is NULL",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t02()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    double expectData;
-    double actualData;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    for (i=0;i<NUM_DATA;i++) {
-        y->data.F64[i] = setData((double) i);
-        //        printf("Original data %d: (%.1f)\n", i, y->data.F64[i]);
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): x, yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
-
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    for (i=0;i<NUM_DATA;i++) {
-        expectData = setData((double) i);
-        actualData = psPolynomial1DEval(
-                         myPoly,
-                         (double) i
-                     );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, (double) i, actualData, expectData);
-            testStatus = false;
-            //        } else {
-            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-            //                   i, (double) i, actualData, expectData);
-        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): x, yErr is NULL",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t03()
-{
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    psPolynomial1D *myPoly = NULL;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): all inputs are NULL");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for null input polynomial.");
-    myPoly = psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
-    if ( myPoly != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"A null polynomial should have returned a null pointer.");
-        testStatus = false;
-    }
-
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): all inputs are NULL",
-                testStatus);
-
-    return (!testStatus);
-}
-
-
-psS32 main()
-{
-    t00();
-    t01();
-    t02();
-    t03();
-}
Index: unk/psLib/test/dataManip/tst_psMinimize04_F32.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize04_F32.c	(revision 4546)
+++ 	(revision )
@@ -1,268 +1,0 @@
-/*****************************************************************************
-This routine must ensure that the psVectorFitPolynomial1D works correctly.
-We create a vectors of data points (x and y), and populate them with the
-values from an arbitrary function setData().  We then call
-psVectorFitPolynomial1D() with a regular polynomial data structure.  We then
-evaluate the polynomial with the coefficients generated above and determine
-if they are within an error tolerance of the expected values.
- 
-    t00(): all input vectors are non-NULL.
-    t01(): yErr is NULL.
-    t02(): x, yErr is NULL.
-    t03(): x, y, yErr is NULL.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define NUM_DATA 10
-#define POLY_ORDER 5
-#define A 3.0
-#define B 2.0
-#define C 3.0
-#define ERROR_TOLERANCE 0.10
-#define YERR 10.0
-float setData(float x)
-{
-    return(A + (B * x) + (C * x * x));
-}
-
-psS32 t00()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psVector *yErr = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    float expectData;
-    float actualData;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F32[i] = (float) i;
-        y->data.F32[i] = setData(x->data.F32[i]);
-        yErr->data.F32[i] = YERR;
-        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F32[i], y->data.F32[i]);
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): equal errors in yErr");
-
-    psVectorFitPolynomial1D(myPoly, x, y, yErr);
-
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    for (i=0;i<NUM_DATA;i++) {
-        expectData = setData(x->data.F32[i]);
-        actualData = psPolynomial1DEval(
-                         myPoly,
-                         x->data.F32[i]
-                     );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F32[i], actualData, expectData);
-            testStatus = false;
-            //        } else {
-            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-            //                   i, x->data.F32[i], actualData, expectData);
-        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psFree(yErr);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): equal errors in yErr",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t01()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    float expectData;
-    float actualData;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F32[i] = (float) i;
-        y->data.F32[i] = setData(x->data.F32[i]);
-        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F32[i], y->data.F32[i]);
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, x, y, NULL);
-
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    for (i=0;i<NUM_DATA;i++) {
-        expectData = setData(x->data.F32[i]);
-        actualData = psPolynomial1DEval(
-                         myPoly,
-                         x->data.F32[i]
-                     );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F32[i], actualData, expectData);
-            testStatus = false;
-            //        } else {
-            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-            //                   i, x->data.F32[i], actualData, expectData);
-        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): yErr is NULL",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t02()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-    float expectData;
-    float actualData;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-
-    for (i=0;i<NUM_DATA;i++) {
-        y->data.F32[i] = setData((float) i);
-        //        printf("Original data %d: (%.1f)\n", i, y->data.F32[i]);
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): x, yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
-
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    for (i=0;i<NUM_DATA;i++) {
-        expectData = setData((float) i);
-        actualData = psPolynomial1DEval(
-                         myPoly,
-                         (float) i
-                     );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, (float) i, actualData, expectData);
-            testStatus = false;
-            //        } else {
-            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-            //                   i, (float) i, actualData, expectData);
-        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): x, yErr is NULL",
-                testStatus);
-
-    return (!testStatus);
-}
-
-psS32 t03()
-{
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): all inputs are NULL");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null arguments.");
-    psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
-
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): all inputs are NULL",
-                testStatus);
-
-    return (!testStatus);
-}
-
-
-psS32 main()
-{
-    t00();
-    t01();
-    t02();
-    t03();
-}
Index: unk/psLib/test/dataManip/tst_psMinimize04b.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize04b.c	(revision 4546)
+++ 	(revision )
@@ -1,259 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psVectorFitPolynomial1D works correctly.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define NUM_DATA 21
-#define POLY_ORDER 10
-#define A 2.0
-#define B 3.0
-#define C 2.0
-#define D 4.0
-#define E 5.0
-#define ERROR_TOLERANCE 0.10
-#define IGNORE (ERROR_TOLERANCE * NUM_DATA)
-
-double setData(double x)
-{
-    return(A + (B * x) + (C * x * x) + (D * x * x * x) + (E * x * x * x * x));
-}
-
-psS32 t00()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psVector *yErr = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F64[i] = (double) i;
-        y->data.F64[i] = setData(x->data.F64[i]);
-        yErr->data.F64[i] = 1.0;
-    }
-    p_psNormalizeVectorRangeF64(x, -1.0, 1.0);
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, equal errors in yErr");
-
-    psVectorFitPolynomial1D(myPoly, x, y, yErr);
-
-    //  Remove for testing since print out differs from platforms
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    // We don't test the first or last few data items.
-    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
-        double expectData = y->data.F64[i];
-        double actualData = psPolynomial1DEval(
-                                myPoly,
-                                x->data.F64[i]
-                            );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F64[i], actualData, expectData);
-            testStatus = false;
-        }
-        //      Remove for testing since print out differs from platforms
-        //        } else {
-        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-        //                   i, x->data.F64[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psFree(yErr);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, equal errors in yErr",
-                testStatus);
-    return (!testStatus);
-}
-
-
-psS32 t01()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F64[i] = (double) i;
-        y->data.F64[i] = setData(x->data.F64[i]);
-    }
-    p_psNormalizeVectorRangeF64(x, -1.0, 1.0);
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, x, y, NULL);
-
-    // We don't test the first or last few data items.
-    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
-        double expectData = y->data.F64[i];
-        double actualData = psPolynomial1DEval(
-                                myPoly,
-                                x->data.F64[i]
-                            );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F64[i], actualData, expectData);
-            testStatus = false;
-        }
-        //      Remove for testing since print out differs from platforms
-        //        } else {
-        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-        //                   i, x->data.F64[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
-                testStatus);
-    return (!testStatus);
-}
-
-
-psS32 t02()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F64[i] = (double) i;
-        y->data.F64[i] = setData(x->data.F64[i]);
-    }
-    p_psNormalizeVectorRangeF64(x, -1.0, 1.0);
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
-    //    psVectorFitPolynomial1D(myPoly, x, y, NULL);
-
-    // We don't test the first or last few data items.
-    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
-        double expectData = y->data.F64[i];
-        double actualData = psPolynomial1DEval(myPoly, x->data.F64[i]);
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.2f %.2f), expected was (%.2f)\n",
-                   i, x->data.F64[i], actualData, expectData);
-            testStatus = false;
-        }
-        //      Remove for testing since print out differs from platforms
-        //        } else {
-        //            printf("Fitted data %d: (%.2f %.2f), expected was (%.2f)\n",
-        //                   i, x->data.F64[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL",
-                testStatus);
-    return (!testStatus);
-}
-
-psS32 t03()
-{
-    psPolynomial1D *myPoly = NULL;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for null arguments.");
-    myPoly = psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
-    if (myPoly != NULL) {
-        printf("ERROR: psVectorFitPolynomial1D() returned a non-NULL polynomial.\n");
-        testStatus = false;
-    }
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
-                testStatus);
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    t00();
-    t01();
-    t02();
-    t03();
-}
Index: unk/psLib/test/dataManip/tst_psMinimize04b_F32.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize04b_F32.c	(revision 4546)
+++ 	(revision )
@@ -1,261 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psVectorFitPolynomial1D works correctly.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psMemory.h"
-#include "psVector.h"
-#include "psImage.h"
-#include "psFunctions.h"
-#include "psMinimize.h"
-#include <math.h>
-#define NUM_DATA 20
-#define POLY_ORDER 10
-#define A 2.0
-#define B 3.0
-#define C 2.0
-#define D 4.0
-#define E 5.0
-#define ERROR_TOLERANCE 0.10
-#define IGNORE (ERROR_TOLERANCE * NUM_DATA)
-
-float setData(float x)
-{
-    return(A + (B * x) + (C * x * x) + (D * x * x * x) + (E * x * x * x * x));
-}
-
-psS32 t00()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psVector *yErr = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F32[i] = (float) i;
-        y->data.F32[i] = setData(x->data.F32[i]);
-        yErr->data.F32[i] = 1.0;
-    }
-    p_psNormalizeVectorRangeF32(x, -1.0f, 1.0f);
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, equal errors in yErr");
-
-    psVectorFitPolynomial1D(myPoly, x, y, yErr);
-
-    //  Remove for testing since printout differs between platforms
-    //    for (i=0;i<POLY_ORDER+1;i++) {
-    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
-    //    }
-
-    // We don't test the first or last few data items.
-    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
-        float expectData = y->data.F32[i];
-        float actualData = psPolynomial1DEval(
-                               myPoly,
-                               x->data.F32[i]
-                           );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F32[i], actualData, expectData);
-            testStatus = false;
-        }
-        //       REMOVE for testing since printout is different for different platforms
-        //        } else {
-        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-        //                   i, x->data.F32[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psFree(yErr);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, equal errors in yErr",
-                testStatus);
-    return (!testStatus);
-}
-
-
-psS32 t01()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F32[i] = (float) i;
-        y->data.F32[i] = setData(x->data.F32[i]);
-    }
-    p_psNormalizeVectorRangeF32(x, -1.0f, 1.0f);
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, x, y, NULL);
-
-    // We don't test the first or last few data items.
-    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
-        float expectData = y->data.F32[i];
-        float actualData = psPolynomial1DEval(
-                               myPoly,
-                               x->data.F32[i]
-                           );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F32[i], actualData, expectData);
-            testStatus = false;
-        }
-        //      Removed for testing since printout different on different platforms
-        //        } else {
-        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-        //                   i, x->data.F32[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
-                testStatus);
-    return (!testStatus);
-}
-
-
-psS32 t02()
-{
-    psPolynomial1D *myPoly = NULL;
-    psVector *x = NULL;
-    psVector *y = NULL;
-    psS32 i = 0;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
-    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
-
-    for (i=0;i<NUM_DATA;i++) {
-        x->data.F32[i] = (float) i;
-        y->data.F32[i] = setData(x->data.F32[i]);
-    }
-    p_psNormalizeVectorRangeF32(x, -1.0, 1.0);
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL");
-
-    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
-
-    // We don't test the first or last few data items.
-    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
-        float expectData = y->data.F32[i];
-        float  actualData = psPolynomial1DEval(
-                                myPoly,
-                                x->data.F32[i]
-                            );
-        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                   i, x->data.F32[i], actualData, expectData);
-            testStatus = false;
-        }
-        //      Remove for testing since printout different for different platforms
-        //        } else {
-        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-        //                   i, x->data.F32[i], actualData, expectData);
-        //        }
-    }
-
-    psMemCheckCorruption(1);
-    psFree(myPoly);
-    psFree(x);
-    psFree(y);
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL",
-                testStatus);
-    return (!testStatus);
-}
-
-psS32 t03()
-{
-    psPolynomial1D *myPoly = NULL;
-    psS32 currentId = psMemGetId();
-    psS32 testStatus = true;
-    psS32 memLeaks = 0;
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null arguments.");
-    myPoly = psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
-    if (myPoly != NULL) {
-        printf("ERROR: psVectorFitPolynomial1D() returned a non-NULL polynomial.\n");
-        testStatus = false;
-    }
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    printFooter(stdout,
-                "psMinimize functions",
-                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
-                testStatus);
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    t00();
-    t01();
-    t02();
-    t03();
-}
Index: unk/psLib/test/dataManip/tst_psMinimize05.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize05.c	(revision 4546)
+++ 	(revision )
@@ -1,279 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that psMinimizePowell() works correctly.
- 
-    We test with a NULL and non-NULL paramMask.
- 
-    XXX: Must verify the stderr for the NULL parameter tests.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include <math.h>
-#define N 5
-#define MIN_VALUE 20.0
-#define NUM_PARAMS 10
-#define ERROR_TOLERANCE 0.10
-float expectedParm[NUM_PARAMS];
-psS32 testStatus = true;
-
-/*****************************************************************************
-myFunc(): This routine subtracts the associate value in expectedParm[] from
-each parameter and then squares it, then sums that for all parameters, then
-adds MIN_VALUE to it.  The minimum for this function will be MIN_VALUE, and
-will occur when each parameter equals the associated value in expectedParm[].
- 
-This procedure ignores the coordinates, other than to ensure that they were
-passed correctly from psMinimizePowell().
- *****************************************************************************/
-float myFunc(psVector *myParams,
-             psArray *myCoords)
-{
-    float sum = 0.0;
-    float coordData = 0.0;
-    float expData = 0.0;
-    psS32 i;
-
-    for (i=0;i<N;i++) {
-        coordData = ((psVector *) (myCoords->data[i]))->data.F32[0];
-        expData = (float) (i+10);
-        if (fabs(coordData - expData) > FLT_EPSILON) {
-            printf("ERROR(1): coordinate data was incorrectly passed to myFunc()\n");
-            printf("ERROR(1): was (%f) should be (%f)\n", coordData, expData);
-            testStatus = false;
-        }
-        coordData = ((psVector *) (myCoords->data[i]))->data.F32[1];
-        expData = (float) (i+3);
-        if (fabs(coordData - expData) > FLT_EPSILON) {
-            printf("ERROR(2): coordinate data was incorrectly passed to myFunc()\n");
-            printf("ERROR(2): was (%f) should be (%f)\n", coordData, expData);
-            testStatus = false;
-        }
-    }
-
-
-    sum = 0.0;
-    for (i=0;i<NUM_PARAMS;i++) {
-        sum+= (myParams->data.F32[i] - expectedParm[i]) * (myParams->data.F32[i] - expectedParm[i]);
-    }
-    sum = MIN_VALUE + (sum * sum);
-
-    return(sum);
-}
-
-
-psS32 t00()
-{
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    psS32 i = 0;
-    psArray *myCoords;
-    psVector *myParams;
-    psVector *myParamMask;
-    psMinimization *min;
-
-    psTraceSetLevel(".psLib", 0);
-    /**************************************************************************
-     *************************************************************************/
-    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    myParamMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_U8);
-    min = psMinimizationAlloc(100, 0.01);
-
-    myCoords = psArrayAlloc(N);
-    for (i=0;i<N;i++) {
-        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
-        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
-        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
-    }
-    for (i=0;i<NUM_PARAMS;i++) {
-        expectedParm[i] = 2.32 + (float) (2 * i);
-        myParams->data.F32[i] = 0.0;
-        myParams->data.F32[i] = (float) i;
-        myParamMask->data.U8[i] = 0;
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimizePowell()");
-
-    psMinimizePowell(min,
-                     myParams,
-                     myParamMask,
-                     myCoords,
-                     (psMinimizePowellFunc) myFunc);
-
-    printf("\nThe minimum is %f (expected: %f)\n", min->value, MIN_VALUE);
-
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
-               myParams->data.F32[i], expectedParm[i]);
-
-        if (fabs(myParams->data.F32[i] - expectedParm[i]) > fabs(ERROR_TOLERANCE * expectedParm[i])) {
-            printf("ERROR: Parameter %d: (%.1f), expected was (%.1f)\n",
-                   i, myParams->data.F32[i], expectedParm[i]);
-            testStatus = false;
-        } else {
-            printf("Parameter %d: (%.1f), expected was (%.1f)\n",
-                   i, myParams->data.F32[i], expectedParm[i]);
-        }
-    }
-
-
-    psFree(myCoords);
-    psFree(myParams);
-    psFree(myParamMask);
-    psFree(min);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimizePowell()",
-                testStatus);
-
-
-    return (!testStatus);
-}
-
-psS32 t01()
-{
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    psS32 i = 0;
-    psArray *myCoords;
-    psVector *myParams;
-    psMinimization *min;
-
-    psTraceSetLevel(".psLib", 0);
-    /**************************************************************************
-     *************************************************************************/
-    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    min = psMinimizationAlloc(100, 0.01);
-
-    myCoords = psArrayAlloc(N);
-    for (i=0;i<N;i++) {
-        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
-        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
-        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
-    }
-    for (i=0;i<NUM_PARAMS;i++) {
-        expectedParm[i] = 2.32 + (float) (2 * i);
-        myParams->data.F32[i] = 0.0;
-        myParams->data.F32[i] = (float) i;
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimizePowell()");
-
-    psMinimizePowell(min,
-                     myParams,
-                     NULL,
-                     myCoords,
-                     (psMinimizePowellFunc) myFunc);
-
-    printf("\nThe minimum is %f (expected: %f)\n", min->value, MIN_VALUE);
-
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
-               myParams->data.F32[i], expectedParm[i]);
-
-        if (fabs(myParams->data.F32[i] - expectedParm[i]) > fabs(ERROR_TOLERANCE * expectedParm[i])) {
-            printf("ERROR: Parameter %d: (%.1f), expected was (%.1f)\n",
-                   i, myParams->data.F32[i], expectedParm[i]);
-            testStatus = false;
-        } else {
-            printf("Parameter %d: (%.1f), expected was (%.1f)\n",
-                   i, myParams->data.F32[i], expectedParm[i]);
-        }
-    }
-
-
-    psFree(myCoords);
-    psFree(myParams);
-    psFree(min);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimizePowell()",
-                testStatus);
-
-
-    return (!testStatus);
-}
-
-psS32 t02()
-{
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    psS32 i = 0;
-    psArray *myCoords;
-    psVector *myParams;
-    psVector *myParamMask;
-    psMinimization *min;
-
-    psTraceSetLevel(".psLib", 0);
-    /**************************************************************************
-     *************************************************************************/
-    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    myParamMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_U8);
-    min = psMinimizationAlloc(100, 0.01);
-
-    myCoords = psArrayAlloc(N);
-    for (i=0;i<N;i++) {
-        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
-        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
-        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
-    }
-    for (i=0;i<NUM_PARAMS;i++) {
-        expectedParm[i] = 2.32 + (float) (2 * i);
-        myParams->data.F32[i] = 0.0;
-        myParams->data.F32[i] = (float) i;
-        myParamMask->data.U8[i] = 0;
-    }
-
-    printPositiveTestHeader(stdout,
-                            "psMinimize functions",
-                            "psMinimizePowell(): various NULL inputs");
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null minimize.");
-    psMinimizePowell(NULL, myParams, myParamMask, myCoords, (psMinimizePowellFunc) myFunc);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null parameter vector");
-    psMinimizePowell(min, NULL, myParamMask, myCoords,(psMinimizePowellFunc) myFunc);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null coords.");
-    psMinimizePowell(min, myParams, myParamMask, NULL, (psMinimizePowellFunc) myFunc);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null function");
-    psMinimizePowell(min, myParams, myParamMask, myCoords, NULL);
-
-    psFree(myCoords);
-    psFree(myParams);
-    psFree(myParamMask);
-    psFree(min);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    printFooter(stdout,
-                "psMinimize functions",
-                "psMinimizePowell(): various NULL inputs",
-                testStatus);
-
-
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    t00();
-    t01();
-    t02();
-}
Index: unk/psLib/test/dataManip/tst_psMinimize06.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize06.c	(revision 4546)
+++ 	(revision )
@@ -1,107 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that psMinimizeLM() works correctly.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include <math.h>
-#define NUM_ITERATIONS 10000
-#define ERR_TOL 0.0
-#define N 20
-#define MIN_VALUE 5.0
-#define NUM_PARAMS 3
-float expectedParm[NUM_PARAMS];
-psS32 testStatus = true;
-
-/*****************************************************************************
-myFunc():
-    sum = (param[0] * x[0]) + 
-          (param[1] * x[1]) +
-          ...
- *****************************************************************************/
-psF64 myFunc(psVector *deriv,
-             psVector *params,
-             psVector *x)
-{
-    if ((deriv == NULL) ||
-            (params == NULL)) {
-        psError(PS_ERR_UNKNOWN, true, "deriv or params is NULL.\n");
-    }
-
-    psF64 sum = 0.0;
-    for (psS32 i=0 ; i < params->n ; i++) {
-        sum += (params->data.F32[i] * x->data.F32[i]);
-        deriv->data.F32[i] = params->data.F32[i];
-    }
-
-    return(sum);
-}
-
-
-psS32 t01()
-{
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    psS32 i = 0;
-    psArray *myCoords;
-    psVector *myParams;
-    psImage *myCovar;
-    psMinimization *min;
-    psVector *y;
-
-    psTraceSetLevel(".psLib", 0);
-    /**************************************************************************
-     *************************************************************************/
-    min = psMinimizationAlloc(NUM_ITERATIONS, ERR_TOL);
-    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
-    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    myCoords = psArrayAlloc(N);
-    y = psVectorAlloc(N, PS_TYPE_F32);
-
-    for (i=0;i<N;i++) {
-        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
-        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
-        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
-        y->data.F32[i] = (float) i;
-    }
-    for (i=0;i<NUM_PARAMS;i++) {
-        expectedParm[i] = 2.42 + (float) (2 * i);
-        myParams->data.F32[i] = (float) i;
-        myParams->data.F32[i] = expectedParm[i] * 1.3;
-        myParams->data.F32[i] = 0.0;
-        myParams->data.F32[i] = (float) (5 + i);
-    }
-
-    psMinimizeLMChi2(min,
-                     myCovar,
-                     myParams,
-                     NULL,
-                     myCoords,
-                     y,
-                     NULL,
-                     (psMinimizeLMChi2Func) myFunc);
-
-    printf("\nThe chi-squared is %f\n", min->value);
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
-               myParams->data.F32[i], expectedParm[i]);
-    }
-
-    psFree(min);
-    psFree(myCovar);
-    psFree(myParams);
-    psFree(myCoords);
-    psFree(y);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    t01();
-}
Index: unk/psLib/test/dataManip/tst_psMinimize07.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psMinimize07.c	(revision 4546)
+++ 	(revision )
@@ -1,164 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that psMinimizeLMChi2Gauss1D() works correctly.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include <math.h>
-#define NUM_ITERATIONS 100
-#define ERR_TOL 0.0
-#define N 24
-#define NUM_PARAMS 2
-#define MEAN 14.5
-#define STDEV 1.2
-
-float expectedParm[NUM_PARAMS];
-psS32 testStatus = true;
-
-// This routine generates a vector of length "n" with the specified mean and
-// stdev.
-psVector *genGaussianVector(int n, float mean, float stdev)
-{
-    psVector *y = psVectorAlloc(n, PS_TYPE_F32);
-
-    for (psS32 i=0;i<n;i++) {
-        y->data.F32[i] = psGaussian((float) i, mean, stdev, false);
-    }
-    return(y);
-}
-
-// This routine tries to fit a Gaussian to a set of data points via the
-// psMinimizeLMChi2() and psMinimizeLMChi2Gauss1D() functions.
-psS32 t00()
-{
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    psS32 i = 0;
-    psArray *myCoords;
-    psVector *myParams;
-    psImage *myCovar;
-    psMinimization *min;
-
-    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
-    /**************************************************************************
-     *************************************************************************/
-    min = psMinimizationAlloc(NUM_ITERATIONS, ERR_TOL);
-    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
-    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    myParams->data.F32[0] = MEAN * 0.7;
-    myParams->data.F32[1] = STDEV * 0.7;
-    myCoords = psArrayAlloc(N);
-    psVector *y = genGaussianVector(N, MEAN, STDEV);
-
-    for (i=0;i<N;i++) {
-        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
-        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i;
-        printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]);
-    }
-
-    psMinimizeLMChi2(min,
-                     myCovar,
-                     myParams,
-                     NULL,
-                     myCoords,
-                     y,
-                     NULL,
-                     (psMinimizeLMChi2Func) psMinimizeLMChi2Gauss1D);
-
-    printf("\nThe chi-squared is %f\n", min->value);
-
-    expectedParm[0] = MEAN;
-    expectedParm[1] = STDEV;
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
-               myParams->data.F32[i], expectedParm[i]);
-    }
-
-    psFree(min);
-    psFree(myCovar);
-    psFree(myParams);
-    psFree(myCoords);
-    psFree(y);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    return (!testStatus);
-}
-
-// This routine tries to fit a Gaussian to a set of data points via the
-// psMinimizeChi2Powell() function.
-psS32 t01()
-{
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    psS32 i = 0;
-    psArray *myCoords;
-    psVector *myParams;
-    psImage *myCovar;
-    psMinimization *min;
-
-    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
-    psTraceSetLevel(".psLib.dataManip.psMinimizeLMChi2Gauss1D", 0);
-
-    psTraceSetLevel(".psLib.dataManip.psMinimizePowell", 0);
-    psTraceSetLevel(".psLib.dataManip.myPowellChi2Func", 0);
-    psTraceSetLevel(".psLib.dataManip.p_psLineMin", 0);
-    psTraceSetLevel(".psLib.dataManip.p_psDetermineBracket", 0);
-    psTraceSetLevel(".psLib.dataManip.psFunctions.psGaussian", 0);
-    psTraceSetLevel(".psLib.dataManip.psFunctions", 0);
-    psTraceSetLevel(".", 0);
-    //    psTracePrintLevels();
-    /**************************************************************************
-     *************************************************************************/
-    min = psMinimizationAlloc(NUM_ITERATIONS, ERR_TOL);
-    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
-    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
-    myParams->data.F32[0] = MEAN * 0.7;
-    myParams->data.F32[1] = STDEV * 0.7;
-    myCoords = psArrayAlloc(N);
-    psVector *y = genGaussianVector(N, MEAN, STDEV);
-
-    for (i=0;i<N;i++) {
-        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
-        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i;
-        printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]);
-    }
-
-    //    psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL,
-    //                         (psMinimizeChi2PowellFunc) myFunc);
-    psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL,
-                         (psMinimizeChi2PowellFunc) psMinimizePowellChi2Gauss1D);
-
-    printf("\nThe chi-squared is %f\n", min->value);
-
-    expectedParm[0] = MEAN;
-    expectedParm[1] = STDEV;
-    for (i=0;i<NUM_PARAMS;i++) {
-        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
-               myParams->data.F32[i], expectedParm[i]);
-    }
-
-    psFree(min);
-    psFree(myCovar);
-    psFree(myParams);
-    psFree(myCoords);
-    psFree(y);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    return (!testStatus);
-}
-
-psS32 main()
-{
-    t00();
-    t01();
-}
-//This code is
-
Index: unk/psLib/test/dataManip/tst_psRandom.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psRandom.c	(revision 4546)
+++ 	(revision )
@@ -1,388 +1,0 @@
-/*****************************************************************************
-This routine must ensure that the various random number generator functions
-work properly.
- 
-    t00(): ensure that psRandom structs are properly allocated by psRandomAlloc().
-    t01(): ensure that psRandomUniform() produces a sequence of numbers with
-    proper mean and stdev.
-    t02(): ensure that psRandomGaussian() produces a sequence of numbers with
-    proper mean and stdev.
-    t03(): ensure that psRandomPoisson() produces a sequence of numbers with
-    proper mean and stdev.
-    t04(): ensure that psRandomReset() properly seeds the random number
-    generator for psRandomUniform().
-    t05(): ensure that psRandomReset() properly seeds the random number
-    generator for psRandomGaussian().
-    t06(): ensure that psRandomReset() properly seeds the random number
-    generator for psRandomPoisson().
- *****************************************************************************/
-#include <stdio.h>
-#include <math.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define NUM_DATA 10000
-#define SEED 54321
-#define SEED2 345
-#define UNIFORM_MEAN 0.5
-#define UNIFORM_STDEV 0.3
-#define GAUSSIAN_MEAN 0.0
-#define GAUSSIAN_STDEV 1.0
-#define POISSON_MEAN 15.0
-#define POISSON_STDEV (POISSON_MEAN / 4)
-#define ERROR_TOLERANCE 0.1
-psS32 testStatus = true;
-
-static psS32 testRandomAlloc(void);
-static psS32 testRandomUniform(void);
-static psS32 testRandomGaussian(void);
-static psS32 testRandomPoisson(void);
-static psS32 testRandomResetUniform(void);
-static psS32 testRandomResetGaussian(void);
-static psS32 testRandomResetPoisson(void);
-
-testDescription tests[] = {
-                              {testRandomAlloc,000,"psRandomAlloc",0,false},
-                              {testRandomUniform,000,"psRandomUniform",0,false},
-                              {testRandomGaussian,000,"psRandomGaussian",0,false},
-                              {testRandomPoisson,000,"psRandomPoisson",0,false},
-                              {testRandomResetUniform,000,"psRandomReset",0,false},
-                              {testRandomResetGaussian,000,"psRandomReset",0,false},
-                              {testRandomResetPoisson,000,"psRandomReset",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    if(!runTestSuite(stderr,"psRandom",tests,argc,argv)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-psS32 testRandomAlloc(void)
-{
-    psRandom *myRNG = NULL;
-
-    // Valid type allocation
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-    if (myRNG->type != PS_RANDOM_TAUS) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",myRNG->type,PS_RANDOM_TAUS);
-        return 2;
-    }
-    psFree(myRNG);
-
-    // Valid type allocation with seed equal to zero
-    psLogSetDestination("file:seed_msglog1.txt");
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, 0);
-    psLogSetDestination("dest:stderr");
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 3;
-    }
-    if (myRNG->type != PS_RANDOM_TAUS) {
-        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",myRNG->type,PS_RANDOM_TAUS);
-        return 4;
-    }
-    psFree(myRNG);
-
-    // Invalid type allocation
-    psLogMsg(__func__,PS_LOG_INFO,"Invalid type, should generate error message");
-    myRNG = psRandomAlloc(100,SEED);
-    if (myRNG != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid type");
-        return 5;
-    }
-
-    // Negative seed value
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS,-5);
-    if(myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return allocated psRandom");
-        return 6;
-    }
-    psFree(myRNG);
-
-    return 0;
-}
-
-psS32 testRandomUniform(void)
-{
-    psRandom *myRNG = NULL;
-    psVector *rans = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-
-    // Initialize vector data with random number
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans->data.F64[i] = psRandomUniform(myRNG);
-    }
-    // Perform vector stats on random data (mean, stdev)
-    stats = psVectorStats(stats, rans, NULL, NULL, 0);
-    stats->options = PS_STAT_SAMPLE_STDEV;
-    stats = psVectorStats(stats, rans, NULL, NULL, 0);
-    // Verify mean and stdev
-    if ((fabs(stats->sampleMean - UNIFORM_MEAN) / UNIFORM_MEAN) > ERROR_TOLERANCE) {
-        psError(PS_ERR_UNKNOWN,true,"psRandomUniform mean is %.2f, should be %.2f",
-                stats->sampleMean, UNIFORM_MEAN);
-        return 2;
-    }
-    if ((fabs(stats->sampleStdev - UNIFORM_STDEV) / UNIFORM_STDEV) > ERROR_TOLERANCE) {
-        psError(PS_ERR_UNKNOWN,true,"psRandomUniform stdev is %.2f, should be %.2f",
-                stats->sampleStdev, UNIFORM_STDEV);
-        return 3;
-    }
-
-    psFree(myRNG);
-    psFree(rans);
-    psFree(stats);
-
-    psLogMsg(__func__,PS_LOG_INFO,"NULL psRandom variable, should generate error message");
-    if(psRandomUniform(NULL) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return zero for null psRandom");
-        return 4;
-    }
-
-    return 0;
-}
-
-psS32 testRandomGaussian(void)
-{
-    psRandom *myRNG = NULL;
-    psVector *rans = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-
-    // Initialize vector with random data
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans->data.F64[i] = psRandomGaussian(myRNG);
-    }
-
-    // Perform vector stats on data (mean, stdev)
-    stats = psVectorStats(stats, rans, NULL, NULL, 0);
-    stats->options = PS_STAT_SAMPLE_STDEV;
-    stats = psVectorStats(stats, rans, NULL, NULL, 0);
-
-    // Verify statistics
-    if ((fabs(stats->sampleMean - GAUSSIAN_MEAN) / 1.0) > ERROR_TOLERANCE) {
-        psError(PS_ERR_UNKNOWN,true,"psRandomGaussian mean is %.2f, should be %.2f",
-                stats->sampleMean, GAUSSIAN_MEAN);
-        return 2;
-    }
-    if ((fabs(stats->sampleStdev - GAUSSIAN_STDEV) / GAUSSIAN_STDEV) > ERROR_TOLERANCE) {
-        psError(PS_ERR_UNKNOWN,true,"psRandomGaussian stdev is %.2f, should be %.2f",
-                stats->sampleStdev, GAUSSIAN_STDEV);
-        return 3;
-    }
-
-    psFree(myRNG);
-    psFree(rans);
-    psFree(stats);
-
-    psLogMsg(__func__,PS_LOG_INFO,"NULL psRandom variable, should generate error message");
-    if(psRandomGaussian(NULL) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return zero for null psRandom");
-        return 4;
-    }
-
-    return 0;
-}
-
-psS32 testRandomPoisson(void)
-{
-    psRandom *myRNG = NULL;
-    psVector *rans = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-
-    // Initialize vector with random data
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
-    }
-
-    // Perform statistics on data
-    stats = psVectorStats(stats, rans, NULL, NULL, 0);
-    stats->options = PS_STAT_SAMPLE_STDEV;
-    stats = psVectorStats(stats, rans, NULL, NULL, 0);
-    if ((fabs(stats->sampleMean - POISSON_MEAN) / POISSON_MEAN) > ERROR_TOLERANCE) {
-        psError(PS_ERR_UNKNOWN,true,"psRandomPoisson mean is %.2f, should be %.2f",
-                stats->sampleMean, POISSON_MEAN);
-        return 2;
-    }
-    if ((fabs(stats->sampleStdev - POISSON_STDEV) / POISSON_STDEV) > ERROR_TOLERANCE) {
-        psError(PS_ERR_UNKNOWN,true,"psRandomPoisson stdev is %.2f, should be %.2f",
-                stats->sampleStdev, POISSON_STDEV);
-        return 3;
-    }
-
-    psFree(myRNG);
-    psFree(rans);
-    psFree(stats);
-
-    psLogMsg(__func__,PS_LOG_INFO,"NULL psRandom variable, should generate error message");
-    if(psRandomPoisson(NULL, POISSON_MEAN) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return zero for null psRandom");
-        return 4;
-    }
-
-    return 0;
-}
-
-psS32 testRandomResetUniform(void)
-{
-    psRandom *myRNG = NULL;
-    psVector *rans00 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psVector *rans01 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psVector *rans02 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-
-    // Random reset
-    psRandomReset(myRNG, SEED);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans00->data.F64[i] = psRandomUniform(myRNG);
-    }
-    psRandomReset(myRNG, SEED2);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans01->data.F64[i] = psRandomUniform(myRNG);
-    }
-    psRandomReset(myRNG, SEED);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans02->data.F64[i] = psRandomUniform(myRNG);
-    }
-
-    // Verify reset to original seed produces same results
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        if (rans00->data.F64[i] != rans02->data.F64[i]) {
-            psError(PS_ERR_UNKNOWN,true,"psRandomUniform did not produce the same results with the same seed");
-            return i+1;
-        }
-    }
-
-    psFree(myRNG);
-    psFree(rans00);
-    psFree(rans01);
-    psFree(rans02);
-
-    psRandom *myRNG1 = NULL;
-    myRNG1 = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    psLogSetDestination("file:seed_msglog2.txt");
-    psRandomReset(myRNG1,0);
-    psLogSetDestination("dest:stderr");
-    psFree(myRNG1);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Reset a NULL psRandom variable, should generate an error message");
-    psRandomReset(NULL,SEED);
-
-    return 0;
-}
-
-psS32 testRandomResetGaussian(void)
-{
-    psRandom *myRNG = NULL;
-    psVector *rans00 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psVector *rans01 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psVector *rans02 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-
-    // Initialize random data in vectors
-    psRandomReset(myRNG, SEED);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans00->data.F64[i] = psRandomGaussian(myRNG);
-    }
-    psRandomReset(myRNG, SEED2);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans01->data.F64[i] = psRandomGaussian(myRNG);
-    }
-    psRandomReset(myRNG, SEED);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans02->data.F64[i] = psRandomGaussian(myRNG);
-    }
-
-    // Verify data from original seed produces same data after reset
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        if (rans00->data.F64[i] != rans02->data.F64[i]) {
-            psError(PS_ERR_UNKNOWN,true,"psRandomGaussian did not produce the same results with the same seed");
-            return 2;
-        }
-    }
-
-    psFree(myRNG);
-    psFree(rans00);
-    psFree(rans01);
-    psFree(rans02);
-
-    return 0;
-}
-
-psS32 testRandomResetPoisson(void)
-{
-    psRandom *myRNG = NULL;
-    psVector *rans00 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psVector *rans01 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-    psVector *rans02 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
-
-    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
-    if (myRNG == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
-        return 1;
-    }
-
-    // Initialize vectors with random data
-    psRandomReset(myRNG, SEED);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans00->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
-    }
-    psRandomReset(myRNG, SEED2);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans01->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
-    }
-    psRandomReset(myRNG, SEED);
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        rans02->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
-    }
-
-    // Verify the original seed produces same data after reset
-    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
-        if (rans00->data.F64[i] != rans02->data.F64[i]) {
-            psError(PS_ERR_UNKNOWN,true,"psRandomPoisson did not produce the same results with the same seed");
-            return 2;
-        }
-    }
-
-    psFree(myRNG);
-    psFree(rans00);
-    psFree(rans01);
-    psFree(rans02);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psStats00.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats00.c	(revision 4546)
+++ 	(revision )
@@ -1,389 +1,0 @@
-/** @file  tst_psStats00.c
-*
-*  @brief Contains tests for psVectorStats with sample mean calculations
-*
-*  We extensively test the code with data type PS_TYPE_F32.  If these pass, we 
-*  do a much simpler test with data types PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_F64.
-*
-*  If the psStats,c code every changes such that vectors of different type
-*  are handled by different routines, then these tests must be extended.
-*
-*  @author GLG, MHPCC
-* 
-*  @version $Revision: 1.18 $  $Name: not supported by cvs2svn $
-*  @date $Date: 2005-06-07 23:31:32 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define ERROR_TOL  0.0001
-#define N 15
-
-static psS32 testStatsSampleMeanF32(void);
-static psS32 testStatsSampleMeanS8(void);
-static psS32 testStatsSampleMeanU16(void);
-static psS32 testStatsSampleMeanF64(void);
-
-testDescription tests[] = {
-                              {testStatsSampleMeanF32, 512, "psVectorStats",0,false},
-                              {testStatsSampleMeanS8, 512, "psVectorStats",0,false},
-                              {testStatsSampleMeanU16, 512, "psVectorStats",0,false},
-                              {testStatsSampleMeanF64, 512, "psVectorStats",0,false},
-                              {NULL}
-                          };
-
-static psF32 samplesF32[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
-                               11.01, -12.02, 13.03, 14.04, -15.05 };
-static psS8  samplesS8[N]  = {1, 2, -3, 4, 5, -6, 7, 8, -9, 10, 11, -12, 13, 14, -15};
-static psU16 samplesU16[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
-static psF64 samplesF64[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
-                               11.01, -12.02, 13.03, 14.04, -15.05 };
-static psF32 errorsF32[N] = { -0.10,  0.11, -0.12,  0.13, -0.14,  0.15, -0.16,  0.17,
-                              -0.18,  0.19, -0.20,  0.21, -0.22,  0.23, -0.24 };
-
-static psF64 expectedMeanNoMaskF32              =  2.060667;
-static psF64 expectedMeanWithMaskF32            =  2.123846;
-static psF64 expectedMeanNoMaskS8               =  2.000000;
-static psF64 expectedMeanNoMaskU16              =  8.000000;
-static psF64 expectedMeanNoMaskF64              =  2.060667;
-static psF64 expectedMeanRangeNoMaskF32         =  0.137500;
-static psF64 expectedMeanRangeWithMaskF32       = -0.366667;
-static psF64 expectedWeightMeanNoMaskF32        =  1.807210;
-static psF64 expectedWeightMeanWithMaskF32      =  1.890217;
-static psF64 expectedWeightMeanNoMaskRangeF32   =  0.640952;
-static psF64 expectedWeightMeanWithMaskRangeF32 =  0.046574;
-
-psF64 rtc(void);
-psF64 sT, eT;
-psF64 diff;
-
-#include <unistd.h>
-psS32 main(psS32 argc, char* argv[] )
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ( ! runTestSuite(stderr, "psVectorStats",tests,argc,argv) );
-}
-
-psS32 testStatsSampleMeanF32(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psVector* maskVector = NULL;
-    psVector* myErrors   = NULL;
-    psF64     mean       = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    myErrors = psVectorAlloc(N, PS_TYPE_F32);
-    myErrors->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    mean = 0.0;
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.F32[i] =  samplesF32[i];
-        myErrors->data.F32[i] =  errorsF32[i];
-    }
-
-    // Set the mask vector and calculate the expected maximum.
-    for (psS32 i = 0; i < N; i++) {
-
-        if (i > 1) {
-            maskVector->data.U8[i] = 0;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedMeanNoMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedMeanNoMaskF32);
-        return 1;
-    }
-
-    // Invoke psVectorStats with no vector mask and error vector
-    myStats = psVectorStats(myStats, myVector, myErrors, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedWeightMeanNoMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedWeightMeanNoMaskF32);
-        return 10;
-    }
-
-    // Invoke psVectorStats with no vector mask and data range
-    myStats->min = -10.0;
-    myStats->max =   8.0;
-    myStats->options = PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE;
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedMeanRangeNoMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
-                mean, expectedMeanRangeNoMaskF32);
-        return 2;
-    }
-
-    // Invoke psVectorStats with no vector mask, errors and data range
-    myStats = psVectorStats(myStats, myVector, myErrors, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedWeightMeanNoMaskRangeF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
-                mean, expectedWeightMeanNoMaskRangeF32);
-        return 20;
-    }
-    myStats->options = PS_STAT_SAMPLE_MEAN;
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask=1.                             */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    mean = myStats->sampleMean;
-    if ( fabs(mean - expectedMeanWithMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedMeanWithMaskF32);
-        return 3;
-    }
-
-    // Invoke psVectorStats with vector mask and error vector
-    myStats = psVectorStats(myStats, myVector, myErrors, maskVector, 1);
-    mean = myStats->sampleMean;
-    if ( fabs(mean - expectedWeightMeanWithMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedWeightMeanWithMaskF32);
-        return 30;
-    }
-
-    // Invoke psVectorStats with vector mask and data range
-    myStats->options = PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE;
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedMeanRangeWithMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
-                mean, expectedMeanRangeWithMaskF32);
-        return 4;
-    }
-
-    // Invoke psVectorStats with vector mask, errors, and data range
-    myStats = psVectorStats(myStats, myVector, myErrors, maskVector, 1);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedWeightMeanWithMaskRangeF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
-                mean, expectedWeightMeanWithMaskRangeF32);
-        return 40;
-    }
-    myStats->options = PS_STAT_SAMPLE_MEAN;
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask=2.                             */
-    /*************************************************************************/
-    // Set the mask vector and calculate the expected maximum.
-    // Set the mask vector.
-    for (psS32 i = 0; i < N; i++) {
-        if (maskVector->data.U8[i] == 1) {
-            maskVector->data.U8[i] = 2;
-        }
-    }
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 2);
-    mean = myStats->sampleMean;
-    if (fabs(mean - expectedMeanWithMaskF32) > ERROR_TOL )  {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean,expectedMeanWithMaskF32);
-        return 5;
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask=3.                             */
-    /*************************************************************************/
-    // Set the mask vector and calculate the expected maximum.
-    // Set the mask vector.
-    for (psS32 i = 0; i < N; i++) {
-        if (maskVector->data.U8[i] == 2) {
-            maskVector->data.U8[i] = 3;
-        }
-    }
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 4);
-    mean = myStats->sampleMean;
-    if (fabs(mean - expectedMeanNoMaskF32) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
-                mean,expectedMeanNoMaskF32);
-        return 6;
-    }
-
-    // Mask all values and verify return is NAN
-    for(psS32 i = 0; i < N; i++) {
-        maskVector->data.U8[i] = 1;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate warning message");
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    mean = myStats->sampleMean;
-    if( !isnan(mean) ) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NAN with all values masked");
-        return 7;
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with NULL inputs.                               */
-    /*************************************************************************/
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    if( psVectorStats(myStats, NULL, NULL, NULL, 0) != myStats ) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorStats did not return stats when input NULL");
-        return 8;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    psStats *myStats2 = psVectorStats(NULL, myVector, NULL, NULL, 0);
-    if ( myStats2 != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorStats did not return NULL");
-        return 9;
-    }
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    psFree(myStats);
-    psFree(myVector);
-    psFree(myErrors);
-    psFree(maskVector);
-    psFree(myStats2);
-
-    return 0;
-}
-
-psS32 testStatsSampleMeanS8(void)
-{
-    psStats*  myStats  = NULL;
-    psVector* myVector = NULL;
-    psF64     mean     = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-    myVector = psVectorAlloc(N, PS_TYPE_S8);
-    myVector->n = N;
-
-    mean = 0.0;
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.S8[i] =  samplesS8[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedMeanNoMaskS8) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedMeanNoMaskS8);
-        return 1;
-    }
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
-psS32 testStatsSampleMeanU16(void)
-{
-    psStats*  myStats  = NULL;
-    psVector* myVector = NULL;
-    psF64     mean     = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-    myVector = psVectorAlloc(N, PS_TYPE_U16);
-    myVector->n = N;
-
-    mean = 0.0;
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.U16[i] =  samplesU16[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedMeanNoMaskU16) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedMeanNoMaskU16);
-        return 1;
-    }
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
-psS32 testStatsSampleMeanF64(void)
-{
-    psStats*  myStats  = NULL;
-    psVector* myVector = NULL;
-    psF64     mean     = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-    myVector = psVectorAlloc(N, PS_TYPE_F64);
-    myVector->n = N;
-
-    mean = 0.0;
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.F64[i] =  samplesF64[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    mean = myStats->sampleMean;
-    // Verify return value is as expected
-    if ( fabs(mean - expectedMeanNoMaskF64) > ERROR_TOL ) {
-        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
-                mean, expectedMeanNoMaskF64);
-        return 1;
-    }
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psStats01.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats01.c	(revision 4546)
+++ 	(revision )
@@ -1,264 +1,0 @@
-/** @file  tst_psStats01.c
-*
-*  @brief Contains tests for psVectorStats with max calculations.
-*
-*  We extensively test the code with data type PS_TYPE_F32.  If these pass, we 
-*  do a much simpler test with data types PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_F64.
-*
-*  If the psStats,c code every changes such that vectors of different type
-*  are handled by different routines, then these tests must be extended.
-*
-*  @author GLG, MHPCC
-*
-*  @version $Revision: 1.12 $  $Name: not supported by cvs2svn $
-*  @date $Date: 2005-06-07 23:31:32 $
-*
-* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define N 15
-#define ERROR_TOL  0.0001
-
-static psS32 testStatsMaxF32(void);
-static psS32 testStatsMaxS8(void);
-static psS32 testStatsMaxU16(void);
-static psS32 testStatsMaxF64(void);
-
-testDescription tests[] = {
-                              {testStatsMaxF32, 518, "psVectorStats", 0, false},
-                              {testStatsMaxS8, 518, "psVectorStats", 0, false},
-                              {testStatsMaxU16, 518, "psVectorStats", 0, false},
-                              {testStatsMaxF64, 518, "psVectorStats", 0, false},
-                              {NULL}
-                          };
-
-static psF32 samplesF32[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
-                               11.01, -12.02, 13.03, 14.04, -15.05 };
-static psS8  samplesS8[N]  = {1, 2, -3, 4, 5, -6, 7, 8, -9, 10, 11, -12, 13, 14, -15};
-static psU16 samplesU16[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
-static psF64 samplesF64[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
-                               11.01, -12.02, 13.03, 14.04, -15.05 };
-
-static psF64 expectedMaxNoMaskF32                = 14.04;
-static psF64 expectedMaxNoMaskS8                 = 14.00;
-static psF64 expectedMaxNoMaskU16                = 15.00;
-static psF64 expectedMaxNoMaskF64                = 14.04;
-
-static psF64 expectedMaxWithMaskF32              = 13.03;
-static psF64 expectedMaxRangeNoMaskF32           = 10.00;
-static psF64 expectedMaxRangeWithMaskF32         = 13.03;
-
-psS32 main(psS32 argc, char* argv[] )
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ( ! runTestSuite(stderr, "psVectorStats", tests, argc, argv) );
-}
-
-psS32 testStatsMaxF32(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psVector* maskVector = NULL;
-    psF64     max        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MAX);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.F32[i] = samplesF32[i];
-    }
-
-    // Set the mask vector and calculate the expected maximum.
-    for (psS32 i = 0; i < N; i++) {
-        if (i < 13) {
-            maskVector->data.U8[i] = 0;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    max = myStats->max;
-
-    if (fabs(max - expectedMaxNoMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
-                max, expectedMaxNoMaskF32);
-        return 1;
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    max = myStats->max;
-    if (fabs(max - expectedMaxWithMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max with mask return value %lf not as expected %lf",
-                max, expectedMaxWithMaskF32);
-        return 2;
-    }
-
-    // Invoke function with data range with no mask
-    myStats->options = PS_STAT_MAX | PS_STAT_USE_RANGE;
-    myStats->max = 10.1;
-    myStats->min = 0.0;
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    max = myStats->max;
-
-    if(fabs(max - expectedMaxRangeNoMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max with range no mask %lf not as expected %lf",
-                max, expectedMaxRangeNoMaskF32);
-        return 3;
-    }
-
-    // Invoke function with data range and mask
-    myStats->max = 14.0;
-    myStats->min = 0.0;
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    max = myStats->max;
-    if(fabs(max - expectedMaxRangeWithMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max with range with mask %lf not as expected %lf",
-                max, expectedMaxRangeWithMaskF32);
-        return 3;
-    }
-
-    // Invoke function with data range with no valid data
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    myStats->max = 100.00;
-    myStats->min = 90.00;
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    max = myStats->max;
-
-    if(!isnan(max)) {
-        psError(PS_ERR_UNKNOWN,true,"Max with range with no valid elemenets did not return NAN");
-        return 4;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-    psFree(maskVector);
-
-    return 0;
-}
-
-psS32 testStatsMaxS8(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psF64     max        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MAX);
-    myVector = psVectorAlloc(N, PS_TYPE_S8);
-    myVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.S8[i] = samplesS8[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    max = myStats->max;
-
-    if (fabs(max - expectedMaxNoMaskS8) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
-                max, expectedMaxNoMaskS8);
-        return 1;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
-psS32 testStatsMaxU16(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psF64     max        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MAX);
-    myVector = psVectorAlloc(N, PS_TYPE_U16);
-    myVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.U16[i] = samplesU16[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    max = myStats->max;
-
-    if (fabs(max - expectedMaxNoMaskU16) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
-                max, expectedMaxNoMaskU16);
-        return 1;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
-psS32 testStatsMaxF64(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psF64     max        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MAX);
-    myVector = psVectorAlloc(N, PS_TYPE_F64);
-    myVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.F64[i] = samplesF64[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    max = myStats->max;
-
-    if (fabs(max - expectedMaxNoMaskF64) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
-                max, expectedMaxNoMaskF64);
-        return 1;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psStats02.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats02.c	(revision 4546)
+++ 	(revision )
@@ -1,264 +1,0 @@
-/** @file  tst_psStats02.c
-*
-*  @brief Contains tests for psVectorStats with min calculations
-*
-*  We extensively test the code with data type PS_TYPE_F32.  If these pass, we 
-*  do a much simpler test with data types PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_F64.
-*
-*  If the psStats,c code every changes such that vectors of different type
-*  are handled by different routines, then these tests must be extended.
-*
-*  @author GLG, MHPCC
-*
-*  @version $Revision: 1.12 $  $Name: not supported by cvs2svn $
-*  @date $Date: 2005-06-07 23:26:19 $
-*
-* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
-*/
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define N 15
-#define ERROR_TOL  0.0001
-
-static psS32 testStatsMinF32(void);
-static psS32 testStatsMinS8(void);
-static psS32 testStatsMinU16(void);
-static psS32 testStatsMinF64(void);
-
-testDescription tests[] = {
-                              {testStatsMinF32, 518, "psVectorStats", 0, false},
-                              {testStatsMinS8, 518, "psVectorStats", 0, false},
-                              {testStatsMinU16, 518, "psVectorStats", 0, false},
-                              {testStatsMinF64, 518, "psVectorStats", 0, false},
-                              {NULL}
-                          };
-
-static psF32 samplesF32[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
-                               11.01, -12.02, 13.03, 14.04, -15.05 };
-static psS8  samplesS8[N]  = {1, 2, -3, 4, 5, -6, 7, 8, -9, 10, 11, -12, 13, 14, -15};
-static psU16 samplesU16[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
-static psF64 samplesF64[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
-                               11.01, -12.02, 13.03, 14.04, -15.05 };
-
-static psF64 expectedMinNoMaskF32                = -15.05;
-static psF64 expectedMinNoMaskS8                 = -15.00;
-static psF64 expectedMinNoMaskU16                = 1.00;
-static psF64 expectedMinNoMaskF64                = -15.05;
-
-static psF64 expectedMinWithMaskF32              = -12.02;
-static psF64 expectedMinRangeNoMaskF32           =   1.10;
-static psF64 expectedMinRangeWithMaskF32         = -12.02;
-
-psS32 main(psS32 argc, char* argv[] )
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ( ! runTestSuite(stderr, "psVectorStats", tests, argc, argv) );
-}
-
-psS32 testStatsMinF32(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psVector* maskVector = NULL;
-    psF64     min        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MIN);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.F32[i] = samplesF32[i];
-    }
-
-    // Set the mask vector and calculate the expected maximum.
-    for (psS32 i = 0; i < N; i++) {
-        if (i < 13) {
-            maskVector->data.U8[i] = 0;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    min = myStats->min;
-
-    if (fabs(min - expectedMinNoMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
-                min, expectedMinNoMaskF32);
-        return 1;
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    min = myStats->min;
-    if (fabs(min - expectedMinWithMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min with mask return value %lf not as expected %lf",
-                min, expectedMinWithMaskF32);
-        return 2;
-    }
-
-    // Invoke function with data range with no mask
-    myStats->options = PS_STAT_MIN | PS_STAT_USE_RANGE;
-    myStats->max = 10.1;
-    myStats->min = 0.0;
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    min = myStats->min;
-
-    if(fabs(min - expectedMinRangeNoMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min with range no mask %lf not as expected %lf",
-                min, expectedMinRangeNoMaskF32);
-        return 3;
-    }
-
-    // Invoke function with data range and mask
-    myStats->max = 10.1;
-    myStats->min = -15.00;
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    min = myStats->min;
-    if(fabs(min - expectedMinRangeWithMaskF32) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min with range with mask %lf not as expected %lf",
-                min, expectedMinRangeWithMaskF32);
-        return 3;
-    }
-
-    // Invoke function with data range with no valid data
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
-    myStats->max = 100.00;
-    myStats->min = 90.00;
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    min = myStats->min;
-
-    if(!isnan(min)) {
-        psError(PS_ERR_UNKNOWN,true,"Min with range with no valid elemenets did not return NAN");
-        return 4;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-    psFree(maskVector);
-
-    return 0;
-}
-
-psS32 testStatsMinS8(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psF64     min        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MIN);
-    myVector = psVectorAlloc(N, PS_TYPE_S8);
-    myVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.S8[i] = samplesS8[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    min = myStats->min;
-
-    if (fabs(min - expectedMinNoMaskS8) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
-                min, expectedMinNoMaskS8);
-        return 1;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
-psS32 testStatsMinU16(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psF64     min        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MAX);
-    myVector = psVectorAlloc(N, PS_TYPE_U16);
-    myVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.U16[i] = samplesU16[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    min = myStats->min;
-
-    if (fabs(min - expectedMinNoMaskU16) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
-                min, expectedMinNoMaskU16);
-        return 1;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
-psS32 testStatsMinF64(void)
-{
-    psStats*  myStats    = NULL;
-    psVector* myVector   = NULL;
-    psF64     min        = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_MIN);
-    myVector = psVectorAlloc(N, PS_TYPE_F64);
-    myVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (psS32 i = 0; i < N; i++) {
-        myVector->data.F64[i] = samplesF64[i];
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    min = myStats->min;
-
-    if (fabs(min - expectedMinNoMaskF64) > ERROR_TOL) {
-        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
-                min, expectedMinNoMaskF64);
-        return 1;
-    }
-
-    psFree(myStats);
-    psFree(myVector);
-
-    return 0;
-}
-
Index: unk/psLib/test/dataManip/tst_psStats03.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats03.c	(revision 4546)
+++ 	(revision )
@@ -1,123 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that PS_STAT_SAMPLE_MEDIAN is correctly computed
-    by the procedure psVectorStats().
- 
-    XXX: Must add tests for various data types, other than psF32.  Copy code
-    from tst_psStats00.c-tst_psStats02.c.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#define N1 1029   // This should be an odd number.
-#define N ((4 * N1) + 1)
-
-psS32 main()
-{
-    psStats *myStats    = NULL;
-    psS32 testStatus      = true;
-    psS32 globalTestStatus = true;
-    psS32 i               = 0;
-    psVector *myVector  = NULL;
-    psVector *maskVector= NULL;
-    float median        = 1e99;
-    float realMedianWithMask = (float) (N-3)/4;
-    float realMedianNoMask = (float) (N-1)/2;
-    psS32 currentId       = psMemGetId();
-    psS32 memLeaks        = 0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (i=0;i<N;i++) {
-        myVector->data.F32[i] = (float) i;
-    }
-
-    // Set the mask vector and calculate the expected median.
-    for (i=0;i<N;i++) {
-        if (i < (N/2)) {
-            maskVector->data.U8[i] = 0;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_MEDIAN: no vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    median = myStats->sampleMedian;
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The expected median was %f.  The calculated median was %f.\n",
-           realMedianNoMask, median);
-    if (median == realMedianNoMask) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-
-    printFooter(stdout,
-                "psStats functions",
-                "PS_STAT_SAMPLE_MEDIAN: no vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_MEDIAN: with vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    median = myStats->sampleMedian;
-    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
-    printf("The expected median was %f.  The calculated median was %f.\n",
-           realMedianWithMask, median);
-    if (median == realMedianWithMask) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-
-    printFooter(stdout,
-                "psStats functions",
-                "PS_STAT_SAMPLE_MEDIAN: with vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "psStats(): deallocating memory");
-
-    psFree(myStats);
-    psFree(myVector);
-    psFree(maskVector);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psStats functions",
-                "psStats(): deallocating memory",
-                testStatus);
-
-    return (!globalTestStatus);
-}
Index: unk/psLib/test/dataManip/tst_psStats04.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats04.c	(revision 4546)
+++ 	(revision )
@@ -1,85 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that PS_STAT_NVALUES is correctly computed
-    by the procedure psVectorStats().
- 
-    Note: The NVALUES stat was removed from the IfA requirements spec.  So,
-    this test is no longer in use.
- 
-    XXX: Must add tests for various data types, other than psF32.  Copy code
-    from tst_psStats00.c-tst_psStats02.c.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#define N1 1029
-#define N ((4 * N1) + 1)
-
-psS32 main()
-{
-    psStats *myStats    = NULL;
-    psS32 testStatus      = true;
-    psS32 i               = 0;
-    psVector *myVector  = NULL;
-    psVector *maskVector= NULL;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_NVALUES);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (i=0;i<N;i++) {
-        myVector->data.F32[i] = (float) i;
-    }
-
-    // Set the mask vector and calculate the expected maximum.
-    for (i=0;i<N;i++) {
-        if (i < (N/2)) {
-            maskVector->data.U8[i] = 0;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_NVALUES");
-
-    myStats = psVectorStats(myStats, myVector, NULL, 0);
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The expected nvalues was %d.  The calculated nvalues was %d.\n",
-           N, myStats->nValues);
-    if (myStats->nValues == N) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    myStats = psVectorStats(myStats, myVector, maskVector, 1);
-    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
-    printf("The expected nvalues was %d.  The calculated nvalues was %d.\n",
-           N/2, myStats->nValues);
-    if (myStats->nValues == N/2) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-    }
-
-    printFooter(stdout,
-                "psHash functions",
-                "psHashAlloc()",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psStats05.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats05.c	(revision 4546)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that the psStats structure is correctly
-    allocated and deallocated by the procedure psArrayStats().
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#define MISC_FLOAT_NUMBER 345.0
-
-psS32 main()
-{
-    psStats *myStats    = NULL;
-    psS32 testStatus      = true;
-    psS32 currentId       = psMemGetId();
-    psS32 memLeaks        = 0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "Allocate the psStats structure.");
-
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-    myStats->sampleMean = MISC_FLOAT_NUMBER;
-    myStats->sampleMedian = MISC_FLOAT_NUMBER;
-    myStats->sampleStdev = MISC_FLOAT_NUMBER;
-    myStats->sampleUQ = MISC_FLOAT_NUMBER;
-    myStats->sampleLQ = MISC_FLOAT_NUMBER;
-    myStats->robustMean = MISC_FLOAT_NUMBER;
-    myStats->robustMedian = MISC_FLOAT_NUMBER;
-    myStats->robustMode = MISC_FLOAT_NUMBER;
-    myStats->robustStdev = MISC_FLOAT_NUMBER;
-    myStats->robustUQ = MISC_FLOAT_NUMBER;
-    myStats->robustLQ = MISC_FLOAT_NUMBER;
-    myStats->robustN50 = MISC_FLOAT_NUMBER;
-    myStats->robustNfit = MISC_FLOAT_NUMBER;
-    myStats->clippedMean = MISC_FLOAT_NUMBER;
-    myStats->clippedStdev = MISC_FLOAT_NUMBER;
-    myStats->clipSigma = MISC_FLOAT_NUMBER;
-    myStats->clipIter = MISC_FLOAT_NUMBER;
-    myStats->min = MISC_FLOAT_NUMBER;
-    myStats->max = MISC_FLOAT_NUMBER;
-    myStats->binsize = MISC_FLOAT_NUMBER;
-    myStats->options = 0x0;
-
-    psMemCheckCorruption(1);
-
-    printFooter(stdout,
-                "psStats functions",
-                "Allocate the psStats structure.",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "Deallocate the psStats structure.");
-    psFree(myStats);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-    psMemCheckCorruption(1);
-
-    printFooter(stdout,
-                "psStats functions",
-                "Deallocate the psStats structure.",
-                testStatus);
-
-    return (!testStatus);
-}
Index: unk/psLib/test/dataManip/tst_psStats06.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats06.c	(revision 4546)
+++ 	(revision )
@@ -1,131 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that PS_STAT_SAMPLE_STDEV is correctly computed
-    by the procedure psArrayStats().
- 
-    XXX: Must add tests for various data types, other than psF32.  Copy code
-    from tst_psStats00.c-tst_psStats02.c.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psTest.h"
-#include "float.h"
-#include <math.h>
-
-#define N 15
-
-psS32 main()
-{
-    psStats *myStats    = NULL;
-    psS32 testStatus      = true;
-    psS32 globalTestStatus = true;
-    psS32 i               = 0;
-    psVector *myVector  = NULL;
-    psVector *maskVector= NULL;
-    float stdev         = 0.0;
-    // NOTE: These values were calculated by running the function on the data.
-    // A: They must be changed if we adjust the number of data points.
-    // B: We don't really know that they are correct.
-    float realStdevNoMask   = 4.472136;
-    float realStdevWithMask = 2.160247;
-    psS32 count           = 0;
-    psS32 currentId       = psMemGetId();
-    psS32 memLeaks        = 0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_STDEV);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    stdev = 0.0;
-    // Set the appropriate values for the vector data.
-    for (i=0;i<N;i++) {
-        myVector->data.F32[i] = (float) i;
-    }
-
-    // Set the mask vector and calculate the expected maximum.
-    for (i=0;i<N;i++) {
-        if (i < (N/2)) {
-            maskVector->data.U8[i] = 0;
-            count++;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_STDEV: no vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-    stdev = myStats->sampleStdev;
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The expected stdev was %f; the calculated stdev was %f\n",
-           realStdevNoMask, stdev);
-    if (fabs(stdev - realStdevNoMask) <= 2.0 * FLT_EPSILON) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_SAMPLE_STDEV: no vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_STDEV: with vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-    stdev = myStats->sampleStdev;
-    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
-    printf("The expected stdev was %f; the calculated stdev was %f\n",
-           realStdevWithMask, stdev);
-    if (fabs(stdev - realStdevWithMask) <= 2.0 * FLT_EPSILON) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_SAMPLE_STDEV: with vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "psStats(): deallocating memory");
-
-    psFree(myStats);
-    psFree(myVector);
-    psFree(maskVector);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psVector functions",
-                "psStats(): deallocating memory",
-                testStatus);
-
-    return (!globalTestStatus);
-}
Index: unk/psLib/test/dataManip/tst_psStats07.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats07.c	(revision 4546)
+++ 	(revision )
@@ -1,498 +1,0 @@
-/*****************************************************************************
-   This routine must ensure that PS_STAT_ROBUST_QUARTILE is correctly computed
-   by the procedure psArrayStats().
- 
-   XXX: Must add tests for various data types, other than psF32.  Copy code
-   from tst_psStats00.c-tst_psStats02.c.
-*****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psTest.h"
-#include "float.h"
-#include <math.h>
-
-#define N 90
-#define MEAN 32.0
-#define STDEV 2.0
-#define ERROR_TOLERANCE 0.15
-
-psS32 t00()
-{
-    psStats * myStats = NULL;
-    psS32 testStatus = true;
-    psS32 globalTestStatus = true;
-    psS32 i = 0;
-    psVector *myVector = NULL;
-    psVector *maskVector = NULL;
-    // NOTE: These values were calculated by running the function on the data.
-    // They must be changed if we adjust the number of data points.
-    // We don't really know that they are correct.
-    psS32 count = 0;
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    float realMeanNoMask = MEAN;
-    float realMedianNoMask = MEAN;
-    float realModeNoMask = MEAN;
-    float realStdevNoMask = STDEV * 0.20;
-    float realLQNoMask = MEAN - ( 0.6 * STDEV );
-    float realUQNoMask = MEAN + ( 0.6 * STDEV );
-    psS32 realN50NoMask = N / 4;
-    psS32 realNfitNoMask = N / 4;
-
-    psTraceSetLevel(".psLib.dataManip", 0);
-    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
-    psTraceSetLevel(".psLib.dataManip.psMinimizeLMChi2Gauss1D", 0);
-    psTraceSetLevel(".psLib.dataManip.psFunctions.psGaussian", 0);
-    psTraceSetLevel(".psLib.dataManip.psFunctions", 0);
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                              */
-    /*************************************************************************/
-    myStats = psStatsAlloc( PS_STAT_ROBUST_MEAN |
-                            PS_STAT_ROBUST_MEDIAN |
-                            PS_STAT_ROBUST_MODE |
-                            PS_STAT_ROBUST_STDEV |
-                            PS_STAT_ROBUST_QUARTILE );
-
-    maskVector = psVectorAlloc( N, PS_TYPE_U8 );
-    maskVector->n = N;
-    myVector = p_psGaussianDev( MEAN, STDEV, N );
-    // Set the mask vector and calculate the expected maximum.
-    for ( i = 0;i < N;i++ ) {
-        if ( i < ( N / 2 ) ) {
-            maskVector->data.U8[ i ] = 0;
-            count++;
-        } else {
-            maskVector->data.U8[ i ] = 1;
-        }
-    }
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                            */
-    /*************************************************************************/
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust mean: no vector mask" );
-
-    myStats = psVectorStats( myStats, myVector, NULL, NULL, 0 );
-
-    printf( "The expected Mean was %.2f; the calculated Mean was %.2f\n",
-            realMeanNoMask, myStats->robustMean );
-
-    if ( fabs( myStats->robustMean - realMeanNoMask ) < ( ERROR_TOLERANCE * realMeanNoMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust mean: no vector mask",
-                 testStatus );
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Median: no vector mask" );
-
-    printf( "The expected Median was %.2f; the calculated Median was %.2f\n",
-            realMedianNoMask, myStats->robustMedian );
-    if ( fabs( myStats->robustMedian - realMedianNoMask ) < ( ERROR_TOLERANCE * realMedianNoMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Median: no vector mask",
-                 testStatus );
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Mode: no vector mask" );
-
-
-    printf( "The expected Mode was %.2f; the calculated Mode was %.2f\n",
-            realModeNoMask, myStats->robustMode );
-    if ( fabs( myStats->robustMode - realModeNoMask ) < ( ERROR_TOLERANCE * realModeNoMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Mode: no vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Stdev: no vector mask" );
-
-    printf( "The expected Stdev was %.2f; the calculated Stdev was %.2f\n",
-            realStdevNoMask, myStats->robustStdev );
-    if ( fabs( myStats->robustStdev - realStdevNoMask ) < ( ERROR_TOLERANCE * realStdevNoMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Stdev: no vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: lower quartile: no vector mask" );
-
-    printf( "The expected LQ was %.2f; the calculated LQ was %.2f\n",
-            realLQNoMask, myStats->robustLQ );
-
-    if ( fabs( myStats->robustLQ - realLQNoMask ) < ( ERROR_TOLERANCE * realLQNoMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: lower quartile: no vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: upper quartile: no vector mask" );
-
-    printf( "The expected UQ was %.2f; the calculated UQ was %.2f\n",
-            realUQNoMask, myStats->robustUQ );
-    if ( fabs( myStats->robustUQ - realUQNoMask ) < ( ERROR_TOLERANCE * realUQNoMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: lower quartile: no vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust N50: no vector mask" );
-
-    // XXX:
-    realN50NoMask = myStats->robustN50;
-
-    printf( "The expected N50 was %d; the calculated N50 was %d\n",
-            realN50NoMask, myStats->robustN50 );
-    /* XXX: fix
-        if ( fabs( myStats->robustN50 - realN50NoMask ) < ( ERROR_TOLERANCE * realN50NoMask ) ) {
-            testStatus = true;
-        } else {
-            testStatus = false;
-            globalTestStatus = false;
-        }
-    */
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust N50: no vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Nfit: no vector mask" );
-
-    // XXX:
-    realNfitNoMask = myStats->robustNfit;
-
-    printf( "The expected Nfit was %d; the calculated Nfit was %d\n",
-            realNfitNoMask, myStats->robustNfit );
-    /* XXX: fix
-        if ( fabs( myStats->robustNfit - realNfitNoMask ) < ( ERROR_TOLERANCE * realNfitNoMask ) ) {
-            testStatus = true;
-        } else {
-            testStatus = false;
-            globalTestStatus = false;
-        }
-    */
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Nfit: no vector mask",
-                 testStatus );
-    return(testStatus);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "psStats(): deallocating memory" );
-
-    psFree( myStats );
-    psFree( myVector );
-    psFree( maskVector );
-
-    psMemCheckCorruption( 1 );
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if ( 0 != memLeaks ) {
-        psAbort( __func__, "Memory Leaks! (%d leaks)", memLeaks );
-    }
-
-    printFooter( stdout,
-                 "psVector functions",
-                 "psStats(): deallocating memory",
-                 testStatus );
-
-    return ( !globalTestStatus );
-}
-
-
-psS32 t01()
-{
-    psStats * myStats = NULL;
-    psS32 testStatus = true;
-    psS32 globalTestStatus = true;
-    psS32 i = 0;
-    psVector *myVector = NULL;
-    psVector *maskVector = NULL;
-    // NOTE: These values were calculated by running the function on the data.
-    // A: They must be changed if we adjust the number of data points.
-    // B: We don't really know that they are correct.
-    psS32 count = 0;
-    psS32 currentId = psMemGetId();
-    psS32 memLeaks = 0;
-    float realMeanWithMask = MEAN;
-    float realMedianWithMask = MEAN;
-    float realModeWithMask = MEAN;
-    float realStdevWithMask = STDEV * 0.20;
-    float realLQWithMask = MEAN;
-    float realUQWithMask = MEAN;
-    psS32 realN50WithMask = N / 4;
-    psS32 realNfitWithMask = N / 4;
-
-    psTraceSetLevel(".psLib.dataManip.psStats", 0);
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                              */
-    /*************************************************************************/
-    myStats = psStatsAlloc( PS_STAT_ROBUST_MEAN |
-                            PS_STAT_ROBUST_MEDIAN |
-                            PS_STAT_ROBUST_MODE |
-                            PS_STAT_ROBUST_STDEV |
-                            PS_STAT_ROBUST_QUARTILE );
-
-    maskVector = psVectorAlloc( N, PS_TYPE_U8 );
-    maskVector->n = N;
-    myVector = p_psGaussianDev( MEAN, STDEV, N );
-    // Set the mask vector and calculate the expected maximum.
-    for ( i = 0;i < N;i++ ) {
-        if ( i < ( N / 2 ) ) {
-            maskVector->data.U8[ i ] = 0;
-            count++;
-        } else {
-            maskVector->data.U8[ i ] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                               */
-    /*************************************************************************/
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust mean: with vector mask" );
-
-    printf( "Calling psVectorStats() on a vector with elements masked.\n" );
-    myStats = psVectorStats( myStats, myVector, NULL, maskVector, 1 );
-    printf( "Called psVectorStats() on a vector with elements masked.\n" );
-    printf( "The expected Mean was %.2f; the calculated Mean was %.2f\n",
-            realMeanWithMask, myStats->robustMean );
-    if ( fabs( myStats->robustMean - realMeanWithMask ) < ( ERROR_TOLERANCE * realMeanWithMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust mean: with vector mask",
-                 testStatus );
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Median: with vector mask" );
-
-    printf( "The expected Median was %.2f; the calculated Median was %.2f\n",
-            realMedianWithMask, myStats->robustMedian );
-    if ( fabs( myStats->robustMedian - realMedianWithMask ) < ( ERROR_TOLERANCE * realMedianWithMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Median: with vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Mode: with vector mask" );
-
-    printf( "The expected Mode was %.2f; the calculated Mode was %.2f\n",
-            realModeWithMask, myStats->robustMode );
-    if ( fabs( myStats->robustMode - realModeWithMask ) < ( ERROR_TOLERANCE * realModeWithMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Mode: with vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Stdev: with vector mask" );
-
-    printf( "The expected Stdev was %.2f; the calculated Stdev was %.2f\n",
-            realStdevWithMask, myStats->robustStdev );
-    if ( fabs( myStats->robustStdev - realStdevWithMask ) < ( ERROR_TOLERANCE * realStdevWithMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Stdev: with vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: lower quartile: with vector mask" );
-
-    printf( "The expected LQ was %.2f; the calculated LQ was %.2f\n",
-            realLQWithMask, myStats->robustLQ );
-    if ( fabs( myStats->robustLQ - realLQWithMask ) < ( ERROR_TOLERANCE * realLQWithMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: lower quartile: with vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: upper quartile: with vector mask" );
-
-    printf( "The expected UQ was %.2f; the calculated UQ was %.2f\n",
-            realUQWithMask, myStats->robustUQ );
-    if ( fabs( myStats->robustUQ - realUQWithMask ) < ( ERROR_TOLERANCE * realUQWithMask ) ) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: lower quartile: with vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust N50: with vector mask" );
-
-    printf( "The expected N50 was %d; the calculated N50 was %d\n",
-            realN50WithMask, myStats->robustN50 );
-    /* XXX: fix
-        if ( fabs( myStats->robustN50 - realN50WithMask ) < ( ERROR_TOLERANCE * realN50WithMask ) ) {
-            testStatus = true;
-        } else {
-            testStatus = false;
-            globalTestStatus = false;
-        }
-    */
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust N50: with vector mask",
-                 testStatus );
-
-
-
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "PS_STAT_ROBUST_STATS: robust Nfit: with vector mask" );
-
-    printf( "The expected Nfit was %d; the calculated Nfit was %d\n",
-            realNfitWithMask, myStats->robustNfit );
-    /* XXX: fix
-        if ( fabs( myStats->robustNfit - realNfitWithMask ) < ( ERROR_TOLERANCE * realNfitWithMask ) ) {
-            testStatus = true;
-        } else {
-            testStatus = false;
-            globalTestStatus = false;
-        }
-    */
-    printFooter( stdout,
-                 "psVector functions",
-                 "PS_STAT_ROBUST_STATS: robust Nfit: with vector mask",
-                 testStatus );
-
-
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                           */
-    /*************************************************************************/
-    printPositiveTestHeader( stdout,
-                             "psStats functions",
-                             "psStats(): deallocating memory" );
-
-    psFree( myStats );
-    psFree( myVector );
-    psFree( maskVector );
-
-    psMemCheckCorruption( 1 );
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if ( 0 != memLeaks ) {
-        psAbort( __func__, "Memory Leaks! (%d leaks)", memLeaks );
-    }
-
-    printFooter( stdout,
-                 "psVector functions",
-                 "psStats(): deallocating memory",
-                 testStatus );
-
-    return ( !globalTestStatus );
-}
-
-psS32 main()
-{
-    t00();
-    t01();
-}
Index: unk/psLib/test/dataManip/tst_psStats08.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats08.c	(revision 4546)
+++ 	(revision )
@@ -1,175 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that PS_STAT_SAMPLE_QUARTILE is correctly computed
-    by the procedure psArrayStats().
- 
-    XXX: Must add tests for various data types, other than psF32.  Copy code
-    from tst_psStats00.c-tst_psStats02.c.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psTest.h"
-#include "float.h"
-#include <math.h>
-
-#define N1 25  //
-#define N (8 * N1) // Don't change this (N must be a multiple of 8)
-
-psS32 main()
-{
-    psStats *myStats    = NULL;
-    psS32 testStatus      = true;
-    psS32 globalTestStatus = true;
-    psS32 i               = 0;
-    psVector *myVector  = NULL;
-    psVector *maskVector= NULL;
-    // NOTE: These values were calculated by running the function on the data.
-    // A: They must be changed if we adjust the number of data points.
-    // B: We don't really know that they are correct.
-    float realLQNoMask   = N/4.0;
-    float realUQNoMask   = 3.0 * (N/4.0);
-    float realLQWithMask   = N/8.0;
-    float realUQWithMask   = 3.0 * (N/8.0);
-    psS32 count           = 0;
-    psS32 currentId       = psMemGetId();
-    psS32 memLeaks        = 0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_SAMPLE_QUARTILE);
-    myVector = psVectorAlloc(N, PS_TYPE_F32);
-    myVector->n = N;
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    // Set the appropriate values for the vector data.
-    for (i=0;i<N;i++) {
-        myVector->data.F32[i] = (float) i;
-    }
-
-    // Set the mask vector and calculate the expected maximum.
-    for (i=0;i<N;i++) {
-        if (i < (N/2)) {
-            maskVector->data.U8[i] = 0;
-            count++;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_LQ: no vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The expected sampleLQ was %f; the calculated sampleLQ was %f\n",
-           realLQNoMask, myStats->sampleLQ);
-    if (fabs(realLQNoMask - myStats->sampleLQ) <= 2.0 * FLT_EPSILON) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_SAMPLE_LQ: no vector mask",
-                testStatus);
-
-
-
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_UQ: no vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The expected sampleUQ was %f; the calculated sampleUQ was %f\n",
-           realUQNoMask, myStats->sampleUQ);
-    if (fabs(realUQNoMask - myStats->sampleUQ) <= 2.0 * FLT_EPSILON) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_SAMPLE_UQ: no vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_LQ: with vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-
-    printf("Called psVectorStats() on a vector with elements masked.\n");
-    printf("The expected sampleLQ was %f; the calculated sampleLQ was %f\n",
-           realLQWithMask, myStats->sampleLQ);
-    if (fabs(realLQWithMask - myStats->sampleLQ) <= 2.0 * FLT_EPSILON) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_SAMPLE_LQ: with vector mask",
-                testStatus);
-
-
-
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_SAMPLE_UQ: with vector mask");
-
-    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
-
-    printf("Called psVectorStats() on a vector with elements masked.\n");
-    printf("The expected sampleUQ was %f; the calculated sampleUQ was %f\n",
-           realUQWithMask, myStats->sampleUQ);
-    if (fabs(realUQWithMask - myStats->sampleUQ) <= 2.0 * FLT_EPSILON) {
-        testStatus = true;
-    } else {
-        testStatus = false;
-        globalTestStatus = false;
-    }
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_SAMPLE_UQ: with vector mask",
-                testStatus);
-
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "psStats(): deallocating memory");
-
-    psFree(myStats);
-    psFree(myVector);
-    psFree(maskVector);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psVector functions",
-                "psStats(): deallocating memory",
-                testStatus);
-
-    return (!globalTestStatus);
-}
Index: unk/psLib/test/dataManip/tst_psStats09.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psStats09.c	(revision 4546)
+++ 	(revision )
@@ -1,149 +1,0 @@
-/*****************************************************************************
-    This routine must ensure that PS_STAT_CLIPPED_MEAN and
-    PS_STAT_CLIPPED_STDEV is calculate correctly by the procedure
-    psVectorStats().
- 
-    XXX: Must add tests for various data types, other than psF32.  Copy code
-    from tst_psStats00.c-tst_psStats02.c.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-#include "psTest.h"
-#include "psImageStats.h"
-#include "float.h"
-#include <math.h>
-
-#define N 500
-#define MY_MEAN  30.0
-#define MY_RANGE 2.0
-
-psS32 main()
-{
-    psStats *myStats    = NULL;
-    psS32 testStatus      = true;
-    psS32 globalTestStatus = true;
-    psS32 i               = 0;
-    psVector *maskVector= NULL;
-    psVector *myGaussData  = NULL;
-    // NOTE: These values were calculated by running the function on the data.
-    // A: They must be changed if we adjust the number of data points.
-    // B: We don't really know that they are correct.
-    //    float realclippedMeanNoMask  = 0.0;
-    //    float realclippedStdevNoMask = 0.0;
-    //    float realclippedMeanWithMask  = 0.0;
-    //    float realclippedStdevWithMask = 0.0;
-    psS32 count           = 0;
-    psS32 currentId       = psMemGetId();
-    psS32 memLeaks        = 0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    myStats = psStatsAlloc(PS_STAT_CLIPPED_MEAN |
-                           PS_STAT_CLIPPED_STDEV);
-
-    myGaussData = psVectorAlloc(N, PS_TYPE_F32);
-    myGaussData->n = myGaussData->nalloc;
-    for (i=0;i<N;i++) {
-        myGaussData->data.F32[i] = MY_MEAN - (MY_RANGE/1.9) +
-                                   (MY_RANGE) * ((float) i) / ((float) N);
-    }
-
-    maskVector = psVectorAlloc(N, PS_TYPE_U8);
-    maskVector->n = N;
-
-    // Set the mask vector and calculate the expected maximum.
-    for (i=0;i<N;i++) {
-        if (i < (N/2)) {
-            maskVector->data.U8[i] = 0;
-            count++;
-        } else {
-            maskVector->data.U8[i] = 1;
-        }
-    }
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with no vector mask.                    */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_CLIPPED_MEAN: no vector mask");
-
-    myStats = psVectorStats(myStats, myGaussData, NULL, NULL, 0);
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The calculated clippedMean was %.2f\n", myStats->clippedMean);
-
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_CLIPPED_MEAN/STDEV: no vector mask",
-                testStatus);
-
-
-
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_CLIPPED_STDEV: no vector mask");
-
-    printf("Called psVectorStats() on a vector with no elements masked.\n");
-    printf("The calculated clippedStdev was %.2f\n", myStats->clippedStdev);
-
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_CLIPPED_MEAN/STDEV: no vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Call psVectorStats() with vector mask.                       */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_CLIPPED_MEAN: vector mask");
-
-    myStats = psVectorStats(myStats, myGaussData, NULL, maskVector, 1);
-
-    printf("Called psVectorStats() on a vector with elements masked.\n");
-    printf("The calculated clippedMean was %.2f\n", myStats->clippedMean);
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_CLIPPED_MEAN/STDEV: vector mask",
-                testStatus);
-
-
-
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "PS_STAT_CLIPPED_STDEV: vector mask");
-
-    printf("Called psVectorStats() on a vector with elements masked.\n");
-    printf("The calculated clippedStdev was %.2f\n", myStats->clippedStdev);
-    printFooter(stdout,
-                "psVector functions",
-                "PS_STAT_CLIPPED_MEAN/STDEV: vector mask",
-                testStatus);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    printPositiveTestHeader(stdout,
-                            "psStats functions",
-                            "psStats(): deallocating memory");
-
-    psFree(myStats);
-    psFree(myGaussData);
-    psFree(maskVector);
-
-    psMemCheckCorruption(1);
-    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
-    if (0 != memLeaks) {
-        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
-    }
-
-    printFooter(stdout,
-                "psVector functions",
-                "psStats(): deallocating memory",
-                testStatus);
-
-    return (!globalTestStatus);
-}
Index: unk/psLib/test/dataManip/tst_psVectorFFT.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psVectorFFT.c	(revision 4546)
+++ 	(revision )
@@ -1,642 +1,0 @@
-/** @file  tst_psVectorFFT.c
-*
-*  @brief Contains the tests for psFFT.[ch]
-*
-*
-*  @author Robert DeSonia, MHPCC
-*
-*  @version $Revision: 1.17 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-06-17 23:44:22 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-
-#include <math.h>
-#include <float.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-#define GENIMAGE(img,c,r,TYP, valueFcn) \
-img = psImageAlloc(c,r,PS_TYPE_##TYP); \
-for (psU32 row=0;row<r;row++) { \
-    ps##TYP* imgRow = img->data.TYP[row]; \
-    for (psU32 col=0;col<c;col++) { \
-        imgRow[col] = (ps##TYP)(valueFcn); \
-    } \
-}
-
-static psS32 testVectorFFT( void );
-static psS32 testVectorRealImaginary( void );
-static psS32 testVectorComplex( void );
-static psS32 testVectorConjugate( void );
-static psS32 testVectorPowerSpectrum( void );
-
-testDescription tests[] = {
-                              {testVectorFFT, 600, "psVectorFFT", 0, false},
-                              {testVectorRealImaginary, 601, "psVectorRealImaginary", 0, false},
-                              {testVectorComplex, 602, "psVectorComplex", 0, false},
-                              {testVectorConjugate, 603, "psVectorConjugate", 0, false},
-                              {testVectorPowerSpectrum, 604, "psVectorPowerSpectrum", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psFFT", tests, argc, argv ) );
-}
-
-psS32 testVectorFFT( void )
-{
-    psVector * vec = NULL;
-    psVector* vec2 = NULL;
-    psVector* vec3 = NULL;
-    psVector* vec4 = NULL;
-
-    /*
-    1. assign a vector to a sinisoid
-    2. perform a forward transform
-    3. verify that the only significant component cooresponds to the freqency of the input in step 1.
-    4. perform a reverse transform
-    5. compare to original (should be equal to within a reasonable error)
-    */
-
-    // 1. assign a vector to a sinisoid
-    vec = psVectorAlloc( 100, PS_TYPE_F32 );
-    vec->n = vec->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.F32[ n ] = sinf( ( psF32 ) n / 50.0f * M_PI );
-    }
-
-    // 2. perform a forward transform
-    vec2 = psVectorFFT( NULL, vec, PS_FFT_FORWARD );
-    if ( vec2->type.type != PS_TYPE_C32 ) {
-        psError(PS_ERR_UNKNOWN,true, "FFT didn't produce complex values?" );
-        return 1;
-    }
-
-    // 2a. verify output vector is same size as input
-    if ( vec2->n != vec->n ) {
-        psError(PS_ERR_UNKNOWN,true, "FFT didn't return vector with same size as input");
-        return 10;
-    }
-
-
-    // 3. verify that the only significant component cooresponds to the freqency of the input in step 1.
-    for ( psU32 n = 0; n < 100; n++ ) {
-        if ( n == 1 || n == 99 ) {
-            if ( fabsf( cabsf( vec2->data.C32[ n ] ) - 50.0f ) > 0.1f ) {
-                psError(PS_ERR_UNKNOWN,true, "FFT didn't work for vector (n=%d)", n );
-                return 2;
-            }
-        } else {
-            if ( fabsf( cabsf( vec2->data.C32[ n ] ) ) > 0.1f ) {
-                psError(PS_ERR_UNKNOWN,true, "FFT didn't work for vector (n=%d)", n );
-                return 3;
-            }
-        }
-    }
-
-    // 4. perform a reverse transform
-    vec3 = psVectorFFT( NULL, vec2, PS_FFT_REVERSE );
-    if ( vec3->type.type != PS_TYPE_C32 ) {
-        psError(PS_ERR_UNKNOWN,true, "FFT didn't produce complex values?" );
-        return 4;
-    }
-    if ( vec3->n != vec2->n ) {
-        psError(PS_ERR_UNKNOWN,true, "FFT didn't return vector with same size as input");
-        return 40;
-    }
-    for ( psU32 n = 0; n < 100; n++ ) {
-        psF32 val = sinf( ( psF32 ) n / 50.0f * M_PI );
-        psF32 vecVal = crealf( vec3->data.C32[ n ] ) / 100;
-        if ( fabsf( vecVal - val ) > 0.1f ) {
-            psError(PS_ERR_UNKNOWN,true, "Reverse FFT didn't give me the original vector back (n=%d) (%.2f vs %.2f)",
-                    n, vecVal, val );
-            return 5;
-        }
-    }
-
-    // Perform a reverse transform with real flag set
-    vec4 = psVectorFFT(NULL,vec2, (PS_FFT_REVERSE | PS_FFT_REAL_RESULT));
-    if(vec4->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"FFT with real result did not produce real values");
-        return 80;
-    }
-
-    // Perform vector FFT with invalid direction flags
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    if ( psVectorFFT(NULL,vec2,(psFFTFlags)0) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid direction");
-        return 70;
-    }
-
-    psFree( vec );
-    psFree( vec2 );
-    psFree( vec3 );
-    psFree( vec4 );
-
-    // Perform vector FFT with null input
-    if ( psVectorFFT(NULL,NULL,PS_FFT_FORWARD) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
-        return 64;
-    }
-
-    return 0;
-}
-
-psS32 testVectorRealImaginary( void )
-{
-    psVector * vec = NULL;
-    psVector* vec2 = NULL;
-    psVector* vec3 = NULL;
-    psVector* vec4 = NULL;
-    psVector* vec5 = NULL;
-    psVector* vec6 = NULL;
-    psVector* vec7 = NULL;
-    psVector* vec8 = NULL;
-    psVector* vec9 = NULL;
-    psVector* vec10 = NULL;
-    psVector* vec11 = NULL;
-
-    /*
-    1. create a C32 complex vector with distinctly different real and imaginary parts.
-    2. call psVectorReal and psVectorImaginary
-    3. compare results to the real/imaginary components of input
-    */
-
-    // 1. create a C32 complex vector with distinctly different real and imaginary parts.
-    vec = psVectorAlloc( 100, PS_TYPE_C32 );
-    vec8 = psVectorAlloc( 100, PS_TYPE_C64 );
-    vec10 = psVectorAlloc( 100, PS_TYPE_C64 );
-    vec->n = vec->nalloc;
-    vec8->n = vec8->nalloc;
-    vec10->n = vec10->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.C32[ n ] = n + I * ( n * 2 );
-        vec8->data.C64[n] = n + I * ( n * 2 );
-        vec10->data.C64[n] = n + I * ( n * 2 );
-    }
-    vec4 = psVectorAlloc( 100, PS_TYPE_F32);
-    vec4->n = vec4->nalloc;
-    vec6 = psVectorAlloc( 100, PS_TYPE_F32);
-    vec6->n = vec6->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec4->data.F32[n] = n;
-        vec6->data.F32[n] = n;
-    }
-
-    // 2. call psVectorReal and psVectorImaginary
-    vec2 = psVectorReal( vec2, vec );
-    if ( vec2 == NULL ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorReal returned a NULL?" );
-        return 1;
-    }
-    if ( vec2->type.type != PS_TYPE_F32 ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorReal returned a wrong type (%d)?",
-                vec2->type.type );
-        return 2;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning.");
-    vec5 = psVectorReal(vec5, vec4);
-    if (vec5 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned NULL");
-        return 10;
-    }
-    if ( vec5->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned the wrong type");
-        return 11;
-    }
-
-    vec9 = psVectorReal(vec9,vec8);
-    if(vec9 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned NULL");
-        return 20;
-    }
-    if(vec9->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned the wrong type");
-        return 21;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning.");
-    vec3 = psVectorImaginary( vec3, vec );
-    if ( vec3 == NULL ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorImaginary returned a NULL?" );
-        return 3;
-    }
-    if ( vec3->type.type != PS_TYPE_F32 ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorImaginary returned a wrong type (%d)?",
-                vec3->type.type );
-        return 4;
-    }
-
-    vec7 = psVectorImaginary(vec7, vec6);
-    if(vec7 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorImage returned NULL");
-        return 12;
-    }
-    if(vec7->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned the wrong type");
-        return 13;
-    }
-
-    vec11 = psVectorImaginary(vec11, vec10);
-    if(vec11 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned NULL");
-        return 14;
-    }
-    if(vec11->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned the wrong type");
-        return 15;
-    }
-
-    // 3. compare results to the real/imaginary components of input
-    for ( psU32 n = 0; n < 100; n++ ) {
-        psF32 r = n;
-        psF32 i = ( n * 2 );
-        psF64 rr = n;
-        psF64 ii = ( n * 2 );
-        if ( fabsf( vec2->data.F32[ n ] - r ) > FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true, "psVectorReal didn't return the real portion at n=%d",
-                    n );
-            return 5;
-        }
-        if ( fabsf( vec3->data.F32[ n ] - i ) > FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true, "psVectorImaginary didn't return the real portion at n=%d",
-                    n );
-            return 6;
-        }
-        if ( fabsf( vec5->data.F32[n] - r) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorReal didn't return the real portion at n=%d",n);
-            return 50;
-        }
-        if ( fabsf( vec7->data.F32[n] - 0) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorImaginary did not return the imaginary portion at n=%d",n);
-            return 51;
-        }
-        if ( fabsf(vec9->data.F64[n] - rr) > FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorReal did not return the real portion at n=%d",n);
-            return 52;
-        }
-        if ( fabsf(vec11->data.F64[n] - ii) > FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorImaginary did not return the imaginary portion at n=%d",n);
-            return 53;
-        }
-    }
-
-    psFree( vec );
-    psFree( vec2 );
-    psFree( vec3 );
-    psFree( vec4 );
-    psFree( vec5 );
-    psFree( vec6 );
-    psFree( vec7 );
-    psFree( vec8 );
-    psFree( vec9 );
-    psFree( vec10 );
-    psFree( vec11 );
-
-    // Perform vector Real with null input
-    if ( psVectorReal(NULL,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
-        return 63;
-    }
-    // Perform vector Imaginary with null input
-    if ( psVectorImaginary(NULL,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
-        return 73;
-    }
-
-    return 0;
-}
-
-psS32 testVectorComplex( void )
-{
-    psVector * vec = NULL;
-    psVector* vec2 = NULL;
-    psVector* vec3 = NULL;
-    psVector* vec4 = NULL;
-    psVector* vec5 = NULL;
-    psVector* vec6 = NULL;
-
-    /*
-    1. create two unique psF32 vectors of the same size
-    2. call psVectorComplex
-    3. verify that the result is a psC32
-    4. call psVectorReal and psVectorImaginary on step 2 results
-    5. compare step 4 results to input.
-
-    6. create a psF32 and a psF64 vector of the same size
-    7. call psVectorComplex
-    8. verify that an appropriate error occurred.
-
-    9. create two psf32 vectors of different sizes
-    10. call psVectorComplex
-    11. verify thet an appropriate error occurred.
-    */
-
-    // 1. create two unique psF32 vectors of the same size
-    vec = psVectorAlloc( 100, PS_TYPE_F32 );
-    vec2 = psVectorAlloc( 100, PS_TYPE_F32 );
-    vec4 = psVectorAlloc( 100, PS_TYPE_F64 );
-    vec5 = psVectorAlloc( 100, PS_TYPE_F64 );
-    vec->n = vec->nalloc;
-    vec2->n = vec2->nalloc;
-    vec4->n = vec4->nalloc;
-    vec5->n = vec5->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.F32[ n ] = n;
-        vec2->data.F32[ n ] = ( n * 2 );
-        vec4->data.F64[ n ] = n;
-        vec5->data.F64[ n ] = ( n * 2 );
-    }
-
-    // 2. call psVectorComplex
-    vec3 = psVectorComplex( vec3, vec, vec2 );
-
-    // 3. verify that the result is a psC32
-    if ( vec3->type.type != PS_TYPE_C32 ) {
-        psError(PS_ERR_UNKNOWN,true, "Vector Type from psVectorComplex is not complex? (%d)",
-                vec3->type.type );
-        return 1;
-    }
-
-    // 4. call psVectorReal and psVectorImaginary on step 2 results (not needed, just use crealf/cimagf)
-    // 5. compare step 4 results to input.
-    for ( psU32 n = 0; n < 100; n++ ) {
-        if ( fabsf( crealf( vec3->data.C32[ n ] ) - n ) > FLT_EPSILON ||
-                fabsf( cimagf( vec3->data.C32[ n ] ) - ( n * 2 ) ) > FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true, "psVectorComplex result is invalid (n=%d, %.2f+%.2fi)",
-                    n, crealf( vec3->data.C32[ n ] ), cimagf( vec3->data.C32[ n ] ) );
-            return 2;
-        };
-    }
-
-
-    // 6. create a psF32 and a psF64 vector of the same size
-    vec2 = psVectorRecycle( vec2, 100, PS_TYPE_F64 );
-
-    // 7. call psVectorComplex
-    psLogMsg(__func__, PS_LOG_INFO, "Following should be an error (type mismatch)." );
-    vec3 = psVectorComplex( vec3, vec, vec2 );
-    // 8. verify that an appropriate error occurred. (this partially has to be done via inspection)
-    if ( vec3 != NULL ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorComplex returned a vector though input types mismatched." );
-        return 3;
-    }
-
-    // 9. create two psf32 vectors of different sizes
-    vec2 = psVectorRecycle( vec2, 200, PS_TYPE_F32 );
-
-    // 10. call psVectorComplex
-    vec3 = psVectorComplex( vec3, vec, vec2 );
-
-    // 11. verify thet an appropriate error occurred. (actually, it isn't an error...)
-    if ( vec3->n != 100 ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorComplex returned a larger vector than the input supported (%d).", vec3->n );
-        return 4;
-    }
-
-    // Verify the function works with psF64 type
-    vec6 = psVectorComplex(vec6, vec4, vec5);
-    if( vec6->type.type != PS_TYPE_C64 ) {
-        psError(PS_ERR_UNKNOWN,true,"Vector return type is not complex");
-        return 40;
-    }
-
-    // Verify error message generated with input of invalid type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    vec4->type.type = PS_TYPE_S8;
-    vec5->type.type = PS_TYPE_S8;
-    vec6 = psVectorComplex(vec6, vec4, vec5);
-    if(vec6 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid type");
-        return 50;
-    }
-    vec4->type.type = PS_TYPE_F64;
-    vec5->type.type = PS_TYPE_F64;
-
-    psFree( vec );
-    psFree( vec2 );
-    psFree( vec3 );
-    psFree( vec4 );
-    psFree( vec5 );
-
-    // Perform vector complex with null input
-    if ( psVectorComplex(NULL,NULL,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
-        return 62;
-    }
-
-    return 0;
-}
-
-psS32 testVectorConjugate( void )
-{
-    psVector * vec = NULL;
-    psVector* vec2 = NULL;
-
-    /*
-    1. create a psC32 with unique real and imaginary values.
-    2. call psVectorConjugate
-    3. verify result is psC32
-    4. verify each value is conjugate of input (a+bi -> a-bi)
-    */
-
-    // 1. create a psC32 with unique real and imaginary values.
-    vec = psVectorAlloc( 100, PS_TYPE_C32 );
-    vec->n = vec->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.C32[ n ] = n + I * ( n * 2 );
-    }
-
-    // 2. call psVectorConjugate
-    vec2 = psVectorConjugate( vec2, vec );
-
-    // 3. verify result is psC32
-    if ( vec2->type.type != PS_TYPE_C32 ) {
-        psError(PS_ERR_UNKNOWN,true, "the psVectorConjugate didn't return a C32 vector" );
-        return 1;
-    }
-
-    // 4. verify each value is conjugate of input (a+bi -> a-bi)
-    for ( psU32 n = 0; n < 100; n++ ) {
-        if ( fabsf( crealf( vec->data.C32[ n ] ) - crealf( vec2->data.C32[ n ] ) ) > FLT_EPSILON ||
-                fabsf( cimagf( vec->data.C32[ n ] ) + cimagf( vec2->data.C32[ n ] ) ) > FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true, "psVectorConjugate result is invalid (n=%d, %.2f+%.2fi)",
-                    n, crealf( vec2->data.C32[ n ] ), cimagf( vec2->data.C32[ n ] ) );
-            return 2;
-        };
-    }
-
-    psFree( vec );
-
-    // Perform conjugate for non-complex number
-    vec = psVectorAlloc( 100, PS_TYPE_F32 );
-    vec->n = vec->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.F32[ n ] = n;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message.");
-    vec2 = psVectorConjugate(vec2,vec);
-    if(vec2->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorConjugate did not return a F32 vector");
-        return 10;
-    }
-    for ( psU32 n = 0; n < 100; n++ ) {
-        if( vec->data.F32[n] != vec2->data.F32[n] ) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorConjugate result is invalid (n=%d)",n);
-            return 11;
-        }
-    }
-    psFree(vec);
-
-    // Perform vector conjugate with C64 type
-    vec = psVectorAlloc( 100, PS_TYPE_C64 );
-    vec->n = vec->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.C64[n] = n + I * ( n * 2 );
-    }
-    vec2 = psVectorConjugate(vec2,vec);
-    if(vec2->type.type != PS_TYPE_C64) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorConjugate did not return a C64 vector");
-        return 12;
-    }
-    for ( psU32 n = 0; n < 100; n++ ) {
-        if ( fabsf( crealf(vec->data.C64[n]) - crealf(vec2->data.C64[n])) > FLT_EPSILON ||
-                fabsf( cimagf(vec->data.C64[n]) + cimagf(vec2->data.C64[n])) > FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorConjugate result is invalid (n=%d)",n);
-            return 13;
-        }
-    }
-    psFree(vec);
-
-    // Perform vector conjugate with null input (vec2 should be freed too)
-    if ( psVectorConjugate(vec2,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
-        return 61;
-    }
-
-    return 0;
-}
-
-psS32 testVectorPowerSpectrum( void )
-{
-    psVector * vec = NULL;
-    psVector* vec2 = NULL;
-    psVector* vec3 = NULL;
-    psVector* vec4 = NULL;
-
-    psF32 val;
-    psF64 val1;
-
-    /*
-    1. create a psC32 vector with unique real and imaginary components
-    2. call psVectorPowerSpectrum
-    3. verify result is psF32
-    4. verify the values are the square of the absolute values of the original
-    */
-
-    // 1. create a psC32 vector with unique real and imaginary components
-    vec = psVectorAlloc( 100, PS_TYPE_C32 );
-    vec->n = vec->nalloc;
-    vec3 = psVectorAlloc(100,PS_TYPE_C64);
-    vec3->n = vec3->nalloc;
-    for ( psU32 n = 0; n < 100; n++ ) {
-        vec->data.C32[ n ] = n + I * sinf( ( ( psF32 ) n ) / 50.f * M_PI );
-        vec3->data.C64[ n ] = n + I * sinf( ( ( psF64 ) n ) / 50.f * M_PI );
-    }
-
-    // 2. call psVectorPowerSpectrum
-    vec2 = psVectorPowerSpectrum( vec2, vec );
-    vec4 = psVectorPowerSpectrum( vec4, vec3 );
-
-    // 3. verify result is psF32
-    if ( vec2->type.type != PS_TYPE_F32 ) {
-        psError(PS_ERR_UNKNOWN,true, "the type was not PS_TYPE_F32." );
-        return 1;
-    }
-    if ( vec4->type.type != PS_TYPE_F64 ) {
-        psError(PS_ERR_UNKNOWN,true,"psPowerSpectrum did not return type PS_TYPE_F64 type = %d",vec4->type.type);
-        return 20;
-    }
-
-    // 3a. verify result is the same size a input
-    // Awaiting IfA direction on bug #228
-    //    if ( vec2->n != vec->n ) {
-    //       psError(PS_ERR_UNKNOWN,true, "Output vector size different(%d) than input vector(%d)",vec2->n, vec->n);
-    //       return 10;
-    //    }
-
-    // 4. verify the values are the square of the absolute values of the original
-    //   (ADD specifies something else)
-    //   P_0 = |C_0|^2/N^2
-    //   P_j = (|C_j|^2+|C_N-j|^2)/N^2
-    //   P_N/2 = |C_N/2|^2/N^2
-    //  where j = 1,2,...,(N/2-1)
-
-    val = cabsf( vec->data.C32[ 0 ] ) * cabsf( vec->data.C32[ 0 ] ) / 100 / 100;
-    val1= cabsf( vec3->data.C64[0] ) * cabsf(vec3->data.C64[0])/100/100;
-    if ( fabsf( vec2->data.F32[ 0 ] - val ) > FLT_EPSILON ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=0, %.2f %.2f)",
-                vec2->data.F32[ 0 ], val );
-        return 2;
-    }
-    if ( fabsf( vec4->data.C64[0] - val1 ) > FLT_EPSILON ) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum result is invalid (n=0)");
-        return 21;
-    }
-
-    for ( psU32 n = 1; n < 50; n++ ) {
-        val = ( cabsf( vec->data.C32[ n ] ) * cabsf( vec->data.C32[ n ] ) +
-                cabsf( vec->data.C32[ 100 - n ] ) * cabsf( vec->data.C32[ 100 - n ] ) ) / 100 / 100;
-        val1 = (cabsf(vec3->data.C64[n]) * cabsf(vec3->data.C64[n]) +
-                cabsf(vec3->data.C64[100-n]) * cabsf(vec3->data.C64[100-n]))/100/100;
-        if ( fabsf( val - vec2->data.F32[ n ] ) > 10*FLT_EPSILON ) {
-            psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=%d, %.2f %.2f)",
-                    n, vec2->data.F32[ n ], val );
-            return 2;
-        }
-        if (fabsf(val1 - vec4->data.F64[n]) > 10*FLT_EPSILON) {
-            psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum result is invalid (n=%d, %.2f %.2f)",n,vec4->data.F64[n],val1);
-            return 22;
-        }
-    }
-
-    val = cabsf( vec->data.C32[ 50 ] ) * cabsf( vec->data.C32[ 50 ] ) / 100 / 100;
-    if ( fabsf( vec2->data.F32[ 50 ] - val ) > 10*FLT_EPSILON ) {
-        psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=50, %.2f %.2f)",
-                vec2->data.F32[ 0 ], val );
-        return 2;
-    };
-
-    psFree( vec );
-    psFree( vec2 );
-    psFree( vec3 );
-    psFree( vec4 );
-
-    // Perform vector power spectrum with non-complex number
-    vec = psVectorAlloc(100,PS_TYPE_F32);
-    vec->n = vec->nalloc;
-    for( psU32 n=0; n<100; n++) {
-        vec->data.F32[n] = n;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    if(psVectorPowerSpectrum(NULL,vec) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum did not return a null vector.");
-        return 10;
-    }
-
-    // Perform vector power spectrum with null input
-    if ( psVectorPowerSpectrum(NULL,NULL) != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
-        return 60;
-    }
-
-    psFree(vec);
-
-    return 0;
-}
Index: unk/psLib/test/dataManip/verified/tst_psFunc00.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc00.stderr	(revision 4546)
+++ 	(revision )
@@ -1,72 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psPolynomial1DAlloc}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psPolynomial1DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psPolynomial2DAlloc}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psPolynomial2DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psPolynomial3DAlloc}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psPolynomial3DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psPolynomial4DAlloc}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psPolynomial4DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psDPolynomial1DAlloc}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psDPolynomial1DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psDPolynomial2DAlloc}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psDPolynomial2DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psDPolynomial3DAlloc}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psDPolynomial3DAlloc} | tst_psFunc00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc00.c                                             *
-*            TestPoint: psPolynomialXD{psDPolynomial4DAlloc}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psPolynomialXD{psDPolynomial4DAlloc} | tst_psFunc00.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psFunc01.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,108 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc01.c                                             *
-*            TestPoint: psFunctions functions{psGaussian()}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-normal psGaussian(0.000000) is 0.000000
-normal psGaussian(2.000000) is 0.000000
-normal psGaussian(4.000000) is 0.000000
-normal psGaussian(6.000000) is 0.000000
-normal psGaussian(8.000000) is 0.000000
-normal psGaussian(10.000000) is 0.000000
-normal psGaussian(12.000000) is 0.000000
-normal psGaussian(14.000000) is 0.000000
-normal psGaussian(16.000000) is 0.000000
-normal psGaussian(18.000000) is 0.000000
-normal psGaussian(20.000000) is 0.000001
-normal psGaussian(22.000000) is 0.000067
-normal psGaussian(24.000000) is 0.002216
-normal psGaussian(26.000000) is 0.026995
-normal psGaussian(28.000000) is 0.120985
-normal psGaussian(30.000000) is 0.199471
-normal psGaussian(32.000000) is 0.120985
-normal psGaussian(34.000000) is 0.026995
-normal psGaussian(36.000000) is 0.002216
-normal psGaussian(38.000000) is 0.000067
-normal psGaussian(40.000000) is 0.000001
-normal psGaussian(42.000000) is 0.000000
-normal psGaussian(44.000000) is 0.000000
-normal psGaussian(46.000000) is 0.000000
-normal psGaussian(48.000000) is 0.000000
-normal psGaussian(50.000000) is 0.000000
-normal psGaussian(52.000000) is 0.000000
-normal psGaussian(54.000000) is 0.000000
-normal psGaussian(56.000000) is 0.000000
-normal psGaussian(58.000000) is 0.000000
-NON-normal psGaussian(0.000000) is 0.000000
-NON-normal psGaussian(2.000000) is 0.000000
-NON-normal psGaussian(4.000000) is 0.000000
-NON-normal psGaussian(6.000000) is 0.000000
-NON-normal psGaussian(8.000000) is 0.000000
-NON-normal psGaussian(10.000000) is 0.000000
-NON-normal psGaussian(12.000000) is 0.000000
-NON-normal psGaussian(14.000000) is 0.000000
-NON-normal psGaussian(16.000000) is 0.000000
-NON-normal psGaussian(18.000000) is 0.000000
-NON-normal psGaussian(20.000000) is 0.000004
-NON-normal psGaussian(22.000000) is 0.000335
-NON-normal psGaussian(24.000000) is 0.011109
-NON-normal psGaussian(26.000000) is 0.135335
-NON-normal psGaussian(28.000000) is 0.606531
-NON-normal psGaussian(30.000000) is 1.000000
-NON-normal psGaussian(32.000000) is 0.606531
-NON-normal psGaussian(34.000000) is 0.135335
-NON-normal psGaussian(36.000000) is 0.011109
-NON-normal psGaussian(38.000000) is 0.000335
-NON-normal psGaussian(40.000000) is 0.000004
-NON-normal psGaussian(42.000000) is 0.000000
-NON-normal psGaussian(44.000000) is 0.000000
-NON-normal psGaussian(46.000000) is 0.000000
-NON-normal psGaussian(48.000000) is 0.000000
-NON-normal psGaussian(50.000000) is 0.000000
-NON-normal psGaussian(52.000000) is 0.000000
-NON-normal psGaussian(54.000000) is 0.000000
-NON-normal psGaussian(56.000000) is 0.000000
-NON-normal psGaussian(58.000000) is 0.000000
-
----> TESTPOINT PASSED (psFunctions functions{psGaussian()} | tst_psFunc01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc01.c                                             *
-*            TestPoint: psFunctions functions{p_psGaussianDev()}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Gaussian Deviate [0] is 30.267838
-Gaussian Deviate [1] is 29.823797
-Gaussian Deviate [2] is 33.348816
-Gaussian Deviate [3] is 31.467281
-Gaussian Deviate [4] is 31.995049
-Gaussian Deviate [5] is 27.444996
-Gaussian Deviate [6] is 25.206570
-Gaussian Deviate [7] is 28.641439
-Gaussian Deviate [8] is 29.921818
-Gaussian Deviate [9] is 31.787111
-Gaussian Deviate [10] is 29.964705
-Gaussian Deviate [11] is 27.406887
-Gaussian Deviate [12] is 28.664040
-Gaussian Deviate [13] is 30.363417
-Gaussian Deviate [14] is 31.662102
-Gaussian Deviate [15] is 28.903503
-Gaussian Deviate [16] is 28.723936
-Gaussian Deviate [17] is 30.014177
-Gaussian Deviate [18] is 28.660292
-Gaussian Deviate [19] is 28.344475
-Gaussian Deviate [20] is 31.225000
-Gaussian Deviate [21] is 29.264824
-Gaussian Deviate [22] is 29.421013
-Gaussian Deviate [23] is 28.166250
-Gaussian Deviate [24] is 28.832390
-Gaussian Deviate [25] is 30.129230
-Gaussian Deviate [26] is 30.093487
-Gaussian Deviate [27] is 28.498547
-Gaussian Deviate [28] is 29.711535
-Gaussian Deviate [29] is 32.951122
-
----> TESTPOINT PASSED (psFunctions functions{p_psGaussianDev()} | tst_psFunc01.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psFunc02.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,16 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psSpline1DAlloc (FILE:LINENO)
-    Error: max and min are equal.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psSpline1DAlloc (FILE:LINENO)
-    Error: max and min are equal.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psSpline1DAllocGeneric (FILE:LINENO)
-    Unallowable operation: psVector bounds or its data is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psSpline1DAllocGeneric (FILE:LINENO)
-    Unallowable operation: psVector bounds has no elements.
Index: unk/psLib/test/dataManip/verified/tst_psFunc02.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,106 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAlloc(): linear, normal}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psSpline1D->knots->data.F32[0] is 1.000000
-psSpline1D->knots->data.F32[1] is 3.250000
-psSpline1D->knots->data.F32[2] is 5.500000
-psSpline1D->knots->data.F32[3] is 7.750000
-psSpline1D->knots->data.F32[4] is 10.000000
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): linear, normal} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAlloc(): linear, min/max are equal} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): linear, min/max are equal} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAlloc(): linear, min > max.} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psSpline1D->knots->data.F32[0] is 1.000000
-psSpline1D->knots->data.F32[1] is 0.500000
-psSpline1D->knots->data.F32[2] is 0.000000
-psSpline1D->knots->data.F32[3] is -0.500000
-psSpline1D->knots->data.F32[4] is -1.000000
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): linear, min > max.} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAlloc(), cubic, normal}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psSpline1D->data.F32[0] is 1.000000
-psSpline1D->data.F32[1] is 3.250000
-psSpline1D->data.F32[2] is 5.500000
-psSpline1D->data.F32[3] is 7.750000
-psSpline1D->data.F32[4] is 10.000000
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): cubic, normal} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAlloc(): cubic, min/max are equal} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): cubic, min/max are equal} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAlloc(): cubic, min > max.} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psSpline1D->knots->data.F32[0] is 1.000000
-psSpline1D->knots->data.F32[1] is 0.500000
-psSpline1D->knots->data.F32[2] is 0.000000
-psSpline1D->knots->data.F32[3] is -0.500000
-psSpline1D->knots->data.F32[4] is -1.000000
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): cubic, min > max.} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAllocGeneric(): linear, normal} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psSpline1D->knots->data.F32[0] is 2.000000
-psSpline1D->knots->data.F32[1] is 4.000000
-psSpline1D->knots->data.F32[2] is 6.000000
-psSpline1D->knots->data.F32[3] is 8.000000
-psSpline1D->knots->data.F32[4] is 10.000000
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAllocGeneric(): linear, normal} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAllocGeneric(): bound equal to NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAllocGeneric(): bound equal to NULL} | tst_psFunc02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc02.c                                             *
-*            TestPoint: psFunction functions{psSpline1DAllocGeneric(): bounds with zero elements} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psFunctions functions{psSpline1DAllocGeneric(): bounds with zero elements} | tst_psFunc02.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psFunc08.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc08.stderr	(revision 4546)
+++ 	(revision )
@@ -1,68 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc08.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial1DEval}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly1DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psPolynomial1DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial1DEval} | tst_psFunc08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc08.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial1DEval}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly1DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psDPolynomial1DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial1DEval} | tst_psFunc08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc08.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial1DEvalVector}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly1DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psPolynomial1DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testPoly1DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial1DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly1DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial1DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial1DEvalVector} | tst_psFunc08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc08.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial1DEvalVector}              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly1DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly1DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly1DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial1DEvalVector} | tst_psFunc08.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psFunc09.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc09.stderr	(revision 4546)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc09.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial2DEval}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly2DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psPolynomial2DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial2DEval} | tst_psFunc09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc09.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial2DEval}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly2DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psDPolynomial2DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial2DEval} | tst_psFunc09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc09.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial2DEvalVector}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial2DEvalVector} | tst_psFunc09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc09.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial2DEvalVector}              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial2DEvalVector} | tst_psFunc09.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psFunc10.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc10.stderr	(revision 4546)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc10.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial3DEval}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly3DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psPolynomial3DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial3DEval} | tst_psFunc10.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc10.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial3DEval}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly3DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial3DEval} | tst_psFunc10.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc10.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial3DEvalVector}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y has incorrect type.
-<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial3DEvalVector} | tst_psFunc10.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc10.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial3DEvalVector}              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y has incorrect type.
-<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial3DEvalVector} | tst_psFunc10.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psFunc11.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psFunc11.stderr	(revision 4546)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc11.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial4DEval}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly4DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psPolynomial4DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial4DEval} | tst_psFunc11.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc11.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial4DEval}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly4DEval
-    Following should generate error message invalid type
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEval (FILE:LINENO)
-    Unknown polynomial type 0x63 found.  Evaluation failed.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial4DEval} | tst_psFunc11.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc11.c                                             *
-*            TestPoint: psPolynomialXDEval{psPolynomial4DEvalVector}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector t or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y has incorrect type.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z has incorrect type.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector t has incorrect type.
-<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial4DEvalVector} | tst_psFunc11.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psFunc11.c                                             *
-*            TestPoint: psPolynomialXDEval{psDPolynomial4DEvalVector}              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for NULL polynomial
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for NULL input vector
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector t or its data is NULL.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector y has incorrect type.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector z has incorrect type.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector t has incorrect type.
-<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
-    Following should generate an error message for invalid input type
-<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
-    Unallowable operation: psVector x has incorrect type.
-
----> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial4DEvalVector} | tst_psFunc11.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psHist00.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psHist00.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psHistogramAlloc (FILE:LINENO)
-    Error: (lower > upper) (30.000000 20.000000)
Index: unk/psLib/test/dataManip/verified/tst_psHist00.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psHist00.stdout	(revision 4546)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist00.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist00.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 25.000)
-Bin number 1 bounds: (25.000 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist00.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 21.000)
-Bin number 1 bounds: (21.000 - 22.000)
-Bin number 2 bounds: (22.000 - 23.000)
-Bin number 3 bounds: (23.000 - 24.000)
-Bin number 4 bounds: (24.000 - 25.000)
-Bin number 5 bounds: (25.000 - 26.000)
-Bin number 6 bounds: (26.000 - 27.000)
-Bin number 7 bounds: (27.000 - 28.000)
-Bin number 8 bounds: (28.000 - 29.000)
-Bin number 9 bounds: (29.000 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist00.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 20.500)
-Bin number 1 bounds: (20.500 - 21.000)
-Bin number 2 bounds: (21.000 - 21.500)
-Bin number 3 bounds: (21.500 - 22.000)
-Bin number 4 bounds: (22.000 - 22.500)
-Bin number 5 bounds: (22.500 - 23.000)
-Bin number 6 bounds: (23.000 - 23.500)
-Bin number 7 bounds: (23.500 - 24.000)
-Bin number 8 bounds: (24.000 - 24.500)
-Bin number 9 bounds: (24.500 - 25.000)
-Bin number 10 bounds: (25.000 - 25.500)
-Bin number 11 bounds: (25.500 - 26.000)
-Bin number 12 bounds: (26.000 - 26.500)
-Bin number 13 bounds: (26.500 - 27.000)
-Bin number 14 bounds: (27.000 - 27.500)
-Bin number 15 bounds: (27.500 - 28.000)
-Bin number 16 bounds: (28.000 - 28.500)
-Bin number 17 bounds: (28.500 - 29.000)
-Bin number 18 bounds: (29.000 - 29.500)
-Bin number 19 bounds: (29.500 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist00.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure. (UPPER<LOWER)} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure. (UPPER<LOWER)} | tst_psHist00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist00.c                                             *
-*            TestPoint: psStats functions{Deallocate the psHistogram structure.}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Deallocate the psHistogram structure.} | tst_psHist00.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psHist01.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psHist01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,78 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist01.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist01.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 25.000)
-Bin number 1 bounds: (25.000 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist01.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 21.000)
-Bin number 1 bounds: (21.000 - 22.000)
-Bin number 2 bounds: (22.000 - 23.000)
-Bin number 3 bounds: (23.000 - 24.000)
-Bin number 4 bounds: (24.000 - 25.000)
-Bin number 5 bounds: (25.000 - 26.000)
-Bin number 6 bounds: (26.000 - 27.000)
-Bin number 7 bounds: (27.000 - 28.000)
-Bin number 8 bounds: (28.000 - 29.000)
-Bin number 9 bounds: (29.000 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist01.c                                             *
-*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 20.500)
-Bin number 1 bounds: (20.500 - 21.000)
-Bin number 2 bounds: (21.000 - 21.500)
-Bin number 3 bounds: (21.500 - 22.000)
-Bin number 4 bounds: (22.000 - 22.500)
-Bin number 5 bounds: (22.500 - 23.000)
-Bin number 6 bounds: (23.000 - 23.500)
-Bin number 7 bounds: (23.500 - 24.000)
-Bin number 8 bounds: (24.000 - 24.500)
-Bin number 9 bounds: (24.500 - 25.000)
-Bin number 10 bounds: (25.000 - 25.500)
-Bin number 11 bounds: (25.500 - 26.000)
-Bin number 12 bounds: (26.000 - 26.500)
-Bin number 13 bounds: (26.500 - 27.000)
-Bin number 14 bounds: (27.000 - 27.500)
-Bin number 15 bounds: (27.500 - 28.000)
-Bin number 16 bounds: (28.000 - 28.500)
-Bin number 17 bounds: (28.500 - 29.000)
-Bin number 18 bounds: (29.000 - 29.500)
-Bin number 19 bounds: (29.500 - 30.000)
-
----> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist01.c                                             *
-*            TestPoint: psStats functions{Deallocate the psHistogram structure.}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Deallocate the psHistogram structure.} | tst_psHist01.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psHist02.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psHist02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorHistogram (FILE:LINENO)
-    Unallowable operation: out is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorHistogram (FILE:LINENO)
-    Unallowable operation: psVector values or its data is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psHist02.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psHist02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,156 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.00 - 30.00) data (10000.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 30.000) data (5000.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.00 - 25.00) data (5000.000000)
-Bin number 1 bounds: (25.00 - 30.00) data (5000.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 25.000) data (5000.000000)
-Bin number 1 bounds: (25.000 - 30.000) data (0.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.00 - 21.00) data (1000.000000)
-Bin number 1 bounds: (21.00 - 22.00) data (1000.000000)
-Bin number 2 bounds: (22.00 - 23.00) data (1000.000000)
-Bin number 3 bounds: (23.00 - 24.00) data (1000.000000)
-Bin number 4 bounds: (24.00 - 25.00) data (1000.000000)
-Bin number 5 bounds: (25.00 - 26.00) data (1000.000000)
-Bin number 6 bounds: (26.00 - 27.00) data (1000.000000)
-Bin number 7 bounds: (27.00 - 28.00) data (1000.000000)
-Bin number 8 bounds: (28.00 - 29.00) data (1000.000000)
-Bin number 9 bounds: (29.00 - 30.00) data (1000.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 21.000) data (1000.000000)
-Bin number 1 bounds: (21.000 - 22.000) data (1000.000000)
-Bin number 2 bounds: (22.000 - 23.000) data (1000.000000)
-Bin number 3 bounds: (23.000 - 24.000) data (1000.000000)
-Bin number 4 bounds: (24.000 - 25.000) data (1000.000000)
-Bin number 5 bounds: (25.000 - 26.000) data (0.000000)
-Bin number 6 bounds: (26.000 - 27.000) data (0.000000)
-Bin number 7 bounds: (27.000 - 28.000) data (0.000000)
-Bin number 8 bounds: (28.000 - 29.000) data (0.000000)
-Bin number 9 bounds: (29.000 - 30.000) data (0.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.00 - 20.50) data (500.000000)
-Bin number 1 bounds: (20.50 - 21.00) data (500.000000)
-Bin number 2 bounds: (21.00 - 21.50) data (500.000000)
-Bin number 3 bounds: (21.50 - 22.00) data (500.000000)
-Bin number 4 bounds: (22.00 - 22.50) data (500.000000)
-Bin number 5 bounds: (22.50 - 23.00) data (500.000000)
-Bin number 6 bounds: (23.00 - 23.50) data (500.000000)
-Bin number 7 bounds: (23.50 - 24.00) data (500.000000)
-Bin number 8 bounds: (24.00 - 24.50) data (500.000000)
-Bin number 9 bounds: (24.50 - 25.00) data (500.000000)
-Bin number 10 bounds: (25.00 - 25.50) data (500.000000)
-Bin number 11 bounds: (25.50 - 26.00) data (500.000000)
-Bin number 12 bounds: (26.00 - 26.50) data (500.000000)
-Bin number 13 bounds: (26.50 - 27.00) data (500.000000)
-Bin number 14 bounds: (27.00 - 27.50) data (500.000000)
-Bin number 15 bounds: (27.50 - 28.00) data (500.000000)
-Bin number 16 bounds: (28.00 - 28.50) data (500.000000)
-Bin number 17 bounds: (28.50 - 29.00) data (500.000000)
-Bin number 18 bounds: (29.00 - 29.50) data (500.000000)
-Bin number 19 bounds: (29.50 - 30.00) data (500.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Bin number 0 bounds: (20.000 - 20.500) data (500.000000)
-Bin number 1 bounds: (20.500 - 21.000) data (500.000000)
-Bin number 2 bounds: (21.000 - 21.500) data (500.000000)
-Bin number 3 bounds: (21.500 - 22.000) data (500.000000)
-Bin number 4 bounds: (22.000 - 22.500) data (500.000000)
-Bin number 5 bounds: (22.500 - 23.000) data (500.000000)
-Bin number 6 bounds: (23.000 - 23.500) data (500.000000)
-Bin number 7 bounds: (23.500 - 24.000) data (500.000000)
-Bin number 8 bounds: (24.000 - 24.500) data (500.000000)
-Bin number 9 bounds: (24.500 - 25.000) data (500.000000)
-Bin number 10 bounds: (25.000 - 25.500) data (0.000000)
-Bin number 11 bounds: (25.500 - 26.000) data (0.000000)
-Bin number 12 bounds: (26.000 - 26.500) data (0.000000)
-Bin number 13 bounds: (26.500 - 27.000) data (0.000000)
-Bin number 14 bounds: (27.000 - 27.500) data (0.000000)
-Bin number 15 bounds: (27.500 - 28.000) data (0.000000)
-Bin number 16 bounds: (28.000 - 28.500) data (0.000000)
-Bin number 17 bounds: (28.500 - 29.000) data (0.000000)
-Bin number 18 bounds: (29.000 - 29.500) data (0.000000)
-Bin number 19 bounds: (29.500 - 30.000) data (0.000000)
-
----> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Calling psVectorHistogram() with various NULL inputs.} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Calling psVectorHistogram() with various NULL inputs.} | tst_psHist02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psHist02.c                                             *
-*            TestPoint: psStats functions{Deallocate the psHistogram structure.}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Deallocate the psHistogram structure.} | tst_psHist02.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix01.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix01.c                                           *
-*            TestPoint: psMatrix{Create input and output images}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix01.c                                           *
-*            TestPoint: psMatrix{Transpose input image into output image}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Transpose input image into output image} | tst_psMatrix01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix01.c                                           *
-*            TestPoint: psMatrix{Transpose input image into auto allocated NULL output image} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Transpose input image into auto allocated NULL output image} | tst_psMatrix01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix01.c                                           *
-*            TestPoint: psMatrix{Free images and check for leaks}                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Free images and check for leaks} | tst_psMatrix01.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix02.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,6 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMatrixTranspose (FILE:LINENO)
-    Invalid operation: Pointer to in is same as out.
-<DATE><TIME>|<HOST>|E|psMatrixTranspose (FILE:LINENO)
-    Unallowable operation: psImage in or its data is NULL.
-<DATE><TIME>|<HOST>|E|psMatrixTranspose (FILE:LINENO)
-    Invalid operation. in not PS_TYPE_F64.
Index: unk/psLib/test/dataManip/verified/tst_psMatrix02.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix02.c                                           *
-*            TestPoint: psMatrix{Input pointer same as output pointer}             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Input pointer same as output pointer} | tst_psMatrix02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix02.c                                           *
-*            TestPoint: psMatrix{Null input psImage}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Null input psImage} | tst_psMatrix02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix02.c                                           *
-*            TestPoint: psMatrix{Incorrect type for input pointer}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Incorrect type for input pointer} | tst_psMatrix02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix02.c                                           *
-*            TestPoint: psMatrix{Incorrect type for output pointer}                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Incorrect type for output pointer} | tst_psMatrix02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix02.c                                           *
-*            TestPoint: psMatrix{Matrix not square for output pointer}             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Matrix not square for output pointer} | tst_psMatrix02.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix03.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix03.stderr	(revision 4546)
+++ 	(revision )
@@ -1,6 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMatrixLUD (FILE:LINENO)
-    Unallowable operation: psImage in or its data is NULL.
-<DATE><TIME>|<HOST>|E|psMatrixLUSolve (FILE:LINENO)
-    Unallowable operation: psVector RHS or its data is NULL.
-<DATE><TIME>|<HOST>|E|psMatrixLUSolve (FILE:LINENO)
-    Unallowable operation: psImage LU or its data is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMatrix03.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix03.stdout	(revision 4546)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Create input and output images and vectors}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Create input and output images and vectors} | tst_psMatrix03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Calculate LU matrix}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Calculate LU matrix} | tst_psMatrix03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Determine solution to matrix equation}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Determine solution to matrix equation} | tst_psMatrix03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Free input and output images and vectors}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Free input and output images and vectors} | tst_psMatrix03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Attempt to use null image input argument}         *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null image input argument} | tst_psMatrix03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Attempt to use null input vector argument}        *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: inVector or its data is NULL.           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null input vector argument} | tst_psMatrix03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix03.c                                           *
-*            TestPoint: psMatrix{Attempt to use null LU image argument}            *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null LU image argument} | tst_psMatrix03.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix04.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix04.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|E|psMatrixInvert (FILE:LINENO)
-    Unallowable operation: psImage in or its data is NULL.
-<DATE><TIME>|<HOST>|E|psMatrixInvert (FILE:LINENO)
-    Unallowable operation: determinant is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMatrix04.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix04.stdout	(revision 4546)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix04.c                                           *
-*            TestPoint: psMatrix{Create input and output images}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix04.c                                           *
-*            TestPoint: psMatrix{Invert matrix and calculate determinant}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Invert matrix and calculate determinant} | tst_psMatrix04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix04.c                                           *
-*            TestPoint: psMatrix{Calculate determinant only}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Calculate determinant only} | tst_psMatrix04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix04.c                                           *
-*            TestPoint: psMatrix{Free input and output images}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Free input and output images} | tst_psMatrix04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix04.c                                           *
-*            TestPoint: psMatrix{Attempt to use null input image argument}         *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null input image argument} | tst_psMatrix04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix04.c                                           *
-*            TestPoint: psMatrix{Attempt to use null input float argument}         *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: determinant argument is NULL.           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null input float argument} | tst_psMatrix04.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix05.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix05.stdout	(revision 4546)
+++ 	(revision )
@@ -1,27 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix05.c                                           *
-*            TestPoint: psMatrix{Create input and output images}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix05.c                                           *
-*            TestPoint: psMatrix{Multiply images}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Multiply images} | tst_psMatrix05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix05.c                                           *
-*            TestPoint: psMatrix{Free input and output images}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Free input and output images} | tst_psMatrix05.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix06.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix06.stdout	(revision 4546)
+++ 	(revision )
@@ -1,27 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix06.c                                           *
-*            TestPoint: psMatrix{Create input and output images}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix06.c                                           *
-*            TestPoint: psMatrix{Calculate Eigenvectors}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Calculate Eigenvectors} | tst_psMatrix06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix06.c                                           *
-*            TestPoint: psMatrix{Free input and output images}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Free input and output images} | tst_psMatrix06.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrix07.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix07.stderr	(revision 4546)
+++ 	(revision )
@@ -1,24 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error.
-<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
-    Unallowable operation: psImage inImage or its data is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error.
-<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
-    Unallowable operation: psImage inImage or its data is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
-    Image does not have dim with 1 col or 1 row: (2 x 2).
-<DATE><TIME>|<HOST>|I|main
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
-    Image does not have dim with 1 col or 1 row: (2 x 2).
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psVectorToMatrix (FILE:LINENO)
-    Unallowable operation: psVector inVector or its data is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psVectorToMatrix (FILE:LINENO)
-    Unallowable operation: psVector inVector or its data is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMatrix07.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrix07.stdout	(revision 4546)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Create input and output images and vectors}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Create input and output images and vectors} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Convert matrix to PS_DIMEN_VECTOR vector}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Convert matrix to PS_DIMEN_VECTOR vector} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Attempt to use null image input argument}         *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null image input argument} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Convert matrix to PS_DIMEN_TRANSV vector}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Convert matrix to PS_DIMEN_TRANSV vector} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Improper image size}                              *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Image does not have dim with 1 col or 1 row: (2 x 2).      *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Improper image size} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Convert PS_DIMEN_VECTOR vector to matrix}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Convert PS_DIMEN_VECTOR vector to matrix} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Attempt to use null input vector argument}        *
-*             TestType: Negative                                                   *
-*    ExpectedErrorText: Invalid operation: inVector or its data is NULL.           *
-*  ExpectedStatusValue: 0                                                          *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Attempt to use null input vector argument} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Convert PS_DIMEN_TRANSV vector to matrix}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Convert PS_DIMEN_TRANSV vector to matrix} | tst_psMatrix07.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrix07.c                                           *
-*            TestPoint: psMatrix{Free input and output images and vectors}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMatrix{Free input and output images and vectors} | tst_psMatrix07.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic01.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic01.stdout	(revision 4546)
+++ 	(revision )
@@ -1,1156 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10 10 
-10 10 
-10 10 
-
-10 10 
-10 10 
-10 10 
-
-Output:
-20 20 
-20 20 
-20 20 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-Output:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20 20 
-20 20 
-20 20 
-
-10 10 
-10 10 
-10 10 
-
-Output:
-10 10 
-10 10 
-10 10 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-Output:
-0.000000+400.000000i 0.000000+400.000000i 
-0.000000+400.000000i 0.000000+400.000000i 
-0.000000+400.000000i 0.000000+400.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20 20 
-20 20 
-20 20 
-
-10 10 
-10 10 
-10 10 
-
-Output:
-200 200 
-200 200 
-200 200 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-200.000000 200.000000 
-200.000000 200.000000 
-200.000000 200.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-200.000000 200.000000 
-200.000000 200.000000 
-200.000000 200.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-Output:
-0.000000+400.000000i 0.000000+400.000000i 
-0.000000+400.000000i 0.000000+400.000000i 
-0.000000+400.000000i 0.000000+400.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-Output:
-2.000000+0.000000i 2.000000+0.000000i 
-2.000000+0.000000i 2.000000+0.000000i 
-2.000000+0.000000i 2.000000+0.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20 20 
-20 20 
-20 20 
-
-10 10 
-10 10 
-10 10 
-
-Output:
-2 2 
-2 2 
-2 2 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-2.000000 2.000000 
-2.000000 2.000000 
-2.000000 2.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-Output:
-2.000000 2.000000 
-2.000000 2.000000 
-2.000000 2.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-Output:
-2.000000+0.000000i 2.000000+0.000000i 
-2.000000+0.000000i 2.000000+0.000000i 
-2.000000+0.000000i 2.000000+0.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10 10 
-10 10 
-10 10 
-
-5 5 5 
-
-Output:
-15 15 
-15 15 
-15 15 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
-
-Output:
-15.000000+15.000000i 15.000000+15.000000i 
-15.000000+15.000000i 15.000000+15.000000i 
-15.000000+15.000000i 15.000000+15.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20 20 
-20 20 
-20 20 
-
-5 5 5 
-
-Output:
-15 15 
-15 15 
-15 15 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
-
-Output:
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20 20 
-20 20 
-20 20 
-
-5 5 5 
-
-Output:
-100 100 
-100 100 
-100 100 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-100.000000 100.000000 
-100.000000 100.000000 
-100.000000 100.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-100.000000 100.000000 
-100.000000 100.000000 
-100.000000 100.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
-
-Output:
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
-
-Output:
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20 20 
-20 20 
-20 20 
-
-5 5 5 
-
-Output:
-4 4 
-4 4 
-4 4 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-4.000000 4.000000 
-4.000000 4.000000 
-4.000000 4.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 5.000000 5.000000 
-
-Output:
-4.000000 4.000000 
-4.000000 4.000000 
-4.000000 4.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
-
-Output:
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10 10 
-10 10 
-10 10 
-
-5 
-
-Output:
-15 15 
-15 15 
-15 15 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000 10.000000 
-10.000000 10.000000 
-10.000000 10.000000 
-
-5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: +
-Input:
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-10.000000+10.000000i 10.000000+10.000000i 
-
-5.000000+5.000000i 
-
-Output:
-15.000000+15.000000i 15.000000+15.000000i 
-15.000000+15.000000i 15.000000+15.000000i 
-15.000000+15.000000i 15.000000+15.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20 20 
-20 20 
-20 20 
-
-5 
-
-Output:
-15 15 
-15 15 
-15 15 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: -
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 
-
-Output:
-15.000000 15.000000 
-15.000000 15.000000 
-15.000000 15.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 
-
-Output:
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20 20 
-20 20 
-20 20 
-
-5 
-
-Output:
-100 100 
-100 100 
-100 100 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 
-
-Output:
-100.000000 100.000000 
-100.000000 100.000000 
-100.000000 100.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 
-
-Output:
-100.000000 100.000000 
-100.000000 100.000000 
-100.000000 100.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: *
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 
-
-Output:
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-0.000000+200.000000i 0.000000+200.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 
-
-Output:
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20 20 
-20 20 
-20 20 
-
-5 
-
-Output:
-4 4 
-4 4 
-4 4 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 
-
-Output:
-4.000000 4.000000 
-4.000000 4.000000 
-4.000000 4.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000 20.000000 
-20.000000 20.000000 
-20.000000 20.000000 
-
-5.000000 
-
-Output:
-4.000000 4.000000 
-4.000000 4.000000 
-4.000000 4.000000 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: /
-Input:
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-20.000000+20.000000i 20.000000+20.000000i 
-
-5.000000+5.000000i 
-
-Output:
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-4.000000+0.000000i 4.000000+0.000000i 
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic02.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic02.stdout	(revision 4546)
+++ 	(revision )
@@ -1,1700 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
-
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: abs
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: exp
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ln
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: ten
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: log
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: sin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dsin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: cos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dcos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: tan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dtan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: asin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dasin
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: acos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: dacos
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: atan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
-*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Operation: datan
-
-
----> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic03.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic03.stderr	(revision 4546)
+++ 	(revision )
@@ -1,66 +1,0 @@
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Unallowable operation: input1 is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Unallowable operation: input2 is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Unallowable operation: op is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
-    Unallowable operation: in is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
-    Unallowable operation: op is NULL.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    ptr input1 has type 1028, ptr input2 has type 1032.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Specified psImage dimensions differed, 2x2 vs 3x3.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Number of elements inconsistent, 2 vs 3.  Number of elements must match.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Number of elements inconsistent, 2 vs 3.  Number of elements must match.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an two error messages
-<DATE><TIME>|<HOST>|E|psVectorRecycle (FILE:LINENO)
-    The input psVector must have a vector dimension type.
-<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
-    Couldn't create a proper output psVector.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    The minimum operation is not supported with complex data.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    The maximum operation is not supported with complex data.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error messgae
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Specified operation, yarg, is not supported.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
-    Specified operation, yarg, is not supported.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
-    Unallowable operation: input1 has incorrect dimensionality.
-<DATE><TIME>|<HOST>|I|main
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
-    Specified parameter, in, has invalid dimensionality, 4.
Index: unk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic03.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic03.stdout	(revision 4546)
+++ 	(revision )
@@ -1,180 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check for output generated}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check for output generated} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check for null input arg 1}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check for null input arg 1} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check for null input arg 2}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check for null input arg 2} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check for null operand}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check for null operand} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Check for null output}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Check for null output} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Check for null input}                            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Check for null input} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Check for null operator}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Check for null operator} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Inconsistent element types}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Inconsistent element types} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Check output type conversion}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Check output type conversion} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check for inconsistent elements}                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check for inconsistent elements} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Check inconsistent elements in input and output} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Check inconsistent elements in input and output} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check inconsistent size}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check inconsistent size} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Check inconsistent size}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Check inconsistent size} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Check inconsistent dimensionality}               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Check inconsistent dimensionality} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Attempt to use min with complex numbers}        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Attempt to use  min with complex numbers} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Attempt to use max with complex numbers}        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Attempt to use max with complex numbers} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinary{Attempt to use invalid operator}                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Attempt to use invalid operator} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Attempt to use invalid operator}                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Attempt to use invalid operator} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psBinaryOp{Attempt to use input with PS_DIMEN_OTHER}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{Attempt to use input with PS_DIMEN_OTHER} | tst_psMatrixVectorArithmetic03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
-*            TestPoint: psUnaryOp{Attempt to use input with PS_DIMEN_OTHER}        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{Attempt to use input with PS_DIMEN_OTHER} | tst_psMatrixVectorArithmetic03.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic04.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMatrixVectorArithmetic04.stderr	(revision 4546)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
-*            TestPoint: psBinaryOp{psBinaryOp}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{psBinaryOp} | tst_psMatrixVectorArithmetic04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
-*            TestPoint: psBinaryOp{psBinaryOp}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{psBinaryOp} | tst_psMatrixVectorArithmetic04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
-*            TestPoint: psBinaryOp{psBinaryOp}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psBinaryOp{psBinaryOp} | tst_psMatrixVectorArithmetic04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
-*            TestPoint: psUnaryOp{psUnaryOp}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psUnaryOp{psUnaryOp} | tst_psMatrixVectorArithmetic04.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|I|t03
-    Following should generate an error for null input polynomial.
-<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04.stdout	(revision 4546)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): equal difference in variable yE *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): equal differences in variable yErr} | tst_psMinimize04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} | tst_psMinimize04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} | tst_psMinimize04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} | tst_psMinimize04.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04_F32.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04_F32.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|I|t03
-    Following should generate an error for null input polynomial.
-<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04_F32.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04_F32.stdout	(revision 4546)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): equal difference in variable yE *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): equal differences in variable yErr} | tst_psMinimize04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} | tst_psMinimize04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} | tst_psMinimize04.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04.c                                         *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} | tst_psMinimize04.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04b.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04b.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|I|t03
-    Following should generate an error for null arguments.
-<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04b.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04b.stdout	(revision 4546)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} | tst_psMinimize04b.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} | tst_psMinimize04b.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04b_F32.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04b_F32.stderr	(revision 4546)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<DATE><TIME>|<HOST>|I|t03
-    Following should generate an error for null arguments.
-<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
-    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psMinimize04b_F32.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize04b_F32.stdout	(revision 4546)
+++ 	(revision )
@@ -1,36 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} | tst_psMinimize04b.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} | tst_psMinimize04b.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMinimize04b.c                                        *
-*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psMinimize05.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psMinimize05.stderr	(revision 4546)
+++ 	(revision )
@@ -1,16 +1,0 @@
-<DATE><TIME>|<HOST>|I|t02
-    Following should generate error for null minimize.
-<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
-    Unallowable operation: min is NULL.
-<DATE><TIME>|<HOST>|I|t02
-    Following should generate error for null parameter vector
-<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
-    Unallowable operation: psVector params or its data is NULL.
-<DATE><TIME>|<HOST>|I|t02
-    Following should generate error for null coords.
-<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
-    Unallowable operation: coords is NULL.
-<DATE><TIME>|<HOST>|I|t02
-    Following should generate error for null function
-<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
-    Unallowable operation: func is NULL.
Index: unk/psLib/test/dataManip/verified/tst_psRandom.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psRandom.stderr	(revision 4546)
+++ 	(revision )
@@ -1,83 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomAlloc}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testRandomAlloc
-    Invalid type, should generate error message
-<DATE><TIME>|<HOST>|E|psRandomAlloc (FILE:LINENO)
-    Unknown Random Number Generator Type
-
----> TESTPOINT PASSED (psRandom{psRandomAlloc} | tst_psRandom.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomUniform}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testRandomUniform
-    NULL psRandom variable, should generate error message
-<DATE><TIME>|<HOST>|E|psRandomUniform (FILE:LINENO)
-    Random variable is NULL.
-
----> TESTPOINT PASSED (psRandom{psRandomUniform} | tst_psRandom.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomGaussian}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testRandomGaussian
-    NULL psRandom variable, should generate error message
-<DATE><TIME>|<HOST>|E|psRandomGaussian (FILE:LINENO)
-    Random variable is NULL.
-
----> TESTPOINT PASSED (psRandom{psRandomGaussian} | tst_psRandom.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomPoisson}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testRandomPoisson
-    NULL psRandom variable, should generate error message
-<DATE><TIME>|<HOST>|E|psRandomPoisson (FILE:LINENO)
-    Random variable is NULL.
-
----> TESTPOINT PASSED (psRandom{psRandomPoisson} | tst_psRandom.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomReset}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testRandomResetUniform
-    Reset a NULL psRandom variable, should generate an error message
-<DATE><TIME>|<HOST>|E|psRandomReset (FILE:LINENO)
-    Random variable is NULL.
-
----> TESTPOINT PASSED (psRandom{psRandomReset} | tst_psRandom.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomReset}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psRandom{psRandomReset} | tst_psRandom.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psRandom.c                                             *
-*            TestPoint: psRandom{psRandomReset}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psRandom{psRandomReset} | tst_psRandom.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats00.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats00.stderr	(revision 4546)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats00.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testStatsSampleMeanF32
-    Following should generate warning message
-<DATE><TIME>|<HOST>|W|psVectorStats
-    WARNING: psVectorStats(): p_psVectorSampleMean() returned an error.
-<DATE><TIME>|<HOST>|I|testStatsSampleMeanF32
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
-    Unallowable operation: psVector in or its data is NULL.
-<DATE><TIME>|<HOST>|I|testStatsSampleMeanF32
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
-    Unallowable operation: stats is NULL.
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats00.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats00.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats00.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats01.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats01.stderr	(revision 4546)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats01.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testStatsMaxF32
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
-    Failed to calculate vector maximum
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats01.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats01.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats01.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats02.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats02.stderr	(revision 4546)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats02.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testStatsMinF32
-    Following should generate error message
-<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
-    Failed to calculate vector minimum
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats02.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats02.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats02.c                                            *
-*            TestPoint: psVectorStats{psVectorStats}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats03.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats03.stdout	(revision 4546)
+++ 	(revision )
@@ -1,31 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats03.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_MEDIAN: no vector mask}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with no elements masked.
-The expected median was 2058.000000.  The calculated median was 2058.000000.
-
----> TESTPOINT PASSED (psStats functions{PS_STAT_SAMPLE_MEDIAN: no vector mask} | tst_psStats03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats03.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_MEDIAN: with vector mask} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with last N/2 elements masked.
-The expected median was 1028.500000.  The calculated median was 1028.500000.
-
----> TESTPOINT PASSED (psStats functions{PS_STAT_SAMPLE_MEDIAN: with vector mask} | tst_psStats03.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats03.c                                            *
-*            TestPoint: psStats functions{psStats(): deallocating memory}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{psStats(): deallocating memory} | tst_psStats03.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats05.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats05.stdout	(revision 4546)
+++ 	(revision )
@@ -1,18 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats05.c                                            *
-*            TestPoint: psStats functions{Allocate the psStats structure.}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Allocate the psStats structure.} | tst_psStats05.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats05.c                                            *
-*            TestPoint: psStats functions{Deallocate the psStats structure.}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psStats functions{Deallocate the psStats structure.} | tst_psStats05.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats06.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats06.stdout	(revision 4546)
+++ 	(revision )
@@ -1,31 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats06.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_STDEV: no vector mask}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with no elements masked.
-The expected stdev was 4.472136; the calculated stdev was 4.472136
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_STDEV: no vector mask} | tst_psStats06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats06.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_STDEV: with vector mask}  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with last N/2 elements masked.
-The expected stdev was 2.160247; the calculated stdev was 2.160247
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_STDEV: with vector mask} | tst_psStats06.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats06.c                                            *
-*            TestPoint: psStats functions{psStats(): deallocating memory}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVector functions{psStats(): deallocating memory} | tst_psStats06.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats07.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats07.stderr	(revision 4546)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
-    WARNING: the fitted Gaussian has more than 10% error for the stdev.
-<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
-    WARNING: Using the calculated stdev instead of Gaussian-fitted stdev.
-<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
-    WARNING: the fitted Gaussian has more than 10% error for the stdev.
-<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
-    WARNING: Using the calculated stdev instead of Gaussian-fitted stdev.
Index: unk/psLib/test/dataManip/verified/tst_psStats08.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats08.stdout	(revision 4546)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats08.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_LQ: no vector mask}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with no elements masked.
-The expected sampleLQ was 50.000000; the calculated sampleLQ was 50.000000
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_LQ: no vector mask} | tst_psStats08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats08.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_UQ: no vector mask}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with no elements masked.
-The expected sampleUQ was 150.000000; the calculated sampleUQ was 150.000000
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_UQ: no vector mask} | tst_psStats08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats08.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_LQ: with vector mask}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with elements masked.
-The expected sampleLQ was 25.000000; the calculated sampleLQ was 25.000000
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_LQ: with vector mask} | tst_psStats08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats08.c                                            *
-*            TestPoint: psStats functions{PS_STAT_SAMPLE_UQ: with vector mask}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with elements masked.
-The expected sampleUQ was 75.000000; the calculated sampleUQ was 75.000000
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_UQ: with vector mask} | tst_psStats08.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats08.c                                            *
-*            TestPoint: psStats functions{psStats(): deallocating memory}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVector functions{psStats(): deallocating memory} | tst_psStats08.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psStats09.stdout
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psStats09.stdout	(revision 4546)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats09.c                                            *
-*            TestPoint: psStats functions{PS_STAT_CLIPPED_MEAN: no vector mask}    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with no elements masked.
-The calculated clippedMean was 29.95
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: no vector mask} | tst_psStats09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats09.c                                            *
-*            TestPoint: psStats functions{PS_STAT_CLIPPED_STDEV: no vector mask}   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with no elements masked.
-The calculated clippedStdev was 0.58
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: no vector mask} | tst_psStats09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats09.c                                            *
-*            TestPoint: psStats functions{PS_STAT_CLIPPED_MEAN: vector mask}       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with elements masked.
-The calculated clippedMean was 29.45
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: vector mask} | tst_psStats09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats09.c                                            *
-*            TestPoint: psStats functions{PS_STAT_CLIPPED_STDEV: vector mask}      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Called psVectorStats() on a vector with elements masked.
-The calculated clippedStdev was 0.29
-
----> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: vector mask} | tst_psStats09.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psStats09.c                                            *
-*            TestPoint: psStats functions{psStats(): deallocating memory}          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psVector functions{psStats(): deallocating memory} | tst_psStats09.c)
-
Index: unk/psLib/test/dataManip/verified/tst_psVectorFFT.stderr
===================================================================
--- /trunk/psLib/test/dataManip/verified/tst_psVectorFFT.stderr	(revision 4546)
+++ 	(revision )
@@ -1,73 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorFFT.c                                          *
-*            TestPoint: psFFT{psVectorFFT}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorFFT
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorFFT (FILE:LINENO)
-    Must specify the direction as either PS_FFT_FORWARD or PS_FFT_REVERSE.
-
----> TESTPOINT PASSED (psFFT{psVectorFFT} | tst_psVectorFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorFFT.c                                          *
-*            TestPoint: psFFT{psVectorRealImaginary}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorRealImaginary
-    Following should generate a warning.
-<DATE><TIME>|<HOST>|W|psVectorReal
-    Real portion of a non-Complex type called called for. Just a vector copy was performed.
-<DATE><TIME>|<HOST>|I|testVectorRealImaginary
-    Following should generate a warning.
-<DATE><TIME>|<HOST>|W|psVectorImaginary
-    Imaginary portion of a non-Complex type called for. A zeroed vector was returned.
-
----> TESTPOINT PASSED (psFFT{psVectorRealImaginary} | tst_psVectorFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorFFT.c                                          *
-*            TestPoint: psFFT{psVectorComplex}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorComplex
-    Following should be an error (type mismatch).
-<DATE><TIME>|<HOST>|E|psVectorComplex (FILE:LINENO)
-    Real psVector type, psF32, and imaginary psVector type, psF64, must be the same.
-<DATE><TIME>|<HOST>|I|testVectorComplex
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorComplex (FILE:LINENO)
-    Input psVector type, psS8, is required to be either psF32 or psF64.
-
----> TESTPOINT PASSED (psFFT{psVectorComplex} | tst_psVectorFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorFFT.c                                          *
-*            TestPoint: psFFT{psVectorConjugate}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorConjugate
-    Following should generate a warning message.
-<DATE><TIME>|<HOST>|W|psVectorConjugate
-    Complex Conjugate of a non-Complex type called for. Vector copy was performed instead.
-
----> TESTPOINT PASSED (psFFT{psVectorConjugate} | tst_psVectorFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psVectorFFT.c                                          *
-*            TestPoint: psFFT{psVectorPowerSpectrum}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testVectorPowerSpectrum
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psVectorPowerSpectrum (FILE:LINENO)
-    Input psVector type, psF32, is required to be either psC32 or psC64.
-
----> TESTPOINT PASSED (psFFT{psVectorPowerSpectrum} | tst_psVectorFFT.c)
-
Index: /trunk/psLib/test/db/Makefile.am
===================================================================
--- /trunk/psLib/test/db/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/db/Makefile.am	(revision 4547)
@@ -0,0 +1,23 @@
+#Makefile for db tests of psLib
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	@TST_PSDB@
+
+tst_psDB_SOURCES = tst_psDB.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_PROGRAMS = tst_psDB
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA)
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
Index: /trunk/psLib/test/db/tst_psDB.c
===================================================================
--- /trunk/psLib/test/db/tst_psDB.c	(revision 4547)
+++ /trunk/psLib/test/db/tst_psDB.c	(revision 4547)
@@ -0,0 +1,2216 @@
+/** @file  tst_psDB.c
+ *
+ * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
+ * vim: set cindent ts=8 sw=4 expandtab:
+ *
+ *  @brief Contains the tests for psDB.[ch]
+ *
+ *
+ *  @author Aaron Culliney, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:46:59 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+#define STR_1 "hello world!"
+#define STR_2 "foobar"
+#define S32_1 1974
+#define S32_2 -18
+#define F32_1 3.14159
+#define F32_2 3.33
+#define F64_1 2.7182818
+#define F64_2 1.23456789
+#define B_1 TRUE
+#define B_2 FALSE
+
+#define ERROR_TOL   0.001
+
+#define CONST_ROW_1_STR      "randrow1"
+#define CONST_ROW_1_S32      12345
+#define CONST_ROW_1_F32      9876.5
+#define CONST_ROW_1_F64      456.75
+#define CONST_ROW_1_BOOL     TRUE
+
+#define CONST_ROW_2_STR      "randrow2"
+#define CONST_ROW_2_S32      2345
+#define CONST_ROW_2_F32      876.5
+#define CONST_ROW_2_F64      56.75
+#define CONST_ROW_2_BOOL     FALSE
+
+#define TAB_COL_0_NAME      "key_string"
+#define TAB_COL_1_NAME      "key_s32"
+#define TAB_COL_2_NAME      "key_f32"
+#define TAB_COL_3_NAME      "key_f64"
+#define TAB_COL_4_NAME      "key_bool"
+#define TAB_COL_5_NAME      "key_s32_0"
+
+static psDB *_init_psDB( void );
+static psMetadata *_get_CreateTableMetadata( void );
+static psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4);
+static psMetadata *_get_RowMetadata(
+    const char *key0, const char *comm0, const char *val0,
+    const char *key1, const char *comm1, psS32  val1,
+    const char *key2, const char *comm2, psF32  val2,
+    const char *key3, const char *comm3, psF64  val3,
+    const char *key4, const char *comm4, psBool val4,
+    const char *key5, const char *comm5, psS32  val5);
+static psMetadata *_get_row( void );
+static psMetadata *_get_invalid_row( void );
+static psMetadata *_get_where( void );
+static psMetadata *_get_invalid_where( void );
+static psMetadata *_get_where_bad_value( void );
+static psMetadata *_get_update_values(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4);
+static bool _check_row(psMetadata* row);
+static bool _check_row_update(psMetadata* row);
+static bool _check_const_row1(psMetadata* row);
+static bool _check_const_row2(psMetadata* row);
+
+//static psS32 TPDBCreate( void );
+//static psS32 TPDBDrop( void );
+static psS32 TPDBInit( void );
+static psS32 TPDBChange( void );
+static psS32 TPDBCreateTable( void );
+static psS32 TPDBDropTable( void );
+static psS32 TPDBSelectColumn( void );
+static psS32 TPDBSelectColumnNum( void );
+static psS32 TPDBSelectRows( void );
+static psS32 TPDBInsertOneRow( void );
+static psS32 TPDBInsertRows( void );
+static psS32 TPDBDumpRows( void );
+static psS32 TPDBDumpCols( void );
+static psS32 TPDBUpdateRows( void );
+static psS32 TPDBDeleteRows( void );
+
+testDescription tests[] = {
+                              {TPDBInit,           841,  "dbInit",            0, false},
+                              {TPDBChange,         842,  "dbChange",          0, false},
+                              {TPDBCreateTable,    843,  "dbCreateTable",     0, false},
+                              {TPDBDropTable,      844,  "dbDropTable",       0, false},
+                              {TPDBSelectColumn,   845,  "dbSelectColumn",    0, false},
+                              {TPDBSelectColumnNum,846,  "dbSelectColumnNum", 0, false},
+                              {TPDBSelectRows,     847,  "dbSelectRows",      0, false},
+                              {TPDBInsertOneRow,   848,  "dbInsertOneRow",    0, false},
+                              {TPDBInsertRows,     849,  "dbInsertRows",      0, false},
+                              {TPDBDumpRows,       850,  "dbDumpRows",        0, false},
+                              {TPDBDumpCols,       851,  "dbDumpCols",        0, false},
+                              {TPDBUpdateRows,     852,  "dbUpdateRows",      0, false},
+                              {TPDBDeleteRows,     853,  "dbDeleteRows",      0, false},
+                              //{TPDBCreate,        -14, "dbCreate",          0, false},
+                              //{TPDBDrop,          -15, "dbDrop",            0, false},
+                              {NULL}
+                          };
+
+static const char *host    = "localhost";
+static const char *user    = "test";
+static const char *passwd  = "";
+static const char *dbname  = "test";
+
+// internal method to initialize DB
+psDB *_init_psDB( void )
+{
+    psDB *dbh = NULL;
+
+    // Initialize database connection with test database
+    dbh = psDBInit(host, user, passwd, dbname);
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not initialize DB connection in %s!", __func__ );
+    }
+
+    return dbh;
+}
+
+psMetadata *_get_CreateTableMetadata( void )
+{
+    return _get_RowMetadata(
+               TAB_COL_0_NAME, "comment-string",     "90000", // value used to determine size of field
+               TAB_COL_1_NAME,    "Primary Key",        0,       // values unused here ...
+               TAB_COL_2_NAME,    "Key",                0.0,
+               TAB_COL_3_NAME,    "",                   0.0,
+               TAB_COL_4_NAME,   "",                   FALSE,
+               TAB_COL_5_NAME,  "Key,AUTO_INCREMENT", 0);
+}
+
+psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4)
+{
+    return _get_RowMetadata(
+               TAB_COL_0_NAME, "comment-string", val0,
+               TAB_COL_1_NAME,    "comment-s32",    val1,
+               TAB_COL_2_NAME,    "comment-f32",    val2,
+               TAB_COL_3_NAME,    "comment-f64",    val3,
+               TAB_COL_4_NAME,   "comment-bool",   val4,
+               NULL,         NULL,             0.0);
+}
+
+psMetadata *_get_RowMetadata(
+    const char *key0, const char *comm0, const char *val0,
+    const char *key1, const char *comm1, psS32  val1,
+    const char *key2, const char *comm2, psF32  val2,
+    const char *key3, const char *comm3, psF64  val3,
+    const char *key4, const char *comm4, psBool val4,
+    const char *key5, const char *comm5, psS32  val5)
+{
+    psMetadata *md = NULL;
+    psMetadataItem *str=NULL, *s32_0=NULL, *s32=NULL, *f32=NULL, *f64=NULL, *b;
+
+    md = psMetadataAlloc();
+    if (md == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
+        return NULL;
+    }
+    if (key0 != NULL) {
+        str = psMetadataItemAllocStr(key0, comm0, val0);
+    }
+    if (key5 != NULL) {
+        s32_0 = psMetadataItemAllocS32(key5, comm5, val5);
+    }
+    s32 = psMetadataItemAllocS32 (key1, comm1, val1);
+    f32 = psMetadataItemAllocF32 (key2, comm2, val2);
+    f64 = psMetadataItemAllocF64 (key3, comm3, val3);
+    b   = psMetadataItemAllocBool(key4, comm4, val4);
+
+    if ( ((key0 != NULL) && (str == NULL)) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL) || (b == NULL) ||
+            ((key5 != NULL) && (s32_0 == NULL)) ) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem(s) in %s!", __func__ );
+        return NULL;
+    }
+    if ( ((key0 != NULL) && !psMetadataAddItem(md, str, 0, 0)) ||
+            !psMetadataAddItem(md, s32, 0, 0) || !psMetadataAddItem(md, f32, 0, 0) ||
+            !psMetadataAddItem(md, f64, 0, 0) || !psMetadataAddItem(md, b,   0, 0) ||
+            ((key5 != NULL) && !psMetadataAddItem(md, s32_0, 0, 0))) {
+        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
+        return NULL;
+    }
+
+    if (str != NULL) {
+        psFree(str);
+    }
+    psFree(s32);
+    psFree(f32);
+    psFree(f64);
+    psFree(b);
+    if (s32_0 != NULL) {
+        psFree(s32_0);
+    }
+
+    return md;
+}
+
+psMetadata *_get_const_row1( void )
+{
+    char buf[32];
+    snprintf(buf, 32, "%s", CONST_ROW_1_STR );
+    return _get_RowMetadata(
+               TAB_COL_0_NAME, "comment-string", buf,
+               TAB_COL_1_NAME,    "comment-s32",    CONST_ROW_1_S32,
+               TAB_COL_2_NAME,    "comment-f32",    CONST_ROW_1_F32,
+               TAB_COL_3_NAME,    "comment-f64",    CONST_ROW_1_F64,
+               TAB_COL_4_NAME,   "comment-bool",   CONST_ROW_1_BOOL,
+               NULL,         NULL,             0.0);
+}
+
+psMetadata *_get_const_row2( void )
+{
+    char buf[32];
+    snprintf(buf, 32, "%s",CONST_ROW_2_STR);
+    return _get_RowMetadata(
+               TAB_COL_0_NAME, "comment-string", buf,
+               TAB_COL_1_NAME,    "comment-s32",    CONST_ROW_2_S32,
+               TAB_COL_2_NAME,    "comment-f32",    CONST_ROW_2_F32,
+               TAB_COL_3_NAME,    "comment-f64",    CONST_ROW_2_F64,
+               TAB_COL_4_NAME,   "comment-bool",   CONST_ROW_2_BOOL,
+               NULL,         NULL,             0.0);
+}
+
+psMetadata *_get_row( void )
+{
+    return _get_RowMetadata(
+               TAB_COL_0_NAME, "comment-string", STR_1,
+               TAB_COL_1_NAME,    "comment-s32",    S32_1,
+               TAB_COL_2_NAME,    "comment-f32",    F32_1,
+               TAB_COL_3_NAME,    "comment-f64",    F64_1,
+               TAB_COL_4_NAME,   "comment-bool",   B_1,
+               NULL,         NULL,             0.0);
+}
+
+psMetadata *_get_invalid_row( void )
+{
+    return _get_RowMetadata(
+               TAB_COL_0_NAME, "comment-string", STR_1,
+               TAB_COL_1_NAME,    "comment-s32",    S32_1,
+               "key_999",    "comment-f32",    F32_1,
+               TAB_COL_3_NAME,    "comment-f64",    F64_1,
+               TAB_COL_4_NAME,   "comment-bool",   B_1,
+               NULL,         NULL,             0.0);
+}
+
+psMetadata *_get_where( void )
+{
+    psMetadata *md = NULL;
+    psMetadataItem *s32=NULL;
+
+    md = psMetadataAlloc();
+    if (md == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
+        return NULL;
+    }
+    s32 = psMetadataItemAllocS32(TAB_COL_1_NAME, "", S32_1);
+    if (s32 == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
+        return NULL;
+    }
+    if (!psMetadataAddItem(md, s32, 0, 0)) {
+        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
+        return NULL;
+    }
+
+    psFree(s32);
+    return md;
+}
+
+psMetadata *_get_invalid_where( void )
+{
+    psMetadata *md = NULL;
+    psMetadataItem *s32=NULL;
+
+    md = psMetadataAlloc();
+    if (md == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
+        return NULL;
+    }
+    s32 = psMetadataItemAllocS32("col999", "", S32_1);
+    if (s32 == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
+        return NULL;
+    }
+    if (!psMetadataAddItem(md, s32, 0, 0)) {
+        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
+        return NULL;
+    }
+
+    psFree(s32);
+    return md;
+}
+
+psMetadata *_get_where_bad_value( void )
+{
+    psMetadata *md = NULL;
+    psMetadataItem *s32=NULL;
+
+    md = psMetadataAlloc();
+    if (md == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
+        return NULL;
+    }
+    s32 = psMetadataItemAllocS32(TAB_COL_1_NAME, "", S32_1 + 1);
+    if (s32 == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
+        return NULL;
+    }
+    if (!psMetadataAddItem(md, s32, 0, 0)) {
+        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
+        return NULL;
+    }
+
+    psFree(s32);
+    return md;
+}
+
+psMetadata *_get_update_values(const char *val0, psS32 val1, psF32 val2, psF64 val3, psBool val4)
+{
+    return _get_RowMetadataValues(val0, val1, val2, val3, val4);
+}
+
+bool _check_row(psMetadata* row)
+{
+    bool              returnValue = true;
+    psMetadataItem*   item        = NULL;
+
+    item = psMetadataLookup(row,TAB_COL_0_NAME);
+    if((item==NULL) || (strcmp(item->data.V,STR_1)!=0)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
+                item->data.V,STR_1);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_1_NAME);
+    if((item==NULL) || (item->data.S32 != S32_1)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
+                item->data.S32, S32_1);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_2_NAME);
+    if((item==NULL) || (fabs(item->data.F32-F32_1)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
+                item->data.F32, F32_1);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_3_NAME);
+    if((item==NULL) || (fabs(item->data.F64-F64_1)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
+                item->data.F64,F64_1);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_4_NAME);
+    if((item==NULL) || (item->data.B != B_1)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
+                item->data.B, B_1);
+        return false;
+    }
+
+    return returnValue;
+}
+
+bool _check_row_update(psMetadata* row)
+{
+    bool              returnValue = true;
+    psMetadataItem*   item        = NULL;
+
+    item = psMetadataLookup(row,TAB_COL_0_NAME);
+    if((item==NULL) || (strcmp(item->data.V,STR_2)!=0)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
+                item->data.V,STR_2);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_1_NAME);
+    if((item==NULL) || (item->data.S32 != S32_2)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
+                item->data.S32, S32_2);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_2_NAME);
+    if((item==NULL) || (fabs(item->data.F32-F32_2)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
+                item->data.F32, F32_2);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_3_NAME);
+    if((item==NULL) || (fabs(item->data.F64-F64_2)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
+                item->data.F64,F64_2);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_4_NAME);
+    if((item==NULL) || (item->data.B != B_2)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
+                item->data.B, B_2);
+        return false;
+    }
+
+    return returnValue;
+}
+
+bool _check_const_row1(psMetadata* row)
+{
+    bool              returnValue = true;
+    psMetadataItem*   item        = NULL;
+
+    item = psMetadataLookup(row,TAB_COL_0_NAME);
+    if((item==NULL) || (strcmp(item->data.V,CONST_ROW_1_STR)!=0)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
+                item->data.V,CONST_ROW_1_STR);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_1_NAME);
+    if((item==NULL) || (item->data.S32 != CONST_ROW_1_S32)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
+                item->data.S32, CONST_ROW_1_S32);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_2_NAME);
+    if((item==NULL) || (fabs(item->data.F32-CONST_ROW_1_F32)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
+                item->data.F32, CONST_ROW_1_F32);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_3_NAME);
+    if((item==NULL) || (fabs(item->data.F64-CONST_ROW_1_F64)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
+                item->data.F64,CONST_ROW_1_F64);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_4_NAME);
+    if((item==NULL) || (item->data.B != CONST_ROW_1_BOOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
+                item->data.B, CONST_ROW_1_BOOL);
+        return false;
+    }
+
+    return returnValue;
+}
+
+bool _check_const_row2(psMetadata* row)
+{
+    bool              returnValue = true;
+    psMetadataItem*   item        = NULL;
+
+    item = psMetadataLookup(row,TAB_COL_0_NAME);
+    if((item==NULL) || (strcmp(item->data.V,CONST_ROW_2_STR)!=0)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_string item %s not as expected %s",
+                item->data.V,CONST_ROW_2_STR);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_1_NAME);
+    if((item==NULL) || (item->data.S32 != CONST_ROW_2_S32)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_s32 item %d not as expected %d",
+                item->data.S32, CONST_ROW_2_S32);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_2_NAME);
+    if((item==NULL) || (fabs(item->data.F32-CONST_ROW_2_F32)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f32 item %f not as expected %f",
+                item->data.F32, CONST_ROW_2_F32);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_3_NAME);
+    if((item==NULL) || (fabs(item->data.F64-CONST_ROW_2_F64)>ERROR_TOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_f64 item %lf not as expected %lf",
+                item->data.F64,CONST_ROW_2_F64);
+        return false;
+    }
+
+    item = psMetadataLookup(row,TAB_COL_4_NAME);
+    if((item==NULL) || (item->data.B != CONST_ROW_2_BOOL)) {
+        psError(PS_ERR_UNKNOWN,true,"Column key_bool item %d not as expected %d",
+                item->data.B, CONST_ROW_2_BOOL);
+        return false;
+    }
+
+    return returnValue;
+}
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    srand(time(NULL));
+
+    return ( ! runTestSuite( stderr, "psDB", tests, argc, argv ) );
+}
+
+// Testpoint #841, initialize/break-down MySQL connection.
+psS32 TPDBInit( void )
+{
+    psDB *dbh = NULL;
+
+    // Initialize database with valid arguments
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL to be returned for valid arguments");
+        return 1;
+    }
+
+    // Cleanup database/connection with valid psDB object
+    psDBCleanup(dbh);
+
+    // Attempt to initialize database with invalid arguments
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid host");
+    dbh = psDBInit("xxx",NULL,NULL,NULL);
+    if(dbh != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL psDB with invalid arguments");
+        return 2;
+    }
+
+    // Attempt cleanup database/connection with NULL psDB object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database objec");
+    psDBCleanup(NULL);
+
+    return 0;
+}
+
+// Testpoint #842, psDBChange shall change databases.
+psS32 TPDBChange( void )
+{
+    psDB *dbh = NULL;
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL for valid arguments");
+        return 1;
+    }
+
+    // Attempt to change database with valid arguments
+    if(!psDBChange(dbh, dbname)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for valid arguments");
+        return 2;
+    }
+
+    // Attemp to change database to invalid database name
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid database");
+    if(psDBChange(dbh,"abc")) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return true for unknown database name");
+        return 3;
+    }
+
+    // Cleanup database connection
+    psDBCleanup(dbh);
+
+    // Attempt to change database with NULL database object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for null database object");
+    if(psDBChange(NULL,dbname)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return true for NULL database object");
+        return 4;
+    }
+
+    return 0;
+}
+
+// Testpoint #843, psDBCreateTable shall create tables in the test database ...
+psS32 TPDBCreateTable( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table1";
+
+    // Create metadata for table definition
+    psMetadata *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL for valid argument in database connection");
+        return 1;
+    }
+
+    // Attempt to create database table with valid arguments
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for valid arguments");
+        return 2;
+    } else {
+        // Drop the table from the test database
+        psDBDropTable(dbh, table);
+    }
+
+    // Free metadata definition of table
+    psFree(md);
+
+    // Attempt to create table with NULL table definition
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL parameter");
+    if(psDBCreateTable(dbh,table,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL metadata object");
+        return 3;
+    }
+
+    // Attempt to create table with NULL connection
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL parameter");
+    if(psDBCreateTable(NULL, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL database object");
+        return 4;
+    }
+
+    // Close/cleanup database connection
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #844, psDBDropTable shall remove tables in the test database ...
+psS32 TPDBDropTable( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table2";
+
+    // Create table definition metadata
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return to initialize database");
+        return 1;
+    }
+
+    // Create table in database
+    if(psDBCreateTable(dbh, table, md)) {
+
+        // Drop table with valid arguments
+        if(!psDBDropTable(dbh, table)) {
+            psError(PS_ERR_UNKNOWN,true,"Did not expect return false for valid arguments");
+            return 2;
+        }
+
+        // insert should fail since the table has been drop from database
+        psLogMsg( __func__, PS_LOG_INFO, "psDBDropTable: insert should fail here...\n" );
+        row = _get_row();
+        if (psDBInsertOneRow(dbh, table, row)) {
+            psError(PS_ERR_UNKNOWN,true,"Did not expect to successfully insert row into dropped table");
+            return 3;
+        }
+        psFree(row);
+    } else {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false to create table");
+        return 4;
+    }
+
+    // Attempt to drop table from NULL psDB object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database object");
+    if(psDBDropTable(NULL,table)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return false as expected for NULL database object");
+        return 5;
+    }
+
+    // Attempt to drop table from valid psDB but invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
+    if(psDBDropTable(dbh,"table99")) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return false as expected for invalid table");
+        return 6;
+    }
+
+    // Attempt to drop table from valid psDB but NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
+    if(psDBDropTable(dbh,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return false as expected for NULL table");
+        return 7;
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #845, TPDBSelectColumn shall write/select a column from a test table ...
+psS32 TPDBSelectColumn( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table3";
+    psArray *ary = NULL;
+    char *ptr=NULL;
+
+    // Create table definition metadata
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL to initialize database connection");
+        return 1;
+    }
+
+    // Create database table
+    if(!psDBCreateTable(dbh,table,md)) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to create database table for testing");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Insert known constant row #1
+    row = _get_const_row1();
+    if(!psDBInsertOneRow(dbh, table, row)) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to add rows to test database");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+    psFree(row);
+
+    // Insert known constant row #2
+    row = _get_const_row2();
+    if(!psDBInsertOneRow(dbh, table, row)) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to add rows to test database");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+    psFree(row);
+
+    // Insert known row
+    row = _get_row();
+    if(!psDBInsertOneRow(dbh, table, row)) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to add rows to test database");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+    psFree(row);
+
+    // Select all items in column key_string with valid arguments
+    ary = psDBSelectColumn(dbh, table, TAB_COL_0_NAME, 0);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value of NULL");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+
+    // Verify array contents
+    if(ary->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Array number of items %d not equal to expected %d",
+                ary->n, 3);
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 60;
+    }
+    ptr = psArrayGet(ary, 2);
+    if (strcmp(ptr, CONST_ROW_1_STR)) {
+        psError(PS_ERR_UNKNOWN,true,"key_str column entry[%d] = %s not as expected %s",
+                2,CONST_ROW_1_STR,ptr);
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+    ptr = psArrayGet(ary, 1);
+    if (strcmp(ptr, CONST_ROW_2_STR)) {
+        psError(PS_ERR_UNKNOWN,true,"key_str column entry[%d] = %s not as expected %s",
+                1,CONST_ROW_2_STR,ptr);
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+    ptr = psArrayGet(ary, 0);
+    if (strcmp(ptr, STR_1)) {
+        psError(PS_ERR_UNKNOWN,true,"key_str column entry[%d] = %s not as expected %s",
+                0,STR_1,ptr);
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 9;
+    }
+    psFree(ary);
+
+    // Select items in column key_bool with limit 10 and valid arguments
+    ary = psDBSelectColumn(dbh, table, TAB_COL_4_NAME, 10);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value of NULL");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 10;
+    }
+
+    // Verify array contents
+    if(ary->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Array number of items %d not equal to expected %d",
+                ary->n, 3);
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 100;
+    }
+    ptr = psArrayGet(ary, 2);
+    if(atoi(ptr) != CONST_ROW_1_BOOL) {
+        psError(PS_ERR_UNKNOWN,true,"key_bool column entry[%d] = %d not as expected %d",
+                2,CONST_ROW_1_BOOL,atoi(ptr));
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 11;
+    }
+    ptr = psArrayGet(ary, 1);
+    if(atoi(ptr) != CONST_ROW_2_BOOL) {
+        psError(PS_ERR_UNKNOWN,true,"key_bool column entry[%d] = %d not as expected %d",
+                1,CONST_ROW_2_BOOL,atoi(ptr));
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 12;
+    }
+    ptr = psArrayGet(ary, 0);
+    if(atoi(ptr) != B_1) {
+        psError(PS_ERR_UNKNOWN,true,"key_bool column entry[%d] = %d not as expected %d",
+                0,B_1,atoi(ptr));
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 13;
+    }
+    psFree(ary);
+
+    // Attempt to select columns from NULL database object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
+    if(psDBSelectColumn(NULL,table,"key_str",10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for selecting from NULL database");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 14;
+    }
+
+    // Attempt to select column from NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL table");
+    if(psDBSelectColumn(dbh,NULL,"key_str",10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL table");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 15;
+    }
+
+    // Attempt to select column from invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
+    if(psDBSelectColumn(dbh,"table99","key_str",10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for invalid table");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 16;
+    }
+
+    // Attempt to select invalid column from valid database object and valid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid column");
+    if(psDBSelectColumn(dbh,table,"key_null",10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for invalid column");
+        psDBDropTable(dbh, table);
+        psDBCleanup(dbh);
+        return 17;
+    }
+
+    // Clean up table and memory
+    psDBDropTable(dbh, table);
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #846, TPDBSelectColumnNum shall write/select a column from a test table ...
+psS32 TPDBSelectColumnNum( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table4";
+    psVector *vec = NULL;
+
+    // Create table definition metadata
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expected NULL return to initialize database");
+        return 1;
+    }
+
+    // Create database table for test
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create table");
+        return 2;
+    }
+
+    // Initialize database table with known rows
+    row = _get_const_row1();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_row();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    // Use valid arguments to select column with numeric values to return vector
+    vec = psDBSelectColumnNum(dbh, table, TAB_COL_1_NAME, PS_TYPE_S32, 0);
+
+    // Verify vector returned
+    if (vec == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return with valid arguments");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+    // Verify vector values
+    if(vec->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector size not equal to 3");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 30;
+    }
+    if(vec->type.type != PS_TYPE_S32) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector type not equal to PS_TYPE_S32");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 31;
+    }
+    if ((vec->data.S32)[0] != S32_1) {
+        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
+                0,vec->data.S32[0], S32_1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+    if ((vec->data.S32)[1] != CONST_ROW_2_S32) {
+        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
+                1,vec->data.S32[1], CONST_ROW_2_S32);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+    if ((vec->data.S32)[2] != CONST_ROW_1_S32) {
+        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
+                2,vec->data.S32[2], CONST_ROW_1_S32);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+    psFree(vec);
+
+    // Use valid arguments to select column with numeric values to return vector
+    vec = psDBSelectColumnNum(dbh, table, TAB_COL_4_NAME, PS_TYPE_BOOL, 0);
+
+    // Verify vector returned
+    if (vec == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return with valid arguments");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+    // Verify vector values
+    if(vec->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector size not equal to 3");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+    if(vec->type.type != PS_TYPE_BOOL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return vector type not equal to PS_TYPE_BOOL");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 9;
+    }
+    if ((vec->data.U8)[0] != B_1) {
+        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
+                0,vec->data.U8[0],B_1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 10;
+    }
+    if ((vec->data.U8)[1] != CONST_ROW_2_BOOL) {
+        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
+                0,vec->data.U8[0],CONST_ROW_2_BOOL);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 11;
+    }
+    if ((vec->data.U8)[2] != CONST_ROW_1_BOOL) {
+        psError(PS_ERR_UNKNOWN,true,"vector value[%d] = %d not as expected %d",
+                0,vec->data.U8[0],CONST_ROW_1_BOOL);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 12;
+    }
+    psFree(vec);
+
+    // Attempt to select columns from NULL database
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL database object");
+    if(psDBSelectColumnNum(NULL,table,TAB_COL_4_NAME,PS_TYPE_BOOL,10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with NULL database object");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 13;
+    }
+
+    // Attempt to select columns from NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL table");
+    if(psDBSelectColumnNum(dbh,NULL,TAB_COL_4_NAME,PS_TYPE_BOOL,10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with NULL table");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 14;
+    }
+
+    // Attempt to select columns from invalid column
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid column");
+    if(psDBSelectColumnNum(dbh,table,"key_999",PS_TYPE_BOOL,10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with NULL column");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 15;
+    }
+
+    // Attempt to select columns from invalid column
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid type");
+    if(psDBSelectColumnNum(dbh,table,TAB_COL_0_NAME,0,10) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return with invalid type");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 16;
+    }
+
+    psDBDropTable(dbh, table);
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #847, TPDBSelectRows shall write/select data from a test table ...
+psS32 TPDBSelectRows( void )
+{
+    int i;
+    psDB *dbh = NULL;
+    const char* table = "table5";
+    psArray *ary=NULL, *ary1=NULL, *ary2=NULL;
+    psMetadataItem *item = NULL;
+
+    // Create database table definition
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expected NULL return to initialize database");
+        return 1;
+    }
+
+    psDBDropTable(dbh,table);
+    // Create database table for test
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Initialize database table with known rows
+    row = _get_const_row1();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_row();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    // Generate valid where clause
+    where = _get_where();
+
+    // Select rows with non limit
+    ary1 = psDBSelectRows(dbh, table, where, 0);
+
+    // Select rows with a limit
+    ary2 = psDBSelectRows(dbh, table, where, 1);
+    psFree(where);
+
+    // Cycle through both arrays to verify results
+    for (i=0; i<2; i++) {
+        ary = i ? ary2 : ary1;
+
+        // Verify return array not NULL
+        if (ary == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL");
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 1;
+        }
+
+        if(ary->n != 1) {
+            psError(PS_ERR_UNKNOWN,true,"Number of rows %d not as expected %d",
+                    ary->n, 1);
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 2;
+        }
+
+        // Get metadata which contains row from array
+        row = (psMetadata*)psArrayGet(ary, 0);
+
+        // Get key_s32 item from metadata
+        item = psMetadataLookup(row, TAB_COL_1_NAME);
+        if (item == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Could not find key_s32 item in row metadata");
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 2;
+        }
+        if (item->data.S32 != S32_1) {
+            psError(PS_ERR_UNKNOWN,true,"Row item %d not as expected %d",
+                    item->data.S32,S32_1);
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 3;
+        }
+
+        // Get key_bool item from metadata
+        item = psMetadataLookup(row, TAB_COL_4_NAME);
+        if (item == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Could not find key_bool item in row metadata");
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 2;
+        }
+        if (item->data.B != B_1) {
+            psError(PS_ERR_UNKNOWN,true,"Row item %d not as expected %d",
+                    item->data.S32,S32_1);
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 4;
+        }
+        psFree(ary);
+    }
+
+    // Attempt to select rows with NULL database object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database object");
+    if(psDBSelectRows(NULL, table, where, 0) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL database object");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+
+    // Attempt to select rows with invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
+    if(psDBSelectRows(dbh, NULL, where, 0) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL database object");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+
+    // Select rows with no where specified
+    ary1 = psDBSelectRows(dbh, table, NULL, 0);
+    if(ary1 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return using NULL where");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+    if(ary1->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Rows return %d not as expected %d",
+                ary->n,3);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+    psFree(ary1);
+
+    psDBDropTable(dbh, table);
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #848, TPDBInsertOneRow shall write a row of data into a test table ...
+psS32 TPDBInsertOneRow( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table6";
+    psMetadata *invalidRow = NULL;
+    psArray*    ary = NULL;
+
+    // Create table definition metadata
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for database initialization");
+        return 1;
+    }
+
+    // Create database table
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create database");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Insert a single row with valid arguments
+    row = _get_const_row1();
+    if(!psDBInsertOneRow(dbh, table, row)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting row w/ valid arguments");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+    // Verify row was added to table
+    ary = psDBSelectRows(dbh,table,NULL,0);
+    if(ary->n != 1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of rows %d not as expected %d",
+                ary->n,1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 30;
+    }
+    psFree(ary);
+
+    // Insert a single row with NULL database
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
+    if(psDBInsertOneRow(NULL,table,row)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for NULL database");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+
+    // Insert a single row which has column which does not match table
+    invalidRow = _get_invalid_row();
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid column item");
+    if(psDBInsertOneRow(dbh,table,invalidRow)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for invalid column item");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+
+    // Insert a single row with invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
+    if(psDBInsertOneRow(dbh,"table999",row)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for invalid table");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+
+    // Insert a single row with NULL row
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL row");
+    if(psDBInsertOneRow(dbh,table,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for NULL row");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+
+    psFree(row);
+    psFree(invalidRow);
+    psDBDropTable(dbh, table);
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #849, TPDBInsertRows shall write rows of data into a test table ...
+psS32 TPDBInsertRows( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table7";
+    psArray *rowSet = NULL;
+    psArray* dumpRowSet = NULL;
+    psMetadataItem *item=NULL;
+    psArray* ary = NULL;
+    psMetadata* invalidRow = NULL;
+    psArray* invalidRowSet = NULL;
+
+    //Create database table definition metadata
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL for initializing database connection");
+        return 1;
+    }
+
+    // Create database table for testing
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for creating table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Create array of row elements
+    rowSet = psArrayAlloc(3);
+    rowSet->n = 0;
+
+    row = _get_const_row1();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+
+    row = _get_row();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+
+    // Insert rows with valid arguments
+    if(!psDBInsertRows(dbh, table, rowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting rows w/ valid args");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+
+    // Verify row was added to table
+    ary = psDBSelectRows(dbh,table,NULL,0);
+    if(ary->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Number of rows %d not as expected %d",
+                ary->n,3);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 30;
+    }
+    psFree(ary);
+
+    // extra checks ...
+    dumpRowSet = psDBDumpRows(dbh, table);
+    if (dumpRowSet == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL from dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+
+    // Get first row from array
+    row = (psMetadata*)psArrayGet(dumpRowSet, 0);
+    // Verify contents for column key_s32
+    item = psMetadataLookup(row, TAB_COL_1_NAME);
+    if ((item == NULL) || (item->data.S32 != S32_1)) {
+        psError(PS_ERR_UNKNOWN,true,"Column value %d not as expected %d",
+                item->data.S32, S32_1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+    // Verify contents for column key_bool
+    item = psMetadataLookup(row, TAB_COL_4_NAME);
+    if ((item == NULL) || (item->data.B != B_1)) {
+        psError(PS_ERR_UNKNOWN,true,"Column value %d not as expected %d",
+                item->data.B, B_1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+    psFree(dumpRowSet);
+
+    // Insert rows with NULL database object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database");
+    if(psDBInsertRows(NULL,table,rowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for NULL database");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+
+    // Insert rows with NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
+    if(psDBInsertRows(dbh,NULL,rowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for NULL table");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 70;
+    }
+
+    // Insert rows with invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
+    if(psDBInsertRows(dbh,"table999",rowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for invalid table");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+
+    // Insert rows with NULL array of rows to be inserted
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL row array");
+    if(psDBInsertRows(dbh,table,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false for NULL row array");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 9;
+    }
+
+    // Insert a single row which has column which does not match table
+    invalidRow = _get_invalid_row();
+    // Create array of invalid row element
+    invalidRowSet = psArrayAlloc(1);
+    invalidRowSet->n = 0;
+    psArrayAdd(invalidRowSet, 0, invalidRow);
+    psFree(invalidRow);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid column item");
+    if(psDBInsertRows(dbh,table,invalidRowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value true for invalid column item");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 10;
+    }
+    psFree(invalidRowSet);
+
+    psFree(rowSet);
+    psDBDropTable(dbh, table);
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #850, TPDBDumpRows shall dump all rows from a test table ...
+psS32 TPDBDumpRows( void )
+{
+    psDB *dbh = NULL;
+    const char* table = "table8";
+    psArray *ary = NULL;
+
+    // Create table definition metadata
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL from initializing database");
+        return 1;
+    }
+
+    // Create table for testing
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false from creating table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Insert known data rows into table
+    row = _get_const_row1();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_row();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    // Dump row with valid parameters
+    ary = psDBDumpRows(dbh, table);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+    if(ary->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Rows dumped %d not as expected %d",
+                ary->n, 3);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+
+    row = (psMetadata*)psArrayGet(ary, 0);
+    if(!_check_row(row)) {
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+    row = (psMetadata*)psArrayGet(ary, 1);
+    if(!_check_const_row2(row)) {
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+    row = (psMetadata*)psArrayGet(ary, 2);
+    if(!_check_const_row1(row)) {
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+    psFree(ary);
+
+    // Attempt to dump row with database NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
+    if(psDBDumpRows(NULL,table)!=NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return non-NULL for NULL database specified");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+
+    // Attempt to dump row with table NULL
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL table");
+    if(psDBDumpRows(dbh,NULL)!=NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return non-NULL for NULL table specified");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 9;
+    }
+
+    psDBDropTable(dbh, table);
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #851, TPDBDumpCols shall dump all cols from a test table ...
+psS32 TPDBDumpCols( void )
+{
+    psDB*                dbh     = NULL;
+    const char*          table   = "table9";
+    psMetadata*          row     = NULL;
+    psMetadata*          meta    = NULL;
+    psMetadata*          md      = NULL;
+    psMetadataIterator*  mdIter  = NULL;
+    psMetadataItem*      mdItem  = NULL;
+    int                  itemNum = 0;
+
+    // Create database table definition
+    md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return to initialize database");
+        return 1;
+    }
+
+    // Create database table for testing
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of false to create test table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Add row with known data values
+    row = _get_const_row1();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_row();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    // Dump columns with valid arguments
+    meta = psDBDumpCols(dbh, table);
+    mdIter = psMetadataIteratorAlloc(meta,PS_LIST_HEAD,NULL);
+
+    // Verify contents of metadata returned
+    if (meta == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return value NULL for dumpCols with valid args");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+    if(meta->list->n != 6) {
+        psError(PS_ERR_UNKNOWN,true,"Number of cols = %d not as expected %d",
+                meta->list->n,6);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+    // Verify the metadata items
+    itemNum = 0;
+    while ((mdItem = psMetadataGetAndIncrement(mdIter)) != NULL) {
+        switch(itemNum) {
+        case 0:
+            if(mdItem->type != PS_META_VEC) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
+                        itemNum,mdItem->type,PS_META_VEC);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 5*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_S32) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_S32);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 6*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->n != 3) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->n,3);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 7*(itemNum+1);
+            }
+            if(strcmp(mdItem->name,TAB_COL_5_NAME) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
+                        itemNum,mdItem->name,TAB_COL_5_NAME);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 8*(itemNum+1);
+            }
+            break;
+        case 1:
+            if(mdItem->type != PS_META_VEC) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
+                        itemNum,mdItem->type,PS_META_VEC);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 5*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_BOOL) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_BOOL);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 6*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->n != 3) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->n,3);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 7*(itemNum+1);
+            }
+            if(strcmp(mdItem->name,TAB_COL_4_NAME) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
+                        itemNum,mdItem->name,TAB_COL_4_NAME);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 8*(itemNum+1);
+            }
+            break;
+        case 2:
+            if(mdItem->type != PS_META_VEC) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
+                        itemNum,mdItem->type,PS_META_VEC);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 5*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_F64) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_F64);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 6*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->n != 3) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->n,3);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 7*(itemNum+1);
+            }
+            if(strcmp(mdItem->name,TAB_COL_3_NAME) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
+                        itemNum,mdItem->name,TAB_COL_3_NAME);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 8*(itemNum+1);
+            }
+            break;
+        case 3:
+            if(mdItem->type != PS_META_VEC) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
+                        itemNum,mdItem->type,PS_META_VEC);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 5*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_F32) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_F32);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 6*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->n != 3) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->n,3);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 7*(itemNum+1);
+            }
+            if(strcmp(mdItem->name,TAB_COL_2_NAME) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
+                        itemNum,mdItem->name,TAB_COL_2_NAME);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 8*(itemNum+1);
+            }
+            break;
+        case 4:
+            if(mdItem->type != PS_META_VEC) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
+                        itemNum,mdItem->type,PS_META_VEC);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 5*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->type.type != PS_TYPE_S32) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector type %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->type.type, PS_TYPE_S32);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 6*(itemNum+1);
+            }
+            if(((psVector*)mdItem->data.V)->n != 3) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
+                        itemNum,((psVector*)mdItem->data.V)->n,3);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 7*(itemNum+1);
+            }
+            if(strcmp(mdItem->name,TAB_COL_1_NAME) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
+                        itemNum,mdItem->name,TAB_COL_1_NAME);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 8*(itemNum+1);
+            }
+            break;
+        case 5:
+            if(mdItem->type != PS_META_ARRAY) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d type %d not as expected %d",
+                        itemNum,mdItem->type,PS_META_ARRAY);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 5*(itemNum+1);
+            }
+            if(((psArray*)mdItem->data.V)->n != 3) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d vector size %d not as expected %d",
+                        itemNum,((psArray*)mdItem->data.V)->n,3);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 7*(itemNum+1);
+            }
+            if(strcmp(mdItem->name,TAB_COL_0_NAME) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Column #%d name %s not as expected %s",
+                        itemNum,mdItem->name,TAB_COL_0_NAME);
+                psDBDropTable(dbh,table);
+                psDBCleanup(dbh);
+                return 8*(itemNum+1);
+            }
+            break;
+
+        default:
+            break;
+        }
+        itemNum++;
+    }
+    psFree(mdIter);
+    psFree(meta);
+
+    // Attempt to dump columns from NULL database object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database");
+    if(psDBDumpCols(NULL,table) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL when dumping columns from NULL database");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 10;
+    }
+
+    // Attempt to dump columns for NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
+    if(psDBDumpCols(dbh,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL when dumping columns from NULL table");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 11;
+    }
+
+
+    psDBDropTable(dbh, table);
+
+    psFree(md);
+
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #852, TPDBUpdateRows shall update rows in a test table ...
+psS32 TPDBUpdateRows( void )
+{
+    psDB*            dbh       = NULL;
+    const char*      table     = "table10";
+    psArray*         ary       = NULL;
+    psArray*         rowSet    = NULL;
+    psMetadata*      row       = NULL;
+    psMetadata*      where     = NULL;
+    psMetadata*      updates   = NULL;
+    psMetadata*      md        = NULL;
+    int              chgRows   = 0;
+
+    // Create database table definition
+    md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL when initializing database");
+        return 1;
+    }
+
+    // Create test table
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false to create test table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Create array to hold rows to be added to test table
+    rowSet = psArrayAlloc(3);
+    rowSet->n = 0;
+
+    row = _get_const_row1();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+
+    row = _get_row();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+
+    // Insert rows into test table
+    if(!psDBInsertRows(dbh, table, rowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+
+    // Create where metadata to specify update - only one row
+    where = _get_where();
+
+    // Create update metadata to specify values
+    updates = _get_update_values(STR_2, S32_2, F32_2, F64_2, B_2);
+
+    // Perform database update with valid parameters
+    chgRows = psDBUpdateRows(dbh,table,where,updates);
+    if(chgRows != 1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return other than 1 for valid arguments");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+    // Verify row contents after update
+    ary = psDBDumpRows(dbh, table);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return from dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+    row = (psMetadata*)psArrayGet(ary, 0);
+    if(!_check_row_update(row)) {
+        psError(PS_ERR_UNKNOWN,true,"Update row not verified");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+    psFree(ary);
+
+    // Attempt to update rows with NULL database
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database");
+    chgRows = psDBUpdateRows(NULL,table,where,updates);
+    if(chgRows != -1) {
+        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
+                chgRows,-1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+
+    // Attempt to update rows with invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
+    chgRows = psDBUpdateRows(dbh,"table999",where,updates);
+    if(chgRows != -1) {
+        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
+                chgRows,-1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+
+    // Attempt to update rows with NULL updates
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL updates");
+    chgRows = psDBUpdateRows(dbh,table,where,NULL);
+    if(chgRows != -1) {
+        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
+                chgRows,-1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+
+    // Attempt to update rows with invalid where specifying non-existent column
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid where");
+    psFree(where);
+    where = _get_invalid_where();
+    chgRows = psDBUpdateRows(dbh,table,where,updates);
+    if(chgRows != -1) {
+        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
+                chgRows,-1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 9;
+    }
+
+    // Attempt to update rows with bad value in where statement
+    psFree(where);
+    where = _get_where_bad_value();
+    chgRows = psDBUpdateRows(dbh,table,where,updates);
+    if(chgRows != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Updated rows %ld not as expected %ld",
+                chgRows,0);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 10;
+    }
+    // Verify row contents after update - no change
+    ary = psDBDumpRows(dbh, table);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect NULL return from dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 11;
+    }
+    row = (psMetadata*)psArrayGet(ary, 0);
+    if(!_check_row_update(row)) {
+        psError(PS_ERR_UNKNOWN,true,"Update row not verified");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 12;
+    }
+    psFree(ary);
+
+    psFree(updates);
+    psFree(where);
+    psFree(rowSet);
+    psDBDropTable(dbh, table);
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+// Testpoint #853, TPDBDeleteRows shall update rows in a test table ...
+psS32 TPDBDeleteRows( void )
+{
+    psDB*         dbh       = NULL;
+    const char*   table     = "table11";
+    psArray*      ary       = NULL;
+    psArray*      rowSet    = NULL;
+    psMetadata*   where     = NULL;
+    psMetadata*   row       = NULL;
+    psMetadata*   md        = NULL;
+    int           chgRows   = 0;
+
+    // Create database table definition
+    md = _get_CreateTableMetadata();
+
+    // Initialize database connection
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for initialize database");
+        return 1;
+    }
+
+    // Create test table
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for creating test table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Create known data rows to put into test table
+    rowSet = psArrayAlloc(3);
+    rowSet->n = 0;
+    row = _get_const_row1();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+    row = _get_const_row2();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+    row = _get_row();
+    psArrayAdd(rowSet, 0, row);
+    psFree(row);
+    if(!psDBInsertRows(dbh, table, rowSet)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for inserting data into table");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 3;
+    }
+
+    // Create where clause to specify the row to remove
+    where = _get_where();
+
+    // Delete row with valid arguments
+    chgRows = psDBDeleteRows(dbh,table,where,10);
+    if(chgRows != 1) {
+        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
+                chgRows,1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 4;
+    }
+    // Verify table contents
+    ary = psDBDumpRows(dbh, table);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+    if (ary->n != 2) {
+        psError(PS_ERR_UNKNOWN,true,"Remaining rows %d not as expected %d",
+                ary->n,2);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 6;
+    }
+    psFree(ary);
+
+    // Attempt to delete row just deleted again
+    chgRows = psDBDeleteRows(dbh,table,where,10);
+    if(chgRows != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
+                chgRows,0);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 7;
+    }
+    // Verify table contents
+    ary = psDBDumpRows(dbh, table);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 8;
+    }
+    if (ary->n != 2) {
+        psError(PS_ERR_UNKNOWN,true,"Remaining rows %d not as expected %d",
+                ary->n,2);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 9;
+    }
+    psFree(ary);
+
+    // Attempt to delete row with NULL database
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL database");
+    chgRows = psDBDeleteRows(NULL,table,where,10);
+    if(chgRows > 0) {
+        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
+                chgRows, -1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 10;
+    }
+
+    // Attempt to delete row with invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
+    chgRows = psDBDeleteRows(dbh,"table999",where,10);
+    if(chgRows > 0) {
+        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
+                chgRows, -1);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 11;
+    }
+
+    // Attempt to delete row with NULL where - deletes all rows
+    chgRows = psDBDeleteRows(dbh,table,NULL,10);
+    if(chgRows != 2) {
+        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
+                chgRows, 2);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 12;
+    }
+    // Verify table contents
+    ary = psDBDumpRows(dbh, table);
+    if (ary == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL for dump rows");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 13;
+    }
+    if (ary->n != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Remaining rows %d not as expected %d",
+                ary->n,0);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 14;
+    }
+    psFree(ary);
+
+    // Attempt to delete row with NULL where - deletes all rows from an empty table
+    chgRows = psDBDeleteRows(dbh,table,NULL,10);
+    if(chgRows != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Deleted rows %ld not as expected %ld",
+                chgRows, 0);
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 15;
+    }
+
+    psFree(where);
+    psFree(rowSet);
+    psDBDropTable(dbh, table);
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return 0;
+}
+
+//
+// Tests for psDBCreate and psDBDrop can only be executed if the user
+// has system admin privileges for the SQL server so the tests have been
+// commented out.
+//
+// Testpoint #XXX, psDBCreate shall create a new test database.
+//psS32 TPDBCreate( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
+//
+//    failed = ! psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
+// Testpoint #XXX, psDBDrop shall create a new test database.
+//psS32 TPDBDrop( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
+//
+//    failed = psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        failed = ! psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
Index: /trunk/psLib/test/db/verified/tst_psDB.stderr
===================================================================
--- /trunk/psLib/test/db/verified/tst_psDB.stderr	(revision 4547)
+++ /trunk/psLib/test/db/verified/tst_psDB.stderr	(revision 4547)
@@ -0,0 +1,321 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbInit}                                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBInit
+    Following should generate error message for invalid host
+<DATE><TIME>|<HOST>|E|psDBInit (FILE:LINENO)
+    Failed to connect to database.  Error: Unknown MySQL server host 'xxx' (NUM)
+<DATE><TIME>|<HOST>|I|TPDBInit
+    Following should generate error message for NULL database objec
+<DATE><TIME>|<HOST>|E|psDBCleanup (FILE:LINENO)
+    Invalid psDB has been specified.
+
+---> TESTPOINT PASSED (psDB{dbInit} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbChange}                                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBChange
+    Following should generate error message for invalid database
+<DATE><TIME>|<HOST>|E|psDBChange (FILE:LINENO)
+    Failed to change database.  Error: Access denied for user ''@'localhost' to database 'abc'
+<DATE><TIME>|<HOST>|I|TPDBChange
+    Following should generate error message for null database object
+<DATE><TIME>|<HOST>|E|psDBChange (FILE:LINENO)
+    Invalid psDB has been specified.
+
+---> TESTPOINT PASSED (psDB{dbChange} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbCreateTable}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBCreateTable
+    Following should generate an error message for NULL parameter
+<DATE><TIME>|<HOST>|E|psDBGenerateCreateTableSQL (FILE:LINENO)
+    Create table parameters may not be NULL.
+<DATE><TIME>|<HOST>|E|psDBCreateTable (FILE:LINENO)
+    Query generation failed.
+<DATE><TIME>|<HOST>|I|TPDBCreateTable
+    Following should generate an error message for NULL parameter
+<DATE><TIME>|<HOST>|E|psDBCreateTable (FILE:LINENO)
+    Invalid psDB has been specified.
+
+---> TESTPOINT PASSED (psDB{dbCreateTable} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbDropTable}                                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBDropTable
+    psDBDropTable: insert should fail here...
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Failed to prepare query.  Error: Table 'test.table2' doesn't exist
+<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
+    Failed to insert row.
+<DATE><TIME>|<HOST>|I|TPDBDropTable
+    Following should generate an error message for NULL database object
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
+    Failed to drop table.
+<DATE><TIME>|<HOST>|I|TPDBDropTable
+    Following should generate an error message for invalid table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: Unknown table 'table99'
+<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
+    Failed to drop table.
+<DATE><TIME>|<HOST>|I|TPDBDropTable
+    Following should generate an error message for NULL table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(null)' at line 1
+<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
+    Failed to drop table.
+
+---> TESTPOINT PASSED (psDB{dbDropTable} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbSelectColumn}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBSelectColumn
+    Following should generate error message for NULL database
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+<DATE><TIME>|<HOST>|I|TPDBSelectColumn
+    Following should generate error message for NULL table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null) LIMIT 10' at line 1
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+<DATE><TIME>|<HOST>|I|TPDBSelectColumn
+    Following should generate error message for invalid table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: Table 'test.table99' doesn't exist
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+<DATE><TIME>|<HOST>|I|TPDBSelectColumn
+    Following should generate error message for invalid column
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: Unknown column 'key_null' in 'field list'
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+
+---> TESTPOINT PASSED (psDB{dbSelectColumn} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbSelectColumnNum}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
+    Following should generate an error for NULL database object
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
+    Following should generate an error for NULL table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null) LIMIT 10' at line 1
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
+    Following should generate an error for invalid column
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: Unknown column 'key_999' in 'field list'
+<DATE><TIME>|<HOST>|E|psDBSelectColumn (FILE:LINENO)
+    Failed to select column.
+<DATE><TIME>|<HOST>|I|TPDBSelectColumnNum
+    Following should generate an error for invalid type
+<DATE><TIME>|<HOST>|E|psVectorAlloc (FILE:LINENO)
+    Input psVector is an unsupported type (0x0).
+
+---> TESTPOINT PASSED (psDB{dbSelectColumnNum} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbSelectRows}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: Unknown table 'table5'
+<DATE><TIME>|<HOST>|E|psDBDropTable (FILE:LINENO)
+    Failed to drop table.
+<DATE><TIME>|<HOST>|I|TPDBSelectRows
+    Following should generate an error message for NULL database object
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
+    Query execution failed.
+<DATE><TIME>|<HOST>|I|TPDBSelectRows
+    Following should generate an error message for invalid table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null)' at line 1
+<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
+    Query execution failed.
+
+---> TESTPOINT PASSED (psDB{dbSelectRows} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbInsertOneRow}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
+    Following should generate error message for NULL database
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
+    Failed to insert row.
+<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
+    Following should generate error message for invalid column item
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Failed to prepare query.  Error: Unknown column 'key_999' in 'field list'
+<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
+    Failed to insert row.
+<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
+    Following should generate error message for invalid table
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Failed to prepare query.  Error: Table 'test.table999' doesn't exist
+<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
+    Failed to insert row.
+<DATE><TIME>|<HOST>|I|TPDBInsertOneRow
+    Following should generate error message for NULL row
+<DATE><TIME>|<HOST>|E|psDBInsertOneRow (FILE:LINENO)
+    Failed to insert row.
+
+---> TESTPOINT PASSED (psDB{dbInsertOneRow} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbInsertRows}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBInsertRows
+    Following should generate an error message for NULL database
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|I|TPDBInsertRows
+    Following should generate an error message for NULL table
+<DATE><TIME>|<HOST>|E|psDBGenerateInsertRowSQL (FILE:LINENO)
+    Query generation failed.
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Query generation failed.
+<DATE><TIME>|<HOST>|I|TPDBInsertRows
+    Following should generate an error message for invalid table
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Failed to prepare query.  Error: Table 'test.table999' doesn't exist
+<DATE><TIME>|<HOST>|I|TPDBInsertRows
+    Following should generate an error message for NULL row array
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Failed to insert row.
+<DATE><TIME>|<HOST>|I|TPDBInsertRows
+    Following should generate error message for invalid column item
+<DATE><TIME>|<HOST>|E|psDBInsertRows (FILE:LINENO)
+    Failed to prepare query.  Error: Unknown column 'key_999' in 'field list'
+
+---> TESTPOINT PASSED (psDB{dbInsertRows} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbDumpRows}                                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBDumpRows
+    Following should generate error message for NULL database
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
+    Query execution failed.
+<DATE><TIME>|<HOST>|I|TPDBDumpRows
+    Following should generate error message for NULL table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null)' at line 1
+<DATE><TIME>|<HOST>|E|psDBSelectRows (FILE:LINENO)
+    Query execution failed.
+
+---> TESTPOINT PASSED (psDB{dbDumpRows} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbDumpCols}                                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBDumpCols
+    Following should generate an error message for NULL database
+<DATE><TIME>|<HOST>|E|psDBDumpCols (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|I|TPDBDumpCols
+    Following should generate an error message for NULL table
+<DATE><TIME>|<HOST>|E|psDBDumpCols (FILE:LINENO)
+    NULL table specified.
+
+---> TESTPOINT PASSED (psDB{dbDumpCols} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbUpdateRows}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBUpdateRows
+    Following should generate an error message for NULL database
+<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|I|TPDBUpdateRows
+    Following should generate an error message for invalid table
+<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
+    Failed to prepare query.  Error: Table 'test.table999' doesn't exist
+<DATE><TIME>|<HOST>|I|TPDBUpdateRows
+    Following should generate an error message for NULL updates
+<DATE><TIME>|<HOST>|E|psDBGenerateUpdateRowSQL (FILE:LINENO)
+    Update row SQL generate fail: values and where params may not be NULL.
+<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
+    Query generation failed.
+<DATE><TIME>|<HOST>|I|TPDBUpdateRows
+    Following should generate an error message for invalid where
+<DATE><TIME>|<HOST>|E|psDBUpdateRows (FILE:LINENO)
+    Failed to prepare query.  Error: Unknown column 'col999' in 'where clause'
+
+---> TESTPOINT PASSED (psDB{dbUpdateRows} | tst_psDB.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psDB.c                                                 *
+*            TestPoint: psDB{dbDeleteRows}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPDBDeleteRows
+    Following should generate error message for NULL database
+<DATE><TIME>|<HOST>|E|psDBDeleteRows (FILE:LINENO)
+    Invalid psDB has been specified.
+<DATE><TIME>|<HOST>|I|TPDBDeleteRows
+    Following should generate error message for invalid table
+<DATE><TIME>|<HOST>|E|p_psDBRunQuery (FILE:LINENO)
+    Failed to execute SQL query.  Error: Table 'test.table999' doesn't exist
+<DATE><TIME>|<HOST>|E|psDBDeleteRows (FILE:LINENO)
+    Delete failed.
+
+---> TESTPOINT PASSED (psDB{dbDeleteRows} | tst_psDB.c)
+
Index: /trunk/psLib/test/fft/Makefile.am
===================================================================
--- /trunk/psLib/test/fft/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/fft/Makefile.am	(revision 4547)
@@ -0,0 +1,24 @@
+#Makefile for fft tests of psLib
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psImageFFT \
+	tst_psVectorFFT
+
+tst_psVectorFFT_SOURCES = tst_psVectorFFT.c
+tst_psImageFFT_SOURCES = tst_psImageFFT.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA) temp/*
+
+tests: $(TESTS) $(check_DATA)
+
+test: check
Index: /trunk/psLib/test/fft/tst_psImageFFT.c
===================================================================
--- /trunk/psLib/test/fft/tst_psImageFFT.c	(revision 4547)
+++ /trunk/psLib/test/fft/tst_psImageFFT.c	(revision 4547)
@@ -0,0 +1,664 @@
+/** @file  tst_psImageFFT.c
+ *
+ *  @brief Contains the tests for psFFT.[ch]
+ *
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:46:59 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include <complex.h>
+#include <math.h>
+#include <float.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+#define GENIMAGE(img,c,r,TYP, valueFcn) \
+img = psImageAlloc(c,r,PS_TYPE_##TYP); \
+for (psU32 row=0;row<r;row++) { \
+    ps##TYP* imgRow = img->data.TYP[row]; \
+    for (psU32 col=0;col<c;col++) { \
+        imgRow[col] = (ps##TYP)(valueFcn); \
+    } \
+}
+
+static psS32 testImageFFT(void);
+static psS32 testImageRealImaginary(void);
+static psS32 testImageComplex(void);
+static psS32 testImageConjugate(void);
+static psS32 testImagePowerSpectrum(void);
+
+testDescription tests[] = {
+                              {testImageFFT,632,"psImageFFT",0,false},
+                              {testImageRealImaginary,633,"psImageRealImaginary",0,false},
+                              {testImageComplex,634,"psImageComplex",0,false},
+                              {testImageConjugate,635,"psImageConjugate",0,false},
+                              {testImagePowerSpectrum,636,"psImagePowerSpectrum",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return (! runTestSuite(stderr,"psFFT",tests,argc,argv) );
+}
+
+psS32 testImageFFT(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* img3 = NULL;
+    psU32 m = 128;
+    psU32 n = 64;
+    psImage* img4 = NULL;
+    psImage* img5 = NULL;
+
+    /*
+    1. assign a image to a radial sinisoid
+    2. perform a forward transform
+    3. verify that the only significant component cooresponds to the freqency of the input in step 1.
+    4. perform a reverse transform
+    5. compare to original (should be equal to within a reasonable error)
+    */
+
+    // 1. assign a image to a radial sinisoid
+    GENIMAGE(img,m,n,F32, sinf((32.0f-row)/32.0f*M_PI)+sinf((64.0f-col)/64.0f*M_PI));
+
+    // 2. perform a forward transform
+    img2 = psImageFFT(img2,img,PS_FFT_FORWARD);
+    if (img2->type.type != PS_TYPE_C32) {
+        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce complex values?");
+        return 1;
+    }
+    if (img2->numCols != m || img2->numRows != n) {
+        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce proper size result (%dx%d vs. expected %dx%d).",
+                img2->numCols,img2->numRows,m,n);
+        return 2;
+    }
+
+    // 3. verify that the only significant component cooresponds to the freqency of the input in step 1.
+    for (psU32 row=0;row<n;row++) {
+        psC32* img2Row = img2->data.C32[row];
+        for (psU32 col=0;col<m;col++) {
+            psF32 mag = cabsf(img2Row[col])/m/n;
+            if (mag > 0.1f) {
+                // must be (0,1) or (0,n-1) or (1,0) or (m-1,0)
+                if (! (col == 0 && (row == 1 || row == n-1))
+                        && ! (row == 0 && (col==1 || col == m-1)) ) {
+                    psError(PS_ERR_UNKNOWN, true,"Result invalid at %d,%d (%.2f)",col,row,mag);
+                    return 3;
+                }
+            } else
+                if ( (col == 0 && (row == 1 || row == n-1))
+                        || (row == 0 && (col==1 || col == m-1)) ) {
+                    psError(PS_ERR_UNKNOWN, true,"Result invalid at %d,%d (%.2f)",col,row,mag);
+                    return 4;
+                }
+        }
+    }
+
+
+    // 4. perform a reverse transform
+    img3 = psImageFFT(img3,img2,PS_FFT_REVERSE);
+
+    if (img3->type.type != PS_TYPE_C32) {
+        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce complex values?");
+        return 5;
+    }
+
+    if (img3->numCols != m || img3->numRows != n) {
+        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce proper size result (%dx%d vs. expected %dx%d).",
+                img3->numCols,img3->numRows,m,n);
+        return 6;
+    }
+
+    for (psU32 row=0;row<n;row++) {
+        psC32* img3Row = img3->data.C32[row];
+        psF32* imgRow = img->data.F32[row];
+        for (psU32 col=0;col<m;col++) {
+            psF32 pixel = creal(img3Row[col])/m/n;
+            if (fabsf(pixel-imgRow[col]) > 0.1) {
+                psError(PS_ERR_UNKNOWN, true,"Reverse FFT didn't give original image back (%d,%d %.2f vs %.2f)",
+                        col,row,pixel,imgRow[col]);
+                return 7;
+            }
+        }
+    }
+
+    // 4. perform a reverse transform to real result
+    img3 = psImageFFT(img3,img2,PS_FFT_REVERSE|PS_FFT_REAL_RESULT);
+
+    if (img3->type.type != PS_TYPE_F32) {
+        char* typeStr;
+        PS_TYPE_NAME(typeStr,img3->type.type)
+        psError(PS_ERR_UNKNOWN, true,"FFT asked to make real result, but I got a %s type image?",typeStr);
+        return 8;
+    }
+
+    if (img3->numCols != m || img3->numRows != n) {
+        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce proper size result (%dx%d vs. expected %dx%d).",
+                img3->numCols,img3->numRows,m,n);
+        return 9;
+    }
+
+    for (psU32 row=0;row<n;row++) {
+        psF32* img3Row = img3->data.F32[row];
+        psF32* imgRow = img->data.F32[row];
+        for (psU32 col=0;col<m;col++) {
+            psF32 pixel = img3Row[col]/m/n;
+            if (fabsf(pixel-imgRow[col]) > 0.1) {
+                psError(PS_ERR_UNKNOWN, true,"Reverse FFT didn't give original image back (%d,%d %.2f vs %.2f)",
+                        col,row,pixel,imgRow[col]);
+                return 10;
+            }
+        }
+    }
+
+    // check if error occurs if FORWARD and REVERSE are both given.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    if (psImageFFT(NULL,img2,PS_FFT_REVERSE|PS_FFT_FORWARD) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"PS_FFT_REVERSE|PS_FFT_FORWARD option produced something?");
+        return 11;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    if (psImageFFT(NULL,img2,PS_FFT_FORWARD|PS_FFT_REAL_RESULT) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"PS_FFT_FORWARD|PS_FFT_REAL_RESULT option produced something?");
+        return 12;
+    }
+
+    /* Verify return null and program execution doesn't stop if input image is null */
+    img4 = psImageFFT(NULL,NULL,PS_FFT_FORWARD);
+    if (img4 != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psImageFFT should return null for a null input image.");
+        return 10;
+    }
+
+    /* Verify return null and program execution doesn't stop if input image is invalid direction */
+    GENIMAGE(img4,8,8,S8,row+col);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for invalid direction.");
+    img5 = psImageFFT(NULL,img4,PS_FFT_REAL_RESULT);
+    if (img5 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageFFT should return null for an invalid FFT direction.");
+        return 11;
+    }
+    psFree(img4);
+
+    psFree(img);
+    psFree(img2);
+    psFree(img3);
+
+    return 0;
+}
+
+psS32 testImageRealImaginary(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* img3 = NULL;
+    psImage* c64Img = NULL;
+    psImage* c64Img2 = NULL;
+    psImage* c64Img3 = NULL;
+    psImage* ncImg = NULL;
+    psImage* ncImg2 = NULL;
+    psImage* ncImg3 = NULL;
+
+    psU32 m = 128;
+    psU32 n = 64;
+
+    /*
+    1. create a C32 complex vector with distinctly different real and imaginary parts.
+    2. call psImageReal and psImageImaginary
+    3. compare results to the real/imaginary components of input
+    */
+
+    // 1. create a C32 complex vector with distinctly different real and imaginary parts.
+    GENIMAGE(img,m,n,C32, row + I * col);
+
+    // 2. call psImageReal and psImageImaginary
+    img2 = psImageReal(img2,img);
+    if (img2 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a NULL?");
+        return 1;
+    }
+    if (img2->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a wrong type (%d)?",
+                img2->type.type);
+        return 2;
+    }
+
+    img3 = psImageImaginary(img3,img);
+    if (img3 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a NULL?");
+        return 3;
+    }
+    if (img3->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a wrong type (%d)?",
+                img3->type.type);
+        return 4;
+    }
+
+    // 3. compare results to the real/imaginary components of input
+    for (psU32 row=0;row<n;row++) {
+        psF32* img2Row = img2->data.F32[row];
+        psF32* img3Row = img3->data.F32[row];
+        for (psU32 col=0;col<m;col++) {
+            if (fabsf(img2Row[col] - row) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImageReal didn't return the real portion at n=%d",
+                        n);
+                return 5;
+            }
+            if (fabsf(img3Row[col] - col) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImageImaginary didn't return the imag portion at n=%d",
+                        n);
+                return 6;
+            }
+        }
+    }
+
+    psFree(img);
+    psFree(img2);
+    psFree(img3);
+
+    /*
+    1. create a C64 complex vector with distinctly different real and imaginary parts.
+    2. call psImageReal and psImageImaginary
+    3. compare results to the real/imaginary components of input
+    */
+
+    // 1. create a C64 complex vector with distinctly different real and imaginary parts.
+    GENIMAGE(c64Img,m,n,C64, row + I * col);
+
+    // 2. call psImageReal and psImageImaginary
+    c64Img2 = psImageReal(c64Img2,c64Img);
+    if (c64Img2 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a NULL?");
+        return 1;
+    }
+    if (c64Img2->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a wrong type (%d)?",
+                img2->type.type);
+        return 2;
+    }
+
+    c64Img3 = psImageImaginary(c64Img3,c64Img);
+    if (c64Img3 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a NULL?");
+        return 3;
+    }
+    if (c64Img3->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a wrong type (%d)?",
+                c64Img3->type.type);
+        return 4;
+    }
+
+    // 3. compare results to the real/imaginary components of input
+    for (psU32 row=0;row<n;row++) {
+        psF64* img2Row = c64Img2->data.F64[row];
+        psF64* img3Row = c64Img3->data.F64[row];
+        for (psU32 col=0;col<m;col++) {
+            if (fabsf(img2Row[col] - row) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImageReal didn't return the real portion at n=%d",
+                        n);
+                return 5;
+            }
+            if (fabsf(img3Row[col] - col) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImageImaginary didn't return the imag portion at n=%d",
+                        n);
+                return 6;
+            }
+        }
+    }
+
+    GENIMAGE(ncImg,m,n,F32,row+col);
+    ncImg2 = psImageReal(ncImg2,ncImg);
+    ncImg3 = psImageImaginary(ncImg3,ncImg);
+    if(ncImg2 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageReal returned NULL");
+        return 40;
+    }
+    if(ncImg2->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"psImageReal returned a wrong type");
+        return 41;
+    }
+    if(ncImg3 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageImaginary returned NULL");
+        return 42;
+    }
+    if(ncImg3->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"psImageImaginary returned NULL");
+        return 43;
+    }
+    for(psU32 row=0; row<n; row++) {
+        psF32* ncImg2Row = ncImg2->data.F32[row];
+        psF32* ncImg3Row = ncImg3->data.F32[row];
+        for(psU32 col=0; col<m; col++) {
+            if(fabsf(ncImg2Row[col] - (row+col)) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN,true,"psImageReal didn't return the real portion");
+                return 45;
+            }
+            if(fabsf(ncImg3Row[col] - 0) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN,true,"psImageImaginary didn't return the imaginary portion");
+                return 46;
+            }
+        }
+    }
+    psFree(ncImg);
+    psFree(ncImg2);
+    psFree(ncImg3);
+
+    psFree(c64Img);
+    psFree(c64Img2);
+    psFree(c64Img3);
+
+    // Perform psImageReal with null input
+    if(psImageReal(NULL,NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psImageReal did not return null with null input");
+        return 10;
+    }
+
+    // Perform psImageImaginary with null input
+    if(psImageImaginary(NULL,NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psImageImaginary did not return null with null input");
+        return 10;
+    }
+
+    return 0;
+}
+
+psS32 testImageComplex(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* img3 = NULL;
+    psImage* c64Img = NULL;
+    psImage* c64Img2 = NULL;
+    psImage* c64Img3 = NULL;
+    psImage* pImg = NULL;
+    psImage* pImg2 = NULL;
+    psImage* pImg3 = NULL;
+
+    psU32 m = 128;
+    psU32 n = 64;
+
+    /*
+    1. create two unique psF32 vectors of the same size
+    2. call psImageComplex
+    3. verify that the result is a psC32
+    4. use crealf and cimagf on step 2 results
+    5. compare step 4 results to input.
+
+    6. create a psF32 and a psF64 vector of the same size
+    7. call psImageComplex
+    8. verify that an appropriate error occurred.
+
+    9. create two psf32 vectors of different sizes
+    10. call psImageComplex
+    11. verify thet an appropriate error occurred.
+    */
+
+    // 1. create two unique psF32 vectors of the same size
+    GENIMAGE(img,m,n,F32,row);
+    GENIMAGE(img2,m,n,F32,col);
+    GENIMAGE(c64Img,m,n,F64,row);
+    GENIMAGE(c64Img2,m,n,F64,col);
+    GENIMAGE(pImg,m,n,S16,row);
+    GENIMAGE(pImg2,m,n,S16,col);
+
+    // 2. call psImageComplex
+    img3 = psImageComplex(img3,img,img2);
+    c64Img3 = psImageComplex(c64Img3,c64Img,c64Img2);
+
+    // 3. verify that the result is a psC32
+    if (img3->type.type != PS_TYPE_C32) {
+        psError(PS_ERR_UNKNOWN, true,"Image Type from psImageComplex is not complex? (%d)",
+                img3->type.type);
+        return 1;
+    }
+    if (c64Img3->type.type != PS_TYPE_C64) {
+        psError(PS_ERR_UNKNOWN,true,"Image type from psImageComplex is not complex");
+        return 10;
+    }
+
+    // 4. call psImageReal and psImageImaginary on step 2 results (not needed, just use crealf/cimagf)
+    // 5. compare step 4 results to input.
+    for (psU32 row=0;row<n;row++) {
+        psC32* img3Row = img3->data.C32[row];
+        psC64* c64Img3Row = c64Img3->data.C64[row];
+        for (psU32 col=0;col<m;col++) {
+            if (fabsf(crealf(img3Row[col]) - row) > FLT_EPSILON ||
+                    fabsf(cimagf(img3Row[col]) - col) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImageComplex result is invalid (%d,%d, %.2f+%.2fi)",
+                        col,row,crealf(img3Row[col]),cimagf(img3Row[col]));
+                return 2;
+            }
+            if (fabsf(crealf(c64Img3Row[col]) - row) > FLT_EPSILON ||
+                    fabsf(cimagf(c64Img3Row[col]) - col) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN,true,"psImageComplex result is invalid");
+                return 3;
+            }
+        }
+    }
+
+    // 6. create a psF32 and a psF64 image of the same size
+    img2 = psImageRecycle(img2,m,n,PS_TYPE_F64);
+
+    // 7. call psImageComplex
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error (type mismatch).");
+    img3 = psImageComplex(img3,img,img2);
+    // 8. verify that an appropriate error occurred. (this partially has to be done via inspection)
+    if (img3 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageComplex returned a image though input types mismatched.");
+        return 3;
+    }
+
+    // 9. create two psf32 vectors of different sizes
+    img2 = psImageRecycle(img2,m/2,n,PS_TYPE_F32);
+
+    // 10. call psImageComplex
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error (size mismatch).");
+    img3 = psImageComplex(img3,img,img2);
+
+    // 11. verify thet an appropriate error occurred.
+    if (img3 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageComplex returned a image though input sizes mismatched.");
+        return 4;
+    }
+
+    // Perform psImageComplex with invalid type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    pImg3 = psImageComplex(pImg3,pImg,pImg2);
+    if ( pImg3 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageComplex did not return NULL");
+        return 50;
+    }
+
+    psFree(img);
+    psFree(img2);
+    psFree(img3);
+    psFree(c64Img);
+    psFree(c64Img2);
+    psFree(c64Img3);
+    psFree(pImg);
+    psFree(pImg2);
+
+    // Perform psImageComplex with null input
+    if(psImageComplex(NULL,NULL,NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psImageComplex did not return null with null input");
+        return 20;
+    }
+
+    return 0;
+}
+
+psS32 testImageConjugate(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* c64Img = NULL;
+    psImage* c64Img2 = NULL;
+    psImage* pImg = NULL;
+    psImage* pImg2 = NULL;
+
+    psU32 m = 128;
+    psU32 n = 64;
+
+    /*
+    1. create a psC32 with unique real and imaginary values.
+    2. call psImageConjugate
+    3. verify result is psC32
+    4. verify each value is conjugate of input (a+bi -> a-bi)
+    */
+
+    // 1. create a psC32 with unique real and imaginary values.
+    GENIMAGE(img,m,n,C32, row + I * col);
+    GENIMAGE(c64Img,m,n,C64,row + I*col);
+    GENIMAGE(pImg,m,n,F32,row+col);
+
+    // 2. call psImageConjugate
+    img2 = psImageConjugate(img2,img);
+    c64Img2 = psImageConjugate(c64Img2,c64Img);
+    pImg2 = psImageConjugate(pImg2,pImg);
+
+    // 3. verify result is psC32
+    if (img2->type.type != PS_TYPE_C32) {
+        psError(PS_ERR_UNKNOWN, true,"the psImageConjugate didn't return a C32 image.");
+        return 1;
+    }
+    if (c64Img2->type.type != PS_TYPE_C64) {
+        psError(PS_ERR_UNKNOWN,true,"psImageConjugate did not return a C64 image");
+        return 10;
+    }
+    if (pImg2->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"psImageConjugate did not return a F32 image");
+        return 11;
+    }
+
+    // 4. verify each value is conjugate of input (a+bi -> a-bi)
+    for (psU32 row=0;row<n;row++) {
+        psC32* img2Row = img2->data.C32[row];
+        psC64* c64Img2Row = c64Img2->data.C64[row];
+        psF32* pImg2Row = pImg2->data.F32[row];
+        for (psU32 col=0;col<m;col++) {
+            if (fabsf(crealf(img2Row[col]) - row) > FLT_EPSILON ||
+                    fabsf(cimagf(img2Row[col]) + col) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImageComplex result is invalid (%d,%d, %.2f+%.2fi)",
+                        col,row,crealf(img2Row[col]),cimagf(img2Row[col]));
+                return 2;
+            }
+            if (fabsf(crealf(c64Img2Row[col]) - row) > FLT_EPSILON ||
+                    fabsf(cimagf(c64Img2Row[col]) + col) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN,true,"psImageComplex result is invalid");
+                return 20;
+            }
+            if (fabsf(pImg2Row[col] - (row+col)) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN,true,"psImageComplex result is invalid");
+                return 21;
+            }
+        }
+    }
+
+    psFree(img);
+    psFree(img2);
+    psFree(c64Img);
+    psFree(c64Img2);
+    psFree(pImg);
+    psFree(pImg2);
+
+    // Perform psImageConjugate with null input
+    if(psImageConjugate(NULL,NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psImageConjugate did not return null with null input");
+        return 30;
+    }
+
+    return 0;
+}
+
+psS32 testImagePowerSpectrum(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* c64Img = NULL;
+    psImage* c64Img2 = NULL;
+    psImage* pImg = NULL;
+
+    psU32 m = 128;
+    psU32 n = 64;
+
+    /*
+    1. create a psC32 vector with unique real and imaginary components
+    2. call psImagePowerSpectrum
+    3. verify result is psF32
+    4. verify the values are the square of the absolute values of the original
+    */
+
+    // 1. create a psC32 vector with unique real and imaginary components
+    GENIMAGE(img,m,n,C32, row + I * col);
+    GENIMAGE(c64Img,m,n,C64,row+I*col);
+    GENIMAGE(pImg,m,n,F32,row+col);
+
+    // 2. call psImagePowerSpectrum
+    img2 = psImagePowerSpectrum(img2,img);
+    c64Img2 = psImagePowerSpectrum(c64Img2, c64Img);
+
+    // 3. verify result is psF32
+    if (img2->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN, true,"the type was not PS_TYPE_F32.");
+        return 1;
+    }
+    if (c64Img2->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum did not return PS_TYPE_F64");
+        return 10;
+    }
+
+    // 4. verify the values are the square of the absolute values of the original
+    for (psU32 row=0;row<n;row++) {
+        psC32* imgRow = img->data.C32[row];
+        psF32* img2Row = img2->data.F32[row];
+        psC64* c64ImgRow = c64Img->data.C64[row];
+        psF64* c64Img2Row = c64Img2->data.F64[row];
+        for (psU32 col=0;col<m;col++) {
+            psF32 power = cabs(imgRow[col]);
+            psF64 power64 = cabs(c64ImgRow[col]);
+            power *= power/n/n/m/m;
+            power64 *= power64/n/n/m/m;
+
+            if (fabsf(img2Row[col] - power) > 2.0f*FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"psImagePowerSpectrum result is invalid (%d,%d, %.2f vs %.2f)",
+                        col,row,img2Row[col],power);
+                return 2;
+            }
+            if (fabsf(c64Img2Row[col] - power64) > 2.0f*FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum result is invalid");
+                return 22;
+            }
+        }
+    }
+
+    psFree(img);
+    psFree(img2);
+    psFree(c64Img);
+    psFree(c64Img2);
+
+    // Perform psImagePowerSpectrum with invalid input
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message.");
+    if(psImagePowerSpectrum(NULL,pImg) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum did not return null with invalid type");
+        return 41;
+    }
+    psFree(pImg);
+
+    // Perform psImagePowerSpectrum with null input
+    if(psImagePowerSpectrum(NULL,NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum did not return null with null input");
+        return 40;
+    }
+
+    return 0;
+}
Index: /trunk/psLib/test/fft/tst_psVectorFFT.c
===================================================================
--- /trunk/psLib/test/fft/tst_psVectorFFT.c	(revision 4547)
+++ /trunk/psLib/test/fft/tst_psVectorFFT.c	(revision 4547)
@@ -0,0 +1,642 @@
+/** @file  tst_psVectorFFT.c
+*
+*  @brief Contains the tests for psFFT.[ch]
+*
+*
+*  @author Robert DeSonia, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:46:59 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+
+#include <math.h>
+#include <float.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+#define GENIMAGE(img,c,r,TYP, valueFcn) \
+img = psImageAlloc(c,r,PS_TYPE_##TYP); \
+for (psU32 row=0;row<r;row++) { \
+    ps##TYP* imgRow = img->data.TYP[row]; \
+    for (psU32 col=0;col<c;col++) { \
+        imgRow[col] = (ps##TYP)(valueFcn); \
+    } \
+}
+
+static psS32 testVectorFFT( void );
+static psS32 testVectorRealImaginary( void );
+static psS32 testVectorComplex( void );
+static psS32 testVectorConjugate( void );
+static psS32 testVectorPowerSpectrum( void );
+
+testDescription tests[] = {
+                              {testVectorFFT, 600, "psVectorFFT", 0, false},
+                              {testVectorRealImaginary, 601, "psVectorRealImaginary", 0, false},
+                              {testVectorComplex, 602, "psVectorComplex", 0, false},
+                              {testVectorConjugate, 603, "psVectorConjugate", 0, false},
+                              {testVectorPowerSpectrum, 604, "psVectorPowerSpectrum", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psFFT", tests, argc, argv ) );
+}
+
+psS32 testVectorFFT( void )
+{
+    psVector * vec = NULL;
+    psVector* vec2 = NULL;
+    psVector* vec3 = NULL;
+    psVector* vec4 = NULL;
+
+    /*
+    1. assign a vector to a sinisoid
+    2. perform a forward transform
+    3. verify that the only significant component cooresponds to the freqency of the input in step 1.
+    4. perform a reverse transform
+    5. compare to original (should be equal to within a reasonable error)
+    */
+
+    // 1. assign a vector to a sinisoid
+    vec = psVectorAlloc( 100, PS_TYPE_F32 );
+    vec->n = vec->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.F32[ n ] = sinf( ( psF32 ) n / 50.0f * M_PI );
+    }
+
+    // 2. perform a forward transform
+    vec2 = psVectorFFT( NULL, vec, PS_FFT_FORWARD );
+    if ( vec2->type.type != PS_TYPE_C32 ) {
+        psError(PS_ERR_UNKNOWN,true, "FFT didn't produce complex values?" );
+        return 1;
+    }
+
+    // 2a. verify output vector is same size as input
+    if ( vec2->n != vec->n ) {
+        psError(PS_ERR_UNKNOWN,true, "FFT didn't return vector with same size as input");
+        return 10;
+    }
+
+
+    // 3. verify that the only significant component cooresponds to the freqency of the input in step 1.
+    for ( psU32 n = 0; n < 100; n++ ) {
+        if ( n == 1 || n == 99 ) {
+            if ( fabsf( cabsf( vec2->data.C32[ n ] ) - 50.0f ) > 0.1f ) {
+                psError(PS_ERR_UNKNOWN,true, "FFT didn't work for vector (n=%d)", n );
+                return 2;
+            }
+        } else {
+            if ( fabsf( cabsf( vec2->data.C32[ n ] ) ) > 0.1f ) {
+                psError(PS_ERR_UNKNOWN,true, "FFT didn't work for vector (n=%d)", n );
+                return 3;
+            }
+        }
+    }
+
+    // 4. perform a reverse transform
+    vec3 = psVectorFFT( NULL, vec2, PS_FFT_REVERSE );
+    if ( vec3->type.type != PS_TYPE_C32 ) {
+        psError(PS_ERR_UNKNOWN,true, "FFT didn't produce complex values?" );
+        return 4;
+    }
+    if ( vec3->n != vec2->n ) {
+        psError(PS_ERR_UNKNOWN,true, "FFT didn't return vector with same size as input");
+        return 40;
+    }
+    for ( psU32 n = 0; n < 100; n++ ) {
+        psF32 val = sinf( ( psF32 ) n / 50.0f * M_PI );
+        psF32 vecVal = crealf( vec3->data.C32[ n ] ) / 100;
+        if ( fabsf( vecVal - val ) > 0.1f ) {
+            psError(PS_ERR_UNKNOWN,true, "Reverse FFT didn't give me the original vector back (n=%d) (%.2f vs %.2f)",
+                    n, vecVal, val );
+            return 5;
+        }
+    }
+
+    // Perform a reverse transform with real flag set
+    vec4 = psVectorFFT(NULL,vec2, (PS_FFT_REVERSE | PS_FFT_REAL_RESULT));
+    if(vec4->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"FFT with real result did not produce real values");
+        return 80;
+    }
+
+    // Perform vector FFT with invalid direction flags
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    if ( psVectorFFT(NULL,vec2,(psFFTFlags)0) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid direction");
+        return 70;
+    }
+
+    psFree( vec );
+    psFree( vec2 );
+    psFree( vec3 );
+    psFree( vec4 );
+
+    // Perform vector FFT with null input
+    if ( psVectorFFT(NULL,NULL,PS_FFT_FORWARD) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
+        return 64;
+    }
+
+    return 0;
+}
+
+psS32 testVectorRealImaginary( void )
+{
+    psVector * vec = NULL;
+    psVector* vec2 = NULL;
+    psVector* vec3 = NULL;
+    psVector* vec4 = NULL;
+    psVector* vec5 = NULL;
+    psVector* vec6 = NULL;
+    psVector* vec7 = NULL;
+    psVector* vec8 = NULL;
+    psVector* vec9 = NULL;
+    psVector* vec10 = NULL;
+    psVector* vec11 = NULL;
+
+    /*
+    1. create a C32 complex vector with distinctly different real and imaginary parts.
+    2. call psVectorReal and psVectorImaginary
+    3. compare results to the real/imaginary components of input
+    */
+
+    // 1. create a C32 complex vector with distinctly different real and imaginary parts.
+    vec = psVectorAlloc( 100, PS_TYPE_C32 );
+    vec8 = psVectorAlloc( 100, PS_TYPE_C64 );
+    vec10 = psVectorAlloc( 100, PS_TYPE_C64 );
+    vec->n = vec->nalloc;
+    vec8->n = vec8->nalloc;
+    vec10->n = vec10->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.C32[ n ] = n + I * ( n * 2 );
+        vec8->data.C64[n] = n + I * ( n * 2 );
+        vec10->data.C64[n] = n + I * ( n * 2 );
+    }
+    vec4 = psVectorAlloc( 100, PS_TYPE_F32);
+    vec4->n = vec4->nalloc;
+    vec6 = psVectorAlloc( 100, PS_TYPE_F32);
+    vec6->n = vec6->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec4->data.F32[n] = n;
+        vec6->data.F32[n] = n;
+    }
+
+    // 2. call psVectorReal and psVectorImaginary
+    vec2 = psVectorReal( vec2, vec );
+    if ( vec2 == NULL ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorReal returned a NULL?" );
+        return 1;
+    }
+    if ( vec2->type.type != PS_TYPE_F32 ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorReal returned a wrong type (%d)?",
+                vec2->type.type );
+        return 2;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning.");
+    vec5 = psVectorReal(vec5, vec4);
+    if (vec5 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned NULL");
+        return 10;
+    }
+    if ( vec5->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned the wrong type");
+        return 11;
+    }
+
+    vec9 = psVectorReal(vec9,vec8);
+    if(vec9 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned NULL");
+        return 20;
+    }
+    if(vec9->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorReal returned the wrong type");
+        return 21;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning.");
+    vec3 = psVectorImaginary( vec3, vec );
+    if ( vec3 == NULL ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorImaginary returned a NULL?" );
+        return 3;
+    }
+    if ( vec3->type.type != PS_TYPE_F32 ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorImaginary returned a wrong type (%d)?",
+                vec3->type.type );
+        return 4;
+    }
+
+    vec7 = psVectorImaginary(vec7, vec6);
+    if(vec7 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorImage returned NULL");
+        return 12;
+    }
+    if(vec7->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned the wrong type");
+        return 13;
+    }
+
+    vec11 = psVectorImaginary(vec11, vec10);
+    if(vec11 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned NULL");
+        return 14;
+    }
+    if(vec11->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned the wrong type");
+        return 15;
+    }
+
+    // 3. compare results to the real/imaginary components of input
+    for ( psU32 n = 0; n < 100; n++ ) {
+        psF32 r = n;
+        psF32 i = ( n * 2 );
+        psF64 rr = n;
+        psF64 ii = ( n * 2 );
+        if ( fabsf( vec2->data.F32[ n ] - r ) > FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true, "psVectorReal didn't return the real portion at n=%d",
+                    n );
+            return 5;
+        }
+        if ( fabsf( vec3->data.F32[ n ] - i ) > FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true, "psVectorImaginary didn't return the real portion at n=%d",
+                    n );
+            return 6;
+        }
+        if ( fabsf( vec5->data.F32[n] - r) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorReal didn't return the real portion at n=%d",n);
+            return 50;
+        }
+        if ( fabsf( vec7->data.F32[n] - 0) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorImaginary did not return the imaginary portion at n=%d",n);
+            return 51;
+        }
+        if ( fabsf(vec9->data.F64[n] - rr) > FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorReal did not return the real portion at n=%d",n);
+            return 52;
+        }
+        if ( fabsf(vec11->data.F64[n] - ii) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorImaginary did not return the imaginary portion at n=%d",n);
+            return 53;
+        }
+    }
+
+    psFree( vec );
+    psFree( vec2 );
+    psFree( vec3 );
+    psFree( vec4 );
+    psFree( vec5 );
+    psFree( vec6 );
+    psFree( vec7 );
+    psFree( vec8 );
+    psFree( vec9 );
+    psFree( vec10 );
+    psFree( vec11 );
+
+    // Perform vector Real with null input
+    if ( psVectorReal(NULL,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
+        return 63;
+    }
+    // Perform vector Imaginary with null input
+    if ( psVectorImaginary(NULL,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
+        return 73;
+    }
+
+    return 0;
+}
+
+psS32 testVectorComplex( void )
+{
+    psVector * vec = NULL;
+    psVector* vec2 = NULL;
+    psVector* vec3 = NULL;
+    psVector* vec4 = NULL;
+    psVector* vec5 = NULL;
+    psVector* vec6 = NULL;
+
+    /*
+    1. create two unique psF32 vectors of the same size
+    2. call psVectorComplex
+    3. verify that the result is a psC32
+    4. call psVectorReal and psVectorImaginary on step 2 results
+    5. compare step 4 results to input.
+
+    6. create a psF32 and a psF64 vector of the same size
+    7. call psVectorComplex
+    8. verify that an appropriate error occurred.
+
+    9. create two psf32 vectors of different sizes
+    10. call psVectorComplex
+    11. verify thet an appropriate error occurred.
+    */
+
+    // 1. create two unique psF32 vectors of the same size
+    vec = psVectorAlloc( 100, PS_TYPE_F32 );
+    vec2 = psVectorAlloc( 100, PS_TYPE_F32 );
+    vec4 = psVectorAlloc( 100, PS_TYPE_F64 );
+    vec5 = psVectorAlloc( 100, PS_TYPE_F64 );
+    vec->n = vec->nalloc;
+    vec2->n = vec2->nalloc;
+    vec4->n = vec4->nalloc;
+    vec5->n = vec5->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.F32[ n ] = n;
+        vec2->data.F32[ n ] = ( n * 2 );
+        vec4->data.F64[ n ] = n;
+        vec5->data.F64[ n ] = ( n * 2 );
+    }
+
+    // 2. call psVectorComplex
+    vec3 = psVectorComplex( vec3, vec, vec2 );
+
+    // 3. verify that the result is a psC32
+    if ( vec3->type.type != PS_TYPE_C32 ) {
+        psError(PS_ERR_UNKNOWN,true, "Vector Type from psVectorComplex is not complex? (%d)",
+                vec3->type.type );
+        return 1;
+    }
+
+    // 4. call psVectorReal and psVectorImaginary on step 2 results (not needed, just use crealf/cimagf)
+    // 5. compare step 4 results to input.
+    for ( psU32 n = 0; n < 100; n++ ) {
+        if ( fabsf( crealf( vec3->data.C32[ n ] ) - n ) > FLT_EPSILON ||
+                fabsf( cimagf( vec3->data.C32[ n ] ) - ( n * 2 ) ) > FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true, "psVectorComplex result is invalid (n=%d, %.2f+%.2fi)",
+                    n, crealf( vec3->data.C32[ n ] ), cimagf( vec3->data.C32[ n ] ) );
+            return 2;
+        };
+    }
+
+
+    // 6. create a psF32 and a psF64 vector of the same size
+    vec2 = psVectorRecycle( vec2, 100, PS_TYPE_F64 );
+
+    // 7. call psVectorComplex
+    psLogMsg(__func__, PS_LOG_INFO, "Following should be an error (type mismatch)." );
+    vec3 = psVectorComplex( vec3, vec, vec2 );
+    // 8. verify that an appropriate error occurred. (this partially has to be done via inspection)
+    if ( vec3 != NULL ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorComplex returned a vector though input types mismatched." );
+        return 3;
+    }
+
+    // 9. create two psf32 vectors of different sizes
+    vec2 = psVectorRecycle( vec2, 200, PS_TYPE_F32 );
+
+    // 10. call psVectorComplex
+    vec3 = psVectorComplex( vec3, vec, vec2 );
+
+    // 11. verify thet an appropriate error occurred. (actually, it isn't an error...)
+    if ( vec3->n != 100 ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorComplex returned a larger vector than the input supported (%d).", vec3->n );
+        return 4;
+    }
+
+    // Verify the function works with psF64 type
+    vec6 = psVectorComplex(vec6, vec4, vec5);
+    if( vec6->type.type != PS_TYPE_C64 ) {
+        psError(PS_ERR_UNKNOWN,true,"Vector return type is not complex");
+        return 40;
+    }
+
+    // Verify error message generated with input of invalid type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    vec4->type.type = PS_TYPE_S8;
+    vec5->type.type = PS_TYPE_S8;
+    vec6 = psVectorComplex(vec6, vec4, vec5);
+    if(vec6 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid type");
+        return 50;
+    }
+    vec4->type.type = PS_TYPE_F64;
+    vec5->type.type = PS_TYPE_F64;
+
+    psFree( vec );
+    psFree( vec2 );
+    psFree( vec3 );
+    psFree( vec4 );
+    psFree( vec5 );
+
+    // Perform vector complex with null input
+    if ( psVectorComplex(NULL,NULL,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
+        return 62;
+    }
+
+    return 0;
+}
+
+psS32 testVectorConjugate( void )
+{
+    psVector * vec = NULL;
+    psVector* vec2 = NULL;
+
+    /*
+    1. create a psC32 with unique real and imaginary values.
+    2. call psVectorConjugate
+    3. verify result is psC32
+    4. verify each value is conjugate of input (a+bi -> a-bi)
+    */
+
+    // 1. create a psC32 with unique real and imaginary values.
+    vec = psVectorAlloc( 100, PS_TYPE_C32 );
+    vec->n = vec->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.C32[ n ] = n + I * ( n * 2 );
+    }
+
+    // 2. call psVectorConjugate
+    vec2 = psVectorConjugate( vec2, vec );
+
+    // 3. verify result is psC32
+    if ( vec2->type.type != PS_TYPE_C32 ) {
+        psError(PS_ERR_UNKNOWN,true, "the psVectorConjugate didn't return a C32 vector" );
+        return 1;
+    }
+
+    // 4. verify each value is conjugate of input (a+bi -> a-bi)
+    for ( psU32 n = 0; n < 100; n++ ) {
+        if ( fabsf( crealf( vec->data.C32[ n ] ) - crealf( vec2->data.C32[ n ] ) ) > FLT_EPSILON ||
+                fabsf( cimagf( vec->data.C32[ n ] ) + cimagf( vec2->data.C32[ n ] ) ) > FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true, "psVectorConjugate result is invalid (n=%d, %.2f+%.2fi)",
+                    n, crealf( vec2->data.C32[ n ] ), cimagf( vec2->data.C32[ n ] ) );
+            return 2;
+        };
+    }
+
+    psFree( vec );
+
+    // Perform conjugate for non-complex number
+    vec = psVectorAlloc( 100, PS_TYPE_F32 );
+    vec->n = vec->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.F32[ n ] = n;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message.");
+    vec2 = psVectorConjugate(vec2,vec);
+    if(vec2->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorConjugate did not return a F32 vector");
+        return 10;
+    }
+    for ( psU32 n = 0; n < 100; n++ ) {
+        if( vec->data.F32[n] != vec2->data.F32[n] ) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorConjugate result is invalid (n=%d)",n);
+            return 11;
+        }
+    }
+    psFree(vec);
+
+    // Perform vector conjugate with C64 type
+    vec = psVectorAlloc( 100, PS_TYPE_C64 );
+    vec->n = vec->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.C64[n] = n + I * ( n * 2 );
+    }
+    vec2 = psVectorConjugate(vec2,vec);
+    if(vec2->type.type != PS_TYPE_C64) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorConjugate did not return a C64 vector");
+        return 12;
+    }
+    for ( psU32 n = 0; n < 100; n++ ) {
+        if ( fabsf( crealf(vec->data.C64[n]) - crealf(vec2->data.C64[n])) > FLT_EPSILON ||
+                fabsf( cimagf(vec->data.C64[n]) + cimagf(vec2->data.C64[n])) > FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorConjugate result is invalid (n=%d)",n);
+            return 13;
+        }
+    }
+    psFree(vec);
+
+    // Perform vector conjugate with null input (vec2 should be freed too)
+    if ( psVectorConjugate(vec2,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
+        return 61;
+    }
+
+    return 0;
+}
+
+psS32 testVectorPowerSpectrum( void )
+{
+    psVector * vec = NULL;
+    psVector* vec2 = NULL;
+    psVector* vec3 = NULL;
+    psVector* vec4 = NULL;
+
+    psF32 val;
+    psF64 val1;
+
+    /*
+    1. create a psC32 vector with unique real and imaginary components
+    2. call psVectorPowerSpectrum
+    3. verify result is psF32
+    4. verify the values are the square of the absolute values of the original
+    */
+
+    // 1. create a psC32 vector with unique real and imaginary components
+    vec = psVectorAlloc( 100, PS_TYPE_C32 );
+    vec->n = vec->nalloc;
+    vec3 = psVectorAlloc(100,PS_TYPE_C64);
+    vec3->n = vec3->nalloc;
+    for ( psU32 n = 0; n < 100; n++ ) {
+        vec->data.C32[ n ] = n + I * sinf( ( ( psF32 ) n ) / 50.f * M_PI );
+        vec3->data.C64[ n ] = n + I * sinf( ( ( psF64 ) n ) / 50.f * M_PI );
+    }
+
+    // 2. call psVectorPowerSpectrum
+    vec2 = psVectorPowerSpectrum( vec2, vec );
+    vec4 = psVectorPowerSpectrum( vec4, vec3 );
+
+    // 3. verify result is psF32
+    if ( vec2->type.type != PS_TYPE_F32 ) {
+        psError(PS_ERR_UNKNOWN,true, "the type was not PS_TYPE_F32." );
+        return 1;
+    }
+    if ( vec4->type.type != PS_TYPE_F64 ) {
+        psError(PS_ERR_UNKNOWN,true,"psPowerSpectrum did not return type PS_TYPE_F64 type = %d",vec4->type.type);
+        return 20;
+    }
+
+    // 3a. verify result is the same size a input
+    // Awaiting IfA direction on bug #228
+    //    if ( vec2->n != vec->n ) {
+    //       psError(PS_ERR_UNKNOWN,true, "Output vector size different(%d) than input vector(%d)",vec2->n, vec->n);
+    //       return 10;
+    //    }
+
+    // 4. verify the values are the square of the absolute values of the original
+    //   (ADD specifies something else)
+    //   P_0 = |C_0|^2/N^2
+    //   P_j = (|C_j|^2+|C_N-j|^2)/N^2
+    //   P_N/2 = |C_N/2|^2/N^2
+    //  where j = 1,2,...,(N/2-1)
+
+    val = cabsf( vec->data.C32[ 0 ] ) * cabsf( vec->data.C32[ 0 ] ) / 100 / 100;
+    val1= cabsf( vec3->data.C64[0] ) * cabsf(vec3->data.C64[0])/100/100;
+    if ( fabsf( vec2->data.F32[ 0 ] - val ) > FLT_EPSILON ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=0, %.2f %.2f)",
+                vec2->data.F32[ 0 ], val );
+        return 2;
+    }
+    if ( fabsf( vec4->data.C64[0] - val1 ) > FLT_EPSILON ) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum result is invalid (n=0)");
+        return 21;
+    }
+
+    for ( psU32 n = 1; n < 50; n++ ) {
+        val = ( cabsf( vec->data.C32[ n ] ) * cabsf( vec->data.C32[ n ] ) +
+                cabsf( vec->data.C32[ 100 - n ] ) * cabsf( vec->data.C32[ 100 - n ] ) ) / 100 / 100;
+        val1 = (cabsf(vec3->data.C64[n]) * cabsf(vec3->data.C64[n]) +
+                cabsf(vec3->data.C64[100-n]) * cabsf(vec3->data.C64[100-n]))/100/100;
+        if ( fabsf( val - vec2->data.F32[ n ] ) > 10*FLT_EPSILON ) {
+            psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=%d, %.2f %.2f)",
+                    n, vec2->data.F32[ n ], val );
+            return 2;
+        }
+        if (fabsf(val1 - vec4->data.F64[n]) > 10*FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum result is invalid (n=%d, %.2f %.2f)",n,vec4->data.F64[n],val1);
+            return 22;
+        }
+    }
+
+    val = cabsf( vec->data.C32[ 50 ] ) * cabsf( vec->data.C32[ 50 ] ) / 100 / 100;
+    if ( fabsf( vec2->data.F32[ 50 ] - val ) > 10*FLT_EPSILON ) {
+        psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=50, %.2f %.2f)",
+                vec2->data.F32[ 0 ], val );
+        return 2;
+    };
+
+    psFree( vec );
+    psFree( vec2 );
+    psFree( vec3 );
+    psFree( vec4 );
+
+    // Perform vector power spectrum with non-complex number
+    vec = psVectorAlloc(100,PS_TYPE_F32);
+    vec->n = vec->nalloc;
+    for( psU32 n=0; n<100; n++) {
+        vec->data.F32[n] = n;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    if(psVectorPowerSpectrum(NULL,vec) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum did not return a null vector.");
+        return 10;
+    }
+
+    // Perform vector power spectrum with null input
+    if ( psVectorPowerSpectrum(NULL,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector");
+        return 60;
+    }
+
+    psFree(vec);
+
+    return 0;
+}
Index: /trunk/psLib/test/fft/verified/tst_psImageFFT.stderr
===================================================================
--- /trunk/psLib/test/fft/verified/tst_psImageFFT.stderr	(revision 4547)
+++ /trunk/psLib/test/fft/verified/tst_psImageFFT.stderr	(revision 4547)
@@ -0,0 +1,73 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageFFT.c                                           *
+*            TestPoint: psFFT{psImageFFT}                                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageFFT
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageFFT (FILE:LINENO)
+    Can not specify both PS_FFT_FORWARD and PS_FFT_REVERSE options.
+<DATE><TIME>|<HOST>|I|testImageFFT
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageFFT (FILE:LINENO)
+    The PS_FFT_FORWARD and PS_FFT_REAL_RESULT combinition is not supported.
+<DATE><TIME>|<HOST>|I|testImageFFT
+    Following should generate error for invalid direction.
+<DATE><TIME>|<HOST>|E|psImageFFT (FILE:LINENO)
+    Must specify either PS_FFT_FORWARD or PS_FFT_REVERSE option.
+
+---> TESTPOINT PASSED (psFFT{psImageFFT} | tst_psImageFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageFFT.c                                           *
+*            TestPoint: psFFT{psImageRealImaginary}                                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psFFT{psImageRealImaginary} | tst_psImageFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageFFT.c                                           *
+*            TestPoint: psFFT{psImageComplex}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageComplex
+    Following should be an error (type mismatch).
+<DATE><TIME>|<HOST>|E|psImageComplex (FILE:LINENO)
+    Real psImage type (psF32) and imaginary psImage type (psF64) must be the same.
+<DATE><TIME>|<HOST>|I|testImageComplex
+    Following should be an error (size mismatch).
+<DATE><TIME>|<HOST>|E|psImageComplex (FILE:LINENO)
+    Real psImage size (128x64) and imaginary psImage size (64x64) must be the same.
+<DATE><TIME>|<HOST>|I|testImageComplex
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psImageComplex (FILE:LINENO)
+    Input psImage type, psS16, is required to be either psF32 or psF64.
+
+---> TESTPOINT PASSED (psFFT{psImageComplex} | tst_psImageFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageFFT.c                                           *
+*            TestPoint: psFFT{psImageConjugate}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psFFT{psImageConjugate} | tst_psImageFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageFFT.c                                           *
+*            TestPoint: psFFT{psImagePowerSpectrum}                                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImagePowerSpectrum
+    Following should generate error message.
+<DATE><TIME>|<HOST>|E|psImagePowerSpectrum (FILE:LINENO)
+    Input psImage type, psF32, is required to be either psC32 or psC64.
+
+---> TESTPOINT PASSED (psFFT{psImagePowerSpectrum} | tst_psImageFFT.c)
+
Index: /trunk/psLib/test/fft/verified/tst_psVectorFFT.stderr
===================================================================
--- /trunk/psLib/test/fft/verified/tst_psVectorFFT.stderr	(revision 4547)
+++ /trunk/psLib/test/fft/verified/tst_psVectorFFT.stderr	(revision 4547)
@@ -0,0 +1,73 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorFFT.c                                          *
+*            TestPoint: psFFT{psVectorFFT}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorFFT
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorFFT (FILE:LINENO)
+    Must specify the direction as either PS_FFT_FORWARD or PS_FFT_REVERSE.
+
+---> TESTPOINT PASSED (psFFT{psVectorFFT} | tst_psVectorFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorFFT.c                                          *
+*            TestPoint: psFFT{psVectorRealImaginary}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorRealImaginary
+    Following should generate a warning.
+<DATE><TIME>|<HOST>|W|psVectorReal
+    Real portion of a non-Complex type called called for. Just a vector copy was performed.
+<DATE><TIME>|<HOST>|I|testVectorRealImaginary
+    Following should generate a warning.
+<DATE><TIME>|<HOST>|W|psVectorImaginary
+    Imaginary portion of a non-Complex type called for. A zeroed vector was returned.
+
+---> TESTPOINT PASSED (psFFT{psVectorRealImaginary} | tst_psVectorFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorFFT.c                                          *
+*            TestPoint: psFFT{psVectorComplex}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorComplex
+    Following should be an error (type mismatch).
+<DATE><TIME>|<HOST>|E|psVectorComplex (FILE:LINENO)
+    Real psVector type, psF32, and imaginary psVector type, psF64, must be the same.
+<DATE><TIME>|<HOST>|I|testVectorComplex
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorComplex (FILE:LINENO)
+    Input psVector type, psS8, is required to be either psF32 or psF64.
+
+---> TESTPOINT PASSED (psFFT{psVectorComplex} | tst_psVectorFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorFFT.c                                          *
+*            TestPoint: psFFT{psVectorConjugate}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorConjugate
+    Following should generate a warning message.
+<DATE><TIME>|<HOST>|W|psVectorConjugate
+    Complex Conjugate of a non-Complex type called for. Vector copy was performed instead.
+
+---> TESTPOINT PASSED (psFFT{psVectorConjugate} | tst_psVectorFFT.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorFFT.c                                          *
+*            TestPoint: psFFT{psVectorPowerSpectrum}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorPowerSpectrum
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorPowerSpectrum (FILE:LINENO)
+    Input psVector type, psF32, is required to be either psC32 or psC64.
+
+---> TESTPOINT PASSED (psFFT{psVectorPowerSpectrum} | tst_psVectorFFT.c)
+
Index: /trunk/psLib/test/fits/Makefile.am
===================================================================
--- /trunk/psLib/test/fits/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/fits/Makefile.am	(revision 4547)
@@ -0,0 +1,22 @@
+#Makefile for fits tests of psLib
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psFits
+
+tst_psFits_SOURCES = tst_psFits.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA)
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
Index: /trunk/psLib/test/fits/tst_psFits.c
===================================================================
--- /trunk/psLib/test/fits/tst_psFits.c	(revision 4547)
+++ /trunk/psLib/test/fits/tst_psFits.c	(revision 4547)
@@ -0,0 +1,1523 @@
+/** @file  tst_psFits.c
+*
+*  @brief Contains the tests for psFits.[ch]
+*
+*
+*  @author Robert DeSonia, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+#define GENIMAGE(img,c,r,TYP, valueFcn) \
+img = psImageAlloc(c,r,PS_TYPE_##TYP); \
+for (psU32 row=0;row<r;row++) { \
+    ps##TYP* imgRow = img->data.TYP[row]; \
+    for (psU32 col=0;col<c;col++) { \
+        imgRow[col] = (ps##TYP)(valueFcn); \
+    } \
+}
+
+static bool makeMulti(void);  // implicitly tests psFitsSetExtName
+static bool makeTable(void);
+const char* multiFilename = "multi.fits";
+const char* tableFilename = "table.fits";
+const int tableNumRows = 10;
+
+
+// N.B., the tests to Image read/write was liberally taken from the now
+// deprecated psImageReadSection/psImageWriteSection function tests.
+static psS32 testImageRead(void);
+static psS32 testImageWrite(void);
+
+static psS32 tst_psFitsAlloc( void );
+static psS32 tst_psFitsMoveExtName( void ); // also tests psFitsGetExtName
+static psS32 tst_psFitsMoveExtNum( void );  // also tests psFitsGetExtNum, psFitsGetSize
+static psS32 tst_psFitsReadHeader( void );
+static psS32 tst_psFitsReadHeaderSet( void );
+static psS32 tst_psFitsReadTable( void );
+static psS32 tst_psFitsReadTableColumnNum(void);
+static psS32 tst_psFitsReadTableColumn(void);
+static psS32 tst_psFitsUpdateTable(void);
+static psS32 tst_psFitsWriteHeader(void);
+
+testDescription tests[] = {
+                              {tst_psFitsAlloc, 801, "psFitsAlloc", 0, false},
+                              {tst_psFitsMoveExtName, 802, "psFitsMoveExtName", 0, false},
+                              {tst_psFitsMoveExtName, 802, "psFitsGetExtName", 0, true},
+                              {tst_psFitsMoveExtNum, 803, "psFitsMoveExtNum", 0, false},
+                              {tst_psFitsMoveExtNum, 803, "psFitsGetExtNum", 0, true},
+                              {tst_psFitsMoveExtNum, 803, "psFitsGetSize", 0, true},
+                              {tst_psFitsReadHeader, 804, "psFitsReadHeader", 0, false},
+                              {tst_psFitsReadHeaderSet,805, "psFitsReadHeaderSet", 0, false},
+                              {tst_psFitsReadTable,809, "psFitsReadTable", 0, false},
+                              {tst_psFitsReadTableColumnNum,836, "psFitsReadTableColumnNum", 0, false},
+                              {tst_psFitsReadTableColumn,839, "psFitsReadTableColumn", 0, false},
+                              {tst_psFitsUpdateTable,840, "psFitsUpdateTable", 0, false},
+                              {testImageRead,567, "psFitsReadImage", 0, false},
+                              {testImageWrite,569, "psFitsWriteImage", 0, false},
+                              {tst_psFitsWriteHeader,000,"psFitsWriteHeader",0,false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psImage", tests, argc, argv ) );
+}
+
+bool makeMulti(void)
+{
+
+    remove
+        (multiFilename);
+
+    psFits* fitsFile = psFitsAlloc(multiFilename);
+
+    if (fitsFile == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Could not create 'multi' FITS file.");
+        return false;
+    }
+
+    psImage* image = psImageAlloc(16,16,PS_TYPE_F32);
+
+    char extname[80];
+    for (int lcv = 0; lcv < 8; lcv++) {
+        snprintf(extname,80,"ext-%d", lcv);
+
+        psMetadata* header = psMetadataAlloc();
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYINT",
+                      PS_META_S32,
+                      "psS32 Item", (psS32)lcv);
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYFLT",
+                      PS_META_F32,
+                      "psF32 Item", (float)(1.0f/(float)(1+lcv)));
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYDBL",
+                      PS_META_F64,
+                      "psF64 Item", (double)(1.0/(double)(1+lcv)));
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL",
+                      PS_META_BOOL,
+                      "psBool Item",
+                      (lcv%2 == 0));
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYSTR",
+                      PS_META_STR,
+                      "String Item",
+                      extname);
+
+        psMetadataAdd(header,PS_LIST_TAIL, "EXTNAME",
+                      PS_META_STR,
+                      "Extension Name",
+                      extname);
+
+        // set the pixels in the image
+        psBinaryOp(image,image,"=",psScalarAlloc(lcv,PS_TYPE_F32));
+        if (! psFitsWriteImage(fitsFile,header,image,1) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Could not write image.");
+            return false;
+        }
+
+        psFree(header);
+    }
+    psFree(image);
+    psFree(fitsFile);
+
+    return true;
+}
+
+bool makeTable(void)
+{
+
+    remove
+        (tableFilename);
+
+    psFits* fitsFile = psFitsAlloc(tableFilename);
+
+    if (fitsFile == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Could not create 'table' FITS file.");
+        return false;
+    }
+
+    // make the PHU an image (per FITS standard, it must be)
+    psImage* image = psImageAlloc(16,16,PS_TYPE_F32);
+
+    if (! psFitsWriteImage(fitsFile,NULL,image,1) ) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Could not write PHU image.");
+        return false;
+    }
+
+    psFree(image);
+
+    // build a table structure
+    psArray* table = psArrayAlloc(tableNumRows);
+    psMetadata* header = NULL;
+    for (int row = 0; row < tableNumRows; row++) {
+        header = psMetadataAlloc();
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYINT",
+                      PS_META_S32,
+                      "psS32 Item",
+                      (psS32)row);
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYFLT",
+                      PS_META_F32,
+                      "psF32 Item",
+                      (float)(1.0f/(float)(1+row)));
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYDBL",
+                      PS_META_F64,
+                      "psF64 Item",
+                      (double)(1.0/(double)(1+row)));
+
+        psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL",
+                      PS_META_BOOL,
+                      "psBool Item",
+                      (row%2 == 0));
+
+        table->data[row] = header;
+    }
+
+    psFitsWriteTable(fitsFile, NULL, table);
+
+    psFree(table);
+    psFree(fitsFile);
+
+    return ! psMemCheckLeaks(15,NULL,stderr,false);
+}
+
+psS32 tst_psFitsAlloc( void )
+{
+
+    if (! makeMulti() ) {
+        return 1;
+    }
+
+    psFits* fitsFile = psFitsAlloc(multiFilename);
+
+    if (fitsFile == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    int extNum = psFitsGetExtNum(fitsFile);
+    if (extNum != 0) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc was not queued to the PHU, but to extension #%d.",
+                extNum);
+        return 2;
+    }
+
+    psFree(fitsFile);
+
+    // make sure the file doesn't already exist.
+    if (access("new.fits", F_OK) == 0) {
+        if (remove
+                ("new.fits") != 0) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Couldn't delete the new.fits file.");
+            return 3;
+        }
+    }
+
+    fitsFile = psFitsAlloc("new.fits");
+
+    if (fitsFile == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 4;
+    }
+
+    psFree(fitsFile);
+
+    // now, if psFitsAlloc actually created the file, I shouldn't error in removing it.
+    if (remove
+            ("new.fits") != 0) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc seemed to not have created a new file.");
+        return 5;
+    }
+
+    // Attempt to allocate with NULL filename
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    fitsFile = psFitsAlloc(NULL);
+    if(fitsFile != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psFitsAlloc did not return NULL for NULL input");
+        return 5;
+    }
+
+    return 0;
+}
+
+psS32 tst_psFitsMoveExtName( void )
+{
+
+    if (! makeMulti() ) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(multiFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    int numHDUs = psFitsGetSize(fits);
+
+    if (numHDUs < 2) {
+        psError(PS_ERR_UNKNOWN,true,
+                "The 'multi' FITS file does not have multiple HDUs.");
+        return 2;
+    }
+
+    char extName[80];
+    psRegion region = {0,0,0,0};
+
+    for (int lcv = 0; lcv < numHDUs; lcv++) {
+        snprintf(extName,80,"ext-%d",lcv);
+        // try to move to the named extension.
+        if (! psFitsMoveExtName(fits, extName) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to move to ext-%d.",
+                    lcv);
+            return 3;
+        }
+
+        // check to see if I can retrieve the name back from the psFits object.
+        char* nameFromFile = psFitsGetExtName(fits);
+        if (strcmp(nameFromFile,extName) != 0) { // hey, it didn't move?
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to retrieve the extension name back ('%s' vs '%s'",
+                    nameFromFile, extName);
+            return 3;
+        }
+        psFree(nameFromFile);
+
+        // check that the image is associated to the extension moved, i.e.,
+        // did we really move to the proper extension?
+        psImage* image = psFitsReadImage(NULL, fits,region,0);
+
+        if (image == NULL || abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
+                    lcv,image->data.F32[0][0],lcv);
+            return 4;
+        }
+        psFree(image);
+    }
+
+    for (int lcv = numHDUs-1; lcv >= 0; lcv--) {
+        snprintf(extName,80,"ext-%d",lcv);
+        // try to move to the named extension.
+        if (! psFitsMoveExtName(fits, extName) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to move to ext-%d.",
+                    lcv);
+            return 5;
+        }
+
+        // check to see if I can retrieve the name back from the psFits object.
+        char* nameFromFile = psFitsGetExtName(fits);
+        if (strcmp(nameFromFile,extName) != 0) { // hey, it didn't move?
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to retrieve the extension name back ('%s' vs '%s'",
+                    nameFromFile, extName);
+            return 5;
+        }
+        psFree(nameFromFile);
+
+        // check that the image is associated to the extension moved, i.e.,
+        // did we really move to the proper extension?
+        psImage* image = psFitsReadImage(NULL, fits,region,0);
+
+        if (abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
+                    lcv,image->data.F32[0][0],lcv);
+            return 6;
+        }
+        psFree(image);
+    }
+
+    // check to see if given a bogus extension name, it errors.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    if (psFitsMoveExtName(fits, "bogus") || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Moving to non-existant HDU didn't fail.");
+        return 7;
+    }
+
+    // check to see if given a NULL psFits, it errors.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    if (psFitsMoveExtName(NULL, "bogus") || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Operation of NULL psFits didn't fail.");
+        return 8;
+    }
+
+    // check to see if given a NULL extname, it errors.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    if (psFitsMoveExtName(fits, NULL) || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Operation of NULL extname didn't fail.");
+        return 9;
+    }
+
+    psFree(fits);
+
+    // Attempt to get ext name from null fits file
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL fits file");
+    if(psFitsGetExtName(NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected NULL return from psFitsGetExtName with NULL fits file");
+        return 10;
+    }
+
+    return 0;
+}
+
+psS32 tst_psFitsMoveExtNum( void )
+{
+
+    if (! makeMulti() ) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(multiFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    int numHDUs = psFitsGetSize(fits);
+
+    // as a side test, let's make sure psFitsGetSize can handle NULL.
+    psLogMsg(__func__,PS_LOG_INFO,
+             "Following should be an error.");
+    psErrorClear();
+    if (psFitsGetSize(NULL) != 0 || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN,true,
+                "The 'multi' FITS file does not have multiple HDUs.");
+        return 2;
+    }
+
+    if (numHDUs != 8) {
+        psError(PS_ERR_UNKNOWN,true,
+                "The 'multi' FITS file does not have multiple HDUs.");
+        return 2;
+    }
+
+    psRegion region = {0,0,0,0};
+
+    // test absolute positioning
+    for (int lcv = 0; lcv < numHDUs; lcv++) {
+        // try to move to the extension
+        if (! psFitsMoveExtNum(fits, lcv, false) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to move to extension %d.",
+                    lcv);
+            return 3;
+        }
+
+        // check to see if I can retrieve the number back from the psFits object.
+        if (psFitsGetExtNum(fits) != lcv) { // hey, it didn't move?
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to retrieve the extension number back (%d vs %d)",
+                    psFitsGetExtNum(fits), lcv);
+            return 5;
+        }
+
+        // check that the image is associated to the extension moved, i.e.,
+        // did we really move to the proper extension?
+        psImage* image = psFitsReadImage(NULL, fits,region,0);
+
+        if (image == NULL || abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
+                    lcv,image->data.F32[0][0],lcv);
+            return 4;
+        }
+        psFree(image);
+    }
+
+    for (int lcv = numHDUs-1; lcv >= 0; lcv--) {
+        // try to move to the extension
+        if (! psFitsMoveExtNum(fits, lcv, false) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to move to extension %d.",
+                    lcv);
+            return 5;
+        }
+
+        // check that the image is associated to the extension moved, i.e.,
+        // did we really move to the proper extension?
+        psImage* image = psFitsReadImage(NULL, fits,region,0);
+
+        if (abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
+                    lcv,image->data.F32[0][0],lcv);
+            return 6;
+        }
+        psFree(image);
+    }
+
+    // test relative positioning
+    psFitsMoveExtNum(fits,0,false);
+    for (int lcv = 1; lcv < numHDUs; lcv++) {
+        // try to move to the extension
+        if (! psFitsMoveExtNum(fits, 1, true) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to move to extension %d.",
+                    lcv);
+            return 13;
+        }
+
+        // check to see if I can retrieve the number back from the psFits object.
+        if (psFitsGetExtNum(fits) != lcv) { // hey, it didn't move?
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to retrieve the extension number back (%d vs %d)",
+                    psFitsGetExtNum(fits), lcv);
+            return 13;
+        }
+
+        // check that the image is associated to the extension moved, i.e.,
+        // did we really move to the proper extension?
+        psImage* image = psFitsReadImage(NULL, fits,region,0);
+
+        if (image == NULL || abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
+                    lcv,image->data.F32[0][0],lcv);
+            return 14;
+        }
+        psFree(image);
+    }
+
+    for (int lcv = numHDUs-2; lcv >= 0; lcv--) {
+        // try to move to the extension
+        if (! psFitsMoveExtNum(fits, -1, true) ) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to move to extension %d.",
+                    lcv);
+            return 15;
+        }
+
+        // check to see if I can retrieve the number back from the psFits object.
+        if (psFitsGetExtNum(fits) != lcv) { // hey, it didn't move?
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to retrieve the extension number back (%d vs %d)",
+                    psFitsGetExtNum(fits), lcv);
+            return 15;
+        }
+
+        // check that the image is associated to the extension moved, i.e.,
+        // did we really move to the proper extension?
+        psImage* image = psFitsReadImage(NULL, fits,region,0);
+
+        if (abs(image->data.F32[0][0] - (float)lcv) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The image pixel 0,0 of ext-%d was %g, expected %d.",
+                    lcv,image->data.F32[0][0],lcv);
+            return 16;
+        }
+        psFree(image);
+    }
+
+    // check to see if given a negative extension number, it errors.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    psErrorClear();
+    if (psFitsMoveExtNum(fits, -1, false) || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Moving to negative HDU didn't fail.");
+        return 21;
+    }
+
+    // check to see if relative positioning beyond PHU, it errors.
+    psFitsMoveExtNum(fits,0,false);
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    psErrorClear();
+    if (psFitsMoveExtNum(fits, -1, true) || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Moving to negative HDU didn't fail.");
+        return 22;
+    }
+
+
+    // check to see if given a extension greater than the total #HDUs, it errors.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    psErrorClear();
+    if (psFitsMoveExtNum(fits, numHDUs, false) || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Moving to a HDU beyond the file's contents didn't fail.");
+        return 31;
+    }
+
+    // check to see if relative positioning beyond PHU, it errors.
+    psFitsMoveExtNum(fits,numHDUs-1,false);
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    psErrorClear();
+    if (psFitsMoveExtNum(fits, 1, true) || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Moving to negative HDU didn't fail.");
+        return 32;
+    }
+
+    // check to see if given a NULL psFits, it errors.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    psErrorClear();
+    if (psFitsMoveExtNum(NULL, 0, false) || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Operation of NULL psFits didn't fail.");
+        return 40;
+    }
+
+    psFree(fits);
+
+    // Attempt to get ext name from null fits file
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL fits file");
+    if(psFitsGetExtNum(NULL) != PS_FITS_TYPE_NONE) {
+        psError(PS_ERR_UNKNOWN,true,"Expected NULL return from psFitsGetExtNum with NULL fits file");
+        return 10;
+    }
+
+    return 0;
+}
+
+static psS32 tst_psFitsReadHeader( void )
+{
+    if (! makeMulti() ) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(multiFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    int numHDUs = psFitsGetSize(fits);
+
+    if (numHDUs < 8) {
+        psError(PS_ERR_UNKNOWN,true,
+                "The 'multi' FITS file does not have multiple HDUs.");
+        return 2;
+    }
+
+    char extname[80];
+    for (int hdunum = 0; hdunum < numHDUs; hdunum++) {
+        snprintf(extname,80,"ext-%d",hdunum);
+
+        psFitsMoveExtNum(fits,hdunum,false);
+
+        psMetadata* header = psFitsReadHeader(NULL,fits);
+        if (header == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to read header");
+            return 3;
+        }
+
+        psMetadata* header2 = psMetadataAlloc();
+        header2 = psFitsReadHeader(header2,fits);
+        if (header2 == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to read header");
+            return 11;
+        }
+
+        if (header->list->n < 1 || header->list->n != header2->list->n) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Reading the header given a NULL input psMetadata differed "
+                    "from giving an existing psMetadata.");
+            return 12;
+        }
+
+        // check for the extra metadata items
+        psS32 intItem = psMetadataLookupS32(NULL,header, "MYINT");
+        psF32 fltItem = psMetadataLookupF32(NULL,header, "MYFLT");
+        psF64 dblItem = psMetadataLookupF64(NULL,header, "MYDBL");
+        psMetadataItem* boolItem = psMetadataLookup(header, "MYBOOL");
+        char* strItem = psMetadataLookupPtr(NULL, header, "MYSTR");
+
+        if (intItem != hdunum) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psS32 metadata item from file.");
+            return 20;
+        }
+
+        if (fabsf(fltItem - 1.0f/(float)(1+hdunum)) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psF32 metadata item from file.  Got %f vs %f",
+                    fltItem,1.0f/(float)(1+hdunum));
+            return 21;
+        }
+
+        if (abs(dblItem - 1.0/(double)(1+hdunum)) > DBL_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psF64 metadata item from file.  Got %g vs %g",
+                    dblItem, 1.0/(double)(1+hdunum));
+            return 22;
+        }
+
+        if (boolItem == NULL ||
+                boolItem->type != PS_META_BOOL) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psBool metadata item from file.");
+            return 23;
+        }
+
+        if (strItem == NULL || strncmp(strItem,extname,strlen(extname)) != 0) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve string metadata item from file.  Got '%s' vs '%s' (%d)",
+                    strItem,extname,strlen(extname));
+            return 24;
+        }
+
+        psFree(header);
+        psFree(header2);
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"following should be an error (input psFits = NULL)");
+    psMetadata* header = psFitsReadHeader(NULL,NULL);
+
+    if (header != NULL || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psFitsReadHeader didn't error on a NULL psFits.");
+        return 30;
+    }
+
+
+    psFree(fits);
+
+    return 0;
+}
+
+static psS32 tst_psFitsReadHeaderSet( void )
+{
+    if (! makeMulti() ) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(multiFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    int numHDUs = psFitsGetSize(fits);
+
+    if (numHDUs < 8) {
+        psError(PS_ERR_UNKNOWN,true,
+                "The 'multi' FITS file does not have multiple HDUs.");
+        return 2;
+    }
+
+    // move to the middle
+    psFitsMoveExtNum(fits,numHDUs/2, false);
+
+    psMetadata* headerSet = psFitsReadHeaderSet(NULL, fits);
+
+    if (headerSet == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadHeaderSet returned NULL unexpectedly.");
+        return 3;
+    }
+
+    if (psFitsGetExtNum(fits) != numHDUs/2) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadHeaderSet changed the CHU.");
+        return 4;
+    }
+
+    char extname[80];
+    for (int i = 0; i < numHDUs; i++) {
+        if (i == 0) {
+            snprintf(extname, 80, "PHU");
+        } else {
+            snprintf(extname, 80, "ext-%d", i);
+        }
+
+        psMetadata* header = psMetadataLookupPtr(NULL,headerSet, extname);
+
+        if (header == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadHeader returned NULL unexpectedly for HDU#%d.",
+                    i);
+            return 5;
+        }
+
+        psS32 intItem = psMetadataLookupS32(NULL, header, "MYINT");
+
+        if (intItem != i) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadHeader for HDU#%d had a MYINT of %d, expected %d.",
+                    intItem, i);
+            return 6;
+        }
+
+    }
+
+    psMetadata* set2 = psMetadataAlloc();
+    set2 = psFitsReadHeaderSet(set2,NULL);
+    if (set2 != NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadHeaderSet returned non-NULL given a NULL psFits.");
+        return 10;
+    }
+
+    psMetadata* set3 = psMetadataAlloc();
+    set3 = psFitsReadHeaderSet(set3,fits);
+
+    if (set3 == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadHeaderSet returned NULL unexpectedly.");
+        return 11;
+    }
+
+    for (int i = 0; i < numHDUs; i++) {
+        if (i == 0) {
+            snprintf(extname, 80, "PHU");
+        } else {
+            snprintf(extname, 80, "ext-%d", i);
+        }
+
+        psMetadata* header = psMetadataLookupPtr(NULL, set3, extname);
+
+        if (header == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadHeader returned NULL unexpectedly for HDU#%d.",
+                    i);
+            return 5;
+        }
+
+        psS32 intItem = psMetadataLookupS32(NULL, header, "MYINT");
+
+        if (intItem != i) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadHeader for HDU#%d had a MYINT of %d, expected %d.",
+                    intItem, i);
+            return 6;
+        }
+
+    }
+
+
+
+    psFree(headerSet);
+    psFree(set3);
+    // set2 should have been freed by psFitsReadHeaderSet upon an error.
+
+    psFree(fits);
+
+    return 0;
+}
+
+static psS32 tst_psFitsReadTable( void )
+{
+
+
+    if (! makeTable()) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(tableFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    psFitsMoveExtNum(fits,1,false);
+
+    psArray* table = psFitsReadTable(fits);
+
+    if (table == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTable returned NULL unexpectedly.");
+        return 2;
+    }
+
+    if (table->n != tableNumRows) {
+        psError(PS_ERR_UNKNOWN, false,
+                "Expected %d rows, but read %d.",
+                tableNumRows, table->n);
+        return 3;
+    }
+
+
+    for (int row = 0; row < table->n; row++) {
+        psMetadata* rowData = table->data[row];
+
+        psS32 intItem = psMetadataLookupS32(NULL, rowData, "MYINT");
+        psF32 fltItem = psMetadataLookupF32(NULL, rowData, "MYFLT");
+        psF64 dblItem = psMetadataLookupF64(NULL, rowData, "MYDBL");
+        psBool boolItem = psMetadataLookupBool(NULL, rowData, "MYBOOL");
+
+        if (intItem != row) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psS32 metadata item from file (row=%d).  Got %d vs %d",
+                    row, intItem, row);
+            return 20;
+        }
+
+        if (fabsf(fltItem - 1.0f/(float)(1+row)) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psF32 metadata item from file (row=%d).  Got %f vs %f",
+                    row, fltItem,1.0f/(float)(1+row));
+            return 21;
+        }
+
+        if (abs(dblItem - 1.0/(double)(1+row)) > DBL_EPSILON) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psF64 metadata item from file (row=%d).  Got %g vs %g",
+                    row, dblItem, 1.0/(double)(1+row));
+            return 22;
+        }
+
+        if ( boolItem != ((row&0x01) == 0)) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "Failed to retrieve psBool metadata item from file (row=%d). Got %d vs %d",
+                    row, boolItem, ((row&0x01) == 0));
+            return 23;
+        }
+    }
+
+    psFree(table);
+    psFree(fits);
+
+    psArray* nullTest = psFitsReadTable(NULL);
+
+    if (nullTest != NULL || psErrorGetStackSize() != 1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psFitsReadTable returned non-NULL when given NULL.");
+        return 30;
+    }
+
+    return 0;
+}
+
+static psS32 tst_psFitsReadTableColumnNum( void )
+{
+    if (! makeTable()) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(tableFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    psFitsMoveExtNum(fits,1,false);
+
+    // read the column data via number
+    psVector* colData;
+    psElemType type[4] = {PS_TYPE_S32, PS_TYPE_F32, PS_TYPE_F32, PS_TYPE_BOOL};
+    psElemType altType[4] = {PS_TYPE_S64, PS_TYPE_F64, PS_TYPE_F64, PS_TYPE_BOOL};
+    char* colname[4] = {"MYINT","MYFLT","MYDBL","MYBOOL"};
+    psF64 expectedValues[4][10] = {
+                                      {0,1,2,3,4,5,6,7,8,9},
+                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
+                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
+                                      {1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0}
+                                  };
+
+    for (int col = 0; col < 4; col++) {
+        colData = psFitsReadTableColumnNum(fits,colname[col]);
+        if (colData == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadTableColumnNum returned NULL for col=%d",
+                    col);
+            return 2;
+        }
+        if (colData->type.type != type[col] &&
+                colData->type.type != altType[col]) {
+            char* typeRead;
+            char* typeExpected;
+            PS_TYPE_NAME(typeRead, colData->type.type);
+            PS_TYPE_NAME(typeExpected, type[col]);
+
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadTableColumnNum returned different type, %s vs %s, for col=%d",
+                    typeRead, typeExpected, col);
+            return 3;
+        }
+        if (colData->n != tableNumRows) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadTableColumnNum returned different number of rows, %d vs %d, for col=%d",
+                    colData->n, tableNumRows, col);
+            return 4;
+        }
+        for (int row = 0; row < tableNumRows; row++) {
+            if (abs(p_psVectorGetElementF64(colData,row) - expectedValues[col][row]) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, false,
+                        "psFitsReadTableColumnNum returned unexpected values (%g vs %g) for col=%d",
+                        p_psVectorGetElementF64(colData,row), expectedValues[col][row], col);
+                return 5;
+            }
+        }
+        psFree(colData);
+    }
+
+    psWarning("Following should be an error.");
+    psErrorClear();
+    psVector* data = psFitsReadTableColumnNum(NULL,colname[0]);
+    psErr* err = psErrorLast();
+    if (data != NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumnNum did not return NULL with NULL psFits");
+        return 6;
+    }
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumnNum did not error with NULL psFits");
+        return 7;
+    }
+    psFree(err);
+
+    psWarning("Following should be an error.");
+    psErrorClear();
+    data = psFitsReadTableColumnNum(fits,"BOGUS");
+    err = psErrorLast();
+    if (data != NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumnNum did not return NULL with bogus column name.");
+        return 8;
+    }
+    if (err->code != PS_ERR_IO) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumnNum did not error with bogus column name.");
+        return 9;
+    }
+    psFree(err);
+
+    psFree(fits);
+
+    return 0;
+}
+
+static psS32 tst_psFitsReadTableColumn( void )
+{
+    if (! makeTable()) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(tableFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 1;
+    }
+
+    psFitsMoveExtNum(fits,1,false);
+
+    // read the column data via number
+    psArray* colData;
+    char* colname[4] = {"MYINT","MYFLT","MYDBL","MYBOOL"};
+    psF64 expectedValues[4][10] = {
+                                      {0,1,2,3,4,5,6,7,8,9},
+                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
+                                      {1.0,1.0/2.0,1.0/3.0,1.0/4.0,1.0/5.0,1.0/6.0,1.0/7.0,1.0/8.0,1.0/9.0},
+                                      {1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0}
+                                  };
+
+    for (int col = 0; col < 4; col++) {
+        colData = psFitsReadTableColumn(fits,colname[col]);
+        if (colData == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadTableColumn returned NULL for col=%d",
+                    col);
+            return 2;
+        }
+        if (colData->n != tableNumRows) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsReadTableColumn returned different number of rows, %d vs %d, for col=%d",
+                    colData->n, tableNumRows, col);
+            return 4;
+        }
+        if (col < 3) {
+            for (int row = 0; row < tableNumRows; row++) {
+                if (abs(atof((char*)colData->data[row]) - expectedValues[col][row]) > 0.0001) {
+                    psError(PS_ERR_UNKNOWN, false,
+                            "psFitsReadTableColumn returned unexpected values (%g vs %g) for col=%d",
+                            atof((char*)colData->data[row]), expectedValues[col][row], col);
+                    return 5;
+                }
+            }
+        }
+        psFree(colData);
+    }
+
+    psWarning("Following should be an error.");
+    psErrorClear();
+    psArray* data = psFitsReadTableColumn(NULL,"MYINT");
+    psErr* err = psErrorLast();
+    if (data != NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumn did not return NULL with NULL psFits");
+        return 6;
+    }
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumn did not error with NULL psFits");
+        return 7;
+    }
+    psFree(err);
+
+    psWarning(__func__,"Following should be an error.");
+    psErrorClear();
+    data = psFitsReadTableColumn(fits,"BOGUS");
+    err = psErrorLast();
+    if (data != NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumn did not return NULL with col=\"BOGUS\"");
+        return 8;
+    }
+    if (err->code != PS_ERR_IO) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsReadTableColumn did not error with col=\"BOGUS\"");
+        return 9;
+    }
+    psFree(err);
+
+    psFree(fits);
+
+    return 0;
+}
+
+static psS32 tst_psFitsUpdateTable( void )
+{
+    psErr* err;
+
+    if (! makeTable()) {
+        return 1;
+    }
+
+    psFits* fits = psFitsAlloc(tableFilename);
+
+    if (fits == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsAlloc returned NULL on existing file.");
+        return 2;
+    }
+
+    psFitsMoveExtNum(fits,1,false);
+
+    // change the data in the file, going past by one (implicit new row of data)
+    for (int row = 0; row < tableNumRows+1; row++) {
+        psMetadata* md = psMetadataAlloc();
+        psMetadataAddF32(md,PS_LIST_TAIL,"MYFLT","",(float)row/-10.0);
+        psMetadataAddF64(md,PS_LIST_TAIL,"MYDBL","",(double)row/-100.0);
+        psMetadataAddS32(md,PS_LIST_TAIL,"MYINT","",-row);
+
+        if (! psFitsUpdateTable(fits,md,row)) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsUpdateTable returned false, but expected true for row=%d.",
+                    row);
+            return 3;
+        }
+        psFree(md);
+    }
+
+    for (int row = 0; row < tableNumRows+1; row++) {
+        psMetadata* md = psFitsReadTableRow(fits, row);
+        if (abs(psMetadataLookupF32(NULL,md,"MYFLT") - (float)row/-10.0) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsUpdateTable did not change the float value for row=%d.",
+                    row);
+            return 4;
+        }
+        if (abs(psMetadataLookupF64(NULL,md,"MYDBL") - (float)row/-100.0) > FLT_EPSILON) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsUpdateTable did not change the double value for row=%d.",
+                    row);
+            return 5;
+        }
+        if (psMetadataLookupS32(NULL,md,"MYINT") != -row) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "psFitsUpdateTable did not change the integer value for row=%d.",
+                    row);
+            return 6;
+        }
+        psFree(md);
+    }
+
+    psMetadata* md = psMetadataAlloc();
+    psMetadataAddF32(md,PS_LIST_TAIL,"BOGUS","",-1.0f);
+    psWarning("Following should be a warning.");
+    psErrorClear();
+    if (! psFitsUpdateTable(fits,md,0)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not return false with bogus column data");
+        return 10;
+    }
+    psFree(md);
+
+    md = psMetadataAlloc();
+    psMetadataAddF32(md,PS_LIST_TAIL,"MYFLT","",-1.0f);
+    psMetadataAddF64(md,PS_LIST_TAIL,"MYDBL","",-2.0);
+    psMetadataAddS32(md,PS_LIST_TAIL,"MYINT","",-3);
+
+    psWarning("Following should be an error.");
+    psErrorClear();
+    if (psFitsUpdateTable(NULL,md,0)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not return false with NULL psFits");
+        return 20;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not error with NULL psFits");
+        return 21;
+    }
+    psFree(err);
+
+    psWarning("Following should be an error.");
+    psErrorClear();
+    if (psFitsUpdateTable(fits,NULL,0)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not return false with NULL psMetadata");
+        return 22;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not error with NULL psMetadata");
+        return 23;
+    }
+    psFree(err);
+
+    psWarning("Following should be an error.");
+    psErrorClear();
+    if (psFitsUpdateTable(fits,md,-1)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not return false with row=-1");
+        return 24;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_IO) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psFitsUpdateTable did not error with row=-1");
+        return 25;
+    }
+
+    psFree(err);
+    psFree(md);
+    psFree(fits);
+
+    return 0;
+}
+
+psS32 testImageRead(void)
+{
+    psS32 N = 256;
+    psS32 M = 128;
+
+    /*
+        This function shall open the specified FITS file, read the specified data
+        and place the data into a psImage structure. This function shall generate
+        an error message and return NULL if any of the input parameters are out of
+        range, image file doesn't exist or image is zero or one dimensional.
+
+        Verify the returned psImage structure contains expected values, if the input
+        parameter filename specifies an available FITS file with known 2dimensional
+        data, input parameters col, row, ncol, nrow, z specify data range with the
+        FITS file. Cases should include 1x1, Nx1, 1xN, NxN and MxN sub images and
+        total FITS file image. (done in macro)
+
+        Verify the returned psImage structure is equal to the input parameter
+        'output', if specified. (done in macro)
+
+        */
+
+    /* generate FITS file to read */
+
+    #define testReadTypeSize(m, n, readM0, readN0, readM, readN, TYP, filename) \
+    { \
+        psImage* img = NULL; \
+        psImage* img2 = NULL; \
+        psImage* img3 = NULL; \
+        psImage* img4 = NULL; \
+        /*        psImagimge* img_ref = NULL; */ \
+        \
+        GENIMAGE(img,m,n,TYP,row+2*col); \
+        img2 = psImageCopy(img2,img,PS_TYPE_##TYP); \
+        GENIMAGE(img3,m,n,TYP,row+2*col); \
+        psImageClip(img3,32.0,32.0,120.0,120.0); \
+        img4 = psImageCopy(img4,img3,PS_TYPE_##TYP); \
+        remove(filename); \
+        psFits* fits = psFitsAlloc(filename); \
+        psRegion region = {0,0,0,0}; \
+        if (! psFitsWriteImage(fits, NULL, img, 2)) { \
+            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
+            return 1; \
+        } \
+        if (! psFitsUpdateImage(fits,img3, region, 1)) { \
+            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
+            return 2; \
+        } \
+        if (! psFitsWriteImage(fits,NULL, img3, 2)) { \
+            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
+            return 3; \
+        } \
+        if (! psFitsUpdateImage(fits,img,region, 1)) { \
+            psError(PS_ERR_UNKNOWN, true,"Failed to write test image %s",filename); \
+            return 4; \
+        } \
+        psFree(img); \
+        psFree(fits); \
+        img = NULL; \
+        psFree(img3); \
+        img3 = NULL; \
+        fits = psFitsAlloc(filename); \
+        psRegion reg = {readM0, readM, readN0, readN}; \
+        img = psFitsReadImage(img, fits, reg, 0); \
+        img3 = psFitsReadImage(img3, fits, reg, 1); \
+        if (img3 == NULL) { \
+            psError(PS_ERR_UNKNOWN, true,"Failed to read test image %s",filename); \
+            return 6; \
+        } \
+        for (psU32 row = readN0; row < readN; row++) { \
+            ps##TYP* imgRow = img->data.TYP[row-readN0]; \
+            ps##TYP* img2Row = img2->data.TYP[row]; \
+            ps##TYP* img3Row = img3->data.TYP[row-readN0]; \
+            ps##TYP* img4Row = img4->data.TYP[row]; \
+            for (psU32 col = readM0; col < readM; col++) { \
+                if (fabsf(imgRow[col-readM0]-img2Row[col]) > FLT_EPSILON) { \
+                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,0 (%.2f vs %.2f) for %s", \
+                            col,row,(psF32)imgRow[col-readM0],(psF32)img2Row[col],filename); \
+                    return 7; \
+                } \
+                if (fabsf(img3Row[col-readM0]-img4Row[col]) > FLT_EPSILON) { \
+                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,1 (%.2f vs %.2f) for %s", \
+                            col,row,(psF32)img3Row[col-readM0],(psF32)img4Row[col],filename); \
+                    return 8; \
+                } \
+            } \
+        } \
+        psFree(img); \
+        img = NULL; \
+        psFree(img3); \
+        img3 = NULL; \
+        psFitsMoveExtNum(fits,1, false); \
+        img3 = psFitsReadImage(img3, fits, reg, 0); \
+        img = psFitsReadImage(img, fits, reg, 1); \
+        if (img == NULL) { \
+            psError(PS_ERR_UNKNOWN, true,"Failed to read test image %s",filename); \
+            return 9; \
+        } \
+        for (psU32 row = readN0; row < readN; row++) { \
+            ps##TYP* imgRow = img->data.TYP[row-readN0]; \
+            ps##TYP* img2Row = img2->data.TYP[row]; \
+            ps##TYP* img3Row = img3->data.TYP[row-readN0]; \
+            ps##TYP* img4Row = img4->data.TYP[row]; \
+            for (psU32 col = readM0; col < readM; col++) { \
+                if (fabsf(imgRow[col-readM0]-img2Row[col]) > FLT_EPSILON) { \
+                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,0 (%.2f vs %.2f) for %s", \
+                            col,row,(psF32)imgRow[col-readM0],(psF32)img2Row[col],filename); \
+                    return 10; \
+                } \
+                if (fabsf(img3Row[col-readM0]-img4Row[col]) > FLT_EPSILON) { \
+                    psError(PS_ERR_UNKNOWN, true,"Image changed in I/O operation at %d,%d,1 (%.2f vs %.2f) for %s", \
+                            col,row,(psF32)img3Row[col-readM0],(psF32)img4Row[col],filename); \
+                    return 11; \
+                } \
+            } \
+        } \
+        psFree(img); \
+        psFree(img2); \
+        psFree(img3); \
+        psFree(img4); \
+        psFree(fits); \
+    }
+
+    #define testReadType(TYP,filename) \
+    testReadTypeSize(1,1,0,0,0,0,TYP,"tmpImages/1x1_" filename); \
+    testReadTypeSize(M,1,M/4,0,M*3/4,0,TYP,"tmpImages/Mx1_" filename); \
+    testReadTypeSize(1,N,0,N/4,0,N*3/4,TYP,"tmpImages/1xN_" filename); \
+    testReadTypeSize(M,N,M/4,N/4,M*3/4,N*3/4,TYP,"tmpImages/MxN_" filename);
+
+    mkdir("tmpImages",0777);
+
+    testReadTypeSize(1,1,0,0,0,0,U8,"tmpImages/1x1_" "U8.fits");
+    testReadTypeSize(M,1,M/4,0,M*3/4,0,U8,"tmpImages/Mx1_" "U8.fits");
+    testReadTypeSize(1,N,0,N/4,0,N*3/4,U8,"tmpImages/1xN_" "U8.fits");
+    testReadTypeSize(M,N,M/4,N/4,M*3/4,N*3/4,U8,"tmpImages/MxN_" "U8.fits");
+
+
+    testReadType(U8,"U8.fits");
+    testReadType(S8,"S8.fits");   // Not a requirement
+    testReadType(S16,"S16.fits");
+    testReadType(U16,"U16.fits"); // Not a requirement
+    testReadType(S32,"S32.fits");
+    testReadType(U32,"U32.fits"); // Not a requirement
+    testReadType(F32,"F32.fits");
+    testReadType(F64,"F64.fits");
+
+    // Attempt to read from NULL fits object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL psFits");
+    psRegion region = {
+                          0,0,0,0
+                      };
+    if(psFitsReadImage(NULL,NULL,region,0) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL psFits");
+        return 100;
+    }
+
+    return 0;
+}
+
+psS32 testImageWrite(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psS32 m = 64;
+    psS32 n = 96;
+
+    /*
+    This function shall write the specified section within a psImage structure
+    to a FITS file. If the specifiedfile exists, then data should overwrite the
+    section to write. If the specified file doesn't exist, it shall be created.
+    If an extenstion is specified, then a basic primary header data unit shall
+    be created.
+    */
+
+    /*
+    Verify a FITS file named filename is generated and contains expected
+    values, if the input parameter input contains known data values, input
+    parameters col, row, ncol, nrow specify a valid data region within psImage
+    structure.
+
+    Verify a FITS file named filename is generated and contains a primary
+    header data unit with extension with expected values, if the input
+    parameter input contains known data values, input parameters col, row,
+    ncol, nrow specify a valid data region within psImage structure and
+    extname and/or extnum specify an extenstion to write.
+
+    N.B. : these are done in testImageRead tests, see above.
+    */
+
+    /*
+    Verify a FITS file named filename is overwritten and contains
+    expected values, if the input parameter input contains known data values,
+    input parameters col, row, ncol, nrow specify a valid data region within
+    psImage structure.
+    */
+
+    GENIMAGE(img,m,n,F32,0);
+    GENIMAGE(img2,m,n,F32,row+2*col);
+    mkdir("tmpImages",0777);
+    remove
+        ("tmpImages/writeTest.fits");
+    psRegion region = {
+                          0,0,0,0
+                      };
+    psFits* fits = psFitsAlloc("tmpImages/writeTest.fits");
+
+    if (! psFitsWriteImage(fits, NULL, img,1)) {
+        psError(PS_ERR_UNKNOWN, true,"Couldn't write writeTest.fits.");
+        return 14;
+    }
+    if (! psFitsUpdateImage(fits, img2, region, 0)) {
+        psError(PS_ERR_UNKNOWN, true,"Couldn't update writeTest.fits.");
+        return 15;
+    }
+    psFree(img);
+    psFree(img2);
+
+    // Did it really overwrite the pixel values?  Let's read it in and see.
+    psFree(fits);
+    fits = psFitsAlloc("tmpImages/writeTest.fits");
+    img = psFitsReadImage(NULL, fits, region, 0);
+    if (img == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"Could not read in writeTest.fits.");
+        return 16;
+    }
+    for (psU32 row=0;row<n;row++) {
+        psF32* imgRow = img->data.F32[row];
+        for (psU32 col=0;col<m;col++) {
+            if (fabsf(imgRow[col] - (row+2*col)) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"The image values were not overwritten at %d,%d (%.2f vs %.2f)",
+                        col,row,imgRow[col],(row+2*col));
+                return 17;
+            }
+        }
+    }
+
+    psFree(img);
+
+    /*
+    Verify false is returned and program execution is not stopped, if the input image
+    is null.
+    */
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message because input image is null.");
+    if ( psFitsWriteImage(fits,NULL,NULL, 1) ) {
+        psError(PS_ERR_UNKNOWN, true,"psImageWriteSection did not return false when input image is NULL.");
+        return 20;
+    }
+
+    psFree(fits);
+
+    return 0;
+}
+
+psS32 tst_psFitsWriteHeader(void)
+{
+    if (! makeMulti() ) {
+        return 1;
+    }
+
+    psMetadata* header   = psMetadataAlloc();
+    psFits*     fitsFile = psFitsAlloc(multiFilename);
+
+    // Test psFitsReadWrite generates files from psFitsWriteImage which calls psFitsWriteHeader
+    // so these additional tests check for error conditions
+    // Attempt call function with NULL metadata
+    if(psFitsWriteHeader(NULL,fitsFile)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL metadata pointer");
+        return 2;
+    }
+
+    psFree(fitsFile);
+
+    // Attempt to call function with NULL fits
+    if(psFitsWriteHeader(header,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return of true for NULL fits file pointer");
+        return 3;
+    }
+    psFree(header);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/fits/verified/fBiOut.fits
===================================================================
--- /trunk/psLib/test/fits/verified/fBiOut.fits	(revision 4547)
+++ /trunk/psLib/test/fits/verified/fBiOut.fits	(revision 4547)
@@ -0,0 +1,6427 @@
+SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B~
+B~záB~p€B~ffB~\)B~QìB~G®B~=qB~33B~(öB~
+žB~{B~
+=B~  B}õÃB}ë
+B}áHB}×
+B}ÌÍB}ÂB}žRB}®B}£×B}B}\B}
+B}záB}p€B}ffB}\)B}QìB}G®B}=qB}33B}(öB}
+žB}{B}
+=B}  B|õÃB|ë
+B|áHB|×
+B|ÌÍB|ÂB|žRB|®B|£×B|B|\B|
+B|záB|p€B|ffB|\)B|QìB|G®B|=qB|33B|(öB|
+žB|{B|
+=B|  Bz
+BzzáBzp€BzffBz\)BzQìBzG®Bz=qBz33Bz(öBz
+žBz{Bz
+=Bz  ByõÃByë
+ByáHBy×
+ByÌÍByÂByžRBy®By£×ByBy\By
+ByzáByp€ByffBy\)ByQìByG®By=qBy33By(öBy
+žBy{By
+=By  BxõÃBxë
+BxáHBx×
+BxÌÍBxÂBxžRBx®Bx£×BxBx\Bx
+BxzáBxp€BxffBx\)BxQìBxG®Bx=qBx33Bx(öBx
+žBx{Bx
+=Bx  Bv
+BvzáBvp€BvffBv\)BvQìBvG®Bv=qBv33Bv(öBv
+žBv{Bv
+=Bv  BuõÃBuë
+BuáHBu×
+BuÌÍBuÂBužRBu®Bu£×BuBu\Bu
+BuzáBup€BuffBu\)BuQìBuG®Bu=qBu33Bu(öBu
+žBu{Bu
+=Bu  BtõÃBtë
+BtáHBt×
+BtÌÍBtÂBtžRBt®Bt£×BtBt\Bt
+BtzáBtp€BtffBt\)BtQìBtG®Bt=qBt33Bt(öBt
+žBt{Bt
+=Bt  Br
+BrzáBrp€BrffBr\)BrQìBrG®Br=qBr33Br(öBr
+žBr{Br
+=Br  BqõÃBqë
+BqáHBq×
+BqÌÍBqÂBqžRBq®Bq£×BqBq\Bq
+BqzáBqp€BqffBq\)BqQìBqG®Bq=qBq33Bq(öBq
+žBq{Bq
+=Bq  BpõÃBpë
+BpáHBp×
+BpÌÍBpÂBpžRBp®Bp£×BpBp\Bp
+BpzáBpp€BpffBp\)BpQìBpG®Bp=qBp33Bp(öBp
+žBp{Bp
+=Bp  Bn
+BnzáBnp€BnffBn\)BnQìBnG®Bn=qBn33Bn(öBn
+žBn{Bn
+=Bn  BmõÃBmë
+BmáHBm×
+BmÌÍBmÂBmžRBm®Bm£×BmBm\Bm
+BmzáBmp€BmffBm\)BmQìBmG®Bm=qBm33Bm(öBm
+žBm{Bm
+=Bm  BlõÃBlë
+BláHBl×
+BlÌÍBlÂBlžRBl®Bl£×BlBl\Bl
+BlzáBlp€BlffBl\)BlQìBlG®Bl=qBl33Bl(öBl
+žBl{Bl
+=Bl  Bj
+BjzáBjp€BjffBj\)BjQìBjG®Bj=qBj33Bj(öBj
+žBj{Bj
+=Bj  BiõÃBië
+BiáHBi×
+BiÌÍBiÂBižRBi®Bi£×BiBi\Bi
+BizáBip€BiffBi\)BiQìBiG®Bi=qBi33Bi(öBi
+žBi{Bi
+=Bi  BhõÃBhë
+BháHBh×
+BhÌÍBhÂBhžRBh®Bh£×BhBh\Bh
+BhzáBhp€BhffBh\)BhQìBhG®Bh=qBh33Bh(öBh
+žBh{Bh
+=Bh  Bf
+BfzáBfp€BfffBf\)BfQìBfG®Bf=qBf33Bf(öBf
+žBf{Bf
+=Bf  BeõÃBeë
+BeáHBe×
+BeÌÍBeÂBežRBe®Be£×BeBe\Be
+BezáBep€BeffBe\)BeQìBeG®Be=qBe33Be(öBe
+žBe{Be
+=Be  BdõÃBdë
+BdáHBd×
+BdÌÍBdÂBdžRBd®Bd£×BdBd\Bd
+BdzáBdp€BdffBd\)BdQìBdG®Bd=qBd33Bd(öBd
+žBd{Bd
+=Bd  Bb
+BbzáBbp€BbffBb\)BbQìBbG®Bb=qBb33Bb(öBb
+žBb{Bb
+=Bb  BaõÃBaë
+BaáHBa×
+BaÌÍBaÂBažRBa®Ba£×BaBa\Ba
+BazáBap€BaffBa\)BaQìBaG®Ba=qBa33Ba(öBa
+žBa{Ba
+=Ba  B`õÃB`ë
+B`áHB`×
+B`ÌÍB`ÂB`žRB`®B`£×B`B`\B`
+B`záB`p€B`ffB`\)B`QìB`G®B`=qB`33B`(öB`
+žB`{B`
+=B`  B^
+B^záB^p€B^ffB^\)B^QìB^G®B^=qB^33B^(öB^
+žB^{B^
+=B^  B]õÃB]ë
+B]áHB]×
+B]ÌÍB]ÂB]žRB]®B]£×B]B]\B]
+B]záB]p€B]ffB]\)B]QìB]G®B]=qB]33B](öB]
+žB]{B]
+=B]  B\õÃB\ë
+B\áHB\×
+B\ÌÍB\ÂB\žRB\®B\£×B\B\\B\
+B\záB\p€B\ffB\\)B\QìB\G®B\=qB\33B\(öB\
+žB\{B\
+=B\  BZ
+BZzáBZp€BZffBZ\)BZQìBZG®BZ=qBZ33BZ(öBZ
+žBZ{BZ
+=BZ  BYõÃBYë
+BYáHBY×
+BYÌÍBYÂBYžRBY®BY£×BYBY\BY
+BYzáBYp€BYffBY\)BYQìBYG®BY=qBY33BY(öBY
+žBY{BY
+=BY  BXõÃBXë
+BXáHBX×
+BXÌÍBXÂBXžRBX®BX£×BXBX\BX
+BXzáBXp€BXffBX\)BXQìBXG®BX=qBX33BX(öBX
+žBX{BX
+=BX  BV
+BVzáBVp€BVffBV\)BVQìBVG®BV=qBV33BV(öBV
+žBV{BV
+=BV  BUõÃBUë
+BUáHBU×
+BUÌÍBUÂBUžRBU®BU£×BUBU\BU
+BUzáBUp€BUffBU\)BUQìBUG®BU=qBU33BU(öBU
+žBU{BU
+=BU  BTõÃBTë
+BTáHBT×
+BTÌÍBTÂBTžRBT®BT£×BTBT\BT
+BTzáBTp€BTffBT\)BTQìBTG®BT=qBT33BT(öBT
+žBT{BT
+=BT  BR
+BRzáBRp€BRffBR\)BRQìBRG®BR=qBR33BR(öBR
+žBR{BR
+=BR  BQõÃBQë
+BQáHBQ×
+BQÌÍBQÂBQžRBQ®BQ£×BQBQ\BQ
+BQzáBQp€BQffBQ\)BQQìBQG®BQ=qBQ33BQ(öBQ
+žBQ{BQ
+=BQ  BPõÃBPë
+BPáHBP×
+BPÌÍBPÂBPžRBP®BP£×BPBP\BP
+BPzáBPp€BPffBP\)BPQìBPG®BP=qBP33BP(öBP
+žBP{BP
+=BP  BN
+BNzáBNp€BNffBN\)BNQìBNG®BN=qBN33BN(öBN
+žBN{BN
+=BN  BMõÃBMë
+BMáHBM×
+BMÌÍBMÂBMžRBM®BM£×BMBM\BM
+BMzáBMp€BMffBM\)BMQìBMG®BM=qBM33BM(öBM
+žBM{BM
+=BM  BLõÃBLë
+BLáHBL×
+BLÌÍBLÂBLžRBL®BL£×BLBL\BL
+BLzáBLp€BLffBL\)BLQìBLG®BL=qBL33BL(öBL
+žBL{BL
+=BL  BJ
+BJzáBJp€BJffBJ\)BJQìBJG®BJ=qBJ33BJ(öBJ
+žBJ{BJ
+=BJ  BIõÃBIë
+BIáHBI×
+BIÌÍBIÂBIžRBI®BI£×BIBI\BI
+BIzáBIp€BIffBI\)BIQìBIG®BI=qBI33BI(öBI
+žBI{BI
+=BI  BHõÃBHë
+BHáHBH×
+BHÌÍBHÂBHžRBH®BH£×BHBH\BH
+BHzáBHp€BHffBH\)BHQìBHG®BH=qBH33BH(öBH
+žBH{BH
+=BH  BF
+BFzáBFp€BFffBF\)BFQìBFG®BF=qBF33BF(öBF
+žBF{BF
+=BF  BEõÃBEë
+BEáHBE×
+BEÌÍBEÂBEžRBE®BE£×BEBE\BE
+BEzáBEp€BEffBE\)BEQìBEG®BE=qBE33BE(öBE
+žBE{BE
+=BE  BDõÃBDë
+BDáHBD×
+BDÌÍBDÂBDžRBD®BD£×BDBD\BD
+BDzáBDp€BDffBD\)BDQìBDG®BD=qBD33BD(öBD
+žBD{BD
+=BD  BB
+BBzáBBp€BBffBB\)BBQìBBG®BB=qBB33BB(öBB
+žBB{BB
+=BB  BAõÃBAë
+BAáHBA×
+BAÌÍBAÂBAžRBA®BA£×BABA\BA
+BAzáBAp€BAffBA\)BAQìBAG®BA=qBA33BA(öBA
+žBA{BA
+=BA  B@õÃB@ë
+B@áHB@×
+B@ÌÍB@ÂB@žRB@®B@£×B@B@\B@
+B@záB@p€B@ffB@\)B@QìB@G®B@=qB@33B@(öB@
+žB@{B@
+=B@  B>
+B>záB>p€B>ffB>\)B>QìB>G®B>=qB>33B>(öB>
+žB>{B>
+=B>  B=õÃB=ë
+B=áHB=×
+B=ÌÍB=ÂB=žRB=®B=£×B=B=\B=
+B=záB=p€B=ffB=\)B=QìB=G®B==qB=33B=(öB=
+žB={B=
+=B=  B<õÃB<ë
+B<áHB<×
+B<ÌÍB<ÂB<žRB<®B<£×B<B<\B<
+B<záB<p€B<ffB<\)B<QìB<G®B<=qB<33B<(öB<
+žB<{B<
+=B<  B:
+B:záB:p€B:ffB:\)B:QìB:G®B:=qB:33B:(öB:
+žB:{B:
+=B:  B9õÃB9ë
+B9áHB9×
+B9ÌÍB9ÂB9žRB9®B9£×B9B9\B9
+B9záB9p€B9ffB9\)B9QìB9G®B9=qB933B9(öB9
+žB9{B9
+=B9  B8õÃB8ë
+B8áHB8×
+B8ÌÍB8ÂB8žRB8®B8£×B8B8\B8
+B8záB8p€B8ffB8\)B8QìB8G®B8=qB833B8(öB8
+žB8{B8
+=B8  B6
+B6záB6p€B6ffB6\)B6QìB6G®B6=qB633B6(öB6
+žB6{B6
+=B6  B5õÃB5ë
+B5áHB5×
+B5ÌÍB5ÂB5žRB5®B5£×B5B5\B5
+B5záB5p€B5ffB5\)B5QìB5G®B5=qB533B5(öB5
+žB5{B5
+=B5  B4õÃB4ë
+B4áHB4×
+B4ÌÍB4ÂB4žRB4®B4£×B4B4\B4
+B4záB4p€B4ffB4\)B4QìB4G®B4=qB433B4(öB4
+žB4{B4
+=B4  B2
+B2záB2p€B2ffB2\)B2QìB2G®B2=qB233B2(öB2
+žB2{B2
+=B2  B1õÃB1ë
+B1áHB1×
+B1ÌÍB1ÂB1žRB1®B1£×B1B1\B1
+B1záB1p€B1ffB1\)B1QìB1G®B1=qB133B1(öB1
+žB1{B1
+=B1  B0õÃB0ë
+B0áHB0×
+B0ÌÍB0ÂB0žRB0®B0£×B0B0\B0
+B0záB0p€B0ffB0\)B0QìB0G®B0=qB033B0(öB0
+žB0{B0
+=B0  B.
+B.záB.p€B.ffB.\)B.QìB.G®B.=qB.33B.(öB.
+žB.{B.
+=B.  B-õÃB-ë
+B-áHB-×
+B-ÌÍB-ÂB-žRB-®B-£×B-B-\B-
+B-záB-p€B-ffB-\)B-QìB-G®B-=qB-33B-(öB-
+žB-{B-
+=B-  B,õÃB,ë
+B,áHB,×
+B,ÌÍB,ÂB,žRB,®B,£×B,B,\B,
+B,záB,p€B,ffB,\)B,QìB,G®B,=qB,33B,(öB,
+žB,{B,
+=B,  B*
+B*záB*p€B*ffB*\)B*QìB*G®B*=qB*33B*(öB*
+žB*{B*
+=B*  B)õÃB)ë
+B)áHB)×
+B)ÌÍB)ÂB)žRB)®B)£×B)B)\B)
+B)záB)p€B)ffB)\)B)QìB)G®B)=qB)33B)(öB)
+žB){B)
+=B)  B(õÃB(ë
+B(áHB(×
+B(ÌÍB(ÂB(žRB(®B(£×B(B(\B(
+B(záB(p€B(ffB(\)B(QìB(G®B(=qB(33B((öB(
+žB({B(
+=B(  B&
+B&záB&p€B&ffB&\)B&QìB&G®B&=qB&33B&(öB&
+žB&{B&
+=B&  B%õÃB%ë
+B%áHB%×
+B%ÌÍB%ÂB%žRB%®B%£×B%B%\B%
+B%záB%p€B%ffB%\)B%QìB%G®B%=qB%33B%(öB%
+žB%{B%
+=B%  B$õÃB$ë
+B$áHB$×
+B$ÌÍB$ÂB$žRB$®B$£×B$B$\B$
+B$záB$p€B$ffB$\)B$QìB$G®B$=qB$33B$(öB$
+žB${B$
+=B$  B"
+B"záB"p€B"ffB"\)B"QìB"G®B"=qB"33B"(öB"
+žB"{B"
+=B"  B!õÃB!ë
+B!áHB!×
+B!ÌÍB!ÂB!žRB!®B!£×B!B!\B!
+B!záB!p€B!ffB!\)B!QìB!G®B!=qB!33B!(öB!
+žB!{B!
+=B!  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B	õÃB	ë
+B	áHB	×
+B	ÌÍB	ÂB	žRB	®B	£×B	B	\B	
+B	záB	p€B	ffB	\)B	QìB	G®B	=qB	33B	(öB	
+žB	{B	
+=B	  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   Aý
+=AüõÃAüáHAüÌÍAüžRAü£×Aü\AüzáAüffAüQìAü=qAü(öAü{Aü  Aûë
+Aû×
+AûÂAû®AûAû
+Aûp€Aû\)AûG®Aû33Aû
+žAû
+=AúõÃAúáHAúÌÍAúžRAú£×Aú\AúzáAúffAúQìAú=qAú(öAú{Aú  Aùë
+Aù×
+AùÂAù®AùAù
+Aùp€Aù\)AùG®Aù33Aù
+žAù
+=AøõÃAøáHAøÌÍAøžRAø£×Aø\AøzáAøffAøQìAø=qAø(öAø{Aø  Aõ
+=AôõÃAôáHAôÌÍAôžRAô£×Aô\AôzáAôffAôQìAô=qAô(öAô{Aô  Aóë
+Aó×
+AóÂAó®AóAó
+Aóp€Aó\)AóG®Aó33Aó
+žAó
+=AòõÃAòáHAòÌÍAòžRAò£×Aò\AòzáAòffAòQìAò=qAò(öAò{Aò  Añë
+Añ×
+AñÂAñ®AñAñ
+Añp€Añ\)AñG®Añ33Añ
+žAñ
+=AðõÃAðáHAðÌÍAðžRAð£×Að\AðzáAðffAðQìAð=qAð(öAð{Að  Aí
+=AìõÃAìáHAìÌÍAìžRAì£×Aì\AìzáAìffAìQìAì=qAì(öAì{Aì  Aëë
+Aë×
+AëÂAë®AëAë
+Aëp€Aë\)AëG®Aë33Aë
+žAë
+=AêõÃAêáHAêÌÍAêžRAê£×Aê\AêzáAêffAêQìAê=qAê(öAê{Aê  Aéë
+Aé×
+AéÂAé®AéAé
+Aép€Aé\)AéG®Aé33Aé
+žAé
+=AèõÃAèáHAèÌÍAèžRAè£×Aè\AèzáAèffAèQìAè=qAè(öAè{Aè  Aå
+=AäõÃAäáHAäÌÍAäžRAä£×Aä\AäzáAäffAäQìAä=qAä(öAä{Aä  Aãë
+Aã×
+AãÂAã®AãAã
+Aãp€Aã\)AãG®Aã33Aã
+žAã
+=AâõÃAâáHAâÌÍAâžRAâ£×Aâ\AâzáAâffAâQìAâ=qAâ(öAâ{Aâ  Aáë
+Aá×
+AáÂAá®AáAá
+Aáp€Aá\)AáG®Aá33Aá
+žAá
+=AàõÃAàáHAàÌÍAàžRAà£×Aà\AàzáAàffAàQìAà=qAà(öAà{Aà  AÝ
+=AÜõÃAÜáHAÜÌÍAÜžRAÜ£×AÜ\AÜzáAÜffAÜQìAÜ=qAÜ(öAÜ{AÜ  AÛë
+AÛ×
+AÛÂAÛ®AÛAÛ
+AÛp€AÛ\)AÛG®AÛ33AÛ
+žAÛ
+=AÚõÃAÚáHAÚÌÍAÚžRAÚ£×AÚ\AÚzáAÚffAÚQìAÚ=qAÚ(öAÚ{AÚ  AÙë
+AÙ×
+AÙÂAÙ®AÙAÙ
+AÙp€AÙ\)AÙG®AÙ33AÙ
+žAÙ
+=AØõÃAØáHAØÌÍAØžRAØ£×AØ\AØzáAØffAØQìAØ=qAØ(öAØ{AØ  AÕ
+=AÔõÃAÔáHAÔÌÍAÔžRAÔ£×AÔ\AÔzáAÔffAÔQìAÔ=qAÔ(öAÔ{AÔ  AÓë
+AÓ×
+AÓÂAÓ®AÓAÓ
+AÓp€AÓ\)AÓG®AÓ33AÓ
+žAÓ
+=AÒõÃAÒáHAÒÌÍAÒžRAÒ£×AÒ\AÒzáAÒffAÒQìAÒ=qAÒ(öAÒ{AÒ  AÑë
+AÑ×
+AÑÂAÑ®AÑAÑ
+AÑp€AÑ\)AÑG®AÑ33AÑ
+žAÑ
+=AÐõÃAÐáHAÐÌÍAÐžRAÐ£×AÐ\AÐzáAÐffAÐQìAÐ=qAÐ(öAÐ{AÐ  AÍ
+=AÌõÃAÌáHAÌÌÍAÌžRAÌ£×AÌ\AÌzáAÌffAÌQìAÌ=qAÌ(öAÌ{AÌ  AËë
+AË×
+AËÂAË®AËAË
+AËp€AË\)AËG®AË33AË
+žAË
+=AÊõÃAÊáHAÊÌÍAÊžRAÊ£×AÊ\AÊzáAÊffAÊQìAÊ=qAÊ(öAÊ{AÊ  AÉë
+AÉ×
+AÉÂAÉ®AÉAÉ
+AÉp€AÉ\)AÉG®AÉ33AÉ
+žAÉ
+=AÈõÃAÈáHAÈÌÍAÈžRAÈ£×AÈ\AÈzáAÈffAÈQìAÈ=qAÈ(öAÈ{AÈ  AÅ
+=AÄõÃAÄáHAÄÌÍAÄžRAÄ£×AÄ\AÄzáAÄffAÄQìAÄ=qAÄ(öAÄ{AÄ  AÃë
+AÃ×
+AÃÂAÃ®AÃAÃ
+AÃp€AÃ\)AÃG®AÃ33AÃ
+žAÃ
+=AÂõÃAÂáHAÂÌÍAÂžRAÂ£×AÂ\AÂzáAÂffAÂQìAÂ=qAÂ(öAÂ{AÂ  AÁë
+AÁ×
+AÁÂAÁ®AÁAÁ
+AÁp€AÁ\)AÁG®AÁ33AÁ
+žAÁ
+=AÀõÃAÀáHAÀÌÍAÀžRAÀ£×AÀ\AÀzáAÀffAÀQìAÀ=qAÀ(öAÀ{AÀ  Aœ
+=AŒõÃAŒáHAŒÌÍAŒžRAŒ£×AŒ\AŒzáAŒffAŒQìAŒ=qAŒ(öAŒ{AŒ  A»ë
+A»×
+A»ÂA»®A»A»
+A»p€A»\)A»G®A»33A»
+žA»
+=AºõÃAºáHAºÌÍAºžRAº£×Aº\AºzáAºffAºQìAº=qAº(öAº{Aº  A¹ë
+A¹×
+A¹ÂA¹®A¹A¹
+A¹p€A¹\)A¹G®A¹33A¹
+žA¹
+=AžõÃAžáHAžÌÍAžžRAž£×Až\AžzáAžffAžQìAž=qAž(öAž{Až  Aµ
+=AŽõÃAŽáHAŽÌÍAŽžRAŽ£×AŽ\AŽzáAŽffAŽQìAŽ=qAŽ(öAŽ{AŽ  A³ë
+A³×
+A³ÂA³®A³A³
+A³p€A³\)A³G®A³33A³
+žA³
+=A²õÃA²áHA²ÌÍA²žRA²£×A²\A²záA²ffA²QìA²=qA²(öA²{A²  A±ë
+A±×
+A±ÂA±®A±A±
+A±p€A±\)A±G®A±33A±
+žA±
+=A°õÃA°áHA°ÌÍA°žRA°£×A°\A°záA°ffA°QìA°=qA°(öA°{A°  A­
+=A¬õÃA¬áHA¬ÌÍA¬žRA¬£×A¬\A¬záA¬ffA¬QìA¬=qA¬(öA¬{A¬  A«ë
+A«×
+A«ÂA«®A«A«
+A«p€A«\)A«G®A«33A«
+žA«
+=AªõÃAªáHAªÌÍAªžRAª£×Aª\AªzáAªffAªQìAª=qAª(öAª{Aª  A©ë
+A©×
+A©ÂA©®A©A©
+A©p€A©\)A©G®A©33A©
+žA©
+=AšõÃAšáHAšÌÍAšžRAš£×Aš\AšzáAšffAšQìAš=qAš(öAš{Aš  A¥
+=A€õÃA€áHA€ÌÍA€žRA€£×A€\A€záA€ffA€QìA€=qA€(öA€{A€  A£ë
+A£×
+A£ÂA£®A£A£
+A£p€A£\)A£G®A£33A£
+žA£
+=A¢õÃA¢áHA¢ÌÍA¢žRA¢£×A¢\A¢záA¢ffA¢QìA¢=qA¢(öA¢{A¢  A¡ë
+A¡×
+A¡ÂA¡®A¡A¡
+A¡p€A¡\)A¡G®A¡33A¡
+žA¡
+=A õÃA áHA ÌÍA žRA £×A \A záA ffA QìA =qA (öA {A   A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Az{Ayë
+AyÂAyAyp€AyG®Ay
+žAxõÃAxÌÍAx£×AxzáAxQìAx(öAx  Aw×
+Aw®Aw
+Aw\)Aw33Aw
+=AváHAvžRAv\AvffAv=qAv{Auë
+AuÂAuAup€AuG®Au
+žAtõÃAtÌÍAt£×AtzáAtQìAt(öAt  As×
+As®As
+As\)As33As
+=AráHAržRAr\ArffAr=qAr{Aqë
+AqÂAqAqp€AqG®Aq
+žApõÃApÌÍAp£×ApzáApQìAp(öAp  Aj{Aië
+AiÂAiAip€AiG®Ai
+žAhõÃAhÌÍAh£×AhzáAhQìAh(öAh  Ag×
+Ag®Ag
+Ag\)Ag33Ag
+=AfáHAfžRAf\AfffAf=qAf{Aeë
+AeÂAeAep€AeG®Ae
+žAdõÃAdÌÍAd£×AdzáAdQìAd(öAd  Ac×
+Ac®Ac
+Ac\)Ac33Ac
+=AbáHAbžRAb\AbffAb=qAb{Aaë
+AaÂAaAap€AaG®Aa
+žA`õÃA`ÌÍA`£×A`záA`QìA`(öA`  AZ{AYë
+AYÂAYAYp€AYG®AY
+žAXõÃAXÌÍAX£×AXzáAXQìAX(öAX  AW×
+AW®AW
+AW\)AW33AW
+=AVáHAVžRAV\AVffAV=qAV{AUë
+AUÂAUAUp€AUG®AU
+žATõÃATÌÍAT£×ATzáATQìAT(öAT  AS×
+AS®AS
+AS\)AS33AS
+=ARáHARžRAR\ARffAR=qAR{AQë
+AQÂAQAQp€AQG®AQ
+žAPõÃAPÌÍAP£×APzáAPQìAP(öAP  AJ{AIë
+AIÂAIAIp€AIG®AI
+žAHõÃAHÌÍAH£×AHzáAHQìAH(öAH  AG×
+AG®AG
+AG\)AG33AG
+=AFáHAFžRAF\AFffAF=qAF{AEë
+AEÂAEAEp€AEG®AE
+žADõÃADÌÍAD£×ADzáADQìAD(öAD  AC×
+AC®AC
+AC\)AC33AC
+=ABáHABžRAB\ABffAB=qAB{AAë
+AAÂAAAAp€AAG®AA
+žA@õÃA@ÌÍA@£×A@záA@QìA@(öA@  A:{A9ë
+A9ÂA9A9p€A9G®A9
+žA8õÃA8ÌÍA8£×A8záA8QìA8(öA8  A7×
+A7®A7
+A7\)A733A7
+=A6áHA6žRA6\A6ffA6=qA6{A5ë
+A5ÂA5A5p€A5G®A5
+žA4õÃA4ÌÍA4£×A4záA4QìA4(öA4  A3×
+A3®A3
+A3\)A333A3
+=A2áHA2žRA2\A2ffA2=qA2{A1ë
+A1ÂA1A1p€A1G®A1
+žA0õÃA0ÌÍA0£×A0záA0QìA0(öA0  A*{A)ë
+A)ÂA)A)p€A)G®A)
+žA(õÃA(ÌÍA(£×A(záA(QìA((öA(  A'×
+A'®A'
+A'\)A'33A'
+=A&áHA&žRA&\A&ffA&=qA&{A%ë
+A%ÂA%A%p€A%G®A%
+žA$õÃA$ÌÍA$£×A$záA$QìA$(öA$  A#×
+A#®A#
+A#\)A#33A#
+=A"áHA"žRA"\A"ffA"=qA"{A!ë
+A!ÂA!A!p€A!G®A!
+žA õÃA ÌÍA £×A záA QìA (öA   A{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A
+{A	ë
+A	ÂA	A	p€A	G®A	
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žA õÃA ÌÍA £×A záA QìA (öA   @ô(ö@ó×
+@ó
+@ó33@òáH@ò\@ò=q@ñë
+@ñ@ñG®@ðõÂ@ð£×@ðQì@ð  @ï®@ï\)@ï
+=@îžR@îff@î{@íÂ@íp€@í
+ž@ìÌÍ@ìzá@ì(ö@ë×
+@ë
+@ë33@êáH@ê\@ê=q@éë
+@é@éG®@èõÃ@è£×@èQì@è  @ç®@ç\)@ç
+=@æžR@æff@æ{@åÂ@åp€@å
+ž@äÌÍ@äzá@ä(ö@ã×
+@ã
+@ã33@âáH@â\@â=q@áë
+@á@áG®@àõÃ@à£×@àQì@à  @Ô(ö@Ó×
+@Ó
+@Ó33@ÒáH@Ò\@Ò=q@Ñë
+@Ñ@ÑG®@ÐõÂ@Ð£×@ÐQì@Ð  @Ï®@Ï\)@Ï
+=@ÎžR@Îff@Î{@ÍÂ@Íp€@Í
+ž@ÌÌÍ@Ìzá@Ì(ö@Ë×
+@Ë
+@Ë33@ÊáH@Ê\@Ê=q@Éë
+@É@ÉG®@ÈõÃ@È£×@ÈQì@È  @Ç®@Ç\)@Ç
+=@ÆžR@Æff@Æ{@ÅÂ@Åp€@Å
+ž@ÄÌÍ@Äzá@Ä(ö@Ã×
+@Ã
+@Ã33@ÂáH@Â\@Â=q@Áë
+@Á@ÁG®@ÀõÃ@À£×@ÀQì@À  @Ž(ö@³×
+@³
+@³33@²áH@²\@²=q@±ë
+@±@±G®@°õÂ@°£×@°Qì@°  @¯®@¯\)@¯
+=@®žR@®ff@®{@­Â@­p€@­
+ž@¬ÌÍ@¬zá@¬(ö@«×
+@«
+@«33@ªáH@ª\@ª=q@©ë
+@©@©G®@šõÃ@š£×@šQì@š  @§®@§\)@§
+=@ŠžR@Šff@Š{@¥Â@¥p€@¥
+ž@€ÌÍ@€zá@€(ö@£×
+@£
+@£33@¢áH@¢\@¢=q@¡ë
+@¡@¡G®@ õÃ@ £×@ Qì@   @(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÂ@£×@Qì@  @®@\)@
+=@žR@ff@{@Â@p€@
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @®@\)@
+=@žR@ff@{@
+Â@
+p€@
+
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @hQì@g®@g
+>@fff@eÂ@e
+ž@dzá@c×
+@c33@b\@aë
+@aG®@`£×@`  @_\)@^žR@^{@]p€@\ÌÍ@\(ö@[
+@ZáH@Z=q@Y@XõÂ@XQì@W®@W
+>@Vff@UÂ@U
+ž@Tzá@S×
+@S33@R\@Që
+@QG®@P£×@P  @O\)@NžR@N{@Mp€@LÌÍ@L(ö@K
+@JáH@J=q@I@HõÃ@HQì@G®@G
+=@Fff@EÂ@E
+ž@Dzá@C×
+@C33@B\@Aë
+@AG®@@£×@@  @(Qì@'®@'
+>@&ff@%Â@%
+ž@$zá@#×
+@#33@"\@!ë
+@!G®@ £×@   @\)@
+žR@
+{@
+p€@
+ÌÍ@
+(ö@
+@áH@=q@@õÂ@Qì@®@
+>@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@£×@  @\)@žR@{@
+p€@
+ÌÍ@
+(ö@
+
+@
+áH@
+=q@	@õÃ@Qì@®@
+=@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@ £×@   ?Ð£×?Ï\)?Î{?ÌÌÍ?Ë
+
+?Ê=p?ÈõÂ?Ç®?Æff?Å
+ž?Ã×
+?Â\?ÁG®?À  ?ŸžR?œp€?Œ(ö?ºáH?¹?žQì?·
+>?µÂ?Žzá?³33?±ë
+?°£×?¯\)?®{?¬ÌÍ?«
+?ª=q?šõÂ?§®?Šff?¥
+ž?£×
+?¢\?¡G®?   ?žR?p€?(ö?áH??Qì?
+>?Â?zá?33?ë
+?£×?\)?{?ÌÍ?
+?=q?õÃ?®?ff?
+
+ž?×
+?\?G®?  ?!G®?
+žR?
+(ö??
+=?zá?ë
+?\)?
+ÌÍ?
+=q?®?
+ž?\?   >úáH>õÂ>ð£×>ë
+>æff>áG®>Ü(ö>×
+=>Ñë
+>ÌÌÍ>Ç®>Â\>œp€>žQì>³33>®{>šõÃ>£×
+>žR>>zá>\)>=q>
+
+ž>  >uÂ>k
+>aG®>W
+=>LÌÍ>B\>8Qì>.{>#×
+>>\)>
+ž=õÂ=áG®=ÌÌÍ=žQì=£×
+=\)=uÂ=LÌÍ=#×
+<õÂ<£×
+<#×
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~bB~Æ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BxºrB{-B~[B~vK¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BsKBuæBx²ÜB{³B~LB~gÏ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bmj#Bp=ÞBs
+ŽBu×Bx€aB{q7B~>B~YT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BgÁûBj¶BmbBp/cBrü9BuÉBxæB{bœB~/B~JÙ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BbÓBdíBgºdBj;BmTBp çBríŸBuºBxkB{TAB~!B~<^¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B\q«B_EfBb<BdßBg«éBjx¿BmEBpmBrßCBu¬BxxðB{EÆB~B~-ã¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BVÉBY?B\jB_6ìBbÂBdÐBgoBjjFBm7
+BpòBrÐÉBuBxjuB{7LB~"B~g¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BQ!\BSõBVÁíBYÄB\[B_(pBaõGBdÂ
+BgôBj[ÊBm(¡BoõwBrÂMBu$Bx[úB{(ÐB}õ§B~ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BKy4BNLïBQÅBSæBV³rBYHB\MB_öBaæÌBd³¢BgyBjMOBm%BoæüBr³ÒBušBxMB{UB}ç+B~q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BEÑ
+BH€ÇBKqBN>tBQ
+JBSØ BV€÷BYqÎB\>€B_
+zBaØQBd¥'BgqýBj>ÔBm
+ªBoØBr¥WBur-Bx?B{
+ÚB}Ø°B}óö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B@(äBBüBEÉuBHLBKc"BN/øBPüÏBSÉŠBV|BYcRB\0)B^üÿBaÉÕBd¬BgcBj0XBlý/BoÊBrÛBuc²Bx0Bzý_B}Ê5B}åz¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B:œB=TxB@!NBBî%BEºûBHÑBKTšBN!BPîUBS»+BVBYTØB\!®B^î
+Ba»[Bd1BgUBj!ÞBlîŽBo»BraBuU8Bx"BzîäB}»»B}Öÿ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B4ØB7¬PB:y&B=EýB@ÓBBß©BE¬BHyWBKF-BNBPßÚBS¬°BVyBYF]B\3B^à	Ba¬àBdy¶BgFBjcBlà9Bo­BryæBuFŒBxBzàiB}­?B}È¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B/0mB2(B4ÐþB7ÕB:j«B=7B@XBBÑ/BEBHjÛBK7²BNBPÑ^BS5BVk
+BY7áB\žB^ÑBadBdk;Bg8BjèBlÑŸBoBrkkBu8ABxBzÑîB}ÄB}º¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B)EB,\ B/(ÖB1õ­B4ÂB7YB:\0B=)B?õÝBBÂ³BEBH\`BK)6BMö
+BPÂãBS¹BV\BY)fB[ö<B^ÃBaéBd\ÀBg)BiölBlÃCBoBr\ïBu)ÆBwöBzÃrB}HB}«¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B#à
+B&³ØB)®B,M
+B/[B1ç1B4ŽB7ßB:MµB=B?çbBBŽ8BEBHMåBK»BMçBPŽhBS>BVNBYëB[çÁB^ŽBanBdNDBgBiçñBlŽÇBoBrNtBuJBwè BzŽ÷B}ÍB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+7õB!
+°B#ØB&¥]B)r3B,?	B/
+àB1Ø·B4¥B7rcB:?:B=
+B?ØæBB¥œBErBH?iBK
+@BMÙBP¥ìBSrÃBV?BY
+pB[ÙFB^Š
+BaróBd?ÉBg
+BiÙvBlŠLBos"Br?øBu
+ÏBwÙ¥BzŠ|B}sRB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BÎBcB
+0_B ý6B#Ê
+B&âB)c¹B,0B.ýfB1Ê<B4B7céB:0¿B<ýB?ÊlBBBBEdBH0ïBJýÅBMÊBPrBSdIBV1BXýõB[ÊÌB^¢BadxBd1OBfþ%BiÊûBlÑBodšBr1~BtþUBwË+BzB}dØB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BçŠB»aB7BUB
+!äB îºB#»B&hB)U>B,"B.îëB1»ÁB4B7UnB:"DB<ïB?»ñBBÇBEUBH"tBJïJBMŒ!BP÷BSUÍBV"€BXïzB[ŒPB^'BaUýBd"ÓBfï©BiŒBlVBoV-Br#BtïÙBwŒ°BzB}V\B}q ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+?~B9BàB¬æByŒBFB
+iB à@B#­B&yìB)FÃB,B.àoB1­FB4z
+B7FòB:ÉB<àB?­uBBzLBEG"BHùBJàÏBM­¥BPz|BSGRBV(BXàÿB[­ÕB^z«BaGBdXBfá.Bi®BlzÛBoG±BrBtá^Bw®4Bz{
+B}GáB}c$¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BVB
+kB
+7çBŸBÑBjBkAB8B
+îB ÑÄB#B&kqB)8GB,
+B.ÑôB1ÊB4k¡B78wB:MB<Ò$B?úBBkÑBE8§BH}BJÒTBM*BPl BS8×BV­BXÒB[YB^l0Ba9BdÝBfÒ³BiBll`Bo96Br
+BtÒãBw¹BzlB}9fB}Tª¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bï.BÂéB¿B
+\B
+)lBöBBÃBðB\ÆB)B
+ösB ÃIB#B&\öB))ÌB+ö¢B.ÃyB1OB4]%B7)üB9öÒB<Ã©B?BB]UBE*,BG÷BJÃØBM¯BP]
+BS*[BU÷1BXÄB[ÞB^]µBa*Bc÷aBfÄ8BiBl]äBo*»Bq÷BtÄgBw>Bz^B}*ëB}F.¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aø
+Aþ5BçBŽnBDB
+NB
+ñBçÈBŽBtBNKB!B
+ç÷B ŽÎB#€B&NzB)QB+è'B.ŽýB1ÔB4NªB7B9èWB<µ-B?BBNÚBE°BGèBJµ]BM3BPO	BSàBUè¶BXµB[cB^O9Ba
+BcèæBfµŒBiBlOiBo
+?BqéBtµíBwÃBzOB}
+pB}7³¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aí=ŒAòå3Aø~àAþBÙ
+B¥òBrÉB
+? B
+
+vBÙLBŠ#BrùB?ÏB
+ŠB
+Ù|B ŠRB#s)B&?ÿB)
+ÕB+Ù¬B.ŠB1sYB4@/B7
+B9ÙÜB<Š²B?sBB@_BE
+5BGÚ
+BJŠáBMsžBP@BS
+eBUÚ;BX§B[sèB^@ŸBa
+BcÚkBf§ABitBl@îBo
+ÅBqÚBt§qBwtHBzA
+B}
+ôB})8¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AáílAçãAí.AòÈ=AøaêAýûBÊ¡BxBdNB
+1$B
+ýûBÊÑB§Bd~B1TBþ*B
+ËB ×B#d­B&1B(þZB+Ë1B.B1dÝB41ŽB6þB9Ë`B<7B?e
+BB1ãBDþ¹BGËBJfBMe=BP2BRþéBUËÀBXB[elB^2CB`ÿBcËïBfÆBieBl2sBnÿIBqÌ BtöBweÌBz2£B|ÿyB}Œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÖ
+AÜDAáÞ@AçwíAíAò«GAøDóAýÞ BŒ&BüBUÓB
+"©B
+ïBŒVB,BVB"ÙBï¯B
+Œ
+B \B#V2B&#	B(ïßB+ŒµB.B1VbB4#8B6ðB9ŒåB<»B?VBB#hBDð>BGœBJëBMVÁBP#BRðnBUœDBXB[VñB^#ÇB`ðBcœuBfKBiW!Bl#øBnðÎBqœ€Bt{BwWQBz$'B|ðþB}
+A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AËLÌAÐôCAÖðAÜ'AáÁJAçZ÷Aìô£AòPAø'üAýÁ©B­«BzBGWB
+.B
+áB­ÚBz±BGB]Bá4B
+®
+B záB#G·B&B(ádB+®:B.{B1GçB4œB6áB9®iB<{@B?HBBíBDáÃBG®BJ{pBMHFBP
+BRáóBU®ÉBX{B[HvB^MB`â#Bc®ùBf{ÐBiHŠBl|BnâSBq¯)Bt{ÿBwHÖBz¬B|âB|ýÆ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¿ü|AÅ£óAË= AÐ×MAÖpúAÜ
+§Aá€SAç> Aì×¬AòqYAø
+Aý€²B/BlB8ÜB
+²B
+ÒB_Bl5B9
+BâBÒ¹B
+B leB#9<B&B(ÒèB+¿B.lB19kB4AB6ÓB9îB<lÅB?9BBqBDÓHBG 
+BJlôBM9ËBP¡BRÓwBU NBXm%B[9ûB^ÑB`ÓšBc ~BfmTBi:+BlBnÓ×Bq ®BtmBw:ZBz1B|ÔB|ïJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AŽ¬,AºS£A¿íPAÅýAË ªAÐºWAÖTAÛí°Aá\Aç!	Aìº¶AòTbA÷îAýŒBŽB]B*aB	÷7B
+Ä
+BäB]ºB*B÷gBÄ=B
+B ]êB#*ÀB%÷B(ÄmB+CB.^B1*ðB3÷ÆB6ÄB9sB<^IB?+ BA÷öBDÄÌBG£BJ^yBM+OBOø&BRÄýBUÓBX^©B[+B]øVB`Å,BcBf^ÙBi+¯BkøBnÅ\Bq2Bt_	Bw+ßByøµB|ÅB|àÏ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A©[ÜA¯SAŽ Aº6­A¿ÐZAÅjAË³AÐ`AÖ7
+AÛÐ¹AájfAçAì¿Aò7lA÷ÑAýjÆB9BOBåB	èŒB
+µBiBO?B
+BèìBµÂB
+B OoB#
+EB%éB(µñB+ÈB.OB1
+uB3éKB6¶!B9øB<OÎB?
+€BAé{BD¶QBG'BJOþBM
+ÕBOé«BR¶BUXBXP.B[
+B]éÛB`¶±BcBfP^Bi
+4Bkê
+Bn¶áBq·BtPBw
+dByê:B|·B|ÒT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+A£³A©L¯A®æ\AŽ	Aº¶A¿³bAÅMAÊæ»AÐhAÖAÛ³ÁAáMnAæçAìÈAòuA÷Ž"AýMÎBsœB@B
+jB	ÚAB
+§BsíB@ÄB
+BÚpB§GB
+t
+B @óB#
+ÉB%Ú B(§vB+tMB.A#B1
+ùB3ÚÐB6§ŠB9t|B<ASB?)BAÚÿBD§ÖBGt­BJABMYBOÛ0BRšBUtÜBXA³B[B]Û_B`š6Bcu
+BfAâBi¹BkÛBnšeBqu<BtBBwèByÛ¿B|šB|ÃØ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A»;Ab²Aü_A£
+A©/¹A®ÉfAŽcA¹ü¿A¿kAÅ0AÊÉÅAÐcqAÕý
+AÛËAá0xAæÊ%AìcÒAñý~A÷+Aý0×BeBB2BþïB	ËÅB
+BerB2HBÿBËõBËB
+e¡B 2xB"ÿNB%Ì%B(ûB+eÑB.2šB0ÿ~B3ÌTB6+B9fB<2×B>ÿ®BAÌ
+BD[BGf1BJ3BLÿÞBOÌŽBRBUfaBX37B[ B]ÌäB`ºBcfBf3gBi =BkÍBnêBqfÀBt3Bw mByÍCB|B|µ]¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AjëAbA¬AEŒAßiA£yA©ÂA®¬oAŽFA¹ßÈA¿yuAÅ!AÊ¬ÎAÐF{AÕà(AÛyÕAáAæ­.AìFÛAñàA÷z4AýáBVÇB#BðtB	œJB
+ BV÷B#ÍBð£BœyBPB
+W&B #ýB"ðÓB%œ©B(B+WVB.$,B0ñB3œÙB6¯B9WB<$]B>ñ3BAŸ	BDàBGW¶BJ$BLñcBOŸ9BRBUWæBX$ŒBZñB]ŸiB`?BcXBf$ìBhñÂBkŸBnoBqXEBt%BvñòByŸÈB|B|Šâ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Ax58AÂA[¿AõlAA(ÆAÂrA£\AšõËA®xAŽ)%A¹ÂÑA¿\~AÄö+AÊØAÐ)
+AÕÃ2AÛ\ÞAàöAæ7Aì)äAñÃA÷]=AüöêBHLB"BáøB	®ÏB
+{¥BH{BQBâ(B®þB{ÕB
+H«B B"âXB%¯.B(|B+HÛB.±B0âB3¯^B6|5B9I
+B<áB>âžBA¯BD|dBGI;BJBLâçBO¯ŸBR|BUIjBXABZãB]¯íB`|ÄBcIBfpBhãGBk°
+Bn|óBqIÊBt BvãvBy°MB|}$B|g¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AaAlãAxßA¥
+A>ÉAØvAr"A
+ÏA¥{A£?(AšØÕA®rAŽ
+.A¹¥ÛA¿?AÄÙ5AÊrâAÐ
+AÕŠ;AÛ?çAàÙAæsAAì
+íAñŠA÷@GAüÙóB9ÐB§BÓ}B	 SB
+m)B: BÖBÓ­B BmYB
+:0B B"ÓÜB% ³B(mB+:_B.6B0Ô
+B3 ãB6m¹B9:B<fB>Ô<BA¡BDméBG:¿BJBLÔlBO¡BBRnBU:ïBXÅBZÔB]¡rB`nHBc;BfõBhÔËBk¡¢BnnxBq;NBt%BvÔüBy¡ÒB|nšB|ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AJóûAVBèAav@Al©AwÜñA&A!ÒA»AU+AîØA
+A£"1Aš»ÞA®UA³ï8A¹åA¿"AÄŒ>AÊUëAÏïAÕDAÛ"ñAàŒAæVJAëï÷Añ£A÷#QAüŒýB+UBø+BÅB	ØB
+^®B+
+Bø[BÅ1BB^ÞB
++ŽBøB"ÅaB%7B(_B++åB-ø»B0ÅB3hB6_>B9,B;øëB>ÅÁBABD_nBG,DBIùBLÅñBOÇBR_BU,tBWùJBZÆ B]÷B`_ÍBc,£BeùzBhÆPBk&Bn_ýBq,ÔBsùªBvÆByWB|`-B|{p¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A4S]A?¢JAJÕ¢AVûAa<SAlo¬Aw£Ak/AÛAA85AÑáAkA£;AšèA®8A³ÒBA¹kîA¿AÄGAÊ8ôAÏÒ¡AÕlMAÛúAà§Aæ9SAëÓAñl®A÷ZAü B
+ÙBé°B¶B	]B
+P3B
+	BéàB¶¶BBPcB
+
+9BêB"¶æB%œB(PB+
+iB-ê@B0·B3ìB6PÃB9
+B;êoB>·FBA
+BDPòBG
+ÉBIêBL·uBOLBRQ"BU
+øBWêÏBZ·¥B]{B`QRBc
+(BeêþBh·ÕBk¬BnQBq
+XBsë/BvžByÛB|Q²B|lõ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+²¿A)¬A45A?h]AJµAUÏAafAl5¿AwiAN8AçåAA>AŽëANA¢èEAšòA®A³µKA¹N÷AŸè€AÄQAÊýAÏµªAÕOWAÚéAà±Aæ
+^Aë¶
+AñO·AöécAüB^BÛ5Bš
+B	táB
+AžBBÛdBš;BuBAçB
+ŸBÛB"škB%uAB(BB+îB-ÛÄB0šB3uqB6BGB9
+B;ÛôB>šÊBAu¡BDBwBGMBIÜ$BLšúBOuÐBRB§BU}BWÜSBZ©*B]v B`BÖBc­BeÜBh©ZBkv0BnCBqÝBsÜ³Bv©Byv`B|C6B|^z¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A!AaA
+fA(Ç¿A3ûA?.pAJaÈAU!A`ÈyAkûÑAw/*A1BAÊîAdAþHAõA1¢A¢ËNAšdûA­þ§A³TA¹2AŸË­AÄeZAÉÿAÏ³AÕ2aAÚÌAàeºAåÿgAëAñ2ÀAöÌmAüfB ÿãBÌ¹BB	ffB
+3<B BÌéB¿BfB3mB
+ CBÍB"ðB%fÆB(3B+ sB-ÍIB0B3föB63ÌB9 ¢B;ÍyB>OBAg%BD3üBG ÒBIÍšBLBOgUBR4+BUBWÍØBZ®B]g
+B`4\Bc2BeÎBhßBkgµBn4BqbBsÎ8BvBygåB|4»B|Oÿ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @àã@÷ÞAóÇA' A
+ZxA(ÑA3Á)A>ôAJ'ÚAU[2A`AkÁäAvõ<AJA­÷AG€AáQAzýAªA¢®VAšHA­á°A³{\A¹	AŸ®¶AÄHbAÉâAÏ{œAÕiAÚ¯AàHÂAåâoAë|
+AñÈAö¯uAüI"B ñgBŸ=BB	WêB
+$ÀBñBŸmBDBXB$ðB
+ñÇBŸB"sB%XJB(% B*ñöB-ŸÍB0£B3XyB6%PB8ò&B;ŸüB>ÓBAX©BD%BFòVBI¿,BLBOXÙBR%¯BTò
+BW¿\BZ3B]Y	B`%ßBbò¶Be¿BhbBkY9Bn&BpòåBs¿ŒBvByYiB|&?B|A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @³¡È@Ê?¢@àŠS@÷
+A¹ÚAí3A
+ A(SäA3<A>ºAIííAU!FA`TAköAv»OA÷TAA*­AÄZA^A÷³A¢`Aš+
+A­Ä¹A³^fAžøAŸÀAÄ+mAÉÅAÏ^ÆAÔørAÚAà+ÌAåÅxAë_%AðøÒAö~Aü,+B âëB¯ÂB|B	InB
+EBã
+B¯òB|ÈBIBuB
+ãKB°"B"|øB%IÎB(¥B*ã{B-°QB0}(B3IþB6ÕB8ã«B;°B>}WBAJ.BDBFãÚBI°±BL}BOJ]BR4BTä
+BW°áBZ}·B]JB`dBbä:Be±Bh}çBkJœBnBpäjBs±ABv~ByJíB|ÄB|3¿  ¿  ¿  ¿  ¿  ¿  @`@þe@³e@ÉËÇ@à2x@ö)AíA³FA
+æA(öA3MOA>šAIŽ ATçXA`±AkN	AvbAÚ]At
+A
+·A§cAAAÚŒA¢tiAšA­§ÂA³ApAžÛ
+AŸtÉAÄvAÉš"AÏAÏAÔÛ|AÚu(AàÕAåšAëB.AðÛÛAöuAü5B ÔpB¡FBn
+B	:ôB
+ÊBÔ B¡wBnMB;#BúB
+ÔÐB¡ŠB"n}B%;SB()B*Õ B-¡ÖB0n­B3;B6YB8Õ/B;¢B>nÜBA;²BDBFÕ_BI¢5BLo
+BO;ãBR¹BTÕBW¢fBZo<B]<B`éBbÕ¿Be¢BholBk<BBn	BpÕïBs¢ÅBvoBy<rB|	HB|$¿  ¿  ¿  ¿  @2>@_zS@#Ú@@²ñ<@ÉWì@ßŸ@ö%OAF AyXA
+¬±A'à
+A3bA>FºAIzAT­kA_àÄAk
+AvGuAœgAWAðÀAlA$AœÆA¢WrA§ñ A­ÍA³$yAžŸ&AŸWÒAÃñAÉ,AÏ$ØAÔŸ
+AÚX2AßñÞAåAë%9AðŸåAöXAûò>B ÅõBÌB_¢B	,xB
+ùOBÆ%BûB_ÒB,šBù~B
+ÆUB+B"`B%,ØB'ù®B*Æ
+B-[B0`1B3-B5ùÞB8ÆŽB;B>`aBA-7BCú
+BFÆäBI»BL`BO-gBQú>BTÇBWêBZ`ÁB]-B_úmBbÇDBeBh`ñBk-ÇBmúBpÇtBsJBva By-÷B{úÍB|¿  ¿  ?¯xI@÷Ú@1Å<@^@
+° @°@²}b@Èä@ßJÃ@õ±tA
+A?lA
+rÄA'Š
+A2ÙuA>
+ÍAI@&ATs~A_Š×AjÚ/Av
+A pA:
+AÓÉAmvA"A ÐA¢:}A§Ô)A­mÖA³Až¡/AŸ:ÜAÃÔAÉn5AÏâAÔ¡AÚ;;AßÔéAånAëBAð¡îAö;AûÕHB ·zBPBQ'B	
+ýB
+êÓB·ªBBQVB
+-BëB
+·ÙB°B"QB%
+]B'ë3B*ž	B-ßB0Q¶B3
+B5ëbB8ž9B;
+B>QåBA
+ŒBCëBFžiBI
+?BLRBO
+ìBQëÂBTžBW
+oBZREB]
+B_ëòBbžÉBe
+BhRuBkLBmì"BpžøBs
+ÏBvR¥By{B{ìQB|?!G®?)Õ?®
+@$@0Ý@]ªé@
+<%@¢×@²	@Èp8@ÞÖé@õ=AÒ&A~A
+8×A'l/A2A=ÒàAI9AT9A_léAj BAuÓAyA
+&A¶ÒAPAê-AÙA¢
+A§·2A­PßA²êAž8AŸ
+åAÃ·AÉQ>AÎêëAÔAÚ
+EAß·òAåQAêëKAðøAö
+€AûžQB šÿBuÕBB«B	B
+ÜXB©.BvBBÛB±BÜB
+©^Bv5B"C
+B%áB'Ü·B*©B-vdB0C:B3B5ÜçB8©œB;vB>CkBAABCÝBF©îBIvÄBLCBOqBQÝGBTª
+BWvôBZCÊB]¡B_ÝwBbªMBew$BhCúBkÐBmÝ§Bpª}BswSBvD)By B{ÝÖ¿  ?b(?&6¬?¬¶@(p@/õÒ@\Ã4@ÈK@.ü@±­@Çü^@Þc@ôÉÀA9AËAþêA'2BA2eA=óAHÌKASÿ€A_2üAjfUAu­AfA 0AÝA3AÍ6AfâA¢ A§<A­3èA²ÍAžgBAŸ îAÃAÉ4IAÎÍõAÔg¢AÚNAßûAå4šAêÎTAðhAö®AûZB BgZB40B	B
+ÍÝB³BgB4`B6BÎ
+B
+ãBg¹B"4B%fB'Î<B*B-géB04¿B3B5ÎlB8CB;hB>4ïBAÆBCÎBFrBIhIBL5BOõBQÎÌBT¢BWhyBZ5OB]%B_ÎüBbÒBehšBh5BkUBmÏ+BpBshØBv5®By	j¿  ¿  ?ÃV?"×?ªæ°@@º@/
+@[Û~@Tp@»!@±!Ò@Ç@Ýï3@ôUäA^KA£AÄüA&øTA2+¬A=_AH]ASÅ¶A^ùAj,gAu_¿AIA
+ã9A|æAA°?AIìA¡ãA§}EA­òA²°AžJKAœãùAÃ}¥AÉRAÎ°þAÔJ«AÙäXAß~Aå±Aê±^AðK
+Aõä·Aû~eB BXÞB%µBòB
+¿aB8BYB%åBò»B¿B
+gBY>B"&B$òêB'¿ÁB*B-YmB0&DB2óB5¿ñB8ÇB;YB>&tB@óJBCÀ!BF÷BIYÍBL&€BNózBQÀQBT'BWYýBZ&ÔB\óªB_ÀBbWBeZ-Bh'BjóÙBmÀ°BpBsaB¿  ¿  ¿  ¿  ?$?
+ù?©F@Y@.&h@ZóÊ@à@GG@°­÷@Çš@Ý{Y@óâ
+A$^AW¶AA&ŸgA1ñ¿A=%AHXpASÉA^¿!AiòyAu%ÒA,A
+ÆCA_ïAùAHA,õA¡Æ¢A§`NA¬ùûA²©Až-UAœÇAÃ`¯AÈú[AÎAÔ-ŽAÙÇaAßaAäúºAêgAð.AõÇÁAûanB }BJcB9BäB
+°æB}œBJBiBä?B±B
+}ìBJÂB"B$äoB'±EB*~
+B-JóB0ÉB2äB5±vB8~LB;K"B>ùB@äÏBC±¥BF~|BIKRBL)BNäÿBQ±ÕBT~¬BWKBZXB\å/B_²Bb~ÛBeK±BhBjå^Bm¹¿  ¿  ¿  ¿  ¿  ¿  ?
+²?Z1?§GÝ@ qQ@->³@Z
+@l»@Ól@°:
+@Æ Î@Ý@ón0AêpA
+ÉAQ!A&zA1·ÒA<ë+AH
+ASQÛA^
+4AižAtëåAA
+©LABøAÜ¥AvRAþA¡©«A§CYA¬ÝA²v²Až_Aœª
+AÃCžAÈÝdAÎwAÔŸAÙªjAßDAäÝÅAêwqAð
+AõªÊAûDwB oB;èBŸBÕB
+¢kBoAB<BîBÕÄB¢B
+oqB<GB"	
+B$ÕôB'¢ËB*o¡B-<wB0	NB2Ö$B5¢úB8oÑB;<§B>	}B@ÖTBC£*BFpBI<×BL	­BNÖBQ£ZBTp0BW=BZ	ÝB\Ö³B_£Bbp`Be=6Bhò¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?æá?»X?¥xp?ÿ5@,Vý@Y$_@øà@_@¯ÆC@Æ,ó@Ü€@òúTA°AãÜA4A&JA1}åA<±=AGäASïA^KGAi~At±øAåQA
+UA&A¿®AY[Aó	A¡µA§&bA¬ÀA²Y»A·óhAœAÃ&ÁAÈÀnAÎZAÓóÇAÙuAß'!AäÀÎAêZzAïô'AõÔAû'B `B-mBúCBÇB
+ïB`ÆB-BúrBÇIBB
+`õB-ÌB!ú£B$ÇyB'OB*a&B--üB/úÒB2Ç©B5B8aUB;.,B=ûB@ÇÙBC¯BFa
+BI.\BKû2BNÈBQßBTaµBW.BYûaB\È8B_BbhÊ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+H?
+?£©?ýCÌ@+oI@X<ª@
+@ë·@¯Rh@Å¹@ÜÊ@òzAvA©ïAÝGA&A1CøA<wQAGª©ARÞA^ZAiD²Atx
+A«dA
+o^A	
+A¢¹A<eAÖA¡o¿A§	kA¬£A²<ÄA·ÖqAœp
+AÃ	ÊAÈ£wAÎ=%AÓÖÑAÙp~Aß
+*Aä£×Aê=Aï×0AõpÝAû
+B RB
+ñBëÇBžB
+
+tBRJB!Bë÷BžÍB
+€B
+R{BQB!ì'B$žþB'
+ÔB*RªB-B/ìWB2¹-B5B8RÚB;±B=ìB@¹]BC4BFS
+BIàBKì·BN¹BQcBTS9BW BYìæB\À¢¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?	©>?}¬?¡Ù?ût_@*@WTô@+@wÛ@®Þ@ÅE=@Û«î@òA<šAp A£YA%Ö²A1
+
+A<=bAGp»AR€A]×lAi
+ÄAt>
+AquA
+RhAìA
+ÁAnA¹A¡RÇAŠìsA¬ A²ÍA·¹yAœS&AÂìÔAÈAÎ -AÓ¹ÚAÙSAÞí3AäßAê Aïº9AõSåAúíB CBvBÝLBª"B
+vùBCÏB¥BÝ|BªSBw)B
+CÿBÖB!Ý¬B$ªB'wYB*D/B-B/ÝÜB2ª²B5wB8D_B;5B=Þ
+B@ªâBCwžBFDBIeBKÞ;BN«BQwèBTDŸBWz¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+k?
+ÞÚ? 
+2?ù€ö@)Þ@Vm@@Q@@®j²@ÄÑc@Û8@ñÅA»A6AilA%ÄA0Ð
+A<uAG6ÎARj&A]AhÐ×At/A7A
+5qAÏ
+AhÊAwA#A¡5ÐAŠÏ}A¬i)A²ÖA·Aœ60AÂÏÝAÈiAÎ6AÓãAÙ6AÞÐ<AäiéAêAïBAõ6ïAúÐB 5$BúBÎÑB§B
+h}B5TB+BÏB×Bh®B
+5BZB!Ï1B$B'hÝB*5ŽB-B/ÏaB27B5i
+B85äB;ºB=ÏB@gBCi=BF6BIéBKÏÀBNBQpR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?k?	@?:Å?÷Õ@(ž(@U
+@)u@&@­ö×@Ä]@ÚÄ9@ñ*êAÈÎAü&A/A%b×A00A;ÉAFüáAR09A]cAhêAsÊBA~ýA
+zA²'AKÓAåA-A¡ÙAŠ²A¬L4A±åàA·Aœ:AÂ²æAÈLAÍæ?AÓìAÙAÞ³EAäLòAéæAïLAõùAú³¥B &©BóBÀUB,B
+ZB&ÙBó¯BÀB\BZ2B
+'	B
+óßB!ÀµB$B'ZbB*'9B,ôB/ÀåB2ŒB5ZB8'hB:ô?B=ÁB@ëBCZÁBF'BHônBKÈ*¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ý?¡/?k\?ö!@'Ðs@TÕ@µ@
+L@­ý@Ãé®@ÚP_@ð·AáAÂ9AõA%(êA0\CA;AFÂóAQöLA])€Ah\ýAsUA~Ã®AûA0A.ÝAÈAb6A ûäAŠA¬/=A±ÈêA·bAŒüCAÂïAÈ/AÍÉIAÓbõAØü¢AÞOAä/üAéÉ©AïcUAôýAú¯B -BåB±ÛB~±B
+KB^Bå4B²
+B~áBK·B
+B
+ådB!²:B$B'KçB*œB,åB/²jB2@B5LB8íB:åÃB=²B@pBCLFBF ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ö[ë?U?ï?ô6Ž@&èœ@S¶
+@AÀ@šq@­"@ÃuÓ@ÙÜ@ðC4ATóAKA»€A$îüA0"TA;U­AFAQŒ^A\ï¶Ah#AsVgA~ÀAÞAx9AæA«AE@A ÞíAŠxA¬FA±«óA·EAŒßLAÂxùAÈ¥AÍ¬RAÓEÿAØß¬AÞyYAäAé¬²AïF_Aôà
+AúyžB 	³BÖB£_Bp6B
+=
+B	âBÖ¹B£BpeB=<B
+
+B
+ÖéB!£¿B$pB'=lB*
+BB,×B/£ïB2pÅB5=B8
+qB:×HB=€
+B@wÚ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ï
+I>üÇ?Ì?ògK@&@RÎj@Ì@4@¬G@Ãù@Ùh©@ïÏZAAN^A¶A$µA/ègA;ÀAFOAQqA\µÉAgé!As
+zA~OÓAÁA[DAôðAA(JA ÁöAŠ[£A«õOA±üA·(©AŒÂUAÂ\AÇõ¯AÍ\AÓ)	AØÂ¶AÞ\bAãöAé»Aï)hAôÃAú\ÁAÿönBÈBäBaºB
+.B
+ûgBÈ=BBaêB.ÁBûB
+ÈmB!DB$bB'.ðB)ûÇB,ÈB/sB2bIB5/ B7ûöB:Ï²¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >çà¥>õc?ý
+?ðâ@%T@Qæ¶@~Ž@Àœ@¬'m@Â
+@ØôÏ@ï[AáAqAGÉA${"A/®zA:áÓAF+AQHA\{ÜAg¯5ArâA~çA€ A>MA×úAqŠA
+SA €ÿAŠ>¬A«ØYA±rA·
+²AŒ¥_AÂ?
+AÇØ¹AÍrfAÓ
+AØ¥¿AÞ?kAãÙAérÅAï
+qAôŠ
+Aú?ËAÿÙxB¹BiBS?B
+ B
+ììB¹ÂBBSoB EBí
+B
+¹òB!ÈB$SB' uB)íKB,º!B/øB2SÎB5'¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >à£>îK ?-¬?îÈq@$1@Pþý@}Ì_@Là@«³@ÂB@Øó@îç€A§*A
+ÚA
+ÛA$A4A/tA:§äAEÛ=AQA\AîAguFAršA}ÛøA©A!UA»AT®Aî[A AŠ!ŽA«»aA±UA¶î»AŒhAÂ"AÇ»ÁAÍUnAÒïAØÇAÞ"tAãŒ AéUÍAîïzAô&Aú"ÔAÿŒB«BwìBDÃB
+B
+ÞpB«FBx
+BDóBÉBÞB
+«vB!xLB$E"B'øB)ÞÏB,«¥B/a¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ùe]>ç
+û?^C?ìù@#Iç@PH@|äª@Ù@«?·@ÁŠh@Ø
+@îsÊAm=A
+ AÓîA$FA/:A:møAE¡PAPÔšA\Ag;YArn²A}¢
+Aj²A^A
+A7žAÑdA kAŠŸA«kA±8A¶ÑÅAŒkqAÂ
+AÇÊAÍ8wAÒÒ$AØkÐAÞ}Aã*Aé8ÖAîÒAôl1AúÝAÿBBiqB6HB
+
+B
+ÏôBËBi¡B6wBNBÐ$B
+úB!iÐB$6§B'}B)×9¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ò'»>ßÐY?Û?ë)@"b3@O/@{üö@e,@ªËÝ@Á2@×?@íÿïA3PA
+fšAA#ÍZA/ ²A:4
+AEgcAP»A[ÎAglAr4ÅA}h
+AM»AçhAAÁAŽnA NA¥çÈA«uA±!A¶ŽÎAŒNzAÁè'AÇÔAÍAÒµ-AØNÚAÝèAã4AéáAîµAôO:AùèæAÿB BZöB'ÌB
+ô£B
+ÁyBOB[&B'üBôÒBÁšB
+B![UB$/¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Êê>Øµ?¿r?éZ6@!z~@NGà@{A@ñR@ªX@ÀŸ³@×%d@íAùcA
+,ŒA`A#lA.ÆÅA9ú
+AE-vAP`ÎA['AfÇAqú×A}./A0ÄAÊqAd
+AýËAxA 1%A¥ÊÑA«d~A°þ*A¶×AŒ1AÁË0AÇdÝAÌþAÒ7AØ1äAÝËAãe=AèþêAîAô2CAùËðAÿeB€BL{BQB
+æ'B
+²þBÔBLªBBæWB³-B
+é¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ã¬s>ÑTñ?ð?çÆ@ Å@M`'@z-@}u@©ä&@ÀJ×@Ö±@í9A¿uA
+òÍA&&A#Y~A.×A9À/ADóAP&àA[Z8AfAqÀéA|ôBAÎA­{AG(AàÕAzA .A¥­ÚA«GA°á4A¶zàAŒAÁ®:AÇGçAÌáAÒ{AAØíAÝ®AãHFAèáóAî{ AôLAù®ùAÿH¥Bq)B=ÿB
+ÖB
+×¬B
+€BqXB>/B
+BÞÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ŒnÐ>ÊN? ?å»\@«@Lxr@yEÔ@	@©pL@¿Öý@Ö=®@ì€_A
+A
+žàAì9A#A.RêA9BAD¹AOìòA[ KAfS€AqüA|ºUAöØA
+A*1AÃÞA]A÷7A¥äA«*A°Ä=A¶]êA»÷AÁDAÇ*ñAÌÄAÒ^JA×÷öAÝ£Aã+PAèÄüAî^©AóøVAùAÿ+¯Bb®B/BüZB
+É0B
+BbÝB6¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >µ1,>ÂÙª?Q/?ãëó@
+Ã\@KŸ@x^ @Á@šür@¿c#@ÕÉÔ@ì0
+AKA
+~óA²LA"å€A.üA9LTAD­AO³AZæ^Af·AqMA|iAÙáAsA
+:AŠçA@AÚ@A¥síA«
+A°§GA¶@ôA»Ú¡AÁtMAÇ
+úAÌ§ŠAÒASA×Û AÝt¬AãYAèšAîA²AóÛ`Aùu
+Aÿ·BT2B!BíßB
+ºµB
+q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >­ó>»?Æ?â
+@
+Ûš@J©
+@wvl@!ç@š@ŸïI@ÕUù@ëŒ«A®A
+EAx^A"«¶A-ßA9hADEÀAOyAZ¬qAeßÉAq"A|F|AŒêAVAðDAðA#AœJA¥V÷Aªð€A°QA¶#ýA»œªAÁWVAÆñAÌ°AÒ$\A×Ÿ	AÝW¶AâñbAèAî$œAóŸiAùXAþñÁBE·BBæI¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Šµå>Ž^C?²U?àM@
+óï@IÁQ@v³@®
+@š»@Ÿ{m@Ôâ
+@ëHÎA ×¿A
+
+A>pA"qÉA-¥!A8ØzAD
+ÒAO?*AZrAe¥ÜApÙ4A|
+AóA9AÓLAlùAŠA SA¥: AªÓ¬A°mYA¶A» ²AÁ:_AÆÔ
+AÌmžAÒeA×¡AÝ:¿AâÔlAènAîÅAó¡rAù;
+AþÔËB>!¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >xA>­ À?âô?Þ}¹@
+
+?@HÙ¡@u§@:3@§ ã@Ÿ@ÔnD@êÔöA ÓA
+Ñ,AA"7ÝA-k5A8ACÑæAO?AZ8AekïApGA{Ò¡AýA
+ªA¶WAPAé±A]A¥
+
+Aª¶¶A°PcAµêA»ŒAÁ
+iAÆ·AÌPÂAÑêpA×
+AÝ
+ÉAâ·vAèQ#AíêÏAó|Aù+ó¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >:>¥ã??Ü®P@$@Gñì@t¿N@ÆX@§-@œº@Óúk@êaA cæA
+?AÊA!ýïA-1HA8d¡ACùANËQAYþ©Ae2Ape[A{ŽAfAÿŽAaA3
+AÌºAffA¥ AªÀA°3lAµÍA»fÆAÁ rAÆ AÌ3ÍAÑÍyA×g&AÝ ÓAâAè4,AíÛ£¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >üú>¥x?D"?ÚÞç@<Ö@G
+8@s×@R~@Š¹/@œß@Ó@éíAA )ùA
+]QAªA!ÄA,÷[A8*³AC^
+ANdAYÄœAdøAp+nA{^ÇAIAâœA|jAA¯ÃAIpA€ã
+Aª|ÉA°vAµ°"A»IÐAÀã}AÆ})AÌÖAÑ°A×J/AÜãÜAâS¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >¿W>h?~é?Ù@U*@F"@rïí@Þ§@ŠEX@Œ¬	@Óº@éyk@ÿà
+A
+#gAV¿A!A,œpA7ðÈAC$!ANWyAYÒAdŸ*AoñA{$ÜA,AÅÈA_tAù!AÍA,zA€Æ'Aª_ÓA¯ùAµ.A»,ÚAÀÆAÆ`4AËùàAÑA×;¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >³>*q?{JÂ?×@%@mv@E:×@r9@jÍ@¥Ñ~@Œ8/@Òà@é@ÿlBA
+éyA
+ÒA!P*A,A7¶ÛABê4AN
+AYPäAd=Ao·AzêïA$AšÑAB}AÜ*Au×AA€©1AªBÞA¯ÜAµv7A»äAÀ©AÆC=AËêŽ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >v
+>ìÍ?w«ð?Õpœ@
+Á@DS#@q @öó@¥]€@»ÄU@Ò+@è¶@þøgA
+¯AâåA!=A,IA7|îAB°FAMãAYøAdJPAo}šAz±Aò-AÚA%A¿3AXáAòA€:Aª%çA¯¿AµY@AºòíAÀd¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >h
+×>¯j?t
+>?Ó¡d@@Ckv@p8Ø@
+@€éÎ@»P~@Ñ·/@è
+à@þA
+u¡AšúA ÜRA,ªA7CABv\AM©ŽAXÝ
+AdeAoCœAzwAÕ8AnäAA¢?A;ëAÕA€oEAªñA¯¢AµJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Y>tã?pnm?ÑÑû@¶`@BÂ@oQ$@C@€uó@ºÜ¥@ÑCU@çª@þ·A
+;ŽAo
+A ¢eA+ÕŸA7	AB<nAMoÇAX£AcÖxAo	ÐAz=)AžBAQïAëA
+HA
+õAž¡A€RNA©ùÅ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >KJ>fhÆ?lÏ»?Ð¢@ÎŽ@A@niw@m@€
+@ºhÎ@ÐÏ@ç60@ýáA
+ÉA5"A hzA+ÒA6Ï+ABAM5ÜAXi4AcAnÏåAz?ALA4ùAÎŠAhRAÿA©v¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ><>Wí?i0è?Î39@ç @@Ža@mÃ@'@£C@¹ôô@Ð[¥@æÂV@ý)A	ÇÜAû4A .A+aåA6>AAÈALûïAX/GAcbAnøAyÉRA~VAA±¯AY&¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >.»>Ir7?e?ÌcÐ@ÿK@?Ì­@l@³ž@£i@¹@ÏçË@æN|@üµ-A	ïAÁGAô A+'øA6[QAA©ALÂAWõZAc(³An\
+AydAa_AÖ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >€s>:÷p?aóe?Êx@@>å @k²b@?â@¢Š@¹
+D@Ïsõ@åÚ¥@üAVA	TA\AºµA*î
+A6!eAATŸALAW»oAbîÇAn" Ayq¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >)/>,|,?^T?ÈÅ@/ê@=ýL@jÊ­@Ì@¢2¹@žj@Ï @åfË@ûÍ}A	AMoAÇA*Ž A5çyAAÑALN)AWAbÐo¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >­é>
+ æ?ZµÃ?ÆõŠ@H5@=@iâù@X.@¡Ÿß@ž%@Î@@äòò@ûY¢Aà)AAFÛA*z3A5­A@àäAL/Ñ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =èeE>?W?Å&M@`@<-ë@hûM@äW@¡K@·±º@Îj@ä@úåÌAŠ?AÙA
+ïA*@HA55¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =Ën¹>
+Ù?Sx@?ÃVä@xÕ@;F7@h@p~@ ×.@·=ß@Í€@ä
+A@úqòAlQAªA
+î¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =®x1=å *?OÙ?Á@
+(@:^@g+ì@ü§@ cX@¶Ê	@Í0º@ãk@ùþ
+AMû¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =€=È)?L:Œ?¿ž#@
+©t@9vÖ@fD8@Í@ï~@¶V/@ÌŒà@ãZº¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =i.=«3?Hë?œèº@
+ÁÀ@8"@e\@ó@{€@¶~¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =/)==?Dý9?Œa@
+Ú@7§u@dt×@ØF¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  <êwô=bì?A^h?ºIù@	ò_@7.¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  <m;Š=( Ü?=¿?¹W6¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  9°ç\=
+J¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ?!G®?Ð£×@(Qì@hQì@(ö@Ž(ö@Ô(ö@ô(öA
+{A{A*{A:{AJ{AZ{Aj{Az{A
+
+=A
+=A
+=A
+=A¥
+=A­
+=Aµ
+=Aœ
+=AÅ
+=AÍ
+=AÕ
+=AÝ
+=Aå
+=Aí
+=Aõ
+=Aý
+=B
+B
+B
+
+B
+B
+B
+B
+B
+
+B"
+B&
+B*
+B.
+B2
+B6
+B:
+B>
+BB
+BF
+BJ
+BN
+BR
+BV
+BZ
+B^
+Bb
+Bf
+Bj
+Bn
+Br
+Bv
+Bz
+B~
+?
+žR?Ï\)@'®@g®@×
+@³×
+@Ó×
+@ó×
+A	ë
+Aë
+A)ë
+A9ë
+AIë
+AYë
+Aië
+Ayë
+AõÃAõÃAõÃAõÃA€õÃA¬õÃAŽõÃAŒõÃAÄõÃAÌõÃAÔõÃAÜõÃAäõÃAìõÃAôõÃAüõÃBzáBzáB
+záBzáBzáBzáBzáB
+záB"záB&záB*záB.záB2záB6záB:záB>záBBzáBFzáBJzáBNzáBRzáBVzáBZzáB^záBbzáBfzáBjzáBnzáBrzáBvzáBzzáB~zá?
+(ö?Î{@'
+>@g
+>@
+@³
+@Ó
+@ó
+A	ÂAÂA)ÂA9ÂAIÂAYÂAiÂAyÂAáHAáHAáHAáHA€áHA¬áHAŽáHAŒáHAÄáHAÌáHAÔáHAÜáHAäáHAìáHAôáHAüáHBp€Bp€B
+p€Bp€Bp€Bp€Bp€B
+p€B"p€B&p€B*p€B.p€B2p€B6p€B:p€B>p€BBp€BFp€BJp€BNp€BRp€BVp€BZp€B^p€Bbp€Bfp€Bjp€Bnp€Brp€Bvp€Bzp€B~p€??ÌÌÍ@&ff@fff@33@³33@Ó33@ó33A	AA)A9AIAYAiAyAÌÍAÌÍAÌÍAÌÍA€ÌÍA¬ÌÍAŽÌÍAŒÌÍAÄÌÍAÌÌÍAÔÌÍAÜÌÍAäÌÍAìÌÍAôÌÍAüÌÍBffBffB
+ffBffBffBffBffB
+ffB"ffB&ffB*ffB.ffB2ffB6ffB:ffB>ffBBffBFffBJffBNffBRffBVffBZffB^ffBbffBfffBjffBnffBrffBvffBzffB~ff?
+=?Ë
+
+@%Â@eÂ@áH@²áH@ÒáH@òáHA	p€Ap€A)p€A9p€AIp€AYp€Aip€Ayp€AžRAžRAžRAžRA€žRA¬žRAŽžRAŒžRAÄžRAÌžRAÔžRAÜžRAäžRAìžRAôžRAüžRB\)B\)B
+\)B\)B\)B\)B\)B
+\)B"\)B&\)B*\)B.\)B2\)B6\)B:\)B>\)BB\)BF\)BJ\)BN\)BR\)BV\)BZ\)B^\)Bb\)Bf\)Bj\)Bn\)Br\)Bv\)Bz\)B~\)?zá?Ê=p@%
+ž@e
+ž@\@²\@Ò\@ò\A	G®AG®A)G®A9G®AIG®AYG®AiG®AyG®A£×A£×A£×A£×A€£×A¬£×AŽ£×AŒ£×AÄ£×AÌ£×AÔ£×AÜ£×Aä£×Aì£×Aô£×Aü£×BQìBQìB
+QìBQìBQìBQìBQìB
+QìB"QìB&QìB*QìB.QìB2QìB6QìB:QìB>QìBBQìBFQìBJQìBNQìBRQìBVQìBZQìB^QìBbQìBfQìBjQìBnQìBrQìBvQìBzQìB~Qì?ë
+?ÈõÂ@$zá@dzá@=q@²=q@Ò=q@ò=qA	
+žA
+žA)
+žA9
+žAI
+žAY
+žAi
+žAy
+žA\A\A\A\A€\A¬\AŽ\AŒ\AÄ\AÌ\AÔ\AÜ\Aä\Aì\Aô\Aü\BG®BG®B
+G®BG®BG®BG®BG®B
+G®B"G®B&G®B*G®B.G®B2G®B6G®B:G®B>G®BBG®BFG®BJG®BNG®BRG®BVG®BZG®B^G®BbG®BfG®BjG®BnG®BrG®BvG®BzG®B~G®?\)?Ç®@#×
+@c×
+@ë
+@±ë
+@Ñë
+@ñë
+AõÃAõÃA(õÃA8õÃAHõÃAXõÃAhõÃAxõÃAzáAzáAzáAzáA€záA¬záAŽzáAŒzáAÄzáAÌzáAÔzáAÜzáAäzáAìzáAôzáAüzáB=qB=qB
+=qB=qB=qB=qB=qB
+=qB"=qB&=qB*=qB.=qB2=qB6=qB:=qB>=qBB=qBF=qBJ=qBN=qBR=qBV=qBZ=qB^=qBb=qBf=qBj=qBn=qBr=qBv=qBz=qB~=q?
+ÌÍ?Æff@#33@c33@@±@Ñ@ñAÌÍAÌÍA(ÌÍA8ÌÍAHÌÍAXÌÍAhÌÍAxÌÍAffAffAffAffA€ffA¬ffAŽffAŒffAÄffAÌffAÔffAÜffAäffAìffAôffAüffB33B33B
+33B33B33B33B33B
+33B"33B&33B*33B.33B233B633B:33B>33BB33BF33BJ33BN33BR33BV33BZ33B^33Bb33Bf33Bj33Bn33Br33Bv33Bz33B~33?
+=q?Å
+ž@"\@b\@G®@±G®@ÑG®@ñG®A£×A£×A(£×A8£×AH£×AX£×Ah£×Ax£×AQìAQìAQìAQìA€QìA¬QìAŽQìAŒQìAÄQìAÌQìAÔQìAÜQìAäQìAìQìAôQìAüQìB(öB(öB
+(öB(öB(öB(öB(öB
+(öB"(öB&(öB*(öB.(öB2(öB6(öB:(öB>(öBB(öBF(öBJ(öBN(öBR(öBV(öBZ(öB^(öBb(öBf(öBj(öBn(öBr(öBv(öBz(öB~(ö?®?Ã×
+@!ë
+@aë
+@õÂ@°õÂ@ÐõÂ@ðõÂAzáAzáA(záA8záAHzáAXzáAhzáAxzáA=qA=qA=qA=qA€=qA¬=qAŽ=qAŒ=qAÄ=qAÌ=qAÔ=qAÜ=qAä=qAì=qAô=qAü=qB
+žB
+žB
+
+žB
+žB
+žB
+žB
+žB
+
+žB"
+žB&
+žB*
+žB.
+žB2
+žB6
+žB:
+žB>
+žBB
+žBF
+žBJ
+žBN
+žBR
+žBV
+žBZ
+žB^
+žBb
+žBf
+žBj
+žBn
+žBr
+žBv
+žBz
+žB~
+ž?
+ž?Â\@!G®@aG®@£×@°£×@Ð£×@ð£×AQìAQìA(QìA8QìAHQìAXQìAhQìAxQìA(öA(öA(öA(öA€(öA¬(öAŽ(öAŒ(öAÄ(öAÌ(öAÔ(öAÜ(öAä(öAì(öAô(öAü(öB{B{B
+{B{B{B{B{B
+{B"{B&{B*{B.{B2{B6{B:{B>{BB{BF{BJ{BN{BR{BV{BZ{B^{Bb{Bf{Bj{Bn{Br{Bv{Bz{B~{?\?ÁG®@ £×@`£×@Qì@°Qì@ÐQì@ðQìA(öA(öA((öA8(öAH(öAX(öAh(öAx(öA{A{A{A{A€{A¬{AŽ{AŒ{AÄ{AÌ{AÔ{AÜ{Aä{Aì{Aô{Aü{B
+=B
+=B
+
+=B
+=B
+=B
+=B
+=B
+
+=B"
+=B&
+=B*
+=B.
+=B2
+=B6
+=B:
+=B>
+=BB
+=BF
+=BJ
+=BN
+=BR
+=BV
+=BZ
+=B^
+=Bb
+=Bf
+=Bj
+=Bn
+=Br
+=Bv
+=Bz
+=B~
+=?   ?À  @   @`  @  @°  @Ð  @ð  A  A  A(  A8  AH  AX  Ah  Ax  A  A  A  A  A€  A¬  AŽ  AŒ  AÄ  AÌ  AÔ  AÜ  Aä  Aì  Aô  Aü  B  B  B
+  B  B  B  B  B
+  B"  B&  B*  B.  B2  B6  B:  B>  BB  BF  BJ  BN  BR  BV  BZ  B^  Bb  Bf  Bj  Bn  Br  Bv  Bz  B~  >úáH?ŸžR@\)@_\)@®@¯®@Ï®@ï®A×
+A×
+A'×
+A7×
+AG×
+AW×
+Ag×
+Aw×
+Aë
+Aë
+Aë
+Aë
+A£ë
+A«ë
+A³ë
+A»ë
+AÃë
+AËë
+AÓë
+AÛë
+Aãë
+Aëë
+Aóë
+Aûë
+BõÃBõÃB	õÃB
+õÃBõÃBõÃBõÃB
+õÃB!õÃB%õÃB)õÃB-õÃB1õÃB5õÃB9õÃB=õÃBAõÃBEõÃBIõÃBMõÃBQõÃBUõÃBYõÃB]õÃBaõÃBeõÃBiõÃBmõÃBqõÃBuõÃByõÃB}õÃ>õÂ?œp€@
+žR@^žR@\)@¯\)@Ï\)@ï\)A®A®A'®A7®AG®AW®Ag®Aw®A×
+A×
+A×
+A×
+A£×
+A«×
+A³×
+A»×
+AÃ×
+AË×
+AÓ×
+AÛ×
+Aã×
+Aë×
+Aó×
+Aû×
+Bë
+Bë
+B	ë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+B!ë
+B%ë
+B)ë
+B-ë
+B1ë
+B5ë
+B9ë
+B=ë
+BAë
+BEë
+BIë
+BMë
+BQë
+BUë
+BYë
+B]ë
+Baë
+Beë
+Bië
+Bmë
+Bqë
+Buë
+Byë
+B}ë
+>ð£×?Œ(ö@
+{@^{@
+=@¯
+=@Ï
+=@ï
+=A
+A
+A'
+A7
+AG
+AW
+Ag
+Aw
+AÂAÂAÂAÂA£ÂA«ÂA³ÂA»ÂAÃÂAËÂAÓÂAÛÂAãÂAëÂAóÂAûÂBáHBáHB	áHB
+áHBáHBáHBáHB
+áHB!áHB%áHB)áHB-áHB1áHB5áHB9áHB=áHBAáHBEáHBIáHBMáHBQáHBUáHBYáHB]áHBaáHBeáHBiáHBmáHBqáHBuáHByáHB}áH>ë
+?ºáH@
+p€@]p€@žR@®žR@ÎžR@îžRA\)A\)A'\)A7\)AG\)AW\)Ag\)Aw\)A®A®A®A®A£®A«®A³®A»®AÃ®AË®AÓ®AÛ®Aã®Aë®Aó®Aû®B×
+B×
+B	×
+B
+×
+B×
+B×
+B×
+B
+×
+B!×
+B%×
+B)×
+B-×
+B1×
+B5×
+B9×
+B=×
+BA×
+BE×
+BI×
+BM×
+BQ×
+BU×
+BY×
+B]×
+Ba×
+Be×
+Bi×
+Bm×
+Bq×
+Bu×
+By×
+B}×
+>æff?¹@
+ÌÍ@\ÌÍ@ff@®ff@Îff@îffA33A33A'33A733AG33AW33Ag33Aw33AAAAA£A«A³A»AÃAËAÓAÛAãAëAóAûBÌÍBÌÍB	ÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍB!ÌÍB%ÌÍB)ÌÍB-ÌÍB1ÌÍB5ÌÍB9ÌÍB=ÌÍBAÌÍBEÌÍBIÌÍBMÌÍBQÌÍBUÌÍBYÌÍB]ÌÍBaÌÍBeÌÍBiÌÍBmÌÍBqÌÍBuÌÍByÌÍB}ÌÍ>áG®?žQì@
+(ö@\(ö@{@®{@Î{@î{A
+=A
+=A'
+=A7
+=AG
+=AW
+=Ag
+=Aw
+=A
+A
+A
+A
+A£
+A«
+A³
+A»
+AÃ
+AË
+AÓ
+AÛ
+Aã
+Aë
+Aó
+Aû
+BÂBÂB	ÂB
+ÂBÂBÂBÂB
+ÂB!ÂB%ÂB)ÂB-ÂB1ÂB5ÂB9ÂB=ÂBAÂBEÂBIÂBMÂBQÂBUÂBYÂB]ÂBaÂBeÂBiÂBmÂBqÂBuÂByÂB}Â>Ü(ö?·
+>@
+@[
+@Â@­Â@ÍÂ@íÂAáHAáHA&áHA6áHAFáHAVáHAfáHAváHAp€Ap€Ap€Ap€A£p€A«p€A³p€A»p€AÃp€AËp€AÓp€AÛp€Aãp€Aëp€Aóp€Aûp€BžRBžRB	žRB
+žRBžRBžRBžRB
+žRB!žRB%žRB)žRB-žRB1žRB5žRB9žRB=žRBAžRBEžRBIžRBMžRBQžRBUžRBYžRB]žRBažRBežRBižRBmžRBqžRBužRByžRB}žR>×
+=?µÂ@áH@ZáH@p€@­p€@Íp€@íp€AžRAžRA&žRA6žRAFžRAVžRAfžRAvžRA\)A\)A\)A\)A£\)A«\)A³\)A»\)AÃ\)AË\)AÓ\)AÛ\)Aã\)Aë\)Aó\)Aû\)B®B®B	®B
+®B®B®B®B
+®B!®B%®B)®B-®B1®B5®B9®B=®BA®BE®BI®BM®BQ®BU®BY®B]®Ba®Be®Bi®Bm®Bq®Bu®By®B}®>Ñë
+?Žzá@=q@Z=q@
+ž@­
+ž@Í
+ž@í
+žA\A\A&\A6\AF\AV\Af\Av\AG®AG®AG®AG®A£G®A«G®A³G®A»G®AÃG®AËG®AÓG®AÛG®AãG®AëG®AóG®AûG®B£×B£×B	£×B
+£×B£×B£×B£×B
+£×B!£×B%£×B)£×B-£×B1£×B5£×B9£×B=£×BA£×BE£×BI£×BM£×BQ£×BU£×BY£×B]£×Ba£×Be£×Bi£×Bm£×Bq£×Bu£×By£×B}£×>ÌÌÍ?³33@@Y@ÌÍ@¬ÌÍ@ÌÌÍ@ìÌÍAffAffA&ffA6ffAFffAVffAfffAvffA33A33A33A33A£33A«33A³33A»33AÃ33AË33AÓ33AÛ33Aã33Aë33Aó33Aû33BBB	B
+BBBB
+B!B%B)B-B1B5B9B=BABEBIBMBQBUBYB]BaBeBiBmBqBuByB}>Ç®?±ë
+@õÂ@XõÂ@zá@¬zá@Ìzá@ìzáA=qA=qA&=qA6=qAF=qAV=qAf=qAv=qA
+žA
+žA
+žA
+žA£
+žA«
+žA³
+žA»
+žAÃ
+žAË
+žAÓ
+žAÛ
+žAã
+žAë
+žAó
+žAû
+žB\B\B	\B
+\B\B\B\B
+\B!\B%\B)\B-\B1\B5\B9\B=\BA\BE\BI\BM\BQ\BU\BY\B]\Ba\Be\Bi\Bm\Bq\Bu\By\B}\>Â\?°£×@Qì@XQì@(ö@¬(ö@Ì(ö@ì(öA{A{A&{A6{AF{AV{Af{Av{A
+=A
+=A
+=A
+=A£
+=A«
+=A³
+=A»
+=AÃ
+=AË
+=AÓ
+=AÛ
+=Aã
+=Aë
+=Aó
+=Aû
+=B
+B
+B	
+B
+
+B
+B
+B
+B
+
+B!
+B%
+B)
+B-
+B1
+B5
+B9
+B=
+BA
+BE
+BI
+BM
+BQ
+BU
+BY
+B]
+Ba
+Be
+Bi
+Bm
+Bq
+Bu
+By
+B}
+>œp€?¯\)@®@W®@×
+@«×
+@Ë×
+@ë×
+Aë
+Aë
+A%ë
+A5ë
+AEë
+AUë
+Aeë
+Auë
+AõÃAõÃAõÃAõÃA¢õÃAªõÃA²õÃAºõÃAÂõÃAÊõÃAÒõÃAÚõÃAâõÃAêõÃAòõÃAúõÃBzáBzáB	záB
+záBzáBzáBzáB
+záB!záB%záB)záB-záB1záB5záB9záB=záBAzáBEzáBIzáBMzáBQzáBUzáBYzáB]záBazáBezáBizáBmzáBqzáBuzáByzáB}zá>žQì?®{@
+>@W
+>@
+@«
+@Ë
+@ë
+AÂAÂA%ÂA5ÂAEÂAUÂAeÂAuÂAáHAáHAáHAáHA¢áHAªáHA²áHAºáHAÂáHAÊáHAÒáHAÚáHAâáHAêáHAòáHAúáHBp€Bp€B	p€B
+p€Bp€Bp€Bp€B
+p€B!p€B%p€B)p€B-p€B1p€B5p€B9p€B=p€BAp€BEp€BIp€BMp€BQp€BUp€BYp€B]p€Bap€Bep€Bip€Bmp€Bqp€Bup€Byp€B}p€>³33?¬ÌÍ@ff@Vff@33@«33@Ë33@ë33AAA%A5AEAUAeAuAÌÍAÌÍAÌÍAÌÍA¢ÌÍAªÌÍA²ÌÍAºÌÍAÂÌÍAÊÌÍAÒÌÍAÚÌÍAâÌÍAêÌÍAòÌÍAúÌÍBffBffB	ffB
+ffBffBffBffB
+ffB!ffB%ffB)ffB-ffB1ffB5ffB9ffB=ffBAffBEffBIffBMffBQffBUffBYffB]ffBaffBeffBiffBmffBqffBuffByffB}ff>®{?«
+@Â@UÂ@áH@ªáH@ÊáH@êáHAp€Ap€A%p€A5p€AEp€AUp€Aep€Aup€AžRAžRAžRAžRA¢žRAªžRA²žRAºžRAÂžRAÊžRAÒžRAÚžRAâžRAêžRAòžRAúžRB\)B\)B	\)B
+\)B\)B\)B\)B
+\)B!\)B%\)B)\)B-\)B1\)B5\)B9\)B=\)BA\)BE\)BI\)BM\)BQ\)BU\)BY\)B]\)Ba\)Be\)Bi\)Bm\)Bq\)Bu\)By\)B}\)>šõÃ?ª=q@
+ž@U
+ž@\@ª\@Ê\@ê\AG®AG®A%G®A5G®AEG®AUG®AeG®AuG®A£×A£×A£×A£×A¢£×Aª£×A²£×Aº£×AÂ£×AÊ£×AÒ£×AÚ£×Aâ£×Aê£×Aò£×Aú£×BQìBQìB	QìB
+QìBQìBQìBQìB
+QìB!QìB%QìB)QìB-QìB1QìB5QìB9QìB=QìBAQìBEQìBIQìBMQìBQQìBUQìBYQìB]QìBaQìBeQìBiQìBmQìBqQìBuQìByQìB}Qì>£×
+?šõÂ@zá@Tzá@=q@ª=q@Ê=q@ê=qA
+žA
+žA%
+žA5
+žAE
+žAU
+žAe
+žAu
+žA\A\A\A\A¢\Aª\A²\Aº\AÂ\AÊ\AÒ\AÚ\Aâ\Aê\Aò\Aú\BG®BG®B	G®B
+G®BG®BG®BG®B
+G®B!G®B%G®B)G®B-G®B1G®B5G®B9G®B=G®BAG®BEG®BIG®BMG®BQG®BUG®BYG®B]G®BaG®BeG®BiG®BmG®BqG®BuG®ByG®B}G®>žR?§®@×
+@S×
+@ë
+@©ë
+@Éë
+@éë
+AõÃAõÃA$õÃA4õÃADõÃATõÃAdõÃAtõÃAzáAzáAzáAzáA¢záAªzáA²záAºzáAÂzáAÊzáAÒzáAÚzáAâzáAêzáAòzáAúzáB=qB=qB	=qB
+=qB=qB=qB=qB
+=qB!=qB%=qB)=qB-=qB1=qB5=qB9=qB==qBA=qBE=qBI=qBM=qBQ=qBU=qBY=qB]=qBa=qBe=qBi=qBm=qBq=qBu=qBy=qB}=q>?Šff@33@S33@@©@É@éAÌÍAÌÍA$ÌÍA4ÌÍADÌÍATÌÍAdÌÍAtÌÍAffAffAffAffA¢ffAªffA²ffAºffAÂffAÊffAÒffAÚffAâffAêffAòffAúffB33B33B	33B
+33B33B33B33B
+33B!33B%33B)33B-33B133B533B933B=33BA33BE33BI33BM33BQ33BU33BY33B]33Ba33Be33Bi33Bm33Bq33Bu33By33B}33>zá?¥
+ž@\@R\@G®@©G®@ÉG®@éG®A£×A£×A$£×A4£×AD£×AT£×Ad£×At£×AQìAQìAQìAQìA¢QìAªQìA²QìAºQìAÂQìAÊQìAÒQìAÚQìAâQìAêQìAòQìAúQìB(öB(öB	(öB
+(öB(öB(öB(öB
+(öB!(öB%(öB)(öB-(öB1(öB5(öB9(öB=(öBA(öBE(öBI(öBM(öBQ(öBU(öBY(öB](öBa(öBe(öBi(öBm(öBq(öBu(öBy(öB}(ö>\)?£×
+@ë
+@Që
+@õÃ@šõÃ@ÈõÃ@èõÃAzáAzáA$záA4záADzáATzáAdzáAtzáA=qA=qA=qA=qA¢=qAª=qA²=qAº=qAÂ=qAÊ=qAÒ=qAÚ=qAâ=qAê=qAò=qAú=qB
+žB
+žB	
+žB
+
+žB
+žB
+žB
+žB
+
+žB!
+žB%
+žB)
+žB-
+žB1
+žB5
+žB9
+žB=
+žBA
+žBE
+žBI
+žBM
+žBQ
+žBU
+žBY
+žB]
+žBa
+žBe
+žBi
+žBm
+žBq
+žBu
+žBy
+žB}
+ž>=q?¢\@G®@QG®@£×@š£×@È£×@è£×AQìAQìA$QìA4QìADQìATQìAdQìAtQìA(öA(öA(öA(öA¢(öAª(öA²(öAº(öAÂ(öAÊ(öAÒ(öAÚ(öAâ(öAê(öAò(öAú(öB{B{B	{B
+{B{B{B{B
+{B!{B%{B){B-{B1{B5{B9{B={BA{BE{BI{BM{BQ{BU{BY{B]{Ba{Be{Bi{Bm{Bq{Bu{By{B}{>
+
+ž?¡G®@£×@P£×@Qì@šQì@ÈQì@èQìA(öA(öA$(öA4(öAD(öAT(öAd(öAt(öA{A{A{A{A¢{Aª{A²{Aº{AÂ{AÊ{AÒ{AÚ{Aâ{Aê{Aò{Aú{B
+=B
+=B	
+=B
+=B
+=B
+=B
+=B
+
+=B!
+=B%
+=B)
+=B-
+=B1
+=B5
+=B9
+=B=
+=BA
+=BE
+=BI
+=BM
+=BQ
+=BU
+=BY
+=B]
+=Ba
+=Be
+=Bi
+=Bm
+=Bq
+=Bu
+=By
+=B}
+=>  ?   @  @P  @  @š  @È  @è  A  A  A$  A4  AD  AT  Ad  At  A  A  A  A  A¢  Aª  A²  Aº  AÂ  AÊ  AÒ  AÚ  Aâ  Aê  Aò  Aú  B  B  B	  B
+  B  B  B  B
+  B!  B%  B)  B-  B1  B5  B9  B=  BA  BE  BI  BM  BQ  BU  BY  B]  Ba  Be  Bi  Bm  Bq  Bu  By  B}  >uÂ?žR@\)@O\)@®@§®@Ç®@ç®A×
+A×
+A#×
+A3×
+AC×
+AS×
+Ac×
+As×
+Aë
+Aë
+Aë
+Aë
+A¡ë
+A©ë
+A±ë
+A¹ë
+AÁë
+AÉë
+AÑë
+AÙë
+Aáë
+Aéë
+Añë
+Aùë
+B õÃBõÃBõÃB
+õÃBõÃBõÃBõÃB
+õÃB õÃB$õÃB(õÃB,õÃB0õÃB4õÃB8õÃB<õÃB@õÃBDõÃBHõÃBLõÃBPõÃBTõÃBXõÃB\õÃB`õÃBdõÃBhõÃBlõÃBpõÃBtõÃBxõÃB|õÃ>k
+?p€@žR@NžR@\)@§\)@Ç\)@ç\)A®A®A#®A3®AC®AS®Ac®As®A×
+A×
+A×
+A×
+A¡×
+A©×
+A±×
+A¹×
+AÁ×
+AÉ×
+AÑ×
+AÙ×
+Aá×
+Aé×
+Añ×
+Aù×
+B ë
+Bë
+Bë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+B ë
+B$ë
+B(ë
+B,ë
+B0ë
+B4ë
+B8ë
+B<ë
+B@ë
+BDë
+BHë
+BLë
+BPë
+BTë
+BXë
+B\ë
+B`ë
+Bdë
+Bhë
+Blë
+Bpë
+Btë
+Bxë
+B|ë
+>aG®?(ö@{@N{@
+=@§
+=@Ç
+=@ç
+=A
+A
+A#
+A3
+AC
+AS
+Ac
+As
+AÂAÂAÂAÂA¡ÂA©ÂA±ÂA¹ÂAÁÂAÉÂAÑÂAÙÂAáÂAéÂAñÂAùÂB áHBáHBáHB
+áHBáHBáHBáHB
+áHB áHB$áHB(áHB,áHB0áHB4áHB8áHB<áHB@áHBDáHBHáHBLáHBPáHBTáHBXáHB\áHB`áHBdáHBháHBláHBpáHBtáHBxáHB|áH>W
+=?áH@
+p€@Mp€@žR@ŠžR@ÆžR@æžRA\)A\)A#\)A3\)AC\)AS\)Ac\)As\)A®A®A®A®A¡®A©®A±®A¹®AÁ®AÉ®AÑ®AÙ®Aá®Aé®Añ®Aù®B ×
+B×
+B×
+B
+×
+B×
+B×
+B×
+B
+×
+B ×
+B$×
+B(×
+B,×
+B0×
+B4×
+B8×
+B<×
+B@×
+BD×
+BH×
+BL×
+BP×
+BT×
+BX×
+B\×
+B`×
+Bd×
+Bh×
+Bl×
+Bp×
+Bt×
+Bx×
+B|×
+>LÌÍ?@
+ÌÍ@LÌÍ@ff@Šff@Æff@æffA33A33A#33A333AC33AS33Ac33As33AAAAA¡A©A±A¹AÁAÉAÑAÙAáAéAñAùB ÌÍBÌÍBÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍB ÌÍB$ÌÍB(ÌÍB,ÌÍB0ÌÍB4ÌÍB8ÌÍB<ÌÍB@ÌÍBDÌÍBHÌÍBLÌÍBPÌÍBTÌÍBXÌÍB\ÌÍB`ÌÍBdÌÍBhÌÍBlÌÍBpÌÍBtÌÍBxÌÍB|ÌÍ>B\?Qì@
+(ö@L(ö@{@Š{@Æ{@æ{A
+=A
+=A#
+=A3
+=AC
+=AS
+=Ac
+=As
+=A
+A
+A
+A
+A¡
+A©
+A±
+A¹
+AÁ
+AÉ
+AÑ
+AÙ
+Aá
+Aé
+Añ
+Aù
+B ÂBÂBÂB
+ÂBÂBÂBÂB
+ÂB ÂB$ÂB(ÂB,ÂB0ÂB4ÂB8ÂB<ÂB@ÂBDÂBHÂBLÂBPÂBTÂBXÂB\ÂB`ÂBdÂBhÂBlÂBpÂBtÂBxÂB|Â>8Qì?
+>@
+
+@K
+@
+Â@¥Â@ÅÂ@åÂAáHAáHA"áHA2áHABáHARáHAbáHAráHAp€Ap€Ap€Ap€A¡p€A©p€A±p€A¹p€AÁp€AÉp€AÑp€AÙp€Aáp€Aép€Añp€Aùp€B žRBžRBžRB
+žRBžRBžRBžRB
+žRB žRB$žRB(žRB,žRB0žRB4žRB8žRB<žRB@žRBDžRBHžRBLžRBPžRBTžRBXžRB\žRB`žRBdžRBhžRBlžRBpžRBtžRBxžRB|žR>.{?Â@
+áH@JáH@
+p€@¥p€@Åp€@åp€AžRAžRA"žRA2žRABžRARžRAbžRAržRA\)A\)A\)A\)A¡\)A©\)A±\)A¹\)AÁ\)AÉ\)AÑ\)AÙ\)Aá\)Aé\)Añ\)Aù\)B ®B®B®B
+®B®B®B®B
+®B ®B$®B(®B,®B0®B4®B8®B<®B@®BD®BH®BL®BP®BT®BX®B\®B`®Bd®Bh®Bl®Bp®Bt®Bx®B|®>#×
+?zá@
+=q@J=q@
+
+ž@¥
+ž@Å
+ž@å
+žA\A\A"\A2\AB\AR\Ab\Ar\AG®AG®AG®AG®A¡G®A©G®A±G®A¹G®AÁG®AÉG®AÑG®AÙG®AáG®AéG®AñG®AùG®B £×B£×B£×B
+£×B£×B£×B£×B
+£×B £×B$£×B(£×B,£×B0£×B4£×B8£×B<£×B@£×BD£×BH£×BL£×BP£×BT£×BX£×B\£×B`£×Bd£×Bh£×Bl£×Bp£×Bt£×Bx£×B|£×>?33@	@I@ÌÍ@€ÌÍ@ÄÌÍ@äÌÍAffAffA"ffA2ffABffARffAbffArffA33A33A33A33A¡33A©33A±33A¹33AÁ33AÉ33AÑ33AÙ33Aá33Aé33Añ33Aù33B BBB
+BBBB
+B B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|>\)?ë
+@õÃ@HõÃ@zá@€zá@Äzá@äzáA=qA=qA"=qA2=qAB=qAR=qAb=qAr=qA
+žA
+žA
+žA
+žA¡
+žA©
+žA±
+žA¹
+žAÁ
+žAÉ
+žAÑ
+žAÙ
+žAá
+žAé
+žAñ
+žAù
+žB \B\B\B
+\B\B\B\B
+\B \B$\B(\B,\B0\B4\B8\B<\B@\BD\BH\BL\BP\BT\BX\B\\B`\Bd\Bh\Bl\Bp\Bt\Bx\B|\>
+ž?£×@Qì@HQì@(ö@€(ö@Ä(ö@ä(öA{A{A"{A2{AB{AR{Ab{Ar{A
+=A
+=A
+=A
+=A¡
+=A©
+=A±
+=A¹
+=AÁ
+=AÉ
+=AÑ
+=AÙ
+=Aá
+=Aé
+=Añ
+=Aù
+=B 
+B
+B
+B
+
+B
+B
+B
+B
+
+B 
+B$
+B(
+B,
+B0
+B4
+B8
+B<
+B@
+BD
+BH
+BL
+BP
+BT
+BX
+B\
+B`
+Bd
+Bh
+Bl
+Bp
+Bt
+Bx
+B|
+=õÂ?\)@®@G®@×
+@£×
+@Ã×
+@ã×
+Aë
+Aë
+A!ë
+A1ë
+AAë
+AQë
+Aaë
+Aqë
+AõÃAõÃAõÃAõÃA õÃAšõÃA°õÃAžõÃAÀõÃAÈõÃAÐõÃAØõÃAàõÃAèõÃAðõÃAøõÃB záBzáBzáB
+záBzáBzáBzáB
+záB záB$záB(záB,záB0záB4záB8záB<záB@záBDzáBHzáBLzáBPzáBTzáBXzáB\záB`záBdzáBhzáBlzáBpzáBtzáBxzáB|zá=áG®?{@
+=@G
+=@
+@£
+@Ã
+@ã
+AÂAÂA!ÂA1ÂAAÂAQÂAaÂAqÂAáHAáHAáHAáHA áHAšáHA°áHAžáHAÀáHAÈáHAÐáHAØáHAàáHAèáHAðáHAøáHB p€Bp€Bp€B
+p€Bp€Bp€Bp€B
+p€B p€B$p€B(p€B,p€B0p€B4p€B8p€B<p€B@p€BDp€BHp€BLp€BPp€BTp€BXp€B\p€B`p€Bdp€Bhp€Blp€Bpp€Btp€Bxp€B|p€=ÌÌÍ?ÌÍ@ff@Fff@33@£33@Ã33@ã33AAA!A1AAAQAaAqAÌÍAÌÍAÌÍAÌÍA ÌÍAšÌÍA°ÌÍAžÌÍAÀÌÍAÈÌÍAÐÌÍAØÌÍAàÌÍAèÌÍAðÌÍAøÌÍB ffBffBffB
+ffBffBffBffB
+ffB ffB$ffB(ffB,ffB0ffB4ffB8ffB<ffB@ffBDffBHffBLffBPffBTffBXffB\ffB`ffBdffBhffBlffBpffBtffBxffB|ff=žQì?
+@Â@EÂ@áH@¢áH@ÂáH@âáHAp€Ap€A!p€A1p€AAp€AQp€Aap€Aqp€AžRAžRAžRAžRA žRAšžRA°žRAžžRAÀžRAÈžRAÐžRAØžRAàžRAèžRAðžRAøžRB \)B\)B\)B
+\)B\)B\)B\)B
+\)B \)B$\)B(\)B,\)B0\)B4\)B8\)B<\)B@\)BD\)BH\)BL\)BP\)BT\)BX\)B\\)B`\)Bd\)Bh\)Bl\)Bp\)Bt\)Bx\)B|\)=£×
+?=q@
+ž@E
+ž@\@¢\@Â\@â\AG®AG®A!G®A1G®AAG®AQG®AaG®AqG®A£×A£×A£×A£×A £×Aš£×A°£×Až£×AÀ£×AÈ£×AÐ£×AØ£×Aà£×Aè£×Að£×Aø£×B QìBQìBQìB
+QìBQìBQìBQìB
+QìB QìB$QìB(QìB,QìB0QìB4QìB8QìB<QìB@QìBDQìBHQìBLQìBPQìBTQìBXQìB\QìB`QìBdQìBhQìBlQìBpQìBtQìBxQìB|Qì=\)?õÃ@zá@Dzá@=q@¢=q@Â=q@â=qA
+žA
+žA!
+žA1
+žAA
+žAQ
+žAa
+žAq
+žA\A\A\A\A \Aš\A°\Až\AÀ\AÈ\AÐ\AØ\Aà\Aè\Að\Aø\B G®BG®BG®B
+G®BG®BG®BG®B
+G®B G®B$G®B(G®B,G®B0G®B4G®B8G®B<G®B@G®BDG®BHG®BLG®BPG®BTG®BXG®B\G®B`G®BdG®BhG®BlG®BpG®BtG®BxG®B|G®=uÂ?®@×
+@C×
+@ë
+@¡ë
+@Áë
+@áë
+A õÃAõÃA õÃA0õÃA@õÃAPõÃA`õÃApõÃAzáAzáAzáAzáA záAšzáA°záAžzáAÀzáAÈzáAÐzáAØzáAàzáAèzáAðzáAøzáB =qB=qB=qB
+=qB=qB=qB=qB
+=qB =qB$=qB(=qB,=qB0=qB4=qB8=qB<=qB@=qBD=qBH=qBL=qBP=qBT=qBX=qB\=qB`=qBd=qBh=qBl=qBp=qBt=qBx=qB|=q=LÌÍ?ff@33@C33@@¡@Á@áA ÌÍAÌÍA ÌÍA0ÌÍA@ÌÍAPÌÍA`ÌÍApÌÍAffAffAffAffA ffAšffA°ffAžffAÀffAÈffAÐffAØffAàffAèffAðffAøffB 33B33B33B
+33B33B33B33B
+33B 33B$33B(33B,33B033B433B833B<33B@33BD33BH33BL33BP33BT33BX33B\33B`33Bd33Bh33Bl33Bp33Bt33Bx33B|33=#×
+?
+
+ž@\@B\@G®@¡G®@ÁG®@áG®A £×A£×A £×A0£×A@£×AP£×A`£×Ap£×AQìAQìAQìAQìA QìAšQìA°QìAžQìAÀQìAÈQìAÐQìAØQìAàQìAèQìAðQìAøQìB (öB(öB(öB
+(öB(öB(öB(öB
+(öB (öB$(öB((öB,(öB0(öB4(öB8(öB<(öB@(öBD(öBH(öBL(öBP(öBT(öBX(öB\(öB`(öBd(öBh(öBl(öBp(öBt(öBx(öB|(ö<õÂ?×
+@ë
+@Aë
+@õÃ@ õÃ@ÀõÃ@àõÃA záAzáA záA0záA@záAPzáA`záApzáA=qA=qA=qA=qA =qAš=qA°=qAž=qAÀ=qAÈ=qAÐ=qAØ=qAà=qAè=qAð=qAø=qB 
+žB
+žB
+žB
+
+žB
+žB
+žB
+žB
+
+žB 
+žB$
+žB(
+žB,
+žB0
+žB4
+žB8
+žB<
+žB@
+žBD
+žBH
+žBL
+žBP
+žBT
+žBX
+žB\
+žB`
+žBd
+žBh
+žBl
+žBp
+žBt
+žBx
+žB|
+ž<£×
+?\@G®@AG®@£×@ £×@À£×@à£×A QìAQìA QìA0QìA@QìAPQìA`QìApQìA(öA(öA(öA(öA (öAš(öA°(öAž(öAÀ(öAÈ(öAÐ(öAØ(öAà(öAè(öAð(öAø(öB {B{B{B
+{B{B{B{B
+{B {B${B({B,{B0{B4{B8{B<{B@{BD{BH{BL{BP{BT{BX{B\{B`{Bd{Bh{Bl{Bp{Bt{Bx{B|{<#×
+?G®@ £×@@£×@Qì@ Qì@ÀQì@àQìA (öA(öA (öA0(öA@(öAP(öA`(öAp(öA{A{A{A{A {Aš{A°{Až{AÀ{AÈ{AÐ{AØ{Aà{Aè{Að{Aø{B 
+=B
+=B
+=B
+
+=B
+=B
+=B
+=B
+
+=B 
+=B$
+=B(
+=B,
+=B0
+=B4
+=B8
+=B<
+=B@
+=BD
+=BH
+=BL
+=BP
+=BT
+=BX
+=B\
+=B`
+=Bd
+=Bh
+=Bl
+=Bp
+=Bt
+=Bx
+=B|
+=    ?  @   @@  @  @   @À  @à  A   A  A   A0  A@  AP  A`  Ap  A  A  A  A  A   Aš  A°  Až  AÀ  AÈ  AÐ  AØ  Aà  Aè  Að  Aø  B   B  B  B
+  B  B  B  B
+  B   B$  B(  B,  B0  B4  B8  B<  B@  BD  BH  BL  BP  BT  BX  B\  B`  Bd  Bh  Bl  Bp  Bt  Bx  B|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?!1?)ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+Æ?(þ?¯m®@ý¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?óô?$h,?­E@:@29Q@_¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?U"? É:?«ÎÌ@}@1Q@_«@]â@D¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?¶P?
+*h?©ÿb@ŽÈ@0ià@^
+ø@
+ê@Ä@³ @ÊB¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ??w?š/ê@Í
+@/#@]7;@
+v)@P¶@³+B@ÊÎ@ààZ@÷Œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+x­?ì¥?Š`@ åX@.o@\O@
+O@ÜÜ@²·g@Éô@àl@÷G
+AÌAb|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?ÙÚ?M³?€?ÿû6@-²²@[gÊ@q@hý@²C@É
+@ßø¡@öÓ.AÖÜAD"A
+±hA)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?;	?®á?¢Á?þ+Î@,Êþ@Z@@õ#@±Ï¯@Èª;@ßÈ@ö_TAðA
+5A
+wzA(äÀA4RA?£¶¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ? 7?
+? ò6?ü\e@+ãJ@Ya@Šœ@I@±[Õ@È6a@ßí@õëyAcAÐHA
+=A(ªÓA4A?
+^AJò€AVDT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ùúÊ?q
+?"Ÿ?úì@*û@X°€@2Þ@
+j@°ç÷@ÇÂ@Þ@õwA)AYA
+A(päA3Þ*A?KoAJžŽAV%úAa@Aläð¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >òœ(?ÒL?SU?øœ@*Ù@WÈð@¿@@°t
+@ÇNš@Þ)5@õÁAï&A\lA
+É±A(6÷A3€<A?AJ~ÈAUì
+AaYRAlÆAx3ÞAÂÇ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ë? 3Z?Ü?öî
+@),
+@Vá4@K&@%³@° >@ÆÚÊ@ÝµV@ôâAµ7A"}A
+ÂA'ýA3jMA>×AJDØAU²
+AadAl©AwùîA³Aj=A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >äAà>ù)?Žs?õ
+¢@(Dh@Uù@×L@±Ø@¯d@Æfñ@ÝA|@ô
+A{IAèA
+UÕA'ÃA30`A>ŠAJ
+ëAUx1A`åvAlRŒAwÀA€AMHAëAºAcf¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ý<>ñë,?äú?óO)@'\¬@UÃ@cm@=ú@¯
+@Åó@ÜÍ@óš+AA[A® A
+åA'+A2öqA>c·AIÐüAU>BA`«AlÍAwAy­A0PAæóAAT:A
+ÜA£³µ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ÕÆ>ê­??ñÀ@&t÷@T*@ï@Ê@®€«@Å8@ÜYÃ@ó4PAnAt³AáùA'O>A2ŒA>)ÉAIAUUA`qAkÞàAwL%A\¶AYAÉýA A7CAíçA£€A©[,A¯¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Îõ>ão€?F?ï°G@%;@SBR@{µ@VA@®0Í@Å
+Y@Ûåå@òÀqAÍ~A:ÄAš
+A'OA2A=ïÚAI]ATÊeA`7«Ak€ñAw6A?ŸAöaA­AcšALAÐïA£A©>6A®ôÙAŽ«{AºTT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ÇKQ>Ü2?v¯?íàÞ@$¥@RZ@Û@âg@­Œó@Ä@Ûr
+@òLAA ÖAn
+A&ÛbA2HšA=µíAI#3ATxA_ýœAkkAvØIA"ÈAÙkAAF±AýUA³øA£jA©!?A®×âAŽAºE)A¿ûËAÅ€€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >À
+®>Ôô
+?§6?ìe@#œÊ@Qrá@'ù@n@­I@Ä#¡@Úþ-@ñØ¹AY¢AÆèA4-A&¡rA2žA={þAHéDATVA_ÃÏAk1AvYAÐAŒsAsA)ºAà]A A£M€A©GA®ºëAŽqAº(1A¿ÞÕAÅxAËLAÐôó¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >žÐ
+>Í¶z?×Î?êAü@"Ö@P-@~@E@ú®@¬Õ;@Ã¯Ç@ÚS@ñdßAµAúAú@A&gA1ÔËA=BAH¯VAT
+A_âAj÷'AvdmAèÚA}AV!A
+ÃAÃfAz
+A£0­AšçPA®ôAŽTAº
+;A¿ÁÞAÅxAË/%AÐåÈAÖjAÜEC¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >±f>Æx?U?èr@!îY@O£p@}X@Ð@¬a\@Ã;è@Úu@ðñAåÆAS
+AÀQA&-A1ÜA="AHugASâ¬A_OòAjœ8Av*~AËâAA9)AïÌAŠpA]A£µAšÊYA®üAŽ7A¹îCA¿€æAÅ[AË-AÐÈÐAÖtAÜ6Aáì¹Aç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ªTÃ>¿:ó?8ì?æ£@!¥@N»»@|pÔ@ö@«í@ÂÈ@Ù¢@ð}&A«ÙAAdA%ó©A1`ïA<Î4AH;zASšÀA_AjJAuðA®ëAeA
+2AÒÖAyA@
+A¢öÀAš­bA®dAŽ©A¹ÑLA¿ïAÅ>AÊõ6AÐ«ÚAÖb}AÜ AáÏÄAçgAí=	Aòåâ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >£>·ý?is?äÓ¡@ 
+ç@MÓÿ@{@@«y€@ÂT0@Ù.Œ@ð	HAqéAß/ALuA%¹»A1' A<EAHASnÐA^ÜAjI\Au¶¡AôAHAÿ:AµÞAlA#%A¢ÙÈAškA®GA³ý±A¹ŽTA¿jøAÅ!AÊØ>AÐâAÖE
+AÛü)Aá²ÌAçioAí AòÖ¶AøXAþ61¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ù|>°¿??ã@@77@LìN@z¡g@+@@«Ì@ÁàX@Øºä@ïpA7þA¥CAA%ÎA0íA<ZZAGÇAS4äA^¢*AjpAu|µAtýA+ AâDAçAOA.A¢ŒÑAšsuA®*A³à»A¹_A¿NAÅ€AÊ»HAÐqëAÖ(AÛß2AáÕAçLyAí
+Aò¹¿AøpcAþ'BîÕBÃA¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >×>©è?
+Ê©?á4×@
+O@L@y¹²@·f@ªñ@Ál~@ØG
+@ï!AþAkVAØA%EáA0³&A< lAG²ARúøA^h=AiÕAuBÈAXAªAÅMA{ðA2Aé7A¢ÚAšV~A®
+!A³ÃÅA¹zhA¿1
+AÄç¯AÊQAÐTôAÖ
+AÛÂ;AáxÞAç/Aìæ%AòÉAøSlAþ
+BàYB»«BýB
+ki¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >^4>¢DD?û@?ßen@
+gÎ@K
+å@xÑþ@C@ª
+@Àø€@×Ó/@î­ŒAÄ#A1iA®A%
+ôA0y:A;æAGSÄARÁ
+A^.PAiAuÛA;A
+ñŽAšWA^úAAÌ@A¢äAš9A­ð*A³ŠÎA¹]qA¿AÄÊžAÊ[AÐ7ÿAÕî¡AÛ¥DAá[èAçAìÉ.AòÒAø6uAýíBÑÞB­0BB
+cÓB
+?%B¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  > > ?+×?Ý@
+@J51@wêJ@Ï±@©ª=@ÀÉ@×_U@î9âA6A
+÷|AdÁA$ÒA0?LA;¬AGØAR
+A]ôbAiašAtÎîA
+A
+ÔœAaABAø§A¯JA¢eíAš
+A­Ó4A³×A¹@zAŸ÷
+AÄ­ÁAÊdeAÐAÕÑ«AÛOAá>ñAæõAì¬8AòbÛAø~AýÐ"BÃcBŽBzB
+UXB
+0©B
+ûBçMB»¹¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >}ÅØ>Èü?\n?ÛÆ@e@IM}@w@[×@©6c@Àï@Öë{@íÆAPIA
+œA*ÕA$A0_A;r¥AFßêARM0A]ºvAi'»At A#A
+·ÆAnjA%
+AÛ±ATA¢H÷A§ÿA­¶=A³làA¹#AŸÚ'AÄÊAÊGnAÏþAÕŽµAÛkXAá!ûAæØAìAAòEäA÷üAý³+BŽçB9BkB
+FÜB
+".BýBØÑBŽ#BuBcá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >oJ>X?}
+?Ù÷3@°±@HeÈ@vá@çý@šÂ@¿@Öw¡@íR-A\A
+¡AðçA$^-A/ËsA;8žAF¥ýARCA]AhíÎAt[AÈYA
+ÐAQsAAŸºAu]A¢,A§â€A­GA³OêA¹AŸœ0AÄsÔAÊ*wAÏáAÕŸAÛNaAáAæ»šAìrKAò(ïA÷ßAý4BŠlBŸB]B
+8aB
+³BïBÊVB¥šBùB\KB
+7B!
+	¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >`ÏI>
+Mµ?y{8?Ø'Ë@Èý@G~@u3,@t"@šN®@¿);@ÖÆ@ìÞSAÜoA
+IµA¶úA$$?A/
+A:þËAFlAQÙVA]FAh³áAt!&AlA
+}ÙA4|Aë A¡ÃAXfA¢
+A§Å­A­|QA³2ôAžéAŸ :AÄVÝAÊ
+AÏÄ$AÕzÇAÛ1jAàèAæ±AìUUAò
+øA÷ÂAýy?BñBsBBNB
+)æB
+7BàB»ÛB,Br~BMÐB
+)!B!sB#ßÅB&Ž1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >RT >|  ?uÜf?ÖXb@áH@F_@tKw@ H@§ÚÔ@Ÿµ`@Õì@ìjyA¢A
+ÇA}
+A#êSA/WA:ÄÝAF2#AQiA]
+¯AhyôAsç9ATA
+`ãAAÎ)AÌA;pA¡òA§š¶A­_ZA³ýAžÌ¡AŸDAÄ9çAÉðAÏ§-AÕ]ÐAÛtAàËAæºAì8^AñïA÷¥¥Aý\HBuBdÇB@B
+jB
+öŒBÒB­_B±BdB?TB
+ŠB õøB#ÑIB&¬B)íB,\Y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >CØž>m€Ø?r=?Ôù@ù@E®«@scÃ@m@§fú@ŸA@Õ
+@ëöAhA
+ÕÚAC A#°eA/
+«A:ñAEø6AQe{A\ÒÁAh@As­MAA
+CìAúA±3AgÖA
+yA¡Õ
+A§ÀA­BcA²ùAž¯ªAŸfMAÄ
+ñAÉÓAÏ7AÕ@ÚAÚ÷}Aà® AædÄAìgAñÒ
+A÷®Aý?QBzúBVLB1B
+
+ïB
+èABÃBäBz6BUB0ÙB
+
++B ç|B#ÂÎB& B)yqB,TÃB/0B2¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >5]q>_)?nÃ?Ò¹@ß@DÆö@r|@@Šó@œÍ«@Ôš8@ëÄA.šA
+íA	3A#vxA.ãŸA:QAEŸIAQ+A\ÔAhAss_A~à¥A
+&öAÝA<AJàAA¡ž&A§nÉA­%lA²ÜAž³AŸIVAÃÿúAÉ¶AÏmAAÕ#äAÚÚAà*AæGÍAëþpAñµA÷k·Aý"ZBlBGÐB#"B	þtB
+ÙÅBµBiBkºBG
+B"^B
+ý¯B ÙB#ŽSB&€B)jöB,FHB/!B1üëB4Ø=B7¬©¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >&â)>P®?k ?Ðê/@*/@CßF@q^@€»@ŠG@œYÓ@Ô4_@ëëA ô»A
+bAÏGA#<A.©ÒA:AE]APñ¢A\^èAgÌ.As9sA~Š¹A
+
+ AÀ£AwGA-êAäA¡1A§QÔA­wA²¿AžuœAŸ,aAÃãAÉ§AÏPKAÕîAÚœAàt5Aæ*ØAëá{Añ
+A÷NÁAýeB^B9UB§B	ïøB
+ËJBŠBíB]?B8BâB
+ï4B ÊB#¥×B&)B)\{B,7ÌB/
+B1îpB4ÉÁB7¥B:eB=TÑ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >fâ>B3?ga
+?ÏŸ@Bv@B÷@p¬Š@0ß@Š
+k@Œå÷@ÓÀ@êA ºÍA
+(AXA#A.oäA9Ý)AEJoAP·ŽA\$úAg?Arÿ
+A~lÊAíA£¬AZOAòAÇA¡~9A§4ÜA¬ëA²¢#AžXÆAŸiAÃÆ
+AÉ|°AÏ3SAÔéöAÚ AàW=Aæ
+áAëÄAñ{'A÷1ÊAüèmBOB*ÚB,B	á}B
+ŒÏB BsrBNÄB*BgB
+à¹B Œ
+B#\B&r®B)MÿB,)QB/£B1ßôB4»FB7B:qéB=M;B@(BBüù¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >	ë>3·?cÂD?ÍKQ@ZÀ@B×@oÄï@œ@¥@Œr
+@ÓLš@ê'4A àA
+î%A[kA"È±A.5öA9£<AEAP}ÇA[ë
+AgXRArÅA~2ÝAÐAµA=XAóüAªA¡aBA§æA¬ÎA²
+,Až;ÐAœòsAÃ©AÉ_¹AÏ\AÔÍ AÚ£Aà:FAåðêAë§Añ^1A÷ÔAüËwBA
+B
+_B÷°B	ÓB
+®TB¥Bd÷B@HBBöìB
+Ò=B ­B#áB&d2B)?B,ÖB.ö'B1ÑyB4¬ËB7
+B:cnB=>ÀB@BBõcBEÐµBH¥!¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =öà©>%<3?`#k?Ë{ä@s	@A(!@nÝ9@I)@¥#Ž@»þ@@ÒØÍ@é³YA FòA
+Ž8A!}A"ÂA-üA9iNADÖAPCÙA[±Ag
+dArªA}øñA³
+AiŸA bA×AšA¡DLAŠúïA¬±A²h6Až
+ÙAœÕ|AÃ AÉBÃAÎùfAÔ°	AÚf¬Aà
+PAåÓóAëAñA:Aö÷ÝAü®B2B
+ãBé5B	ÄB
+ØB{*BV|B1ÍB
+BèpB
+ÃÂB B#zeB&U·B)1	B,
+ZB.ç¬B1ÂþB4OB7y¡B:TóB=0DB@
+BBæèBEÂ9BHBKxÝBNMI¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =Ùê>Àí?\?É¬{@U@@@l@mõ@ÕN@€¯Ú@»g@Òdò@é?~A 
+A
+zJAçA"TÖA-ÂA9/`ADŠAP	ìA[w1AfäwArQœA}¿A%ALÈAlAºAp²A¡'UAŠÝøA¬A²K?AžâAœžAÃo)AÉ%ÌAÎÜpAÔAÚI¶Aà YAå¶üAëm Añ$CAöÚæAüB$BÿhBÚºB	¶
+B
+]Bl¯BH B#RBþ€BÙõB
+µGB B#kêB&G<B)"B+ýßB.Ù1B1ŽB4ÔB7k&B:FwB=!ÉB?ýBBØlBE³ŸBHBKjaBNE³BQ!BSõq¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =Œó>E?XåÀ?ÇÝ@£@?X¶@m
+Î@as@€;ÿ@»@Ññ@èË€@ÿŠ0A
+@]A­¢A"èA-.A8õtADb¹AOÏþA[=DAfªArÏA}
+Ay.A/ÒAæuAASŒA¡
+^AŠÁA¬w¥A².HA·äìAœAÃR2AÉÖAÎ¿yAÔv
+AÚ,ÀAßãcAåAëP©AñLAöœðAütBBðíBÌ>B	§B
+âB^3B9
+B×Bð(BËzB
+ŠÌB 
+B#]oB&8ÀB)B+ïdB.ÊµB1ŠB4YB7\ªB:7üB=NB?îBBÉñBE¥CBHBK[æBN78BQBSíÛBVÉ-BY¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =ý=ó@?UFæ?Æ
+¡@»ç@>pÿ@l&@í@£È$@º¢°@Ñ}<@èWÈ@ÿ2SA
+oAsµA!àúA-N?A8»
+AD(ËAOA[VAfpAqÝáA}K'A\7AÚAÉ}A!A6ÄA ígAŠ€
+A¬Z­A²QA·ÇôAœ~AÃ5;AÈëÞAÎ¢AÔY%AÚÈAßÆkAå}Aë3²AðêUAö øAüWBBâpBœÂB	B
+teBO·B+	BZBá¬BŒþB
+OB s¡B#NóB&*DB)B+àçB.Œ9B1B4rÜB7N.B:)B=ÑB?à#BB»uBEÆBHrBKMjBN(»BQ
+BSß_BVº°BYB\qTB_EÀ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =t=Ö?Qš?Ä>6@Ô2@=I@k>a@yœ@£TH@º.Õ@Ñ	a@çãí@þŸyA
+ÌA9ÈA!§
+A-SA8ACîÝAO\#AZÉiAf6¯Aq£ôA}9A?@AõãA¬Ac*AÍA ÐqAŠA¬=·A±ô[A·ªýAœa¡AÃDAÈÎçAÎ
+AÔ<.AÙòÑAß©uAå`Aë»AðÍ_AöAü:¥B ø£BÓõB¯GB	B
+eêBA<B
+B÷ßBÓ1B®B
+ÔB e&B#@wB&ÉB(÷B+ÒlB.­ŸB1B4daB7?³B:B<öVB?ÑšBB¬ùBEKBHcBK>îBN@BPõBSÐãBV¬5BYB\bØB_>*Bb|Bdíè¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =LÍ=¹Šä?N	:?ÂnÌ@ì}@<¡@jV¬@â@¢ào@¹ºû@Ð@çp@þJA
+AÿÚA!m A,ÚfA8G«ACŽñAO"6AZ{AeüÁAqjA|×LA"IAØíAAF3Aü×A ³zAŠj
+A¬ ÁA±×dA·AœD«AÂûMAÈ±ñAÎhAÔ7AÙÕÛAß~AåC!AêùÅAð°hAög
+Aü
+¯B ê(BÅzB ÌB	|
+B
+WoB2ÀBBédBÄµB B
+{YB VªB#1üB&
+NB(èB+ÃñB.CB1zB4UæB717B:
+B<çÛB?Ã,BB~BEyÐBHU!BK0sBN
+ÅBPçBSÂhBVºBYy
+B\T]B_/¯Bb
+ BdæRBgÁ€Bj¿  ¿  ¿  ¿  ¿  ¿  =2³=°8?Jjd?À`@Ç@;¹ß@inö@@¢l@¹G@Ð!¬@æü8@ýÖÂA
+X§AÅíA!32A, wA8
+œAC{ANèHAZUAeÂÓAq0A|`ASA»öArA)=AßàA AŠM'A¬ÊA±ºmA·qAœ'ŽAÂÞWAÈûAÎKAÔAAÙžäAßoAå&+AêÜÎAðqAöJAü žB Û­B¶ÿBPB	m¢B
+HôB$EBÿBÚèB¶:BB
+lÝB H/B##B%þÒB(Ú$B+µvB.ÇB1lB4GkB7"ŒB9þB<Ù_B?Ž±BBBEkTBHFŠBK!øBMýIBPØBS³íBV>BYjB\EâB_!3Baü
+Bd××Bg³(BjzBmiÌBp>8¿  ¿  ¿  ¿  <°/=s4?FË?ŸÏø@
+
+@:Ò*@hB@
+-@¡ø¹@žÓE@Ï­Ñ@æ]@ýbèA
+
+¹AÿA ùEA,fA7ÓÐACAAN®[AZ¡AeæApö,A|csAè]A AU£A
+FAÂéA yAŠ00A«æÓA±wA·TAœ
+œAÂÁaAÈxAÎ.§AÓåKAÙíAßRAå	4Aê¿×Aðv{Aö-
+AûãÁB Í2BšBÕB	_'B
+:xBÊBñ
+BÌmB§¿BB
+^bB 9ŽB#B%ðWB(Ë©B+ŠúB.LB1]B48ïB7AB9ïB<ÊäB?Š6BBBE\ÙBH8+BK|BMîÎBPÊ BS¥qBVÃBY\B\7fB_žBaî
+BdÉ[Bg€­BjÿBm[PBp6¢BsôBuæ`¿  ¿  ;òÃë=E
+ê?C,œ?œ @
+5^@9êu@g@ªS@¡ß@ž_k@Ï9÷@æ@üïA	äÍARA ¿WA,,A7ãAC)ANtnAYá³AeNùApŒ?A|)
+AËfA	A8­AïPA¥óA \AŠ9A«ÉÝA±A·7#AŒíÇAÂ€jAÈ[
+AÎ±AÓÈTAÙ~÷Aß5Aäì=Aê¢áAðYAö'AûÆËB Ÿ·BBuZB	P«B
++ýBOBâ BœòBDBtB
+OçB +8B#B%áÜB(œ-B+B.sÑB1O"B4*tB7ÆB9áB<ŒiB?»BBs
+BEN^BH)¯BKBMàSBP»€BSöBVrHBYMB\(ëB_=BaßBdºàBg2BjqBmLÕBp('BsxBuÞÊBxº
+B{    =
+??è?»1"@
+Mš@9¿@f·×@6x@¡@·ë@ÎÆ
+@å š@ü{4A	ªàA%A 
+kA+ò°A7_õABÍ;AN:AY§ÇAe
+ApQA{ïA®oAeA¶AÒYAýA ? A¥öCA«¬æA±cA·-AŒÐÐAÂsAÈ>AÍôºAÓ«]AÙbAß€AäÏGAê
+ëAð<Aõó1Aû©ÔB °;BBfßB	B0B
+
+BøÓBÔ%B¯wBÈBfB
+AlB 
+œB"øB%Ó`B(®²B+B.eUB1@§B4ùB6÷JB9ÒB<­îB??BBdBE?ãBH4BJöBMÑ×BP­)BS{BVcÌBY?
+B\pB^õÁBaÑBd¬eBg¶BjcBm>ZBp«BrôýBuÐOBx« B{òB~bD¿  ?=š\?¹a·@
+eó@8
+@eÐ"@Â@ *@·w¶@ÎRB@å,Î@üZA	pòAÞ8A K~A+žÃA7&	ABNAN AYmÙAdÛApHeA{µ«AyAH
+Aþ¿AµcAlA "©A¥ÙMA«ðA±FA¶ý6AŒ³ÙAÂj}AÈ! AÍ×ÃAÓgAÙE
+AÞû­Aä²QAêhôAðAõÖ;AûÝB ¡ÀB}BXcB	3µB
+BêXBÅªB ûB|MBWB
+2ðB BB"éB%ÄåB( 7B+{B.VÚB12,B4
+}B6èÏB9Ä!B<rB?zÄBBVBE1gBH
+¹BJè
+BMÃ\BP®BSyÿBVUQBY0£B\
+ôB^çFBaÂBdéBgy;BjTBm/ÞBp
+0BræBuÁÓBx%B{xwB~SÈB~}¿  ¿  @	ì@73U@dèl@NÂ@ )N@·Û@ÍÞg@äžó@û~A	7A€JA A+~ÕA6ìABY`AMÆŠAY3ëAd¡0ApvA{{ŒAtA+$AáÈAkAOA ²A¥ŒUA«røA±)A¶à?AŒâAÂM
+AÈ(AÍºÌAÓqoAÙ(AÞÞ¶AäYAêKüAð Aõ¹CAûoæB EBnBIèB	%:B
+ BÛÝB·/BBmÒBI#B
+$uBÿÇB"ÛB%¶jB(ŒB+m
+B.H_B1#°B3ÿB6ÚTB9µ¥B<÷B?lIBBGBE"ìBGþ>BJÙBMŽáBP3BSkBVFÖBY"'B[ýyB^ØËBaŽ
+BdnBgjÀBjFBm!cBoüµBrØBu³XBxªB{iûB~EMB~o¿  ¿  ¿  ¿  @do
+@Úè@µt@¶ @Íj@äE@û£AýAj]A×£A+DèA6²-ABsAM¹AXùþAdgDAoÔA{AÏAWA.AÄÑA{tA2Aè»A¥^A«VA±
+¥A¶ÃHAŒyìAÂ0AÇç2AÍÕAÓTxAÙ
+
+AÞÁ¿AäxbAê/Aïå©AõLAûRðB ÉB`B;mB	ŸB
+òBÍbBš³BB_WB:šB
+úBñKB"ÌB%§ïB(@B+^B.9äB15B3ðB6ËØB9§*B<|B?]ÍBB9BEqBGïÂBJËBMŠfBP·BS]	BV8[BY¬B[îþB^ÊOBa¥¡BdóBg\DBj7BmèBoî9BrÉBu€ÝBx.B{[B~6ÒB~`¿  ¿  ¿  ¿  ¿  ¿  @xÂ@¶
+%@Ìö±@ãÑ=@ú«ÊAÃ*A0pAµA+
+ûA6xAAAåAMRËAXÀAd-WAoA{âA:Añ8A§ÛA^~A!AËÄA¥hA«9
+A°ï®A¶ŠRAŒ\õAÂAÇÊ<AÍßAÓ7AØî%AÞ€ÈAä[lAêAïÈ²AõVAû5ùB vNBQ B,ñB	CB
+ãBŸæB8BuBPÛB,-B
+BâÐB"Ÿ"B%sB(tÅB+PB.+hB1ºB3â
+B6œ]B9¯B<t B?ORBB*€BEõBGáGBJŒBMêBPs<BSNBV)ßBY1B[àB^»ÔBa&BdrwBgMÉBj)BmlBoßŸBr»BuaBxq³B{MB~(VB~R¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ìº @ã]c@ú7ïA=AöAcÈA*ÑA6>SAA«AMßAX$AcóiAo`¯AzÍõA
+AÔAAäAAAø+A®ÎA¥eqA«
+A°ÒžA¶[AŒ?þAÁö¢AÇ­EAÍcèAÓAØÑ/AÞÒAä>uAéõAï«ŒAõb_AûB gÓBC$B
+vBùÈB
+ÕB°kBœBgBB`B
+²B
+ùBÔUB"¯§B%øB(fJB+AB.
+íB0ø?B3ÓB6®âB94B<e
+B?@×BB
+(BD÷zBGÒÌBJ®
+BMoBPdÁBS@BVdBXö¶B[ÒB^­YBa«BdcüBg?NBjBlõñBoÑCBr¬BuæBxc8B{>B~ÛB~C¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ùû<AOOAŒA)ÚA* A6eAAq«ALÞðAXL6Ac¹|Ao&ÁAzA §A·JAmîA$AÛ4AØA¥H{Aªÿ
+A°µÁA¶ldAŒ#AÁÙ«AÇNAÍFòAÒýAØŽ8AÞjÜAä!AéØ"AïÅAõEhAúü
+B YXB4ªBûBëLB
+ÆB¡ðB}ABXB3åB6B
+êBÅÚB"¡+B%|}B(WÏB+3 B.rB0éÃB3ÅB6 gB9{žB<W
+B?2\BB
+­BDèÿBGÄPBJ¢BMzôBPVEBS1BV
+éBXè:B[ÃB^ÞBaz/BdUBg0ÓBj
+$BlçvBoÂÇBrBuykBxTŒB{0B~
+`B~5 ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A<A
+ïíA*]3A5ÊxAA7ŸAL¥AXIAcAnìÔAzZAã°ATAP÷AAŸ>AtáA¥+Aªâ(A°ËA¶OnAŒAÁŒŽAÇsXAÍ)ûAÒàAØBAÞMåAäAé»,AïqÏAõ(rAúßB JÜB&.BBÜÒB
+ž#BtBnÆBJB%iB »B
+Ü
+B·^B"°B%nB(ISB+$¥B-ÿ÷B0ÛHB3¶B6ëB9m=B<HB?#àBAÿ2BDÚBGµÕBJ'BMlxBPGÊBS#
+BUþmBXÙ¿B[µB^bBakŽBdGBg"WBiý©BlØûBoŽLBrBujïBxFAB{!B}üäB~&¥¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A*>ÚA5A@ýÑALkAWØ\AcE¡An²çAz .AÆ¹A}]A4 Aê€A¡GAWêA¥AªÅ1A°{ÔA¶2xA»éAÁŸAÇVaAÍ
+AÒÃšAØzKAÞ0îAãçAé5AïTØAõ
+|AúÂB <aB³BóBÎVB
+©šBúB`KB;BîBò@B
+ÍBšãB"5B%_B(:ØB+*B-ñ{B0ÌÍB3šB6pB9^ÂB<:B?eBAð·BDÌBG§ZBJ«BM]ýBP9OBS BUïòBXËDB[ŠB^çBa]9Bd8BgÜBiï.BlÊBo¥ÑBr#Bu\tBx7ÆB{B}îiB~*¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A@ßwAL1(AWnAc
+³AnxùAyæ>A©ÃA`fAAÍ¬AOA:óA€ñAªš9A°^ÝA¶A»Ì#AÁÇAÇ9jAÌð
+AÒŠ°AØ]SAÞ÷AãÊAé=Aï7áAôîAú¥'B -äB	6BäB¿ÚB
+,Bv}BQÏB-!BrBãÃB
+¿BgB"užB%Q
+B(,\B+­B-âÿB0ŸQB3¢B6tôB9PFB<+B?éBAâ:BDœBGÞBJt/BMOBP*ÒBS$BUávBXŒÇB[B^skBaNŒBd*Bg`Bià±BlŒBoUBrrŠBuMøBx)JB{B}ßíB~	®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AWAbÑÆAn?
+Ay¬QAÌACoAúA°¶AgXA
+üA€ÔAªCA°AæAµøA»¯-AÁeÐAÇ
+sAÌÓAÒºAØ@]AÝ÷ Aã­£AédGAïêAôÑAú0B iBú»BÖ
+B±^B
+°BhBCTB
+¥Bù÷BÕIB
+°BëB"g=B%BB(
+àB*ù2B-ÔB0¯ÕB3'B6fyB9AÊB<
+
+B>ønBAÓ¿BD¯BGbBJeŽBMABP
+WBR÷©BUÒúBX®LB[B^dïBa@ABdBföäBiÒ6Bl­BoÙBrd+Bu?}BxÎBzö B}ÑrB}û3¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  An ²AyrdAoÕA&yAÝ
+A¿AJcAA€·šAªnLA°$ïAµÛA»6AÁHÙAÆÿ}AÌ¶ AÒlÃAØ#gAÝÚ
+Aã­AéGPAîýóAôŽAúk:B îBì?BÇB¢ãB
+~4BYB4ØB*Bë|BÆÍB
+¢B}qB"XÂB%4B(eB*ê·B-ÆB0¡ZB3|¬B6WýB93OB<¡B>éòBAÅDBD BG{çBJW9BM2BP
+ÜBRé.BUÄBXÑB[{"B^VtBa1ÆBd
+BfèiBiÃ»Bl
+Boz^BrU°Bu1Bx
+SBzç¥B}ÂöB}ìž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A`©A	AÀ%AvÉA-lAäA€³AªQVA°øAµŸA»u?AÁ+ãAÆâAÌ)AÒOÍAØpAÝœAãs·Aé*ZAîàýAô AúNCB sBÝÅB¹BgB
+o¹BK
+B&\B®BÝ BžRB
+€BnõB"JGB%%B( êB*Ü;B-·B0ßB3n0B6IB9$ÔB< %B>ÛwBA¶ÉBDBGmlBJHŸBM$BOÿaBRÚ²BU¶BXVB[l§B^GùBa#JBcþBfÙîBiµ?BlBokãBrG4Bu"BwýØBzÙ)B}Ž{B}Þ=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A°ùAYÒAuAÇA€}ŒAª4_A¯ëAµ¡ŠA»XHAÁìAÆÅAÌ|3AÒ2ÖA×éyAÝ 
+AãVÀAé
+cAîÄAôzªAú1MAÿçïBÏIBªB
+íB
+a>B<BáBó3BÎB©ÖB
+
+(B`zB";ÌB%
+B'òoB*ÍÁB-©B0cB3_µB6;B9XB;ñªB>ÌüBAšMBDBG^ñBJ:BBMBOðæBRÌ7BU§BXÚB[^,B^9~BaÏBcð!BfËrBiŠÄBlBo]gBr8¹Bu
+Bwï\BzÊ®B}Š B}ÏÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AIAª"A€`ÅAªiA¯Î
+Aµ¯A»;SAÀñöAÆšAÌ_<AÒßA×ÌAÝ&Aã9ÉAèðmAî§Aô]³AúWAÿÊøBÀÎB BwqB
+RÃB.B	fBä·BÀ	B[B
+v¬BQþB"-PB%¢B'ãôB*¿EB-B0uéB3Q:B6,B9ÝB;ã/B>ŸBAÒBDu$BGPuBJ+ÇBMBOâjBRœŒBUBXt_B[O±B^+BaTBcáŠBfŒ÷BiIBlsBoNìBr*>BuBwàáBzŒ3B}B}ÁF¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A€QA©úrA¯±Aµg¹A»
+\AÀÔÿAÆ£AÌBFAÑøèA×¯AÝf/Aã
+ÓAèÓvAîAô@œAù÷`Aÿ®B²SB€BhöB
+DHBBúëBÖ=B±BßB
+h1BCB"
+ÔB$ú&B'ÕxB*°ÊB-
+B0gmB3B¿B6
+B8ùbB;Ô³B>°BAWBDfšBGAúBJ
+LBLøBOÓïBR¯ABUBXeäB[A6B^
+B`÷ÙBcÓ*Bf®|BiÎBleBo@qBrÂBt÷BwÒfBz­·B}	B}²Ë¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¯¡éAµJÂA»eAÀž	AÆn¬AÌ%OAÑÛóA×AÝI8AâÿÜAè¶Aîm#Aô#ÆAùÚiAÿ
+B£×B)BZ{B
+5ÌB
+BìpBÇÁB£B~eB
+Y¶B5B"YB$ë«B'ÆüB*¢NB-} B0XòB34DB6B8êçB;Æ9B>¡BA|ÛBDX-BG3BJÐBLê"BOÅtBR ÅBU|BXWiB[2ºB^
+B`é^BcÄ¯Bf Bi{RBlV€Bo1öBr
+GBtèBwÃêBz<B}zB}€O¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aºò9AÀAÆQµAÌYAÑŸüA×uAÝ,CAââæAèAîP,AôÏAùœsAÿtB\Bp®BKÿB
+'QB£BÝôB¹FBBoéB
+K;B&B"ÞB$Ý/B'žB*ÓB-o$B0JvB3%ÈB6B8ÜlB;·œB>BAnaBDI²BG%BJ UBLÛ§BO¶øBRJBUmBXHíB[$?B]ÿB`ÚâBc¶4BfBil×BlH)Bo#zBqþÌBtÚ
+BwµoBzÁB}lB}Ô¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÆBAËëbAÑ¢A×X©AÝLAâÅïAè|Aî36AóéØAù |AÿWBáBb3B=B
+ÖB
+ô'BÏyBªËB
+BanB
+<ÀBB!ócB$ÎµB'ªB*
+WB-`©B0;ûB3LB5òB8ÍðB;©BB>BA_åBD;7BGBIñÚBLÍ+BOš}BRÏBU_ BX:rB[ÄB]ñB`ÌgBc§¹Bf
+Bi^\Bl9®BoÿBqðQBtË¢BwŠôBzFB}]B}Y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÑÙA×;²AÜòUAâšùAè_Aî?AóÌãAùAÿ:'BxfBS·B/	B
+
+[B
+å¬BÀþBOBw¡BRóB
+.DB	B!äèB$À9B'B*vÝB-R.B0-B3ÑB5ä#B8¿tB;ÆB>vBAQjBD,ŒBG
+BIã_BLŸ±BOBRuSBUP¥BX+÷B[HB]âB`œìBc=BftBiOáBl+2BoBqáÖBtœ'BwyBzsÊB}O
+B}xÞ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÜã)AâAèB¥AíùIAó¯ìAùfAÿ
+1BiêBE<B B
+ûßB
+×1B²BÔBi&BDwB
+ÉB
+ûB!ÖlB$±ŸB'B*haB-C³B0B2úVB5Õ§B8°ùB;KB>gBABîBD
+@BFùBIÔäBL°5BOBRfÙBUB*BX
+{BZøÍB]ÔB`¯pBcÂBffBiAeBl
+·Bnø	BqÓZBt®¬BwþBzeOB}@¡B}jb¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aè3yAíÜRAóõAùIAÿ ;B[oB6ÁBB
+ídB
+È¶B€BYBZ«B5üB
+NB
+ìB!ÇñB$£CB'~B*YæB-58B0B2ëÛB5Ç-B8¢~B;}ÏB>Y!BA4sBDÄBFëBIÆhBL¡ºBO}
+BRX]BU3¯BXBZêRB]Å£B` õBc|GBfWBi2êBl<BnéBqÄßBt 1Bw{BzVÔB}2&B}[ç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AóÉAù,¢AþãDBLôB(EBB
+ÞéB
+º:BBpÞBL/B'B
+ÓB
+Þ$B!¹vB$ÇB'pB*KkB-&ŒB0B2Ý`B5ž±B8B;oUB>JŠBA%÷BDIBFÜBI·ìBL>BOnBRIâBU%4BX 
+BZÛ×B]·)B`zBcmËBfI
+Bi$oBkÿÀBnÛBq¶dBtµBwmBzHYB}#ªB}Ml¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AþÔB>xBÊBõ
+B
+ÐmB
+«¿BBbbB=ŽBBôWB
+Ï©B!ªûB$LB'aB*<ïB-AB/óB2ÎäB5ª6B8
+B;`ÙB><+BA}BCòÎBFÎBI©qBLÃBO`BR;fBUžBWò
+BZÍ\B]š­B`ÿBc_QBf:¢BióBkñEBnÌBq§èBt:Bw^Bz9ÝB}/B}>ñ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B4Bæ B
+ÁòB
+DBxBSçB/9B
+BåÜB
+Á.B!B$wÑB'S#B*.tB-	ÆB/åB2ÀiB5»B8w
+B;R^B>-°BA	BCäSBF¿¥BIöBLvGBOQBR,ëBU<BWãBZŸàB]2B`uBcPÕBf,'BiyBkâÊBnŸBqmBtt¿BwPBz+bB}ŽB}0u¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+º\B
+ÈBjBElB œBüB×aB
+²²B!B$iVB'D§B*ùB,ûKB/ÖB2±îB5?B8hB;CãB>4B@úBCÕØBF±)BI{BLgÍBOC
+BR
+oBTùÁBWÕBZ°dB]¶B`gBcBZBf
+¬BhøýBkÔOBn¯¡BqòBtfCBwABz
+çB|ø8B}!ú¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BbB6ïBABíBÈäB
+€6B!B$ZÙB'6+B*}B,ìÎB/È B2£rB5~ÃB8ZB;5fB>žB@ì
+BCÇ[BF¢­BI}ÿBLYPBO4¢BRôBTëEBWÆBZ¡èB]}:B`XBc3ÝBf/BhêBkÅÓBn¡$Bq|vBtWÈBw3BzjB|éŒB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+«BßBºiB
+»B!q
+B$L^B''°B*B,ÞSB/¹¥B2öB5pHB8KB;&ëB>=B@ÝBCžàBF2BIoBLJÕBO&'BRxBTÜÊBWž
+BZmB]nŸB`JBc%bBf ³BhÜBk·WBn©BqmûBtILBw$ByÿðB|ÛAB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B²ÓB
+?B!bB$=ãB'4B)ôB,ÏØB/«)B2{B5aÍB8=
+B;pB=óÂB@ÏBCªeBF
+¶BIaBL<ZBO«BQòýBTÎOBW© BZòB]`DB`;BcæBeò8BhÍBkšÛBn-Bq_Bt:ÑBw#ByñtB|ÌÆB|ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B!ZûB$/gB'
+¹B)æ
+B,Á\B/®B2x B5SQB8.£B;	õB=åFB@ÀBCêBFw;BIRBL-ÞBO	0BQäBT¿ÓBW%BZvwB]QÈB`-BclBeãœBh¿Bk`Bnu²BqQBt,UBw§ByâùB|ŸKB|è
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B'#B)×B,²áB/3B2iB5DÖB8 (B:ûyB=ÖËB@²
+BCnBFhÀBIDBLcBNúµBQÖBT±XBWªBZgûB]CMB`
+BbùðBeÕBBh°BkåBng6BqBBt
+ÚBvù+ByÔ}B|¯ÏB|Ù¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B,«JB/¶B2[B56ZB8«B:ìýB=ÈOB@£ BC~òBFZDBI5BLçBNì9BQÇBT¢ÜBW~-BZYB]4ÑB`"BbëtBeÆÆBh¢Bk}iBnX»Bq4
+Bt]Bvê¯ByÆB|¡RB|Ë¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B2SrB5'ÞB80B:ÞB=¹ÓB@%BCpwBFKÈBI'BLlBNÝœBQ¹BTaBWo²BZKB]&UB`§BbÜùBežJBhBknîBnJ?Bq%Bt ãBvÜ4By·
+B|×B|Œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B7ûB:ÐB=«XB@ªBCaûBF=MBIBKóðBNÏBBQªBT
+åBWa7BZ<B]ÚB_ó,BbÎ}Be©ÏBh
+!Bk`rBn;ÄBqBsògBvÍ¹By©
+B|\B|®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B=£ÂB@x.BCSBF.ÒBI
+#BKåuBNÀÇBQBTwjBWRŒBZ.
+B]	_B_ä±BbÀBeTBhv¥BkQ÷Bn-IBqBsãìBv¿>ByB|uáB|¥¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BCKéBF UBHû§BKÖùBN²JBQBThîBWD?BZB\úãB_Ö4Bb±BeØBhh)BkC{Bn
+ÌBpú
+BsÕpBv°ÁByB|geB|)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BHôBKÈ}BN£ÏBQ!BTZrBW5ÄBZB\ìgB_Ç¹Bb£
+Be~\BhY®Bk5 BnQBpë£BsÆôBv¢FBy}B|XéB|®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BN9BQp¥BTK÷BW'IBZB\ÝìB_¹>BbBeoáBhK3Bk&BnÖBpÝ(BsžyBvËByo
+B|JnB|t3¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BTDaBWÍBYôB\ÏqB_ªÂBbBeafBh<·Bk	Bmó[BpÎ¬Bs©þBv
+PBy`¡B|;óB|e·¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BYìB\ÀôB_FBbwBeRéBh.;Bk	BmäÞBpÀ0BsBvvÓByR%B|-wB|W<¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B_°Bbi
+BeDnBhÀBjûBmÖcBp±µBsBvhXByCªB|
+ûB|HÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Be<ØBhDBjìBmÇèBp£9Bs~BvYÝBy5.B|B|:F¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bjå Bm¹lBpŸBspBvKaBy&³B|B|+Ê¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bp'BsaBv<åBy7B{óB|
+O¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bv5OBy	»B{å
+B|Ô¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B{ÝwB| X¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 <#×
+<£×
+<õÂ=#×
+=LÌÍ=uÂ=\)=£×
+=žQì=ÌÌÍ=áG®=õÂ>
+ž>\)>>#×
+>.{>8Qì>B\>LÌÍ>W
+=>aG®>k
+>uÂ>  >
+
+ž>=q>\)>zá>>žR>£×
+>šõÃ>®{>³33>žQì>œp€>Â\>Ç®>ÌÌÍ>Ñë
+>×
+=>Ü(ö>áG®>æff>ë
+>ð£×>õÂ>úáH?   ?\?
+ž?®?
+=q?
+ÌÍ?\)?ë
+?zá?
+=??
+(ö?
+žR?!G®?  ?G®?\?×
+?
+
+ž?ff?®?õÃ?=q?
+?ÌÍ?{?\)?£×?ë
+?33?zá?Â?
+>?Qì??áH?(ö?p€?žR?   ?¡G®?¢\?£×
+?¥
+ž?Šff?§®?šõÂ?ª=q?«
+?¬ÌÍ?®{?¯\)?°£×?±ë
+?³33?Žzá?µÂ?·
+>?žQì?¹?ºáH?Œ(ö?œp€?ŸžR?À  ?ÁG®?Â\?Ã×
+?Å
+ž?Æff?Ç®?ÈõÂ?Ê=p?Ë
+
+?ÌÌÍ?Î{?Ï\)?Ð£×@   @ £×@G®@ë
+@\@33@×
+@zá@
+ž@Â@ff@
+=@®@Qì@õÃ@	@
+=q@
+áH@
+
+@
+(ö@
+ÌÍ@
+p€@{@žR@\)@  @£×@G®@ë
+@\@33@×
+@zá@
+ž@Â@ff@
+>@®@Qì@õÂ@@=q@áH@
+@
+(ö@
+ÌÍ@
+p€@
+{@
+žR@\)@   @ £×@!G®@!ë
+@"\@#33@#×
+@$zá@%
+ž@%Â@&ff@'
+>@'®@(Qì@@  @@£×@AG®@Aë
+@B\@C33@C×
+@Dzá@E
+ž@EÂ@Fff@G
+=@G®@HQì@HõÃ@I@J=q@JáH@K
+@L(ö@LÌÍ@Mp€@N{@NžR@O\)@P  @P£×@QG®@Që
+@R\@S33@S×
+@Tzá@U
+ž@UÂ@Vff@W
+>@W®@XQì@XõÂ@Y@Z=q@ZáH@[
+@\(ö@\ÌÍ@]p€@^{@^žR@_\)@`  @`£×@aG®@aë
+@b\@c33@c×
+@dzá@e
+ž@eÂ@fff@g
+>@g®@hQì@  @Qì@£×@õÃ@G®@@ë
+@=q@\@áH@33@
+@×
+@(ö@zá@ÌÍ@
+
+ž@
+p€@
+Â@{@ff@žR@
+=@\)@®@  @Qì@£×@õÃ@G®@@ë
+@=q@\@áH@33@
+@×
+@(ö@zá@ÌÍ@
+ž@p€@Â@{@ff@žR@
+=@\)@®@  @Qì@£×@õÂ@G®@@ë
+@=q@\@áH@33@
+@×
+@(ö@   @ Qì@ £×@ õÃ@¡G®@¡@¡ë
+@¢=q@¢\@¢áH@£33@£
+@£×
+@€(ö@€zá@€ÌÍ@¥
+ž@¥p€@¥Â@Š{@Šff@ŠžR@§
+=@§\)@§®@š  @šQì@š£×@šõÃ@©G®@©@©ë
+@ª=q@ª\@ªáH@«33@«
+@«×
+@¬(ö@¬zá@¬ÌÍ@­
+ž@­p€@­Â@®{@®ff@®žR@¯
+=@¯\)@¯®@°  @°Qì@°£×@°õÂ@±G®@±@±ë
+@²=q@²\@²áH@³33@³
+@³×
+@Ž(ö@À  @ÀQì@À£×@ÀõÃ@ÁG®@Á@Áë
+@Â=q@Â\@ÂáH@Ã33@Ã
+@Ã×
+@Ä(ö@Äzá@ÄÌÍ@Å
+ž@Åp€@ÅÂ@Æ{@Æff@ÆžR@Ç
+=@Ç\)@Ç®@È  @ÈQì@È£×@ÈõÃ@ÉG®@É@Éë
+@Ê=q@Ê\@ÊáH@Ë33@Ë
+@Ë×
+@Ì(ö@Ìzá@ÌÌÍ@Í
+ž@Íp€@ÍÂ@Î{@Îff@ÎžR@Ï
+=@Ï\)@Ï®@Ð  @ÐQì@Ð£×@ÐõÂ@ÑG®@Ñ@Ñë
+@Ò=q@Ò\@ÒáH@Ó33@Ó
+@Ó×
+@Ô(ö@à  @àQì@à£×@àõÃ@áG®@á@áë
+@â=q@â\@âáH@ã33@ã
+@ã×
+@ä(ö@äzá@äÌÍ@å
+ž@åp€@åÂ@æ{@æff@æžR@ç
+=@ç\)@ç®@è  @èQì@è£×@èõÃ@éG®@é@éë
+@ê=q@ê\@êáH@ë33@ë
+@ë×
+@ì(ö@ìzá@ìÌÍ@í
+ž@íp€@íÂ@î{@îff@îžR@ï
+=@ï\)@ï®@ð  @ðQì@ð£×@ðõÂ@ñG®@ñ@ñë
+@ò=q@ò\@òáH@ó33@ó
+@ó×
+@ô(öA   A (öA QìA záA £×A ÌÍA õÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA	
+žA	G®A	p€A	A	ÂA	ë
+A
+{A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A   A (öA QìA záA £×A ÌÍA õÃA!
+žA!G®A!p€A!A!ÂA!ë
+A"{A"=qA"ffA"\A"žRA"áHA#
+=A#33A#\)A#
+A#®A#×
+A$  A$(öA$QìA$záA$£×A$ÌÍA$õÃA%
+žA%G®A%p€A%A%ÂA%ë
+A&{A&=qA&ffA&\A&žRA&áHA'
+=A'33A'\)A'
+A'®A'×
+A(  A((öA(QìA(záA(£×A(ÌÍA(õÃA)
+žA)G®A)p€A)A)ÂA)ë
+A*{A0  A0(öA0QìA0záA0£×A0ÌÍA0õÃA1
+žA1G®A1p€A1A1ÂA1ë
+A2{A2=qA2ffA2\A2žRA2áHA3
+=A333A3\)A3
+A3®A3×
+A4  A4(öA4QìA4záA4£×A4ÌÍA4õÃA5
+žA5G®A5p€A5A5ÂA5ë
+A6{A6=qA6ffA6\A6žRA6áHA7
+=A733A7\)A7
+A7®A7×
+A8  A8(öA8QìA8záA8£×A8ÌÍA8õÃA9
+žA9G®A9p€A9A9ÂA9ë
+A:{A@  A@(öA@QìA@záA@£×A@ÌÍA@õÃAA
+žAAG®AAp€AAAAÂAAë
+AB{AB=qABffAB\ABžRABáHAC
+=AC33AC\)AC
+AC®AC×
+AD  AD(öADQìADzáAD£×ADÌÍADõÃAE
+žAEG®AEp€AEAEÂAEë
+AF{AF=qAFffAF\AFžRAFáHAG
+=AG33AG\)AG
+AG®AG×
+AH  AH(öAHQìAHzáAH£×AHÌÍAHõÃAI
+žAIG®AIp€AIAIÂAIë
+AJ{AP  AP(öAPQìAPzáAP£×APÌÍAPõÃAQ
+žAQG®AQp€AQAQÂAQë
+AR{AR=qARffAR\ARžRARáHAS
+=AS33AS\)AS
+AS®AS×
+AT  AT(öATQìATzáAT£×ATÌÍATõÃAU
+žAUG®AUp€AUAUÂAUë
+AV{AV=qAVffAV\AVžRAVáHAW
+=AW33AW\)AW
+AW®AW×
+AX  AX(öAXQìAXzáAX£×AXÌÍAXõÃAY
+žAYG®AYp€AYAYÂAYë
+AZ{A`  A`(öA`QìA`záA`£×A`ÌÍA`õÃAa
+žAaG®Aap€AaAaÂAaë
+Ab{Ab=qAbffAb\AbžRAbáHAc
+=Ac33Ac\)Ac
+Ac®Ac×
+Ad  Ad(öAdQìAdzáAd£×AdÌÍAdõÃAe
+žAeG®Aep€AeAeÂAeë
+Af{Af=qAfffAf\AfžRAfáHAg
+=Ag33Ag\)Ag
+Ag®Ag×
+Ah  Ah(öAhQìAhzáAh£×AhÌÍAhõÃAi
+žAiG®Aip€AiAiÂAië
+Aj{Ap  Ap(öApQìApzáAp£×ApÌÍApõÃAq
+žAqG®Aqp€AqAqÂAqë
+Ar{Ar=qArffAr\AržRAráHAs
+=As33As\)As
+As®As×
+At  At(öAtQìAtzáAt£×AtÌÍAtõÃAu
+žAuG®Aup€AuAuÂAuë
+Av{Av=qAvffAv\AvžRAváHAw
+=Aw33Aw\)Aw
+Aw®Aw×
+Ax  Ax(öAxQìAxzáAx£×AxÌÍAxõÃAy
+žAyG®Ayp€AyAyÂAyë
+Az{A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+
+=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A   A {A (öA =qA QìA ffA záA \A £×A žRA ÌÍA áHA õÃA¡
+=A¡
+žA¡33A¡G®A¡\)A¡p€A¡
+A¡A¡®A¡ÂA¡×
+A¡ë
+A¢  A¢{A¢(öA¢=qA¢QìA¢ffA¢záA¢\A¢£×A¢žRA¢ÌÍA¢áHA¢õÃA£
+=A£
+žA£33A£G®A£\)A£p€A£
+A£A£®A£ÂA£×
+A£ë
+A€  A€{A€(öA€=qA€QìA€ffA€záA€\A€£×A€žRA€ÌÍA€áHA€õÃA¥
+=Aš  Aš{Aš(öAš=qAšQìAšffAšzáAš\Aš£×AšžRAšÌÍAšáHAšõÃA©
+=A©
+žA©33A©G®A©\)A©p€A©
+A©A©®A©ÂA©×
+A©ë
+Aª  Aª{Aª(öAª=qAªQìAªffAªzáAª\Aª£×AªžRAªÌÍAªáHAªõÃA«
+=A«
+žA«33A«G®A«\)A«p€A«
+A«A«®A«ÂA«×
+A«ë
+A¬  A¬{A¬(öA¬=qA¬QìA¬ffA¬záA¬\A¬£×A¬žRA¬ÌÍA¬áHA¬õÃA­
+=A°  A°{A°(öA°=qA°QìA°ffA°záA°\A°£×A°žRA°ÌÍA°áHA°õÃA±
+=A±
+žA±33A±G®A±\)A±p€A±
+A±A±®A±ÂA±×
+A±ë
+A²  A²{A²(öA²=qA²QìA²ffA²záA²\A²£×A²žRA²ÌÍA²áHA²õÃA³
+=A³
+žA³33A³G®A³\)A³p€A³
+A³A³®A³ÂA³×
+A³ë
+AŽ  AŽ{AŽ(öAŽ=qAŽQìAŽffAŽzáAŽ\AŽ£×AŽžRAŽÌÍAŽáHAŽõÃAµ
+=Až  Až{Až(öAž=qAžQìAžffAžzáAž\Až£×AžžRAžÌÍAžáHAžõÃA¹
+=A¹
+žA¹33A¹G®A¹\)A¹p€A¹
+A¹A¹®A¹ÂA¹×
+A¹ë
+Aº  Aº{Aº(öAº=qAºQìAºffAºzáAº\Aº£×AºžRAºÌÍAºáHAºõÃA»
+=A»
+žA»33A»G®A»\)A»p€A»
+A»A»®A»ÂA»×
+A»ë
+AŒ  AŒ{AŒ(öAŒ=qAŒQìAŒffAŒzáAŒ\AŒ£×AŒžRAŒÌÍAŒáHAŒõÃAœ
+=AÀ  AÀ{AÀ(öAÀ=qAÀQìAÀffAÀzáAÀ\AÀ£×AÀžRAÀÌÍAÀáHAÀõÃAÁ
+=AÁ
+žAÁ33AÁG®AÁ\)AÁp€AÁ
+AÁAÁ®AÁÂAÁ×
+AÁë
+AÂ  AÂ{AÂ(öAÂ=qAÂQìAÂffAÂzáAÂ\AÂ£×AÂžRAÂÌÍAÂáHAÂõÃAÃ
+=AÃ
+žAÃ33AÃG®AÃ\)AÃp€AÃ
+AÃAÃ®AÃÂAÃ×
+AÃë
+AÄ  AÄ{AÄ(öAÄ=qAÄQìAÄffAÄzáAÄ\AÄ£×AÄžRAÄÌÍAÄáHAÄõÃAÅ
+=AÈ  AÈ{AÈ(öAÈ=qAÈQìAÈffAÈzáAÈ\AÈ£×AÈžRAÈÌÍAÈáHAÈõÃAÉ
+=AÉ
+žAÉ33AÉG®AÉ\)AÉp€AÉ
+AÉAÉ®AÉÂAÉ×
+AÉë
+AÊ  AÊ{AÊ(öAÊ=qAÊQìAÊffAÊzáAÊ\AÊ£×AÊžRAÊÌÍAÊáHAÊõÃAË
+=AË
+žAË33AËG®AË\)AËp€AË
+AËAË®AËÂAË×
+AËë
+AÌ  AÌ{AÌ(öAÌ=qAÌQìAÌffAÌzáAÌ\AÌ£×AÌžRAÌÌÍAÌáHAÌõÃAÍ
+=AÐ  AÐ{AÐ(öAÐ=qAÐQìAÐffAÐzáAÐ\AÐ£×AÐžRAÐÌÍAÐáHAÐõÃAÑ
+=AÑ
+žAÑ33AÑG®AÑ\)AÑp€AÑ
+AÑAÑ®AÑÂAÑ×
+AÑë
+AÒ  AÒ{AÒ(öAÒ=qAÒQìAÒffAÒzáAÒ\AÒ£×AÒžRAÒÌÍAÒáHAÒõÃAÓ
+=AÓ
+žAÓ33AÓG®AÓ\)AÓp€AÓ
+AÓAÓ®AÓÂAÓ×
+AÓë
+AÔ  AÔ{AÔ(öAÔ=qAÔQìAÔffAÔzáAÔ\AÔ£×AÔžRAÔÌÍAÔáHAÔõÃAÕ
+=AØ  AØ{AØ(öAØ=qAØQìAØffAØzáAØ\AØ£×AØžRAØÌÍAØáHAØõÃAÙ
+=AÙ
+žAÙ33AÙG®AÙ\)AÙp€AÙ
+AÙAÙ®AÙÂAÙ×
+AÙë
+AÚ  AÚ{AÚ(öAÚ=qAÚQìAÚffAÚzáAÚ\AÚ£×AÚžRAÚÌÍAÚáHAÚõÃAÛ
+=AÛ
+žAÛ33AÛG®AÛ\)AÛp€AÛ
+AÛAÛ®AÛÂAÛ×
+AÛë
+AÜ  AÜ{AÜ(öAÜ=qAÜQìAÜffAÜzáAÜ\AÜ£×AÜžRAÜÌÍAÜáHAÜõÃAÝ
+=Aà  Aà{Aà(öAà=qAàQìAàffAàzáAà\Aà£×AàžRAàÌÍAàáHAàõÃAá
+=Aá
+žAá33AáG®Aá\)Aáp€Aá
+AáAá®AáÂAá×
+Aáë
+Aâ  Aâ{Aâ(öAâ=qAâQìAâffAâzáAâ\Aâ£×AâžRAâÌÍAâáHAâõÃAã
+=Aã
+žAã33AãG®Aã\)Aãp€Aã
+AãAã®AãÂAã×
+Aãë
+Aä  Aä{Aä(öAä=qAäQìAäffAäzáAä\Aä£×AäžRAäÌÍAäáHAäõÃAå
+=Aè  Aè{Aè(öAè=qAèQìAèffAèzáAè\Aè£×AèžRAèÌÍAèáHAèõÃAé
+=Aé
+žAé33AéG®Aé\)Aép€Aé
+AéAé®AéÂAé×
+Aéë
+Aê  Aê{Aê(öAê=qAêQìAêffAêzáAê\Aê£×AêžRAêÌÍAêáHAêõÃAë
+=Aë
+žAë33AëG®Aë\)Aëp€Aë
+AëAë®AëÂAë×
+Aëë
+Aì  Aì{Aì(öAì=qAìQìAìffAìzáAì\Aì£×AìžRAìÌÍAìáHAìõÃAí
+=Að  Að{Að(öAð=qAðQìAðffAðzáAð\Að£×AðžRAðÌÍAðáHAðõÃAñ
+=Añ
+žAñ33AñG®Añ\)Añp€Añ
+AñAñ®AñÂAñ×
+Añë
+Aò  Aò{Aò(öAò=qAòQìAòffAòzáAò\Aò£×AòžRAòÌÍAòáHAòõÃAó
+=Aó
+žAó33AóG®Aó\)Aóp€Aó
+AóAó®AóÂAó×
+Aóë
+Aô  Aô{Aô(öAô=qAôQìAôffAôzáAô\Aô£×AôžRAôÌÍAôáHAôõÃAõ
+=Aø  Aø{Aø(öAø=qAøQìAøffAøzáAø\Aø£×AøžRAøÌÍAøáHAøõÃAù
+=Aù
+žAù33AùG®Aù\)Aùp€Aù
+AùAù®AùÂAù×
+Aùë
+Aú  Aú{Aú(öAú=qAúQìAúffAúzáAú\Aú£×AúžRAúÌÍAúáHAúõÃAû
+=Aû
+žAû33AûG®Aû\)Aûp€Aû
+AûAû®AûÂAû×
+Aûë
+Aü  Aü{Aü(öAü=qAüQìAüffAüzáAü\Aü£×AüžRAüÌÍAüáHAüõÃAý
+=B   B 
+=B {B 
+žB (öB 33B =qB G®B QìB \)B ffB p€B záB 
+B \B B £×B ®B žRB ÂB ÌÍB ×
+B áHB ë
+B õÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB	  B	
+=B	{B	
+žB	(öB	33B	=qB	G®B	QìB	\)B	ffB	p€B	záB	
+B	\B	B	£×B	®B	žRB	ÂB	ÌÍB	×
+B	áHB	ë
+B	õÃB
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB
+  B
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B   B 
+=B {B 
+žB (öB 33B =qB G®B QìB \)B ffB p€B záB 
+B \B B £×B ®B žRB ÂB ÌÍB ×
+B áHB ë
+B õÃB!  B!
+=B!{B!
+žB!(öB!33B!=qB!G®B!QìB!\)B!ffB!p€B!záB!
+B!\B!B!£×B!®B!žRB!ÂB!ÌÍB!×
+B!áHB!ë
+B!õÃB"  B"
+=B"{B"
+žB"(öB"33B"=qB"G®B"QìB"\)B"ffB"p€B"záB"
+B$  B$
+=B${B$
+žB$(öB$33B$=qB$G®B$QìB$\)B$ffB$p€B$záB$
+B$\B$B$£×B$®B$žRB$ÂB$ÌÍB$×
+B$áHB$ë
+B$õÃB%  B%
+=B%{B%
+žB%(öB%33B%=qB%G®B%QìB%\)B%ffB%p€B%záB%
+B%\B%B%£×B%®B%žRB%ÂB%ÌÍB%×
+B%áHB%ë
+B%õÃB&  B&
+=B&{B&
+žB&(öB&33B&=qB&G®B&QìB&\)B&ffB&p€B&záB&
+B(  B(
+=B({B(
+žB((öB(33B(=qB(G®B(QìB(\)B(ffB(p€B(záB(
+B(\B(B(£×B(®B(žRB(ÂB(ÌÍB(×
+B(áHB(ë
+B(õÃB)  B)
+=B){B)
+žB)(öB)33B)=qB)G®B)QìB)\)B)ffB)p€B)záB)
+B)\B)B)£×B)®B)žRB)ÂB)ÌÍB)×
+B)áHB)ë
+B)õÃB*  B*
+=B*{B*
+žB*(öB*33B*=qB*G®B*QìB*\)B*ffB*p€B*záB*
+B,  B,
+=B,{B,
+žB,(öB,33B,=qB,G®B,QìB,\)B,ffB,p€B,záB,
+B,\B,B,£×B,®B,žRB,ÂB,ÌÍB,×
+B,áHB,ë
+B,õÃB-  B-
+=B-{B-
+žB-(öB-33B-=qB-G®B-QìB-\)B-ffB-p€B-záB-
+B-\B-B-£×B-®B-žRB-ÂB-ÌÍB-×
+B-áHB-ë
+B-õÃB.  B.
+=B.{B.
+žB.(öB.33B.=qB.G®B.QìB.\)B.ffB.p€B.záB.
+B0  B0
+=B0{B0
+žB0(öB033B0=qB0G®B0QìB0\)B0ffB0p€B0záB0
+B0\B0B0£×B0®B0žRB0ÂB0ÌÍB0×
+B0áHB0ë
+B0õÃB1  B1
+=B1{B1
+žB1(öB133B1=qB1G®B1QìB1\)B1ffB1p€B1záB1
+B1\B1B1£×B1®B1žRB1ÂB1ÌÍB1×
+B1áHB1ë
+B1õÃB2  B2
+=B2{B2
+žB2(öB233B2=qB2G®B2QìB2\)B2ffB2p€B2záB2
+B4  B4
+=B4{B4
+žB4(öB433B4=qB4G®B4QìB4\)B4ffB4p€B4záB4
+B4\B4B4£×B4®B4žRB4ÂB4ÌÍB4×
+B4áHB4ë
+B4õÃB5  B5
+=B5{B5
+žB5(öB533B5=qB5G®B5QìB5\)B5ffB5p€B5záB5
+B5\B5B5£×B5®B5žRB5ÂB5ÌÍB5×
+B5áHB5ë
+B5õÃB6  B6
+=B6{B6
+žB6(öB633B6=qB6G®B6QìB6\)B6ffB6p€B6záB6
+B8  B8
+=B8{B8
+žB8(öB833B8=qB8G®B8QìB8\)B8ffB8p€B8záB8
+B8\B8B8£×B8®B8žRB8ÂB8ÌÍB8×
+B8áHB8ë
+B8õÃB9  B9
+=B9{B9
+žB9(öB933B9=qB9G®B9QìB9\)B9ffB9p€B9záB9
+B9\B9B9£×B9®B9žRB9ÂB9ÌÍB9×
+B9áHB9ë
+B9õÃB:  B:
+=B:{B:
+žB:(öB:33B:=qB:G®B:QìB:\)B:ffB:p€B:záB:
+B<  B<
+=B<{B<
+žB<(öB<33B<=qB<G®B<QìB<\)B<ffB<p€B<záB<
+B<\B<B<£×B<®B<žRB<ÂB<ÌÍB<×
+B<áHB<ë
+B<õÃB=  B=
+=B={B=
+žB=(öB=33B==qB=G®B=QìB=\)B=ffB=p€B=záB=
+B=\B=B=£×B=®B=žRB=ÂB=ÌÍB=×
+B=áHB=ë
+B=õÃB>  B>
+=B>{B>
+žB>(öB>33B>=qB>G®B>QìB>\)B>ffB>p€B>záB>
+B@  B@
+=B@{B@
+žB@(öB@33B@=qB@G®B@QìB@\)B@ffB@p€B@záB@
+B@\B@B@£×B@®B@žRB@ÂB@ÌÍB@×
+B@áHB@ë
+B@õÃBA  BA
+=BA{BA
+žBA(öBA33BA=qBAG®BAQìBA\)BAffBAp€BAzáBA
+BA\BABA£×BA®BAžRBAÂBAÌÍBA×
+BAáHBAë
+BAõÃBB  BB
+=BB{BB
+žBB(öBB33BB=qBBG®BBQìBB\)BBffBBp€BBzáBB
+BD  BD
+=BD{BD
+žBD(öBD33BD=qBDG®BDQìBD\)BDffBDp€BDzáBD
+BD\BDBD£×BD®BDžRBDÂBDÌÍBD×
+BDáHBDë
+BDõÃBE  BE
+=BE{BE
+žBE(öBE33BE=qBEG®BEQìBE\)BEffBEp€BEzáBE
+BE\BEBE£×BE®BEžRBEÂBEÌÍBE×
+BEáHBEë
+BEõÃBF  BF
+=BF{BF
+žBF(öBF33BF=qBFG®BFQìBF\)BFffBFp€BFzáBF
+BH  BH
+=BH{BH
+žBH(öBH33BH=qBHG®BHQìBH\)BHffBHp€BHzáBH
+BH\BHBH£×BH®BHžRBHÂBHÌÍBH×
+BHáHBHë
+BHõÃBI  BI
+=BI{BI
+žBI(öBI33BI=qBIG®BIQìBI\)BIffBIp€BIzáBI
+BI\BIBI£×BI®BIžRBIÂBIÌÍBI×
+BIáHBIë
+BIõÃBJ  BJ
+=BJ{BJ
+žBJ(öBJ33BJ=qBJG®BJQìBJ\)BJffBJp€BJzáBJ
+BL  BL
+=BL{BL
+žBL(öBL33BL=qBLG®BLQìBL\)BLffBLp€BLzáBL
+BL\BLBL£×BL®BLžRBLÂBLÌÍBL×
+BLáHBLë
+BLõÃBM  BM
+=BM{BM
+žBM(öBM33BM=qBMG®BMQìBM\)BMffBMp€BMzáBM
+BM\BMBM£×BM®BMžRBMÂBMÌÍBM×
+BMáHBMë
+BMõÃBN  BN
+=BN{BN
+žBN(öBN33BN=qBNG®BNQìBN\)BNffBNp€BNzáBN
+BP  BP
+=BP{BP
+žBP(öBP33BP=qBPG®BPQìBP\)BPffBPp€BPzáBP
+BP\BPBP£×BP®BPžRBPÂBPÌÍBP×
+BPáHBPë
+BPõÃBQ  BQ
+=BQ{BQ
+žBQ(öBQ33BQ=qBQG®BQQìBQ\)BQffBQp€BQzáBQ
+BQ\BQBQ£×BQ®BQžRBQÂBQÌÍBQ×
+BQáHBQë
+BQõÃBR  BR
+=BR{BR
+žBR(öBR33BR=qBRG®BRQìBR\)BRffBRp€BRzáBR
+BT  BT
+=BT{BT
+žBT(öBT33BT=qBTG®BTQìBT\)BTffBTp€BTzáBT
+BT\BTBT£×BT®BTžRBTÂBTÌÍBT×
+BTáHBTë
+BTõÃBU  BU
+=BU{BU
+žBU(öBU33BU=qBUG®BUQìBU\)BUffBUp€BUzáBU
+BU\BUBU£×BU®BUžRBUÂBUÌÍBU×
+BUáHBUë
+BUõÃBV  BV
+=BV{BV
+žBV(öBV33BV=qBVG®BVQìBV\)BVffBVp€BVzáBV
+BX  BX
+=BX{BX
+žBX(öBX33BX=qBXG®BXQìBX\)BXffBXp€BXzáBX
+BX\BXBX£×BX®BXžRBXÂBXÌÍBX×
+BXáHBXë
+BXõÃBY  BY
+=BY{BY
+žBY(öBY33BY=qBYG®BYQìBY\)BYffBYp€BYzáBY
+BY\BYBY£×BY®BYžRBYÂBYÌÍBY×
+BYáHBYë
+BYõÃBZ  BZ
+=BZ{BZ
+žBZ(öBZ33BZ=qBZG®BZQìBZ\)BZffBZp€BZzáBZ
+B\  B\
+=B\{B\
+žB\(öB\33B\=qB\G®B\QìB\\)B\ffB\p€B\záB\
+B\\B\B\£×B\®B\žRB\ÂB\ÌÍB\×
+B\áHB\ë
+B\õÃB]  B]
+=B]{B]
+žB](öB]33B]=qB]G®B]QìB]\)B]ffB]p€B]záB]
+B]\B]B]£×B]®B]žRB]ÂB]ÌÍB]×
+B]áHB]ë
+B]õÃB^  B^
+=B^{B^
+žB^(öB^33B^=qB^G®B^QìB^\)B^ffB^p€B^záB^
+B`  B`
+=B`{B`
+žB`(öB`33B`=qB`G®B`QìB`\)B`ffB`p€B`záB`
+B`\B`B`£×B`®B`žRB`ÂB`ÌÍB`×
+B`áHB`ë
+B`õÃBa  Ba
+=Ba{Ba
+žBa(öBa33Ba=qBaG®BaQìBa\)BaffBap€BazáBa
+Ba\BaBa£×Ba®BažRBaÂBaÌÍBa×
+BaáHBaë
+BaõÃBb  Bb
+=Bb{Bb
+žBb(öBb33Bb=qBbG®BbQìBb\)BbffBbp€BbzáBb
+Bd  Bd
+=Bd{Bd
+žBd(öBd33Bd=qBdG®BdQìBd\)BdffBdp€BdzáBd
+Bd\BdBd£×Bd®BdžRBdÂBdÌÍBd×
+BdáHBdë
+BdõÃBe  Be
+=Be{Be
+žBe(öBe33Be=qBeG®BeQìBe\)BeffBep€BezáBe
+Be\BeBe£×Be®BežRBeÂBeÌÍBe×
+BeáHBeë
+BeõÃBf  Bf
+=Bf{Bf
+žBf(öBf33Bf=qBfG®BfQìBf\)BfffBfp€BfzáBf
+Bh  Bh
+=Bh{Bh
+žBh(öBh33Bh=qBhG®BhQìBh\)BhffBhp€BhzáBh
+Bh\BhBh£×Bh®BhžRBhÂBhÌÍBh×
+BháHBhë
+BhõÃBi  Bi
+=Bi{Bi
+žBi(öBi33Bi=qBiG®BiQìBi\)BiffBip€BizáBi
+Bi\BiBi£×Bi®BižRBiÂBiÌÍBi×
+BiáHBië
+BiõÃBj  Bj
+=Bj{Bj
+žBj(öBj33Bj=qBjG®BjQìBj\)BjffBjp€BjzáBj
+Bl  Bl
+=Bl{Bl
+žBl(öBl33Bl=qBlG®BlQìBl\)BlffBlp€BlzáBl
+Bl\BlBl£×Bl®BlžRBlÂBlÌÍBl×
+BláHBlë
+BlõÃBm  Bm
+=Bm{Bm
+žBm(öBm33Bm=qBmG®BmQìBm\)BmffBmp€BmzáBm
+Bm\BmBm£×Bm®BmžRBmÂBmÌÍBm×
+BmáHBmë
+BmõÃBn  Bn
+=Bn{Bn
+žBn(öBn33Bn=qBnG®BnQìBn\)BnffBnp€BnzáBn
+Bp  Bp
+=Bp{Bp
+žBp(öBp33Bp=qBpG®BpQìBp\)BpffBpp€BpzáBp
+Bp\BpBp£×Bp®BpžRBpÂBpÌÍBp×
+BpáHBpë
+BpõÃBq  Bq
+=Bq{Bq
+žBq(öBq33Bq=qBqG®BqQìBq\)BqffBqp€BqzáBq
+Bq\BqBq£×Bq®BqžRBqÂBqÌÍBq×
+BqáHBqë
+BqõÃBr  Br
+=Br{Br
+žBr(öBr33Br=qBrG®BrQìBr\)BrffBrp€BrzáBr
+Bt  Bt
+=Bt{Bt
+žBt(öBt33Bt=qBtG®BtQìBt\)BtffBtp€BtzáBt
+Bt\BtBt£×Bt®BtžRBtÂBtÌÍBt×
+BtáHBtë
+BtõÃBu  Bu
+=Bu{Bu
+žBu(öBu33Bu=qBuG®BuQìBu\)BuffBup€BuzáBu
+Bu\BuBu£×Bu®BužRBuÂBuÌÍBu×
+BuáHBuë
+BuõÃBv  Bv
+=Bv{Bv
+žBv(öBv33Bv=qBvG®BvQìBv\)BvffBvp€BvzáBv
+Bx  Bx
+=Bx{Bx
+žBx(öBx33Bx=qBxG®BxQìBx\)BxffBxp€BxzáBx
+Bx\BxBx£×Bx®BxžRBxÂBxÌÍBx×
+BxáHBxë
+BxõÃBy  By
+=By{By
+žBy(öBy33By=qByG®ByQìBy\)ByffByp€ByzáBy
+By\ByBy£×By®ByžRByÂByÌÍBy×
+ByáHByë
+ByõÃBz  Bz
+=Bz{Bz
+žBz(öBz33Bz=qBzG®BzQìBz\)BzffBzp€BzzáBz
+B|  B|
+=B|{B|
+žB|(öB|33B|=qB|G®B|QìB|\)B|ffB|p€B|záB|
+B|\B|B|£×B|®B|žRB|ÂB|ÌÍB|×
+B|áHB|ë
+B|õÃB}  B}
+=B}{B}
+žB}(öB}33B}=qB}G®B}QìB}\)B}ffB}p€B}záB}
+B}\B}B}£×B}®B}žRB}ÂB}ÌÍB}×
+B}áHB}ë
+B}õÃB~  B~
+=B~{B~
+žB~(öB~33B~=qB~G®B~QìB~\)B~ffB~p€B~záB~
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =
+(Ð9±¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?¹V:?=œ =(a<m<{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @7-@	ñâ?ºHþ?A\r=bn|<êxs¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ø@dt\@7Šù@
+Ù?Œg?DûC=-Ë=/)S¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @¶<@{b@±@e\@8@
+Á;?œç°?HÔ=«"U=ig¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ãZx@ÌŒ@¶Uí@ï<@@fCµ@9vR@
+šï?¿·?L8Š=Èâ=Á¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AMÚ@ùýÚ@ã)@Í0x@¶ÉÇ@ c@üf@g+i@:^@
+£?Á?O×x=åm=®xL¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+îxAAl3@úqµ@ä
+@Í€S@·=¢@ Öñ@p@@h
+@;Eº@xX?ÃUê?SvJ>ý=ËnÙ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A5A*@)A
+ÑAÙxAŠ @úå@ä~Þ@Î-@·±|@¡JË@ä@húÒ@<-o@`
+?Å%S?W>~C=èee¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AL/°A@àÃA5­kA*zAFºAaAà	@ûYa@äò°@Îÿ@ž%N@¡Ÿ@Wì@iâv@=@G°?Æô?Z³¬>
+ø>­÷¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AbÐNAWaALN	AA°A5çXA*³ÿA§AMNA	ö@ûÍ;@åf@ÎÿÙ@ž(@¢2w@ËÆ@jÊ*@=üÇ@/e?ÈÄ?^R~>,sÏ>)>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AypìAn!ÿAbî§AW»NALöAATA6!EA*íìAºA<A	Sã@üA@åÚd@Ïs³@¹
+@¢ŠQ@?¡@k±ß@>ä|@?Ên?añO>:ï>€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÆAaOAyEAn[ìAc(AWõ;ALÁãAAA6[2A+'ÚAôAÁ(A	Ð@üŽï@æN>@Ïç@¹Ý@£,@³z@l@?Ì1@þÎ?ÌbÖ?e!>Ij[>.Ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AYA±AðA~DAyÉ.AnÕAcb}AX/$ALûÌAAÈtA6A+aÂA .jAûA	Ç¹@ý(Â@æÂ@Ð[`@¹ô®@£þ@'M@m8@@³Õ@æs?Î2?i.²>Wä£><¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A©dAíAh@AÎA4çA:AzAnÏÂAcjAXiAM5¹AB`A6ÏA+°A hWA4ÿA
+Š@ý@ç5ê@ÐÏ:@ºh@€Ø@'@nhì@A@Î'?Ð?lÍ
+>f_ê>KZ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A©ùŽA€R=AžA
+äA
+7AëAQÞAž1Az=Ao	°AcÖWAX¢þAMoŠAB<NA7õA+ÕA ¢DAnëA
+;@þv@ç©Å@ÑC@ºÜc@€u²@@oP¡@B>@µÛ?ÑÐñ?plW>tÛ1>Y¡¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AµJA¯¢AªàA€o4AÕA;ÚA¢.AAnÓAÕ'AzvõAoCAdDAXÜìAM©ABv;A7BâA,A Ü1AšÙA
+u@þP@è
+@Ñ¶î@»P=@€é@Û@p8U@Cjó@?Ó Z?t
+(>«<>h
+è¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÀTAºòÝAµY0A¯¿Aª%×A€*Aò~AXÑA¿#A%wAÊAò
+Az°âAo}AdJ1AYÙAMãAB°'A7|ÏA,IwA!AâÆA
+¯m@þø*@èy@Ò*È@»Ä@¥]f@ö¶@q 	@DR§@
+D?ÕoÃ?w©ú>èà>v/¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AËê¢AÆC+AÀ©~A»ÒAµv%A¯ÜxAªBÌA€©AqAuÅAÜABlAš¿AAzêËAo·sAdAYPÁAN
+iABêA7¶¹A,`A!PA
+¯A
+éV@ÿkü@éK@Ò@Œ7ê@¥Ñ8@j@r®@E:K@lè?×?
+?{H>&>»¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A×:òAÑ{AËùÎAÆ`"AÀÆuA»,ÈAµ
+A¯ùoAª_ÁA€ÆA,hAŒAùA_bAÅ¶A,	A{$žAoñ_AdŸAY¯ANWWAC#þA7ð¥A,œMA!ôAVA
+#D@ÿßÖ@éy&@Ót@Œ«Ä@ŠE@Þb@rïb@F" @T?Ùt?~ç]>c§>¿_¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AâBAÜãËA×J
+AÑ°rAÌÅAÆ}AÀãlA»I¿Aµ°A°eAª|žA€ã
+AI_A¯²AA|YAâ¬AI A{^ŠAp+MAd÷õAYÄANCAC]ëA8*A,÷:A!ÃâAA
+]0A )Ø@éí @ÓO@œ@Šží@R<@s×@G	Ž@<Q?ÚÝÝ?C>¡K>ý¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AíÛAè4AânAÝ ÂA×gAÑÍhAÌ3ŒAÆAÁ aA»fµAµÍA°3\Aª¯A¥ AfVAÌ©A2üAPAÿ£AeöA{Ape:Ae1áAYþANË0ACØA8dA-1'A!ýÎAÊvA
+
+A cÆ@ê`Ú@Óú)@œx@§,Ç@Æ@tŸÌ@Gñh@$?Ü­F?>¥Þî>:Š¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aù+âAókAíêŸAèQAâ·eAÝ
+žA×
+AÑê_AÌP±AÆ·AÁ
+XA»¬AµéÿA°PRAª¶ŠA¥
+ùALAé AOóA¶FA
+AìA{ÒAp'AekÎAZ8vAO
+ACÑÅA8lA-kA"7ŒAdA
+Ñ
+A ²@êÔŽ@Ôn@ŸR@§ ¢@9ñ@uŠ@HÙ
+@
+
+º?Þ|¯?áé>­
+>xJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B>AþÔ¹Aù;
+Aó¡`Aî³AènAâÔZAÝ:­A× ÿAÒSAÌmŠAÆÓúAÁ:MA»  A¶ôA°mGAªÓA¥9îA AAAlçAÓ:A9AáA|
+hApÙAe¥žAZr_AO?AD
+®A8ØVA-€þA"q¥A>LA
+
+ôA ×@ëH@ÔáÖ@Ÿ{%@št@­Ã@v$@IÀÁ@
+ó_?àK÷?±2>ŽYµ>Šµí¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bæ@BBE®Aþñ¯AùXAóŸVAî$ªAèýAâñOAÝW£A×œöAÒ$JAÌAÆððAÁWDA»œA¶#êA°>AªðA¥VäAœ7A#AÝAð1AVAŒØA|FVAqýAeß€AZ¬LAOxôADEA9CA-ÞêA"«Ax9A
+DáA@ëŒa@ÕU°@Ÿîÿ@šN@!@wuÙ@Jšv@
+Û?â`?>»Y>­ó¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+hB
+º¬BíÖB! BT)AÿŠAùtúAóÛMAîAAè§óAãFAÝtA×ÚíAÒA@AÌ§AÇ
+çAÁt:A»ÚA¶@áA°§4A«
+A¥sÚAÚ-A@AŠÔA
+(As{AÙÎA|CAqLêAfAZæ:AO²áADA9L0A.×A"åA²'A
+~ÏAKv@ì0;@ÕÉ@¿bÙ@šü)@x@x]@K*@
+ÂÇ?ãêÊ?P>ÂÔü>µ15¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B6BbÔB
+þB
+É(BüQB/{Bb¥Aÿ+AùïAóøCAî^AèÄêAã+=AÝA×÷äAÒ^7AÌÄAÇ*ÞAÁ1A»÷A¶]×A°Ä*A«*}A¥ÑA÷$A]xAÃËA*
+ArAöÅA|º0AqØAfSA[ &AOìÎAD¹uA9
+A.RÅA#mAìA
+žŒA
+c@ì€@Ö=e@¿ÖŽ@©p@	R@yEB@Lwß@ª|?åº2?m>Ê¡>ŒnÙ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BÞžB
+üB>&BqPB
+€yB
+×£B
+ÍB=öBq AÿHAù®æAô:Aî{AèáàAãH4AÝ®AØÚAÒ{.AÌáAÇGÔAÁ®'AŒzA¶zÎA°á!A«GtA¥­ÈA AznAàÂAGA­hA»A|ô
+AqÀÄAflA[ZAP&»ADócA9À
+A.²A#YZA&A
+ò©A¿P@íð@Ö±?@ÀJ@©ãÝ@},@z,ö@M_@ 1?ç?îÖ>ÑPD>Ã¬|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+ßB³#BæMBwBL BÊB
+²ôB
+æ
+BGBLqBAÿeAùËÛAô2.AîAèþÕAãe(AÝË|AØ1ÏAÒ"AÌþuAÇdÈAÁË
+AŒ1oA¶ÂA°þA«diA¥ÊŒA 1AcAý¶Ad	AÊ\A0°A}.Aqú­AfÇUA[ýAP`¥AE-LA9ùôA.ÆA#CA_êA
+,Aù:@íÂ@×%@ÀŸ`@ªW¯@ðþ@{@NG8@!yÕ?éXå?Ÿ>Øh>Êê ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B$/B![KB
+uBÁBôÈB'òB[
+BEB
+ÁoB
+ôB'ÂBZìBAÿAùèÒAôO%AîµxAéÌAãAÝèrAØNÅAÒµAÍlAÇ¿AÁèAŒNfA¶Ž¹A±
+A«`A¥ç³A NAŽYA¬A AçSAMŠA}góAr4AgCA[ÍêAPAEg9A:3áA/ A#Í0AØA
+fA3&@íÿ@×ë@Á2:@ªË@dÙ@{üO@O.ì@"a?ë(M?>ßË
+>Ò'Ä¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B)×/B'sB$6B!iÇB
+ðBÐBDB6mBiBÁB
+ÏêB
+B6>BigBAÿtAúÈAôl
+AîÒoAé8ÂAãAÞhAØkŒAÒÒAÍ8bAÇ¶AÂ	AŒk\A¶Ñ°A±8A«VAŠ©A jüAÑPA7£AöAJAjA}¡áArnAg;0A\×APÔAE¡&A:mÎA/:vA$
+AÓÄA
+ lAm@îsv@Ø
+Å@ÁŠ@«?c@Ø³@|ä@P @#I>?ì÷·?\ñ>ç¯>Ùeh¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B/WB,«B)ÞÅB'ïB$EB!xBB
+«lBÞB¿BDéBxB«<B
+ÞfB
+BD¹BwâB«
+AÿŒkAú"¿AôAîïeAéUžAãŒ
+AÞ"_AØ²AÒïAÍUYAÇ»¬AÂ" AŒSA¶îŠA±TùA«»LAŠ! A óAîFATAºíA!@AA}ÛÎAršuAgu
+A\AÄAQlAEÛA:§»A/tbA$A
+A
+²A
+ÚYA§@îçQ@Ø@Âï@«³>@L@}Ëž@PþV@$0ó?îÇ ?,Z>îFT>à£
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B5'B2SÃB/íB,ºB)í@B' jB$SB!œB
+¹çBíB :BSdBB¹·B
+ìáB
+ 
+BS4B^B¹AÿÙbAú?µAôŠAï
+\Aér¯AãÙAÞ?VAØ¥©AÓ
+üAÍrPAÇØ£AÂ>öAŒ¥IA·
+A±qðA«ØCAŠ>A €êA
+=AqA×äA>7A€A~»ArâbAg¯
+A\{²AQHYAF A:ášA/®PA$z÷AGAFAàî@ï[+@Øôz@ÂÉ@¬'@Àg@~³l@Qæ
+@%§?ð?ûÄ>õù>çà°¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B:ÏŠB7ûêB5/B2b>B/gB,ÈB)û»B'.äB$bB!8B
+ÈaBûB.µBaÞBBÈ1B
+û[B
+.
+Ba®BØBÈAÿöVAú\ªAôÂýAï)PAé€Aãõ÷AÞ\JAØÂAÓ(ñAÍDAÇõAÂ[êAŒÂ>A·(A±äA«õ8AŠ[A ÁÞA(2A
+AôØA[,AÁ~A~O£As
+LAgèóA\µAQBAFNêA;A/è9A$ŽàAAN/A×@ïÎý@ÙhL@Ã@¬ê@49@@RÍ¯@& L?òeÒ?Ë
+>üÁ
+>ï
+U¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B@wÎB=€B:×<B8
+fB5=B2p¹B/£ãB,×
+B*
+6B'=`B$pB!£³B
+ÖÝB
+
+B=0BpYB£BÖ­B	ÖB
+= Bp*B£SBÖ}B 	§Aúy AôßôAïFGAé¬AäîAÞyAAØßAÓEçAÍ¬:AÈAÂxáAŒß4A·EA±«ÛA¬.AŠxA ÞÕAE(A«|AÎAx"AÞuA~AsV8Ah"àA\ïAQŒ/AF×A;U~A0"&A$îÍA»uA
+ATÄ@ðB×@ÙÜ&@Ãuu@­Ä@š@Ac@Sµc@&è ?ô5;?u?ÿ`>ö[ø¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BFöBCL:B@dB=²B:å·B8áB5L
+B24B/²^B,åB*±B'KÛB$B!².B
+åXB
+BK«B~ÕB±þBå(BRB
+K{B~¥B±ÏBäøB !AúAôüêAïc>AéÉAä/äAÞ7AØüAÓbÞAÍÉ1AÈ/AÂØAŒü+A·b~A±ÈÒA¬/%AŠxA ûÌAb
+AÈrA.ÅAAûlA~Ã~As&Ah\ÍA])uAQö
+AFÂÄA;kA0\A%(»AõbAÂ	A±@ð¶±@ÚP @ÃéO@­@î@µ=@T@'Ïµ?ö€?iÞ?2>ý¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BKÈ
+BHôbBF'BCZ¶B@ßB=Á	B:ô3B8'\B5ZB2°B/ÀÙB,ôB*'-B'ZVB$B!À©B
+óÓB
+&ýBZ&BPBÀzBó£B&ÍB
+Y÷B BÀIBósB &Aú³AõáAï4AéæAäLÚAÞ³.AÙAÓÔAÍæ(AÈL{AÂ²ÎAœ"A·uA±åÈA¬L
+AŠ²nA¡ÂAAåhAKŒA²A
+bA~ýkAsÊAhºA]cbAR0	AFü±A;ÉYA0 A%b§A/OAû÷AÈ@ñ*@ÚÃÛ@Ä]*@­öy@È@)@UÌ@(·i?÷Ô
+?9G?	=?k ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BQpFBNBKÏŽBIÞBF6BCi1B@[B=ÏB;®B85ØB5iB2+B/ÏUB-~B*5šB'hÑB$ûB!Ï%BNB
+5xBh¢BËBÎõBB5HB
+hqBBÎÅBîB 5AúÐAõ6×Aï*Aê~AäiÑAÞÐ$AÙ6xAÓËAÎ
+AÈirAÂÏÅAœ6A·lA²ŸA¬iAŠÏeA¡5žA
+A_Ah²AÏA
+5YA7XAt AhÐ§A]OARi÷AG6A<EA0ÏíA%Ai<A5äA@ñf@Û7µ@ÄÑ@®jS@¢@ò@Vl@)
+?ù£v? °?
+ÛÖ?
+r¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BWmBTD±BQwÛBN«BKÞ.BIXBFDBCw«B@ªÕB=ÝÿB;(B8DRB5w|B2ª¥B/ÝÏB-øB*D"B'wLB$ªuB!ÝBÉB
+CòBw
+BªFBÝoBBCÂB
+vìBªBÝ?BiB CAúíxAõSÌAïºAê rAäÆAÞíAÙSlAÓ¹ÀAÎ AÈfAÂìºAœS
+A·¹`A²³A¬AŠìZA¡R­A¹ ATA
+§AëúA
+RNAqAAt=éAi
+A]×8AR£ßAGpA<=/A1	ÖA%Ö~A£%AoÍA<t@ò8@Û«@ÅDÖ@®Þ%@wt@Ä@WT%@*Â?ûrŸ?¡×ù?zg?	©D¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B\ÀBYìÙBW BTS-BQVBN¹BKìªBIÓBFRýBC'B@¹PB=ìzB;€B8RÍB5
+÷B2¹ B/ìJB-tB*RB'
+ÇB$žñB!ìBDB
+RnB
+BžÀBëêBBR=B
+
+gBžBë»B
+åB RAû
+oAõpÂAï×Aê=iAä£ŒAß
+AÙpcAÓÖ¶AÎ=
+AÈ£\AÃ	°AœpA·ÖVA²<ªA¬¢ýA§	PA¡o€AÕ÷A<JA¢AñA
+oDA«.AtwÖAiD}A^%ARÝÍAGªtA<w
+A1CÃA&kAÝA©ºAvb@ò@Üa@Åž°@¯R @ëO@@X;Ù@+nv?ýB'?£§b?:?
+H¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BbhœB_B\È+BYûUBW.~BTašBQÒBNÇûBKû%BI.OBFaxBC¢B@ÇÌB=úõB;.B8aHB5rB2ÇB/úÅB--ïB*aB'BB$ÇlB!úB-¿B
+`èBBÇ<BúeB-B`¹B
+ãBÇ
+Bú6B-`B `Aû'fAõ¹Aïô
+AêZ`AäÀ³Aß'AÙZAÓó¬AÎZ AÈÀSAÃ&ŠAœúA·óMA²Y A¬¿ôA§&GA¡AòîAYAA¿A%çA
+:AåAt±ÃAi~kA^KASºAGäaA<±	A1}°A&JXA Aã§A°N@òùì@Ü<@Æ,@¯ÅÚ@_)@øx@Y#@,V+?ÿ?¥vË?ž
+?æè¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BhåBe=)BbpSB_£}B\ÖŠBZ	ÐBW<úBTp#BQ£MBNÖwBL	 BI<ÊBFoôBC£
+B@ÖGB>	pB;<B8oÄB5¢íB2ÖB0	AB-<jB*oB'¢ŸB$ÕçB"	B<:B
+odB¢BÕ·BáB<
+Bo5B
+¢^BÕB²B;ÛB oAûD\Aõª°AðAêwVAäÝªAßCüAÙªPAÔ£AÎvöAÈÝJAÃCAœ©ðAžDA²vA¬ÜêA§C>A¡©AäAv7AÜABÞA
+©1AAtë°AižXA^ÿASQ§AH
+NA<êöA1·A&EAPìA
+Aê<@ómÇ@Ý@Æ e@°9Ž@Ó@lR@Z
+B@-=ß@ p|?§F3?VÝ?
+¹¿  ¿  ¿  ¿  ¿  ¿  Bm¹
+BjåQBh{BeK¥Bb~ÎB_±øB\å"BZKBWKuBT~BQ±ÈBNäòBL
+BIKEBF~oBC±B@äÂB>ìB;KB8~?B5±iB2äB0ŒB-JæB*~B'±8B$äbB"BJµB
+}ßB±	Bä3B]BJB}°B
+°ÚBäB,BJVB }AûaSAõÇŠAð-úAêLAäú Aß`óAÙÇFAÔ-AÎíAÈú@AÃ`AœÆçAž-:A²A¬ùáA§`4A¡ÆA,ÚA.AùA_ÔA
+Æ(A,{Au%AiòEA^ŸìASAHX<A=$ãA1ñA&Ÿ2AÚAWA$)@óá¡@Ýzð@Ç?@°­@FÞ@à-@Zòö@.%@X1?©?
+õ¯?$¿  ¿  ¿  ¿  Bsa4BpxBmÀ¢BjóÌBh&õBeZBbIB_ÀrB\óBZ&ÆBWYïBTBQÀCBNólBL&BIY¿BFéBCÀB@ó<B>&fB;YB8¹B5¿ãB2ó
+B0&6B-Y_B*B'¿³B$òÜB"&BY0B
+ZB¿Bò­B%×BYB*B
+¿SBò}B%§BXÐB úAû~HAõäAðJîAê±AAåAß}èAÙä;AÔJAÎ°âAÉ5AÃ}AœãÜAžJ/A²°A­ÕA§}(A¡ã|AIÏA°"AvA|ÉA
+ã
+AIpAu_Aj,.A^øÖASÅ}AH$A=^ÌA2+tA&øAÄÃAkA^@ôUs@ÝîÂ@Ç@±!a@º°@Sÿ@[Ú@/
+8@?Õ?ªäæ?"B?Ã^¿  ¿  By	\Bv5 BshÊBpôBmÏ
+BkGBh5qBehBbÄB_ÎîB]BZ5ABWhkBTBQÎŸBOçBL5BIh;BFdBCÎBAžB>4áB;h
+B85B5Î^B3B04±B-gÛB*B'Î.B%XB"4Bg¬B
+ÕBÍÿB)B4RBg{B¥B
+ÍÏB	 øB4"BgLB uAû>AöAðgäAêÎ8Aå4AßÞAÚ2AÔg
+AÎÍØAÉ4,AÃAŸ ÒAžg%A²ÍxA­3ÌA§A¢ rAfÆAÍA3lAÀA AffAutAjfA_2ÂASÿjAHÌA=¹A2eaA'2	Aþ°AËWAÿ@ôÉN@Þb@Çûì@±;@.@ÇÙ@\ÂO@/ôí@'?¬ŽO?&3?b/B|  B{ÝÈByòBvD
+BswEBpªoBmÝBkÂBhCìBewBbª?B_ÝiB]BZCŒBWvæBTªBQÝ9BOcBLCBIv¶BF©àBCÝ	BA3B>C]B;vB8©¯B5ÜÙB3B0C,B-vVB*©B'ÜªB%ÔB"BýBv'B
+©QBÜzB£BBÍBu÷B© B
+ÜJB	tBBBuÇB šñAûž4Aö
+AðÛAêë.AåQAß·ÕAÚ
+(AÔ|AÎêÏAÉQ"AÃ·uAŸ
+ÈAž
+A²êoA­PÂA§·A¢
+iAŒAêAPcA¶¶A
+	A\AuÓ`Aj A_l°AT9WAIÿA=Ò§A2NA'kõA
+8AEAÑí@õ=(@ÞÖw@ÈoÆ@²	@¢e@
+;³@]ª@0Ü¢@??®ž?)Ñå¿  B|B{ìDBymBvRBs
+ÁBpžêBmìBk>BhRgBe
+Bbž»B_ëäB]BZR7BW
+aBTžBQëŽBO
+ÞBLRBI
+1BFž[BCë
+BA
+®B>Q×B;
+B8ž+B5ëTB3
+~B0QšB-ÒB*·üB'ë%B%
+OB"QyB¢B
+·ËBêõB
+BQHBrB·B
+êÅB	
+ïBQBBB ·lAûÕ+Aö;~Að¡ÒAë%AånxAßÔÌAÚ;AÔ¡rAÏÅAÉnAÃÔlAŸ:¿Až¡A³fA­m¹A§Ô
+A¢:`A ³AAmYAÓ¬A: A SAv
+NAjÙõA_ŠATsEAI?ìA>
+A2Ù;A'¥ãA
+rA?2A
+Ù@õ±@ßJQ@Èã¡@²|ð@>@
+¯@^¹@1ÄV@öó?¯vw¿  ¿  B|B{ú¿By-éBvaBs<BpÇfBmúBk-¹Bh`ãBe
+BbÇ6B_ú_B]-BZ`³BWÜBTÇBQú0BO-YBL`BI­BFÆÖBCùÿBA-)B>`SB;|B8ÆŠB5ùÐB3,úB0`$B-MB*ÆwB'ù¡B%,ÊB"_óB
+B
+ÆGBùpB,B_ÄBíBÆB
+ùAB	,jB_BŸB ÅçAûò"AöXuAðŸÈAë%
+AåoAßñÂAÚXAÔŸhAÏ$ŒAÉAÃñbAŸW¶AžŸ	A³$\A­°A§ñA¢WVAœ©A#üAPAð£AVöAœJAvG;AkãA_àAT­1AIyÙA>FA3)A'ßÐA
+¬wAyAEÇ@ö$Ý@ßŸ,@ÉWz@²ðÊ@@#h@_yn@2=¶¿  ¿  ¿  ¿  B|$B|	:By<dBvoBs¢·BpÕáBn	
+Bk<4Bho^Be¢BbÕ±B`ÛB]<BZo.BW¢XBTÕBR«BO;ÕBLnþBI¢'BFÕQBD{BA;€B>nÎB;¡øB8Õ"B6LB3;uB0nB-¡ÉB*ÔòB(B%;EB"noB¡B
+ÔÂBìB;Bn?B¡iBÔB
+ŒB	:æBnB¡9B ÔbAüAöulAðÛ¿AëBAåšeAàžAÚu
+AÔÛ_AÏA²AÉšAÄYAŸt¬AžÛ A³ASA­§ŠAš
+ùA¢tLAÚ A@óA§FA
+AsíAÚ@Av(AkMÏA`wATçAI³ÇA>nA3MA(œA
+æeA³
+AŽ@ö·@à2@ÉËU@³d€@ýó@`¿  ¿  ¿  ¿  ¿  ¿  B|3B|¶ByJßBv~	Bs±3Bpä\BnBkJ¯Bh}ÙBe±Bbä,B`VB]JBZ}©BW°ÓBTãýBR&BOJOBL}yBI°£BFãÌBDöBAJ B>}JB;°tB8ãB6ÇB3IñB0}B-°CB*ãmB(B%IÀB"|êB°B
+ã=BgBIB|ºB¯äBãB
+7B	IaB|B¯ŽB âÞAü,AöbAðøµAë_AåÅ\Aà+¯AÚAÔøVAÏ^©AÉÄüAÄ+PAŸ£Až÷öA³^IA­ÄAš*ðA¢CA÷A]êAÄ=A*AäA÷7Av»AkœA`TeAU!
+AIí³A>º[A3A(SªA
+ RAìúA¹¡@÷
+@à¥à@Ê?/@³¡T¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|AB|&/ByYYBvBs¿¬BpòÕBn%ÿBkY)BhRBe¿|BbòŠB`%ÏB]XùBZ#BW¿LBTòuBR%BOXÉBLòBI¿
+BFòFBD%pBAXB>ÃB;ŸíB8òB6%@B3XiB0B-ŸœB*ñæB(%B%X:B"cBŸB
+ñ·B$àBX
+B4BŸ]BñB
+$°B	WÚBBŸ-B ñWAüIAö¯TAñšAë{ûAåâNAàH¢AÚ®õAÕHAÏ{AÉáïAÄHBAŸ®A¹èA³{<A­áAšGâA¢®6AAzÜAá0AGA­×A)AvôûAkÁ¢A`IAUZñAJ'A>ô@A3ÀèA(A
+Z7A&ÞAó@÷[@àâ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|OÿB|4ªBygÔBvýBsÎ'BqQBn4zBkg€BhÎBeÍ÷Bc!B`4KB]gtBZBWÍÇBU ñBR4BOgDBLnBIÍBG ÂBD3ëBAgB>?B;ÍhB9 B63»B3fåB0B-Í8B+ bB(3B%fµB"ßBÍB
+ 2B3\Bf
+B¯BÌØB B
+3,B	fUBBÌšB ÿÒAüeøAöÌKAñ2AëòAåÿEAàeAÚËìAÕ2?AÏAÉþåAÄe8AŸËA¹1ßA³2A­þAšdÙA¢Ë,A1AÓAþ'AdyAÊÌA1 Aw.çAkûA`È7AUÞAJaA?..A3úÕA(Ç|A
+$A`ÌAÞ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|^zB|C%ByvOBv©yBsÜ¢BqÌBnBöBkvBh©IBeÜsBcB`BÅB]uïBZ©BWÜBBUlBRBBOuÀBLšêBIÜBG=BDBgBAuB>š¹B;ÛãB9
+B6B6B3u`B0šB-Û³B+ÝB(BB%u0B"šZBÛB
+­BA×Bu Bš*BÛTB}B
+A§B	tÐB§úBÛ$BMAüîAöéBAñOAëµèAæ
+<AàAÚèâAÕO5AÏµAÊÜAÄ/AŸèA¹NÖA³µ)A®|AšÐA¢è#ANwAŽÉA
+ApAçÃANAwhÕAl5|Aa$AUÎÌAJsA?hA44ÂA)jA
+²|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|lõB|Q¡ByÊBv·ôBsë
+Bq
+GBnQqBkBh·ÄBeêíBc
+B`QAB]jBZ·BWêŸBU
+èBRQBO;BL·eBIêBG
+žBDPáBA
+B>·5B;ê^B9
+B6P²B3ÛB0·B-ê/B+
+XB(PB%¬B"¶ÕBéÿB
+
+(BPRB|B¶¥BéÏB
+øB
+P"B	LB¶uBéB
+ÉAüåA÷8AñlAëÒßAæ92Aà
+AÛØAÕl,AÏÒAÊ8ÒAÄ&A¿yA¹kÌA³Ò A®8sAšÇA£AklAÑÀA8AfAºAk
+Aw¢ÂAlojAa<AVžAJÕ`A?¢A4S¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|{pB|`
+ByFBvÆoBsùBq,ÃBn_ìBkBhÆ?BeùiBc,B`_ŒB]æBZÆBWù:BU,cBR_BO·BLÅàBIù	BG,3BD_]BAB>Å°B;øÚB9,B6_-B3WB0ÅB-øªB++ÔB(^ýB%'B"ÅPBøzB
++€B^ÍB÷BÅ BøJB+tB
+^B	ÇBÄñBøB+DAüŒÜA÷#/AñAëïÕAæV(AàŒ|AÛ"ÏAÕ"AÏïvAÊUÉAÄŒ
+A¿"pA¹ÃA³ïA®UiAš»ŒA£"AcAî¶AU
+A»]A!°AAwÜ¯Al©VAauþAVBŠAJóž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ìB|nBy¡ÁBvÔëBtBq;=BnngBk¡BhÔºBfäBc;B`n8B]¡bBZÔBXµBU:ßBRnBO¡1BLÔ[BJ
+BG:®BDmØBA¡B>Ô+B<UB9:B6mšB3 ÒB0ÓüB.%B+:OB(mxB% ¢B"ÓÌB õB
+:BmHB rBÓBÅB9ïB
+mB	 BBÓlBB9¿AüÙÒA÷@%AñŠxAì
+ÌAæsAàÙrAÛ?ÆAÕŠAÐ
+lAÊrÀAÄÙA¿?gA¹¥¹AŽ
+
+A®r`AšØ³A£?A¥ZA
+­Ar AØTA>§A€úAxAlãDAaV¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|gB|}By°<BvãeBtBqI¹Bn|âBk°
+Bhã6Bf`BcIB`|³B]¯ÝBZãBX0BUIYBR|BO¯­BLâÖBJ BGI*BD|SBA¯}B>â§B<ÐB9HúB6|$B3¯MB0âwB. B+HÊB({ôB%¯
+B"âGB pB
+HB{ÄB®íBâBABHjB
+{B	®ŸBáçBBH;AüöÈA÷]
+AñÃoAì)ÂAæAàöiAÛ\ŒAÕÃAÐ)cAÊ·AÄö	A¿\\A¹Â°AŽ)A®VAšõªA£[ýAÂPA(€A÷AõKA[AÁñAx4ô¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ŠâB|ByŸ·BvñáBt%
+BqX4Bn^BkŸBhñ²Bf$ÛBcXB`/B]ŸXBZñBX$«BUWÕBRþBOŸ(BLñRBJ${BGW¥BDÏBAœøB>ñ"B<$LB9WuB6B3œÈB0ðòB.$
+B+WEB(oB%œB"ðÂB #ìB
+WB?BœiBðB#ŒBVæB
+B	œ9BðcB#BV¶Aý¿A÷zAñàfAìF¹Aæ­
+Aá`AÛy³AÕàAÐFYAÊ¬¬AÅ A¿ySA¹ßŠAŽEúA®¬MA© A£xôAßGAEA«îA@AjÉ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|µ]B|	ByÍ2Bw \Bt3Bqf°BnÚBkÍBi -Bf3WBcfB`©B]ÌÓBZÿýBX3&BUfPBRzBOÌ£BLÿÍBJ2÷BGf BDJBAÌtB>ÿB<2ÇB9eðB6B3ÌDB0ÿmB.2B+eÀB(êB%ÌB"ÿ=B 2gB
+eBºBËäBÿB27BeaB
+B	ËŽBþÞB2Be1Aý0¶A÷	Añý\Aìc°AæÊAá0WAÛ©AÕüüAÐcPAÊÉ£AÅ/öA¿JA¹üAŽbðA®ÉDA©/A£ëAü>AbA»¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÃØB|šByÛ®BwØBtBBqu+BnšUBkÛBišBfAÑBctûB`š%B]ÛNB[xBXA¢BUtËBR§õBOÛBMHBJArBGtBD§ÅBAÚïB?B<ABB9tlB6§B3Ú¿B1
+èB.AB+t<B(§eB%ÚB#
+¹B @âB
+t
+B§6BÚ_B
+B@³BsÜB
+§B	Ú0B
+YB@Bs¬AýM¬A÷Ž AòSAì§AææùAáMLAÛ³ AÖóAÐFAÊæAÅLíA¿³@AºAŽçA®æ;A©LA£²àA
+i¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÒTB|¶þByê(Bw
+QBtP{Bq¥Bn¶ÎBké÷Bi
+!BfPKBctB`¶B]éÈB[
+ñBXPBUEBR¶nBOéBM
+ÂBJOëBGBD¶>BAéhB?
+B<O»B9åB6¶B3é8B1
+bB.OB+µB(µßB%éB#
+2B O\B
+
+Bµ¯BèÙB
+BO,BVB
+µB	è©BÒBNüB&AýjA÷ÐóAò7EAìAçìAáj?AÛÐAÖ6æAÐ9AËAÅiàA¿Ð3Aº6AŽÚA¯,A©[µ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|àÐB|ÅyByø£Bw+ÍBt^öBqBnÅIBkøsBi+Bf^ÆBcðB`ÅB]øCB[+mBX^BUÀBRÄêBOøBM+=BJ^fBGBDÄºBA÷ãB?+
+B<^6B9`B6ÄB3÷³B1*ÝB.^B+0B(ÄZB%÷B#*­B ]×B
+BÄ*B÷TB*~B]§BÑB
+ÃúB	÷$B*NB]wB¡AýA÷íèAòT<AìºAç âAá6AÛíAÖSÜAÐº0AË AÅ×A¿í*AºS|AŽ¬¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ïKB|ÓõBz
+Bw:GBtmqBq BnÓÄBlîBi:BfmABc kB`ÓB^ŸB[9èBXmBU ;BRÓeBPBM9žBJlâBG 
+BDÓ5BB^B?9B<l²B9ÛB6ÓB4/B19XB.lB+¬B(ÒÕB&ÿB#9)B lRB
+|BÒŠBÏB8ùBl"BLB
+ÒvB
+B8ÉBkóB
+Aý€Aø
+ßAòq2Aì×Aç=ÙAá€,AÜ
+AÖpÓAÐ×'AË=zAÅ£ÌA¿üU¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ýÆB|âoBzBwHÃBt{ìBq¯Bnâ@BliBiHBf{œBc®æB`âB^:B[HcBX{BU®¶BRáàBP
+BMH3BJ{]BG®BDá°BBÚB?HB<{-B9®WB6áB4ªB1GÔB.zýB+®'B(áQB&zB#G€B zÎB
+­÷Bá!BJBGtBzB­ÇB
+àñB
+BGDBznB­AýÁAø'ÖAò)Aìô|AçZÐAáÁ#AÜ'wAÖÊAÐô
+AËL¥¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
+AB|ðëBz$BwW>BthBqœBnð»Bl#åBiWBf8BcœbB`ðB^#µB[VÞBXBUœ2BRð[BP#
+BMV®BJØBGœBDð+BB#UB?VB<šB9ŒÒB6ïüB4#%B1VOB.yB+Œ¢B(ïÌB&"öB#VB IB
+ŒrBïB"ÆBUïBBŒCB
+ïlB
+"BUÀBéBŒAýÞyAøDÌAò« AísAçwÇAáÞAÜDlAÖõ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ŒB|ÿfBz2Bwe¹BtãBqÌ
+Bnÿ6Bl2`BieBf³BcËÝB`ÿB^20B[eZBXBUË­BRþÖBP2 BMe*BJSBGË}BDþ§BB1ÐB?dúB<$B9ËMB6þwB41¡B1dÊB.ôB+Ë
+B(þGB&1qB#dB ÄB
+ÊîBþB1ABdkBBÊŸB
+ýèB
+1Bd;BeBÊAýûpAøaÃAòÈAí.jAçŒAáíE¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B})8B}
+áBzA
+Bwt5Bt§^BqÚBo
+²Bl@ÛBitBf§.BcÚXBa
+B^@«B[sÕBXŠþBUÚ(BS
+RBP@{BMs¥BJŠÏBGÙøBE
+"BB@LB?suB<ŠB9ÙÉB7
+òB4@
+B1sFB.ŠoB+ÙB)
+ÂB&?ìB#sB Š?B
+ÙiB
+B?ŒBræBŠBÙ9B
+
+cB
+?Br¶B¥ßBÙ
+AþgAø~ºAòå
+Aí=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}7³B}
+]BzOBw°BtµÚBqéBo
+-BlOVBiBfµªBcèÓBaýB^O&B[PBXµzBUè£BSÍBPN÷BM BJµJBGètBEBBNÇB?ñB<µB9èDB7nB4NB1ÁB.ŽêB+èB)>B&NgB#B Ž»B
+çäBBN8BaBŽBçµB
+ÞB
+NB2BŽ[Bç
+Aþ5\Aøå¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}F.B}*ØBz^Bw+BtÄUBq÷~Bo*šBl]ÒBiûBfÄ%Bc÷NBa*xB^]¢B[ËBXÃõBU÷BS*HBP]rBMBJÃÅBGöïBE*BB]BB?lB<ÃB9ö¿B7)éB4]B1<B.ÃfB+öB))¹B&\ãB#
+B Ã6B
+ö`B)B\³BÝBÃBö/B
+)ZB
+\B­BÂ×Bï¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}TªB}9SBzl}BwŠBtÒÐBrúBo9#BllMBivBfÒ BdÊBa8óB^l
+B[GBXÒpBVBS8ÄBPkíBMBJÒABHjBE8BBkŸB?çB<ÒB::B78dB4kB1·B.ÑáB,
+B)84B&k^B#B Ñ±B
+ÛB8Bk.BWBÑB«B
+7ÕB
+jÿBC¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}c%B}GÌBzzöBw® BtáIBrsBoGBlzÆBi­ðBfáBdCBaGmB^zB[­ÀBXàêBVBSG=BPzgBM­BJàºBHäBEG
+BBz7B?­`B<àB:ŽB7FÝB4zB1­1B.àZB,B)F®B&y×B#­B à+B
+TBF}ByšB¬ÑBßûB%B
+?i¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}q B}VHBzqBwŒBtïÄBr"îBoVBlABiŒkBfïBd"ŸBaUèB^B[Œ;BXïeBV"BSUžBPâBMŒ
+BJï5BH"_BEUBB²B?»ÜB<ïB:"/B7UYB4B1»¬B.îÖB,!ÿB)U)B&SB#»|B î¥B
+!ÐBTùB#B»MBç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B}dÃBzìBwËBtþ@Br1iBodBlœBiÊæBfþBd1:BadcB^B[Ê·BXýàBV1
+BSd4BP]BMÊBJý°BH0ÚBEdBB-B?ÊWB<ýB:0ªB7cÔB4þB1Ê'B.ýQB,0{B)c€B&ÍB#ÉøB ý!B
+0KBcuB¹¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B}s>BzŠhBwÙBu
+»Br?åBosBlŠ8BiÙbBg
+Bd?µBarßB^ŠB[Ù2BY
+\BV?
+BSr¯BP¥ØBMÙBK
+,BH?UBErBB¥©B?ØÒB=
+üB:?&B7rOB4¥yB1Ø£B/
+ÌB,>õB)r B&¥IB#ØsB!
+B
+7á¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B}¹BzŽãBwè
+Bu6BrN`BoBlŽ³BiçÝBgBdN0BaZB^ŽB[ç­BY×BVN BS*BPŽTBMç}BK§BHMÑBEúBBŽ$B?çNB=wB:M¡B7ËB4³ôB1ç
+B/HB,MqB)B&³ÅB#à	¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}«B}5BzÃ^BwöBu)²Br\ÛBoBlÃ/BiöXBg)Bd\¬BaÕB^ÂÿB[ö(BY)RBV\|BS¥BPÂÏBMõùBK)"BH\LBEvBBÂB?õÉB=(óB:\
+B7EB4ÂpB1õB/(ÃB,[íB)1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ºB}°BzÑÚBxBu8-BrkWBoBlÑªBjÔBg7ýBdk'BaPB^ÑzB\€BY7ÍBVj÷BS!BPÑJBNtBK7BHjÇBEñBBÑB@DB=7mB:jB7ÁB4ÐëB2B/0Y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÈB}­+BzàUBxBuFšBryÒBo¬üBlà%BjOBgFxBdy¢Ba¬ÌB^ßõB\BYFIBVyrBS¬BPßÆBNïBKFBHyCBE¬lBBßB@ÀB=EéB:yB7¬=B4Ø¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÖÿB}»§BzîÐBx!úBuU$BrMBo»wBlî Bj!ÊBgTôBd
+Ba»GB^îqB\!BYTÄBVîBS»BPîABN!kBKTBHœBEºèBBîB@!;B=TeB:©¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}åzB}Ê"BzýLBx0uBucBrÈBoÉòBlý
+Bj0EBgcoBdBaÉÂB^üìB\0BYc?BViBSÉBPüŒBN/åBKcBH9BEÉcBBüB@(Ñ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}óöB}ØB{
+ÅBx>îBurBr¥BBoØkBm
+Bj>¿BgqèBd¥BaØ<B_
+eB\>BYq¹BV€âBSØ
+BQ
+6BN>_BKqBH€³BEÐ÷¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~qB}çB{@BxMjBuBr³œBoæçBmBjM:BgdBd³Baæ·B_áB\M
+BY3BV³^BSæBQ±BNLÛBKy¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~ìB}õB{(»Bx[åBuBrÂ8BoõbBm(Bj[µBgßBdÂ	Baõ2B_([B\[BY¯BVÁÙBSõBQ!G¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~gB~
+B{77Bxj`BuBrÐŽBpÝBm7Bjj1BgZBdÐBb®B_6×B\jBY+BVÉo¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~-ãB~B{E²BxxÜBu¬Brß/BpYBmEBjx«Bg«ÖBdÞÿBb)B_ESB\q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~<^B~!B{T-BxWBuºBríªBp ÓBmSþBj'BgºQBdí{Bb¿¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~JÙB~/B{b©BxÒBuÈûBrü&Bp/OBmbyBj£BgÁç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~YUB~=úB{q#Bx€MBu×wBs
+¡Bp=ËBmj¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~gÏB~LuB{Bx²ÉBuåóBs7¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~vKB~ZñB{Bxº_¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~ÇB~b
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B|  Bx  Bt  Bp  Bl  Bh  Bd  B`  B\  BX  BT  BP  BL  BH  BD  B@  B<  B8  B4  B0  B,  B(  B$  B   B
+  B  B  B  B
+  B  B  B   Aø  Að  Aè  Aà  AØ  AÐ  AÈ  AÀ  Až  A°  Aš  A   A  A  A  A  Ap  A`  AP  A@  A0  A   A  A   @à  @À  @   @  @@  @   ?      B|
+=Bx
+=Bt
+=Bp
+=Bl
+=Bh
+=Bd
+=B`
+=B\
+=BX
+=BT
+=BP
+=BL
+=BH
+=BD
+=B@
+=B<
+=B8
+=B4
+=B0
+=B,
+=B(
+=B$
+=B 
+=B
+
+=B
+=B
+=B
+=B
+
+=B
+=B
+=B 
+=Aø{Að{Aè{Aà{AØ{AÐ{AÈ{AÀ{Až{A°{Aš{A {A{A{A{A{Ap(öA`(öAP(öA@(öA0(öA (öA(öA (ö@àQì@ÀQì@ Qì@Qì@@£×@ £×?G®<#×
+B|{Bx{Bt{Bp{Bl{Bh{Bd{B`{B\{BX{BT{BP{BL{BH{BD{B@{B<{B8{B4{B0{B,{B({B${B {B
+{B{B{B{B
+{B{B{B {Aø(öAð(öAè(öAà(öAØ(öAÐ(öAÈ(öAÀ(öAž(öA°(öAš(öA (öA(öA(öA(öA(öApQìA`QìAPQìA@QìA0QìA QìAQìA Qì@à£×@À£×@ £×@£×@AG®@G®?\<£×
+B|
+žBx
+žBt
+žBp
+žBl
+žBh
+žBd
+žB`
+žB\
+žBX
+žBT
+žBP
+žBL
+žBH
+žBD
+žB@
+žB<
+žB8
+žB4
+žB0
+žB,
+žB(
+žB$
+žB 
+žB
+
+žB
+žB
+žB
+žB
+
+žB
+žB
+žB 
+žAø=qAð=qAè=qAà=qAØ=qAÐ=qAÈ=qAÀ=qAž=qA°=qAš=qA =qA=qA=qA=qA=qApzáA`záAPzáA@záA0záA záAzáA zá@àõÃ@ÀõÃ@ õÃ@õÃ@Aë
+@ë
+?×
+<õÂB|(öBx(öBt(öBp(öBl(öBh(öBd(öB`(öB\(öBX(öBT(öBP(öBL(öBH(öBD(öB@(öB<(öB8(öB4(öB0(öB,(öB((öB$(öB (öB
+(öB(öB(öB(öB
+(öB(öB(öB (öAøQìAðQìAèQìAàQìAØQìAÐQìAÈQìAÀQìAžQìA°QìAšQìA QìAQìAQìAQìAQìAp£×A`£×AP£×A@£×A0£×A £×A£×A £×@áG®@ÁG®@¡G®@G®@B\@\?
+
+ž=#×
+B|33Bx33Bt33Bp33Bl33Bh33Bd33B`33B\33BX33BT33BP33BL33BH33BD33B@33B<33B833B433B033B,33B(33B$33B 33B
+33B33B33B33B
+33B33B33B 33AøffAðffAèffAàffAØffAÐffAÈffAÀffAžffA°ffAšffA ffAffAffAffAffApÌÍA`ÌÍAPÌÍA@ÌÍA0ÌÍA ÌÍAÌÍA ÌÍ@á@Á@¡@@C33@33?ff=LÌÍB|=qBx=qBt=qBp=qBl=qBh=qBd=qB`=qB\=qBX=qBT=qBP=qBL=qBH=qBD=qB@=qB<=qB8=qB4=qB0=qB,=qB(=qB$=qB =qB
+=qB=qB=qB=qB
+=qB=qB=qB =qAøzáAðzáAèzáAàzáAØzáAÐzáAÈzáAÀzáAžzáA°záAšzáA záAzáAzáAzáAzáApõÃA`õÃAPõÃA@õÃA0õÃA õÃAõÃA õÃ@áë
+@Áë
+@¡ë
+@ë
+@C×
+@×
+?®=uÂB|G®BxG®BtG®BpG®BlG®BhG®BdG®B`G®B\G®BXG®BTG®BPG®BLG®BHG®BDG®B@G®B<G®B8G®B4G®B0G®B,G®B(G®B$G®B G®B
+G®BG®BG®BG®B
+G®BG®BG®B G®Aø\Að\Aè\Aà\AØ\AÐ\AÈ\AÀ\Až\A°\Aš\A \A\A\A\A\Aq
+žAa
+žAQ
+žAA
+žA1
+žA!
+žA
+žA
+ž@â=q@Â=q@¢=q@=q@Dzá@zá?õÃ=\)B|QìBxQìBtQìBpQìBlQìBhQìBdQìB`QìB\QìBXQìBTQìBPQìBLQìBHQìBDQìB@QìB<QìB8QìB4QìB0QìB,QìB(QìB$QìB QìB
+QìBQìBQìBQìB
+QìBQìBQìB QìAø£×Að£×Aè£×Aà£×AØ£×AÐ£×AÈ£×AÀ£×Až£×A°£×Aš£×A £×A£×A£×A£×A£×AqG®AaG®AQG®AAG®A1G®A!G®AG®AG®@â\@Â\@¢\@\@E
+ž@
+ž?=q=£×
+B|\)Bx\)Bt\)Bp\)Bl\)Bh\)Bd\)B`\)B\\)BX\)BT\)BP\)BL\)BH\)BD\)B@\)B<\)B8\)B4\)B0\)B,\)B(\)B$\)B \)B
+\)B\)B\)B\)B
+\)B\)B\)B \)AøžRAðžRAèžRAàžRAØžRAÐžRAÈžRAÀžRAžžRA°žRAšžRA žRAžRAžRAžRAžRAqp€Aap€AQp€AAp€A1p€A!p€Ap€Ap€@âáH@ÂáH@¢áH@áH@EÂ@Â?
+=žQìB|ffBxffBtffBpffBlffBhffBdffB`ffB\ffBXffBTffBPffBLffBHffBDffB@ffB<ffB8ffB4ffB0ffB,ffB(ffB$ffB ffB
+ffBffBffBffB
+ffBffBffB ffAøÌÍAðÌÍAèÌÍAàÌÍAØÌÍAÐÌÍAÈÌÍAÀÌÍAžÌÍA°ÌÍAšÌÍA ÌÍAÌÍAÌÍAÌÍAÌÍAqAaAQAAA1A!AA@ã33@Ã33@£33@33@Fff@ff?ÌÍ=ÌÌÍB|p€Bxp€Btp€Bpp€Blp€Bhp€Bdp€B`p€B\p€BXp€BTp€BPp€BLp€BHp€BDp€B@p€B<p€B8p€B4p€B0p€B,p€B(p€B$p€B p€B
+p€Bp€Bp€Bp€B
+p€Bp€Bp€B p€AøáHAðáHAèáHAàáHAØáHAÐáHAÈáHAÀáHAžáHA°áHAšáHA áHAáHAáHAáHAáHAqÂAaÂAQÂAAÂA1ÂA!ÂAÂAÂ@ã
+@Ã
+@£
+@
+@G
+=@
+=?{=áG®B|záBxzáBtzáBpzáBlzáBhzáBdzáB`záB\záBXzáBTzáBPzáBLzáBHzáBDzáB@záB<záB8záB4záB0záB,záB(záB$záB záB
+záBzáBzáBzáB
+záBzáBzáB záAøõÃAðõÃAèõÃAàõÃAØõÃAÐõÃAÈõÃAÀõÃAžõÃA°õÃAšõÃA õÃAõÃAõÃAõÃAõÃAqë
+Aaë
+AQë
+AAë
+A1ë
+A!ë
+Aë
+Aë
+@ã×
+@Ã×
+@£×
+@×
+@G®@®?\)=õÂB|
+Bx
+Bt
+Bp
+Bl
+Bh
+Bd
+B`
+B\
+BX
+BT
+BP
+BL
+BH
+BD
+B@
+B<
+B8
+B4
+B0
+B,
+B(
+B$
+B 
+B
+
+B
+B
+B
+B
+
+B
+B
+B 
+Aù
+=Añ
+=Aé
+=Aá
+=AÙ
+=AÑ
+=AÉ
+=AÁ
+=A¹
+=A±
+=A©
+=A¡
+=A
+=A
+=A
+=A
+=Ar{Ab{AR{AB{A2{A"{A{A{@ä(ö@Ä(ö@€(ö@(ö@HQì@Qì?£×>
+žB|\Bx\Bt\Bp\Bl\Bh\Bd\B`\B\\BX\BT\BP\BL\BH\BD\B@\B<\B8\B4\B0\B,\B(\B$\B \B
+\B\B\B\B
+\B\B\B \Aù
+žAñ
+žAé
+žAá
+žAÙ
+žAÑ
+žAÉ
+žAÁ
+žA¹
+žA±
+žA©
+žA¡
+žA
+žA
+žA
+žA
+žAr=qAb=qAR=qAB=qA2=qA"=qA=qA=q@äzá@Äzá@€zá@zá@HõÃ@õÃ?ë
+>\)B|BxBtBpBlBhBdB`B\BXBTBPBLBHBDB@B<B8B4B0B,B(B$B B
+BBBB
+BBB Aù33Añ33Aé33Aá33AÙ33AÑ33AÉ33AÁ33A¹33A±33A©33A¡33A33A33A33A33ArffAbffARffABffA2ffA"ffAffAff@äÌÍ@ÄÌÍ@€ÌÍ@ÌÍ@I@	?33>B|£×Bx£×Bt£×Bp£×Bl£×Bh£×Bd£×B`£×B\£×BX£×BT£×BP£×BL£×BH£×BD£×B@£×B<£×B8£×B4£×B0£×B,£×B(£×B$£×B £×B
+£×B£×B£×B£×B
+£×B£×B£×B £×AùG®AñG®AéG®AáG®AÙG®AÑG®AÉG®AÁG®A¹G®A±G®A©G®A¡G®AG®AG®AG®AG®Ar\Ab\AR\AB\A2\A"\A\A\@å
+ž@Å
+ž@¥
+ž@
+
+ž@J=q@
+=q?zá>#×
+B|®Bx®Bt®Bp®Bl®Bh®Bd®B`®B\®BX®BT®BP®BL®BH®BD®B@®B<®B8®B4®B0®B,®B(®B$®B ®B
+®B®B®B®B
+®B®B®B ®Aù\)Añ\)Aé\)Aá\)AÙ\)AÑ\)AÉ\)AÁ\)A¹\)A±\)A©\)A¡\)A\)A\)A\)A\)AržRAbžRARžRABžRA2žRA"žRAžRAžR@åp€@Åp€@¥p€@
+p€@JáH@
+áH?Â>.{B|žRBxžRBtžRBpžRBlžRBhžRBdžRB`žRB\žRBXžRBTžRBPžRBLžRBHžRBDžRB@žRB<žRB8žRB4žRB0žRB,žRB(žRB$žRB žRB
+žRBžRBžRBžRB
+žRBžRBžRB žRAùp€Añp€Aép€Aáp€AÙp€AÑp€AÉp€AÁp€A¹p€A±p€A©p€A¡p€Ap€Ap€Ap€Ap€AráHAbáHARáHABáHA2áHA"áHAáHAáH@åÂ@ÅÂ@¥Â@
+Â@K
+@
+
+?
+>>8QìB|ÂBxÂBtÂBpÂBlÂBhÂBdÂB`ÂB\ÂBXÂBTÂBPÂBLÂBHÂBDÂB@ÂB<ÂB8ÂB4ÂB0ÂB,ÂB(ÂB$ÂB ÂB
+ÂBÂBÂBÂB
+ÂBÂBÂB ÂAù
+Añ
+Aé
+Aá
+AÙ
+AÑ
+AÉ
+AÁ
+A¹
+A±
+A©
+A¡
+A
+A
+A
+A
+As
+=Ac
+=AS
+=AC
+=A3
+=A#
+=A
+=A
+=@æ{@Æ{@Š{@{@L(ö@
+(ö?Qì>B\B|ÌÍBxÌÍBtÌÍBpÌÍBlÌÍBhÌÍBdÌÍB`ÌÍB\ÌÍBXÌÍBTÌÍBPÌÍBLÌÍBHÌÍBDÌÍB@ÌÍB<ÌÍB8ÌÍB4ÌÍB0ÌÍB,ÌÍB(ÌÍB$ÌÍB ÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍBÌÍBÌÍB ÌÍAùAñAéAáAÙAÑAÉAÁA¹A±A©A¡AAAAAs33Ac33AS33AC33A333A#33A33A33@æff@Æff@Šff@ff@LÌÍ@
+ÌÍ?>LÌÍB|×
+Bx×
+Bt×
+Bp×
+Bl×
+Bh×
+Bd×
+B`×
+B\×
+BX×
+BT×
+BP×
+BL×
+BH×
+BD×
+B@×
+B<×
+B8×
+B4×
+B0×
+B,×
+B(×
+B$×
+B ×
+B
+×
+B×
+B×
+B×
+B
+×
+B×
+B×
+B ×
+Aù®Añ®Aé®Aá®AÙ®AÑ®AÉ®AÁ®A¹®A±®A©®A¡®A®A®A®A®As\)Ac\)AS\)AC\)A3\)A#\)A\)A\)@æžR@ÆžR@ŠžR@žR@Mp€@
+p€?áH>W
+=B|áHBxáHBtáHBpáHBláHBháHBdáHB`áHB\áHBXáHBTáHBPáHBLáHBHáHBDáHB@áHB<áHB8áHB4áHB0áHB,áHB(áHB$áHB áHB
+áHBáHBáHBáHB
+áHBáHBáHB áHAùÂAñÂAéÂAáÂAÙÂAÑÂAÉÂAÁÂA¹ÂA±ÂA©ÂA¡ÂAÂAÂAÂAÂAs
+Ac
+AS
+AC
+A3
+A#
+A
+A
+@ç
+=@Ç
+=@§
+=@
+=@N{@{?(ö>aG®B|ë
+Bxë
+Btë
+Bpë
+Blë
+Bhë
+Bdë
+B`ë
+B\ë
+BXë
+BTë
+BPë
+BLë
+BHë
+BDë
+B@ë
+B<ë
+B8ë
+B4ë
+B0ë
+B,ë
+B(ë
+B$ë
+B ë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+Bë
+Bë
+B ë
+Aù×
+Añ×
+Aé×
+Aá×
+AÙ×
+AÑ×
+AÉ×
+AÁ×
+A¹×
+A±×
+A©×
+A¡×
+A×
+A×
+A×
+A×
+As®Ac®AS®AC®A3®A#®A®A®@ç\)@Ç\)@§\)@\)@NžR@žR?p€>k
+B|õÃBxõÃBtõÃBpõÃBlõÃBhõÃBdõÃB`õÃB\õÃBXõÃBTõÃBPõÃBLõÃBHõÃBDõÃB@õÃB<õÃB8õÃB4õÃB0õÃB,õÃB(õÃB$õÃB õÃB
+õÃBõÃBõÃBõÃB
+õÃBõÃBõÃB õÃAùë
+Añë
+Aéë
+Aáë
+AÙë
+AÑë
+AÉë
+AÁë
+A¹ë
+A±ë
+A©ë
+A¡ë
+Aë
+Aë
+Aë
+Aë
+As×
+Ac×
+AS×
+AC×
+A3×
+A#×
+A×
+A×
+@ç®@Ç®@§®@®@O\)@\)?žR>uÂB}  By  Bu  Bq  Bm  Bi  Be  Ba  B]  BY  BU  BQ  BM  BI  BE  BA  B=  B9  B5  B1  B-  B)  B%  B!  B
+  B  B  B  B
+  B	  B  B  Aú  Aò  Aê  Aâ  AÚ  AÒ  AÊ  AÂ  Aº  A²  Aª  A¢  A  A  A  A  At  Ad  AT  AD  A4  A$  A  A  @è  @È  @š  @  @P  @  ?   >  B}
+=By
+=Bu
+=Bq
+=Bm
+=Bi
+=Be
+=Ba
+=B]
+=BY
+=BU
+=BQ
+=BM
+=BI
+=BE
+=BA
+=B=
+=B9
+=B5
+=B1
+=B-
+=B)
+=B%
+=B!
+=B
+
+=B
+=B
+=B
+=B
+=B	
+=B
+=B
+=Aú{Aò{Aê{Aâ{AÚ{AÒ{AÊ{AÂ{Aº{A²{Aª{A¢{A{A{A{A{At(öAd(öAT(öAD(öA4(öA$(öA(öA(ö@èQì@ÈQì@šQì@Qì@P£×@£×?¡G®>
+
+žB}{By{Bu{Bq{Bm{Bi{Be{Ba{B]{BY{BU{BQ{BM{BI{BE{BA{B={B9{B5{B1{B-{B){B%{B!{B
+{B{B{B{B
+{B	{B{B{Aú(öAò(öAê(öAâ(öAÚ(öAÒ(öAÊ(öAÂ(öAº(öA²(öAª(öA¢(öA(öA(öA(öA(öAtQìAdQìATQìADQìA4QìA$QìAQìAQì@è£×@È£×@š£×@£×@QG®@G®?¢\>=qB}
+žBy
+žBu
+žBq
+žBm
+žBi
+žBe
+žBa
+žB]
+žBY
+žBU
+žBQ
+žBM
+žBI
+žBE
+žBA
+žB=
+žB9
+žB5
+žB1
+žB-
+žB)
+žB%
+žB!
+žB
+
+žB
+žB
+žB
+žB
+
+žB	
+žB
+žB
+žAú=qAò=qAê=qAâ=qAÚ=qAÒ=qAÊ=qAÂ=qAº=qA²=qAª=qA¢=qA=qA=qA=qA=qAtzáAdzáATzáADzáA4záA$záAzáAzá@èõÃ@ÈõÃ@šõÃ@õÃ@Që
+@ë
+?£×
+>\)B}(öBy(öBu(öBq(öBm(öBi(öBe(öBa(öB](öBY(öBU(öBQ(öBM(öBI(öBE(öBA(öB=(öB9(öB5(öB1(öB-(öB)(öB%(öB!(öB
+(öB(öB(öB(öB
+(öB	(öB(öB(öAúQìAòQìAêQìAâQìAÚQìAÒQìAÊQìAÂQìAºQìA²QìAªQìA¢QìAQìAQìAQìAQìAt£×Ad£×AT£×AD£×A4£×A$£×A£×A£×@éG®@ÉG®@©G®@G®@R\@\?¥
+ž>záB}33By33Bu33Bq33Bm33Bi33Be33Ba33B]33BY33BU33BQ33BM33BI33BE33BA33B=33B933B533B133B-33B)33B%33B!33B
+33B33B33B33B
+33B	33B33B33AúffAòffAêffAâffAÚffAÒffAÊffAÂffAºffA²ffAªffA¢ffAffAffAffAffAtÌÍAdÌÍATÌÍADÌÍA4ÌÍA$ÌÍAÌÍAÌÍ@é@É@©@@S33@33?Šff>B}=qBy=qBu=qBq=qBm=qBi=qBe=qBa=qB]=qBY=qBU=qBQ=qBM=qBI=qBE=qBA=qB==qB9=qB5=qB1=qB-=qB)=qB%=qB!=qB
+=qB=qB=qB=qB
+=qB	=qB=qB=qAúzáAòzáAêzáAâzáAÚzáAÒzáAÊzáAÂzáAºzáA²záAªzáA¢záAzáAzáAzáAzáAtõÃAdõÃATõÃADõÃA4õÃA$õÃAõÃAõÃ@éë
+@Éë
+@©ë
+@ë
+@S×
+@×
+?§®>žRB}G®ByG®BuG®BqG®BmG®BiG®BeG®BaG®B]G®BYG®BUG®BQG®BMG®BIG®BEG®BAG®B=G®B9G®B5G®B1G®B-G®B)G®B%G®B!G®B
+G®BG®BG®BG®B
+G®B	G®BG®BG®Aú\Aò\Aê\Aâ\AÚ\AÒ\AÊ\AÂ\Aº\A²\Aª\A¢\A\A\A\A\Au
+žAe
+žAU
+žAE
+žA5
+žA%
+žA
+žA
+ž@ê=q@Ê=q@ª=q@=q@Tzá@zá?šõÂ>£×
+B}QìByQìBuQìBqQìBmQìBiQìBeQìBaQìB]QìBYQìBUQìBQQìBMQìBIQìBEQìBAQìB=QìB9QìB5QìB1QìB-QìB)QìB%QìB!QìB
+QìBQìBQìBQìB
+QìB	QìBQìBQìAú£×Aò£×Aê£×Aâ£×AÚ£×AÒ£×AÊ£×AÂ£×Aº£×A²£×Aª£×A¢£×A£×A£×A£×A£×AuG®AeG®AUG®AEG®A5G®A%G®AG®AG®@ê\@Ê\@ª\@\@U
+ž@
+ž?ª=q>šõÃB}\)By\)Bu\)Bq\)Bm\)Bi\)Be\)Ba\)B]\)BY\)BU\)BQ\)BM\)BI\)BE\)BA\)B=\)B9\)B5\)B1\)B-\)B)\)B%\)B!\)B
+\)B\)B\)B\)B
+\)B	\)B\)B\)AúžRAòžRAêžRAâžRAÚžRAÒžRAÊžRAÂžRAºžRA²žRAªžRA¢žRAžRAžRAžRAžRAup€Aep€AUp€AEp€A5p€A%p€Ap€Ap€@êáH@ÊáH@ªáH@áH@UÂ@Â?«
+>®{B}ffByffBuffBqffBmffBiffBeffBaffB]ffBYffBUffBQffBMffBIffBEffBAffB=ffB9ffB5ffB1ffB-ffB)ffB%ffB!ffB
+ffBffBffBffB
+ffB	ffBffBffAúÌÍAòÌÍAêÌÍAâÌÍAÚÌÍAÒÌÍAÊÌÍAÂÌÍAºÌÍA²ÌÍAªÌÍA¢ÌÍAÌÍAÌÍAÌÍAÌÍAuAeAUAEA5A%AA@ë33@Ë33@«33@33@Vff@ff?¬ÌÍ>³33B}p€Byp€Bup€Bqp€Bmp€Bip€Bep€Bap€B]p€BYp€BUp€BQp€BMp€BIp€BEp€BAp€B=p€B9p€B5p€B1p€B-p€B)p€B%p€B!p€B
+p€Bp€Bp€Bp€B
+p€B	p€Bp€Bp€AúáHAòáHAêáHAâáHAÚáHAÒáHAÊáHAÂáHAºáHA²áHAªáHA¢áHAáHAáHAáHAáHAuÂAeÂAUÂAEÂA5ÂA%ÂAÂAÂ@ë
+@Ë
+@«
+@
+@W
+>@
+>?®{>žQìB}záByzáBuzáBqzáBmzáBizáBezáBazáB]záBYzáBUzáBQzáBMzáBIzáBEzáBAzáB=záB9záB5záB1záB-záB)záB%záB!záB
+záBzáBzáBzáB
+záB	záBzáBzáAúõÃAòõÃAêõÃAâõÃAÚõÃAÒõÃAÊõÃAÂõÃAºõÃA²õÃAªõÃA¢õÃAõÃAõÃAõÃAõÃAuë
+Aeë
+AUë
+AEë
+A5ë
+A%ë
+Aë
+Aë
+@ë×
+@Ë×
+@«×
+@×
+@W®@®?¯\)>œp€B}
+By
+Bu
+Bq
+Bm
+Bi
+Be
+Ba
+B]
+BY
+BU
+BQ
+BM
+BI
+BE
+BA
+B=
+B9
+B5
+B1
+B-
+B)
+B%
+B!
+B
+
+B
+B
+B
+B
+
+B	
+B
+B
+Aû
+=Aó
+=Aë
+=Aã
+=AÛ
+=AÓ
+=AË
+=AÃ
+=A»
+=A³
+=A«
+=A£
+=A
+=A
+=A
+=A
+=Av{Af{AV{AF{A6{A&{A{A{@ì(ö@Ì(ö@¬(ö@(ö@XQì@Qì?°£×>Â\B}\By\Bu\Bq\Bm\Bi\Be\Ba\B]\BY\BU\BQ\BM\BI\BE\BA\B=\B9\B5\B1\B-\B)\B%\B!\B
+\B\B\B\B
+\B	\B\B\Aû
+žAó
+žAë
+žAã
+žAÛ
+žAÓ
+žAË
+žAÃ
+žA»
+žA³
+žA«
+žA£
+žA
+žA
+žA
+žA
+žAv=qAf=qAV=qAF=qA6=qA&=qA=qA=q@ìzá@Ìzá@¬zá@zá@XõÂ@õÂ?±ë
+>Ç®B}ByBuBqBmBiBeBaB]BYBUBQBMBIBEBAB=B9B5B1B-B)B%B!B
+BBBB
+B	BBAû33Aó33Aë33Aã33AÛ33AÓ33AË33AÃ33A»33A³33A«33A£33A33A33A33A33AvffAfffAVffAFffA6ffA&ffAffAff@ìÌÍ@ÌÌÍ@¬ÌÍ@ÌÍ@Y@?³33>ÌÌÍB}£×By£×Bu£×Bq£×Bm£×Bi£×Be£×Ba£×B]£×BY£×BU£×BQ£×BM£×BI£×BE£×BA£×B=£×B9£×B5£×B1£×B-£×B)£×B%£×B!£×B
+£×B£×B£×B£×B
+£×B	£×B£×B£×AûG®AóG®AëG®AãG®AÛG®AÓG®AËG®AÃG®A»G®A³G®A«G®A£G®AG®AG®AG®AG®Av\Af\AV\AF\A6\A&\A\A\@í
+ž@Í
+ž@­
+ž@
+ž@Z=q@=q?Žzá>Ñë
+B}®By®Bu®Bq®Bm®Bi®Be®Ba®B]®BY®BU®BQ®BM®BI®BE®BA®B=®B9®B5®B1®B-®B)®B%®B!®B
+®B®B®B®B
+®B	®B®B®Aû\)Aó\)Aë\)Aã\)AÛ\)AÓ\)AË\)AÃ\)A»\)A³\)A«\)A£\)A\)A\)A\)A\)AvžRAfžRAVžRAFžRA6žRA&žRAžRAžR@íp€@Íp€@­p€@p€@ZáH@áH?µÂ>×
+=B}žRByžRBužRBqžRBmžRBižRBežRBažRB]žRBYžRBUžRBQžRBMžRBIžRBEžRBAžRB=žRB9žRB5žRB1žRB-žRB)žRB%žRB!žRB
+žRBžRBžRBžRB
+žRB	žRBžRBžRAûp€Aóp€Aëp€Aãp€AÛp€AÓp€AËp€AÃp€A»p€A³p€A«p€A£p€Ap€Ap€Ap€Ap€AváHAfáHAVáHAFáHA6áHA&áHAáHAáH@íÂ@ÍÂ@­Â@Â@[
+@
+?·
+>>Ü(öB}ÂByÂBuÂBqÂBmÂBiÂBeÂBaÂB]ÂBYÂBUÂBQÂBMÂBIÂBEÂBAÂB=ÂB9ÂB5ÂB1ÂB-ÂB)ÂB%ÂB!ÂB
+ÂBÂBÂBÂB
+ÂB	ÂBÂBÂAû
+Aó
+Aë
+Aã
+AÛ
+AÓ
+AË
+AÃ
+A»
+A³
+A«
+A£
+A
+A
+A
+A
+Aw
+=Ag
+=AW
+=AG
+=A7
+=A'
+=A
+=A
+=@î{@Î{@®{@{@\(ö@
+(ö?žQì>áG®B}ÌÍByÌÍBuÌÍBqÌÍBmÌÍBiÌÍBeÌÍBaÌÍB]ÌÍBYÌÍBUÌÍBQÌÍBMÌÍBIÌÍBEÌÍBAÌÍB=ÌÍB9ÌÍB5ÌÍB1ÌÍB-ÌÍB)ÌÍB%ÌÍB!ÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍB	ÌÍBÌÍBÌÍAûAóAëAãAÛAÓAËAÃA»A³A«A£AAAAAw33Ag33AW33AG33A733A'33A33A33@îff@Îff@®ff@ff@\ÌÍ@
+ÌÍ?¹>æffB}×
+By×
+Bu×
+Bq×
+Bm×
+Bi×
+Be×
+Ba×
+B]×
+BY×
+BU×
+BQ×
+BM×
+BI×
+BE×
+BA×
+B=×
+B9×
+B5×
+B1×
+B-×
+B)×
+B%×
+B!×
+B
+×
+B×
+B×
+B×
+B
+×
+B	×
+B×
+B×
+Aû®Aó®Aë®Aã®AÛ®AÓ®AË®AÃ®A»®A³®A«®A£®A®A®A®A®Aw\)Ag\)AW\)AG\)A7\)A'\)A\)A\)@îžR@ÎžR@®žR@žR@]p€@
+p€?ºáH>ë
+B}áHByáHBuáHBqáHBmáHBiáHBeáHBaáHB]áHBYáHBUáHBQáHBMáHBIáHBEáHBAáHB=áHB9áHB5áHB1áHB-áHB)áHB%áHB!áHB
+áHBáHBáHBáHB
+áHB	áHBáHBáHAûÂAóÂAëÂAãÂAÛÂAÓÂAËÂAÃÂA»ÂA³ÂA«ÂA£ÂAÂAÂAÂAÂAw
+Ag
+AW
+AG
+A7
+A'
+A
+A
+@ï
+=@Ï
+=@¯
+=@
+=@^{@
+{?Œ(ö>ð£×B}ë
+Byë
+Buë
+Bqë
+Bmë
+Bië
+Beë
+Baë
+B]ë
+BYë
+BUë
+BQë
+BMë
+BIë
+BEë
+BAë
+B=ë
+B9ë
+B5ë
+B1ë
+B-ë
+B)ë
+B%ë
+B!ë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+B	ë
+Bë
+Bë
+Aû×
+Aó×
+Aë×
+Aã×
+AÛ×
+AÓ×
+AË×
+AÃ×
+A»×
+A³×
+A«×
+A£×
+A×
+A×
+A×
+A×
+Aw®Ag®AW®AG®A7®A'®A®A®@ï\)@Ï\)@¯\)@\)@^žR@
+žR?œp€>õÂB}õÃByõÃBuõÃBqõÃBmõÃBiõÃBeõÃBaõÃB]õÃBYõÃBUõÃBQõÃBMõÃBIõÃBEõÃBAõÃB=õÃB9õÃB5õÃB1õÃB-õÃB)õÃB%õÃB!õÃB
+õÃBõÃBõÃBõÃB
+õÃB	õÃBõÃBõÃAûë
+Aóë
+Aëë
+Aãë
+AÛë
+AÓë
+AËë
+AÃë
+A»ë
+A³ë
+A«ë
+A£ë
+Aë
+Aë
+Aë
+Aë
+Aw×
+Ag×
+AW×
+AG×
+A7×
+A'×
+A×
+A×
+@ï®@Ï®@¯®@®@_\)@\)?ŸžR>úáHB~  Bz  Bv  Br  Bn  Bj  Bf  Bb  B^  BZ  BV  BR  BN  BJ  BF  BB  B>  B:  B6  B2  B.  B*  B&  B"  B
+  B  B  B  B  B
+  B  B  Aü  Aô  Aì  Aä  AÜ  AÔ  AÌ  AÄ  AŒ  AŽ  A¬  A€  A  A  A  A  Ax  Ah  AX  AH  A8  A(  A  A  @ð  @Ð  @°  @  @`  @   ?À  ?   B~
+=Bz
+=Bv
+=Br
+=Bn
+=Bj
+=Bf
+=Bb
+=B^
+=BZ
+=BV
+=BR
+=BN
+=BJ
+=BF
+=BB
+=B>
+=B:
+=B6
+=B2
+=B.
+=B*
+=B&
+=B"
+=B
+
+=B
+=B
+=B
+=B
+=B
+
+=B
+=B
+=Aü{Aô{Aì{Aä{AÜ{AÔ{AÌ{AÄ{AŒ{AŽ{A¬{A€{A{A{A{A{Ax(öAh(öAX(öAH(öA8(öA((öA(öA(ö@ðQì@ÐQì@°Qì@Qì@`£×@ £×?ÁG®?\B~{Bz{Bv{Br{Bn{Bj{Bf{Bb{B^{BZ{BV{BR{BN{BJ{BF{BB{B>{B:{B6{B2{B.{B*{B&{B"{B
+{B{B{B{B{B
+{B{B{Aü(öAô(öAì(öAä(öAÜ(öAÔ(öAÌ(öAÄ(öAŒ(öAŽ(öA¬(öA€(öA(öA(öA(öA(öAxQìAhQìAXQìAHQìA8QìA(QìAQìAQì@ð£×@Ð£×@°£×@£×@aG®@!G®?Â\?
+žB~
+žBz
+žBv
+žBr
+žBn
+žBj
+žBf
+žBb
+žB^
+žBZ
+žBV
+žBR
+žBN
+žBJ
+žBF
+žBB
+žB>
+žB:
+žB6
+žB2
+žB.
+žB*
+žB&
+žB"
+žB
+
+žB
+žB
+žB
+žB
+žB
+
+žB
+žB
+žAü=qAô=qAì=qAä=qAÜ=qAÔ=qAÌ=qAÄ=qAŒ=qAŽ=qA¬=qA€=qA=qA=qA=qA=qAxzáAhzáAXzáAHzáA8záA(záAzáAzá@ðõÂ@ÐõÂ@°õÂ@õÂ@aë
+@!ë
+?Ã×
+?®B~(öBz(öBv(öBr(öBn(öBj(öBf(öBb(öB^(öBZ(öBV(öBR(öBN(öBJ(öBF(öBB(öB>(öB:(öB6(öB2(öB.(öB*(öB&(öB"(öB
+(öB(öB(öB(öB(öB
+(öB(öB(öAüQìAôQìAìQìAäQìAÜQìAÔQìAÌQìAÄQìAŒQìAŽQìA¬QìA€QìAQìAQìAQìAQìAx£×Ah£×AX£×AH£×A8£×A(£×A£×A£×@ñG®@ÑG®@±G®@G®@b\@"\?Å
+ž?
+=qB~33Bz33Bv33Br33Bn33Bj33Bf33Bb33B^33BZ33BV33BR33BN33BJ33BF33BB33B>33B:33B633B233B.33B*33B&33B"33B
+33B33B33B33B33B
+33B33B33AüffAôffAìffAäffAÜffAÔffAÌffAÄffAŒffAŽffA¬ffA€ffAffAffAffAffAxÌÍAhÌÍAXÌÍAHÌÍA8ÌÍA(ÌÍAÌÍAÌÍ@ñ@Ñ@±@@c33@#33?Æff?
+ÌÍB~=qBz=qBv=qBr=qBn=qBj=qBf=qBb=qB^=qBZ=qBV=qBR=qBN=qBJ=qBF=qBB=qB>=qB:=qB6=qB2=qB.=qB*=qB&=qB"=qB
+=qB=qB=qB=qB=qB
+=qB=qB=qAüzáAôzáAìzáAäzáAÜzáAÔzáAÌzáAÄzáAŒzáAŽzáA¬záA€záAzáAzáAzáAzáAxõÃAhõÃAXõÃAHõÃA8õÃA(õÃAõÃAõÃ@ñë
+@Ñë
+@±ë
+@ë
+@c×
+@#×
+?Ç®?\)B~G®BzG®BvG®BrG®BnG®BjG®BfG®BbG®B^G®BZG®BVG®BRG®BNG®BJG®BFG®BBG®B>G®B:G®B6G®B2G®B.G®B*G®B&G®B"G®B
+G®BG®BG®BG®BG®B
+G®BG®BG®Aü\Aô\Aì\Aä\AÜ\AÔ\AÌ\AÄ\AŒ\AŽ\A¬\A€\A\A\A\A\Ay
+žAi
+žAY
+žAI
+žA9
+žA)
+žA
+žA	
+ž@ò=q@Ò=q@²=q@=q@dzá@$zá?ÈõÂ?ë
+B~QìBzQìBvQìBrQìBnQìBjQìBfQìBbQìB^QìBZQìBVQìBRQìBNQìBJQìBFQìBBQìB>QìB:QìB6QìB2QìB.QìB*QìB&QìB"QìB
+QìBQìBQìBQìBQìB
+QìBQìBQìAü£×Aô£×Aì£×Aä£×AÜ£×AÔ£×AÌ£×AÄ£×AŒ£×AŽ£×A¬£×A€£×A£×A£×A£×A£×AyG®AiG®AYG®AIG®A9G®A)G®AG®A	G®@ò\@Ò\@²\@\@e
+ž@%
+ž?Ê=p?záB~\)Bz\)Bv\)Br\)Bn\)Bj\)Bf\)Bb\)B^\)BZ\)BV\)BR\)BN\)BJ\)BF\)BB\)B>\)B:\)B6\)B2\)B.\)B*\)B&\)B"\)B
+\)B\)B\)B\)B\)B
+\)B\)B\)AüžRAôžRAìžRAäžRAÜžRAÔžRAÌžRAÄžRAŒžRAŽžRA¬žRA€žRAžRAžRAžRAžRAyp€Aip€AYp€AIp€A9p€A)p€Ap€A	p€@òáH@ÒáH@²áH@áH@eÂ@%Â?Ë
+
+?
+=B~ffBzffBvffBrffBnffBjffBfffBbffB^ffBZffBVffBRffBNffBJffBFffBBffB>ffB:ffB6ffB2ffB.ffB*ffB&ffB"ffB
+ffBffBffBffBffB
+ffBffBffAüÌÍAôÌÍAìÌÍAäÌÍAÜÌÍAÔÌÍAÌÌÍAÄÌÍAŒÌÍAŽÌÍA¬ÌÍA€ÌÍAÌÍAÌÍAÌÍAÌÍAyAiAYAIA9A)AA	@ó33@Ó33@³33@33@fff@&ff?ÌÌÍ?B~p€Bzp€Bvp€Brp€Bnp€Bjp€Bfp€Bbp€B^p€BZp€BVp€BRp€BNp€BJp€BFp€BBp€B>p€B:p€B6p€B2p€B.p€B*p€B&p€B"p€B
+p€Bp€Bp€Bp€Bp€B
+p€Bp€Bp€AüáHAôáHAìáHAäáHAÜáHAÔáHAÌáHAÄáHAŒáHAŽáHA¬áHA€áHAáHAáHAáHAáHAyÂAiÂAYÂAIÂA9ÂA)ÂAÂA	Â@ó
+@Ó
+@³
+@
+@g
+>@'
+>?Î{?
+(öB~záBzzáBvzáBrzáBnzáBjzáBfzáBbzáB^záBZzáBVzáBRzáBNzáBJzáBFzáBBzáB>záB:záB6záB2záB.záB*záB&záB"záB
+záBzáBzáBzáBzáB
+záBzáBzáAüõÃAôõÃAìõÃAäõÃAÜõÃAÔõÃAÌõÃAÄõÃAŒõÃAŽõÃA¬õÃA€õÃAõÃAõÃAõÃAõÃAyë
+Aië
+AYë
+AIë
+A9ë
+A)ë
+Aë
+A	ë
+@ó×
+@Ó×
+@³×
+@×
+@g®@'®?Ï\)?
+žRB~
+Bz
+Bv
+Br
+Bn
+Bj
+Bf
+Bb
+B^
+BZ
+BV
+BR
+BN
+BJ
+BF
+BB
+B>
+B:
+B6
+B2
+B.
+B*
+B&
+B"
+B
+
+B
+B
+B
+B
+B
+
+B
+B
+Aý
+=Aõ
+=Aí
+=Aå
+=AÝ
+=AÕ
+=AÍ
+=AÅ
+=Aœ
+=Aµ
+=A­
+=A¥
+=A
+=A
+=A
+=A
+
+=Az{Aj{AZ{AJ{A:{A*{A{A
+{@ô(ö@Ô(ö@Ž(ö@(ö@hQì@(Qì?Ð£×?!G®                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B| XB{Ýf¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÔB{äþBy	¬Bv5@¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|
+OB{óyBy(Bv<ÖBsaBp¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|+ÊB|õBy&£BvKQBsp Bp®Bm¹\Bjäð¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|:FB|pBy5
+BvYÍBs~{Bp£)BmÇ×BjìBh4Be<È¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|HÁB|
+ëByCBvhHBsöBp±¥BmÖSBjûBh¯BeD^Bbi
+B_ ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|W<B|-gByRBvvÃBsrBpÀ BmäÎBk	}Bh.+BeRÙBbwB_6B\ÀäBYìx¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|e·B|;âBy`Bv
+?Bs©íBpÎBmóJBkøBh<ŠBeaUBbB_ª±B\Ï_BYôBWŒBTDP¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|t3B|J]Byo
+BvºBsžhBpÝBnÅBk&sBhK"BeoÐBb~B_¹-B\ÝÛBZBW'7BTKæBQpBN(¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|®B|XØBy}Bv¢5BsÆãBpëBn@Bk4ïBhYBe~KBb¢úB_ÇšB\ìVBZBW5³BTZaBQBN£ŸBKÈlBHô ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|)B|gTByBv°°BsÕ_Bpú
+Bn
+»BkCjBhhBeÇBb±uB_Ö#B\úÒBZBWD.BThÝBQBN²9BKÖçBHûBF DBCKØ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|¥B|uÑByBv¿.BsãÜBqBn-9BkQçBhvBeDBb¿òB_ä¡B]	OBZ-ýBWR¬BTwZBQBNÀ·BKåeBI
+BF.ÁBCSpB@x
+B=£²¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|®B|LByšûBvÍ©BsòWBqBn;ŽBk`bBh
+Be©¿BbÎmB_ó
+B]ÊBZ<yBWa'BT
+ÕBQªBNÏ2BKóàBIBF==BCaëB@B=«HB:ÏöB7û¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ŒB|ÇBy·uBvÜ$Bt ÓBq%BnJ/BknÞBhBež:BbÜéB`B]&EBZJôBWo¢BTQBQžÿBNÝ­BL\BI'
+BFKžBCpgB@B=¹ÃB:ÞqB8 B5'ÎB2Sb¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ËB|¡BByÅñBvêBtMBq3üBnX«Bk}YBh¢BeÆ¶BbëdB`B]4ÁBZYoBW~
+BT¢ÌBQÇzBNì)BL×BI5
+BFZ4BC~âB@£B=È?B:ìíB8B56IB2ZøB/ŠB,«:¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÙB|¯ŸByÔlBvùBt
+ÉBqBwBng%BkÔBh°BeÕ1BbùßB`
+B]C<BZgêBWBT±GBQÕõBNú€BLRBIDBFh¯BC]B@²
+B=ÖºB:ûhB8 B5DÅB2isB/!B,²ÐB)×~B'¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|è
+B|Ÿ9ByâçBwBt,DBqPòBnu¡BkOBhŸýBeã¬Bc[B`-	B]Q·BZvfBWBT¿ÂBQäqBO	BL-ÍBIR|BFw*BCÙB@ÀB=å5B;	äB8.B5S@B2wïB/B,ÁKB)åùB'
+šB$/VB!Zê¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|öB|ÌµByñcBwBt:¿Bq_nBn
+BkšÊBhÍyBeò'BcÕB`;B]`3BZáBW©BTÎ>BQòìBOBL<IBI`÷BF
+¥BCªTB@ÏB=ó±B;_B8=
+B5aŒB2jB/«B,ÏÇB)ôuB'#B$=ÑB!bB
+.B²Â¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B|Û0ByÿÞBw$BtI;BqméBnBk·FBhÛôBf ¢Bc%QB`IÿB]n­BZ\BWž
+BTÜ¹BRgBO&BLJÄBIorBF!BCžÏB@Ý}B>,B;&ÚB8KB5p7B2åB/¹B,ÞBB*ðB''B$LMB!pûB
+©BºXBßB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B|é«BzYBw3BtW¶Bq|eBn¡BkÅÁBhêoBf
+Bc3ÌB`XzB]})BZ¡×BWÆ
+BTë4BRãBO4BLY?BI}îBF¢BCÇJB@ëùB>§B;5UB8ZB5~²B2£aB/ÈB,ìœB*lB'6B$ZÈB!wB
+€%BÈÓBíB0B6ÞBbr¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}!úB|ø&Bz
+ÕBwABtf1BqàBn¯BkÔ=BhøëBf
+BcBGB`föB]€BZ°RBWÕBTù¯BR
+]BOC
+BLg»BIiBF±BCÕÆB@útB>"B;CÑB8hB5-B2±ÜB/ÖB,û9B*çB'DB$iDB!òB
+² B×OBûýB «BEYBjB
+¶B
+ºJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}0uB}€Bz+RBwP Btt¯Bq]BnŸ
+BkâºBihBf,BcPÅB`usB]!BZŸÐBWã~BU,BR,ÛBOQBLv7BIæBF¿BCäCBAñB>- B;RNB8vüB5«B2ÀYB/åB-	¶B*.dB'SB$wÁB!oB
+Á
+BåÌB
+zB/)BS×Bx
+B
+3B
+ÁâBæB$¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}>ñB}Bz9ÍBw^|Bt*Bq§ØBnÌBkñ5BiãBf:Bc_@B`ïB]šBZÍKBWñùBUšBR;VBO`BL³BI©aBFÎBCòŸBAmB><B;`ÉB8
+xB5ª&B2ÎÔB/óB-1B*<ßB'aB$<B!ªëB
+ÏBôGBöB=€BbRBB
+«¯B
+Ð]Bõ
+BºB>hAþÓø¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}MlB}#BzHIBwl÷Bt¥Bq¶TBnÛBkÿ°Bi$_BfI
+Bcm»B`jB]·BZÛÇBX uBU%#BRIÑBOnBL.BI·ÜBFÜBD9BA%çB>JB;oEB8óB5ž¡B2ÝPB0þB-&¬B*K[B'p	B$·B!¹fB
+ÞB
+ÃB'qBLBpÎB|B
+º*B
+ÞÙBB(5BLãAþã#Aù,Aóš¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}[çB}2BzVÄBw{rBt !BqÄÏBné}Bl,Bi2ÚBfWBc|7B` åB]ÅBZêBBXðBU3BRXMBO|ûBL¡©BIÆXBFëBDŽBA4cB>YB;}¿B8¢nB5Ç
+B2ëËB0yB-5(B*YÖB'~B$£3B!ÇáB
+ìB
+>B5ìBZBIB£÷B
+ÈŠB
+íTBB6±B[_Aÿ AùIwAóÔAíÜ1Aè3X¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}jbB}@Bze?BwîBt®BqÓJBn÷ùBl
+§BiAUBffBc²B`¯`B]ÔBZøœBX
+kBUBBRfÈBOwBL°%BIÔÓBFùBD
+0BABÞB>gB;;B8°éB5ÕB2úFB0
+õB-C£B*hQB' B$±®B!Ö\B
+û
+B
+¹BDgBiBÄB²sB
+×!B
+ûÏB ~BE,BiÚAÿ
+AùfnAó¯ËAíù'AèBAâáAÜã¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}xÝB}O
+BzsºBwhBtœBqáÆBotBl+"BiOÑBftBc-B`œÜB]âB[8BX+çBUPBRuCBOòBLŸ BIãOBGýBD,«BAQYB>vB;¶B8¿dB5äB3ÁB0-oB-R
+B*vÍB'{B$À)B!äØB	B
+.4BRãBwB?BÀîB
+åB
+
+KB.ùBS§BxVAÿ:AùeAóÌÂAî
+Aè_{Aâš×AÜò4A×;AÑž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}YB}]Bz5BwŠäBtËBqð@BoïBl9Bi^LBfúBc§©B`ÌWB]ñB[ŽBX:bBU_BR¿BOšmBLÍBIñÊBGxBD;'BA_ÕB>B;©1B8ÍàB5òB3<B0;ëB-`B*
+GB'©öB$Î¥B!óSBB
+<°Ba^B
+Bª»BÏiB
+ôB
+ÆB=tBb#BÑAÿVÿAù [Aóé·Aî3Aè|rAâÅÎAÝ+A×XAÑ¡äAËëAAÆBh¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÔB}lBz±Bwµ_BtÚ
+BqþŒBo#jBlHBilÇBfvBc¶$B`ÚÒB]ÿB[$/BXHÝBUmBR:BO¶èBLÛBJ EBG$óBDI¢BAnPB>ÿB;·­B8Ü[B6	B3%žB0JfB-oB*ÃB'žqB$ÝB"ÎB&}B
+K+BoÙBB¹6BÝäBB
+'ABKïBpBLAÿsõAùœQAô®AîP
+AègAââÅAÝ,"A×u~AÑŸÛAÌ7AÆQAÀñAºò¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}€OB}z~Bz,BwÃÚBtèBr
+7Bo1åBlVBi{BBfðBcÄB`éNB^
+üB[2ªBXWYBU|BR µBOÅdBLêBJÀBG3oBDX
+BA|ËB>¡zB;Æ(B8ê×B6
+B343B0XáB-}B*¢>B'ÆìB$ëB"IB4÷B
+YŠB~UB£BÇ±Bì`BB
+5ŒBZkBB£ÇAÿëAùÚHAô#¥AîmAè¶^Aâÿ»AÝIA×uAÑÛÒAÌ%.AÆnAÀ·çA»DAµJ¡A¯¡È¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}²ÊB}ùBz­§BwÒVBt÷Br²Bo@aBleBiœBf®lBcÓB`÷ÈB^
+wB[A&BXeÔBUBR¯1BOÓßBLøBJ
+<BGAêBDfBAGB>¯õB;Ô£B8ùRB6
+ B3B¯B0g]B-
+B*°¹B'ÕhB$úB"
+ÄBCsB
+h!BÏB±~BÖ-BúÛBB
+D8BhæBB²CAÿ­âAù÷?Aô@AîøAèÓUAã
+±AÝfA×¯kAÑøÇAÌB%AÆAÀÔÞA»
+;AµgA¯°ôA©úQA€Qx¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÁFB}vBzŒ$BwàÓBuBr*0BoNÞBlsBi;BfŒéBcáBaFB^*ôB[O¢BXtQBU BRœ®BOâ\BM
+BJ+¹BGPgBDuBAÄB>ŸrB;ã!B9ÏB6,}B3Q,B0uÚB-B*¿7B'ãåB%B"-BBQðB
+vBMB¿ûBä©B	XB.B
+RµBwcBBÀÀAÿÊÜAú9Aô]AîŠóAèðOAã9¬AÝ	A×ÌeAÒÂAÌ_AÆš{AÀñÙA»;6AµA¯ÍïAªKA€`šAªA,¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÏÁB}¥òBzÊ BwïNBuüBr8«Bo]YBlBiŠ¶BfËdBcðBaÁB^9oB[^
+BXÌBU§zBRÌ)BOðØBMBJ:4BG^ãBDBAš?B>ÌîB;ñB9JB6:ùB3_§B0UB-©B*Í²B'òaB%B";œB`kB
+
+B©ÈBÎvBó%BÓB<B
+a0B
+ßBªBÏ;AÿçÓAú10AôzAîÃéAé
+FAãV£AÝÿA×é\AÒ2¹AÌ|AÆÅrAÁÏA»X+Aµ¡A¯êæAª4BA€}AÆûAXAYµA°Ü¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}Þ=B}ŽmBzÙBwýÊBu"xBrG&BokÔBlBiµ1BfÙàBcþBa#<B^GëB[lBXGBUµöBRÚ€BOÿRBM$BJH°BGm^BD
+BA¶»B>ÛiB< B9$ÆB6ItB3n"B0ÑB-·B*Ü-B( ÜB%%B"J9BnçB
+BžCBÜòB B&NBJýB
+o«BYB¹BÝ·B eAúN&AôAîàßAé*=AãsAÝŒöAØSAÒO¯AÌ
+AÆâiAÁ+ÅA»u"AµŸA°ÛAªQ9A€AãòA-OAv«AÀA	eA`¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ìžB}ÂèBzçBx
+EBu0óBrU¢BozPBlþBiÃ¬Bfè[Bd
+	Ba1žB^VfB[{BXÃBUÄqBRéBP
+ÎBM2|BJW*BG{ÙBD BAÅ6B>éäB<B93AB6WïB3|B0¡LB-ÅúB*ê©B(WB%4B"XŽB}bB
+¢BÆ¿BëmBB4ÊBYxB
+~&B¢ÕBÇBì1B àAúk
+AôŽyAîýÖAéG3AãAÝÙíAØ#IAÒlŠAÌ¶AÆÿ_AÁHŒA»AµÛuA°$ÒAªn/A€·A éAJFA¢AÜÿA&[AožAyr)An y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}û3B}ÑdBzöBxÀBu?oBrd
+BoËBl­zBiÒ(BföÖBdBa@3B^dáB[BX®>BUÒìBR÷BP
+IBM@÷BJeŠBGTBD¯BAÓ±B>ø`B<
+B9AŒB6fkB3B0¯ÇB-ÔvB*ù$B(
+ÒB%BB"g/BÝB
+°BÕ:BùéB
+BCEBgóB
+¢B±PBÕþBú­B [AúAôÑpAïÍAéd)Aã­AÝöãAØ@?AÒAÌÒùAÇ
+VAÁe³A»¯AµølA°AÉAª%A€ÔA
+ßAg;A°AùöACRA¯Ay¬An>ÑAbÑAWÛ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~	®B}ßßB{Bx)<BuMêBrrBoGBl»õBià£BgRBd* BaN®B^s\B[
+BXŒ¹BUáhBSBP*ÄBMOsBJt!BGÏBDœ~BAâ,B?ÚB<+B9P8B6tæB3B0ŸCB-âñB+B(,NB%PüB"uªBYB
+¿BãµBdB-BQÁBvoB
+
+B¿ËBäzB	(B -ÖAú¥
+AôîgAï7ÃAé AãÊ}AÞÙAØ]6AÒŠAÌïïAÇ9MAÁ©A»ÌA¶cA°^¿Aªš
+A€ñyA:ÕA2AÍAëA`IA©ŠAyæAnxŸAc
+yAW3AL0íA@ß=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~*B}îZB{Bx7·Bu\eBrBo¥ÂBlÊpBiïBgÍBd8{Ba]*B^ØB[ŠBXË4BUïãBSBP9@BM]îBJBG§KBDËùBAð§B?VB<:B9^²B6aB3šB0ÌŸB-ñlB+B(:ÉB%_wB"&BšÔB
+ÍBò1BßB;B`<BêB
+©BÎGBòõB£B <RAúÂAõ
+]AïTºAéAãçsAÞ0ÐAØz-AÒÃAÍ
+æAÇVCAÁA»èýA¶2YA°{¶AªÅA¥oAWÌA¡)Aê
+A3âA}?AÆAzñAn²«AcEeAWØ ALjÛA@ýA5OA*>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~&¥B}üÕB{!BxF2BujàBrBoŽ=BlØìBiýBg"HBdF÷Bak¥B^SB[µBXÙ°BUþ^BS#
+BPG»BMliBJBGµÆBDÚtBAÿ#B?#ÑB<HB9m.B6ÜB3¶B0Û9B-ÿèB+$B(IDB%móB"¡B·OB
+ÛþB ¬B%ZBJ	Bn·BeB
+žBÜÂBpB&B JÍAúÞ÷Aõ(TAïq±Aé»
+AäjAÞMÇAØ#AÒàAÍ)ÝAÇs9AÁŒAŒóA¶OOA°­Aªâ	A¥+fAtÃAŸA|APÙA5AãAzYÞAnìAcSAX
+AL€ÇAA7A5Ê=A*\÷A
+ï±A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~5 B~
+QB{/ÿBxT­Buy\Br
+BoÂžBlçgBj
+Bg0ÄBdUrBaz B^ÏB[Ã}BXè+BV
+ÚBS1BPV6BMzäBJBGÄABDèðBB
+B?2LB<VûB9{©B6 WB3ÅB0éŽB.bB+3B(WÀB%|nB"¡
+BÅËB
+êyB'B3ÖBXB}2B¡áB
+ÆBë=BìB4B YHAúûíAõEJAï§AéØAä!aAÞjœAØŽAÒýwAÍFÓAÇ0AÁÙAŒ"éA¶lFA°µ£AªþÿA¥H]A¹AÛA$sAmÏA·,A AzËAo&
+Ac¹@AXKúALÞµAAqoA6)A*äA)AŒYAO@ùúÆ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~CB~ÌB{>zBxc)Bu×Br¬
+BoÑ4BlõâBjBg??BdcíBaB^­JB[ÑøBXö§BVUBS@BPd²BM`BJ®BGÒŒBD÷kBB
+B?@ÈB<evB9$B6®ÓB3ÓB0ø/B.
+ÞB+AB(f:B%éB"¯BÔFB
+øôB
+£BBQBfÿB®B°\B
+Õ
+Bù¹B
+gBCB gÄAûäAõbAAï«AéôúAä>WAÞŽAØÑAÓmAÍcÊAÇ­'AÁöAŒ?àA¶=A°ÒA«öA¥eSA®¯Aø
+AAiAÆAÔ#A
+AzÍžAo`rAcó-AX
+çAM¢AA«\A6>A*ÐÑAcAöFA@ú7v@ã\ë@Ì¹¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~RB~(IB{LøBxqŠBuTBr»Boß±Bm_Bj)BgMŒBdrjBaB^»ÇB[àvBY$BV)ÒBSNBPs/BMÝBJŒBGá:BEèBB*B?OEB<sóB9¢B6œPB3áþB1­B.+[B+P	B(tžB%fB"ŸBâÃB
+rB, BPÎBu}B+BŸÙB
+ãB	6B,äBQB vAAû5ßAõ;AïÈAêõAä[QAÞ€®AØî
+AÓ7hAÍÅAÇÊ!AÂ~AŒ\ÛA¶Š7A°ïA«8ñA¥MAËªAA^cA§ÁAñ
+A:zA{­AohAd-"AX¿ÜAMRAAåQA6x
+A+
+ÆAA0;AÂõ@ú«a@ãÐÕ@ÌöJ@¶¿@x^¿  ¿  ¿  ¿  ¿  ¿  B~`B~6ÅB{[sBx!Bu€ÐBrÉ~Boî,BmÛBj7Bg\7BdæBa¥B^ÊBB[îñBYBV8NBS\üBPªBMŠYBJËBGïµBEdBB9B?]ÀB<nB9§
+B6ËËB3ðzB1(B.9ÖB+^
+B(3B%§áB"ÌBñ>B
+ìB:B_JBøBšŠBÍUB
+òB	±B;`B`B ŒAûRÕAõ2AïåAê.ëAäxHAÞÁ¥AÙ
+AÓT^AÍ»AÇçAÂ0uAŒyÑA¶Ã.A±
+A«UçA¥DAè¡A1ýA{ZAÄ·AAWqA{AAoÔUAdgAXùÊAMAB>A6±ùA+D³A×nAj(Aüã@û:@äD¯@Íj$@¶@µ@Ú@dnD¿  ¿  ¿  ¿  B~o
+B~E?B{iîBxBu³KBr×ùBoüšBm!VBjFBgj³BdaBaŽB^ØŸB[ýlBY"BVFÉBSkwBP&BMŽÔBJÙBGþ1BE"ßBBGB?l<B<êB9µB6ÚFB3þõB1#£B.HRB+m B(®B%¶]B"Û
+Bÿ¹B
+$hBIBmÄBsB·"BÛÐB
+ ~B	%-BIÛBnB 8AûoÌAõ¹)Að
+AêKâAä?AÞÞAÙ'øAÓqUAÍº±AÈAÂMkAŒÈA¶à%A±)A«rÞA¥Œ;A ANôAQAá­A+
+AtgA{{ApBAd üAY3·AMÆqABY,A6ëæA+~ A [A€A	6Ð@û@äž@ÍÝþ@·s@ (è@N]@dç€@72@	ëÊ¿  ¿  B~}B~S»B{xiBxBuÁÆBræuBp
+#Bm/ÑBjTBgy.BdÜBaÂB^ç9B\
+çBY0BVUDBSyòBP¡BMÃOBJçþBH
+¬BE1ZBBV	B?z·B<eB9ÄB6èÂB4
+pB12
+B.VÍB+{{B( *B%ÄØB"éB 5B
+2ãBWB|@B îBÅBêKB
+úB	3šBXVB}B ¡³AûÂAõÖAð|AêhÙAä²5AÞûAÙDïAÓKAÍ×šAÈ!AÂjaAŒ³ŸA¶ýA±FxA«ÕA¥Ù1A "AkëAµGAþ€AHA]A{µtApH/AdÚéAYm€AN ^ABA7%ÓA+žA KHAÞA	pœ@üï@å,d@ÎQÙ@·wM@ Â@Â7@eÏX@8A@
+e)?¹`%?=¥@B~
+B~b7B{äBx«BuÐABrôïBpBm>MBjbûBg©Bd¬XBaÑB^õŽB\cBY?BVc¿BSnBP­
+BMÑÊBJöyBH'BE?ÖBBdB?2B<­áB9ÒB6÷=B4ìB1@B.eHB+öB(®¥B%ÓSB"øB 
+°B
+A^Bf
+B»B¯iBÔBøÆB
+
+tB	B#BfÒBB °.Aû©¹AõóAð<rAê
+ÏAäÏ,AßAÙaåAÓ«BAÍôAÈ=ûAÂXAŒÐµA·A±cnA«¬ËA¥ö(A ?
+AáAÒ>AAd÷A®TA{ïaAp
+Ae×AY§AN:KABÍA7_ÀA+ò{A 
+5AðA	ªª@üzÉ@å >@ÎÅ³@·ë(@¡@6@f·
+@9õ@
+LÞ?»/??Ÿ=
+f$¿  B{{BxºBuÞŒBskBp(BmLÇBjqvBg%BdºÓBaßB_0B\(ÞBYMBVr;BSéBP»BMàFBKôBH)¢BENQBBrÿB?®B<Œ\B9á
+B7¹B4*gB1OB.sÄB+rB(œ B%áÎB#}B ++B
+OÚBtB6BœåBâBAB
++ðB	PBuLBûB ŸªAûÆ¯Aö
+AðYiAê¢ÅAäì"Aß5AÙ~ÜAÓÈ9AÎAÈZòAÂ€OAŒí«A·7A±eA«ÉÁAŠ
+A \{A¥ØAï5A8AîAËKA|)OApŒ	AeNÃAYá~ANt9ACóA7­A,,hA ¿"AQÝA	ä@üî£@æ@Ï9@ž_@¡w@©ì@gÁ@9é©@
+4?Œþö?C)=ES?;ò¿
+¿  ¿  BuæSBsçBp6Bm[CBjñBg€BdÉNBaíýB_«B\7YBY\BV¶BS¥dBPÊBMîÁBKoBH8
+BE\ÌBBzB?Š)B<Ê×B9ïB74B48âB1]B.?B+ŠíB(ËB%ðJB#øB 9ŠB
+^UBB§²BÌ`BñBœB
+:kB	_BÈBšvB Í$AûãŠAö-Aðv_Aê¿ŒAå	AßRuAÙÒAÓå/AÎ.AÈwéAÂÁEAœ
+¢A·SÿA±[A«æžAŠ0A yqAÂÎA
++AUAåAèAA|c<ApõöAe±AZkAN®%AC@àA7ÓA,fUA ùAÊA
+
+@ýb}@æò@Ï­g@žÒÜ@¡øQ@
+Æ@hu@:Ñ^@
+
+G?ŸÎ_?FÈa=@Y<°ø¿  ¿  ¿  ¿  Bp>,BmiÀBjmBg³
+Bd×ÊBaüxB_!'B\EÖBYjBV2BS³áBPØBMý=BK!ìBHFBEkHBB÷B?Ž¥B<ÙSB9þB7"°B4G_B1l
+B.»B+µjB(ÚB%þÆB##uB H#B
+lÑBB¶.BÚÜBÿB$9B
+HçB	mBDB¶òB Û¡Aü AöIûAðXAêÜµAå&AßonAÙžËAÔ'AÎKAÈáAÂÞ>Aœ'A·p÷A±ºTA¬±AŠM
+A jAßÇA)#ArA»ÝA:A|-Aq/çAeÂ¢AZU\ANèACzÑA8
+A, FA!3AÅ»A
+Xu@ýÖ_@æûÔ@Ð!I@¹FŸ@¢l3@š@in9@;¹"@
+?Àç?Jgr=º=2¿  ¿  ¿  ¿  ¿  ¿  BjBgÁBdæEBb
+ôB_/¢B\TPBYxÿBV®BSÂ\BPç
+BN
+¹BK0gBHUBEyÄBBrB?Ã B<çÏB:
+}B71+B4UÚB1zB.7B+ÃåB(èB&
+BB#1ðB VB
+{MBûBÄ©BéWBB2ŽB
+WcB	|B ¿BÅnB ê
+Aü
+AöfòAð°OAêù«AåCAßeAÙÕÁAÔ
+AÎh{AÈ±×AÂû4AœDA·îA±×KA¬ §AŠjA ³aAüœAFAwAØÓA"0A|×AqiÔAeüAZIAO"ACŽŸA8GyA,Ú3A!líAÿšA
+c@þJ:@ço¯@Ð#@¹º@¢à
+@@jUî@< Ö@ë¿?ÂmQ?ND=¹F=L1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BdíÜBboB_>
+B\bÌBYzBV¬(BSÐ×BPõBN4BK>âBHcBE?BB¬íB?ÑB<öJB:øB7?§B4dUB1B.­²B+Ò`B(÷B&œB#@kB eB
+ÈB®vBÓ%B÷ÓB
+BA/B
+eÞB	B¯;BÓéB øAü:AöèAðÍEAë¢Aå_ÿAß©[AÙòžAÔ<AÎ
+qAÈÎÎAÃ+AœaA·ªäA±ôAA¬=AŠûA ÐWAŽAcA¬mAõÊA?'A}Aq£ÂAf6|AZÉ6AO[ðACî«A8fA- A!ŠÛA9A
+ÌO@þŸ@çã@Ñý@º.r@£Sç@y\@k=¢@=@Ós?Ä<¹?Q¥=Ö
+Ê=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B_EŽB\qGBYõBVº€BSßRBQ BN(¯BKM^BHr
+BEºBB»iB?àB=ÅB:)tB7N"B4rÐB1B.Œ-B+àÛB)B&*8B#NçB sB
+CBŒòBá BNB*ýBO«B
+tYB	Bœ¶BâdBAüWAö ßAðê;Aë3Aå|õAßÆRAÚ¯AÔY
+AÎ¢hAÈëÅAÃ5!Aœ~~A·ÇÛA²7A¬ZAŠ£ñA íNA6«AAÉdAÁA\
+A}JôAqÝ®AfpiA[$AOÞAD(A8»RA-N
+A!àÈAsA
+=@ÿ1î@èWc@Ñ|Ø@º¢L@£ÇÁ@í6@l%V@>p?@»(?Æ
+!?UCç=ó|V=ü§¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BYBVÉBSíÍBQ|BN7*BK[ØBHBE¥6BBÉäB?îB=AB:7ïB7\B4LB1¥úB.ÊšB+ïWB)B&8³B#]bB B
+Š¿BËmBðBÊB9xB^&B
+ÕB	§BÌ1BðßBAütyAöœÕAñ2AëPAåëAßãHAÚ,¥AÔvAÎ¿_AÉ»AÃRAœuA·äÑA²..A¬wAŠÀçA¡
+DAS¡AþAæ[A/·AyA}áArAfªVA[=AOÏËADbA8õ@A-úA"ŽA­oA
+@*@ÿ¥È@èË=@Ñð²@»'@€;@a@m
+
+@?Wô@¢Ü?ÇÛ?Xâž>9r=Œó5¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BSõeBQ øBNEŠBKjUBHBE³±BBØ`B?ýB=!œB:FkB7kB4ÈB1ŽvB.Ù%B+ýÓB)"B&G0B#kÞB B
+µ;BÙéBþB#FBGôBl£B
+QB	µÿBÚ®Bÿ\B$
+AüqAöÚÎAñ$+AëmAå¶äAà AAÚIAÔúAÎÜWAÉ%ŽAÃoAœžmAžÊA²K'A¬AŠÝàA¡'=ApA¹öASAL°A
+A}ŸÓArQAfäGA[wAP	ŒADvA9/1A-ÁìA"TŠAç`A
+zA 
+Õ@é?@Òd@»	@€¯~@Ôó@môÐ@@?ž@¡?É«?\Ê>µž=ÙéÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BNM=BKxÐBH~BEÂ-BBæÛB@
+B=08B:TçB7yB4CB1ÂòB.ç B,
+NB)0ýB&U«B#zYB B
+Ã¶BèdB
+B1ÁBVpB{
+B
+ÌB	Ä{Bé)B
+×B2Aü®hAö÷ÅAñA!Aë~AåÓÛAà
+7AÚfAÔ¯ñAÎùMAÉBªAÃAœÕdAž
+ÁA²h
+A¬±zAŠú×A¡D3AAÖíA IAiŠA³A}øÀArzAg
+5A[°ïAPC©ADÖdA9i
+A-ûØA"A!NA
+ŽA FÂ@é²ù@ÒØn@»ýã@¥#X@HÍ@nÜ@A'm@rV?Ëz|?` >%0þ=öàN¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BH¥BEÐšBBõVB@B=>³B:caB7B4¬¿B1ÑmB.öB,ÊB)?xB&d&B#ÕB ­B
+Ò1BöàBB@<BdëBB
+®HB	ÒöB÷€B
+SBAAüË_A÷ŒAñ^Aë§uAåðÑAà:.AÚAÔÌçAÏDAÉ_¡AÃšýAœòZAž;·A²
+A¬ÎqA§ÍA¡a*AªAóãA=@AAÏùA~2¬ArÅgAgX!A[êÜAP}AEQA9£
+A.5ÆA"ÈA[:A
+íõA °@ê&Ô@ÓLH@Œqœ@¥2@Œ§@oÄ8@B!@Z
+?ÍIå?c¿m>3¬E>	ëm¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BBüíB@(B=M.B:qÝB7B4»9B1ßèB/B,)EB)MóB&r¢B#PB »þB
+à­B[B*	BNžBsfBB
+ŒÃB	áqB B*ÎBO|AüèUA÷1±Añ{AëÄlAæ
+ÈAàW%AÚ AÔéÞAÏ3;AÉ|AÃÅôAŸQAžX­A²¢
+A¬ëgA§4ÄA¡~!AÇ}AÚAZ7A£AìðA~lArÿTAgA\$ÉAP·AEJ>A9ÜùA.o³A#mA(A
+'âA º@ê®@ÓÀ"@Œå@Š
+
+@0@p«í@BöÖ@AŸ?ÏN?g^>>B'>fŽ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B=TÅB:XB7¥B4ÉµB1îcB/B,7ÀB)\oB&
+B#¥ËB ÊzB
+ï(BÖB8
+B]3BáBŠB
+Ë>B	ïìBB9IB]øAýKA÷NšAñAëáaAæ*¿Aàt
+AÚœxAÕÕAÏP1AÉAÃâëAŸ,GAžu€A²¿A­]A§QºA¡AätA-ÑAw-AÀA
+	çA~ŠAs9AAgËüA\^¶APñqAE+A:åA.© A#<[AÏA
+aÏA ô@ë@Ô3ý@œYr@Š~æ@€\@q¡@CÞ@)s?Ðè·?jý>P¢Ó>&áû¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B7¬B4Ø1B1üßB/!B,F<B)jêB&B#ŽHB ØöB
+ý€B"SBGBk¯B^Bµ
+B
+ÙºB	þiB#BGÅBltAý"DA÷k¡AñŽýAëþZAæG·AàAÚÚqAÕ#ÎAÏm*AÉ¶AÃÿãAŸI@AžA²ÛùA­%VA§n³A¡žAlAJÉA&AÝA
+&ßA~àxAss2AhíA\§AQ+bAEŸ
+A:P×A.ãA#vKA	A
+ÁA.{@ëk@Ô§ß@œÍT@ŠòÉ@>@r{e@DÆO@7?Òž@?n#>_>5]C¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B2vB/0	B,T·B)yfB&B#ÂÂB çqB
+
+ B0ÎBU|Bz+BÙBÃB
+è6B
+
+äB1BVABzïAý?;A÷AñÑôAìQAæd­Aà®
+AÚ÷gAÕ@ÃAÏ!AÉÓ~AÄ
+ÚAŸf7Až¯A²øðA­BMA§©A¡ÕA
+cAg¿A±
+AúyA
+CÖAeAs­ Ah?ÚA\ÒAQeOAEø	A:ÄA/
+~A#°9ABóA
+Õ­Ahh@ëöE@Õº@ŸA/@§f£@@sc@E®@øì?Ô©?r:õ>mb>CØ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B,\NB)áB&¬B#Ñ>B õìB
+B?IBcøBŠB­TBÒB
+ö±B
+_B@BdŒBjAý\1A÷¥AñîëAì8GAæ€AàËAÛ]AÕ]ºAÏ§AÉðsAÄ9ÑAŸ-AžÌA³çA­_CA§š A¡ñýA;YA¶AÎAoA
+`ÌATSAsç
+AhyÇA]
+AQ<AF1öA:Ä±A/WkA#ê&A|àA
+A¢U@ìj@Õ@Ÿµ@§Ú~@ÿò@tJÎ@F·@à ?ÖW?uÙÅ>|€>RSÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B&Ž&B#ß¹B!gB
+)BMÄBrrB!B»ÐBà~B
+,B
+)ÛBNBs7BæAýy(A÷Â
+Aò
+áAìU>AæAàç÷AÛ1TAÕz±AÏÄ
+AÊ
+jAÄVÇAŸ #AžéA³2ÝA­|:A§ÅA¢óAXPA¡­Aë	A4fA
+}ÃA?At úAh³ŽA]FnAQÙ)AFkäA:þA/XA$$A¶ÍA
+IAÜB@ìÝù@Ön@¿(ã@šNX@sÌ@u2@G}k@ÈT?Ø&z?yx>
+Hv>`Ï¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B!
+þB
+7B\?BîB¥BÊJBîùB
+šB
+8VB]B³BŠaAý
+A÷ß{Aò(ØAìr5Aæ»AáîAÛNKAÕ§AÏáAÊ*aAÄsœAŸœA¹wA³OÓA­1A§âA¢+êAuGAŸ£A AQ]A
+¹AÈ,AtZçAhí¡A]\ARAF¥ÐA;8A/ËFA$^ AðºA
+uA/@íQÓ@ÖwH@¿œ@šÂ2@ç§@v7@He @°	?Ùõã?}i>>oJ\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bc×BjBŽBØÇBýuB
+"#B
+FÒBkB/BŽÝAý³A÷üsAòEÐAì-AæØAá!çAÛkCAÕŽ AÏýýAÊGYAÄ¶AŸÚA¹#oA³lÌA­¶)A§ÿ
+A¢HãA?AÛA$ùAnUA
+·²AAtØAi'A]ºMARMAFßÂA;r|A06A$ñA*¬A
+œfAP @íÅµ@Öë+@À@©6@[@wü@ILä@Í?ÛÅl?[=>Ä>>}Å€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B»¯BçBB
+ðB
+0B
+UMByûBªBÃYAýÐAøjAòbÇAì¬#AæõAá>ÝAÛ:AÕÑAÐóAÊdPAÄ­­AŸ÷	A¹@fA³ÃA­ÓAš
+|A¢eÙA¯5AøAAïALA
+Ô©A
+AtÎÅAiaA]ô:ARôAG¯A;¬iA0?$A$ÑÞAdA
+÷SA@î9@×_@Àz@©©ï@Ïc@wé°@J4@
+?ÝÕ?*Š>â> v¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BB
+?B
+cÈBwB­%BÑÓAýíAø6aAòœAìÉAçwAá[ÓAÛ¥0AÕîAÐ7êAÊGAÄÊ£A¿ A¹]]A³Š¹A­ðAš9sA¢ÏAÌ,AA^åAšCA
+ñA:üAu²AimA^.'ARÀáAGSA;æVA0yA%
+ËAA1@AÃú@î­j@×Òß@ÀøT@ª
+É@C>@xÑe@K
+M@
+g6?ßd=?ú>¢?
+>^¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+k_BòB» BàOAþ	ûAøSWAòŽAìæAç/mAáxÊAÛÂ'AÖ
+AÐTàAÊ=AÄçA¿0÷A¹zSA³Ã°A®
+
+AšViA¢ÆAé#A2A{ÜAÅ9AAWòAuBAiÕYA^hARúÏAGA< CA0²þA%EžAØsAk-Aýè@ï!D@ØF¹@Ál.@ª£@·@y¹@L@
+Nê?á3Š?
+Éx>©}*>œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BÃ7BîÊAþ&ñAøpNAò¹«AíAçLdAáÁAÛß
+AÖ(zAÐq×AÊ»3AÅA¿MíA¹JA³à§A®*Ašs`A¢ŒœAAOvAÓAâ/A+AtéAu|AjGA^¢AS4»AGÇvA<Z1A0ìëA%¥A`A¥A7Õ@ï@Øº@Áà@«}@*ò@z Í@Lë¶@6?ã?á>°ºÍ>Ùb¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aþ6AøFAòÖ£Aí  Açi]Aá²¹AÛüAÖEsAÐÏAÊØ,AÅ!A¿jåA¹ŽBA³ýA®FüAšYA¢ÙµA#AloAµËAÿ(AH
+AáAu¶}AjI8A^ÛòASn­AHgA<!A1&ÜA%¹ALQAß
+AqÆ@ð	@Ù.u@ÂSë@«y_@Ô@{@MÓ{@ 
+c?äÒ?hk>·øñ>£¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AòåÏAí<öAçSAáÏ°AÜ
+AÖbiAÐ«ÆAÊõ#AÅ>A¿ÜA¹Ñ9AŽA®còAš­OA¢ö¬A@	AeAÒÂA
+Ae{A®ØAuðjAj%A_ßASšAH;TA<ÎA1`ÉA%óA>AùA«³@ð|Û@Ù¢P@ÂÇÅ@«í9@¯@|pG@N»/@!?æ¢?7Ó>¿6>ªT©¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AçAáìŠAÜ6AÖ`AÐÈœAËAÅ[vA¿€ÓA¹î/AŽ7A®éAšÊEA£¢A\ÿAŠ\Aï¹A9ArAËÏAv*XAjœA_OÌASâAHuAA=üA1¶A&-qAÀ+ARåAå @ððµ@Ú*@Ã;@¬a@@}Wú@O¢ä@!íÌ?èqj?<>Æt6>±J¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÜE/AÖVAÐå³AË/AÅxmA¿ÁÉAº
+&AŽTA®ßAšç<A£0AyõAÃRA
+¯AV
+AiAèÅAvdEAjöÿA_ºAT
+tAH¯.A=AéA1Ô£A&g^AúAÓA@ñd@Ú@Ã¯y@¬Ôî@úb@~?¯@P@"Õ?ê@Ó?Ö€>Í±Ú>žÏï¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÐôßAËLAÅcA¿ÞÀAº(
+AŽqyA®ºÖA©3A£MAìAàIA)¥AsAŒ_AŒAv2Ak0íA_Ã§ATVaAHé
+A={ÖA2A&¡KA4AÆÀAYz@ñØi@ÚýÞ@Ä#S@­HÈ@n=@'d@QrM@#œ6?ì<?Š
+>Ôï~>À
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÅ€A¿ûžAºEAŽrA®×ÏA©!+A£jA³åAýAAFAûAÙWA"ŽAvØ#AkjÝA_ýATSAI#
+A=µÇA2HA&Û<AmöA ±Ak@òLK@ÛqÁ@Ä5@­Œª@â@@RZ@$€ú?íßÅ?u>Ü-¢>ÇK5¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AºTAAŽ«hA®ôÅA©>"A£AÐÛA8AcA¬ñAöNA?«AwAk€ËA`7
+ATÊ?AI\úA=ïµA2oA')A§äA:AÍX@òÀ&@Ûå@Å
+@®0
+@Uù@{n@SAÆ@%®?ï¯.?Dÿ>ãkE>ÎÚ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¯ñA©[A£€uAíÒA7/AAÉèAEA\¡AwKýAkÞžA`qsAU-AIçA>)¡A2Œ\A'OAáÑAtAF@ó4 @ÜYu@Å~ê@®€_@ÉÓ@ïI@T)z@&tc?ñ~?i>êšé>ÕÆ}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A£³¡A
+ÈAT%AAæßA0;AyAw
+êAl¥A`«_AU>AIÐÕA>cA2öIA'A
+ŸA®yAA3@ó§Û@ÜÍO@ÅòÄ@¯9@=®@c#@U.@'\?óN ?ãÒ>ñæ>Ý!¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AcQAºxAÕAM2AAw¿ØAlRA`åLAUxAJ
+ÁA>|A307A'ÂñA
+U«AèeA{ @ôŽ@ÝA*@Æf@¯@±@Öý@Uøã@(CÌ?õ
+i?³:>ù$1>äAÅ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AAj*A³AwùÈAlAa>AU±øAJD²A>×mA3j'A'üâA
+A"WAµ@ô@Ýµ
+@ÆÚ@¯ÿö@%k@Jß@Và§@)+?öìò?Ã? 1*>ëi¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÂ³Ax3¶AlÆpAaY*AUëåAJ~ A?ZA3€A(6ÏA
+ÉA\DAîþ@õq@Þ(æ@ÇN[@°sÏ@D@Ÿº@WÈ\@*E?øŒ[?R,?Ïü>òœ
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AläÉAaAV%ÒAJžA?KGA3ÞA(pŒA
+vA1A(ë@õwK@ÞÀ@ÇÂ5@°çª@
+@2@X°@*úù?úÃ?!?nÍ>ùú®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AVD+AJòzA?
+4A4îA(ª©A
+=dAÐ
+AbØ@õë%@ß@È6@±[@ù@Šn@YÄ@+â­?ü[,? ðý?
+
+? )¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A?£A4QàA(äA
+wTA
+AÊ@ö_@ß}@È©ñ@±Ïg@ôÛ@P@Z@,Êr?þ*µ?¢À?¬°?:û¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A)óA
+±BACüAÖ¶@öÒâ@ßøW@É
+Ì@²CA@hµ@*@[g=@-²&?ÿú
+?€ï?K?ÙÌ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AbUA€@÷FŒ@àl1@ÉŠ@²·@Ü@
+@\Nò@.Ú@ äÃ?Š_X?êU?
+x¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @÷n@àà
+@Ê@³*õ@Pj@
+uß@]6Š@/@Ìx?š.Á?'?q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ÊB2@³Ð@ÄD@
+é¹@^
+[@0iC@Ž,?©þ*?
+'ø?¶B¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ þ@]@_@1Q@ñ?«Í³? Ç
+?U¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @_@28œ@¥?­
+?$eÝ?óç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ý	?¯l
+?(®?
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?)ê;?!1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B~
+B~záB~p€B~ffB~\)B~QìB~G®B~=qB~33B~(öB~
+žB~{B~
+=B~  B}õÃB}ë
+B}áHB}×
+B}ÌÍB}ÂB}žRB}®B}£×B}B}\B}
+B}záB}p€B}ffB}\)B}QìB}G®B}=qB}33B}(öB}
+žB}{B}
+=B}  B|õÃB|ë
+B|áHB|×
+B|ÌÍB|ÂB|žRB|®B|£×B|B|\B|
+B|záB|p€B|ffB|\)B|QìB|G®B|=qB|33B|(öB|
+žB|{B|
+=B|  Bz
+BzzáBzp€BzffBz\)BzQìBzG®Bz=qBz33Bz(öBz
+žBz{Bz
+=Bz  ByõÃByë
+ByáHBy×
+ByÌÍByÂByžRBy®By£×ByBy\By
+ByzáByp€ByffBy\)ByQìByG®By=qBy33By(öBy
+žBy{By
+=By  BxõÃBxë
+BxáHBx×
+BxÌÍBxÂBxžRBx®Bx£×BxBx\Bx
+BxzáBxp€BxffBx\)BxQìBxG®Bx=qBx33Bx(öBx
+žBx{Bx
+=Bx  Bv
+BvzáBvp€BvffBv\)BvQìBvG®Bv=qBv33Bv(öBv
+žBv{Bv
+=Bv  BuõÃBuë
+BuáHBu×
+BuÌÍBuÂBužRBu®Bu£×BuBu\Bu
+BuzáBup€BuffBu\)BuQìBuG®Bu=qBu33Bu(öBu
+žBu{Bu
+=Bu  BtõÃBtë
+BtáHBt×
+BtÌÍBtÂBtžRBt®Bt£×BtBt\Bt
+BtzáBtp€BtffBt\)BtQìBtG®Bt=qBt33Bt(öBt
+žBt{Bt
+=Bt  Br
+BrzáBrp€BrffBr\)BrQìBrG®Br=qBr33Br(öBr
+žBr{Br
+=Br  BqõÃBqë
+BqáHBq×
+BqÌÍBqÂBqžRBq®Bq£×BqBq\Bq
+BqzáBqp€BqffBq\)BqQìBqG®Bq=qBq33Bq(öBq
+žBq{Bq
+=Bq  BpõÃBpë
+BpáHBp×
+BpÌÍBpÂBpžRBp®Bp£×BpBp\Bp
+BpzáBpp€BpffBp\)BpQìBpG®Bp=qBp33Bp(öBp
+žBp{Bp
+=Bp  Bn
+BnzáBnp€BnffBn\)BnQìBnG®Bn=qBn33Bn(öBn
+žBn{Bn
+=Bn  BmõÃBmë
+BmáHBm×
+BmÌÍBmÂBmžRBm®Bm£×BmBm\Bm
+BmzáBmp€BmffBm\)BmQìBmG®Bm=qBm33Bm(öBm
+žBm{Bm
+=Bm  BlõÃBlë
+BláHBl×
+BlÌÍBlÂBlžRBl®Bl£×BlBl\Bl
+BlzáBlp€BlffBl\)BlQìBlG®Bl=qBl33Bl(öBl
+žBl{Bl
+=Bl  Bj
+BjzáBjp€BjffBj\)BjQìBjG®Bj=qBj33Bj(öBj
+žBj{Bj
+=Bj  BiõÃBië
+BiáHBi×
+BiÌÍBiÂBižRBi®Bi£×BiBi\Bi
+BizáBip€BiffBi\)BiQìBiG®Bi=qBi33Bi(öBi
+žBi{Bi
+=Bi  BhõÃBhë
+BháHBh×
+BhÌÍBhÂBhžRBh®Bh£×BhBh\Bh
+BhzáBhp€BhffBh\)BhQìBhG®Bh=qBh33Bh(öBh
+žBh{Bh
+=Bh  Bf
+BfzáBfp€BfffBf\)BfQìBfG®Bf=qBf33Bf(öBf
+žBf{Bf
+=Bf  BeõÃBeë
+BeáHBe×
+BeÌÍBeÂBežRBe®Be£×BeBe\Be
+BezáBep€BeffBe\)BeQìBeG®Be=qBe33Be(öBe
+žBe{Be
+=Be  BdõÃBdë
+BdáHBd×
+BdÌÍBdÂBdžRBd®Bd£×BdBd\Bd
+BdzáBdp€BdffBd\)BdQìBdG®Bd=qBd33Bd(öBd
+žBd{Bd
+=Bd  Bb
+BbzáBbp€BbffBb\)BbQìBbG®Bb=qBb33Bb(öBb
+žBb{Bb
+=Bb  BaõÃBaë
+BaáHBa×
+BaÌÍBaÂBažRBa®Ba£×BaBa\Ba
+BazáBap€BaffBa\)BaQìBaG®Ba=qBa33Ba(öBa
+žBa{Ba
+=Ba  B`õÃB`ë
+B`áHB`×
+B`ÌÍB`ÂB`žRB`®B`£×B`B`\B`
+B`záB`p€B`ffB`\)B`QìB`G®B`=qB`33B`(öB`
+žB`{B`
+=B`  B^
+B^záB^p€B^ffB^\)B^QìB^G®B^=qB^33B^(öB^
+žB^{B^
+=B^  B]õÃB]ë
+B]áHB]×
+B]ÌÍB]ÂB]žRB]®B]£×B]B]\B]
+B]záB]p€B]ffB]\)B]QìB]G®B]=qB]33B](öB]
+žB]{B]
+=B]  B\õÃB\ë
+B\áHB\×
+B\ÌÍB\ÂB\žRB\®B\£×B\B\\B\
+B\záB\p€B\ffB\\)B\QìB\G®B\=qB\33B\(öB\
+žB\{B\
+=B\  BZ
+BZzáBZp€BZffBZ\)BZQìBZG®BZ=qBZ33BZ(öBZ
+žBZ{BZ
+=BZ  BYõÃBYë
+BYáHBY×
+BYÌÍBYÂBYžRBY®BY£×BYBY\BY
+BYzáBYp€BYffBY\)BYQìBYG®BY=qBY33BY(öBY
+žBY{BY
+=BY  BXõÃBXë
+BXáHBX×
+BXÌÍBXÂBXžRBX®BX£×BXBX\BX
+BXzáBXp€BXffBX\)BXQìBXG®BX=qBX33BX(öBX
+žBX{BX
+=BX  BV
+BVzáBVp€BVffBV\)BVQìBVG®BV=qBV33BV(öBV
+žBV{BV
+=BV  BUõÃBUë
+BUáHBU×
+BUÌÍBUÂBUžRBU®BU£×BUBU\BU
+BUzáBUp€BUffBU\)BUQìBUG®BU=qBU33BU(öBU
+žBU{BU
+=BU  BTõÃBTë
+BTáHBT×
+BTÌÍBTÂBTžRBT®BT£×BTBT\BT
+BTzáBTp€BTffBT\)BTQìBTG®BT=qBT33BT(öBT
+žBT{BT
+=BT  BR
+BRzáBRp€BRffBR\)BRQìBRG®BR=qBR33BR(öBR
+žBR{BR
+=BR  BQõÃBQë
+BQáHBQ×
+BQÌÍBQÂBQžRBQ®BQ£×BQBQ\BQ
+BQzáBQp€BQffBQ\)BQQìBQG®BQ=qBQ33BQ(öBQ
+žBQ{BQ
+=BQ  BPõÃBPë
+BPáHBP×
+BPÌÍBPÂBPžRBP®BP£×BPBP\BP
+BPzáBPp€BPffBP\)BPQìBPG®BP=qBP33BP(öBP
+žBP{BP
+=BP  BN
+BNzáBNp€BNffBN\)BNQìBNG®BN=qBN33BN(öBN
+žBN{BN
+=BN  BMõÃBMë
+BMáHBM×
+BMÌÍBMÂBMžRBM®BM£×BMBM\BM
+BMzáBMp€BMffBM\)BMQìBMG®BM=qBM33BM(öBM
+žBM{BM
+=BM  BLõÃBLë
+BLáHBL×
+BLÌÍBLÂBLžRBL®BL£×BLBL\BL
+BLzáBLp€BLffBL\)BLQìBLG®BL=qBL33BL(öBL
+žBL{BL
+=BL  BJ
+BJzáBJp€BJffBJ\)BJQìBJG®BJ=qBJ33BJ(öBJ
+žBJ{BJ
+=BJ  BIõÃBIë
+BIáHBI×
+BIÌÍBIÂBIžRBI®BI£×BIBI\BI
+BIzáBIp€BIffBI\)BIQìBIG®BI=qBI33BI(öBI
+žBI{BI
+=BI  BHõÃBHë
+BHáHBH×
+BHÌÍBHÂBHžRBH®BH£×BHBH\BH
+BHzáBHp€BHffBH\)BHQìBHG®BH=qBH33BH(öBH
+žBH{BH
+=BH  BF
+BFzáBFp€BFffBF\)BFQìBFG®BF=qBF33BF(öBF
+žBF{BF
+=BF  BEõÃBEë
+BEáHBE×
+BEÌÍBEÂBEžRBE®BE£×BEBE\BE
+BEzáBEp€BEffBE\)BEQìBEG®BE=qBE33BE(öBE
+žBE{BE
+=BE  BDõÃBDë
+BDáHBD×
+BDÌÍBDÂBDžRBD®BD£×BDBD\BD
+BDzáBDp€BDffBD\)BDQìBDG®BD=qBD33BD(öBD
+žBD{BD
+=BD  BB
+BBzáBBp€BBffBB\)BBQìBBG®BB=qBB33BB(öBB
+žBB{BB
+=BB  BAõÃBAë
+BAáHBA×
+BAÌÍBAÂBAžRBA®BA£×BABA\BA
+BAzáBAp€BAffBA\)BAQìBAG®BA=qBA33BA(öBA
+žBA{BA
+=BA  B@õÃB@ë
+B@áHB@×
+B@ÌÍB@ÂB@žRB@®B@£×B@B@\B@
+B@záB@p€B@ffB@\)B@QìB@G®B@=qB@33B@(öB@
+žB@{B@
+=B@  B>
+B>záB>p€B>ffB>\)B>QìB>G®B>=qB>33B>(öB>
+žB>{B>
+=B>  B=õÃB=ë
+B=áHB=×
+B=ÌÍB=ÂB=žRB=®B=£×B=B=\B=
+B=záB=p€B=ffB=\)B=QìB=G®B==qB=33B=(öB=
+žB={B=
+=B=  B<õÃB<ë
+B<áHB<×
+B<ÌÍB<ÂB<žRB<®B<£×B<B<\B<
+B<záB<p€B<ffB<\)B<QìB<G®B<=qB<33B<(öB<
+žB<{B<
+=B<  B:
+B:záB:p€B:ffB:\)B:QìB:G®B:=qB:33B:(öB:
+žB:{B:
+=B:  B9õÃB9ë
+B9áHB9×
+B9ÌÍB9ÂB9žRB9®B9£×B9B9\B9
+B9záB9p€B9ffB9\)B9QìB9G®B9=qB933B9(öB9
+žB9{B9
+=B9  B8õÃB8ë
+B8áHB8×
+B8ÌÍB8ÂB8žRB8®B8£×B8B8\B8
+B8záB8p€B8ffB8\)B8QìB8G®B8=qB833B8(öB8
+žB8{B8
+=B8  B6
+B6záB6p€B6ffB6\)B6QìB6G®B6=qB633B6(öB6
+žB6{B6
+=B6  B5õÃB5ë
+B5áHB5×
+B5ÌÍB5ÂB5žRB5®B5£×B5B5\B5
+B5záB5p€B5ffB5\)B5QìB5G®B5=qB533B5(öB5
+žB5{B5
+=B5  B4õÃB4ë
+B4áHB4×
+B4ÌÍB4ÂB4žRB4®B4£×B4B4\B4
+B4záB4p€B4ffB4\)B4QìB4G®B4=qB433B4(öB4
+žB4{B4
+=B4  B2
+B2záB2p€B2ffB2\)B2QìB2G®B2=qB233B2(öB2
+žB2{B2
+=B2  B1õÃB1ë
+B1áHB1×
+B1ÌÍB1ÂB1žRB1®B1£×B1B1\B1
+B1záB1p€B1ffB1\)B1QìB1G®B1=qB133B1(öB1
+žB1{B1
+=B1  B0õÃB0ë
+B0áHB0×
+B0ÌÍB0ÂB0žRB0®B0£×B0B0\B0
+B0záB0p€B0ffB0\)B0QìB0G®B0=qB033B0(öB0
+žB0{B0
+=B0  B.
+B.záB.p€B.ffB.\)B.QìB.G®B.=qB.33B.(öB.
+žB.{B.
+=B.  B-õÃB-ë
+B-áHB-×
+B-ÌÍB-ÂB-žRB-®B-£×B-B-\B-
+B-záB-p€B-ffB-\)B-QìB-G®B-=qB-33B-(öB-
+žB-{B-
+=B-  B,õÃB,ë
+B,áHB,×
+B,ÌÍB,ÂB,žRB,®B,£×B,B,\B,
+B,záB,p€B,ffB,\)B,QìB,G®B,=qB,33B,(öB,
+žB,{B,
+=B,  B*
+B*záB*p€B*ffB*\)B*QìB*G®B*=qB*33B*(öB*
+žB*{B*
+=B*  B)õÃB)ë
+B)áHB)×
+B)ÌÍB)ÂB)žRB)®B)£×B)B)\B)
+B)záB)p€B)ffB)\)B)QìB)G®B)=qB)33B)(öB)
+žB){B)
+=B)  B(õÃB(ë
+B(áHB(×
+B(ÌÍB(ÂB(žRB(®B(£×B(B(\B(
+B(záB(p€B(ffB(\)B(QìB(G®B(=qB(33B((öB(
+žB({B(
+=B(  B&
+B&záB&p€B&ffB&\)B&QìB&G®B&=qB&33B&(öB&
+žB&{B&
+=B&  B%õÃB%ë
+B%áHB%×
+B%ÌÍB%ÂB%žRB%®B%£×B%B%\B%
+B%záB%p€B%ffB%\)B%QìB%G®B%=qB%33B%(öB%
+žB%{B%
+=B%  B$õÃB$ë
+B$áHB$×
+B$ÌÍB$ÂB$žRB$®B$£×B$B$\B$
+B$záB$p€B$ffB$\)B$QìB$G®B$=qB$33B$(öB$
+žB${B$
+=B$  B"
+B"záB"p€B"ffB"\)B"QìB"G®B"=qB"33B"(öB"
+žB"{B"
+=B"  B!õÃB!ë
+B!áHB!×
+B!ÌÍB!ÂB!žRB!®B!£×B!B!\B!
+B!záB!p€B!ffB!\)B!QìB!G®B!=qB!33B!(öB!
+žB!{B!
+=B!  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B	õÃB	ë
+B	áHB	×
+B	ÌÍB	ÂB	žRB	®B	£×B	B	\B	
+B	záB	p€B	ffB	\)B	QìB	G®B	=qB	33B	(öB	
+žB	{B	
+=B	  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   Aý
+=AüõÃAüáHAüÌÍAüžRAü£×Aü\AüzáAüffAüQìAü=qAü(öAü{Aü  Aûë
+Aû×
+AûÂAû®AûAû
+Aûp€Aû\)AûG®Aû33Aû
+žAû
+=AúõÃAúáHAúÌÍAúžRAú£×Aú\AúzáAúffAúQìAú=qAú(öAú{Aú  Aùë
+Aù×
+AùÂAù®AùAù
+Aùp€Aù\)AùG®Aù33Aù
+žAù
+=AøõÃAøáHAøÌÍAøžRAø£×Aø\AøzáAøffAøQìAø=qAø(öAø{Aø  Aõ
+=AôõÃAôáHAôÌÍAôžRAô£×Aô\AôzáAôffAôQìAô=qAô(öAô{Aô  Aóë
+Aó×
+AóÂAó®AóAó
+Aóp€Aó\)AóG®Aó33Aó
+žAó
+=AòõÃAòáHAòÌÍAòžRAò£×Aò\AòzáAòffAòQìAò=qAò(öAò{Aò  Añë
+Añ×
+AñÂAñ®AñAñ
+Añp€Añ\)AñG®Añ33Añ
+žAñ
+=AðõÃAðáHAðÌÍAðžRAð£×Að\AðzáAðffAðQìAð=qAð(öAð{Að  Aí
+=AìõÃAìáHAìÌÍAìžRAì£×Aì\AìzáAìffAìQìAì=qAì(öAì{Aì  Aëë
+Aë×
+AëÂAë®AëAë
+Aëp€Aë\)AëG®Aë33Aë
+žAë
+=AêõÃAêáHAêÌÍAêžRAê£×Aê\AêzáAêffAêQìAê=qAê(öAê{Aê  Aéë
+Aé×
+AéÂAé®AéAé
+Aép€Aé\)AéG®Aé33Aé
+žAé
+=AèõÃAèáHAèÌÍAèžRAè£×Aè\AèzáAèffAèQìAè=qAè(öAè{Aè  Aå
+=AäõÃAäáHAäÌÍAäžRAä£×Aä\AäzáAäffAäQìAä=qAä(öAä{Aä  Aãë
+Aã×
+AãÂAã®AãAã
+Aãp€Aã\)AãG®Aã33Aã
+žAã
+=AâõÃAâáHAâÌÍAâžRAâ£×Aâ\AâzáAâffAâQìAâ=qAâ(öAâ{Aâ  Aáë
+Aá×
+AáÂAá®AáAá
+Aáp€Aá\)AáG®Aá33Aá
+žAá
+=AàõÃAàáHAàÌÍAàžRAà£×Aà\AàzáAàffAàQìAà=qAà(öAà{Aà  AÝ
+=AÜõÃAÜáHAÜÌÍAÜžRAÜ£×AÜ\AÜzáAÜffAÜQìAÜ=qAÜ(öAÜ{AÜ  AÛë
+AÛ×
+AÛÂAÛ®AÛAÛ
+AÛp€AÛ\)AÛG®AÛ33AÛ
+žAÛ
+=AÚõÃAÚáHAÚÌÍAÚžRAÚ£×AÚ\AÚzáAÚffAÚQìAÚ=qAÚ(öAÚ{AÚ  AÙë
+AÙ×
+AÙÂAÙ®AÙAÙ
+AÙp€AÙ\)AÙG®AÙ33AÙ
+žAÙ
+=AØõÃAØáHAØÌÍAØžRAØ£×AØ\AØzáAØffAØQìAØ=qAØ(öAØ{AØ  AÕ
+=AÔõÃAÔáHAÔÌÍAÔžRAÔ£×AÔ\AÔzáAÔffAÔQìAÔ=qAÔ(öAÔ{AÔ  AÓë
+AÓ×
+AÓÂAÓ®AÓAÓ
+AÓp€AÓ\)AÓG®AÓ33AÓ
+žAÓ
+=AÒõÃAÒáHAÒÌÍAÒžRAÒ£×AÒ\AÒzáAÒffAÒQìAÒ=qAÒ(öAÒ{AÒ  AÑë
+AÑ×
+AÑÂAÑ®AÑAÑ
+AÑp€AÑ\)AÑG®AÑ33AÑ
+žAÑ
+=AÐõÃAÐáHAÐÌÍAÐžRAÐ£×AÐ\AÐzáAÐffAÐQìAÐ=qAÐ(öAÐ{AÐ  AÍ
+=AÌõÃAÌáHAÌÌÍAÌžRAÌ£×AÌ\AÌzáAÌffAÌQìAÌ=qAÌ(öAÌ{AÌ  AËë
+AË×
+AËÂAË®AËAË
+AËp€AË\)AËG®AË33AË
+žAË
+=AÊõÃAÊáHAÊÌÍAÊžRAÊ£×AÊ\AÊzáAÊffAÊQìAÊ=qAÊ(öAÊ{AÊ  AÉë
+AÉ×
+AÉÂAÉ®AÉAÉ
+AÉp€AÉ\)AÉG®AÉ33AÉ
+žAÉ
+=AÈõÃAÈáHAÈÌÍAÈžRAÈ£×AÈ\AÈzáAÈffAÈQìAÈ=qAÈ(öAÈ{AÈ  AÅ
+=AÄõÃAÄáHAÄÌÍAÄžRAÄ£×AÄ\AÄzáAÄffAÄQìAÄ=qAÄ(öAÄ{AÄ  AÃë
+AÃ×
+AÃÂAÃ®AÃAÃ
+AÃp€AÃ\)AÃG®AÃ33AÃ
+žAÃ
+=AÂõÃAÂáHAÂÌÍAÂžRAÂ£×AÂ\AÂzáAÂffAÂQìAÂ=qAÂ(öAÂ{AÂ  AÁë
+AÁ×
+AÁÂAÁ®AÁAÁ
+AÁp€AÁ\)AÁG®AÁ33AÁ
+žAÁ
+=AÀõÃAÀáHAÀÌÍAÀžRAÀ£×AÀ\AÀzáAÀffAÀQìAÀ=qAÀ(öAÀ{AÀ  Aœ
+=AŒõÃAŒáHAŒÌÍAŒžRAŒ£×AŒ\AŒzáAŒffAŒQìAŒ=qAŒ(öAŒ{AŒ  A»ë
+A»×
+A»ÂA»®A»A»
+A»p€A»\)A»G®A»33A»
+žA»
+=AºõÃAºáHAºÌÍAºžRAº£×Aº\AºzáAºffAºQìAº=qAº(öAº{Aº  A¹ë
+A¹×
+A¹ÂA¹®A¹A¹
+A¹p€A¹\)A¹G®A¹33A¹
+žA¹
+=AžõÃAžáHAžÌÍAžžRAž£×Až\AžzáAžffAžQìAž=qAž(öAž{Až  Aµ
+=AŽõÃAŽáHAŽÌÍAŽžRAŽ£×AŽ\AŽzáAŽffAŽQìAŽ=qAŽ(öAŽ{AŽ  A³ë
+A³×
+A³ÂA³®A³A³
+A³p€A³\)A³G®A³33A³
+žA³
+=A²õÃA²áHA²ÌÍA²žRA²£×A²\A²záA²ffA²QìA²=qA²(öA²{A²  A±ë
+A±×
+A±ÂA±®A±A±
+A±p€A±\)A±G®A±33A±
+žA±
+=A°õÃA°áHA°ÌÍA°žRA°£×A°\A°záA°ffA°QìA°=qA°(öA°{A°  A­
+=A¬õÃA¬áHA¬ÌÍA¬žRA¬£×A¬\A¬záA¬ffA¬QìA¬=qA¬(öA¬{A¬  A«ë
+A«×
+A«ÂA«®A«A«
+A«p€A«\)A«G®A«33A«
+žA«
+=AªõÃAªáHAªÌÍAªžRAª£×Aª\AªzáAªffAªQìAª=qAª(öAª{Aª  A©ë
+A©×
+A©ÂA©®A©A©
+A©p€A©\)A©G®A©33A©
+žA©
+=AšõÃAšáHAšÌÍAšžRAš£×Aš\AšzáAšffAšQìAš=qAš(öAš{Aš  A¥
+=A€õÃA€áHA€ÌÍA€žRA€£×A€\A€záA€ffA€QìA€=qA€(öA€{A€  A£ë
+A£×
+A£ÂA£®A£A£
+A£p€A£\)A£G®A£33A£
+žA£
+=A¢õÃA¢áHA¢ÌÍA¢žRA¢£×A¢\A¢záA¢ffA¢QìA¢=qA¢(öA¢{A¢  A¡ë
+A¡×
+A¡ÂA¡®A¡A¡
+A¡p€A¡\)A¡G®A¡33A¡
+žA¡
+=A õÃA áHA ÌÍA žRA £×A \A záA ffA QìA =qA (öA {A   A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Az{Ayë
+AyÂAyAyp€AyG®Ay
+žAxõÃAxÌÍAx£×AxzáAxQìAx(öAx  Aw×
+Aw®Aw
+Aw\)Aw33Aw
+=AváHAvžRAv\AvffAv=qAv{Auë
+AuÂAuAup€AuG®Au
+žAtõÃAtÌÍAt£×AtzáAtQìAt(öAt  As×
+As®As
+As\)As33As
+=AráHAržRAr\ArffAr=qAr{Aqë
+AqÂAqAqp€AqG®Aq
+žApõÃApÌÍAp£×ApzáApQìAp(öAp  Aj{Aië
+AiÂAiAip€AiG®Ai
+žAhõÃAhÌÍAh£×AhzáAhQìAh(öAh  Ag×
+Ag®Ag
+Ag\)Ag33Ag
+=AfáHAfžRAf\AfffAf=qAf{Aeë
+AeÂAeAep€AeG®Ae
+žAdõÃAdÌÍAd£×AdzáAdQìAd(öAd  Ac×
+Ac®Ac
+Ac\)Ac33Ac
+=AbáHAbžRAb\AbffAb=qAb{Aaë
+AaÂAaAap€AaG®Aa
+žA`õÃA`ÌÍA`£×A`záA`QìA`(öA`  AZ{AYë
+AYÂAYAYp€AYG®AY
+žAXõÃAXÌÍAX£×AXzáAXQìAX(öAX  AW×
+AW®AW
+AW\)AW33AW
+=AVáHAVžRAV\AVffAV=qAV{AUë
+AUÂAUAUp€AUG®AU
+žATõÃATÌÍAT£×ATzáATQìAT(öAT  AS×
+AS®AS
+AS\)AS33AS
+=ARáHARžRAR\ARffAR=qAR{AQë
+AQÂAQAQp€AQG®AQ
+žAPõÃAPÌÍAP£×APzáAPQìAP(öAP  AJ{AIë
+AIÂAIAIp€AIG®AI
+žAHõÃAHÌÍAH£×AHzáAHQìAH(öAH  AG×
+AG®AG
+AG\)AG33AG
+=AFáHAFžRAF\AFffAF=qAF{AEë
+AEÂAEAEp€AEG®AE
+žADõÃADÌÍAD£×ADzáADQìAD(öAD  AC×
+AC®AC
+AC\)AC33AC
+=ABáHABžRAB\ABffAB=qAB{AAë
+AAÂAAAAp€AAG®AA
+žA@õÃA@ÌÍA@£×A@záA@QìA@(öA@  A:{A9ë
+A9ÂA9A9p€A9G®A9
+žA8õÃA8ÌÍA8£×A8záA8QìA8(öA8  A7×
+A7®A7
+A7\)A733A7
+=A6áHA6žRA6\A6ffA6=qA6{A5ë
+A5ÂA5A5p€A5G®A5
+žA4õÃA4ÌÍA4£×A4záA4QìA4(öA4  A3×
+A3®A3
+A3\)A333A3
+=A2áHA2žRA2\A2ffA2=qA2{A1ë
+A1ÂA1A1p€A1G®A1
+žA0õÃA0ÌÍA0£×A0záA0QìA0(öA0  A*{A)ë
+A)ÂA)A)p€A)G®A)
+žA(õÃA(ÌÍA(£×A(záA(QìA((öA(  A'×
+A'®A'
+A'\)A'33A'
+=A&áHA&žRA&\A&ffA&=qA&{A%ë
+A%ÂA%A%p€A%G®A%
+žA$õÃA$ÌÍA$£×A$záA$QìA$(öA$  A#×
+A#®A#
+A#\)A#33A#
+=A"áHA"žRA"\A"ffA"=qA"{A!ë
+A!ÂA!A!p€A!G®A!
+žA õÃA ÌÍA £×A záA QìA (öA   A{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A
+{A	ë
+A	ÂA	A	p€A	G®A	
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žA õÃA ÌÍA £×A záA QìA (öA   @ô(ö@ó×
+@ó
+@ó33@òáH@ò\@ò=q@ñë
+@ñ@ñG®@ðõÂ@ð£×@ðQì@ð  @ï®@ï\)@ï
+=@îžR@îff@î{@íÂ@íp€@í
+ž@ìÌÍ@ìzá@ì(ö@ë×
+@ë
+@ë33@êáH@ê\@ê=q@éë
+@é@éG®@èõÃ@è£×@èQì@è  @ç®@ç\)@ç
+=@æžR@æff@æ{@åÂ@åp€@å
+ž@äÌÍ@äzá@ä(ö@ã×
+@ã
+@ã33@âáH@â\@â=q@áë
+@á@áG®@àõÃ@à£×@àQì@à  @Ô(ö@Ó×
+@Ó
+@Ó33@ÒáH@Ò\@Ò=q@Ñë
+@Ñ@ÑG®@ÐõÂ@Ð£×@ÐQì@Ð  @Ï®@Ï\)@Ï
+=@ÎžR@Îff@Î{@ÍÂ@Íp€@Í
+ž@ÌÌÍ@Ìzá@Ì(ö@Ë×
+@Ë
+@Ë33@ÊáH@Ê\@Ê=q@Éë
+@É@ÉG®@ÈõÃ@È£×@ÈQì@È  @Ç®@Ç\)@Ç
+=@ÆžR@Æff@Æ{@ÅÂ@Åp€@Å
+ž@ÄÌÍ@Äzá@Ä(ö@Ã×
+@Ã
+@Ã33@ÂáH@Â\@Â=q@Áë
+@Á@ÁG®@ÀõÃ@À£×@ÀQì@À  @Ž(ö@³×
+@³
+@³33@²áH@²\@²=q@±ë
+@±@±G®@°õÂ@°£×@°Qì@°  @¯®@¯\)@¯
+=@®žR@®ff@®{@­Â@­p€@­
+ž@¬ÌÍ@¬zá@¬(ö@«×
+@«
+@«33@ªáH@ª\@ª=q@©ë
+@©@©G®@šõÃ@š£×@šQì@š  @§®@§\)@§
+=@ŠžR@Šff@Š{@¥Â@¥p€@¥
+ž@€ÌÍ@€zá@€(ö@£×
+@£
+@£33@¢áH@¢\@¢=q@¡ë
+@¡@¡G®@ õÃ@ £×@ Qì@   @(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÂ@£×@Qì@  @®@\)@
+=@žR@ff@{@Â@p€@
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @®@\)@
+=@žR@ff@{@
+Â@
+p€@
+
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @hQì@g®@g
+>@fff@eÂ@e
+ž@dzá@c×
+@c33@b\@aë
+@aG®@`£×@`  @_\)@^žR@^{@]p€@\ÌÍ@\(ö@[
+@ZáH@Z=q@Y@XõÂ@XQì@W®@W
+>@Vff@UÂ@U
+ž@Tzá@S×
+@S33@R\@Që
+@QG®@P£×@P  @O\)@NžR@N{@Mp€@LÌÍ@L(ö@K
+@JáH@J=q@I@HõÃ@HQì@G®@G
+=@Fff@EÂ@E
+ž@Dzá@C×
+@C33@B\@Aë
+@AG®@@£×@@  @(Qì@'®@'
+>@&ff@%Â@%
+ž@$zá@#×
+@#33@"\@!ë
+@!G®@ £×@   @\)@
+žR@
+{@
+p€@
+ÌÍ@
+(ö@
+@áH@=q@@õÂ@Qì@®@
+>@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@£×@  @\)@žR@{@
+p€@
+ÌÍ@
+(ö@
+
+@
+áH@
+=q@	@õÃ@Qì@®@
+=@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@ £×@   ?Ð£×?Ï\)?Î{?ÌÌÍ?Ë
+
+?Ê=p?ÈõÂ?Ç®?Æff?Å
+ž?Ã×
+?Â\?ÁG®?À  ?ŸžR?œp€?Œ(ö?ºáH?¹?žQì?·
+>?µÂ?Žzá?³33?±ë
+?°£×?¯\)?®{?¬ÌÍ?«
+?ª=q?šõÂ?§®?Šff?¥
+ž?£×
+?¢\?¡G®?   ?žR?p€?(ö?áH??Qì?
+>?Â?zá?33?ë
+?£×?\)?{?ÌÍ?
+?=q?õÃ?®?ff?
+
+ž?×
+?\?G®?  ?!G®?
+žR?
+(ö??
+=?zá?ë
+?\)?
+ÌÍ?
+=q?®?
+ž?\?   >úáH>õÂ>ð£×>ë
+>æff>áG®>Ü(ö>×
+=>Ñë
+>ÌÌÍ>Ç®>Â\>œp€>žQì>³33>®{>šõÃ>£×
+>žR>>zá>\)>=q>
+
+ž>  >uÂ>k
+>aG®>W
+=>LÌÍ>B\>8Qì>.{>#×
+>>\)>
+ž=õÂ=áG®=ÌÌÍ=žQì=£×
+=\)=uÂ=LÌÍ=#×
+<õÂ<£×
+<#×
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
Index: /trunk/psLib/test/fits/verified/fOut.fits
===================================================================
--- /trunk/psLib/test/fits/verified/fOut.fits	(revision 4547)
+++ /trunk/psLib/test/fits/verified/fOut.fits	(revision 4547)
@@ -0,0 +1,8424 @@
+SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B~
+B~záB~p€B~ffB~\)B~QìB~G®B~=qB~33B~(öB~
+žB~{B~
+=B~  B}õÃB}ë
+B}áHB}×
+B}ÌÍB}ÂB}žRB}®B}£×B}B}\B}
+B}záB}p€B}ffB}\)B}QìB}G®B}=qB}33B}(öB}
+žB}{B}
+=B}  B|õÃB|ë
+B|áHB|×
+B|ÌÍB|ÂB|žRB|®B|£×B|B|\B|
+B|záB|p€B|ffB|\)B|QìB|G®B|=qB|33B|(öB|
+žB|{B|
+=B|  Bz
+BzzáBzp€BzffBz\)BzQìBzG®Bz=qBz33Bz(öBz
+žBz{Bz
+=Bz  ByõÃByë
+ByáHBy×
+ByÌÍByÂByžRBy®By£×ByBy\By
+ByzáByp€ByffBy\)ByQìByG®By=qBy33By(öBy
+žBy{By
+=By  BxõÃBxë
+BxáHBx×
+BxÌÍBxÂBxžRBx®Bx£×BxBx\Bx
+BxzáBxp€BxffBx\)BxQìBxG®Bx=qBx33Bx(öBx
+žBx{Bx
+=Bx  Bv
+BvzáBvp€BvffBv\)BvQìBvG®Bv=qBv33Bv(öBv
+žBv{Bv
+=Bv  BuõÃBuë
+BuáHBu×
+BuÌÍBuÂBužRBu®Bu£×BuBu\Bu
+BuzáBup€BuffBu\)BuQìBuG®Bu=qBu33Bu(öBu
+žBu{Bu
+=Bu  BtõÃBtë
+BtáHBt×
+BtÌÍBtÂBtžRBt®Bt£×BtBt\Bt
+BtzáBtp€BtffBt\)BtQìBtG®Bt=qBt33Bt(öBt
+žBt{Bt
+=Bt  Br
+BrzáBrp€BrffBr\)BrQìBrG®Br=qBr33Br(öBr
+žBr{Br
+=Br  BqõÃBqë
+BqáHBq×
+BqÌÍBqÂBqžRBq®Bq£×BqBq\Bq
+BqzáBqp€BqffBq\)BqQìBqG®Bq=qBq33Bq(öBq
+žBq{Bq
+=Bq  BpõÃBpë
+BpáHBp×
+BpÌÍBpÂBpžRBp®Bp£×BpBp\Bp
+BpzáBpp€BpffBp\)BpQìBpG®Bp=qBp33Bp(öBp
+žBp{Bp
+=Bp  Bn
+BnzáBnp€BnffBn\)BnQìBnG®Bn=qBn33Bn(öBn
+žBn{Bn
+=Bn  BmõÃBmë
+BmáHBm×
+BmÌÍBmÂBmžRBm®Bm£×BmBm\Bm
+BmzáBmp€BmffBm\)BmQìBmG®Bm=qBm33Bm(öBm
+žBm{Bm
+=Bm  BlõÃBlë
+BláHBl×
+BlÌÍBlÂBlžRBl®Bl£×BlBl\Bl
+BlzáBlp€BlffBl\)BlQìBlG®Bl=qBl33Bl(öBl
+žBl{Bl
+=Bl  Bj
+BjzáBjp€BjffBj\)BjQìBjG®Bj=qBj33Bj(öBj
+žBj{Bj
+=Bj  BiõÃBië
+BiáHBi×
+BiÌÍBiÂBižRBi®Bi£×BiBi\Bi
+BizáBip€BiffBi\)BiQìBiG®Bi=qBi33Bi(öBi
+žBi{Bi
+=Bi  BhõÃBhë
+BháHBh×
+BhÌÍBhÂBhžRBh®Bh£×BhBh\Bh
+BhzáBhp€BhffBh\)BhQìBhG®Bh=qBh33Bh(öBh
+žBh{Bh
+=Bh  Bf
+BfzáBfp€BfffBf\)BfQìBfG®Bf=qBf33Bf(öBf
+žBf{Bf
+=Bf  BeõÃBeë
+BeáHBe×
+BeÌÍBeÂBežRBe®Be£×BeBe\Be
+BezáBep€BeffBe\)BeQìBeG®Be=qBe33Be(öBe
+žBe{Be
+=Be  BdõÃBdë
+BdáHBd×
+BdÌÍBdÂBdžRBd®Bd£×BdBd\Bd
+BdzáBdp€BdffBd\)BdQìBdG®Bd=qBd33Bd(öBd
+žBd{Bd
+=Bd  Bb
+BbzáBbp€BbffBb\)BbQìBbG®Bb=qBb33Bb(öBb
+žBb{Bb
+=Bb  BaõÃBaë
+BaáHBa×
+BaÌÍBaÂBažRBa®Ba£×BaBa\Ba
+BazáBap€BaffBa\)BaQìBaG®Ba=qBa33Ba(öBa
+žBa{Ba
+=Ba  B`õÃB`ë
+B`áHB`×
+B`ÌÍB`ÂB`žRB`®B`£×B`B`\B`
+B`záB`p€B`ffB`\)B`QìB`G®B`=qB`33B`(öB`
+žB`{B`
+=B`  B^
+B^záB^p€B^ffB^\)B^QìB^G®B^=qB^33B^(öB^
+žB^{B^
+=B^  B]õÃB]ë
+B]áHB]×
+B]ÌÍB]ÂB]žRB]®B]£×B]B]\B]
+B]záB]p€B]ffB]\)B]QìB]G®B]=qB]33B](öB]
+žB]{B]
+=B]  B\õÃB\ë
+B\áHB\×
+B\ÌÍB\ÂB\žRB\®B\£×B\B\\B\
+B\záB\p€B\ffB\\)B\QìB\G®B\=qB\33B\(öB\
+žB\{B\
+=B\  BZ
+BZzáBZp€BZffBZ\)BZQìBZG®BZ=qBZ33BZ(öBZ
+žBZ{BZ
+=BZ  BYõÃBYë
+BYáHBY×
+BYÌÍBYÂBYžRBY®BY£×BYBY\BY
+BYzáBYp€BYffBY\)BYQìBYG®BY=qBY33BY(öBY
+žBY{BY
+=BY  BXõÃBXë
+BXáHBX×
+BXÌÍBXÂBXžRBX®BX£×BXBX\BX
+BXzáBXp€BXffBX\)BXQìBXG®BX=qBX33BX(öBX
+žBX{BX
+=BX  BV
+BVzáBVp€BVffBV\)BVQìBVG®BV=qBV33BV(öBV
+žBV{BV
+=BV  BUõÃBUë
+BUáHBU×
+BUÌÍBUÂBUžRBU®BU£×BUBU\BU
+BUzáBUp€BUffBU\)BUQìBUG®BU=qBU33BU(öBU
+žBU{BU
+=BU  BTõÃBTë
+BTáHBT×
+BTÌÍBTÂBTžRBT®BT£×BTBT\BT
+BTzáBTp€BTffBT\)BTQìBTG®BT=qBT33BT(öBT
+žBT{BT
+=BT  BR
+BRzáBRp€BRffBR\)BRQìBRG®BR=qBR33BR(öBR
+žBR{BR
+=BR  BQõÃBQë
+BQáHBQ×
+BQÌÍBQÂBQžRBQ®BQ£×BQBQ\BQ
+BQzáBQp€BQffBQ\)BQQìBQG®BQ=qBQ33BQ(öBQ
+žBQ{BQ
+=BQ  BPõÃBPë
+BPáHBP×
+BPÌÍBPÂBPžRBP®BP£×BPBP\BP
+BPzáBPp€BPffBP\)BPQìBPG®BP=qBP33BP(öBP
+žBP{BP
+=BP  BN
+BNzáBNp€BNffBN\)BNQìBNG®BN=qBN33BN(öBN
+žBN{BN
+=BN  BMõÃBMë
+BMáHBM×
+BMÌÍBMÂBMžRBM®BM£×BMBM\BM
+BMzáBMp€BMffBM\)BMQìBMG®BM=qBM33BM(öBM
+žBM{BM
+=BM  BLõÃBLë
+BLáHBL×
+BLÌÍBLÂBLžRBL®BL£×BLBL\BL
+BLzáBLp€BLffBL\)BLQìBLG®BL=qBL33BL(öBL
+žBL{BL
+=BL  BJ
+BJzáBJp€BJffBJ\)BJQìBJG®BJ=qBJ33BJ(öBJ
+žBJ{BJ
+=BJ  BIõÃBIë
+BIáHBI×
+BIÌÍBIÂBIžRBI®BI£×BIBI\BI
+BIzáBIp€BIffBI\)BIQìBIG®BI=qBI33BI(öBI
+žBI{BI
+=BI  BHõÃBHë
+BHáHBH×
+BHÌÍBHÂBHžRBH®BH£×BHBH\BH
+BHzáBHp€BHffBH\)BHQìBHG®BH=qBH33BH(öBH
+žBH{BH
+=BH  BF
+BFzáBFp€BFffBF\)BFQìBFG®BF=qBF33BF(öBF
+žBF{BF
+=BF  BEõÃBEë
+BEáHBE×
+BEÌÍBEÂBEžRBE®BE£×BEBE\BE
+BEzáBEp€BEffBE\)BEQìBEG®BE=qBE33BE(öBE
+žBE{BE
+=BE  BDõÃBDë
+BDáHBD×
+BDÌÍBDÂBDžRBD®BD£×BDBD\BD
+BDzáBDp€BDffBD\)BDQìBDG®BD=qBD33BD(öBD
+žBD{BD
+=BD  BB
+BBzáBBp€BBffBB\)BBQìBBG®BB=qBB33BB(öBB
+žBB{BB
+=BB  BAõÃBAë
+BAáHBA×
+BAÌÍBAÂBAžRBA®BA£×BABA\BA
+BAzáBAp€BAffBA\)BAQìBAG®BA=qBA33BA(öBA
+žBA{BA
+=BA  B@õÃB@ë
+B@áHB@×
+B@ÌÍB@ÂB@žRB@®B@£×B@B@\B@
+B@záB@p€B@ffB@\)B@QìB@G®B@=qB@33B@(öB@
+žB@{B@
+=B@  B>
+B>záB>p€B>ffB>\)B>QìB>G®B>=qB>33B>(öB>
+žB>{B>
+=B>  B=õÃB=ë
+B=áHB=×
+B=ÌÍB=ÂB=žRB=®B=£×B=B=\B=
+B=záB=p€B=ffB=\)B=QìB=G®B==qB=33B=(öB=
+žB={B=
+=B=  B<õÃB<ë
+B<áHB<×
+B<ÌÍB<ÂB<žRB<®B<£×B<B<\B<
+B<záB<p€B<ffB<\)B<QìB<G®B<=qB<33B<(öB<
+žB<{B<
+=B<  B:
+B:záB:p€B:ffB:\)B:QìB:G®B:=qB:33B:(öB:
+žB:{B:
+=B:  B9õÃB9ë
+B9áHB9×
+B9ÌÍB9ÂB9žRB9®B9£×B9B9\B9
+B9záB9p€B9ffB9\)B9QìB9G®B9=qB933B9(öB9
+žB9{B9
+=B9  B8õÃB8ë
+B8áHB8×
+B8ÌÍB8ÂB8žRB8®B8£×B8B8\B8
+B8záB8p€B8ffB8\)B8QìB8G®B8=qB833B8(öB8
+žB8{B8
+=B8  B6
+B6záB6p€B6ffB6\)B6QìB6G®B6=qB633B6(öB6
+žB6{B6
+=B6  B5õÃB5ë
+B5áHB5×
+B5ÌÍB5ÂB5žRB5®B5£×B5B5\B5
+B5záB5p€B5ffB5\)B5QìB5G®B5=qB533B5(öB5
+žB5{B5
+=B5  B4õÃB4ë
+B4áHB4×
+B4ÌÍB4ÂB4žRB4®B4£×B4B4\B4
+B4záB4p€B4ffB4\)B4QìB4G®B4=qB433B4(öB4
+žB4{B4
+=B4  B2
+B2záB2p€B2ffB2\)B2QìB2G®B2=qB233B2(öB2
+žB2{B2
+=B2  B1õÃB1ë
+B1áHB1×
+B1ÌÍB1ÂB1žRB1®B1£×B1B1\B1
+B1záB1p€B1ffB1\)B1QìB1G®B1=qB133B1(öB1
+žB1{B1
+=B1  B0õÃB0ë
+B0áHB0×
+B0ÌÍB0ÂB0žRB0®B0£×B0B0\B0
+B0záB0p€B0ffB0\)B0QìB0G®B0=qB033B0(öB0
+žB0{B0
+=B0  B.
+B.záB.p€B.ffB.\)B.QìB.G®B.=qB.33B.(öB.
+žB.{B.
+=B.  B-õÃB-ë
+B-áHB-×
+B-ÌÍB-ÂB-žRB-®B-£×B-B-\B-
+B-záB-p€B-ffB-\)B-QìB-G®B-=qB-33B-(öB-
+žB-{B-
+=B-  B,õÃB,ë
+B,áHB,×
+B,ÌÍB,ÂB,žRB,®B,£×B,B,\B,
+B,záB,p€B,ffB,\)B,QìB,G®B,=qB,33B,(öB,
+žB,{B,
+=B,  B*
+B*záB*p€B*ffB*\)B*QìB*G®B*=qB*33B*(öB*
+žB*{B*
+=B*  B)õÃB)ë
+B)áHB)×
+B)ÌÍB)ÂB)žRB)®B)£×B)B)\B)
+B)záB)p€B)ffB)\)B)QìB)G®B)=qB)33B)(öB)
+žB){B)
+=B)  B(õÃB(ë
+B(áHB(×
+B(ÌÍB(ÂB(žRB(®B(£×B(B(\B(
+B(záB(p€B(ffB(\)B(QìB(G®B(=qB(33B((öB(
+žB({B(
+=B(  B&
+B&záB&p€B&ffB&\)B&QìB&G®B&=qB&33B&(öB&
+žB&{B&
+=B&  B%õÃB%ë
+B%áHB%×
+B%ÌÍB%ÂB%žRB%®B%£×B%B%\B%
+B%záB%p€B%ffB%\)B%QìB%G®B%=qB%33B%(öB%
+žB%{B%
+=B%  B$õÃB$ë
+B$áHB$×
+B$ÌÍB$ÂB$žRB$®B$£×B$B$\B$
+B$záB$p€B$ffB$\)B$QìB$G®B$=qB$33B$(öB$
+žB${B$
+=B$  B"
+B"záB"p€B"ffB"\)B"QìB"G®B"=qB"33B"(öB"
+žB"{B"
+=B"  B!õÃB!ë
+B!áHB!×
+B!ÌÍB!ÂB!žRB!®B!£×B!B!\B!
+B!záB!p€B!ffB!\)B!QìB!G®B!=qB!33B!(öB!
+žB!{B!
+=B!  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B	õÃB	ë
+B	áHB	×
+B	ÌÍB	ÂB	žRB	®B	£×B	B	\B	
+B	záB	p€B	ffB	\)B	QìB	G®B	=qB	33B	(öB	
+žB	{B	
+=B	  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   Aý
+=AüõÃAüáHAüÌÍAüžRAü£×Aü\AüzáAüffAüQìAü=qAü(öAü{Aü  Aûë
+Aû×
+AûÂAû®AûAû
+Aûp€Aû\)AûG®Aû33Aû
+žAû
+=AúõÃAúáHAúÌÍAúžRAú£×Aú\AúzáAúffAúQìAú=qAú(öAú{Aú  Aùë
+Aù×
+AùÂAù®AùAù
+Aùp€Aù\)AùG®Aù33Aù
+žAù
+=AøõÃAøáHAøÌÍAøžRAø£×Aø\AøzáAøffAøQìAø=qAø(öAø{Aø  Aõ
+=AôõÃAôáHAôÌÍAôžRAô£×Aô\AôzáAôffAôQìAô=qAô(öAô{Aô  Aóë
+Aó×
+AóÂAó®AóAó
+Aóp€Aó\)AóG®Aó33Aó
+žAó
+=AòõÃAòáHAòÌÍAòžRAò£×Aò\AòzáAòffAòQìAò=qAò(öAò{Aò  Añë
+Añ×
+AñÂAñ®AñAñ
+Añp€Añ\)AñG®Añ33Añ
+žAñ
+=AðõÃAðáHAðÌÍAðžRAð£×Að\AðzáAðffAðQìAð=qAð(öAð{Að  Aí
+=AìõÃAìáHAìÌÍAìžRAì£×Aì\AìzáAìffAìQìAì=qAì(öAì{Aì  Aëë
+Aë×
+AëÂAë®AëAë
+Aëp€Aë\)AëG®Aë33Aë
+žAë
+=AêõÃAêáHAêÌÍAêžRAê£×Aê\AêzáAêffAêQìAê=qAê(öAê{Aê  Aéë
+Aé×
+AéÂAé®AéAé
+Aép€Aé\)AéG®Aé33Aé
+žAé
+=AèõÃAèáHAèÌÍAèžRAè£×Aè\AèzáAèffAèQìAè=qAè(öAè{Aè  Aå
+=AäõÃAäáHAäÌÍAäžRAä£×Aä\AäzáAäffAäQìAä=qAä(öAä{Aä  Aãë
+Aã×
+AãÂAã®AãAã
+Aãp€Aã\)AãG®Aã33Aã
+žAã
+=AâõÃAâáHAâÌÍAâžRAâ£×Aâ\AâzáAâffAâQìAâ=qAâ(öAâ{Aâ  Aáë
+Aá×
+AáÂAá®AáAá
+Aáp€Aá\)AáG®Aá33Aá
+žAá
+=AàõÃAàáHAàÌÍAàžRAà£×Aà\AàzáAàffAàQìAà=qAà(öAà{Aà  AÝ
+=AÜõÃAÜáHAÜÌÍAÜžRAÜ£×AÜ\AÜzáAÜffAÜQìAÜ=qAÜ(öAÜ{AÜ  AÛë
+AÛ×
+AÛÂAÛ®AÛAÛ
+AÛp€AÛ\)AÛG®AÛ33AÛ
+žAÛ
+=AÚõÃAÚáHAÚÌÍAÚžRAÚ£×AÚ\AÚzáAÚffAÚQìAÚ=qAÚ(öAÚ{AÚ  AÙë
+AÙ×
+AÙÂAÙ®AÙAÙ
+AÙp€AÙ\)AÙG®AÙ33AÙ
+žAÙ
+=AØõÃAØáHAØÌÍAØžRAØ£×AØ\AØzáAØffAØQìAØ=qAØ(öAØ{AØ  AÕ
+=AÔõÃAÔáHAÔÌÍAÔžRAÔ£×AÔ\AÔzáAÔffAÔQìAÔ=qAÔ(öAÔ{AÔ  AÓë
+AÓ×
+AÓÂAÓ®AÓAÓ
+AÓp€AÓ\)AÓG®AÓ33AÓ
+žAÓ
+=AÒõÃAÒáHAÒÌÍAÒžRAÒ£×AÒ\AÒzáAÒffAÒQìAÒ=qAÒ(öAÒ{AÒ  AÑë
+AÑ×
+AÑÂAÑ®AÑAÑ
+AÑp€AÑ\)AÑG®AÑ33AÑ
+žAÑ
+=AÐõÃAÐáHAÐÌÍAÐžRAÐ£×AÐ\AÐzáAÐffAÐQìAÐ=qAÐ(öAÐ{AÐ  AÍ
+=AÌõÃAÌáHAÌÌÍAÌžRAÌ£×AÌ\AÌzáAÌffAÌQìAÌ=qAÌ(öAÌ{AÌ  AËë
+AË×
+AËÂAË®AËAË
+AËp€AË\)AËG®AË33AË
+žAË
+=AÊõÃAÊáHAÊÌÍAÊžRAÊ£×AÊ\AÊzáAÊffAÊQìAÊ=qAÊ(öAÊ{AÊ  AÉë
+AÉ×
+AÉÂAÉ®AÉAÉ
+AÉp€AÉ\)AÉG®AÉ33AÉ
+žAÉ
+=AÈõÃAÈáHAÈÌÍAÈžRAÈ£×AÈ\AÈzáAÈffAÈQìAÈ=qAÈ(öAÈ{AÈ  AÅ
+=AÄõÃAÄáHAÄÌÍAÄžRAÄ£×AÄ\AÄzáAÄffAÄQìAÄ=qAÄ(öAÄ{AÄ  AÃë
+AÃ×
+AÃÂAÃ®AÃAÃ
+AÃp€AÃ\)AÃG®AÃ33AÃ
+žAÃ
+=AÂõÃAÂáHAÂÌÍAÂžRAÂ£×AÂ\AÂzáAÂffAÂQìAÂ=qAÂ(öAÂ{AÂ  AÁë
+AÁ×
+AÁÂAÁ®AÁAÁ
+AÁp€AÁ\)AÁG®AÁ33AÁ
+žAÁ
+=AÀõÃAÀáHAÀÌÍAÀžRAÀ£×AÀ\AÀzáAÀffAÀQìAÀ=qAÀ(öAÀ{AÀ  Aœ
+=AŒõÃAŒáHAŒÌÍAŒžRAŒ£×AŒ\AŒzáAŒffAŒQìAŒ=qAŒ(öAŒ{AŒ  A»ë
+A»×
+A»ÂA»®A»A»
+A»p€A»\)A»G®A»33A»
+žA»
+=AºõÃAºáHAºÌÍAºžRAº£×Aº\AºzáAºffAºQìAº=qAº(öAº{Aº  A¹ë
+A¹×
+A¹ÂA¹®A¹A¹
+A¹p€A¹\)A¹G®A¹33A¹
+žA¹
+=AžõÃAžáHAžÌÍAžžRAž£×Až\AžzáAžffAžQìAž=qAž(öAž{Až  Aµ
+=AŽõÃAŽáHAŽÌÍAŽžRAŽ£×AŽ\AŽzáAŽffAŽQìAŽ=qAŽ(öAŽ{AŽ  A³ë
+A³×
+A³ÂA³®A³A³
+A³p€A³\)A³G®A³33A³
+žA³
+=A²õÃA²áHA²ÌÍA²žRA²£×A²\A²záA²ffA²QìA²=qA²(öA²{A²  A±ë
+A±×
+A±ÂA±®A±A±
+A±p€A±\)A±G®A±33A±
+žA±
+=A°õÃA°áHA°ÌÍA°žRA°£×A°\A°záA°ffA°QìA°=qA°(öA°{A°  A­
+=A¬õÃA¬áHA¬ÌÍA¬žRA¬£×A¬\A¬záA¬ffA¬QìA¬=qA¬(öA¬{A¬  A«ë
+A«×
+A«ÂA«®A«A«
+A«p€A«\)A«G®A«33A«
+žA«
+=AªõÃAªáHAªÌÍAªžRAª£×Aª\AªzáAªffAªQìAª=qAª(öAª{Aª  A©ë
+A©×
+A©ÂA©®A©A©
+A©p€A©\)A©G®A©33A©
+žA©
+=AšõÃAšáHAšÌÍAšžRAš£×Aš\AšzáAšffAšQìAš=qAš(öAš{Aš  A¥
+=A€õÃA€áHA€ÌÍA€žRA€£×A€\A€záA€ffA€QìA€=qA€(öA€{A€  A£ë
+A£×
+A£ÂA£®A£A£
+A£p€A£\)A£G®A£33A£
+žA£
+=A¢õÃA¢áHA¢ÌÍA¢žRA¢£×A¢\A¢záA¢ffA¢QìA¢=qA¢(öA¢{A¢  A¡ë
+A¡×
+A¡ÂA¡®A¡A¡
+A¡p€A¡\)A¡G®A¡33A¡
+žA¡
+=A õÃA áHA ÌÍA žRA £×A \A záA ffA QìA =qA (öA {A   A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Az{Ayë
+AyÂAyAyp€AyG®Ay
+žAxõÃAxÌÍAx£×AxzáAxQìAx(öAx  Aw×
+Aw®Aw
+Aw\)Aw33Aw
+=AváHAvžRAv\AvffAv=qAv{Auë
+AuÂAuAup€AuG®Au
+žAtõÃAtÌÍAt£×AtzáAtQìAt(öAt  As×
+As®As
+As\)As33As
+=AráHAržRAr\ArffAr=qAr{Aqë
+AqÂAqAqp€AqG®Aq
+žApõÃApÌÍAp£×ApzáApQìAp(öAp  Aj{Aië
+AiÂAiAip€AiG®Ai
+žAhõÃAhÌÍAh£×AhzáAhQìAh(öAh  Ag×
+Ag®Ag
+Ag\)Ag33Ag
+=AfáHAfžRAf\AfffAf=qAf{Aeë
+AeÂAeAep€AeG®Ae
+žAdõÃAdÌÍAd£×AdzáAdQìAd(öAd  Ac×
+Ac®Ac
+Ac\)Ac33Ac
+=AbáHAbžRAb\AbffAb=qAb{Aaë
+AaÂAaAap€AaG®Aa
+žA`õÃA`ÌÍA`£×A`záA`QìA`(öA`  AZ{AYë
+AYÂAYAYp€AYG®AY
+žAXõÃAXÌÍAX£×AXzáAXQìAX(öAX  AW×
+AW®AW
+AW\)AW33AW
+=AVáHAVžRAV\AVffAV=qAV{AUë
+AUÂAUAUp€AUG®AU
+žATõÃATÌÍAT£×ATzáATQìAT(öAT  AS×
+AS®AS
+AS\)AS33AS
+=ARáHARžRAR\ARffAR=qAR{AQë
+AQÂAQAQp€AQG®AQ
+žAPõÃAPÌÍAP£×APzáAPQìAP(öAP  AJ{AIë
+AIÂAIAIp€AIG®AI
+žAHõÃAHÌÍAH£×AHzáAHQìAH(öAH  AG×
+AG®AG
+AG\)AG33AG
+=AFáHAFžRAF\AFffAF=qAF{AEë
+AEÂAEAEp€AEG®AE
+žADõÃADÌÍAD£×ADzáADQìAD(öAD  AC×
+AC®AC
+AC\)AC33AC
+=ABáHABžRAB\ABffAB=qAB{AAë
+AAÂAAAAp€AAG®AA
+žA@õÃA@ÌÍA@£×A@záA@QìA@(öA@  A:{A9ë
+A9ÂA9A9p€A9G®A9
+žA8õÃA8ÌÍA8£×A8záA8QìA8(öA8  A7×
+A7®A7
+A7\)A733A7
+=A6áHA6žRA6\A6ffA6=qA6{A5ë
+A5ÂA5A5p€A5G®A5
+žA4õÃA4ÌÍA4£×A4záA4QìA4(öA4  A3×
+A3®A3
+A3\)A333A3
+=A2áHA2žRA2\A2ffA2=qA2{A1ë
+A1ÂA1A1p€A1G®A1
+žA0õÃA0ÌÍA0£×A0záA0QìA0(öA0  A*{A)ë
+A)ÂA)A)p€A)G®A)
+žA(õÃA(ÌÍA(£×A(záA(QìA((öA(  A'×
+A'®A'
+A'\)A'33A'
+=A&áHA&žRA&\A&ffA&=qA&{A%ë
+A%ÂA%A%p€A%G®A%
+žA$õÃA$ÌÍA$£×A$záA$QìA$(öA$  A#×
+A#®A#
+A#\)A#33A#
+=A"áHA"žRA"\A"ffA"=qA"{A!ë
+A!ÂA!A!p€A!G®A!
+žA õÃA ÌÍA £×A záA QìA (öA   A{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A
+{A	ë
+A	ÂA	A	p€A	G®A	
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žA õÃA ÌÍA £×A záA QìA (öA   @ô(ö@ó×
+@ó
+@ó33@òáH@ò\@ò=q@ñë
+@ñ@ñG®@ðõÂ@ð£×@ðQì@ð  @ï®@ï\)@ï
+=@îžR@îff@î{@íÂ@íp€@í
+ž@ìÌÍ@ìzá@ì(ö@ë×
+@ë
+@ë33@êáH@ê\@ê=q@éë
+@é@éG®@èõÃ@è£×@èQì@è  @ç®@ç\)@ç
+=@æžR@æff@æ{@åÂ@åp€@å
+ž@äÌÍ@äzá@ä(ö@ã×
+@ã
+@ã33@âáH@â\@â=q@áë
+@á@áG®@àõÃ@à£×@àQì@à  @Ô(ö@Ó×
+@Ó
+@Ó33@ÒáH@Ò\@Ò=q@Ñë
+@Ñ@ÑG®@ÐõÂ@Ð£×@ÐQì@Ð  @Ï®@Ï\)@Ï
+=@ÎžR@Îff@Î{@ÍÂ@Íp€@Í
+ž@ÌÌÍ@Ìzá@Ì(ö@Ë×
+@Ë
+@Ë33@ÊáH@Ê\@Ê=q@Éë
+@É@ÉG®@ÈõÃ@È£×@ÈQì@È  @Ç®@Ç\)@Ç
+=@ÆžR@Æff@Æ{@ÅÂ@Åp€@Å
+ž@ÄÌÍ@Äzá@Ä(ö@Ã×
+@Ã
+@Ã33@ÂáH@Â\@Â=q@Áë
+@Á@ÁG®@ÀõÃ@À£×@ÀQì@À  @Ž(ö@³×
+@³
+@³33@²áH@²\@²=q@±ë
+@±@±G®@°õÂ@°£×@°Qì@°  @¯®@¯\)@¯
+=@®žR@®ff@®{@­Â@­p€@­
+ž@¬ÌÍ@¬zá@¬(ö@«×
+@«
+@«33@ªáH@ª\@ª=q@©ë
+@©@©G®@šõÃ@š£×@šQì@š  @§®@§\)@§
+=@ŠžR@Šff@Š{@¥Â@¥p€@¥
+ž@€ÌÍ@€zá@€(ö@£×
+@£
+@£33@¢áH@¢\@¢=q@¡ë
+@¡@¡G®@ õÃ@ £×@ Qì@   @(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÂ@£×@Qì@  @®@\)@
+=@žR@ff@{@Â@p€@
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @®@\)@
+=@žR@ff@{@
+Â@
+p€@
+
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @hQì@g®@g
+>@fff@eÂ@e
+ž@dzá@c×
+@c33@b\@aë
+@aG®@`£×@`  @_\)@^žR@^{@]p€@\ÌÍ@\(ö@[
+@ZáH@Z=q@Y@XõÂ@XQì@W®@W
+>@Vff@UÂ@U
+ž@Tzá@S×
+@S33@R\@Që
+@QG®@P£×@P  @O\)@NžR@N{@Mp€@LÌÍ@L(ö@K
+@JáH@J=q@I@HõÃ@HQì@G®@G
+=@Fff@EÂ@E
+ž@Dzá@C×
+@C33@B\@Aë
+@AG®@@£×@@  @(Qì@'®@'
+>@&ff@%Â@%
+ž@$zá@#×
+@#33@"\@!ë
+@!G®@ £×@   @\)@
+žR@
+{@
+p€@
+ÌÍ@
+(ö@
+@áH@=q@@õÂ@Qì@®@
+>@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@£×@  @\)@žR@{@
+p€@
+ÌÍ@
+(ö@
+
+@
+áH@
+=q@	@õÃ@Qì@®@
+=@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@ £×@   ?Ð£×?Ï\)?Î{?ÌÌÍ?Ë
+
+?Ê=p?ÈõÂ?Ç®?Æff?Å
+ž?Ã×
+?Â\?ÁG®?À  ?ŸžR?œp€?Œ(ö?ºáH?¹?žQì?·
+>?µÂ?Žzá?³33?±ë
+?°£×?¯\)?®{?¬ÌÍ?«
+?ª=q?šõÂ?§®?Šff?¥
+ž?£×
+?¢\?¡G®?   ?žR?p€?(ö?áH??Qì?
+>?Â?zá?33?ë
+?£×?\)?{?ÌÍ?
+?=q?õÃ?®?ff?
+
+ž?×
+?\?G®?  ?!G®?
+žR?
+(ö??
+=?zá?ë
+?\)?
+ÌÍ?
+=q?®?
+ž?\?   >úáH>õÂ>ð£×>ë
+>æff>áG®>Ü(ö>×
+=>Ñë
+>ÌÌÍ>Ç®>Â\>œp€>žQì>³33>®{>šõÃ>£×
+>žR>>zá>\)>=q>
+
+ž>  >uÂ>k
+>aG®>W
+=>LÌÍ>B\>8Qì>.{>#×
+>>\)>
+ž=õÂ=áG®=ÌÌÍ=žQì=£×
+=\)=uÂ=LÌÍ=#×
+<õÂ<£×
+<#×
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bz
+B~zá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bv
+BzzáBzzáB~p€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bn
+BrzáBvzáBzp€BzffB~\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bj
+BnzáBnzáBrp€BvffBz\)Bz\)B~Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bf
+BfzáBjzáBnp€BnffBr\)Bv\)BzQìBzG®B~G®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B^
+BbzáBfzáBfp€BjffBn\)Bn\)BrQìBvG®BzG®Bz=qB~33¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BZ
+BZzáB^záBbp€BfffBf\)Bj\)BnQìBnG®BrG®Bv=qBz33Bz(öB~(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BR
+BVzáBZzáBZp€B^ffBb\)Bf\)BfQìBjG®BnG®Bn=qBr33Bv(öBz(öBz
+žB~{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BN
+BRzáBRzáBVp€BZffBZ\)B^\)BbQìBfG®BfG®Bj=qBn33Bn(öBr(öBv
+žBz{Bz{B~
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BJ
+BJzáBNzáBRp€BRffBV\)BZ\)BZQìB^G®BbG®Bf=qBf33Bj(öBn(öBn
+žBr{Bv{Bz
+=Bz  B~  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BB
+BFzáBJzáBJp€BNffBR\)BR\)BVQìBZG®BZG®B^=qBb33Bf(öBf(öBj
+žBn{Bn{Br
+=Bv  Bz  ByõÃB}ë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B>
+B>záBBzáBFp€BJffBJ\)BN\)BRQìBRG®BVG®BZ=qBZ33B^(öBb(öBf
+žBf{Bj{Bn
+=Bn  Br  BuõÃByë
+ByáHB}áH¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B6
+B:záB>záB>p€BBffBF\)BJ\)BJQìBNG®BRG®BR=qBV33BZ(öBZ(öB^
+žBb{Bf{Bf
+=Bj  Bn  BmõÃBqë
+BuáHByáHBy×
+B}ÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B2
+B6záB6záB:p€B>ffB>\)BB\)BFQìBJG®BJG®BN=qBR33BR(öBV(öBZ
+žBZ{B^{Bb
+=Bf  Bf  BiõÃBmë
+BmáHBqáHBu×
+ByÌÍByÌÍB}Â¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B*
+B.záB2záB6p€B6ffB:\)B>\)B>QìBBG®BFG®BJ=qBJ33BN(öBR(öBR
+žBV{BZ{BZ
+=B^  Bb  BeõÃBeë
+BiáHBmáHBm×
+BqÌÍBuÌÍByÂByžRB}®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B&
+B*záB*záB.p€B2ffB6\)B6\)B:QìB>G®B>G®BB=qBF33BJ(öBJ(öBN
+žBR{BR{BV
+=BZ  BZ  B]õÃBaë
+BeáHBeáHBi×
+BmÌÍBmÌÍBqÂBužRBy®By®B}£×¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B"
+B"záB&záB*p€B*ffB.\)B2\)B6QìB6G®B:G®B>=qB>33BB(öBF(öBJ
+žBJ{BN{BR
+=BR  BV  BYõÃBYë
+B]áHBaáHBe×
+BeÌÍBiÌÍBmÂBmžRBq®Bu®By£×ByB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+B
+záB"záB"p€B&ffB*\)B*\)B.QìB2G®B6G®B6=qB:33B>(öB>(öBB
+žBF{BJ{BJ
+=BN  BR  BQõÃBUë
+BYáHBYáHB]×
+BaÌÍBeÌÍBeÂBižRBm®Bm®Bq£×BuByBy\B}
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+BzáBzáB
+p€B"ffB"\)B&\)B*QìB*G®B.G®B2=qB633B6(öB:(öB>
+žB>{BB{BF
+=BJ  BJ  BMõÃBQë
+BQáHBUáHBY×
+BYÌÍB]ÌÍBaÂBežRBe®Bi®Bm£×BmBqBu\By
+By
+B}zá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+BzáBzáBp€BffB
+\)B"\)B"QìB&G®B*G®B*=qB.33B2(öB6(öB6
+žB:{B>{B>
+=BB  BF  BIõÃBIë
+BMáHBQáHBQ×
+BUÌÍBYÌÍBYÂB]žRBa®Be®Be£×BiBmBm\Bq
+Bu
+ByzáByp€B}ff¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+
+BzáBzáBp€BffB\)B\)B
+QìB"G®B"G®B&=qB*33B*(öB.(öB2
+žB6{B6{B:
+=B>  B>  BAõÃBEë
+BIáHBIáHBM×
+BQÌÍBQÌÍBUÂBYžRBY®B]®Ba£×BeBeBi\Bm
+Bm
+BqzáBup€ByffByffB}\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+BzáB
+záBp€BffB\)B\)BQìBG®B
+G®B"=qB"33B&(öB*(öB*
+žB.{B2{B6
+=B6  B:  B=õÃB=ë
+BAáHBEáHBI×
+BIÌÍBMÌÍBQÂBQžRBU®BY®BY£×B]BaBe\Be
+Bi
+BmzáBmp€BqffBuffBy\)ByQìB}Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aý
+=BzáBzáBp€B
+ffB\)B\)BQìBG®BG®B=qB
+33B"(öB"(öB&
+žB*{B*{B.
+=B2  B6  B5õÃB9ë
+B=áHB=áHBA×
+BEÌÍBIÌÍBIÂBMžRBQ®BQ®BU£×BYBYB]\Ba
+Be
+BezáBip€BmffBmffBq\)BuQìByQìByG®B}=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aõ
+=AôõÃAüõÃBp€BffB\)B
+\)BQìBG®BG®B=qB33B(öB
+(öB"
+žB"{B&{B*
+=B*  B.  B1õÃB5ë
+B5áHB9áHB=×
+B=ÌÍBAÌÍBEÂBIžRBI®BM®BQ£×BQBUBY\BY
+B]
+BazáBep€BeffBiffBm\)BmQìBqQìBuG®By=qBy33B}33¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aå
+=AìõÃAôõÃAôáHAüÌÍB\)B\)BQìB
+G®BG®B=qB33B(öB(öB
+žB
+{B"{B"
+=B&  B*  B)õÃB-ë
+B1áHB5áHB5×
+B9ÌÍB=ÌÍB=ÂBAžRBE®BI®BI£×BMBQBQ\BU
+BY
+BYzáB]p€BaffBeffBe\)BiQìBmQìBmG®Bq=qBu33By33By(öB}
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÝ
+=AäõÃAäõÃAìáHAôÌÍAôžRAüžRBQìBG®BG®B
+=qB33B(öB(öB
+žB{B{B
+
+=B"  B"  B%õÃB)ë
+B)áHB-áHB1×
+B5ÌÍB5ÌÍB9ÂB=žRB=®BA®BE£×BIBIBM\BQ
+BQ
+BUzáBYp€BYffB]ffBa\)BeQìBeQìBiG®Bm=qBm33Bq33Bu(öBy
+žBy
+žB}{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÍ
+=AÔõÃAÜõÃAäáHAäÌÍAìžRAôžRAô£×Aü\BG®B=qB33B
+(öB(öB
+žB{B{B
+=B  B
+  B!õÃB!ë
+B%áHB)áHB)×
+B-ÌÍB1ÌÍB5ÂB5žRB9®B=®B=£×BABEBI\BI
+BM
+BQzáBQp€BUffBYffBY\)B]QìBaQìBeG®Be=qBi33Bm33Bm(öBq
+žBu
+žBy{By
+=B}  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÅ
+=AÌõÃAÌõÃAÔáHAÜÌÍAäžRAäžRAì£×Aô\Aô\AüzáB33B(öB(öB
+
+žB{B{B
+=B  B  BõÃB
+ë
+B!áHB!áHB%×
+B)ÌÍB)ÌÍB-ÂB1žRB5®B5®B9£×B=B=BA\BE
+BI
+BIzáBMp€BQffBQffBU\)BYQìBYQìB]G®Ba=qBe33Be33Bi(öBm
+žBm
+žBq{Bu
+=By  By  B|õÃ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aœ
+=AŒõÃAÄõÃAÌáHAÌÌÍAÔžRAÜžRAä£×Aä\Aì\AôzáAôffAüQìB(öB
+žB{B
+{B
+=B  B  BõÃBë
+BáHB
+áHB!×
+B!ÌÍB%ÌÍB)ÂB)žRB-®B1®B5£×B5B9B=\B=
+BA
+BEzáBIp€BIffBMffBQ\)BQQìBUQìBYG®BY=qB]33Ba33Be(öBe
+žBi
+žBm{Bm
+=Bq  Bu  BxõÃBxë
+B|ë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A­
+=AŽõÃAŒõÃAŒáHAÄÌÍAÌžRAÌžRAÔ£×AÜ\Aä\AäzáAìffAôQìAôQìAü=qB{B{B
+=B
+  B  B
+õÃBë
+BáHBáHB×
+B
+ÌÍB!ÌÍB!ÂB%žRB)®B)®B-£×B1B5B5\B9
+B=
+B=záBAp€BEffBIffBI\)BMQìBQQìBQG®BU=qBY33BY33B](öBa
+žBe
+žBe{Bi
+=Bm  Bm  BpõÃBtë
+Bxë
+BxáHB|×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¥
+=A¬õÃA¬õÃAŽáHAŒÌÍAŒžRAÄžRAÌ£×AÌ\AÔ\AÜzáAäffAäQìAìQìAô=qAô(öAü(öB
+=B  B  B	õÃB
+ë
+B
+áHBáHB×
+BÌÍBÌÍB
+ÂB!žRB!®B%®B)£×B)B-B1\B5
+B5
+B9záB=p€B=ffBAffBE\)BIQìBIQìBMG®BQ=qBQ33BU33BY(öBY
+žB]
+žBa{Be
+=Be  Bi  BlõÃBlë
+Bpë
+BtáHBx×
+Bx×
+B|ÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+=AõÃA€õÃA¬áHA¬ÌÍAŽžRAŒžRAŒ£×AÄ\AÌ\AÌzáAÔffAÜQìAäQìAä=qAì(öAô(öAô{Aü  B  BõÃBë
+B	áHB
+áHB
+×
+BÌÍBÌÍBÂBžRB
+®B!®B!£×B%B)B)\B-
+B1
+B5záB5p€B9ffB=ffB=\)BAQìBEQìBIG®BI=qBM33BQ33BQ(öBU
+žBY
+žBY{B]
+=Ba  Be  BdõÃBhë
+Blë
+BláHBp×
+Bt×
+BxÌÍBxÂB|žR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+=AõÃAõÃAáHA€ÌÍA¬žRA¬žRAŽ£×AŒ\AŒ\AÄzáAÌffAÌQìAÔQìAÜ=qAä(öAä(öAì{Aô  Aô  Aûë
+Bë
+BáHBáHB	×
+B
+ÌÍB
+ÌÍBÂBžRB®B®B
+£×B!B!B%\B)
+B)
+B-záB1p€B5ffB5ffB9\)B=QìB=QìBAG®BE=qBI33BI33BM(öBQ
+žBQ
+žBU{BY
+=BY  B]  B`õÃBdë
+Bdë
+BháHBl×
+Bl×
+BpÌÍBtÂBxžRBxžRB|®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+
+=AõÃAõÃAáHAÌÍAžRA€žRA¬£×A¬\AŽ\AŒzáAŒffAÄQìAÌQìAÌ=qAÔ(öAÜ(öAä{Aä  Aì  Aóë
+Aó×
+AûÂBáHB×
+BÌÍB	ÌÍB
+ÂB
+žRB®B®B£×BB
+B!\B!
+B%
+B)záB)p€B-ffB1ffB5\)B5QìB9QìB=G®B==qBA33BE33BI(öBI
+žBM
+žBQ{BQ
+=BU  BY  BXõÃB\ë
+B`ë
+BdáHBd×
+Bh×
+BlÌÍBlÂBpžRBtžRBx®Bx£×B|£×¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aj{Ayë
+AõÃAáHAÌÍAžRAžRA£×A€\A¬\A¬záAŽffAŒQìAŒQìAÄ=qAÌ(öAÌ(öAÔ{AÜ  Aä  Aãë
+Aë×
+AóÂAóÂAû®BÌÍBÌÍBÂB	žRB
+®B
+®B£×BBB\B
+
+B!
+B!záB%p€B)ffB)ffB-\)B1QìB5QìB5G®B9=qB=33B=33BA(öBE
+žBI
+žBI{BM
+=BQ  BQ  BTõÃBXë
+BXë
+B\áHB`×
+Bd×
+BdÌÍBhÂBlžRBlžRBp®Bt£×Bx£×BxB|\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AZ{AYë
+Aië
+AyÂAÌÍAžRAžRA£×A\A\A€záA¬ffA¬QìAŽQìAŒ=qAŒ(öAÄ(öAÌ{AÌ  AÔ  AÛë
+Aã×
+AãÂAëÂAó®AóAûBÂBžRB®B	®B
+£×B
+BB\B
+B
+B
+záB!p€B!ffB%ffB)\)B)QìB-QìB1G®B5=qB533B933B=(öB=
+žBA
+žBE{BI
+=BI  BM  BPõÃBPë
+BTë
+BXáHBX×
+B\×
+B`ÌÍBdÂBdžRBhžRBl®Bl£×Bp£×BtBx\Bx
+B|
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A:{AIë
+AYë
+AYÂAiAyp€AžRA£×A\A\AzáAffA€QìA¬QìA¬=qAŽ(öAŒ(öAŒ{AÄ  AÌ  AËë
+AÓ×
+AÛÂAãÂAã®AëAóAó
+Aûp€B®B®B£×B	B
+B
+\B
+B
+BzáBp€B
+ffB!ffB!\)B%QìB)QìB)G®B-=qB133B533B5(öB9
+žB=
+žB={BA
+=BE  BI  BHõÃBLë
+BPë
+BPáHBT×
+BX×
+BXÌÍB\ÂB`žRBdžRBd®Bh£×Bl£×BlBp\Bt
+Bx
+BxzáB|p€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A*{A9ë
+A9ë
+AIÂAYAYp€Aip€AyG®A\A\AzáAffAQìAQìA€=qA¬(öA¬(öAŽ{AŒ  AŒ  AÃë
+AË×
+AËÂAÓÂAÛ®AãAãAë
+Aóp€Aó\)Aû\)B£×BBB	\B
+
+B
+
+BzáBp€BffBffB
+\)B!QìB!QìB%G®B)=qB)33B-33B1(öB5
+žB5
+žB9{B=
+=B=  BA  BDõÃBHë
+BHë
+BLáHBP×
+BP×
+BTÌÍBXÂBXžRB\žRB`®Bd£×Bd£×BhBl\Bl
+Bp
+BtzáBxp€Bxp€B|ff¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A{Aë
+A)ë
+A9ÂA9AIp€AYp€AYG®Ai
+žAy
+žAzáAffAQìAQìA=qA(öA€(öA¬{A¬  AŽ  A»ë
+A»×
+AÃÂAËÂAË®AÓAÛAã
+Aãp€Aë\)Aó\)AóG®Aû33BB\B
+B	
+B
+záB
+p€BffBffB\)BQìB
+QìB!G®B!=qB%33B)33B)(öB-
+žB1
+žB5{B5
+=B9  B=  B<õÃB@ë
+BDë
+BHáHBH×
+BL×
+BPÌÍBPÂBTžRBXžRBX®B\£×B`£×BdBd\Bh
+Bl
+BlzáBpp€Btp€BxffBx\)B|\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ô(öA	ë
+Aë
+AÂA)A9p€A9p€AIG®AY
+žAY
+žAhõÃAxÌÍAQìAQìA=qA(öA(öA{A€  A¬  A«ë
+A³×
+A»ÂA»ÂAÃ®AËAËAÓ
+AÛp€Aã\)Aã\)AëG®Aó33Aó33Aû
+žB
+B
+BzáB	p€B
+ffB
+ffB\)BQìBQìBG®B
+=qB!33B!33B%(öB)
+žB)
+žB-{B1
+=B5  B5  B8õÃB<ë
+B<ë
+B@áHBD×
+BH×
+BHÌÍBLÂBPžRBPžRBT®BX£×BX£×B\B`\Bd
+Bd
+BhzáBlp€Blp€BpffBt\)Bx\)BxQìB|G®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ô(ö@Ó×
+@ó×
+A	ÂAAp€A)p€A9G®A9
+žAI
+žAXõÃAXÌÍAh£×Ax£×A=qA(öA(öA{A  A  A£ë
+A«×
+A«ÂA³ÂA»®A»AÃAË
+AËp€AÓ\)AÛ\)AãG®Aã33Aë33Aó
+žAó
+=Aû
+=BzáBp€BffB	ffB
+\)B
+QìBQìBG®B=qB33B
+33B!(öB!
+žB%
+žB){B)
+=B-  B1  B4õÃB4ë
+B8ë
+B<áHB<×
+B@×
+BDÌÍBHÂBHžRBLžRBP®BP£×BT£×BXBX\B\
+B`
+BdzáBdp€Bhp€BlffBl\)Bp\)BtQìBxG®Bx=qB|=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @(ö@³×
+@Ó×
+@Ó
+@ó33A	p€Ap€AG®A)
+žA9
+žA8õÃAHÌÍAX£×AX£×AhzáAxQìA(öA{A  A  Aë
+A×
+A£ÂA«ÂA«®A³A»A»
+AÃp€AË\)AË\)AÓG®AÛ33Aã33Aã
+žAë
+=Aó
+=AòõÃAúáHBffBffB\)B	QìB
+QìB
+G®B=qB33B33B(öB
+
+žB!
+žB!{B%
+=B)  B)  B,õÃB0ë
+B4ë
+B4áHB8×
+B<×
+B<ÌÍB@ÂBDžRBHžRBH®BL£×BP£×BPBT\BX
+BX
+B\záB`p€Bdp€BdffBh\)Bl\)BlQìBpG®Bt=qBx=qBx33B|(ö¿  ¿  ¿  ¿  ¿  ¿  @hQì@×
+@×
+@³
+@Ó33@ÒáH@òáHA	G®A
+žA
+žA(õÃA8ÌÍA8£×AH£×AXzáAXQìAhQìAx(öA  A  Aë
+A×
+AÂAÂA£®A«A«A³
+A»p€A»\)AÃ\)AËG®AË33AÓ33AÛ
+žAã
+=Aã
+=AêõÃAòáHAòÌÍAúÌÍB\)BQìBQìB	G®B
+=qB
+33B33B(öB
+žB
+žB
+{B!
+=B!  B%  B(õÃB(ë
+B,ë
+B0áHB4×
+B4×
+B8ÌÍB<ÂB<žRB@žRBD®BH£×BH£×BLBP\BP
+BT
+BXzáBXp€B\p€B`ffBd\)Bd\)BhQìBlG®Bl=qBp=qBt33Bx(öBx(öB|
+ž¿  ¿  ¿  ¿  ?Ð£×@'®@g®@
+@33@²áH@ÒáH@Ò\@ò=qA	
+žAõÃAÌÍA(£×A8£×A8záAHQìAXQìAX(öAh  Ax  Aë
+A×
+AÂAÂA®AA£A«
+A«p€A³\)A»\)A»G®AÃ33AË33AË
+žAÓ
+=AÛ
+=AâõÃAâáHAêÌÍAòÌÍAòžRAú£×BQìBG®B=qB	33B
+33B
+(öB
+žB
+žB{B
+=B
+  B!  B õÃB$ë
+B(ë
+B(áHB,×
+B0×
+B4ÌÍB4ÂB8žRB<žRB<®B@£×BD£×BHBH\BL
+BP
+BPzáBTp€BXp€BXffB\\)B`\)BdQìBdG®Bh=qBl=qBl33Bp(öBt(öBx
+žBx{B|
+=¿  ¿  ?!G®?Ï\)?Ï\)@'
+>@fff@áH@áH@²\@Ò=q@Ò=q@ñë
+AÌÍA£×A£×A(záA8QìA8QìAH(öAX  AX  Ag×
+Aw®AÂAÂA®AAA
+A£p€A«\)A«\)A³G®A»33A»33AÃ
+žAË
+=AË
+=AÒõÃAÚáHAâÌÍAâÌÍAêžRAò£×Aò£×Aú\B=qB33B33B	(öB
+
+žB
+
+žB{B
+=B  B  B
+õÃB ë
+B ë
+B$áHB(×
+B(×
+B,ÌÍB0ÂB4žRB4žRB8®B<£×B<£×B@BD\BH
+BH
+BLzáBPp€BPp€BTffBX\)BX\)B\QìB`G®Bd=qBd=qBh33Bl(öBl(öBp
+žBt{Bx
+=Bx
+=B|  ¿  ¿  ?
+žR?Î{?ÌÌÍ@%Â@eÂ@\@=q@²=q@Ñë
+@Ñ@ñG®A£×AzáAQìA(QìA8(öA8  AH  AW×
+AW®Ag
+Aw
+A®AAA
+Ap€A\)A£\)A«G®A«33A³33A»
+žA»
+=AÃ
+=AÊõÃAÊáHAÒÌÍAÚÌÍAâžRAâ£×Aê£×Aò\AòzáAúffB33B(öB
+žB	
+žB
+{B
+=B  B  BõÃBë
+B
+ë
+B áHB ×
+B$×
+B(ÌÍB(ÂB,žRB0žRB4®B4£×B8£×B<B<\B@
+BD
+BHzáBHp€BLp€BPffBP\)BT\)BXQìBXG®B\=qB`=qBd33Bd(öBh(öBl
+žBl{Bp
+=Bt
+=Bx  ¿  ¿  ¿  ¿  ??Ë
+
+?Ë
+
+@%
+ž@dzá@=q@ë
+@±@ÑG®@ÑG®@ðõÂAQìAQìA(öA(  A8  A7×
+AG®AW
+AW
+Ag\)Aw33AA
+Ap€A\)A\)AG®A£33A«33A«
+žA³
+=A»
+=AºõÃAÂáHAÊÌÍAÊÌÍAÒžRAÚ£×Aâ£×Aâ\AêzáAòffAòffAúQìB
+žB
+žB{B	
+=B
+  B
+  BõÃBë
+Bë
+BáHB
+×
+B ×
+B ÌÍB$ÂB(žRB(žRB,®B0£×B4£×B4B8\B<
+B<
+B@záBDp€BHp€BHffBL\)BP\)BPQìBTG®BX=qBX=qB\33B`(öBd(öBd
+žBh{Bl
+=Bl
+=Bp  ¿  ¿  ¿  ¿  ¿  ¿  ?
+=?Ê=p?ÈõÂ@$zá@c×
+@@G®@±G®@ÐõÂ@Ð£×@ð£×A(öA  A  A'×
+A7®A7
+AG
+AW\)AW33Ag33Aw
+=Ap€A\)A\)AG®A33A33A£
+žA«
+=A«
+=A²õÃAºáHAºÌÍAÂÌÍAÊžRAÊ£×AÒ£×AÚ\AâzáAâffAêffAòQìAò=qAú=qB{B
+=B  B	  B
+õÃB
+ë
+Bë
+BáHB×
+B×
+B
+ÌÍB ÂB žRB$žRB(®B(£×B,£×B0B4\B4
+B8
+B<záB<p€B@p€BDffBH\)BH\)BLQìBPG®BP=qBT=qBX33BX(öB\(öB`
+žBd{Bd
+=Bh
+=Bl  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?ë
+?ÈõÂ?Ç®@#33@b\@G®@õÂ@°£×@Ð£×@ÐQì@ð  A  A×
+A®A'
+A7
+A7\)AG33AW33AW
+=AfáHAvžRA\)AG®A33A33A
+žA
+=A£
+=AªõÃAªáHA²ÌÍAºÌÍAºžRAÂ£×AÊ£×AÊ\AÒzáAÚffAâffAâQìAê=qAò=qAò(öAú{B  B  BõÃBë
+B
+ë
+B
+áHB×
+B×
+BÌÍBÂB
+žRB žRB ®B$£×B(£×B(B,\B0
+B4
+B4záB8p€B<p€B<ffB@\)BD\)BHQìBHG®BL=qBP=qBP33BT(öBX(öBX
+žB\{B`
+=Bd
+=Bd  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?\)?Æff?Å
+ž@"\@aë
+@£×@£×@°Qì@Ð  @Ð  @ï®A®A
+A
+A'\)A733A733AG
+=AVáHAVžRAfžRAv\A33A33A
+žA
+=A
+=AõÃA¢áHAªÌÍAªÌÍA²žRAº£×Aº£×AÂ\AÊzáAÊffAÒffAÚQìAâ=qAâ=qAê(öAò{Aò  Aú  B õÃBë
+Bë
+BáHB
+×
+B
+×
+BÌÍBÂBžRBžRB
+®B £×B £×B$B(\B(
+B,
+B0záB4p€B4p€B8ffB<\)B<\)B@QìBDG®BH=qBH=qBL33BP(öBP(öBT
+žBX{BX
+=B\
+=B`  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+=q?Å
+ž?Ã×
+@!G®@aG®@Qì@  @°  @Ï®@Ï\)@ï
+=A
+A\)A33A'33A7
+=A6áHAFžRAVžRAV\AfffAvffA
+žA
+=A
+=AõÃAáHAÌÍA¢ÌÍAªžRAª£×A²£×Aº\AºzáAÂffAÊffAÊQìAÒ=qAÚ=qAâ(öAâ{Aê  Aò  Añë
+Aù×
+B ë
+BáHB×
+B×
+B
+ÌÍB
+ÂBžRBžRB®B£×B
+£×B B \B$
+B(
+B(záB,p€B0p€B4ffB4\)B8\)B<QìB<G®B@=qBD=qBH33BH(öBL(öBP
+žBP{BT
+=BX
+=BX  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?®?Â\?Â\@ £×@`  @  @®@¯\)@Ï
+=@Ï
+=@îžRA33A33A
+=A&áHA6žRA6žRAF\AVffAVffAf=qAv{A
+=AõÃAáHAÌÍAÌÍAžRA¢£×Aª£×Aª\A²záAºffAºffAÂQìAÊ=qAÊ=qAÒ(öAÚ{Aâ  Aâ  Aéë
+Añ×
+Añ×
+AùÂB ×
+B×
+BÌÍBÂB
+žRB
+žRB®B£×B£×BB
+\B 
+B 
+B$záB(p€B(p€B,ffB0\)B4\)B4QìB8G®B<=qB<=qB@33BD(öBH(öBH
+žBL{BP
+=BP
+=BT  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+ž?ÁG®?À  @   @_\)@\)@
+=@¯
+=@ÎžR@Îff@îffA
+=AáHAžRA&žRA6\A6ffAFffAV=qAV{Af{Auë
+AáHAÌÍAÌÍAžRA£×A£×A¢\AªzáAªffA²ffAºQìAº=qAÂ=qAÊ(öAÊ{AÒ  AÚ  Aáë
+Aá×
+Aé×
+AñÂAñ®Aù®B ÌÍBÂBžRBžRB
+®B
+£×B£×BB\B
+B
+
+B záB p€B$p€B(ffB(\)B,\)B0QìB4G®B4=qB8=qB<33B<(öB@(öBD
+žBH{BH
+=BL
+=BP  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?   ?À  ?ŸžR@
+žR@^{@
+=@žR@®ff@Îff@Î{@íÂAžRAžRA\A&ffA6ffA6=qAF{AV{AUë
+AeÂAuAÌÍAžRA£×A£×A\AzáA¢ffAªffAªQìA²=qAº=qAº(öAÂ{AÊ  AÊ  AÑë
+AÙ×
+Aá×
+AáÂAé®Añ®AñAù
+B žRBžRB®B£×B
+£×B
+B\B
+B
+BzáB
+p€B p€B ffB$\)B(\)B(QìB,G®B0=qB4=qB433B8(öB<(öB<
+žB@{BD
+=BH
+=BH  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >úáH?œp€?Œ(ö@
+{@]p€@ff@ff@®{@ÍÂ@Íp€@íp€A\AffAffA&=qA6{A6{AEë
+AUÂAUAeAup€A£×A£×A\AzáAffAffA¢QìAª=qAª=qA²(öAº{Aº  AÂ  AÉë
+AÉ×
+AÑ×
+AÙÂAá®Aá®AéAñ
+Añp€Aùp€B ®B£×B£×BB
+\B
+
+B
+BzáBp€Bp€B
+ffB \)B \)B$QìB(G®B(=qB,=qB033B4(öB4(öB8
+žB<{B<
+=B@
+=BD  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ð£×?Œ(ö?ºáH@
+ÌÍ@\ÌÍ@{@Â@­p€@Íp€@Í
+ž@ìÌÍAffA=qA{A&{A5ë
+A5ÂAEAUAUp€AeG®AuG®A\AzáAffAffAQìA=qA¢=qAª(öAª{A²  Aº  A¹ë
+AÁ×
+AÉ×
+AÉÂAÑ®AÙ®AáAá
+Aép€Añp€Añ\)AùG®B £×BB\B
+B
+
+B
+záBp€Bp€BffB\)B
+\)B QìB G®B$=qB(=qB(33B,(öB0(öB4
+žB4{B8
+=B<
+=B<  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ë
+?¹?¹@
+(ö@[
+@p€@p€@­
+ž@ÌÌÍ@ÌÌÍ@ìzáA{A{Aë
+A%ÂA5A5AEp€AUG®AUG®Ae
+žAtõÃAffAffAQìA=qA=qA(öA¢{Aª  Aª  A±ë
+A¹×
+A¹×
+AÁÂAÉ®AÉ®AÑAÙ
+Aáp€Aáp€Aé\)AñG®AñG®Aù33B \B
+B
+BzáB
+p€B
+p€BffB\)B\)BQìB
+G®B =qB =qB$33B((öB((öB,
+žB0{B4
+=B4
+=B8  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >æff?žQì?·
+>@áH@ZáH@
+ž@ÌÍ@¬ÌÍ@Ìzá@Ì(ö@ì(öAë
+AÂAA%A5p€A5G®AEG®AU
+žATõÃAdÌÍAtÌÍAQìA=qA=qA(öA{A  A¢  A©ë
+A©×
+A±×
+A¹ÂA¹®AÁ®AÉAÉ
+AÑp€AÙp€Aá\)AáG®AéG®Añ33Añ
+žAù
+=B 
+BzáBp€Bp€B
+ffB
+\)B\)BQìBG®B=qB
+=qB 33B (öB$(öB(
+žB({B,
+=B0
+=B4  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ü(ö?µÂ?µÂ@=q@Y@ÌÍ@zá@¬(ö@Ì(ö@Ë×
+@ë
+AAAp€A%G®A5G®A5
+žADõÃATÌÍATÌÍAd£×AtzáA=qA(öA{A  A  Aë
+A¡×
+A©×
+A©ÂA±®A¹®A¹AÁ
+AÉp€AÉp€AÑ\)AÙG®AáG®Aá33Aé
+žAñ
+=Añ
+=AøõÃB p€Bp€BffB\)B
+\)B
+QìBG®B=qB=qB33B
+(öB (öB 
+žB${B(
+=B(
+=B,  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >×
+=?Žzá?³33@@XõÂ@(ö@(ö@«×
+@Ë
+@Ë33@ë33Ap€AG®AG®A%
+žA4õÃA4ÌÍADÌÍAT£×ATzáAdzáAtQìA{A  A  Aë
+A×
+A×
+A¡ÂA©®A©®A±A¹
+A¹p€AÁp€AÉ\)AÉG®AÑG®AÙ33Aá
+žAá
+=Aé
+=AðõÃAðáHAøáHB ffB\)B\)BQìB
+G®B
+=qB=qB33B(öB(öB
+
+žB {B 
+=B$
+=B(  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ÌÌÍ?³33?±ë
+@Qì@XQì@×
+@
+@«33@Ë33@ÊáH@ê\AG®A
+žAõÃA$ÌÍA4ÌÍA4£×ADzáATzáATQìAd(öAt  A  Aë
+A×
+A×
+AÂA®A¡®A©A©
+A±p€A¹p€A¹\)AÁG®AÉG®AÉ33AÑ
+žAÙ
+=Aá
+=AàõÃAèáHAðáHAðÌÍAøžRB \)BQìBG®B=qB
+=qB
+33B(öB(öB
+žB{B
+
+=B 
+=B   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ç®?°£×?°£×@®@W
+>@33@33@ªáH@Ê\@Ê\@ê=qAõÃAÌÍAÌÍA$£×A4záA4záADQìAT(öAT  Ad  As×
+A×
+A×
+AÂA®A®AA¡
+A©p€A©p€A±\)A¹G®A¹G®AÁ33AÉ
+žAÉ
+=AÑ
+=AØõÃAàáHAàáHAèÌÍAðžRAðžRAø£×B G®B=qB=qB33B
+(öB
+(öB
+žB{B
+=B
+=B
+  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Â\?¯\)?®{@ff@Vff@áH@\@ª\@Ê=q@Éë
+@éAÌÍA£×AzáA$záA4QìA4(öAD  AT  AS×
+Ac®As®AÂA®A®AA
+Ap€A¡p€A©\)A©G®A±G®A¹33A¹
+žAÁ
+=AÉ
+=AÈõÃAÐáHAØáHAàÌÍAàžRAèžRAð£×Að\AøzáB =qB33B(öB(öB
+
+žB
+{B
+=B
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >žQì?¬ÌÍ?¬ÌÍ@Â@U
+ž@\@=q@©ë
+@É@É@éG®AzáAzáAQìA$(öA4  A4  AC×
+AS®AS®Ac
+As\)A®AA
+Ap€Ap€A\)A¡G®A©G®A©33A±
+žA¹
+=A¹
+=AÀõÃAÈáHAÈáHAÐÌÍAØžRAàžRAà£×Aè\AðzáAðzáAøffB (öB(öB
+žB{B
+
+=B
+
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >³33?«
+?ª=q@
+ž@Tzá@ë
+@@©@ÉG®@ÈõÃ@èõÃAQìA(öA  A$  A3×
+A3®AC®AS
+AS\)Ac\)As33A
+Ap€Ap€A\)AG®AG®A¡33A©
+žA©
+=A±
+=AžõÃAžáHAÀáHAÈÌÍAÈžRAÐžRAØ£×Aà\AàzáAèzáAðffAðQìAøQìB 
+žB{B
+=B
+=B
+  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >šõÃ?ª=q?šõÂ@×
+@S33@@G®@šõÃ@ÈõÃ@È£×@èQìA  A  A×
+A#®A3®A3
+AC\)AS\)AS33Ac
+=AráHAp€A\)AG®AG®A33A
+žA¡
+=A©
+=AšõÃA°áHAžáHAžÌÍAÀžRAÈžRAÈ£×AÐ\AØzáAàzáAàffAèQìAðQìAð=qAø(öB 
+=B
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >£×
+?§®?Šff@33@R\@õÃ@õÃ@š£×@ÈQì@È  @è  A×
+A®A®A#
+A3\)A3\)AC33AS
+=ARáHAbáHAržRAG®AG®A33A
+žA
+=A
+=A õÃAšáHAšáHA°ÌÍAžžRAžžRAÀ£×AÈ\AÈzáAÐzáAØffAàQìAàQìAè=qAð(öAð{Aø{B   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >?Šff?¥
+ž@ë
+@Që
+@£×@Qì@š  @È  @Ç®@ç\)A®A
+A\)A#\)A333A3
+=ABáHARáHARžRAb\Ar\A33A
+žA
+=A
+=AõÃAáHA áHAšÌÍAšžRA°žRAž£×Až\AÀzáAÈzáAÈffAÐQìAØQìAà=qAà(öAè{Að{Að  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >zá?£×
+?£×
+@G®@P£×@  @  @§®@Ç\)@Ç\)@ç
+=A\)A\)A33A#
+=A2áHA2áHABžRAR\AR\AbffAr=qA
+=A
+=AõÃAáHAáHAÌÍA žRAšžRAš£×A°\AžzáAžzáAÀffAÈQìAÈQìAÐ=qAØ(öAà{Aà{Aè  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >\)?¢\?¡G®@  @P  @®@\)@§\)@Ç
+=@ÆžR@æžRA33A
+=AáHA"áHA2žRA2\AB\ARffAR=qAb{Ar{AõÃAáHAáHAÌÍAžRAžRA £×Aš\AšzáA°záAžffAžQìAÀQìAÈ=qAÈ(öAÐ{AØ{Aà  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >
+
+ž?   ?   @\)@NžR@\)@
+=@ŠžR@ÆžR@Æff@æ{AáHAáHAžRA"\A2\A2ffAB=qAR{AR{Aaë
+AqÂAáHAÌÍAžRAžRA£×A\A záAšzáAšffA°QìAžQìAž=qAÀ(öAÈ{AÈ{AÐ  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >  ?žR?p€@žR@N{@žR@žR@Šff@Æ{@ÅÂ@åÂAžRA\A\A"ffA2=qA2{AB{AQë
+AQÂAaÂAqAžRAžRA£×A\AzáAzáA ffAšQìAšQìA°=qAž(öAž{AÀ{AÈ  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >k
+?p€?(ö@
+p€@Mp€@ff@{@¥Â@ÅÂ@Åp€@å
+žA\AffA=qA"{A2{A1ë
+AAÂAQÂAQAap€Aqp€A£×A\AzáAzáAffAQìA QìAš=qAš(öA°{Až{Až  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >aG®?áH?áH@
+ÌÍ@L(ö@
+Â@
+Â@¥p€@Å
+ž@Å
+ž@äÌÍA=qA{A{A!ë
+A1ÂA1ÂAAAQp€AQp€AaG®Aq
+žAzáAzáAffAQìAQìA=qA (öAš{Aš{A°  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >W
+=??Qì@
+
+@K
+@
+p€@
+
+ž@¥
+ž@ÄÌÍ@Äzá@ä(öA{Aë
+AÂA!ÂA1A1p€AAp€AQG®AQ
+žA`õÃApõÃAffAQìAQìA=qA(öA{A {Aš  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >B\?
+>?
+>@
+áH@J=q@
+
+ž@ÌÍ@€zá@Ä(ö@Ä(ö@ã×
+AÂAÂAA!p€A1p€A1G®AA
+žAPõÃAPõÃA`ÌÍAp£×AQìA=qA(öA{A{A  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >8Qì?Â?zá@
+=q@I@zá@(ö@€(ö@Ã×
+@Ã
+@ã
+AAp€Ap€A!G®A1
+žA0õÃA@õÃAPÌÍAP£×A`£×ApzáA(öA{A{A  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >#×
+?zá?33@õÃ@HQì@(ö@×
+@£
+@Ã
+@Ã33@âáHAp€AG®A
+žA õÃA0õÃA0ÌÍA@£×AP£×APzáA`QìAp(öA{A  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >?ë
+?£×@Qì@G®@
+@
+@£33@ÂáH@ÂáH@â\A
+žAõÃAõÃA ÌÍA0£×A0£×A@záAPQìAP(öA`(öAp  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >
+ž?£×?\)@
+=@G
+=@33@áH@¢áH@Â\@Â=q@áë
+A õÃAÌÍA£×A £×A0záA0QìA@(öAP(öAP  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =õÂ?{?{@ff@EÂ@áH@\@¢=q@Áë
+@Áë
+@áA £×A£×AzáA QìA0(öA0(öA@  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =áG®?ÌÍ?
+@Â@E
+ž@=q@ë
+@¡ë
+@Á@ÁG®@áG®A záAQìA(öA (öA0  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =žQì?
+?=q@zá@C×
+@ë
+@@¡G®@ÁG®@ÀõÃ@à£×A (öA(öA  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =£×
+?õÃ?®@×
+@C33@G®@G®@ õÃ@À£×@ÀQì@àQìA   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =uÂ?®?ff@\@B\@õÃ@£×@ Qì@ÀQì@À  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =LÌÍ?
+
+ž?
+
+ž@ë
+@AG®@Qì@Qì@   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =#×
+?×
+?\@ £×@@£×@  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  <£×
+?G®?G®@   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  <#×
+?  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ?!G®?Ð£×@(Qì@hQì@(ö@Ž(ö@Ô(ö@ô(öA
+{A{A*{A:{AJ{AZ{Aj{Az{A
+
+=A
+=A
+=A
+=A¥
+=A­
+=Aµ
+=Aœ
+=AÅ
+=AÍ
+=AÕ
+=AÝ
+=Aå
+=Aí
+=Aõ
+=Aý
+=B
+B
+B
+
+B
+B
+B
+B
+B
+
+B"
+B&
+B*
+B.
+B2
+B6
+B:
+B>
+BB
+BF
+BJ
+BN
+BR
+BV
+BZ
+B^
+Bb
+Bf
+Bj
+Bn
+Br
+Bv
+Bz
+B~
+?
+žR?Ï\)@'®@g®@×
+@³×
+@Ó×
+@ó×
+A	ë
+Aë
+A)ë
+A9ë
+AIë
+AYë
+Aië
+Ayë
+AõÃAõÃAõÃAõÃA€õÃA¬õÃAŽõÃAŒõÃAÄõÃAÌõÃAÔõÃAÜõÃAäõÃAìõÃAôõÃAüõÃBzáBzáB
+záBzáBzáBzáBzáB
+záB"záB&záB*záB.záB2záB6záB:záB>záBBzáBFzáBJzáBNzáBRzáBVzáBZzáB^záBbzáBfzáBjzáBnzáBrzáBvzáBzzáB~zá?
+(ö?Î{@'
+>@g
+>@
+@³
+@Ó
+@ó
+A	ÂAÂA)ÂA9ÂAIÂAYÂAiÂAyÂAáHAáHAáHAáHA€áHA¬áHAŽáHAŒáHAÄáHAÌáHAÔáHAÜáHAäáHAìáHAôáHAüáHBp€Bp€B
+p€Bp€Bp€Bp€Bp€B
+p€B"p€B&p€B*p€B.p€B2p€B6p€B:p€B>p€BBp€BFp€BJp€BNp€BRp€BVp€BZp€B^p€Bbp€Bfp€Bjp€Bnp€Brp€Bvp€Bzp€B~p€??ÌÌÍ@&ff@fff@33@³33@Ó33@ó33A	AA)A9AIAYAiAyAÌÍAÌÍAÌÍAÌÍA€ÌÍA¬ÌÍAŽÌÍAŒÌÍAÄÌÍAÌÌÍAÔÌÍAÜÌÍAäÌÍAìÌÍAôÌÍAüÌÍBffBffB
+ffBffBffBffBffB
+ffB"ffB&ffB*ffB.ffB2ffB6ffB:ffB>ffBBffBFffBJffBNffBRffBVffBZffB^ffBbffBfffBjffBnffBrffBvffBzffB~ff?
+=?Ë
+
+@%Â@eÂ@áH@²áH@ÒáH@òáHA	p€Ap€A)p€A9p€AIp€AYp€Aip€Ayp€AžRAžRAžRAžRA€žRA¬žRAŽžRAŒžRAÄžRAÌžRAÔžRAÜžRAäžRAìžRAôžRAüžRB\)B\)B
+\)B\)B\)B\)B\)B
+\)B"\)B&\)B*\)B.\)B2\)B6\)B:\)B>\)BB\)BF\)BJ\)BN\)BR\)BV\)BZ\)B^\)Bb\)Bf\)Bj\)Bn\)Br\)Bv\)Bz\)B~\)?zá?Ê=p@%
+ž@e
+ž@\@²\@Ò\@ò\A	G®AG®A)G®A9G®AIG®AYG®AiG®AyG®A£×A£×A£×A£×A€£×A¬£×AŽ£×AŒ£×AÄ£×AÌ£×AÔ£×AÜ£×Aä£×Aì£×Aô£×Aü£×BQìBQìB
+QìBQìBQìBQìBQìB
+QìB"QìB&QìB*QìB.QìB2QìB6QìB:QìB>QìBBQìBFQìBJQìBNQìBRQìBVQìBZQìB^QìBbQìBfQìBjQìBnQìBrQìBvQìBzQìB~Qì?ë
+?ÈõÂ@$zá@dzá@=q@²=q@Ò=q@ò=qA	
+žA
+žA)
+žA9
+žAI
+žAY
+žAi
+žAy
+žA\A\A\A\A€\A¬\AŽ\AŒ\AÄ\AÌ\AÔ\AÜ\Aä\Aì\Aô\Aü\BG®BG®B
+G®BG®BG®BG®BG®B
+G®B"G®B&G®B*G®B.G®B2G®B6G®B:G®B>G®BBG®BFG®BJG®BNG®BRG®BVG®BZG®B^G®BbG®BfG®BjG®BnG®BrG®BvG®BzG®B~G®?\)?Ç®@#×
+@c×
+@ë
+@±ë
+@Ñë
+@ñë
+AõÃAõÃA(õÃA8õÃAHõÃAXõÃAhõÃAxõÃAzáAzáAzáAzáA€záA¬záAŽzáAŒzáAÄzáAÌzáAÔzáAÜzáAäzáAìzáAôzáAüzáB=qB=qB
+=qB=qB=qB=qB=qB
+=qB"=qB&=qB*=qB.=qB2=qB6=qB:=qB>=qBB=qBF=qBJ=qBN=qBR=qBV=qBZ=qB^=qBb=qBf=qBj=qBn=qBr=qBv=qBz=qB~=q?
+ÌÍ?Æff@#33@c33@@±@Ñ@ñAÌÍAÌÍA(ÌÍA8ÌÍAHÌÍAXÌÍAhÌÍAxÌÍAffAffAffAffA€ffA¬ffAŽffAŒffAÄffAÌffAÔffAÜffAäffAìffAôffAüffB33B33B
+33B33B33B33B33B
+33B"33B&33B*33B.33B233B633B:33B>33BB33BF33BJ33BN33BR33BV33BZ33B^33Bb33Bf33Bj33Bn33Br33Bv33Bz33B~33?
+=q?Å
+ž@"\@b\@G®@±G®@ÑG®@ñG®A£×A£×A(£×A8£×AH£×AX£×Ah£×Ax£×AQìAQìAQìAQìA€QìA¬QìAŽQìAŒQìAÄQìAÌQìAÔQìAÜQìAäQìAìQìAôQìAüQìB(öB(öB
+(öB(öB(öB(öB(öB
+(öB"(öB&(öB*(öB.(öB2(öB6(öB:(öB>(öBB(öBF(öBJ(öBN(öBR(öBV(öBZ(öB^(öBb(öBf(öBj(öBn(öBr(öBv(öBz(öB~(ö?®?Ã×
+@!ë
+@aë
+@õÂ@°õÂ@ÐõÂ@ðõÂAzáAzáA(záA8záAHzáAXzáAhzáAxzáA=qA=qA=qA=qA€=qA¬=qAŽ=qAŒ=qAÄ=qAÌ=qAÔ=qAÜ=qAä=qAì=qAô=qAü=qB
+žB
+žB
+
+žB
+žB
+žB
+žB
+žB
+
+žB"
+žB&
+žB*
+žB.
+žB2
+žB6
+žB:
+žB>
+žBB
+žBF
+žBJ
+žBN
+žBR
+žBV
+žBZ
+žB^
+žBb
+žBf
+žBj
+žBn
+žBr
+žBv
+žBz
+žB~
+ž?
+ž?Â\@!G®@aG®@£×@°£×@Ð£×@ð£×AQìAQìA(QìA8QìAHQìAXQìAhQìAxQìA(öA(öA(öA(öA€(öA¬(öAŽ(öAŒ(öAÄ(öAÌ(öAÔ(öAÜ(öAä(öAì(öAô(öAü(öB{B{B
+{B{B{B{B{B
+{B"{B&{B*{B.{B2{B6{B:{B>{BB{BF{BJ{BN{BR{BV{BZ{B^{Bb{Bf{Bj{Bn{Br{Bv{Bz{B~{?\?ÁG®@ £×@`£×@Qì@°Qì@ÐQì@ðQìA(öA(öA((öA8(öAH(öAX(öAh(öAx(öA{A{A{A{A€{A¬{AŽ{AŒ{AÄ{AÌ{AÔ{AÜ{Aä{Aì{Aô{Aü{B
+=B
+=B
+
+=B
+=B
+=B
+=B
+=B
+
+=B"
+=B&
+=B*
+=B.
+=B2
+=B6
+=B:
+=B>
+=BB
+=BF
+=BJ
+=BN
+=BR
+=BV
+=BZ
+=B^
+=Bb
+=Bf
+=Bj
+=Bn
+=Br
+=Bv
+=Bz
+=B~
+=?   ?À  @   @`  @  @°  @Ð  @ð  A  A  A(  A8  AH  AX  Ah  Ax  A  A  A  A  A€  A¬  AŽ  AŒ  AÄ  AÌ  AÔ  AÜ  Aä  Aì  Aô  Aü  B  B  B
+  B  B  B  B  B
+  B"  B&  B*  B.  B2  B6  B:  B>  BB  BF  BJ  BN  BR  BV  BZ  B^  Bb  Bf  Bj  Bn  Br  Bv  Bz  B~  >úáH?ŸžR@\)@_\)@®@¯®@Ï®@ï®A×
+A×
+A'×
+A7×
+AG×
+AW×
+Ag×
+Aw×
+Aë
+Aë
+Aë
+Aë
+A£ë
+A«ë
+A³ë
+A»ë
+AÃë
+AËë
+AÓë
+AÛë
+Aãë
+Aëë
+Aóë
+Aûë
+BõÃBõÃB	õÃB
+õÃBõÃBõÃBõÃB
+õÃB!õÃB%õÃB)õÃB-õÃB1õÃB5õÃB9õÃB=õÃBAõÃBEõÃBIõÃBMõÃBQõÃBUõÃBYõÃB]õÃBaõÃBeõÃBiõÃBmõÃBqõÃBuõÃByõÃB}õÃ>õÂ?œp€@
+žR@^žR@\)@¯\)@Ï\)@ï\)A®A®A'®A7®AG®AW®Ag®Aw®A×
+A×
+A×
+A×
+A£×
+A«×
+A³×
+A»×
+AÃ×
+AË×
+AÓ×
+AÛ×
+Aã×
+Aë×
+Aó×
+Aû×
+Bë
+Bë
+B	ë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+B!ë
+B%ë
+B)ë
+B-ë
+B1ë
+B5ë
+B9ë
+B=ë
+BAë
+BEë
+BIë
+BMë
+BQë
+BUë
+BYë
+B]ë
+Baë
+Beë
+Bië
+Bmë
+Bqë
+Buë
+Byë
+B}ë
+>ð£×?Œ(ö@
+{@^{@
+=@¯
+=@Ï
+=@ï
+=A
+A
+A'
+A7
+AG
+AW
+Ag
+Aw
+AÂAÂAÂAÂA£ÂA«ÂA³ÂA»ÂAÃÂAËÂAÓÂAÛÂAãÂAëÂAóÂAûÂBáHBáHB	áHB
+áHBáHBáHBáHB
+áHB!áHB%áHB)áHB-áHB1áHB5áHB9áHB=áHBAáHBEáHBIáHBMáHBQáHBUáHBYáHB]áHBaáHBeáHBiáHBmáHBqáHBuáHByáHB}áH>ë
+?ºáH@
+p€@]p€@žR@®žR@ÎžR@îžRA\)A\)A'\)A7\)AG\)AW\)Ag\)Aw\)A®A®A®A®A£®A«®A³®A»®AÃ®AË®AÓ®AÛ®Aã®Aë®Aó®Aû®B×
+B×
+B	×
+B
+×
+B×
+B×
+B×
+B
+×
+B!×
+B%×
+B)×
+B-×
+B1×
+B5×
+B9×
+B=×
+BA×
+BE×
+BI×
+BM×
+BQ×
+BU×
+BY×
+B]×
+Ba×
+Be×
+Bi×
+Bm×
+Bq×
+Bu×
+By×
+B}×
+>æff?¹@
+ÌÍ@\ÌÍ@ff@®ff@Îff@îffA33A33A'33A733AG33AW33Ag33Aw33AAAAA£A«A³A»AÃAËAÓAÛAãAëAóAûBÌÍBÌÍB	ÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍB!ÌÍB%ÌÍB)ÌÍB-ÌÍB1ÌÍB5ÌÍB9ÌÍB=ÌÍBAÌÍBEÌÍBIÌÍBMÌÍBQÌÍBUÌÍBYÌÍB]ÌÍBaÌÍBeÌÍBiÌÍBmÌÍBqÌÍBuÌÍByÌÍB}ÌÍ>áG®?žQì@
+(ö@\(ö@{@®{@Î{@î{A
+=A
+=A'
+=A7
+=AG
+=AW
+=Ag
+=Aw
+=A
+A
+A
+A
+A£
+A«
+A³
+A»
+AÃ
+AË
+AÓ
+AÛ
+Aã
+Aë
+Aó
+Aû
+BÂBÂB	ÂB
+ÂBÂBÂBÂB
+ÂB!ÂB%ÂB)ÂB-ÂB1ÂB5ÂB9ÂB=ÂBAÂBEÂBIÂBMÂBQÂBUÂBYÂB]ÂBaÂBeÂBiÂBmÂBqÂBuÂByÂB}Â>Ü(ö?·
+>@
+@[
+@Â@­Â@ÍÂ@íÂAáHAáHA&áHA6áHAFáHAVáHAfáHAváHAp€Ap€Ap€Ap€A£p€A«p€A³p€A»p€AÃp€AËp€AÓp€AÛp€Aãp€Aëp€Aóp€Aûp€BžRBžRB	žRB
+žRBžRBžRBžRB
+žRB!žRB%žRB)žRB-žRB1žRB5žRB9žRB=žRBAžRBEžRBIžRBMžRBQžRBUžRBYžRB]žRBažRBežRBižRBmžRBqžRBužRByžRB}žR>×
+=?µÂ@áH@ZáH@p€@­p€@Íp€@íp€AžRAžRA&žRA6žRAFžRAVžRAfžRAvžRA\)A\)A\)A\)A£\)A«\)A³\)A»\)AÃ\)AË\)AÓ\)AÛ\)Aã\)Aë\)Aó\)Aû\)B®B®B	®B
+®B®B®B®B
+®B!®B%®B)®B-®B1®B5®B9®B=®BA®BE®BI®BM®BQ®BU®BY®B]®Ba®Be®Bi®Bm®Bq®Bu®By®B}®>Ñë
+?Žzá@=q@Z=q@
+ž@­
+ž@Í
+ž@í
+žA\A\A&\A6\AF\AV\Af\Av\AG®AG®AG®AG®A£G®A«G®A³G®A»G®AÃG®AËG®AÓG®AÛG®AãG®AëG®AóG®AûG®B£×B£×B	£×B
+£×B£×B£×B£×B
+£×B!£×B%£×B)£×B-£×B1£×B5£×B9£×B=£×BA£×BE£×BI£×BM£×BQ£×BU£×BY£×B]£×Ba£×Be£×Bi£×Bm£×Bq£×Bu£×By£×B}£×>ÌÌÍ?³33@@Y@ÌÍ@¬ÌÍ@ÌÌÍ@ìÌÍAffAffA&ffA6ffAFffAVffAfffAvffA33A33A33A33A£33A«33A³33A»33AÃ33AË33AÓ33AÛ33Aã33Aë33Aó33Aû33BBB	B
+BBBB
+B!B%B)B-B1B5B9B=BABEBIBMBQBUBYB]BaBeBiBmBqBuByB}>Ç®?±ë
+@õÂ@XõÂ@zá@¬zá@Ìzá@ìzáA=qA=qA&=qA6=qAF=qAV=qAf=qAv=qA
+žA
+žA
+žA
+žA£
+žA«
+žA³
+žA»
+žAÃ
+žAË
+žAÓ
+žAÛ
+žAã
+žAë
+žAó
+žAû
+žB\B\B	\B
+\B\B\B\B
+\B!\B%\B)\B-\B1\B5\B9\B=\BA\BE\BI\BM\BQ\BU\BY\B]\Ba\Be\Bi\Bm\Bq\Bu\By\B}\>Â\?°£×@Qì@XQì@(ö@¬(ö@Ì(ö@ì(öA{A{A&{A6{AF{AV{Af{Av{A
+=A
+=A
+=A
+=A£
+=A«
+=A³
+=A»
+=AÃ
+=AË
+=AÓ
+=AÛ
+=Aã
+=Aë
+=Aó
+=Aû
+=B
+B
+B	
+B
+
+B
+B
+B
+B
+
+B!
+B%
+B)
+B-
+B1
+B5
+B9
+B=
+BA
+BE
+BI
+BM
+BQ
+BU
+BY
+B]
+Ba
+Be
+Bi
+Bm
+Bq
+Bu
+By
+B}
+>œp€?¯\)@®@W®@×
+@«×
+@Ë×
+@ë×
+Aë
+Aë
+A%ë
+A5ë
+AEë
+AUë
+Aeë
+Auë
+AõÃAõÃAõÃAõÃA¢õÃAªõÃA²õÃAºõÃAÂõÃAÊõÃAÒõÃAÚõÃAâõÃAêõÃAòõÃAúõÃBzáBzáB	záB
+záBzáBzáBzáB
+záB!záB%záB)záB-záB1záB5záB9záB=záBAzáBEzáBIzáBMzáBQzáBUzáBYzáB]záBazáBezáBizáBmzáBqzáBuzáByzáB}zá>žQì?®{@
+>@W
+>@
+@«
+@Ë
+@ë
+AÂAÂA%ÂA5ÂAEÂAUÂAeÂAuÂAáHAáHAáHAáHA¢áHAªáHA²áHAºáHAÂáHAÊáHAÒáHAÚáHAâáHAêáHAòáHAúáHBp€Bp€B	p€B
+p€Bp€Bp€Bp€B
+p€B!p€B%p€B)p€B-p€B1p€B5p€B9p€B=p€BAp€BEp€BIp€BMp€BQp€BUp€BYp€B]p€Bap€Bep€Bip€Bmp€Bqp€Bup€Byp€B}p€>³33?¬ÌÍ@ff@Vff@33@«33@Ë33@ë33AAA%A5AEAUAeAuAÌÍAÌÍAÌÍAÌÍA¢ÌÍAªÌÍA²ÌÍAºÌÍAÂÌÍAÊÌÍAÒÌÍAÚÌÍAâÌÍAêÌÍAòÌÍAúÌÍBffBffB	ffB
+ffBffBffBffB
+ffB!ffB%ffB)ffB-ffB1ffB5ffB9ffB=ffBAffBEffBIffBMffBQffBUffBYffB]ffBaffBeffBiffBmffBqffBuffByffB}ff>®{?«
+@Â@UÂ@áH@ªáH@ÊáH@êáHAp€Ap€A%p€A5p€AEp€AUp€Aep€Aup€AžRAžRAžRAžRA¢žRAªžRA²žRAºžRAÂžRAÊžRAÒžRAÚžRAâžRAêžRAòžRAúžRB\)B\)B	\)B
+\)B\)B\)B\)B
+\)B!\)B%\)B)\)B-\)B1\)B5\)B9\)B=\)BA\)BE\)BI\)BM\)BQ\)BU\)BY\)B]\)Ba\)Be\)Bi\)Bm\)Bq\)Bu\)By\)B}\)>šõÃ?ª=q@
+ž@U
+ž@\@ª\@Ê\@ê\AG®AG®A%G®A5G®AEG®AUG®AeG®AuG®A£×A£×A£×A£×A¢£×Aª£×A²£×Aº£×AÂ£×AÊ£×AÒ£×AÚ£×Aâ£×Aê£×Aò£×Aú£×BQìBQìB	QìB
+QìBQìBQìBQìB
+QìB!QìB%QìB)QìB-QìB1QìB5QìB9QìB=QìBAQìBEQìBIQìBMQìBQQìBUQìBYQìB]QìBaQìBeQìBiQìBmQìBqQìBuQìByQìB}Qì>£×
+?šõÂ@zá@Tzá@=q@ª=q@Ê=q@ê=qA
+žA
+žA%
+žA5
+žAE
+žAU
+žAe
+žAu
+žA\A\A\A\A¢\Aª\A²\Aº\AÂ\AÊ\AÒ\AÚ\Aâ\Aê\Aò\Aú\BG®BG®B	G®B
+G®BG®BG®BG®B
+G®B!G®B%G®B)G®B-G®B1G®B5G®B9G®B=G®BAG®BEG®BIG®BMG®BQG®BUG®BYG®B]G®BaG®BeG®BiG®BmG®BqG®BuG®ByG®B}G®>žR?§®@×
+@S×
+@ë
+@©ë
+@Éë
+@éë
+AõÃAõÃA$õÃA4õÃADõÃATõÃAdõÃAtõÃAzáAzáAzáAzáA¢záAªzáA²záAºzáAÂzáAÊzáAÒzáAÚzáAâzáAêzáAòzáAúzáB=qB=qB	=qB
+=qB=qB=qB=qB
+=qB!=qB%=qB)=qB-=qB1=qB5=qB9=qB==qBA=qBE=qBI=qBM=qBQ=qBU=qBY=qB]=qBa=qBe=qBi=qBm=qBq=qBu=qBy=qB}=q>?Šff@33@S33@@©@É@éAÌÍAÌÍA$ÌÍA4ÌÍADÌÍATÌÍAdÌÍAtÌÍAffAffAffAffA¢ffAªffA²ffAºffAÂffAÊffAÒffAÚffAâffAêffAòffAúffB33B33B	33B
+33B33B33B33B
+33B!33B%33B)33B-33B133B533B933B=33BA33BE33BI33BM33BQ33BU33BY33B]33Ba33Be33Bi33Bm33Bq33Bu33By33B}33>zá?¥
+ž@\@R\@G®@©G®@ÉG®@éG®A£×A£×A$£×A4£×AD£×AT£×Ad£×At£×AQìAQìAQìAQìA¢QìAªQìA²QìAºQìAÂQìAÊQìAÒQìAÚQìAâQìAêQìAòQìAúQìB(öB(öB	(öB
+(öB(öB(öB(öB
+(öB!(öB%(öB)(öB-(öB1(öB5(öB9(öB=(öBA(öBE(öBI(öBM(öBQ(öBU(öBY(öB](öBa(öBe(öBi(öBm(öBq(öBu(öBy(öB}(ö>\)?£×
+@ë
+@Që
+@õÃ@šõÃ@ÈõÃ@èõÃAzáAzáA$záA4záADzáATzáAdzáAtzáA=qA=qA=qA=qA¢=qAª=qA²=qAº=qAÂ=qAÊ=qAÒ=qAÚ=qAâ=qAê=qAò=qAú=qB
+žB
+žB	
+žB
+
+žB
+žB
+žB
+žB
+
+žB!
+žB%
+žB)
+žB-
+žB1
+žB5
+žB9
+žB=
+žBA
+žBE
+žBI
+žBM
+žBQ
+žBU
+žBY
+žB]
+žBa
+žBe
+žBi
+žBm
+žBq
+žBu
+žBy
+žB}
+ž>=q?¢\@G®@QG®@£×@š£×@È£×@è£×AQìAQìA$QìA4QìADQìATQìAdQìAtQìA(öA(öA(öA(öA¢(öAª(öA²(öAº(öAÂ(öAÊ(öAÒ(öAÚ(öAâ(öAê(öAò(öAú(öB{B{B	{B
+{B{B{B{B
+{B!{B%{B){B-{B1{B5{B9{B={BA{BE{BI{BM{BQ{BU{BY{B]{Ba{Be{Bi{Bm{Bq{Bu{By{B}{>
+
+ž?¡G®@£×@P£×@Qì@šQì@ÈQì@èQìA(öA(öA$(öA4(öAD(öAT(öAd(öAt(öA{A{A{A{A¢{Aª{A²{Aº{AÂ{AÊ{AÒ{AÚ{Aâ{Aê{Aò{Aú{B
+=B
+=B	
+=B
+=B
+=B
+=B
+=B
+
+=B!
+=B%
+=B)
+=B-
+=B1
+=B5
+=B9
+=B=
+=BA
+=BE
+=BI
+=BM
+=BQ
+=BU
+=BY
+=B]
+=Ba
+=Be
+=Bi
+=Bm
+=Bq
+=Bu
+=By
+=B}
+=>  ?   @  @P  @  @š  @È  @è  A  A  A$  A4  AD  AT  Ad  At  A  A  A  A  A¢  Aª  A²  Aº  AÂ  AÊ  AÒ  AÚ  Aâ  Aê  Aò  Aú  B  B  B	  B
+  B  B  B  B
+  B!  B%  B)  B-  B1  B5  B9  B=  BA  BE  BI  BM  BQ  BU  BY  B]  Ba  Be  Bi  Bm  Bq  Bu  By  B}  >uÂ?žR@\)@O\)@®@§®@Ç®@ç®A×
+A×
+A#×
+A3×
+AC×
+AS×
+Ac×
+As×
+Aë
+Aë
+Aë
+Aë
+A¡ë
+A©ë
+A±ë
+A¹ë
+AÁë
+AÉë
+AÑë
+AÙë
+Aáë
+Aéë
+Añë
+Aùë
+B õÃBõÃBõÃB
+õÃBõÃBõÃBõÃB
+õÃB õÃB$õÃB(õÃB,õÃB0õÃB4õÃB8õÃB<õÃB@õÃBDõÃBHõÃBLõÃBPõÃBTõÃBXõÃB\õÃB`õÃBdõÃBhõÃBlõÃBpõÃBtõÃBxõÃB|õÃ>k
+?p€@žR@NžR@\)@§\)@Ç\)@ç\)A®A®A#®A3®AC®AS®Ac®As®A×
+A×
+A×
+A×
+A¡×
+A©×
+A±×
+A¹×
+AÁ×
+AÉ×
+AÑ×
+AÙ×
+Aá×
+Aé×
+Añ×
+Aù×
+B ë
+Bë
+Bë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+B ë
+B$ë
+B(ë
+B,ë
+B0ë
+B4ë
+B8ë
+B<ë
+B@ë
+BDë
+BHë
+BLë
+BPë
+BTë
+BXë
+B\ë
+B`ë
+Bdë
+Bhë
+Blë
+Bpë
+Btë
+Bxë
+B|ë
+>aG®?(ö@{@N{@
+=@§
+=@Ç
+=@ç
+=A
+A
+A#
+A3
+AC
+AS
+Ac
+As
+AÂAÂAÂAÂA¡ÂA©ÂA±ÂA¹ÂAÁÂAÉÂAÑÂAÙÂAáÂAéÂAñÂAùÂB áHBáHBáHB
+áHBáHBáHBáHB
+áHB áHB$áHB(áHB,áHB0áHB4áHB8áHB<áHB@áHBDáHBHáHBLáHBPáHBTáHBXáHB\áHB`áHBdáHBháHBláHBpáHBtáHBxáHB|áH>W
+=?áH@
+p€@Mp€@žR@ŠžR@ÆžR@æžRA\)A\)A#\)A3\)AC\)AS\)Ac\)As\)A®A®A®A®A¡®A©®A±®A¹®AÁ®AÉ®AÑ®AÙ®Aá®Aé®Añ®Aù®B ×
+B×
+B×
+B
+×
+B×
+B×
+B×
+B
+×
+B ×
+B$×
+B(×
+B,×
+B0×
+B4×
+B8×
+B<×
+B@×
+BD×
+BH×
+BL×
+BP×
+BT×
+BX×
+B\×
+B`×
+Bd×
+Bh×
+Bl×
+Bp×
+Bt×
+Bx×
+B|×
+>LÌÍ?@
+ÌÍ@LÌÍ@ff@Šff@Æff@æffA33A33A#33A333AC33AS33Ac33As33AAAAA¡A©A±A¹AÁAÉAÑAÙAáAéAñAùB ÌÍBÌÍBÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍB ÌÍB$ÌÍB(ÌÍB,ÌÍB0ÌÍB4ÌÍB8ÌÍB<ÌÍB@ÌÍBDÌÍBHÌÍBLÌÍBPÌÍBTÌÍBXÌÍB\ÌÍB`ÌÍBdÌÍBhÌÍBlÌÍBpÌÍBtÌÍBxÌÍB|ÌÍ>B\?Qì@
+(ö@L(ö@{@Š{@Æ{@æ{A
+=A
+=A#
+=A3
+=AC
+=AS
+=Ac
+=As
+=A
+A
+A
+A
+A¡
+A©
+A±
+A¹
+AÁ
+AÉ
+AÑ
+AÙ
+Aá
+Aé
+Añ
+Aù
+B ÂBÂBÂB
+ÂBÂBÂBÂB
+ÂB ÂB$ÂB(ÂB,ÂB0ÂB4ÂB8ÂB<ÂB@ÂBDÂBHÂBLÂBPÂBTÂBXÂB\ÂB`ÂBdÂBhÂBlÂBpÂBtÂBxÂB|Â>8Qì?
+>@
+
+@K
+@
+Â@¥Â@ÅÂ@åÂAáHAáHA"áHA2áHABáHARáHAbáHAráHAp€Ap€Ap€Ap€A¡p€A©p€A±p€A¹p€AÁp€AÉp€AÑp€AÙp€Aáp€Aép€Añp€Aùp€B žRBžRBžRB
+žRBžRBžRBžRB
+žRB žRB$žRB(žRB,žRB0žRB4žRB8žRB<žRB@žRBDžRBHžRBLžRBPžRBTžRBXžRB\žRB`žRBdžRBhžRBlžRBpžRBtžRBxžRB|žR>.{?Â@
+áH@JáH@
+p€@¥p€@Åp€@åp€AžRAžRA"žRA2žRABžRARžRAbžRAržRA\)A\)A\)A\)A¡\)A©\)A±\)A¹\)AÁ\)AÉ\)AÑ\)AÙ\)Aá\)Aé\)Añ\)Aù\)B ®B®B®B
+®B®B®B®B
+®B ®B$®B(®B,®B0®B4®B8®B<®B@®BD®BH®BL®BP®BT®BX®B\®B`®Bd®Bh®Bl®Bp®Bt®Bx®B|®>#×
+?zá@
+=q@J=q@
+
+ž@¥
+ž@Å
+ž@å
+žA\A\A"\A2\AB\AR\Ab\Ar\AG®AG®AG®AG®A¡G®A©G®A±G®A¹G®AÁG®AÉG®AÑG®AÙG®AáG®AéG®AñG®AùG®B £×B£×B£×B
+£×B£×B£×B£×B
+£×B £×B$£×B(£×B,£×B0£×B4£×B8£×B<£×B@£×BD£×BH£×BL£×BP£×BT£×BX£×B\£×B`£×Bd£×Bh£×Bl£×Bp£×Bt£×Bx£×B|£×>?33@	@I@ÌÍ@€ÌÍ@ÄÌÍ@äÌÍAffAffA"ffA2ffABffARffAbffArffA33A33A33A33A¡33A©33A±33A¹33AÁ33AÉ33AÑ33AÙ33Aá33Aé33Añ33Aù33B BBB
+BBBB
+B B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|>\)?ë
+@õÃ@HõÃ@zá@€zá@Äzá@äzáA=qA=qA"=qA2=qAB=qAR=qAb=qAr=qA
+žA
+žA
+žA
+žA¡
+žA©
+žA±
+žA¹
+žAÁ
+žAÉ
+žAÑ
+žAÙ
+žAá
+žAé
+žAñ
+žAù
+žB \B\B\B
+\B\B\B\B
+\B \B$\B(\B,\B0\B4\B8\B<\B@\BD\BH\BL\BP\BT\BX\B\\B`\Bd\Bh\Bl\Bp\Bt\Bx\B|\>
+ž?£×@Qì@HQì@(ö@€(ö@Ä(ö@ä(öA{A{A"{A2{AB{AR{Ab{Ar{A
+=A
+=A
+=A
+=A¡
+=A©
+=A±
+=A¹
+=AÁ
+=AÉ
+=AÑ
+=AÙ
+=Aá
+=Aé
+=Añ
+=Aù
+=B 
+B
+B
+B
+
+B
+B
+B
+B
+
+B 
+B$
+B(
+B,
+B0
+B4
+B8
+B<
+B@
+BD
+BH
+BL
+BP
+BT
+BX
+B\
+B`
+Bd
+Bh
+Bl
+Bp
+Bt
+Bx
+B|
+=õÂ?\)@®@G®@×
+@£×
+@Ã×
+@ã×
+Aë
+Aë
+A!ë
+A1ë
+AAë
+AQë
+Aaë
+Aqë
+AõÃAõÃAõÃAõÃA õÃAšõÃA°õÃAžõÃAÀõÃAÈõÃAÐõÃAØõÃAàõÃAèõÃAðõÃAøõÃB záBzáBzáB
+záBzáBzáBzáB
+záB záB$záB(záB,záB0záB4záB8záB<záB@záBDzáBHzáBLzáBPzáBTzáBXzáB\záB`záBdzáBhzáBlzáBpzáBtzáBxzáB|zá=áG®?{@
+=@G
+=@
+@£
+@Ã
+@ã
+AÂAÂA!ÂA1ÂAAÂAQÂAaÂAqÂAáHAáHAáHAáHA áHAšáHA°áHAžáHAÀáHAÈáHAÐáHAØáHAàáHAèáHAðáHAøáHB p€Bp€Bp€B
+p€Bp€Bp€Bp€B
+p€B p€B$p€B(p€B,p€B0p€B4p€B8p€B<p€B@p€BDp€BHp€BLp€BPp€BTp€BXp€B\p€B`p€Bdp€Bhp€Blp€Bpp€Btp€Bxp€B|p€=ÌÌÍ?ÌÍ@ff@Fff@33@£33@Ã33@ã33AAA!A1AAAQAaAqAÌÍAÌÍAÌÍAÌÍA ÌÍAšÌÍA°ÌÍAžÌÍAÀÌÍAÈÌÍAÐÌÍAØÌÍAàÌÍAèÌÍAðÌÍAøÌÍB ffBffBffB
+ffBffBffBffB
+ffB ffB$ffB(ffB,ffB0ffB4ffB8ffB<ffB@ffBDffBHffBLffBPffBTffBXffB\ffB`ffBdffBhffBlffBpffBtffBxffB|ff=žQì?
+@Â@EÂ@áH@¢áH@ÂáH@âáHAp€Ap€A!p€A1p€AAp€AQp€Aap€Aqp€AžRAžRAžRAžRA žRAšžRA°žRAžžRAÀžRAÈžRAÐžRAØžRAàžRAèžRAðžRAøžRB \)B\)B\)B
+\)B\)B\)B\)B
+\)B \)B$\)B(\)B,\)B0\)B4\)B8\)B<\)B@\)BD\)BH\)BL\)BP\)BT\)BX\)B\\)B`\)Bd\)Bh\)Bl\)Bp\)Bt\)Bx\)B|\)=£×
+?=q@
+ž@E
+ž@\@¢\@Â\@â\AG®AG®A!G®A1G®AAG®AQG®AaG®AqG®A£×A£×A£×A£×A £×Aš£×A°£×Až£×AÀ£×AÈ£×AÐ£×AØ£×Aà£×Aè£×Að£×Aø£×B QìBQìBQìB
+QìBQìBQìBQìB
+QìB QìB$QìB(QìB,QìB0QìB4QìB8QìB<QìB@QìBDQìBHQìBLQìBPQìBTQìBXQìB\QìB`QìBdQìBhQìBlQìBpQìBtQìBxQìB|Qì=\)?õÃ@zá@Dzá@=q@¢=q@Â=q@â=qA
+žA
+žA!
+žA1
+žAA
+žAQ
+žAa
+žAq
+žA\A\A\A\A \Aš\A°\Až\AÀ\AÈ\AÐ\AØ\Aà\Aè\Að\Aø\B G®BG®BG®B
+G®BG®BG®BG®B
+G®B G®B$G®B(G®B,G®B0G®B4G®B8G®B<G®B@G®BDG®BHG®BLG®BPG®BTG®BXG®B\G®B`G®BdG®BhG®BlG®BpG®BtG®BxG®B|G®=uÂ?®@×
+@C×
+@ë
+@¡ë
+@Áë
+@áë
+A õÃAõÃA õÃA0õÃA@õÃAPõÃA`õÃApõÃAzáAzáAzáAzáA záAšzáA°záAžzáAÀzáAÈzáAÐzáAØzáAàzáAèzáAðzáAøzáB =qB=qB=qB
+=qB=qB=qB=qB
+=qB =qB$=qB(=qB,=qB0=qB4=qB8=qB<=qB@=qBD=qBH=qBL=qBP=qBT=qBX=qB\=qB`=qBd=qBh=qBl=qBp=qBt=qBx=qB|=q=LÌÍ?ff@33@C33@@¡@Á@áA ÌÍAÌÍA ÌÍA0ÌÍA@ÌÍAPÌÍA`ÌÍApÌÍAffAffAffAffA ffAšffA°ffAžffAÀffAÈffAÐffAØffAàffAèffAðffAøffB 33B33B33B
+33B33B33B33B
+33B 33B$33B(33B,33B033B433B833B<33B@33BD33BH33BL33BP33BT33BX33B\33B`33Bd33Bh33Bl33Bp33Bt33Bx33B|33=#×
+?
+
+ž@\@B\@G®@¡G®@ÁG®@áG®A £×A£×A £×A0£×A@£×AP£×A`£×Ap£×AQìAQìAQìAQìA QìAšQìA°QìAžQìAÀQìAÈQìAÐQìAØQìAàQìAèQìAðQìAøQìB (öB(öB(öB
+(öB(öB(öB(öB
+(öB (öB$(öB((öB,(öB0(öB4(öB8(öB<(öB@(öBD(öBH(öBL(öBP(öBT(öBX(öB\(öB`(öBd(öBh(öBl(öBp(öBt(öBx(öB|(ö<õÂ?×
+@ë
+@Aë
+@õÃ@ õÃ@ÀõÃ@àõÃA záAzáA záA0záA@záAPzáA`záApzáA=qA=qA=qA=qA =qAš=qA°=qAž=qAÀ=qAÈ=qAÐ=qAØ=qAà=qAè=qAð=qAø=qB 
+žB
+žB
+žB
+
+žB
+žB
+žB
+žB
+
+žB 
+žB$
+žB(
+žB,
+žB0
+žB4
+žB8
+žB<
+žB@
+žBD
+žBH
+žBL
+žBP
+žBT
+žBX
+žB\
+žB`
+žBd
+žBh
+žBl
+žBp
+žBt
+žBx
+žB|
+ž<£×
+?\@G®@AG®@£×@ £×@À£×@à£×A QìAQìA QìA0QìA@QìAPQìA`QìApQìA(öA(öA(öA(öA (öAš(öA°(öAž(öAÀ(öAÈ(öAÐ(öAØ(öAà(öAè(öAð(öAø(öB {B{B{B
+{B{B{B{B
+{B {B${B({B,{B0{B4{B8{B<{B@{BD{BH{BL{BP{BT{BX{B\{B`{Bd{Bh{Bl{Bp{Bt{Bx{B|{<#×
+?G®@ £×@@£×@Qì@ Qì@ÀQì@àQìA (öA(öA (öA0(öA@(öAP(öA`(öAp(öA{A{A{A{A {Aš{A°{Až{AÀ{AÈ{AÐ{AØ{Aà{Aè{Að{Aø{B 
+=B
+=B
+=B
+
+=B
+=B
+=B
+=B
+
+=B 
+=B$
+=B(
+=B,
+=B0
+=B4
+=B8
+=B<
+=B@
+=BD
+=BH
+=BL
+=BP
+=BT
+=BX
+=B\
+=B`
+=Bd
+=Bh
+=Bl
+=Bp
+=Bt
+=Bx
+=B|
+=    ?  @   @@  @  @   @À  @à  A   A  A   A0  A@  AP  A`  Ap  A  A  A  A  A   Aš  A°  Až  AÀ  AÈ  AÐ  AØ  Aà  Aè  Að  Aø  B   B  B  B
+  B  B  B  B
+  B   B$  B(  B,  B0  B4  B8  B<  B@  BD  BH  BL  BP  BT  BX  B\  B`  Bd  Bh  Bl  Bp  Bt  Bx  B|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+žR?Ð£×¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+(ö?Ï\)?Ï\)@(Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+=?ÌÌÍ?Î{@'®@g®@(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?zá?Ë
+
+?Ë
+
+@&ff@g
+>@×
+@×
+@Ž(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?ë
+?ÈõÂ?Ê=p@%Â@eÂ@33@
+@³×
+@Ó×
+@Ô(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+ÌÍ?Ç®?ÈõÂ@$zá@e
+ž@áH@áH@³33@Ó
+@Ó×
+@ó×
+A
+{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+=q?Å
+ž?Æff@#×
+@dzá@=q@\@²áH@ÒáH@Ó33@ó
+A	ë
+Aë
+A{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
+ž?Ã×
+?Å
+ž@"\@c33@ë
+@=q@²=q@Ò\@ÒáH@òáHA	AÂAë
+A)ë
+A:{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?\?Â\?Â\@!ë
+@b\@G®@@±ë
+@Ò=q@Ò=q@ò\A	p€Ap€AA)ÂA9ë
+A9ë
+AJ{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?   ?À  ?ÁG®@!G®@aG®@õÂ@G®@±G®@Ñ@Ñë
+@ò=qA	
+žAG®Ap€A)p€A9A9ÂAIë
+AYë
+AZ{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >õÂ?ŸžR?À  @   @`£×@£×@£×@°õÂ@ÑG®@ÑG®@ñAõÃA
+žA
+žA)G®A9p€A9p€AIAYÂAYë
+Aië
+Az{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ð£×?Œ(ö?œp€@\)@`  @  @Qì@°£×@Ð£×@ÐõÂ@ñG®A£×AÌÍAõÃA)
+žA9
+žA9G®AIp€AYp€AYAiÂAyë
+AõÃA
+
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >æff?ºáH?Œ(ö@
+{@^žR@®@  @°  @ÐQì@Ð£×@ð£×AzáA£×A£×A(ÌÍA8õÃA9
+žAI
+žAYG®AYp€Aip€AyAáHAõÃAõÃA
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >áG®?¹?¹@
+p€@^{@
+=@\)@¯®@Ð  @Ð  @ðQìAQìAQìAzáA(£×A8£×A8ÌÍAHõÃAY
+žAY
+žAiG®Ayp€AžRAÌÍAáHAõÃAõÃA
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >×
+=?·
+>?žQì@
+ÌÍ@\ÌÍ@žR@
+=@¯
+=@Ï\)@Ï®@ð  A  A(öAQìA(QìA8záA8£×AH£×AXÌÍAXõÃAi
+žAy
+žA£×AžRAžRAÌÍAáHAõÃA€õÃA­
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ñë
+?µÂ?µÂ@
+@\(ö@ff@ff@®žR@Ï
+=@Ï
+=@ï\)A×
+A  A  A((öA8QìA8QìAHzáAX£×AX£×AhÌÍAxõÃA\A\A£×AžRAžRAÌÍA€áHA¬õÃA¬õÃAµ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ÌÌÍ?³33?Žzá@áH@ZáH@Â@{@®ff@Îff@ÎžR@ï
+=A
+A®A×
+A(  A8  A8(öAHQìAXQìAXzáAh£×Ax£×AffAzáA\A\A£×AžRA€žRA¬ÌÍA¬áHAŽõÃAŒõÃAœ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Â\?±ë
+?³33@@Z=q@p€@p€@­Â@Î{@Îff@îffA\)A
+A
+A'®A7×
+A8  AH  AX(öAXQìAhQìAxzáAQìAQìAffAzáA\A\A€£×A¬žRA¬žRAŽÌÍAŒáHAŒõÃAÄõÃAÍ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >œp€?°£×?°£×@õÂ@Y@ÌÍ@
+ž@­p€@Íp€@ÍÂ@î{A33A33A\)A'
+A7
+A7®AG×
+AX  AX  Ah(öAxQìA(öA=qAQìAQìAffAzáA€\A¬\A¬£×AŽžRAŒžRAŒÌÍAÄáHAÌõÃAÌõÃAÕ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >³33?®{?¯\)@Qì@XQì@zá@ÌÍ@¬ÌÍ@Í
+ž@Íp€@íp€AáHA
+=A33A'33A7\)A7
+AG
+AW®AW×
+Ah  Ax  A{A(öA(öA=qAQìAQìA€ffA¬záA¬\AŽ\AŒ£×AŒžRAÄžRAÌÌÍAÌáHAÔõÃAÜõÃAå
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >®{?¬ÌÍ?¬ÌÍ@
+>@W®@(ö@(ö@¬zá@ÌÌÍ@ÌÌÍ@í
+žAžRAžRAáHA'
+=A733A733AG\)AW
+AW
+Ag®Aw×
+A  A  A{A(öA(öA=qA€QìA¬QìA¬ffAŽzáAŒ\AŒ\AÄ£×AÌžRAÌžRAÔÌÍAÜáHAäõÃAäõÃAí
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >šõÃ?ª=q?«
+@ff@Vff@
+@×
+@¬(ö@Ì(ö@Ìzá@ìÌÍAffA\AžRA&žRA6áHA7
+=AG33AW33AW\)Ag
+Aw
+A×
+Aë
+A  A  A{A(öA€(öA¬=qA¬QìAŽQìAŒffAŒzáAÄ\AÌ\AÌ£×AÔžRAÜžRAäÌÍAäáHAìõÃAôõÃAõ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >žR?šõÂ?ª=q@
+ž@UÂ@33@33@«
+@Ë×
+@Ì(ö@ì(öA=qAffAffA&\A6žRA6žRAFáHAW
+=AW33Ag33Aw\)AÂAÂA×
+Aë
+A  A  A€{A¬(öA¬(öAŽ=qAŒQìAŒQìAÄffAÌzáAÌ\AÔ\AÜ£×AäžRAäžRAìÌÍAôáHAôõÃAüõÃB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >?Šff?§®@zá@U
+ž@\@áH@«33@Ë33@Ë
+@ë×
+A{A{A=qA&ffA6ffA6\AFžRAVžRAVáHAg
+=Aw33AA®AÂAÂA×
+Aë
+A€  A¬  A¬{AŽ(öAŒ(öAŒ=qAÄQìAÌQìAÌffAÔzáAÜ\Aä\Aä£×AìžRAôžRAôÌÍAüáHBzáBzáB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >\)?¥
+ž?Šff@33@S×
+@=q@\@ª\@ÊáH@Ë33@ë33AÂAë
+A{A&{A6=qA6ffAFffAV\AVžRAfžRAváHA
+AAA®AÂAÂA£×
+A«ë
+A¬  AŽ  AŒ{AŒ(öAÄ(öAÌ=qAÌQìAÔQìAÜffAäzáAä\Aì\Aô£×AôžRAüžRBffBp€BzáB
+záB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >=q?£×
+?£×
+@\@S33@@ë
+@ª=q@Ê\@Ê\@êáHAAAÂA%ë
+A6{A6{AF=qAVffAVffAf\AvžRA\)Ap€A
+AAA®A£ÂA«ÂA«×
+A³ë
+AŒ  AŒ  AÄ{AÌ(öAÌ(öAÔ=qAÜQìAäQìAäffAìzáAô\Aô\Aü£×B\)B\)BffB
+p€BzáBzáB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >  ?¡G®?¢\@ë
+@Që
+@G®@@©@Éë
+@Ê=q@ê\AG®Ap€AA%A5ÂA5ë
+AF{AV{AV=qAfffAvffAG®A\)A\)Ap€A
+AA£A«®A«ÂA³ÂA»×
+A»ë
+AÄ  AÌ  AÌ{AÔ(öAÜ(öAä=qAäQìAìQìAôffAôzáAü\BG®BQìB\)B
+\)BffBp€BzáBzáB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >uÂ?   ?   @£×@QG®@õÃ@õÃ@©G®@É@É@éë
+A
+žAG®AG®A%p€A5A5AEÂAUë
+AV{Af{Av=qA33A33AG®A\)A\)Ap€A£
+A«A«A³®A»ÂA»ÂAÃ×
+AËë
+AÌ  AÔ  AÜ{Aä(öAä(öAì=qAôQìAôQìAüffB=qBG®BG®B
+QìB\)B\)BffBp€BzáBzáB
+
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >k
+?p€?žR@  @P  @Qì@£×@šõÃ@ÈõÃ@ÉG®@éAÌÍAõÃA
+žA%G®A5G®A5p€AEAUAUÂAeë
+Av{A
+=A
+žA33A33AG®A\)A£\)A«p€A«
+A³A»A»®AÃÂAËÂAË×
+AÓë
+AÜ  Aä  Aä{Aì(öAô(öAô=qAüQìB(öB33B=qB
+G®BG®BQìB\)B\)BffBp€B
+záB"záB"
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >W
+=?(ö?p€@žR@O\)@  @  @šQì@È£×@ÈõÃ@èõÃA£×AÌÍAÌÍA$õÃA5
+žA5G®AEG®AUp€AUAeAuÂAõÃA
+=A
+=A
+žA33A33A£G®A«\)A«\)A³p€A»
+A»AÃAË®AËÂAÓÂAÛ×
+Aãë
+Aä  Aì  Aô{Aô(öAü(öB
+žB(öB(öB
+33B=qBG®BG®BQìB\)B\)B
+ffB"p€B"záB&záB*
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >LÌÍ?áH?áH@{@NžR@\)@®@š  @È  @ÈQì@è£×AzáAzáA£×A$ÌÍA4ÌÍA4õÃAE
+žAUG®AUG®Aep€AuAÌÍAáHAõÃA
+=A
+=A
+žA£33A«33A«G®A³\)A»\)A»p€AÃ
+AËAËAÓ®AÛÂAãÂAã×
+Aëë
+Aô  Aô  Aü{B{B{B
+žB
+(öB(öB33B=qBG®BG®BQìB
+\)B"\)B"ffB&p€B*záB*záB.
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >8Qì?Qì?@
+p€@Mp€@
+=@\)@§\)@Ç®@È  @è  A(öAQìAzáA$záA4£×A4ÌÍADÌÍATõÃAU
+žAeG®AuG®AžRAÌÍAÌÍAáHAõÃA
+=A£
+=A«
+žA«33A³33A»G®A»\)AÃ\)AËp€AË
+AÓAÛAã®AãÂAëÂAó×
+Aóë
+Aü  B  B
+=B{B
+{B
+žB(öB(öB33B=qBG®B
+G®B"QìB"\)B&\)B*ffB*p€B.záB2záB6
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >.{?
+>?
+>@
+(ö@LÌÍ@žR@žR@§
+=@Ç\)@Ç\)@ç®A  A  A(öA$QìA4záA4záAD£×ATÌÍATÌÍAdõÃAu
+žA£×A£×AžRAÌÍAÌÍAáHA¢õÃA«
+=A«
+=A³
+žA»33A»33AÃG®AË\)AË\)AÓp€AÛ
+AãAãAë®AóÂAóÂAû×
+BõÃB  B  B
+
+=B{B{B
+žB(öB(öB33B
+=qB"G®B"G®B&QìB*\)B*\)B.ffB2p€B6záB6záB:
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >#×
+?zá?Â@
+
+@K
+@{@ff@ŠžR@ÆžR@Ç
+=@ç\)A®A×
+A  A$  A4(öA4QìADzáATzáAT£×AdÌÍAtÌÍAzáA\A£×A£×AžRAÌÍA¢ÌÍAªáHAªõÃA³
+=A»
+=A»
+žAÃ33AË33AËG®AÓ\)AÛ\)Aãp€Aã
+AëAóAó®AûÂBáHBë
+BõÃB
+  B  B
+=B{B{B
+žB(öB
+(öB"33B"=qB&G®B*G®B*QìB.\)B2\)B6ffB6p€B:záB>záB>
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >\)?33?zá@
+=q@JáH@
+Â@
+Â@Š{@Æff@ÆžR@æžRA
+A®A®A#×
+A4  A4  AD(öATQìATzáAdzáAt£×AffAffAzáA\A£×A£×A¢žRAªÌÍAªÌÍA²áHAºõÃA»
+=AÃ
+=AË
+žAË33AÓ33AÛG®Aã\)Aã\)Aëp€Aó
+AóAûB×
+BáHBáHB	ë
+B
+õÃB  B  B
+=B{B{B
+
+žB"(öB"(öB&33B*=qB*G®B.G®B2QìB6\)B6\)B:ffB>p€B>záBBzáBF
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >
+ž?£×?ë
+@	@J=q@
+
+ž@
+p€@¥Â@ÅÂ@Æ{@æffA\)A\)A
+A#®A3®A3×
+AD  AT  AT(öAdQìAtzáA=qAQìAffAffAzáA\A¢£×Aª£×AªžRA²ÌÍAºÌÍAºáHAÂõÃAË
+=AË
+=AÓ
+žAÛ33Aã33AãG®Aë\)Aó\)Aóp€Aû
+BÌÍBÌÍB×
+B	áHB
+áHB
+ë
+BõÃB  B  B
+=B
+{B"{B"
+žB&(öB*(öB*33B.=qB2G®B6G®B6QìB:\)B>\)B>ffBBp€BFzáBJzáBJ
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =áG®?\)?£×@Qì@HõÃ@ÌÍ@
+
+ž@¥
+ž@Åp€@ÅÂ@åÂA
+=A33A\)A#\)A3
+A3®AC®AS×
+AT  Ad  At(öA(öA=qA=qAQìAffAffA¢záAª\Aª£×A²£×AºžRAºÌÍAÂÌÍAÊáHAÊõÃAÓ
+=AÛ
+=Aã
+žAã33Aë33AóG®Aó\)Aû\)BžRBÂBÌÍB	ÌÍB
+×
+B
+áHBáHBë
+BõÃB  B
+  B"
+=B"{B&{B*
+žB*(öB.(öB233B6=qB6G®B:G®B>QìB>\)BB\)BFffBJp€BJzáBNzáBR
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =ÌÌÍ?{?{@®@HQì@(ö@zá@€ÌÍ@Å
+ž@Å
+ž@åp€AáHAáHA
+=A#33A3\)A3\)AC
+AS®AS®Ac×
+At  A  A{A(öA=qA=qAQìA¢ffAªffAªzáA²\Aº£×Aº£×AÂžRAÊÌÍAÊÌÍAÒáHAÚõÃAã
+=Aã
+=Aë
+žAó33Aó33AûG®B®B®BžRB	ÂB
+ÌÍB
+ÌÍB×
+BáHBáHBë
+B
+õÃB"  B"  B&
+=B*{B*{B.
+žB2(öB6(öB633B:=qB>G®B>G®BBQìBF\)BJ\)BJffBNp€BRzáBRzáBV
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =žQì?
+?ÌÍ@
+=@G
+=@×
+@(ö@€(ö@Äzá@ÄÌÍ@å
+žA\AžRAáHA"áHA3
+=A333AC\)AS\)AS
+Ac®As®Aë
+A  A  A{A(öA=qA¢=qAªQìAªffA²ffAºzáAº\AÂ£×AÊ£×AÊžRAÒÌÍAÚÌÍAâáHAâõÃAë
+=Aó
+=Aó
+žAû33BB£×B®B	®B
+žRB
+ÂBÌÍBÌÍB×
+BáHB
+áHB!ë
+B!õÃB&  B*  B*
+=B.{B2{B6
+žB6(öB:(öB>33B>=qBBG®BFG®BJQìBJ\)BN\)BRffBRp€BVzáBZzáBZ
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =\)?=q?
+@Â@Fff@
+@
+@£×
+@Ä(ö@Ä(ö@äzáAffA\A\A"žRA2áHA2áHAC
+=AS33AS\)Ac\)As
+A×
+A×
+Aë
+A  A  A{A¢(öAª=qAª=qA²QìAºffAºffAÂzáAÊ\AÊ£×AÒ£×AÚžRAâÌÍAâÌÍAêáHAòõÃAó
+=Aû
+=B\BBB	£×B
+®B
+®BžRBÂBÌÍBÌÍB
+×
+B!áHB!áHB%ë
+B)õÃB*  B.  B2
+=B6{B6{B:
+žB>(öB>(öBB33BF=qBJG®BJG®BNQìBR\)BR\)BVffBZp€BZzáB^záBb
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =uÂ?®?õÃ@
+ž@EÂ@áH@33@£
+@Ã
+@Ã×
+@ä(öA{A=qAffA"\A2\A2žRABáHARáHAS
+=Ac33As\)A®AÂA×
+A×
+Aë
+A  A¢  Aª{Aª(öA²=qAº=qAºQìAÂffAÊffAÊzáAÒ\AÚ£×Aâ£×AâžRAêÌÍAòÌÍAòáHAúõÃB
+B
+B\B	B
+B
+£×B®B®BžRBÂB
+ÌÍB!ÌÍB!×
+B%áHB)áHB)ë
+B-õÃB2  B6  B6
+=B:{B>{B>
+žBB(öBF(öBJ33BJ=qBNG®BRG®BRQìBV\)BZ\)BZffB^p€BbzáBfzáBf
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =#×
+?ff?®@×
+@Dzá@\@áH@¢áH@Ã33@Ã
+@ã
+Aë
+A{A{A"=qA2ffA2\AB\ARžRARáHAbáHAs
+=AA®A®AÂA×
+A×
+A¡ë
+Aª  Aª  A²{Aº(öAº=qAÂ=qAÊQìAÊffAÒffAÚzáAâ\Aâ£×Aê£×AòžRAòÌÍAúÌÍBp€BzáB
+B	
+B
+\B
+BB£×B®B®B
+žRB!ÂB!ÌÍB%ÌÍB)×
+B)áHB-áHB1ë
+B5õÃB6  B:  B>
+=B>{BB{BF
+žBJ(öBJ(öBN33BR=qBRG®BVG®BZQìBZ\)B^\)BbffBfp€BfzáBjzáBn
+¿  ¿  ¿  ¿  ¿  ¿  <õÂ?
+
+ž?
+
+ž@33@C×
+@ë
+@=q@¢\@ÂáH@ÂáH@ã33AÂAÂAë
+A"{A2{A2=qABffAR\AR\AbžRAráHAp€A
+AA®A®AÂA¡×
+A©×
+A©ë
+A²  Aº  Aº{AÂ(öAÊ=qAÊ=qAÒQìAÚffAâffAâzáAê\Aò£×Aò£×AúžRBffBffBp€B	záB
+
+B
+
+B\BBB£×B
+®B!®B!žRB%ÂB)ÌÍB)ÌÍB-×
+B1áHB5áHB5ë
+B9õÃB>  B>  BB
+=BF{BJ{BJ
+žBN(öBR(öBR33BV=qBZG®BZG®B^QìBb\)Bf\)BfffBjp€BnzáBnzáBr
+¿  ¿  ¿  ¿  <#×
+?\?×
+@\@B\@@ë
+@¡ë
+@Â=q@Â\@âáHAp€AAÂA!ÂA1ë
+A2{AB{AR=qARffAb\Ar\A\)Ap€Ap€A
+AA®A¡®A©ÂA©×
+A±×
+A¹ë
+Aº  AÂ  AÊ{AÊ(öAÒ=qAÚ=qAâQìAâffAêffAòzáAò\Aú£×BQìB\)BffB	ffB
+p€B
+záB
+B
+B\BB
+B!£×B!®B%®B)žRB)ÂB-ÌÍB1ÌÍB5×
+B5áHB9áHB=ë
+B=õÃBB  BF  BJ
+=BJ{BN{BR
+žBR(öBV(öBZ33BZ=qB^G®BbG®BfQìBf\)Bj\)BnffBnp€BrzáBvzáBz
+¿  ¿      ?G®?G®@G®@Aë
+@G®@G®@¡@Áë
+@Áë
+@â=qAG®Ap€Ap€A!A1ÂA1ÂAAë
+AR{AR{Ab=qArffAG®AG®A\)Ap€Ap€A
+A¡A©®A©®A±ÂA¹×
+A¹×
+AÁë
+AÊ  AÊ  AÒ{AÚ(öAâ=qAâ=qAêQìAòffAòffAúzáBG®BQìBQìB	\)B
+ffB
+ffBp€BzáB
+B
+B
+\B!B!B%£×B)®B)®B-žRB1ÂB5ÌÍB5ÌÍB9×
+B=áHB=áHBAë
+BEõÃBJ  BJ  BN
+=BR{BR{BV
+žBZ(öBZ(öB^33Bb=qBfG®BfG®BjQìBn\)Bn\)BrffBvp€BzzáBzzáB~
+¿  ¿  ?  @ £×@@£×@£×@õÃ@¡G®@ÁG®@Á@áë
+A õÃA
+žAG®A!p€A1p€A1AAÂAQÂAQë
+Ab{Ar{A
+žA33AG®AG®A\)Ap€A¡p€A©
+A©A±®A¹®A¹ÂAÁ×
+AÉ×
+AÉë
+AÒ  AÚ  Aâ{Aâ(öAê=qAò=qAòQìAúffB33B=qBG®B	QìB
+QìB
+\)BffBffBp€BzáB
+
+B!
+B!\B%B)B)£×B-®B1®B5žRB5ÂB9ÌÍB=ÌÍB=×
+BAáHBEáHBIë
+BIõÃBN  BR  BR
+=BV{BZ{BZ
+žB^(öBb(öBf33Bf=qBjG®BnG®BnQìBr\)Bv\)BzffBzp€B~zá¿  ¿  ¿  ¿  @@  @Qì@Qì@ £×@ÀõÃ@ÁG®@áG®A ÌÍAõÃAõÃA!
+žA1G®A1p€AAp€AQAQÂAaÂAqë
+A
+=A
+=A
+žA33AG®AG®A¡\)A©p€A©p€A±
+A¹A¹®AÁ®AÉÂAÉ×
+AÑ×
+AÙë
+Aâ  Aâ  Aê{Aò(öAò=qAú=qB(öB33B33B	=qB
+G®B
+QìBQìB\)BffBffB
+p€B!záB!
+B%
+B)\B)B-B1£×B5®B5®B9žRB=ÂB=ÌÍBAÌÍBE×
+BIáHBIáHBMë
+BQõÃBR  BV  BZ
+=BZ{B^{Bb
+žBf(öBf(öBj33Bn=qBnG®BrG®BvQìBz\)Bz\)B~ff¿  ¿  ¿  ¿  ¿  ¿  @  @ Qì@ÀQì@À£×@àõÃA £×A£×AÌÍA õÃA0õÃA1
+žAAG®AQp€AQp€AaAqÂAáHAõÃA
+=A
+=A
+žA33A¡G®A©G®A©\)A±p€A¹p€A¹
+AÁAÉ®AÉ®AÑÂAÙ×
+Aá×
+Aáë
+Aê  Aò  Aò{Aú(öB
+žB
+žB(öB	33B
+33B
+=qBG®BQìBQìB\)B
+ffB!ffB!p€B%záB)
+B)
+B-\B1B5B5£×B9®B=®B=žRBAÂBEÌÍBIÌÍBI×
+BMáHBQáHBQë
+BUõÃBZ  BZ  B^
+=Bb{Bf{Bf
+žBj(öBn(öBn33Br=qBvG®BzG®BzQìB~\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @À  @ÀQì@àQìA QìAzáA£×A £×A0ÌÍA0õÃA@õÃAQ
+žAQG®Aap€Aqp€AÌÍAáHAáHAõÃA
+=A
+=A¡
+žA©33A©G®A±G®A¹\)A¹p€AÁp€AÉ
+AÉAÑ®AÙ®AáÂAá×
+Aé×
+Añë
+Aò  Aú  B
+=B{B
+žB	
+žB
+(öB
+33B33B=qBG®BQìB
+QìB!\)B!ffB%ffB)p€B)záB-
+B1
+B5\B5B9B=£×B=®BA®BEžRBIÂBIÌÍBMÌÍBQ×
+BQáHBUáHBYë
+BYõÃB^  Bb  Bf
+=Bf{Bj{Bn
+žBn(öBr(öBv33Bz=qBzG®B~G®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @à  A (öA(öAQìA záA0£×A0£×A@ÌÍAPõÃAPõÃAa
+žAqG®AžRAžRAÌÍAáHAáHAõÃA¡
+=A©
+=A©
+žA±33A¹G®A¹G®AÁ\)AÉp€AÉp€AÑ
+AÙAá®Aá®AéÂAñ×
+Añ×
+Aùë
+B  B  B
+=B	{B
+
+žB
+
+žB(öB33B33B=qB
+G®B!QìB!QìB%\)B)ffB)ffB-p€B1záB5
+B5
+B9\B=B=BA£×BE®BI®BIžRBMÂBQÌÍBQÌÍBU×
+BYáHBYáHB]ë
+BaõÃBf  Bf  Bj
+=Bn{Bn{Br
+žBv(öBz(öBz33B~=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A(öA (öA0QìA0záA@£×AP£×APÌÍA`õÃApõÃA\A£×AžRAžRAÌÍAáHA áHAšõÃA©
+=A±
+=A¹
+žA¹33AÁG®AÉG®AÉ\)AÑp€AÙp€Aá
+AáAé®Añ®AñÂAù×
+B ë
+BõÃB  B	  B
+=B
+{B
+žB
+žB(öB33B
+33B!=qB!G®B%QìB)QìB)\)B-ffB1ffB5p€B5záB9
+B=
+B=\BABEBI£×BI®BM®BQžRBQÂBUÌÍBYÌÍBY×
+B]áHBaáHBeë
+BeõÃBj  Bn  Bn
+=Br{Bv{Bz
+žBz(öB~(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A   A0(öA0(öA@QìAPzáAP£×A`£×ApÌÍAzáAzáA\A£×AžRAžRA ÌÍAšáHAšáHA°õÃA¹
+=A¹
+=AÁ
+žAÉ33AÉG®AÑG®AÙ\)Aáp€Aáp€Aé
+AñAñ®Aù®B áHBë
+Bë
+BõÃB
+  B
+  B
+=B{B
+žB
+žB
+(öB!33B!33B%=qB)G®B)QìB-QìB1\)B5ffB5ffB9p€B=záB=
+BA
+BE\BIBIBM£×BQ®BQ®BUžRBYÂBYÌÍB]ÌÍBa×
+BeáHBeáHBië
+BmõÃBn  Br  Bv
+=Bz{Bz{B~
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A0  A@(öAP(öAPQìA`záAp£×AQìAffAzáAzáA\A£×A žRAšžRAšÌÍA°áHAžáHAžõÃAÁ
+=AÉ
+=AÉ
+žAÑ33AÙG®AáG®Aá\)Aép€Añp€Añ
+AùB ×
+B×
+BáHBë
+B
+ë
+B
+õÃB  B  B
+=B{B
+
+žB!
+žB!(öB%33B)33B)=qB-G®B1QìB5QìB5\)B9ffB=ffB=p€BAzáBE
+BI
+BI\BMBQBQ£×BU®BY®BYžRB]ÂBaÌÍBeÌÍBe×
+BiáHBmáHBmë
+BqõÃBv  Bz  Bz
+=B~{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AP  AP(öA`(öApQìA=qAQìAQìAffAzáAzáA \Aš£×AšžRA°žRAžÌÍAžáHAÀáHAÈõÃAÉ
+=AÑ
+=AÙ
+žAá33AáG®AéG®Añ\)Añp€Aùp€B ÂBÌÍB×
+B×
+B
+áHB
+ë
+Bë
+BõÃB  B  B
+
+=B!{B!
+žB%
+žB)(öB)33B-33B1=qB5G®B5QìB9QìB=\)B=ffBAffBEp€BIzáBI
+BM
+BQ\BQBUBY£×BY®B]®BažRBeÂBeÌÍBiÌÍBm×
+BmáHBqáHBuë
+ByõÃBz  B~  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A`  Ap(öA{A(öA=qAQìAQìAffA záAšzáAš\A°£×AžžRAžžRAÀÌÍAÈáHAÈáHAÐõÃAÙ
+=Aá
+=Aá
+žAé33AñG®AñG®Aù\)B žRBžRBÂBÌÍB
+×
+B
+×
+BáHBë
+Bë
+BõÃB
+  B!  B!
+=B%{B)
+žB)
+žB-(öB133B533B5=qB9G®B=QìB=QìBA\)BEffBIffBIp€BMzáBQ
+BQ
+BU\BYBYB]£×Ba®Be®BežRBiÂBmÌÍBmÌÍBq×
+BuáHByáHByë
+B}õÃ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A{A{A(öA=qAQìA QìAšffAšzáA°záAž\Až£×AÀžRAÈžRAÈÌÍAÐáHAØáHAàõÃAá
+=Aé
+=Añ
+žAñ33AùG®B £×B®BžRBžRB
+ÂB
+ÌÍB×
+B×
+BáHBë
+B
+ë
+B õÃB!  B%  B)
+=B){B-
+žB1
+žB5(öB533B933B==qB=G®BAQìBEQìBI\)BIffBMffBQp€BQzáBU
+BY
+BY\B]BaBe£×Be®Bi®BmžRBmÂBqÌÍBuÌÍBy×
+ByáHB}áH¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A{A{A(öA =qAšQìAšQìA°ffAžzáAžzáAÀ\AÈ£×AÈžRAÐžRAØÌÍAàáHAàáHAèõÃAñ
+=Añ
+=Aù
+žB B£×B£×B®B
+žRB
+žRBÂBÌÍB×
+B×
+B
+áHB ë
+B ë
+B$õÃB)  B)  B-
+=B1{B5
+žB5
+žB9(öB=33B=33BA=qBEG®BIQìBIQìBM\)BQffBQffBUp€BYzáBY
+B]
+Ba\BeBeBi£×Bm®Bm®BqžRBuÂByÌÍByÌÍB}×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A{A {Aš(öAš=qA°QìAžQìAžffAÀzáAÈzáAÈ\AÐ£×AØžRAàžRAàÌÍAèáHAðáHAðõÃAù
+=B 
+B\BB£×B
+£×B
+®BžRBžRBÂBÌÍB
+×
+B ×
+B áHB$ë
+B(ë
+B(õÃB-  B1  B5
+=B5{B9
+žB=
+žB=(öBA33BE33BI=qBIG®BMQìBQQìBQ\)BUffBYffBYp€B]záBa
+Be
+Be\BiBmBm£×Bq®Bu®ByžRByÂB}ÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A   Aš{Aš{A°(öAž=qAžQìAÀQìAÈffAÈzáAÐzáAØ\Aà£×AàžRAèžRAðÌÍAðáHAøáHB záB
+B
+B\B
+B
+£×B£×B®BžRBžRB
+ÂB ÌÍB ×
+B$×
+B(áHB(ë
+B,ë
+B0õÃB5  B5  B9
+=B={B=
+žBA
+žBE(öBI33BI33BM=qBQG®BQQìBUQìBY\)BYffB]ffBap€BezáBe
+Bi
+Bm\BmBqBu£×By®By®B}žR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aš  A°{Až{Až(öAÀ=qAÈQìAÈQìAÐffAØzáAàzáAà\Aè£×AðžRAðžRAøÌÍB p€Bp€BzáB
+B
+
+B
+\BB£×B£×B®B
+žRB žRB ÂB$ÌÍB(×
+B(×
+B,áHB0ë
+B4ë
+B4õÃB9  B=  B=
+=BA{BE
+žBI
+žBI(öBM33BQ33BQ=qBUG®BYQìBYQìB]\)BaffBeffBep€BizáBm
+Bm
+Bq\BuByBy£×B}®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Až  Až{AÀ{AÈ(öAÈ=qAÐQìAØQìAàffAàzáAèzáAð\Að£×AøžRB \)BffBp€Bp€B
+záB
+
+B
+B\BB£×B
+£×B ®B žRB$žRB(ÂB(ÌÍB,×
+B0×
+B4áHB4ë
+B8ë
+B<õÃB=  BA  BE
+=BI{BI
+žBM
+žBQ(öBQ33BU33BY=qBYG®B]QìBaQìBe\)BeffBiffBmp€BmzáBq
+Bu
+By\ByB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÀ  AÈ{AÈ{AÐ(öAØ=qAàQìAàQìAèffAðzáAðzáAø\B QìB\)B\)BffB
+p€B
+p€BzáB
+B
+B\B
+B £×B £×B$®B(žRB(žRB,ÂB0ÌÍB4×
+B4×
+B8áHB<ë
+B<ë
+B@õÃBE  BI  BI
+=BM{BQ
+žBQ
+žBU(öBY33BY33B]=qBaG®BeQìBeQìBi\)BmffBmffBqp€BuzáBy
+By
+B}\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÈ  AÐ{AØ{Aà(öAà=qAèQìAðQìAðffAøzáB =qBG®BQìB\)B
+\)B
+ffBp€Bp€BzáB
+B
+
+B \B B$£×B(£×B(®B,žRB0žRB4ÂB4ÌÍB8×
+B<×
+B<áHB@ë
+BDë
+BHõÃBI  BM  BQ
+=BQ{BU
+žBY
+žBY(öB]33Ba33Be=qBeG®BiQìBmQìBm\)BqffBuffByp€ByzáB}
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AØ  Aà{Aà{Aè(öAð=qAðQìAøQìB 33B=qB=qBG®B
+QìB
+\)B\)BffBp€Bp€B
+záB 
+B 
+B$\B(B(£×B,£×B0®B4žRB4žRB8ÂB<ÌÍB<×
+B@×
+BDáHBHë
+BHë
+BLõÃBQ  BQ  BU
+=BY{BY
+žB]
+žBa(öBe33Be33Bi=qBmG®BmQìBqQìBu\)ByffByffB}p€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aà  Aè{Að{Að(öAø=qB (öB(öB33B=qB
+=qB
+G®BQìB\)B\)BffB
+p€B p€B záB$
+B(
+B(\B,B0£×B4£×B4®B8žRB<žRB<ÂB@ÌÍBD×
+BH×
+BHáHBLë
+BPë
+BPõÃBU  BY  BY
+=B]{Ba
+žBe
+žBe(öBi33Bm33Bm=qBqG®BuQìByQìBy\)B}ff¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Að  Að{Aø{B {B
+žB(öB(öB
+33B
+=qB=qBG®BQìB\)B
+\)B ffB p€B$p€B(záB(
+B,
+B0\B4B4£×B8£×B<®B<žRB@žRBDÂBHÌÍBH×
+BL×
+BPáHBPë
+BTë
+BXõÃBY  B]  Ba
+=Be{Be
+žBi
+žBm(öBm33Bq33Bu=qByG®ByQìB}Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aø  B 
+=B
+=B{B
+žB
+(öB
+(öB33B=qB=qBG®B
+QìB \)B \)B$ffB(p€B(p€B,záB0
+B4
+B4\B8B<£×B<£×B@®BDžRBHžRBHÂBLÌÍBP×
+BP×
+BTáHBXë
+BXë
+B\õÃBa  Be  Be
+=Bi{Bm
+žBm
+žBq(öBu33By33By=qB}G®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+=B
+=B
+{B
+
+žB(öB(öB33B=qB
+=qB G®B QìB$\)B(\)B(ffB,p€B0p€B4záB4
+B8
+B<\B<B@£×BD£×BH®BHžRBLžRBPÂBPÌÍBT×
+BX×
+BXáHB\ë
+B`ë
+BdõÃBe  Bi  Bm
+=Bm{Bq
+žBu
+žBy(öBy33B}33¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+
+=B
+
+=B{B
+žB(öB(öB
+33B =qB =qB$G®B(QìB(\)B,\)B0ffB4p€B4p€B8záB<
+B<
+B@\BDBH£×BH£×BL®BPžRBPžRBTÂBXÌÍBX×
+B\×
+B`áHBdë
+Bdë
+BhõÃBm  Bm  Bq
+=Bu{By
+žBy
+žB}(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+  B
+=B
+=B{B
+žB
+(öB (öB 33B$=qB(=qB(G®B,QìB0\)B4\)B4ffB8p€B<p€B<záB@
+BD
+BH\BHBL£×BP£×BP®BTžRBXžRBXÂB\ÌÍB`×
+Bd×
+BdáHBhë
+Blë
+BlõÃBq  Bu  By
+=By{B}
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+=B
+=B
+{B 
+žB (öB$(öB(33B(=qB,=qB0G®B4QìB4\)B8\)B<ffB<p€B@p€BDzáBH
+BH
+BL\BPBP£×BT£×BX®BXžRB\žRB`ÂBdÌÍBd×
+Bh×
+BláHBlë
+Bpë
+BtõÃBy  By  B}
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+
+=B 
+=B {B$
+žB((öB((öB,33B0=qB4=qB4G®B8QìB<\)B<\)B@ffBDp€BHp€BHzáBL
+BP
+BP\BTBX£×BX£×B\®B`žRBdžRBdÂBhÌÍBl×
+Bl×
+BpáHBtë
+Bxë
+BxõÃB}  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B   B 
+=B$
+=B({B(
+žB,(öB0(öB433B4=qB8=qB<G®B<QìB@\)BD\)BHffBHp€BLp€BPzáBP
+BT
+BX\BXB\£×B`£×Bd®BdžRBhžRBlÂBlÌÍBp×
+Bt×
+BxáHBxë
+B|ë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B$  B(
+=B(
+=B,{B0
+žB4(öB4(öB833B<=qB<=qB@G®BDQìBH\)BH\)BLffBPp€BPp€BTzáBX
+BX
+B\\B`Bd£×Bd£×Bh®BlžRBlžRBpÂBtÌÍBx×
+Bx×
+B|áH¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B(  B,
+=B0
+=B4{B4
+žB8(öB<(öB<33B@=qBD=qBHG®BHQìBL\)BP\)BPffBTp€BXp€BXzáB\
+B`
+Bd\BdBh£×Bl£×Bl®BpžRBtžRBxÂBxÌÍB|×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B0  B4
+=B4
+=B8{B<
+žB<(öB@(öBD33BH=qBH=qBLG®BPQìBP\)BT\)BXffBXp€B\p€B`záBd
+Bd
+Bh\BlBl£×Bp£×Bt®BxžRBxžRB|Â¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B4  B8
+=B<
+=B<{B@
+žBD(öBH(öBH33BL=qBP=qBPG®BTQìBX\)BX\)B\ffB`p€Bdp€BdzáBh
+Bl
+Bl\BpBt£×Bx£×Bx®B|žR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B<  B<
+=B@
+=BD{BH
+žBH(öBL(öBP33BP=qBT=qBXG®BXQìB\\)B`\)BdffBdp€Bhp€BlzáBl
+Bp
+Bt\BxBx£×B|£×¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B@  BD
+=BH
+=BH{BL
+žBP(öBP(öBT33BX=qBX=qB\G®B`QìBd\)Bd\)BhffBlp€Blp€BpzáBt
+Bx
+Bx\B|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BH  BH
+=BL
+=BP{BP
+žBT(öBX(öBX33B\=qB`=qBdG®BdQìBh\)Bl\)BlffBpp€Btp€BxzáBx
+B|
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BL  BP
+=BP
+=BT{BX
+žBX(öB\(öB`33Bd=qBd=qBhG®BlQìBl\)Bp\)BtffBxp€Bxp€B|zá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BP  BT
+=BX
+=BX{B\
+žB`(öBd(öBd33Bh=qBl=qBlG®BpQìBt\)Bx\)BxffB|p€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BX  BX
+=B\
+=B`{Bd
+žBd(öBh(öBl33Bl=qBp=qBtG®BxQìBx\)B|\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B\  B`
+=Bd
+=Bd{Bh
+žBl(öBl(öBp33Bt=qBx=qBxG®B|Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bd  Bd
+=Bh
+=Bl{Bl
+žBp(öBt(öBx33Bx=qB|=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bh  Bl
+=Bl
+=Bp{Bt
+žBx(öBx(öB|33¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bl  Bp
+=Bt
+=Bx{Bx
+žB|(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bt  Bx
+=Bx
+=B|{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bx  B|
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 <#×
+<£×
+<õÂ=#×
+=LÌÍ=uÂ=\)=£×
+=žQì=ÌÌÍ=áG®=õÂ>
+ž>\)>>#×
+>.{>8Qì>B\>LÌÍ>W
+=>aG®>k
+>uÂ>  >
+
+ž>=q>\)>zá>>žR>£×
+>šõÃ>®{>³33>žQì>œp€>Â\>Ç®>ÌÌÍ>Ñë
+>×
+=>Ü(ö>áG®>æff>ë
+>ð£×>õÂ>úáH?   ?\?
+ž?®?
+=q?
+ÌÍ?\)?ë
+?zá?
+=??
+(ö?
+žR?!G®?  ?G®?\?×
+?
+
+ž?ff?®?õÃ?=q?
+?ÌÍ?{?\)?£×?ë
+?33?zá?Â?
+>?Qì??áH?(ö?p€?žR?   ?¡G®?¢\?£×
+?¥
+ž?Šff?§®?šõÂ?ª=q?«
+?¬ÌÍ?®{?¯\)?°£×?±ë
+?³33?Žzá?µÂ?·
+>?žQì?¹?ºáH?Œ(ö?œp€?ŸžR?À  ?ÁG®?Â\?Ã×
+?Å
+ž?Æff?Ç®?ÈõÂ?Ê=p?Ë
+
+?ÌÌÍ?Î{?Ï\)?Ð£×@   @ £×@G®@ë
+@\@33@×
+@zá@
+ž@Â@ff@
+=@®@Qì@õÃ@	@
+=q@
+áH@
+
+@
+(ö@
+ÌÍ@
+p€@{@žR@\)@  @£×@G®@ë
+@\@33@×
+@zá@
+ž@Â@ff@
+>@®@Qì@õÂ@@=q@áH@
+@
+(ö@
+ÌÍ@
+p€@
+{@
+žR@\)@   @ £×@!G®@!ë
+@"\@#33@#×
+@$zá@%
+ž@%Â@&ff@'
+>@'®@(Qì@@  @@£×@AG®@Aë
+@B\@C33@C×
+@Dzá@E
+ž@EÂ@Fff@G
+=@G®@HQì@HõÃ@I@J=q@JáH@K
+@L(ö@LÌÍ@Mp€@N{@NžR@O\)@P  @P£×@QG®@Që
+@R\@S33@S×
+@Tzá@U
+ž@UÂ@Vff@W
+>@W®@XQì@XõÂ@Y@Z=q@ZáH@[
+@\(ö@\ÌÍ@]p€@^{@^žR@_\)@`  @`£×@aG®@aë
+@b\@c33@c×
+@dzá@e
+ž@eÂ@fff@g
+>@g®@hQì@  @Qì@£×@õÃ@G®@@ë
+@=q@\@áH@33@
+@×
+@(ö@zá@ÌÍ@
+
+ž@
+p€@
+Â@{@ff@žR@
+=@\)@®@  @Qì@£×@õÃ@G®@@ë
+@=q@\@áH@33@
+@×
+@(ö@zá@ÌÍ@
+ž@p€@Â@{@ff@žR@
+=@\)@®@  @Qì@£×@õÂ@G®@@ë
+@=q@\@áH@33@
+@×
+@(ö@   @ Qì@ £×@ õÃ@¡G®@¡@¡ë
+@¢=q@¢\@¢áH@£33@£
+@£×
+@€(ö@€zá@€ÌÍ@¥
+ž@¥p€@¥Â@Š{@Šff@ŠžR@§
+=@§\)@§®@š  @šQì@š£×@šõÃ@©G®@©@©ë
+@ª=q@ª\@ªáH@«33@«
+@«×
+@¬(ö@¬zá@¬ÌÍ@­
+ž@­p€@­Â@®{@®ff@®žR@¯
+=@¯\)@¯®@°  @°Qì@°£×@°õÂ@±G®@±@±ë
+@²=q@²\@²áH@³33@³
+@³×
+@Ž(ö@À  @ÀQì@À£×@ÀõÃ@ÁG®@Á@Áë
+@Â=q@Â\@ÂáH@Ã33@Ã
+@Ã×
+@Ä(ö@Äzá@ÄÌÍ@Å
+ž@Åp€@ÅÂ@Æ{@Æff@ÆžR@Ç
+=@Ç\)@Ç®@È  @ÈQì@È£×@ÈõÃ@ÉG®@É@Éë
+@Ê=q@Ê\@ÊáH@Ë33@Ë
+@Ë×
+@Ì(ö@Ìzá@ÌÌÍ@Í
+ž@Íp€@ÍÂ@Î{@Îff@ÎžR@Ï
+=@Ï\)@Ï®@Ð  @ÐQì@Ð£×@ÐõÂ@ÑG®@Ñ@Ñë
+@Ò=q@Ò\@ÒáH@Ó33@Ó
+@Ó×
+@Ô(ö@à  @àQì@à£×@àõÃ@áG®@á@áë
+@â=q@â\@âáH@ã33@ã
+@ã×
+@ä(ö@äzá@äÌÍ@å
+ž@åp€@åÂ@æ{@æff@æžR@ç
+=@ç\)@ç®@è  @èQì@è£×@èõÃ@éG®@é@éë
+@ê=q@ê\@êáH@ë33@ë
+@ë×
+@ì(ö@ìzá@ìÌÍ@í
+ž@íp€@íÂ@î{@îff@îžR@ï
+=@ï\)@ï®@ð  @ðQì@ð£×@ðõÂ@ñG®@ñ@ñë
+@ò=q@ò\@òáH@ó33@ó
+@ó×
+@ô(öA   A (öA QìA záA £×A ÌÍA õÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA	
+žA	G®A	p€A	A	ÂA	ë
+A
+{A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A=qAffA\AžRAáHA
+=A33A\)A
+A®A×
+A  A(öAQìAzáA£×AÌÍAõÃA
+žAG®Ap€AAÂAë
+A{A   A (öA QìA záA £×A ÌÍA õÃA!
+žA!G®A!p€A!A!ÂA!ë
+A"{A"=qA"ffA"\A"žRA"áHA#
+=A#33A#\)A#
+A#®A#×
+A$  A$(öA$QìA$záA$£×A$ÌÍA$õÃA%
+žA%G®A%p€A%A%ÂA%ë
+A&{A&=qA&ffA&\A&žRA&áHA'
+=A'33A'\)A'
+A'®A'×
+A(  A((öA(QìA(záA(£×A(ÌÍA(õÃA)
+žA)G®A)p€A)A)ÂA)ë
+A*{A0  A0(öA0QìA0záA0£×A0ÌÍA0õÃA1
+žA1G®A1p€A1A1ÂA1ë
+A2{A2=qA2ffA2\A2žRA2áHA3
+=A333A3\)A3
+A3®A3×
+A4  A4(öA4QìA4záA4£×A4ÌÍA4õÃA5
+žA5G®A5p€A5A5ÂA5ë
+A6{A6=qA6ffA6\A6žRA6áHA7
+=A733A7\)A7
+A7®A7×
+A8  A8(öA8QìA8záA8£×A8ÌÍA8õÃA9
+žA9G®A9p€A9A9ÂA9ë
+A:{A@  A@(öA@QìA@záA@£×A@ÌÍA@õÃAA
+žAAG®AAp€AAAAÂAAë
+AB{AB=qABffAB\ABžRABáHAC
+=AC33AC\)AC
+AC®AC×
+AD  AD(öADQìADzáAD£×ADÌÍADõÃAE
+žAEG®AEp€AEAEÂAEë
+AF{AF=qAFffAF\AFžRAFáHAG
+=AG33AG\)AG
+AG®AG×
+AH  AH(öAHQìAHzáAH£×AHÌÍAHõÃAI
+žAIG®AIp€AIAIÂAIë
+AJ{AP  AP(öAPQìAPzáAP£×APÌÍAPõÃAQ
+žAQG®AQp€AQAQÂAQë
+AR{AR=qARffAR\ARžRARáHAS
+=AS33AS\)AS
+AS®AS×
+AT  AT(öATQìATzáAT£×ATÌÍATõÃAU
+žAUG®AUp€AUAUÂAUë
+AV{AV=qAVffAV\AVžRAVáHAW
+=AW33AW\)AW
+AW®AW×
+AX  AX(öAXQìAXzáAX£×AXÌÍAXõÃAY
+žAYG®AYp€AYAYÂAYë
+AZ{A`  A`(öA`QìA`záA`£×A`ÌÍA`õÃAa
+žAaG®Aap€AaAaÂAaë
+Ab{Ab=qAbffAb\AbžRAbáHAc
+=Ac33Ac\)Ac
+Ac®Ac×
+Ad  Ad(öAdQìAdzáAd£×AdÌÍAdõÃAe
+žAeG®Aep€AeAeÂAeë
+Af{Af=qAfffAf\AfžRAfáHAg
+=Ag33Ag\)Ag
+Ag®Ag×
+Ah  Ah(öAhQìAhzáAh£×AhÌÍAhõÃAi
+žAiG®Aip€AiAiÂAië
+Aj{Ap  Ap(öApQìApzáAp£×ApÌÍApõÃAq
+žAqG®Aqp€AqAqÂAqë
+Ar{Ar=qArffAr\AržRAráHAs
+=As33As\)As
+As®As×
+At  At(öAtQìAtzáAt£×AtÌÍAtõÃAu
+žAuG®Aup€AuAuÂAuë
+Av{Av=qAvffAv\AvžRAváHAw
+=Aw33Aw\)Aw
+Aw®Aw×
+Ax  Ax(öAxQìAxzáAx£×AxÌÍAxõÃAy
+žAyG®Ayp€AyAyÂAyë
+Az{A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+
+=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A
+žA33AG®A\)Ap€A
+AA®AÂA×
+Aë
+A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
+=A   A {A (öA =qA QìA ffA záA \A £×A žRA ÌÍA áHA õÃA¡
+=A¡
+žA¡33A¡G®A¡\)A¡p€A¡
+A¡A¡®A¡ÂA¡×
+A¡ë
+A¢  A¢{A¢(öA¢=qA¢QìA¢ffA¢záA¢\A¢£×A¢žRA¢ÌÍA¢áHA¢õÃA£
+=A£
+žA£33A£G®A£\)A£p€A£
+A£A£®A£ÂA£×
+A£ë
+A€  A€{A€(öA€=qA€QìA€ffA€záA€\A€£×A€žRA€ÌÍA€áHA€õÃA¥
+=Aš  Aš{Aš(öAš=qAšQìAšffAšzáAš\Aš£×AšžRAšÌÍAšáHAšõÃA©
+=A©
+žA©33A©G®A©\)A©p€A©
+A©A©®A©ÂA©×
+A©ë
+Aª  Aª{Aª(öAª=qAªQìAªffAªzáAª\Aª£×AªžRAªÌÍAªáHAªõÃA«
+=A«
+žA«33A«G®A«\)A«p€A«
+A«A«®A«ÂA«×
+A«ë
+A¬  A¬{A¬(öA¬=qA¬QìA¬ffA¬záA¬\A¬£×A¬žRA¬ÌÍA¬áHA¬õÃA­
+=A°  A°{A°(öA°=qA°QìA°ffA°záA°\A°£×A°žRA°ÌÍA°áHA°õÃA±
+=A±
+žA±33A±G®A±\)A±p€A±
+A±A±®A±ÂA±×
+A±ë
+A²  A²{A²(öA²=qA²QìA²ffA²záA²\A²£×A²žRA²ÌÍA²áHA²õÃA³
+=A³
+žA³33A³G®A³\)A³p€A³
+A³A³®A³ÂA³×
+A³ë
+AŽ  AŽ{AŽ(öAŽ=qAŽQìAŽffAŽzáAŽ\AŽ£×AŽžRAŽÌÍAŽáHAŽõÃAµ
+=Až  Až{Až(öAž=qAžQìAžffAžzáAž\Až£×AžžRAžÌÍAžáHAžõÃA¹
+=A¹
+žA¹33A¹G®A¹\)A¹p€A¹
+A¹A¹®A¹ÂA¹×
+A¹ë
+Aº  Aº{Aº(öAº=qAºQìAºffAºzáAº\Aº£×AºžRAºÌÍAºáHAºõÃA»
+=A»
+žA»33A»G®A»\)A»p€A»
+A»A»®A»ÂA»×
+A»ë
+AŒ  AŒ{AŒ(öAŒ=qAŒQìAŒffAŒzáAŒ\AŒ£×AŒžRAŒÌÍAŒáHAŒõÃAœ
+=AÀ  AÀ{AÀ(öAÀ=qAÀQìAÀffAÀzáAÀ\AÀ£×AÀžRAÀÌÍAÀáHAÀõÃAÁ
+=AÁ
+žAÁ33AÁG®AÁ\)AÁp€AÁ
+AÁAÁ®AÁÂAÁ×
+AÁë
+AÂ  AÂ{AÂ(öAÂ=qAÂQìAÂffAÂzáAÂ\AÂ£×AÂžRAÂÌÍAÂáHAÂõÃAÃ
+=AÃ
+žAÃ33AÃG®AÃ\)AÃp€AÃ
+AÃAÃ®AÃÂAÃ×
+AÃë
+AÄ  AÄ{AÄ(öAÄ=qAÄQìAÄffAÄzáAÄ\AÄ£×AÄžRAÄÌÍAÄáHAÄõÃAÅ
+=AÈ  AÈ{AÈ(öAÈ=qAÈQìAÈffAÈzáAÈ\AÈ£×AÈžRAÈÌÍAÈáHAÈõÃAÉ
+=AÉ
+žAÉ33AÉG®AÉ\)AÉp€AÉ
+AÉAÉ®AÉÂAÉ×
+AÉë
+AÊ  AÊ{AÊ(öAÊ=qAÊQìAÊffAÊzáAÊ\AÊ£×AÊžRAÊÌÍAÊáHAÊõÃAË
+=AË
+žAË33AËG®AË\)AËp€AË
+AËAË®AËÂAË×
+AËë
+AÌ  AÌ{AÌ(öAÌ=qAÌQìAÌffAÌzáAÌ\AÌ£×AÌžRAÌÌÍAÌáHAÌõÃAÍ
+=AÐ  AÐ{AÐ(öAÐ=qAÐQìAÐffAÐzáAÐ\AÐ£×AÐžRAÐÌÍAÐáHAÐõÃAÑ
+=AÑ
+žAÑ33AÑG®AÑ\)AÑp€AÑ
+AÑAÑ®AÑÂAÑ×
+AÑë
+AÒ  AÒ{AÒ(öAÒ=qAÒQìAÒffAÒzáAÒ\AÒ£×AÒžRAÒÌÍAÒáHAÒõÃAÓ
+=AÓ
+žAÓ33AÓG®AÓ\)AÓp€AÓ
+AÓAÓ®AÓÂAÓ×
+AÓë
+AÔ  AÔ{AÔ(öAÔ=qAÔQìAÔffAÔzáAÔ\AÔ£×AÔžRAÔÌÍAÔáHAÔõÃAÕ
+=AØ  AØ{AØ(öAØ=qAØQìAØffAØzáAØ\AØ£×AØžRAØÌÍAØáHAØõÃAÙ
+=AÙ
+žAÙ33AÙG®AÙ\)AÙp€AÙ
+AÙAÙ®AÙÂAÙ×
+AÙë
+AÚ  AÚ{AÚ(öAÚ=qAÚQìAÚffAÚzáAÚ\AÚ£×AÚžRAÚÌÍAÚáHAÚõÃAÛ
+=AÛ
+žAÛ33AÛG®AÛ\)AÛp€AÛ
+AÛAÛ®AÛÂAÛ×
+AÛë
+AÜ  AÜ{AÜ(öAÜ=qAÜQìAÜffAÜzáAÜ\AÜ£×AÜžRAÜÌÍAÜáHAÜõÃAÝ
+=Aà  Aà{Aà(öAà=qAàQìAàffAàzáAà\Aà£×AàžRAàÌÍAàáHAàõÃAá
+=Aá
+žAá33AáG®Aá\)Aáp€Aá
+AáAá®AáÂAá×
+Aáë
+Aâ  Aâ{Aâ(öAâ=qAâQìAâffAâzáAâ\Aâ£×AâžRAâÌÍAâáHAâõÃAã
+=Aã
+žAã33AãG®Aã\)Aãp€Aã
+AãAã®AãÂAã×
+Aãë
+Aä  Aä{Aä(öAä=qAäQìAäffAäzáAä\Aä£×AäžRAäÌÍAäáHAäõÃAå
+=Aè  Aè{Aè(öAè=qAèQìAèffAèzáAè\Aè£×AèžRAèÌÍAèáHAèõÃAé
+=Aé
+žAé33AéG®Aé\)Aép€Aé
+AéAé®AéÂAé×
+Aéë
+Aê  Aê{Aê(öAê=qAêQìAêffAêzáAê\Aê£×AêžRAêÌÍAêáHAêõÃAë
+=Aë
+žAë33AëG®Aë\)Aëp€Aë
+AëAë®AëÂAë×
+Aëë
+Aì  Aì{Aì(öAì=qAìQìAìffAìzáAì\Aì£×AìžRAìÌÍAìáHAìõÃAí
+=Að  Að{Að(öAð=qAðQìAðffAðzáAð\Að£×AðžRAðÌÍAðáHAðõÃAñ
+=Añ
+žAñ33AñG®Añ\)Añp€Añ
+AñAñ®AñÂAñ×
+Añë
+Aò  Aò{Aò(öAò=qAòQìAòffAòzáAò\Aò£×AòžRAòÌÍAòáHAòõÃAó
+=Aó
+žAó33AóG®Aó\)Aóp€Aó
+AóAó®AóÂAó×
+Aóë
+Aô  Aô{Aô(öAô=qAôQìAôffAôzáAô\Aô£×AôžRAôÌÍAôáHAôõÃAõ
+=Aø  Aø{Aø(öAø=qAøQìAøffAøzáAø\Aø£×AøžRAøÌÍAøáHAøõÃAù
+=Aù
+žAù33AùG®Aù\)Aùp€Aù
+AùAù®AùÂAù×
+Aùë
+Aú  Aú{Aú(öAú=qAúQìAúffAúzáAú\Aú£×AúžRAúÌÍAúáHAúõÃAû
+=Aû
+žAû33AûG®Aû\)Aûp€Aû
+AûAû®AûÂAû×
+Aûë
+Aü  Aü{Aü(öAü=qAüQìAüffAüzáAü\Aü£×AüžRAüÌÍAüáHAüõÃAý
+=B   B 
+=B {B 
+žB (öB 33B =qB G®B QìB \)B ffB p€B záB 
+B \B B £×B ®B žRB ÂB ÌÍB ×
+B áHB ë
+B õÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB	  B	
+=B	{B	
+žB	(öB	33B	=qB	G®B	QìB	\)B	ffB	p€B	záB	
+B	\B	B	£×B	®B	žRB	ÂB	ÌÍB	×
+B	áHB	ë
+B	õÃB
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB
+  B
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B\BB£×B®BžRBÂBÌÍB×
+BáHBë
+BõÃB  B
+=B{B
+žB(öB33B=qBG®BQìB\)BffBp€BzáB
+B
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B
+\B
+B
+£×B
+®B
+žRB
+ÂB
+ÌÍB
+×
+B
+áHB
+ë
+B
+õÃB
+  B
+
+=B
+{B
+
+žB
+(öB
+33B
+=qB
+G®B
+QìB
+\)B
+ffB
+p€B
+záB
+
+B   B 
+=B {B 
+žB (öB 33B =qB G®B QìB \)B ffB p€B záB 
+B \B B £×B ®B žRB ÂB ÌÍB ×
+B áHB ë
+B õÃB!  B!
+=B!{B!
+žB!(öB!33B!=qB!G®B!QìB!\)B!ffB!p€B!záB!
+B!\B!B!£×B!®B!žRB!ÂB!ÌÍB!×
+B!áHB!ë
+B!õÃB"  B"
+=B"{B"
+žB"(öB"33B"=qB"G®B"QìB"\)B"ffB"p€B"záB"
+B$  B$
+=B${B$
+žB$(öB$33B$=qB$G®B$QìB$\)B$ffB$p€B$záB$
+B$\B$B$£×B$®B$žRB$ÂB$ÌÍB$×
+B$áHB$ë
+B$õÃB%  B%
+=B%{B%
+žB%(öB%33B%=qB%G®B%QìB%\)B%ffB%p€B%záB%
+B%\B%B%£×B%®B%žRB%ÂB%ÌÍB%×
+B%áHB%ë
+B%õÃB&  B&
+=B&{B&
+žB&(öB&33B&=qB&G®B&QìB&\)B&ffB&p€B&záB&
+B(  B(
+=B({B(
+žB((öB(33B(=qB(G®B(QìB(\)B(ffB(p€B(záB(
+B(\B(B(£×B(®B(žRB(ÂB(ÌÍB(×
+B(áHB(ë
+B(õÃB)  B)
+=B){B)
+žB)(öB)33B)=qB)G®B)QìB)\)B)ffB)p€B)záB)
+B)\B)B)£×B)®B)žRB)ÂB)ÌÍB)×
+B)áHB)ë
+B)õÃB*  B*
+=B*{B*
+žB*(öB*33B*=qB*G®B*QìB*\)B*ffB*p€B*záB*
+B,  B,
+=B,{B,
+žB,(öB,33B,=qB,G®B,QìB,\)B,ffB,p€B,záB,
+B,\B,B,£×B,®B,žRB,ÂB,ÌÍB,×
+B,áHB,ë
+B,õÃB-  B-
+=B-{B-
+žB-(öB-33B-=qB-G®B-QìB-\)B-ffB-p€B-záB-
+B-\B-B-£×B-®B-žRB-ÂB-ÌÍB-×
+B-áHB-ë
+B-õÃB.  B.
+=B.{B.
+žB.(öB.33B.=qB.G®B.QìB.\)B.ffB.p€B.záB.
+B0  B0
+=B0{B0
+žB0(öB033B0=qB0G®B0QìB0\)B0ffB0p€B0záB0
+B0\B0B0£×B0®B0žRB0ÂB0ÌÍB0×
+B0áHB0ë
+B0õÃB1  B1
+=B1{B1
+žB1(öB133B1=qB1G®B1QìB1\)B1ffB1p€B1záB1
+B1\B1B1£×B1®B1žRB1ÂB1ÌÍB1×
+B1áHB1ë
+B1õÃB2  B2
+=B2{B2
+žB2(öB233B2=qB2G®B2QìB2\)B2ffB2p€B2záB2
+B4  B4
+=B4{B4
+žB4(öB433B4=qB4G®B4QìB4\)B4ffB4p€B4záB4
+B4\B4B4£×B4®B4žRB4ÂB4ÌÍB4×
+B4áHB4ë
+B4õÃB5  B5
+=B5{B5
+žB5(öB533B5=qB5G®B5QìB5\)B5ffB5p€B5záB5
+B5\B5B5£×B5®B5žRB5ÂB5ÌÍB5×
+B5áHB5ë
+B5õÃB6  B6
+=B6{B6
+žB6(öB633B6=qB6G®B6QìB6\)B6ffB6p€B6záB6
+B8  B8
+=B8{B8
+žB8(öB833B8=qB8G®B8QìB8\)B8ffB8p€B8záB8
+B8\B8B8£×B8®B8žRB8ÂB8ÌÍB8×
+B8áHB8ë
+B8õÃB9  B9
+=B9{B9
+žB9(öB933B9=qB9G®B9QìB9\)B9ffB9p€B9záB9
+B9\B9B9£×B9®B9žRB9ÂB9ÌÍB9×
+B9áHB9ë
+B9õÃB:  B:
+=B:{B:
+žB:(öB:33B:=qB:G®B:QìB:\)B:ffB:p€B:záB:
+B<  B<
+=B<{B<
+žB<(öB<33B<=qB<G®B<QìB<\)B<ffB<p€B<záB<
+B<\B<B<£×B<®B<žRB<ÂB<ÌÍB<×
+B<áHB<ë
+B<õÃB=  B=
+=B={B=
+žB=(öB=33B==qB=G®B=QìB=\)B=ffB=p€B=záB=
+B=\B=B=£×B=®B=žRB=ÂB=ÌÍB=×
+B=áHB=ë
+B=õÃB>  B>
+=B>{B>
+žB>(öB>33B>=qB>G®B>QìB>\)B>ffB>p€B>záB>
+B@  B@
+=B@{B@
+žB@(öB@33B@=qB@G®B@QìB@\)B@ffB@p€B@záB@
+B@\B@B@£×B@®B@žRB@ÂB@ÌÍB@×
+B@áHB@ë
+B@õÃBA  BA
+=BA{BA
+žBA(öBA33BA=qBAG®BAQìBA\)BAffBAp€BAzáBA
+BA\BABA£×BA®BAžRBAÂBAÌÍBA×
+BAáHBAë
+BAõÃBB  BB
+=BB{BB
+žBB(öBB33BB=qBBG®BBQìBB\)BBffBBp€BBzáBB
+BD  BD
+=BD{BD
+žBD(öBD33BD=qBDG®BDQìBD\)BDffBDp€BDzáBD
+BD\BDBD£×BD®BDžRBDÂBDÌÍBD×
+BDáHBDë
+BDõÃBE  BE
+=BE{BE
+žBE(öBE33BE=qBEG®BEQìBE\)BEffBEp€BEzáBE
+BE\BEBE£×BE®BEžRBEÂBEÌÍBE×
+BEáHBEë
+BEõÃBF  BF
+=BF{BF
+žBF(öBF33BF=qBFG®BFQìBF\)BFffBFp€BFzáBF
+BH  BH
+=BH{BH
+žBH(öBH33BH=qBHG®BHQìBH\)BHffBHp€BHzáBH
+BH\BHBH£×BH®BHžRBHÂBHÌÍBH×
+BHáHBHë
+BHõÃBI  BI
+=BI{BI
+žBI(öBI33BI=qBIG®BIQìBI\)BIffBIp€BIzáBI
+BI\BIBI£×BI®BIžRBIÂBIÌÍBI×
+BIáHBIë
+BIõÃBJ  BJ
+=BJ{BJ
+žBJ(öBJ33BJ=qBJG®BJQìBJ\)BJffBJp€BJzáBJ
+BL  BL
+=BL{BL
+žBL(öBL33BL=qBLG®BLQìBL\)BLffBLp€BLzáBL
+BL\BLBL£×BL®BLžRBLÂBLÌÍBL×
+BLáHBLë
+BLõÃBM  BM
+=BM{BM
+žBM(öBM33BM=qBMG®BMQìBM\)BMffBMp€BMzáBM
+BM\BMBM£×BM®BMžRBMÂBMÌÍBM×
+BMáHBMë
+BMõÃBN  BN
+=BN{BN
+žBN(öBN33BN=qBNG®BNQìBN\)BNffBNp€BNzáBN
+BP  BP
+=BP{BP
+žBP(öBP33BP=qBPG®BPQìBP\)BPffBPp€BPzáBP
+BP\BPBP£×BP®BPžRBPÂBPÌÍBP×
+BPáHBPë
+BPõÃBQ  BQ
+=BQ{BQ
+žBQ(öBQ33BQ=qBQG®BQQìBQ\)BQffBQp€BQzáBQ
+BQ\BQBQ£×BQ®BQžRBQÂBQÌÍBQ×
+BQáHBQë
+BQõÃBR  BR
+=BR{BR
+žBR(öBR33BR=qBRG®BRQìBR\)BRffBRp€BRzáBR
+BT  BT
+=BT{BT
+žBT(öBT33BT=qBTG®BTQìBT\)BTffBTp€BTzáBT
+BT\BTBT£×BT®BTžRBTÂBTÌÍBT×
+BTáHBTë
+BTõÃBU  BU
+=BU{BU
+žBU(öBU33BU=qBUG®BUQìBU\)BUffBUp€BUzáBU
+BU\BUBU£×BU®BUžRBUÂBUÌÍBU×
+BUáHBUë
+BUõÃBV  BV
+=BV{BV
+žBV(öBV33BV=qBVG®BVQìBV\)BVffBVp€BVzáBV
+BX  BX
+=BX{BX
+žBX(öBX33BX=qBXG®BXQìBX\)BXffBXp€BXzáBX
+BX\BXBX£×BX®BXžRBXÂBXÌÍBX×
+BXáHBXë
+BXõÃBY  BY
+=BY{BY
+žBY(öBY33BY=qBYG®BYQìBY\)BYffBYp€BYzáBY
+BY\BYBY£×BY®BYžRBYÂBYÌÍBY×
+BYáHBYë
+BYõÃBZ  BZ
+=BZ{BZ
+žBZ(öBZ33BZ=qBZG®BZQìBZ\)BZffBZp€BZzáBZ
+B\  B\
+=B\{B\
+žB\(öB\33B\=qB\G®B\QìB\\)B\ffB\p€B\záB\
+B\\B\B\£×B\®B\žRB\ÂB\ÌÍB\×
+B\áHB\ë
+B\õÃB]  B]
+=B]{B]
+žB](öB]33B]=qB]G®B]QìB]\)B]ffB]p€B]záB]
+B]\B]B]£×B]®B]žRB]ÂB]ÌÍB]×
+B]áHB]ë
+B]õÃB^  B^
+=B^{B^
+žB^(öB^33B^=qB^G®B^QìB^\)B^ffB^p€B^záB^
+B`  B`
+=B`{B`
+žB`(öB`33B`=qB`G®B`QìB`\)B`ffB`p€B`záB`
+B`\B`B`£×B`®B`žRB`ÂB`ÌÍB`×
+B`áHB`ë
+B`õÃBa  Ba
+=Ba{Ba
+žBa(öBa33Ba=qBaG®BaQìBa\)BaffBap€BazáBa
+Ba\BaBa£×Ba®BažRBaÂBaÌÍBa×
+BaáHBaë
+BaõÃBb  Bb
+=Bb{Bb
+žBb(öBb33Bb=qBbG®BbQìBb\)BbffBbp€BbzáBb
+Bd  Bd
+=Bd{Bd
+žBd(öBd33Bd=qBdG®BdQìBd\)BdffBdp€BdzáBd
+Bd\BdBd£×Bd®BdžRBdÂBdÌÍBd×
+BdáHBdë
+BdõÃBe  Be
+=Be{Be
+žBe(öBe33Be=qBeG®BeQìBe\)BeffBep€BezáBe
+Be\BeBe£×Be®BežRBeÂBeÌÍBe×
+BeáHBeë
+BeõÃBf  Bf
+=Bf{Bf
+žBf(öBf33Bf=qBfG®BfQìBf\)BfffBfp€BfzáBf
+Bh  Bh
+=Bh{Bh
+žBh(öBh33Bh=qBhG®BhQìBh\)BhffBhp€BhzáBh
+Bh\BhBh£×Bh®BhžRBhÂBhÌÍBh×
+BháHBhë
+BhõÃBi  Bi
+=Bi{Bi
+žBi(öBi33Bi=qBiG®BiQìBi\)BiffBip€BizáBi
+Bi\BiBi£×Bi®BižRBiÂBiÌÍBi×
+BiáHBië
+BiõÃBj  Bj
+=Bj{Bj
+žBj(öBj33Bj=qBjG®BjQìBj\)BjffBjp€BjzáBj
+Bl  Bl
+=Bl{Bl
+žBl(öBl33Bl=qBlG®BlQìBl\)BlffBlp€BlzáBl
+Bl\BlBl£×Bl®BlžRBlÂBlÌÍBl×
+BláHBlë
+BlõÃBm  Bm
+=Bm{Bm
+žBm(öBm33Bm=qBmG®BmQìBm\)BmffBmp€BmzáBm
+Bm\BmBm£×Bm®BmžRBmÂBmÌÍBm×
+BmáHBmë
+BmõÃBn  Bn
+=Bn{Bn
+žBn(öBn33Bn=qBnG®BnQìBn\)BnffBnp€BnzáBn
+Bp  Bp
+=Bp{Bp
+žBp(öBp33Bp=qBpG®BpQìBp\)BpffBpp€BpzáBp
+Bp\BpBp£×Bp®BpžRBpÂBpÌÍBp×
+BpáHBpë
+BpõÃBq  Bq
+=Bq{Bq
+žBq(öBq33Bq=qBqG®BqQìBq\)BqffBqp€BqzáBq
+Bq\BqBq£×Bq®BqžRBqÂBqÌÍBq×
+BqáHBqë
+BqõÃBr  Br
+=Br{Br
+žBr(öBr33Br=qBrG®BrQìBr\)BrffBrp€BrzáBr
+Bt  Bt
+=Bt{Bt
+žBt(öBt33Bt=qBtG®BtQìBt\)BtffBtp€BtzáBt
+Bt\BtBt£×Bt®BtžRBtÂBtÌÍBt×
+BtáHBtë
+BtõÃBu  Bu
+=Bu{Bu
+žBu(öBu33Bu=qBuG®BuQìBu\)BuffBup€BuzáBu
+Bu\BuBu£×Bu®BužRBuÂBuÌÍBu×
+BuáHBuë
+BuõÃBv  Bv
+=Bv{Bv
+žBv(öBv33Bv=qBvG®BvQìBv\)BvffBvp€BvzáBv
+Bx  Bx
+=Bx{Bx
+žBx(öBx33Bx=qBxG®BxQìBx\)BxffBxp€BxzáBx
+Bx\BxBx£×Bx®BxžRBxÂBxÌÍBx×
+BxáHBxë
+BxõÃBy  By
+=By{By
+žBy(öBy33By=qByG®ByQìBy\)ByffByp€ByzáBy
+By\ByBy£×By®ByžRByÂByÌÍBy×
+ByáHByë
+ByõÃBz  Bz
+=Bz{Bz
+žBz(öBz33Bz=qBzG®BzQìBz\)BzffBzp€BzzáBz
+B|  B|
+=B|{B|
+žB|(öB|33B|=qB|G®B|QìB|\)B|ffB|p€B|záB|
+B|\B|B|£×B|®B|žRB|ÂB|ÌÍB|×
+B|áHB|ë
+B|õÃB}  B}
+=B}{B}
+žB}(öB}33B}=qB}G®B}QìB}\)B}ffB}p€B}záB}
+B}\B}B}£×B}®B}žRB}ÂB}ÌÍB}×
+B}áHB}ë
+B}õÃB~  B~
+=B~{B~
+žB~(öB~33B~=qB~G®B~QìB~\)B~ffB~p€B~záB~
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?  <#×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @   ?G®?G®<£×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @  @@£×@ £×?\?×
+=#×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @   @Qì@Qì@AG®@ë
+?
+
+ž?
+
+ž=LÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @À  @ÀQì@ Qì@£×@õÃ@B\@\?ff?®=uÂ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A   @àQì@ÀQì@À£×@ õÃ@G®@G®@C33@×
+?®?õÃ=£×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A(öA (ö@à£×@ÀõÃ@ÁG®@¡G®@@ë
+@C×
+@zá?=q?
+=žQì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A0  A (öA(öAQìA zá@áG®@ÁG®@Á@¡ë
+@ë
+@=q@E
+ž@Â?
+?ÌÍ=áG®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A@  A0(öA0(öA QìAzáA£×A £×@á@Áë
+@Áë
+@¢=q@\@áH@EÂ@ff?{?{=õÂ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AP  AP(öA@(öA0QìA0záA £×A£×AÌÍA õÃ@áë
+@Â=q@Â\@¢áH@áH@33@G
+=@
+=?\)?£×>
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Ap  A`(öAP(öAPQìA@záA0£×A0£×A ÌÍAõÃAõÃA
+ž@â\@ÂáH@ÂáH@£33@
+@
+@G®@Qì?£×?ë
+>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A{Ap(öA`QìAPzáAP£×A@£×A0ÌÍA0õÃA õÃA
+žAG®Ap€@âáH@Ã33@Ã
+@£
+@×
+@(ö@HQì@õÃ?33?zá>#×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A{A{A(öApzáA`£×AP£×APÌÍA@õÃA0õÃA1
+žA!G®Ap€Ap€A@ã
+@Ã
+@Ã×
+@€(ö@(ö@zá@I@
+=q?zá?Â>8Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A  A{A{A(öA=qAQìAp£×A`ÌÍAPõÃAPõÃAA
+žA1G®A1p€A!p€AAÂAÂ@ã×
+@Ä(ö@Ä(ö@€zá@ÌÍ@
+
+ž@J=q@
+áH?
+>?
+>>B\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aš  A {A{A(öA=qAQìAQìAffApõÃA`õÃAQ
+žAQG®AAp€A1p€A1A!ÂAÂAë
+A{@ä(ö@Äzá@ÄÌÍ@¥
+ž@
+
+ž@
+p€@K
+@
+
+?Qì?>W
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A°  Aš{Aš{A (öA=qAQìAQìAffAzáAzáAq
+žAaG®AQp€AQp€AAA1ÂA1ÂA!ë
+A{A{A=q@äÌÍ@Å
+ž@Å
+ž@¥p€@
+Â@
+Â@L(ö@
+ÌÍ?áH?áH>aG®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Až  Až{A°{Aš(öAš=qA QìAQìAffAzáAzáA\A£×Aqp€Aap€AQAQÂAAÂA1ë
+A2{A"{A=qAffA\@å
+ž@Åp€@ÅÂ@¥Â@{@ff@Mp€@
+p€?(ö?p€>k
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÈ  AÀ{Až{Až(öA°=qAšQìAšQìA ffAzáAzáA\A£×AžRAžRAqAaÂAQÂAQë
+AB{A2{A2=qA"ffA\A\AžR@åÂ@ÅÂ@Æ{@Šff@žR@žR@N{@žR?p€?žR>  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÐ  AÈ{AÈ{AÀ(öAž=qAžQìA°QìAšffAšzáA záA\A£×AžRAžRAÌÍAáHAqÂAaë
+AR{AR{AB=qA2ffA2\A"\AžRAáHAáH@æ{@Æff@ÆžR@ŠžR@
+=@\)@NžR@\)?   ?   >
+
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aà  AØ{AÐ{AÈ(öAÈ=qAÀQìAžQìAžffA°záAšzáAš\A £×AžRAžRAÌÍAáHAáHAõÃAr{Ab{AR=qARffAB\A2\A2žRA"áHAáHA
+=A33@æžR@ÆžR@Ç
+=@§\)@\)@®@P  @  ?¡G®?¢\>\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aè  Aà{Aà{AØ(öAÐ=qAÈQìAÈQìAÀffAžzáAžzáA°\Aš£×AšžRA žRAÌÍAáHAáHAõÃA
+=A
+=Ar=qAbffAR\AR\ABžRA2áHA2áHA#
+=A33A\)A\)@ç
+=@Ç\)@Ç\)@§®@  @  @P£×@G®?£×
+?£×
+>zá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Að  Að{Aè{Aà(öAà=qAØQìAÐQìAÈffAÈzáAÀzáAž\Až£×A°žRAšžRAšÌÍA áHAáHAõÃA
+=A
+=A
+žA33Ar\Ab\ARžRARáHABáHA3
+=A333A#\)A\)A
+A®@ç\)@Ç®@È  @š  @Qì@£×@Që
+@ë
+?¥
+ž?Šff>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B   Aø{Að{Að(öAè=qAàQìAàQìAØffAÐzáAÈzáAÈ\AÀ£×AžžRAžžRA°ÌÍAšáHAšáHA õÃA
+=A
+=A
+žA33AG®AG®AržRAbáHARáHAS
+=AC33A3\)A3\)A#
+A®A®A×
+@è  @È  @ÈQì@š£×@õÃ@õÃ@R\@33?Šff?§®>£×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+=B 
+=Aø(öAð=qAðQìAèQìAàffAàzáAØzáAÐ\AÈ£×AÈžRAÀžRAžÌÍAžáHA°áHAšõÃA©
+=A¡
+=A
+žA33AG®AG®A\)Ap€AráHAc
+=AS33AS\)AC\)A3
+A3®A#®A×
+A  A  @èQì@È£×@ÈõÃ@šõÃ@G®@@S33@×
+?šõÂ?ª=q>šõÃ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+  B
+=B
+=B{B 
+žAøQìAðQìAðffAèzáAàzáAà\AØ£×AÐžRAÈžRAÈÌÍAÀáHAžáHAžõÃA±
+=A©
+=A©
+žA¡33AG®AG®A\)Ap€Ap€A
+As33Ac\)AS\)AS
+AC®A3®A3×
+A$  A  A(öAQì@èõÃ@ÈõÃ@ÉG®@©@@ë
+@Tzá@
+ž?ª=q?«
+>³33¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+
+=B
+
+=B{B
+žB(öB (öAøffAðzáAðzáAè\Aà£×AàžRAØžRAÐÌÍAÈáHAÈáHAÀõÃA¹
+=A¹
+=A±
+žA©33A©G®A¡G®A\)Ap€Ap€A
+AA®As\)Ac
+AS®AS®AC×
+A4  A4  A$(öAQìAzáAzá@éG®@É@É@©ë
+@=q@\@U
+ž@Â?¬ÌÍ?¬ÌÍ>žQì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B  B
+=B
+=B
+{B
+
+žB(öB(öB33B =qAøzáAð\Að£×AèžRAàžRAàÌÍAØáHAÐáHAÈõÃAÉ
+=AÁ
+=A¹
+žA¹33A±G®A©G®A©\)A¡p€Ap€A
+AA®A®AÂAs®Ac®AS×
+AT  AD  A4(öA4QìA$záAzáA£×AÌÍ@é@Éë
+@Ê=q@ª\@\@áH@Vff@ff?®{?¯\)>Â\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+  B
+=B
+=B{B
+žB
+(öB
+(öB33B=qB=qB G®Aø£×AðžRAðžRAèÌÍAàáHAàáHAØõÃAÑ
+=AÉ
+=AÉ
+žAÁ33A¹G®A¹G®A±\)A©p€A©p€A¡
+AA®A®AÂA×
+A×
+As×
+Ad  AT  AT(öADQìA4záA4záA$£×AÌÍAÌÍAõÃ@ê=q@Ê\@Ê\@ªáH@33@33@W
+>@®?°£×?°£×>Ç®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B   B 
+=B
+
+=B{B
+žB(öB(öB
+33B
+=qB=qBG®BQìB \)AøžRAðÌÍAðáHAèáHAàõÃAá
+=AÙ
+=AÑ
+žAÉ33AÉG®AÁG®A¹\)A¹p€A±p€A©
+A©A¡®A®AÂA×
+A×
+Aë
+A  At  Ad(öATQìATzáADzáA4£×A4ÌÍA$ÌÍAõÃA
+žAG®@ê\@ÊáH@Ë33@«33@
+@×
+@XQì@Qì?±ë
+?³33>ÌÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B(  B$
+=B 
+=B {B
+
+žB(öB(öB33B=qB
+=qB
+G®BQìB\)B\)B ffAøáHAðáHAðõÃAé
+=Aá
+=Aá
+žAÙ33AÑG®AÉG®AÉ\)AÁp€A¹p€A¹
+A±A©®A©®A¡ÂA×
+A×
+Aë
+A  A  A{AtQìAdzáATzáAT£×ADÌÍA4ÌÍA4õÃA%
+žAG®AG®Ap€@ë33@Ë33@Ë
+@«×
+@(ö@(ö@XõÂ@?³33?Žzá>×
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B,  B(
+=B(
+=B${B 
+žB (öB
+(öB33B=qB=qBG®B
+QìB
+\)B\)BffBp€B p€AøõÃAñ
+=Añ
+=Aé
+žAá33AáG®AÙG®AÑ\)AÉp€AÉp€AÁ
+A¹A¹®A±®A©ÂA©×
+A¡×
+Aë
+A  A  A{A(öA=qAtzáAd£×ATÌÍATÌÍADõÃA5
+žA5G®A%G®Ap€AA@ë
+@Ë×
+@Ì(ö@¬(ö@zá@ÌÍ@Y@=q?µÂ?µÂ>Ü(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B4  B0
+=B,
+=B({B(
+žB$(öB (öB 33B
+=qB=qBG®BQìB\)B
+\)B
+ffBp€Bp€BzáB 
+Aù
+=Añ
+žAñ33AéG®AáG®Aá\)AÙp€AÑp€AÉ
+AÉAÁ®A¹®A¹ÂA±×
+A©×
+A©ë
+A¢  A  A{A(öA=qA=qAQìAtÌÍAdÌÍATõÃAU
+žAEG®A5G®A5p€A%AAÂAë
+@ì(ö@Ì(ö@Ìzá@¬ÌÍ@ÌÍ@
+ž@ZáH@áH?·
+>?žQì>æff¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B8  B4
+=B4
+=B0{B,
+žB((öB((öB$33B =qB =qB
+G®BQìB\)B\)BffB
+p€B
+p€BzáB
+B
+B \Aù33AñG®AñG®Aé\)Aáp€Aáp€AÙ
+AÑAÉ®AÉ®AÁÂA¹×
+A¹×
+A±ë
+Aª  Aª  A¢{A(öA=qA=qAQìAffAffAtõÃAe
+žAUG®AUG®AEp€A5A5A%ÂAë
+A{A{@ìzá@ÌÌÍ@ÌÌÍ@­
+ž@p€@p€@[
+@
+(ö?¹?¹>ë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B<  B<
+=B8
+=B4{B4
+žB0(öB,(öB(33B(=qB$=qB G®B QìB
+\)B\)BffBp€Bp€B
+záB
+
+B
+B\BB £×AùG®Añ\)Añp€Aép€Aá
+AáAÙ®AÑ®AÉÂAÉ×
+AÁ×
+A¹ë
+Aº  A²  Aª{Aª(öA¢=qA=qAQìAffAffAzáA\AuG®AeG®AUp€AUAEA5ÂA5ë
+A&{A{A=qAff@ìÌÍ@Í
+ž@Íp€@­p€@Â@{@\ÌÍ@
+ÌÍ?ºáH?Œ(ö>ð£×¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BD  B@
+=B<
+=B<{B8
+žB4(öB4(öB033B,=qB(=qB(G®B$QìB \)B \)B
+ffBp€Bp€BzáB
+B
+
+B
+\BB£×B£×B ®Aùp€Añp€Añ
+AéAá®Aá®AÙÂAÑ×
+AÉ×
+AÉë
+AÂ  Aº  Aº{A²(öAª=qAª=qA¢QìAffAffAzáA\A£×A£×Aup€AeAUAUÂAEë
+A6{A6{A&=qAffAffA\@íp€@Íp€@ÍÂ@®{@ff@ff@]p€@
+{?Œ(ö?œp€>úáH¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BH  BH
+=BD
+=B@{B<
+žB<(öB8(öB433B4=qB0=qB,G®B(QìB(\)B$\)B ffB p€B
+p€BzáB
+B
+B\B
+B
+£×B£×B®BžRB žRAù
+AñAñ®Aé®AáÂAá×
+AÙ×
+AÑë
+AÊ  AÊ  AÂ{Aº(öAº=qA²=qAªQìAªffA¢ffAzáA\A£×A£×AžRAÌÍAuAeÂAUë
+AV{AF{A6=qA6ffA&ffA\AžRAžR@íÂ@Î{@Îff@®ff@žR@
+=@^{@
+žR?ŸžR?À  ?   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BP  BL
+=BH
+=BH{BD
+žB@(öB<(öB<33B8=qB4=qB4G®B0QìB,\)B(\)B(ffB$p€B p€B záB
+
+B
+B\BB£×B
+£×B
+®BžRBžRBÂB ÌÍAù®Añ®AñÂAé×
+Aá×
+Aáë
+AÚ  AÒ  AÊ{AÊ(öAÂ=qAº=qAºQìA²ffAªffAªzáA¢\A£×A£×AžRAÌÍAÌÍAáHAuë
+Af{AV{AV=qAFffA6ffA6\A&žRAžRAáHA
+=@îff@Îff@ÎžR@¯
+=@
+=@\)@_\)@   ?À  ?ÁG®?
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BT  BP
+=BP
+=BL{BH
+žBH(öBD(öB@33B<=qB<=qB8G®B4QìB4\)B0\)B,ffB(p€B(p€B$záB 
+B 
+B
+\BB£×B£×B®B
+žRB
+žRBÂBÌÍB×
+B ×
+AùÂAñ×
+Añ×
+Aéë
+Aâ  Aâ  AÚ{AÒ(öAÊ=qAÊ=qAÂQìAºffAºffA²záAª\Aª£×A¢£×AžRAÌÍAÌÍAáHAõÃA
+=Av{Af=qAVffAVffAF\A6žRA6žRA&áHA
+=A33A33@îžR@Ï
+=@Ï
+=@¯\)@®@  @`  @ £×?Â\?Â\?®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BX  BX
+=BT
+=BP{BP
+žBL(öBH(öBH33BD=qB@=qB<G®B<QìB8\)B4\)B4ffB0p€B,p€B(záB(
+B$
+B \B B
+£×B£×B®BžRBžRB
+ÂB
+ÌÍB×
+B×
+BáHB ë
+Aù×
+Añë
+Aò  Aê  Aâ{Aâ(öAÚ=qAÒ=qAÊQìAÊffAÂffAºzáAº\A²£×Aª£×AªžRA¢ÌÍAÌÍAáHAõÃA
+=A
+=A
+žAvffAfffAV\AVžRAFžRA6áHA7
+=A'33A33A\)A
+@ï
+=@Ï\)@Ï®@°  @  @Qì@aG®@!G®?Ã×
+?Å
+ž?
+=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B`  B\
+=BX
+=BX{BT
+žBP(öBP(öBL33BH=qBH=qBDG®B@QìB<\)B<\)B8ffB4p€B4p€B0záB,
+B(
+B(\B$B £×B £×B
+®BžRBžRBÂBÌÍB
+×
+B
+×
+BáHBë
+Bë
+B õÃAú  Aò  Aò{Aê(öAâ=qAâ=qAÚQìAÒffAÊffAÊzáAÂ\Aº£×Aº£×A²žRAªÌÍAªÌÍA¢áHAõÃA
+=A
+=A
+žA33A33Av\AfžRAVžRAVáHAG
+=A733A733A'\)A
+A
+A®@ï®@Ð  @Ð  @°Qì@£×@£×@aë
+@"\?Å
+ž?Æff?\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bd  Bd
+=B`
+=B\{BX
+žBX(öBT(öBP33BP=qBL=qBHG®BHQìBD\)B@\)B<ffB<p€B8p€B4záB4
+B0
+B,\B(B(£×B$£×B ®B žRB
+žRBÂBÌÍB×
+B×
+B
+áHB
+ë
+Bë
+BõÃB  B  Aú{Aò(öAò=qAê=qAâQìAâffAÚffAÒzáAÊ\AÊ£×AÂ£×AºžRAºÌÍA²ÌÍAªáHAªõÃA£
+=A
+=A
+žA33A33AG®A\)AvžRAfáHAW
+=AW33AG33A7\)A7
+A'
+A®A×
+A  @ð  @ÐQì@Ð£×@°£×@õÂ@G®@b\@#33?Ç®?ÈõÂ?ë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bl  Bh
+=Bd
+=Bd{B`
+žB\(öBX(öBX33BT=qBP=qBPG®BLQìBH\)BH\)BDffB@p€B<p€B<záB8
+B4
+B4\B0B,£×B(£×B(®B$žRB žRB ÂB
+ÌÍB×
+B×
+BáHBë
+B
+ë
+B
+õÃB	  B  B
+=B{Aú=qAò=qAòQìAêffAâffAâzáAÚ\AÒ£×AÊ£×AÊžRAÂÌÍAºÌÍAºáHA²õÃA«
+=A«
+=A£
+žA33A33AG®A\)A\)Ap€Aw
+=Ag33AW33AW\)AG
+A7
+A7®A'×
+A  A  A(ö@ð£×@Ð£×@ÐõÂ@±G®@G®@@c×
+@$zá?ÈõÂ?Ê=p?
+=¿  ¿  ¿  ¿  ¿  ¿  Bp  Bl
+=Bl
+=Bh{Bd
+žBd(öB`(öB\33BX=qBX=qBTG®BPQìBP\)BL\)BHffBHp€BDp€B@záB<
+B<
+B8\B4B4£×B0£×B,®B(žRB(žRB$ÂB ÌÍB ×
+B
+×
+BáHBë
+Bë
+BõÃB
+  B
+  B	
+=B{B
+žB
+žAúQìAòffAòffAêzáAâ\Aâ£×AÚ£×AÒžRAÊÌÍAÊÌÍAÂáHAºõÃA»
+=A³
+=A«
+žA«33A£33AG®A\)A\)Ap€A
+AAw33Ag\)AW
+AW
+AG®A7×
+A8  A(  A(öAQìAQì@ðõÂ@ÑG®@ÑG®@±@ë
+@=q@dzá@%
+ž?Ë
+
+?Ë
+
+?¿  ¿  ¿  ¿  Bx  Bt
+=Bp
+=Bl{Bl
+žBh(öBd(öBd33B`=qB\=qBXG®BXQìBT\)BP\)BPffBLp€BHp€BHzáBD
+B@
+B<\B<B8£×B4£×B4®B0žRB,žRB(ÂB(ÌÍB$×
+B ×
+B áHB
+ë
+Bë
+BõÃB  B  B
+=B
+{B	
+žB
+žB(öB33AúffAòzáAò\Aê£×Aâ£×AâžRAÚÌÍAÒÌÍAÊáHAÊõÃAÃ
+=A»
+=A»
+žA³33A«33A«G®A£\)A\)Ap€A
+AAA®Aw
+Ag
+AW®AW×
+AH  A8  A8(öA(QìAQìAzáA£×@ñG®@Ñ@Ñë
+@²=q@=q@\@eÂ@%Â?ÌÌÍ?Î{?
+žR¿  ¿  B|  Bx
+=Bx
+=Bt{Bp
+žBl(öBl(öBh33Bd=qBd=qB`G®B\QìBX\)BX\)BTffBPp€BPp€BLzáBH
+BH
+BD\B@B<£×B<£×B8®B4žRB4žRB0ÂB,ÌÍB(×
+B(×
+B$áHB ë
+B ë
+B
+õÃB  B  B
+=B{B
+
+žB
+
+žB	(öB33B33B=qAú\Aò£×Aò£×AêžRAâÌÍAâÌÍAÚáHAÒõÃAË
+=AË
+=AÃ
+žA»33A»33A³G®A«\)A«\)A£p€A
+AAA®AÂAÂAw®Ag×
+AX  AX  AH(öA8QìA8QìA(záA£×A£×AÌÍ@ñë
+@Ò=q@Ò=q@²\@áH@áH@fff@'
+>?Ï\)?Ï\)?!G®¿  ¿  B|
+=Bx{Bx
+žBt(öBp(öBl33Bl=qBh=qBdG®BdQìB`\)B\\)BXffBXp€BTp€BPzáBP
+BL
+BH\BHBD£×B@£×B<®B<žRB8žRB4ÂB4ÌÍB0×
+B,×
+B(áHB(ë
+B$ë
+B õÃB!  B
+  B
+=B{B
+žB
+žB
+(öB
+33B	33B=qBG®BQìAú£×AòžRAòÌÍAêÌÍAâáHAâõÃAÛ
+=AÓ
+=AË
+žAË33AÃ33A»G®A»\)A³\)A«p€A«
+A£AA®AÂAÂA×
+Aë
+Ax  Ah  AX(öAXQìAHQìA8záA8£×A(£×AÌÍAõÃA	
+ž@ò=q@Ò\@ÒáH@²áH@33@
+@g®@'®?Ð£×¿  ¿  ¿  ¿  B|
+žBx(öBx(öBt33Bp=qBl=qBlG®BhQìBd\)Bd\)B`ffB\p€BXp€BXzáBT
+BP
+BP\BLBH£×BH£×BD®B@žRB<žRB<ÂB8ÌÍB4×
+B4×
+B0áHB,ë
+B(ë
+B(õÃB%  B!  B!
+=B
+{B
+žB
+žB(öB33B
+33B
+=qB	G®BQìBQìB\)AúÌÍAòÌÍAòáHAêõÃAã
+=Aã
+=AÛ
+žAÓ33AË33AËG®AÃ\)A»\)A»p€A³
+A«A«A£®AÂAÂA×
+Aë
+A  A  Ax(öAhQìAXQìAXzáAH£×A8£×A8ÌÍA(õÃA
+žA
+žA	G®@òáH@ÒáH@Ó33@³
+@×
+@×
+@hQì¿  ¿  ¿  ¿  ¿  ¿  B|(öBx33Bx=qBt=qBpG®BlQìBl\)Bh\)BdffBdp€B`p€B\záBX
+BX
+BT\BPBP£×BL£×BH®BHžRBDžRB@ÂB<ÌÍB<×
+B8×
+B4áHB4ë
+B0ë
+B,õÃB)  B)  B%
+=B!{B!
+žB
+
+žB(öB33B33B=qB
+G®B
+QìB	QìB\)BffBffAúáHAòõÃAó
+=Aë
+=Aã
+žAã33AÛ33AÓG®AË\)AË\)AÃp€A»
+A»A³A«®A«ÂA£ÂA×
+Aë
+A  A  A{A(öAxQìAhzáAX£×AX£×AHÌÍA8õÃA9
+žA)
+žAG®Ap€A	p€@ó33@Ó
+@Ó×
+@³×
+@(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|=qBx=qBxG®BtQìBp\)Bl\)BlffBhp€Bdp€BdzáB`
+B\
+BX\BXBT£×BP£×BP®BLžRBHžRBHÂBDÌÍB@×
+B<×
+B<áHB8ë
+B4ë
+B4õÃB1  B-  B)
+=B){B%
+žB!
+žB!(öB
+33B33B=qBG®BQìB
+QìB
+\)B	ffBffBp€BzáAû
+=Aó
+=Aó
+žAë33Aã33AãG®AÛ\)AÓ\)AËp€AË
+AÃA»A»®A³ÂA«ÂA«×
+A£ë
+A  A  A{A(öA(öA=qAx£×Ah£×AXÌÍAXõÃAI
+žA9
+žA9G®A)p€Ap€AA	Â@ó×
+@Ó×
+@Ô(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|G®BxQìBx\)Bt\)BpffBlp€Blp€BhzáBd
+Bd
+B`\B\BX£×BX£×BT®BPžRBPžRBLÂBHÌÍBH×
+BD×
+B@áHB<ë
+B<ë
+B8õÃB5  B5  B1
+=B-{B)
+žB)
+žB%(öB!33B!33B
+=qBG®BQìBQìB\)B
+ffB
+ffB	p€BzáB
+B
+Aû
+žAó33Aó33AëG®Aã\)Aã\)AÛp€AÓ
+AËAËAÃ®A»ÂA»ÂA³×
+A«ë
+A¬  A€  A{A(öA(öA=qAQìAQìAxÌÍAhõÃAY
+žAY
+žAIG®A9p€A9p€A)AÂAë
+A	ë
+@ô(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|\)Bx\)BxffBtp€Bpp€BlzáBl
+Bh
+Bd\BdB`£×B\£×BX®BXžRBTžRBPÂBPÌÍBL×
+BH×
+BHáHBDë
+B@ë
+B<õÃB=  B9  B5
+=B5{B1
+žB-
+žB)(öB)33B%33B!=qB!G®B
+QìBQìB\)BffBffB
+p€B
+záB	
+B
+B\BAû33AóG®Aó\)Aë\)Aãp€Aã
+AÛAÓAË®AËÂAÃÂA»×
+A»ë
+AŽ  A¬  A¬{A€(öA(öA=qAQìAQìAffAzáAy
+žAi
+žAYG®AYp€AIp€A9A9ÂA)ë
+Aë
+A{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ffBxp€Bxp€BtzáBp
+Bl
+Bl\BhBd£×Bd£×B`®B\žRBXžRBXÂBTÌÍBP×
+BP×
+BLáHBHë
+BHë
+BDõÃBA  B=  B=
+=B9{B5
+žB5
+žB1(öB-33B)33B)=qB%G®B!QìB!QìB
+\)BffBffBp€BzáB
+
+B
+
+B	\BBB£×Aû\)Aó\)Aóp€Aë
+AãAãAÛ®AÓÂAËÂAË×
+AÃë
+AŒ  AŒ  AŽ{A¬(öA¬(öA€=qAQìAQìAffAzáA\A\AyG®Aip€AYp€AYAIÂA9ë
+A9ë
+A*{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|p€BxzáBx
+Bt
+Bp\BlBl£×Bh£×Bd®BdžRB`žRB\ÂBXÌÍBX×
+BT×
+BPáHBPë
+BLë
+BHõÃBI  BE  BA
+=B={B=
+žB9
+žB5(öB533B133B-=qB)G®B)QìB%QìB!\)B!ffB
+ffBp€BzáB
+B
+B
+\B
+B	B£×B®B®Aûp€Aó
+AóAëAã®AãÂAÛÂAÓ×
+AËë
+AÌ  AÄ  AŒ{AŒ(öAŽ(öA¬=qA¬QìA€QìAffAzáA\A\A£×AžRAyp€AiAYÂAYë
+AIë
+A:{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|
+Bx
+Bx\BtBp£×Bl£×Bl®BhžRBdžRBdÂB`ÌÍB\×
+BX×
+BXáHBTë
+BPë
+BPõÃBM  BI  BI
+=BE{BA
+žB=
+žB=(öB933B533B5=qB1G®B-QìB)QìB)\)B%ffB!ffB!p€B
+záB
+B
+B\BB
+B
+£×B	®B®BžRBÂAûAóAó®AëÂAãÂAã×
+AÛë
+AÔ  AÌ  AÌ{AÄ(öAŒ(öAŒ=qAŽQìA¬QìA¬ffA€záA\A\A£×AžRAžRAÌÍAyÂAië
+AYë
+AZ{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|\BxBx£×Bt£×Bp®BlžRBlžRBhÂBdÌÍBd×
+B`×
+B\áHBXë
+BXë
+BTõÃBQ  BQ  BM
+=BI{BI
+žBE
+žBA(öB=33B=33B9=qB5G®B5QìB1QìB-\)B)ffB)ffB%p€B!záB!
+B
+
+B\BBB£×B
+®B
+®B	žRBÂBÌÍBÌÍAû®AóÂAóÂAë×
+Aãë
+Aä  AÜ  AÔ{AÌ(öAÌ(öAÄ=qAŒQìAŒQìAŽffA¬záA¬\A€\A£×AžRAžRAÌÍAáHAõÃAyë
+Aj{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|£×Bx£×Bx®BtžRBpžRBlÂBlÌÍBh×
+Bd×
+BdáHB`ë
+B\ë
+BXõÃBY  BU  BQ
+=BQ{BM
+žBI
+žBI(öBE33BA33B==qB=G®B9QìB5QìB5\)B1ffB-ffB)p€B)záB%
+B!
+B!\B
+BB£×B®B®B
+žRB
+ÂB	ÌÍBÌÍB×
+BáHAûÂAó×
+Aóë
+Aì  Aä  Aä{AÜ(öAÔ(öAÌ=qAÌQìAÄQìAŒffAŒzáAŽ\A¬\A¬£×A€žRAžRAÌÍAáHAõÃAõÃA
+
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|®BxžRBxžRBtÂBpÌÍBl×
+Bl×
+BháHBdë
+Bdë
+B`õÃB]  BY  BY
+=BU{BQ
+žBQ
+žBM(öBI33BI33BE=qBAG®B=QìB=QìB9\)B5ffB5ffB1p€B-záB)
+B)
+B%\B!B!B
+£×B®B®BžRBÂB
+ÌÍB
+ÌÍB	×
+BáHBáHBë
+Aûë
+Aô  Aô  Aì{Aä(öAä(öAÜ=qAÔQìAÌQìAÌffAÄzáAŒ\AŒ\AŽ£×A¬žRA¬žRA€ÌÍAáHAõÃAõÃA
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|žRBxÂBxÌÍBt×
+Bp×
+BláHBlë
+Bhë
+BdõÃBe  Ba  B]
+=BY{BY
+žBU
+žBQ(öBQ33BM33BI=qBIG®BEQìBAQìB=\)B=ffB9ffB5p€B5záB1
+B-
+B)\B)B%B!£×B!®B
+®BžRBÂBÌÍBÌÍB
+×
+B
+áHB	áHBë
+BõÃB  Aü  Aô{Aô(öAì(öAä=qAäQìAÜQìAÔffAÌzáAÌ\AÄ\AŒ£×AŒžRAŽžRA¬ÌÍA¬áHA€õÃAõÃA
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÌÍBx×
+Bx×
+BtáHBpë
+Blë
+BlõÃBi  Be  Be
+=Ba{B]
+žBY
+žBY(öBU33BQ33BQ=qBMG®BIQìBIQìBE\)BAffB=ffB=p€B9záB5
+B5
+B1\B-B)B)£×B%®B!®B!žRB
+ÂBÌÍBÌÍB×
+BáHB
+áHB
+ë
+B	õÃB  B  B
+=Aü(öAô(öAô=qAìQìAäQìAäffAÜzáAÔ\AÌ\AÌ£×AÄžRAŒžRAŒÌÍAŽáHA¬õÃA¬õÃA¥
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|×
+BxáHBxë
+Btë
+BpõÃBm  Bm  Bi
+=Be{Be
+žBa
+žB](öBY33BY33BU=qBQG®BQQìBMQìBI\)BIffBEffBAp€B=záB=
+B9
+B5\B5B1B-£×B)®B)®B%žRB!ÂB!ÌÍB
+ÌÍB×
+BáHBáHBë
+B
+õÃB  B
+  B
+=B{B{Aü=qAôQìAôQìAìffAäzáAä\AÜ\AÔ£×AÌžRAÌžRAÄÌÍAŒáHAŒõÃAŽõÃA­
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ë
+Bxë
+BxõÃBu  Bq  Bm
+=Bm{Bi
+žBe
+žBe(öBa33B]33BY=qBYG®BUQìBQQìBQ\)BMffBIffBIp€BEzáBA
+B=
+B=\B9B5B5£×B1®B-®B)žRB)ÂB%ÌÍB!ÌÍB!×
+B
+áHBáHBë
+BõÃB  B  B
+=B
+{B{B
+žB(öAüQìAôffAôzáAì\Aä\Aä£×AÜžRAÔžRAÌÌÍAÌáHAÄõÃAŒõÃAœ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|õÃBy  By  Bu
+=Bq{Bm
+žBm
+žBi(öBe33Be33Ba=qB]G®BYQìBYQìBU\)BQffBQffBMp€BIzáBI
+BE
+BA\B=B=B9£×B5®B5®B1žRB-ÂB)ÌÍB)ÌÍB%×
+B!áHB!áHB
+ë
+BõÃB  B  B
+=B{B{B
+
+žB(öB(öB33AüzáAô\Aô\Aì£×AäžRAäžRAÜÌÍAÔáHAÌõÃAÌõÃAÅ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}  By
+=By{Bu
+žBq
+žBm(öBm33Bi33Be=qBeG®BaQìB]QìBY\)BYffBUffBQp€BQzáBM
+BI
+BI\BEBAB=£×B=®B9®B5žRB5ÂB1ÌÍB-ÌÍB)×
+B)áHB%áHB!ë
+B!õÃB
+  B  B
+=B{B{B
+žB(öB
+(öB33B=qBG®Aü\Aô£×AôžRAìžRAäÌÍAäáHAÜõÃAÔõÃAÍ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}{By
+žBy
+žBu(öBq33Bm33Bm=qBiG®BeQìBeQìBa\)B]ffBYffBYp€BUzáBQ
+BQ
+BM\BIBIBE£×BA®B=®B=žRB9ÂB5ÌÍB5ÌÍB1×
+B-áHB)áHB)ë
+B%õÃB"  B"  B
+
+=B{B{B
+žB(öB(öB33B
+=qBG®BG®BQìAüžRAôžRAôÌÍAìáHAäõÃAäõÃAÝ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
+žBy(öBy33Bu33Bq=qBmG®BmQìBiQìBe\)BeffBaffB]p€BYzáBY
+BU
+BQ\BQBMBI£×BI®BE®BAžRB=ÂB=ÌÍB9ÌÍB5×
+B5áHB1áHB-ë
+B)õÃB*  B&  B"
+=B"{B
+{B
+žB(öB(öB33B=qBG®B
+G®BQìB\)B\)AüÌÍAôáHAôõÃAìõÃAå
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}33By33By=qBuG®BqQìBmQìBm\)BiffBeffBep€BazáB]
+BY
+BY\BUBQBQ£×BM®BI®BIžRBEÂBAÌÍB=ÌÍB=×
+B9áHB5áHB5ë
+B1õÃB.  B*  B*
+=B&{B"{B"
+žB
+(öB(öB33B=qBG®BG®BQìB
+\)B\)BffBp€AüõÃAôõÃAõ
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}=qByG®ByQìBuQìBq\)BmffBmffBip€BezáBe
+Ba
+B]\BYBYBU£×BQ®BQ®BMžRBIÂBIÌÍBEÌÍBA×
+B=áHB=áHB9ë
+B5õÃB6  B2  B.
+=B*{B*{B&
+žB"(öB"(öB
+33B=qBG®BG®BQìB\)B\)B
+ffBp€BzáBzáAý
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}QìByQìBy\)BuffBqffBmp€BmzáBi
+Be
+Be\BaB]BY£×BY®BU®BQžRBQÂBMÌÍBIÌÍBI×
+BEáHBAáHB=ë
+B=õÃB:  B6  B6
+=B2{B.{B*
+žB*(öB&(öB"33B"=qB
+G®BG®BQìB\)B\)BffBp€B
+záBzáB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}\)ByffByffBup€BqzáBm
+Bm
+Bi\BeBeBa£×B]®BY®BYžRBUÂBQÌÍBQÌÍBM×
+BIáHBIáHBEë
+BAõÃB>  B>  B:
+=B6{B6{B2
+žB.(öB*(öB*33B&=qB"G®B"G®B
+QìB\)B\)BffBp€BzáBzáB
+
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ffByp€ByzáBu
+Bq
+Bm\BmBiBe£×Be®Ba®B]žRBYÂBYÌÍBUÌÍBQ×
+BQáHBMáHBIë
+BIõÃBF  BB  B>
+=B>{B:{B6
+žB6(öB2(öB.33B*=qB*G®B&G®B"QìB"\)B
+\)BffBp€BzáBzáB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}záBy
+By
+Bu\BqBmBm£×Bi®Be®BežRBaÂB]ÌÍBYÌÍBY×
+BUáHBQáHBQë
+BMõÃBJ  BJ  BF
+=BB{B>{B>
+žB:(öB6(öB633B2=qB.G®B*G®B*QìB&\)B"\)B"ffB
+p€BzáBzáB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
+By\ByBuBq£×Bm®Bm®BižRBeÂBeÌÍBaÌÍB]×
+BYáHBYáHBUë
+BQõÃBR  BN  BJ
+=BJ{BF{BB
+žB>(öB>(öB:33B6=qB6G®B2G®B.QìB*\)B*\)B&ffB"p€B"záB
+záB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ByBy£×Bu®Bq®BmžRBmÂBiÌÍBeÌÍBe×
+BaáHB]áHBYë
+BYõÃBV  BR  BR
+=BN{BJ{BJ
+žBF(öBB(öB>33B>=qB:G®B6G®B6QìB2\)B.\)B*ffB*p€B&záB"záB"
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}£×By®By®BužRBqÂBmÌÍBmÌÍBi×
+BeáHBeáHBaë
+B]õÃBZ  BZ  BV
+=BR{BR{BN
+žBJ(öBJ(öBF33BB=qB>G®B>G®B:QìB6\)B6\)B2ffB.p€B*záB*záB&
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}®ByžRByÂBuÌÍBqÌÍBm×
+BmáHBiáHBeë
+BeõÃBb  B^  BZ
+=BZ{BV{BR
+žBR(öBN(öBJ33BJ=qBFG®BBG®B>QìB>\)B:\)B6ffB6p€B2záB.záB*
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÂByÌÍByÌÍBu×
+BqáHBmáHBmë
+BiõÃBf  Bf  Bb
+=B^{BZ{BZ
+žBV(öBR(öBR33BN=qBJG®BJG®BFQìBB\)B>\)B>ffB:p€B6záB6záB2
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÌÍBy×
+ByáHBuáHBqë
+BmõÃBn  Bj  Bf
+=Bf{Bb{B^
+žBZ(öBZ(öBV33BR=qBRG®BNG®BJQìBJ\)BF\)BBffB>p€B>záB:záB6
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}áHByáHByë
+BuõÃBr  Bn  Bn
+=Bj{Bf{Bf
+žBb(öB^(öBZ33BZ=qBVG®BRG®BRQìBN\)BJ\)BJffBFp€BBzáB>záB>
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ë
+ByõÃBz  Bv  Br
+=Bn{Bn{Bj
+žBf(öBf(öBb33B^=qBZG®BZG®BVQìBR\)BR\)BNffBJp€BJzáBFzáBB
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~  Bz  Bz
+=Bv{Br{Bn
+žBn(öBj(öBf33Bf=qBbG®B^G®BZQìBZ\)BV\)BRffBRp€BNzáBJzáBJ
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~
+=Bz{Bz{Bv
+žBr(öBn(öBn33Bj=qBfG®BfG®BbQìB^\)BZ\)BZffBVp€BRzáBRzáBN
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~{Bz
+žBz(öBv(öBr33Bn=qBnG®BjG®BfQìBf\)Bb\)B^ffBZp€BZzáBVzáBR
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~(öBz(öBz33Bv=qBrG®BnG®BnQìBj\)Bf\)BfffBbp€B^záBZzáBZ
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~33Bz=qBzG®BvG®BrQìBn\)Bn\)BjffBfp€BfzáBbzáB^
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~G®BzG®BzQìBv\)Br\)BnffBnp€BjzáBfzáBf
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~QìBz\)Bz\)BvffBrp€BnzáBnzáBj
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~\)BzffBzp€BvzáBrzáBn
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~p€BzzáBzzáBv
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~záBz
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B|  Bx  Bt  Bp  Bl  Bh  Bd  B`  B\  BX  BT  BP  BL  BH  BD  B@  B<  B8  B4  B0  B,  B(  B$  B   B
+  B  B  B  B
+  B  B  B   Aø  Að  Aè  Aà  AØ  AÐ  AÈ  AÀ  Až  A°  Aš  A   A  A  A  A  Ap  A`  AP  A@  A0  A   A  A   @à  @À  @   @  @@  @   ?      B|
+=Bx
+=Bt
+=Bp
+=Bl
+=Bh
+=Bd
+=B`
+=B\
+=BX
+=BT
+=BP
+=BL
+=BH
+=BD
+=B@
+=B<
+=B8
+=B4
+=B0
+=B,
+=B(
+=B$
+=B 
+=B
+
+=B
+=B
+=B
+=B
+
+=B
+=B
+=B 
+=Aø{Að{Aè{Aà{AØ{AÐ{AÈ{AÀ{Až{A°{Aš{A {A{A{A{A{Ap(öA`(öAP(öA@(öA0(öA (öA(öA (ö@àQì@ÀQì@ Qì@Qì@@£×@ £×?G®<#×
+B|{Bx{Bt{Bp{Bl{Bh{Bd{B`{B\{BX{BT{BP{BL{BH{BD{B@{B<{B8{B4{B0{B,{B({B${B {B
+{B{B{B{B
+{B{B{B {Aø(öAð(öAè(öAà(öAØ(öAÐ(öAÈ(öAÀ(öAž(öA°(öAš(öA (öA(öA(öA(öA(öApQìA`QìAPQìA@QìA0QìA QìAQìA Qì@à£×@À£×@ £×@£×@AG®@G®?\<£×
+B|
+žBx
+žBt
+žBp
+žBl
+žBh
+žBd
+žB`
+žB\
+žBX
+žBT
+žBP
+žBL
+žBH
+žBD
+žB@
+žB<
+žB8
+žB4
+žB0
+žB,
+žB(
+žB$
+žB 
+žB
+
+žB
+žB
+žB
+žB
+
+žB
+žB
+žB 
+žAø=qAð=qAè=qAà=qAØ=qAÐ=qAÈ=qAÀ=qAž=qA°=qAš=qA =qA=qA=qA=qA=qApzáA`záAPzáA@záA0záA záAzáA zá@àõÃ@ÀõÃ@ õÃ@õÃ@Aë
+@ë
+?×
+<õÂB|(öBx(öBt(öBp(öBl(öBh(öBd(öB`(öB\(öBX(öBT(öBP(öBL(öBH(öBD(öB@(öB<(öB8(öB4(öB0(öB,(öB((öB$(öB (öB
+(öB(öB(öB(öB
+(öB(öB(öB (öAøQìAðQìAèQìAàQìAØQìAÐQìAÈQìAÀQìAžQìA°QìAšQìA QìAQìAQìAQìAQìAp£×A`£×AP£×A@£×A0£×A £×A£×A £×@áG®@ÁG®@¡G®@G®@B\@\?
+
+ž=#×
+B|33Bx33Bt33Bp33Bl33Bh33Bd33B`33B\33BX33BT33BP33BL33BH33BD33B@33B<33B833B433B033B,33B(33B$33B 33B
+33B33B33B33B
+33B33B33B 33AøffAðffAèffAàffAØffAÐffAÈffAÀffAžffA°ffAšffA ffAffAffAffAffApÌÍA`ÌÍAPÌÍA@ÌÍA0ÌÍA ÌÍAÌÍA ÌÍ@á@Á@¡@@C33@33?ff=LÌÍB|=qBx=qBt=qBp=qBl=qBh=qBd=qB`=qB\=qBX=qBT=qBP=qBL=qBH=qBD=qB@=qB<=qB8=qB4=qB0=qB,=qB(=qB$=qB =qB
+=qB=qB=qB=qB
+=qB=qB=qB =qAøzáAðzáAèzáAàzáAØzáAÐzáAÈzáAÀzáAžzáA°záAšzáA záAzáAzáAzáAzáApõÃA`õÃAPõÃA@õÃA0õÃA õÃAõÃA õÃ@áë
+@Áë
+@¡ë
+@ë
+@C×
+@×
+?®=uÂB|G®BxG®BtG®BpG®BlG®BhG®BdG®B`G®B\G®BXG®BTG®BPG®BLG®BHG®BDG®B@G®B<G®B8G®B4G®B0G®B,G®B(G®B$G®B G®B
+G®BG®BG®BG®B
+G®BG®BG®B G®Aø\Að\Aè\Aà\AØ\AÐ\AÈ\AÀ\Až\A°\Aš\A \A\A\A\A\Aq
+žAa
+žAQ
+žAA
+žA1
+žA!
+žA
+žA
+ž@â=q@Â=q@¢=q@=q@Dzá@zá?õÃ=\)B|QìBxQìBtQìBpQìBlQìBhQìBdQìB`QìB\QìBXQìBTQìBPQìBLQìBHQìBDQìB@QìB<QìB8QìB4QìB0QìB,QìB(QìB$QìB QìB
+QìBQìBQìBQìB
+QìBQìBQìB QìAø£×Að£×Aè£×Aà£×AØ£×AÐ£×AÈ£×AÀ£×Až£×A°£×Aš£×A £×A£×A£×A£×A£×AqG®AaG®AQG®AAG®A1G®A!G®AG®AG®@â\@Â\@¢\@\@E
+ž@
+ž?=q=£×
+B|\)Bx\)Bt\)Bp\)Bl\)Bh\)Bd\)B`\)B\\)BX\)BT\)BP\)BL\)BH\)BD\)B@\)B<\)B8\)B4\)B0\)B,\)B(\)B$\)B \)B
+\)B\)B\)B\)B
+\)B\)B\)B \)AøžRAðžRAèžRAàžRAØžRAÐžRAÈžRAÀžRAžžRA°žRAšžRA žRAžRAžRAžRAžRAqp€Aap€AQp€AAp€A1p€A!p€Ap€Ap€@âáH@ÂáH@¢áH@áH@EÂ@Â?
+=žQìB|ffBxffBtffBpffBlffBhffBdffB`ffB\ffBXffBTffBPffBLffBHffBDffB@ffB<ffB8ffB4ffB0ffB,ffB(ffB$ffB ffB
+ffBffBffBffB
+ffBffBffB ffAøÌÍAðÌÍAèÌÍAàÌÍAØÌÍAÐÌÍAÈÌÍAÀÌÍAžÌÍA°ÌÍAšÌÍA ÌÍAÌÍAÌÍAÌÍAÌÍAqAaAQAAA1A!AA@ã33@Ã33@£33@33@Fff@ff?ÌÍ=ÌÌÍB|p€Bxp€Btp€Bpp€Blp€Bhp€Bdp€B`p€B\p€BXp€BTp€BPp€BLp€BHp€BDp€B@p€B<p€B8p€B4p€B0p€B,p€B(p€B$p€B p€B
+p€Bp€Bp€Bp€B
+p€Bp€Bp€B p€AøáHAðáHAèáHAàáHAØáHAÐáHAÈáHAÀáHAžáHA°áHAšáHA áHAáHAáHAáHAáHAqÂAaÂAQÂAAÂA1ÂA!ÂAÂAÂ@ã
+@Ã
+@£
+@
+@G
+=@
+=?{=áG®B|záBxzáBtzáBpzáBlzáBhzáBdzáB`záB\záBXzáBTzáBPzáBLzáBHzáBDzáB@záB<záB8záB4záB0záB,záB(záB$záB záB
+záBzáBzáBzáB
+záBzáBzáB záAøõÃAðõÃAèõÃAàõÃAØõÃAÐõÃAÈõÃAÀõÃAžõÃA°õÃAšõÃA õÃAõÃAõÃAõÃAõÃAqë
+Aaë
+AQë
+AAë
+A1ë
+A!ë
+Aë
+Aë
+@ã×
+@Ã×
+@£×
+@×
+@G®@®?\)=õÂB|
+Bx
+Bt
+Bp
+Bl
+Bh
+Bd
+B`
+B\
+BX
+BT
+BP
+BL
+BH
+BD
+B@
+B<
+B8
+B4
+B0
+B,
+B(
+B$
+B 
+B
+
+B
+B
+B
+B
+
+B
+B
+B 
+Aù
+=Añ
+=Aé
+=Aá
+=AÙ
+=AÑ
+=AÉ
+=AÁ
+=A¹
+=A±
+=A©
+=A¡
+=A
+=A
+=A
+=A
+=Ar{Ab{AR{AB{A2{A"{A{A{@ä(ö@Ä(ö@€(ö@(ö@HQì@Qì?£×>
+žB|\Bx\Bt\Bp\Bl\Bh\Bd\B`\B\\BX\BT\BP\BL\BH\BD\B@\B<\B8\B4\B0\B,\B(\B$\B \B
+\B\B\B\B
+\B\B\B \Aù
+žAñ
+žAé
+žAá
+žAÙ
+žAÑ
+žAÉ
+žAÁ
+žA¹
+žA±
+žA©
+žA¡
+žA
+žA
+žA
+žA
+žAr=qAb=qAR=qAB=qA2=qA"=qA=qA=q@äzá@Äzá@€zá@zá@HõÃ@õÃ?ë
+>\)B|BxBtBpBlBhBdB`B\BXBTBPBLBHBDB@B<B8B4B0B,B(B$B B
+BBBB
+BBB Aù33Añ33Aé33Aá33AÙ33AÑ33AÉ33AÁ33A¹33A±33A©33A¡33A33A33A33A33ArffAbffARffABffA2ffA"ffAffAff@äÌÍ@ÄÌÍ@€ÌÍ@ÌÍ@I@	?33>B|£×Bx£×Bt£×Bp£×Bl£×Bh£×Bd£×B`£×B\£×BX£×BT£×BP£×BL£×BH£×BD£×B@£×B<£×B8£×B4£×B0£×B,£×B(£×B$£×B £×B
+£×B£×B£×B£×B
+£×B£×B£×B £×AùG®AñG®AéG®AáG®AÙG®AÑG®AÉG®AÁG®A¹G®A±G®A©G®A¡G®AG®AG®AG®AG®Ar\Ab\AR\AB\A2\A"\A\A\@å
+ž@Å
+ž@¥
+ž@
+
+ž@J=q@
+=q?zá>#×
+B|®Bx®Bt®Bp®Bl®Bh®Bd®B`®B\®BX®BT®BP®BL®BH®BD®B@®B<®B8®B4®B0®B,®B(®B$®B ®B
+®B®B®B®B
+®B®B®B ®Aù\)Añ\)Aé\)Aá\)AÙ\)AÑ\)AÉ\)AÁ\)A¹\)A±\)A©\)A¡\)A\)A\)A\)A\)AržRAbžRARžRABžRA2žRA"žRAžRAžR@åp€@Åp€@¥p€@
+p€@JáH@
+áH?Â>.{B|žRBxžRBtžRBpžRBlžRBhžRBdžRB`žRB\žRBXžRBTžRBPžRBLžRBHžRBDžRB@žRB<žRB8žRB4žRB0žRB,žRB(žRB$žRB žRB
+žRBžRBžRBžRB
+žRBžRBžRB žRAùp€Añp€Aép€Aáp€AÙp€AÑp€AÉp€AÁp€A¹p€A±p€A©p€A¡p€Ap€Ap€Ap€Ap€AráHAbáHARáHABáHA2áHA"áHAáHAáH@åÂ@ÅÂ@¥Â@
+Â@K
+@
+
+?
+>>8QìB|ÂBxÂBtÂBpÂBlÂBhÂBdÂB`ÂB\ÂBXÂBTÂBPÂBLÂBHÂBDÂB@ÂB<ÂB8ÂB4ÂB0ÂB,ÂB(ÂB$ÂB ÂB
+ÂBÂBÂBÂB
+ÂBÂBÂB ÂAù
+Añ
+Aé
+Aá
+AÙ
+AÑ
+AÉ
+AÁ
+A¹
+A±
+A©
+A¡
+A
+A
+A
+A
+As
+=Ac
+=AS
+=AC
+=A3
+=A#
+=A
+=A
+=@æ{@Æ{@Š{@{@L(ö@
+(ö?Qì>B\B|ÌÍBxÌÍBtÌÍBpÌÍBlÌÍBhÌÍBdÌÍB`ÌÍB\ÌÍBXÌÍBTÌÍBPÌÍBLÌÍBHÌÍBDÌÍB@ÌÍB<ÌÍB8ÌÍB4ÌÍB0ÌÍB,ÌÍB(ÌÍB$ÌÍB ÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍBÌÍBÌÍB ÌÍAùAñAéAáAÙAÑAÉAÁA¹A±A©A¡AAAAAs33Ac33AS33AC33A333A#33A33A33@æff@Æff@Šff@ff@LÌÍ@
+ÌÍ?>LÌÍB|×
+Bx×
+Bt×
+Bp×
+Bl×
+Bh×
+Bd×
+B`×
+B\×
+BX×
+BT×
+BP×
+BL×
+BH×
+BD×
+B@×
+B<×
+B8×
+B4×
+B0×
+B,×
+B(×
+B$×
+B ×
+B
+×
+B×
+B×
+B×
+B
+×
+B×
+B×
+B ×
+Aù®Añ®Aé®Aá®AÙ®AÑ®AÉ®AÁ®A¹®A±®A©®A¡®A®A®A®A®As\)Ac\)AS\)AC\)A3\)A#\)A\)A\)@æžR@ÆžR@ŠžR@žR@Mp€@
+p€?áH>W
+=B|áHBxáHBtáHBpáHBláHBháHBdáHB`áHB\áHBXáHBTáHBPáHBLáHBHáHBDáHB@áHB<áHB8áHB4áHB0áHB,áHB(áHB$áHB áHB
+áHBáHBáHBáHB
+áHBáHBáHB áHAùÂAñÂAéÂAáÂAÙÂAÑÂAÉÂAÁÂA¹ÂA±ÂA©ÂA¡ÂAÂAÂAÂAÂAs
+Ac
+AS
+AC
+A3
+A#
+A
+A
+@ç
+=@Ç
+=@§
+=@
+=@N{@{?(ö>aG®B|ë
+Bxë
+Btë
+Bpë
+Blë
+Bhë
+Bdë
+B`ë
+B\ë
+BXë
+BTë
+BPë
+BLë
+BHë
+BDë
+B@ë
+B<ë
+B8ë
+B4ë
+B0ë
+B,ë
+B(ë
+B$ë
+B ë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+Bë
+Bë
+B ë
+Aù×
+Añ×
+Aé×
+Aá×
+AÙ×
+AÑ×
+AÉ×
+AÁ×
+A¹×
+A±×
+A©×
+A¡×
+A×
+A×
+A×
+A×
+As®Ac®AS®AC®A3®A#®A®A®@ç\)@Ç\)@§\)@\)@NžR@žR?p€>k
+B|õÃBxõÃBtõÃBpõÃBlõÃBhõÃBdõÃB`õÃB\õÃBXõÃBTõÃBPõÃBLõÃBHõÃBDõÃB@õÃB<õÃB8õÃB4õÃB0õÃB,õÃB(õÃB$õÃB õÃB
+õÃBõÃBõÃBõÃB
+õÃBõÃBõÃB õÃAùë
+Añë
+Aéë
+Aáë
+AÙë
+AÑë
+AÉë
+AÁë
+A¹ë
+A±ë
+A©ë
+A¡ë
+Aë
+Aë
+Aë
+Aë
+As×
+Ac×
+AS×
+AC×
+A3×
+A#×
+A×
+A×
+@ç®@Ç®@§®@®@O\)@\)?žR>uÂB}  By  Bu  Bq  Bm  Bi  Be  Ba  B]  BY  BU  BQ  BM  BI  BE  BA  B=  B9  B5  B1  B-  B)  B%  B!  B
+  B  B  B  B
+  B	  B  B  Aú  Aò  Aê  Aâ  AÚ  AÒ  AÊ  AÂ  Aº  A²  Aª  A¢  A  A  A  A  At  Ad  AT  AD  A4  A$  A  A  @è  @È  @š  @  @P  @  ?   >  B}
+=By
+=Bu
+=Bq
+=Bm
+=Bi
+=Be
+=Ba
+=B]
+=BY
+=BU
+=BQ
+=BM
+=BI
+=BE
+=BA
+=B=
+=B9
+=B5
+=B1
+=B-
+=B)
+=B%
+=B!
+=B
+
+=B
+=B
+=B
+=B
+=B	
+=B
+=B
+=Aú{Aò{Aê{Aâ{AÚ{AÒ{AÊ{AÂ{Aº{A²{Aª{A¢{A{A{A{A{At(öAd(öAT(öAD(öA4(öA$(öA(öA(ö@èQì@ÈQì@šQì@Qì@P£×@£×?¡G®>
+
+žB}{By{Bu{Bq{Bm{Bi{Be{Ba{B]{BY{BU{BQ{BM{BI{BE{BA{B={B9{B5{B1{B-{B){B%{B!{B
+{B{B{B{B
+{B	{B{B{Aú(öAò(öAê(öAâ(öAÚ(öAÒ(öAÊ(öAÂ(öAº(öA²(öAª(öA¢(öA(öA(öA(öA(öAtQìAdQìATQìADQìA4QìA$QìAQìAQì@è£×@È£×@š£×@£×@QG®@G®?¢\>=qB}
+žBy
+žBu
+žBq
+žBm
+žBi
+žBe
+žBa
+žB]
+žBY
+žBU
+žBQ
+žBM
+žBI
+žBE
+žBA
+žB=
+žB9
+žB5
+žB1
+žB-
+žB)
+žB%
+žB!
+žB
+
+žB
+žB
+žB
+žB
+
+žB	
+žB
+žB
+žAú=qAò=qAê=qAâ=qAÚ=qAÒ=qAÊ=qAÂ=qAº=qA²=qAª=qA¢=qA=qA=qA=qA=qAtzáAdzáATzáADzáA4záA$záAzáAzá@èõÃ@ÈõÃ@šõÃ@õÃ@Që
+@ë
+?£×
+>\)B}(öBy(öBu(öBq(öBm(öBi(öBe(öBa(öB](öBY(öBU(öBQ(öBM(öBI(öBE(öBA(öB=(öB9(öB5(öB1(öB-(öB)(öB%(öB!(öB
+(öB(öB(öB(öB
+(öB	(öB(öB(öAúQìAòQìAêQìAâQìAÚQìAÒQìAÊQìAÂQìAºQìA²QìAªQìA¢QìAQìAQìAQìAQìAt£×Ad£×AT£×AD£×A4£×A$£×A£×A£×@éG®@ÉG®@©G®@G®@R\@\?¥
+ž>záB}33By33Bu33Bq33Bm33Bi33Be33Ba33B]33BY33BU33BQ33BM33BI33BE33BA33B=33B933B533B133B-33B)33B%33B!33B
+33B33B33B33B
+33B	33B33B33AúffAòffAêffAâffAÚffAÒffAÊffAÂffAºffA²ffAªffA¢ffAffAffAffAffAtÌÍAdÌÍATÌÍADÌÍA4ÌÍA$ÌÍAÌÍAÌÍ@é@É@©@@S33@33?Šff>B}=qBy=qBu=qBq=qBm=qBi=qBe=qBa=qB]=qBY=qBU=qBQ=qBM=qBI=qBE=qBA=qB==qB9=qB5=qB1=qB-=qB)=qB%=qB!=qB
+=qB=qB=qB=qB
+=qB	=qB=qB=qAúzáAòzáAêzáAâzáAÚzáAÒzáAÊzáAÂzáAºzáA²záAªzáA¢záAzáAzáAzáAzáAtõÃAdõÃATõÃADõÃA4õÃA$õÃAõÃAõÃ@éë
+@Éë
+@©ë
+@ë
+@S×
+@×
+?§®>žRB}G®ByG®BuG®BqG®BmG®BiG®BeG®BaG®B]G®BYG®BUG®BQG®BMG®BIG®BEG®BAG®B=G®B9G®B5G®B1G®B-G®B)G®B%G®B!G®B
+G®BG®BG®BG®B
+G®B	G®BG®BG®Aú\Aò\Aê\Aâ\AÚ\AÒ\AÊ\AÂ\Aº\A²\Aª\A¢\A\A\A\A\Au
+žAe
+žAU
+žAE
+žA5
+žA%
+žA
+žA
+ž@ê=q@Ê=q@ª=q@=q@Tzá@zá?šõÂ>£×
+B}QìByQìBuQìBqQìBmQìBiQìBeQìBaQìB]QìBYQìBUQìBQQìBMQìBIQìBEQìBAQìB=QìB9QìB5QìB1QìB-QìB)QìB%QìB!QìB
+QìBQìBQìBQìB
+QìB	QìBQìBQìAú£×Aò£×Aê£×Aâ£×AÚ£×AÒ£×AÊ£×AÂ£×Aº£×A²£×Aª£×A¢£×A£×A£×A£×A£×AuG®AeG®AUG®AEG®A5G®A%G®AG®AG®@ê\@Ê\@ª\@\@U
+ž@
+ž?ª=q>šõÃB}\)By\)Bu\)Bq\)Bm\)Bi\)Be\)Ba\)B]\)BY\)BU\)BQ\)BM\)BI\)BE\)BA\)B=\)B9\)B5\)B1\)B-\)B)\)B%\)B!\)B
+\)B\)B\)B\)B
+\)B	\)B\)B\)AúžRAòžRAêžRAâžRAÚžRAÒžRAÊžRAÂžRAºžRA²žRAªžRA¢žRAžRAžRAžRAžRAup€Aep€AUp€AEp€A5p€A%p€Ap€Ap€@êáH@ÊáH@ªáH@áH@UÂ@Â?«
+>®{B}ffByffBuffBqffBmffBiffBeffBaffB]ffBYffBUffBQffBMffBIffBEffBAffB=ffB9ffB5ffB1ffB-ffB)ffB%ffB!ffB
+ffBffBffBffB
+ffB	ffBffBffAúÌÍAòÌÍAêÌÍAâÌÍAÚÌÍAÒÌÍAÊÌÍAÂÌÍAºÌÍA²ÌÍAªÌÍA¢ÌÍAÌÍAÌÍAÌÍAÌÍAuAeAUAEA5A%AA@ë33@Ë33@«33@33@Vff@ff?¬ÌÍ>³33B}p€Byp€Bup€Bqp€Bmp€Bip€Bep€Bap€B]p€BYp€BUp€BQp€BMp€BIp€BEp€BAp€B=p€B9p€B5p€B1p€B-p€B)p€B%p€B!p€B
+p€Bp€Bp€Bp€B
+p€B	p€Bp€Bp€AúáHAòáHAêáHAâáHAÚáHAÒáHAÊáHAÂáHAºáHA²áHAªáHA¢áHAáHAáHAáHAáHAuÂAeÂAUÂAEÂA5ÂA%ÂAÂAÂ@ë
+@Ë
+@«
+@
+@W
+>@
+>?®{>žQìB}záByzáBuzáBqzáBmzáBizáBezáBazáB]záBYzáBUzáBQzáBMzáBIzáBEzáBAzáB=záB9záB5záB1záB-záB)záB%záB!záB
+záBzáBzáBzáB
+záB	záBzáBzáAúõÃAòõÃAêõÃAâõÃAÚõÃAÒõÃAÊõÃAÂõÃAºõÃA²õÃAªõÃA¢õÃAõÃAõÃAõÃAõÃAuë
+Aeë
+AUë
+AEë
+A5ë
+A%ë
+Aë
+Aë
+@ë×
+@Ë×
+@«×
+@×
+@W®@®?¯\)>œp€B}
+By
+Bu
+Bq
+Bm
+Bi
+Be
+Ba
+B]
+BY
+BU
+BQ
+BM
+BI
+BE
+BA
+B=
+B9
+B5
+B1
+B-
+B)
+B%
+B!
+B
+
+B
+B
+B
+B
+
+B	
+B
+B
+Aû
+=Aó
+=Aë
+=Aã
+=AÛ
+=AÓ
+=AË
+=AÃ
+=A»
+=A³
+=A«
+=A£
+=A
+=A
+=A
+=A
+=Av{Af{AV{AF{A6{A&{A{A{@ì(ö@Ì(ö@¬(ö@(ö@XQì@Qì?°£×>Â\B}\By\Bu\Bq\Bm\Bi\Be\Ba\B]\BY\BU\BQ\BM\BI\BE\BA\B=\B9\B5\B1\B-\B)\B%\B!\B
+\B\B\B\B
+\B	\B\B\Aû
+žAó
+žAë
+žAã
+žAÛ
+žAÓ
+žAË
+žAÃ
+žA»
+žA³
+žA«
+žA£
+žA
+žA
+žA
+žA
+žAv=qAf=qAV=qAF=qA6=qA&=qA=qA=q@ìzá@Ìzá@¬zá@zá@XõÂ@õÂ?±ë
+>Ç®B}ByBuBqBmBiBeBaB]BYBUBQBMBIBEBAB=B9B5B1B-B)B%B!B
+BBBB
+B	BBAû33Aó33Aë33Aã33AÛ33AÓ33AË33AÃ33A»33A³33A«33A£33A33A33A33A33AvffAfffAVffAFffA6ffA&ffAffAff@ìÌÍ@ÌÌÍ@¬ÌÍ@ÌÍ@Y@?³33>ÌÌÍB}£×By£×Bu£×Bq£×Bm£×Bi£×Be£×Ba£×B]£×BY£×BU£×BQ£×BM£×BI£×BE£×BA£×B=£×B9£×B5£×B1£×B-£×B)£×B%£×B!£×B
+£×B£×B£×B£×B
+£×B	£×B£×B£×AûG®AóG®AëG®AãG®AÛG®AÓG®AËG®AÃG®A»G®A³G®A«G®A£G®AG®AG®AG®AG®Av\Af\AV\AF\A6\A&\A\A\@í
+ž@Í
+ž@­
+ž@
+ž@Z=q@=q?Žzá>Ñë
+B}®By®Bu®Bq®Bm®Bi®Be®Ba®B]®BY®BU®BQ®BM®BI®BE®BA®B=®B9®B5®B1®B-®B)®B%®B!®B
+®B®B®B®B
+®B	®B®B®Aû\)Aó\)Aë\)Aã\)AÛ\)AÓ\)AË\)AÃ\)A»\)A³\)A«\)A£\)A\)A\)A\)A\)AvžRAfžRAVžRAFžRA6žRA&žRAžRAžR@íp€@Íp€@­p€@p€@ZáH@áH?µÂ>×
+=B}žRByžRBužRBqžRBmžRBižRBežRBažRB]žRBYžRBUžRBQžRBMžRBIžRBEžRBAžRB=žRB9žRB5žRB1žRB-žRB)žRB%žRB!žRB
+žRBžRBžRBžRB
+žRB	žRBžRBžRAûp€Aóp€Aëp€Aãp€AÛp€AÓp€AËp€AÃp€A»p€A³p€A«p€A£p€Ap€Ap€Ap€Ap€AváHAfáHAVáHAFáHA6áHA&áHAáHAáH@íÂ@ÍÂ@­Â@Â@[
+@
+?·
+>>Ü(öB}ÂByÂBuÂBqÂBmÂBiÂBeÂBaÂB]ÂBYÂBUÂBQÂBMÂBIÂBEÂBAÂB=ÂB9ÂB5ÂB1ÂB-ÂB)ÂB%ÂB!ÂB
+ÂBÂBÂBÂB
+ÂB	ÂBÂBÂAû
+Aó
+Aë
+Aã
+AÛ
+AÓ
+AË
+AÃ
+A»
+A³
+A«
+A£
+A
+A
+A
+A
+Aw
+=Ag
+=AW
+=AG
+=A7
+=A'
+=A
+=A
+=@î{@Î{@®{@{@\(ö@
+(ö?žQì>áG®B}ÌÍByÌÍBuÌÍBqÌÍBmÌÍBiÌÍBeÌÍBaÌÍB]ÌÍBYÌÍBUÌÍBQÌÍBMÌÍBIÌÍBEÌÍBAÌÍB=ÌÍB9ÌÍB5ÌÍB1ÌÍB-ÌÍB)ÌÍB%ÌÍB!ÌÍB
+ÌÍBÌÍBÌÍBÌÍB
+ÌÍB	ÌÍBÌÍBÌÍAûAóAëAãAÛAÓAËAÃA»A³A«A£AAAAAw33Ag33AW33AG33A733A'33A33A33@îff@Îff@®ff@ff@\ÌÍ@
+ÌÍ?¹>æffB}×
+By×
+Bu×
+Bq×
+Bm×
+Bi×
+Be×
+Ba×
+B]×
+BY×
+BU×
+BQ×
+BM×
+BI×
+BE×
+BA×
+B=×
+B9×
+B5×
+B1×
+B-×
+B)×
+B%×
+B!×
+B
+×
+B×
+B×
+B×
+B
+×
+B	×
+B×
+B×
+Aû®Aó®Aë®Aã®AÛ®AÓ®AË®AÃ®A»®A³®A«®A£®A®A®A®A®Aw\)Ag\)AW\)AG\)A7\)A'\)A\)A\)@îžR@ÎžR@®žR@žR@]p€@
+p€?ºáH>ë
+B}áHByáHBuáHBqáHBmáHBiáHBeáHBaáHB]áHBYáHBUáHBQáHBMáHBIáHBEáHBAáHB=áHB9áHB5áHB1áHB-áHB)áHB%áHB!áHB
+áHBáHBáHBáHB
+áHB	áHBáHBáHAûÂAóÂAëÂAãÂAÛÂAÓÂAËÂAÃÂA»ÂA³ÂA«ÂA£ÂAÂAÂAÂAÂAw
+Ag
+AW
+AG
+A7
+A'
+A
+A
+@ï
+=@Ï
+=@¯
+=@
+=@^{@
+{?Œ(ö>ð£×B}ë
+Byë
+Buë
+Bqë
+Bmë
+Bië
+Beë
+Baë
+B]ë
+BYë
+BUë
+BQë
+BMë
+BIë
+BEë
+BAë
+B=ë
+B9ë
+B5ë
+B1ë
+B-ë
+B)ë
+B%ë
+B!ë
+B
+ë
+Bë
+Bë
+Bë
+B
+ë
+B	ë
+Bë
+Bë
+Aû×
+Aó×
+Aë×
+Aã×
+AÛ×
+AÓ×
+AË×
+AÃ×
+A»×
+A³×
+A«×
+A£×
+A×
+A×
+A×
+A×
+Aw®Ag®AW®AG®A7®A'®A®A®@ï\)@Ï\)@¯\)@\)@^žR@
+žR?œp€>õÂB}õÃByõÃBuõÃBqõÃBmõÃBiõÃBeõÃBaõÃB]õÃBYõÃBUõÃBQõÃBMõÃBIõÃBEõÃBAõÃB=õÃB9õÃB5õÃB1õÃB-õÃB)õÃB%õÃB!õÃB
+õÃBõÃBõÃBõÃB
+õÃB	õÃBõÃBõÃAûë
+Aóë
+Aëë
+Aãë
+AÛë
+AÓë
+AËë
+AÃë
+A»ë
+A³ë
+A«ë
+A£ë
+Aë
+Aë
+Aë
+Aë
+Aw×
+Ag×
+AW×
+AG×
+A7×
+A'×
+A×
+A×
+@ï®@Ï®@¯®@®@_\)@\)?ŸžR>úáHB~  Bz  Bv  Br  Bn  Bj  Bf  Bb  B^  BZ  BV  BR  BN  BJ  BF  BB  B>  B:  B6  B2  B.  B*  B&  B"  B
+  B  B  B  B  B
+  B  B  Aü  Aô  Aì  Aä  AÜ  AÔ  AÌ  AÄ  AŒ  AŽ  A¬  A€  A  A  A  A  Ax  Ah  AX  AH  A8  A(  A  A  @ð  @Ð  @°  @  @`  @   ?À  ?   B~
+=Bz
+=Bv
+=Br
+=Bn
+=Bj
+=Bf
+=Bb
+=B^
+=BZ
+=BV
+=BR
+=BN
+=BJ
+=BF
+=BB
+=B>
+=B:
+=B6
+=B2
+=B.
+=B*
+=B&
+=B"
+=B
+
+=B
+=B
+=B
+=B
+=B
+
+=B
+=B
+=Aü{Aô{Aì{Aä{AÜ{AÔ{AÌ{AÄ{AŒ{AŽ{A¬{A€{A{A{A{A{Ax(öAh(öAX(öAH(öA8(öA((öA(öA(ö@ðQì@ÐQì@°Qì@Qì@`£×@ £×?ÁG®?\B~{Bz{Bv{Br{Bn{Bj{Bf{Bb{B^{BZ{BV{BR{BN{BJ{BF{BB{B>{B:{B6{B2{B.{B*{B&{B"{B
+{B{B{B{B{B
+{B{B{Aü(öAô(öAì(öAä(öAÜ(öAÔ(öAÌ(öAÄ(öAŒ(öAŽ(öA¬(öA€(öA(öA(öA(öA(öAxQìAhQìAXQìAHQìA8QìA(QìAQìAQì@ð£×@Ð£×@°£×@£×@aG®@!G®?Â\?
+žB~
+žBz
+žBv
+žBr
+žBn
+žBj
+žBf
+žBb
+žB^
+žBZ
+žBV
+žBR
+žBN
+žBJ
+žBF
+žBB
+žB>
+žB:
+žB6
+žB2
+žB.
+žB*
+žB&
+žB"
+žB
+
+žB
+žB
+žB
+žB
+žB
+
+žB
+žB
+žAü=qAô=qAì=qAä=qAÜ=qAÔ=qAÌ=qAÄ=qAŒ=qAŽ=qA¬=qA€=qA=qA=qA=qA=qAxzáAhzáAXzáAHzáA8záA(záAzáAzá@ðõÂ@ÐõÂ@°õÂ@õÂ@aë
+@!ë
+?Ã×
+?®B~(öBz(öBv(öBr(öBn(öBj(öBf(öBb(öB^(öBZ(öBV(öBR(öBN(öBJ(öBF(öBB(öB>(öB:(öB6(öB2(öB.(öB*(öB&(öB"(öB
+(öB(öB(öB(öB(öB
+(öB(öB(öAüQìAôQìAìQìAäQìAÜQìAÔQìAÌQìAÄQìAŒQìAŽQìA¬QìA€QìAQìAQìAQìAQìAx£×Ah£×AX£×AH£×A8£×A(£×A£×A£×@ñG®@ÑG®@±G®@G®@b\@"\?Å
+ž?
+=qB~33Bz33Bv33Br33Bn33Bj33Bf33Bb33B^33BZ33BV33BR33BN33BJ33BF33BB33B>33B:33B633B233B.33B*33B&33B"33B
+33B33B33B33B33B
+33B33B33AüffAôffAìffAäffAÜffAÔffAÌffAÄffAŒffAŽffA¬ffA€ffAffAffAffAffAxÌÍAhÌÍAXÌÍAHÌÍA8ÌÍA(ÌÍAÌÍAÌÍ@ñ@Ñ@±@@c33@#33?Æff?
+ÌÍB~=qBz=qBv=qBr=qBn=qBj=qBf=qBb=qB^=qBZ=qBV=qBR=qBN=qBJ=qBF=qBB=qB>=qB:=qB6=qB2=qB.=qB*=qB&=qB"=qB
+=qB=qB=qB=qB=qB
+=qB=qB=qAüzáAôzáAìzáAäzáAÜzáAÔzáAÌzáAÄzáAŒzáAŽzáA¬záA€záAzáAzáAzáAzáAxõÃAhõÃAXõÃAHõÃA8õÃA(õÃAõÃAõÃ@ñë
+@Ñë
+@±ë
+@ë
+@c×
+@#×
+?Ç®?\)B~G®BzG®BvG®BrG®BnG®BjG®BfG®BbG®B^G®BZG®BVG®BRG®BNG®BJG®BFG®BBG®B>G®B:G®B6G®B2G®B.G®B*G®B&G®B"G®B
+G®BG®BG®BG®BG®B
+G®BG®BG®Aü\Aô\Aì\Aä\AÜ\AÔ\AÌ\AÄ\AŒ\AŽ\A¬\A€\A\A\A\A\Ay
+žAi
+žAY
+žAI
+žA9
+žA)
+žA
+žA	
+ž@ò=q@Ò=q@²=q@=q@dzá@$zá?ÈõÂ?ë
+B~QìBzQìBvQìBrQìBnQìBjQìBfQìBbQìB^QìBZQìBVQìBRQìBNQìBJQìBFQìBBQìB>QìB:QìB6QìB2QìB.QìB*QìB&QìB"QìB
+QìBQìBQìBQìBQìB
+QìBQìBQìAü£×Aô£×Aì£×Aä£×AÜ£×AÔ£×AÌ£×AÄ£×AŒ£×AŽ£×A¬£×A€£×A£×A£×A£×A£×AyG®AiG®AYG®AIG®A9G®A)G®AG®A	G®@ò\@Ò\@²\@\@e
+ž@%
+ž?Ê=p?záB~\)Bz\)Bv\)Br\)Bn\)Bj\)Bf\)Bb\)B^\)BZ\)BV\)BR\)BN\)BJ\)BF\)BB\)B>\)B:\)B6\)B2\)B.\)B*\)B&\)B"\)B
+\)B\)B\)B\)B\)B
+\)B\)B\)AüžRAôžRAìžRAäžRAÜžRAÔžRAÌžRAÄžRAŒžRAŽžRA¬žRA€žRAžRAžRAžRAžRAyp€Aip€AYp€AIp€A9p€A)p€Ap€A	p€@òáH@ÒáH@²áH@áH@eÂ@%Â?Ë
+
+?
+=B~ffBzffBvffBrffBnffBjffBfffBbffB^ffBZffBVffBRffBNffBJffBFffBBffB>ffB:ffB6ffB2ffB.ffB*ffB&ffB"ffB
+ffBffBffBffBffB
+ffBffBffAüÌÍAôÌÍAìÌÍAäÌÍAÜÌÍAÔÌÍAÌÌÍAÄÌÍAŒÌÍAŽÌÍA¬ÌÍA€ÌÍAÌÍAÌÍAÌÍAÌÍAyAiAYAIA9A)AA	@ó33@Ó33@³33@33@fff@&ff?ÌÌÍ?B~p€Bzp€Bvp€Brp€Bnp€Bjp€Bfp€Bbp€B^p€BZp€BVp€BRp€BNp€BJp€BFp€BBp€B>p€B:p€B6p€B2p€B.p€B*p€B&p€B"p€B
+p€Bp€Bp€Bp€Bp€B
+p€Bp€Bp€AüáHAôáHAìáHAäáHAÜáHAÔáHAÌáHAÄáHAŒáHAŽáHA¬áHA€áHAáHAáHAáHAáHAyÂAiÂAYÂAIÂA9ÂA)ÂAÂA	Â@ó
+@Ó
+@³
+@
+@g
+>@'
+>?Î{?
+(öB~záBzzáBvzáBrzáBnzáBjzáBfzáBbzáB^záBZzáBVzáBRzáBNzáBJzáBFzáBBzáB>záB:záB6záB2záB.záB*záB&záB"záB
+záBzáBzáBzáBzáB
+záBzáBzáAüõÃAôõÃAìõÃAäõÃAÜõÃAÔõÃAÌõÃAÄõÃAŒõÃAŽõÃA¬õÃA€õÃAõÃAõÃAõÃAõÃAyë
+Aië
+AYë
+AIë
+A9ë
+A)ë
+Aë
+A	ë
+@ó×
+@Ó×
+@³×
+@×
+@g®@'®?Ï\)?
+žRB~
+Bz
+Bv
+Br
+Bn
+Bj
+Bf
+Bb
+B^
+BZ
+BV
+BR
+BN
+BJ
+BF
+BB
+B>
+B:
+B6
+B2
+B.
+B*
+B&
+B"
+B
+
+B
+B
+B
+B
+B
+
+B
+B
+Aý
+=Aõ
+=Aí
+=Aå
+=AÝ
+=AÕ
+=AÍ
+=AÅ
+=Aœ
+=Aµ
+=A­
+=A¥
+=A
+=A
+=A
+=A
+
+=Az{Aj{AZ{AJ{A:{A*{A{A
+{@ô(ö@Ô(ö@Ž(ö@(ö@hQì@(Qì?Ð£×?!G®                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|
+=Bx  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|{Bx
+=Bx
+=Bt  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|(öBx
+žBx{Bt
+=Bp
+=Bl  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|33Bx(öBx(öBt
+žBp{Bl
+=Bl
+=Bh  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|=qBx=qBx33Bt(öBp(öBl
+žBl{Bh
+=Bd
+=Bd  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|QìBxG®Bx=qBt=qBp33Bl(öBl(öBh
+žBd{Bd
+=B`
+=B\  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|\)Bx\)BxQìBtG®Bp=qBl=qBl33Bh(öBd(öBd
+žB`{B\
+=BX
+=BX  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|p€BxffBx\)Bt\)BpQìBlG®Bl=qBh=qBd33Bd(öB`(öB\
+žBX{BX
+=BT
+=BP  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|záBxp€Bxp€BtffBp\)Bl\)BlQìBhG®Bd=qBd=qB`33B\(öBX(öBX
+žBT{BP
+=BP
+=BL  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|
+Bx
+BxzáBtp€Bpp€BlffBl\)Bh\)BdQìBdG®B`=qB\=qBX33BX(öBT(öBP
+žBP{BL
+=BH
+=BH  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|Bx\Bx
+Bt
+BpzáBlp€Blp€BhffBd\)Bd\)B`QìB\G®BX=qBX=qBT33BP(öBP(öBL
+žBH{BH
+=BD
+=B@  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|£×Bx£×BxBt\Bp
+Bl
+BlzáBhp€Bdp€BdffB`\)B\\)BXQìBXG®BT=qBP=qBP33BL(öBH(öBH
+žBD{B@
+=B<
+=B<  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|žRBx®Bx£×Bt£×BpBl\Bl
+Bh
+BdzáBdp€B`p€B\ffBX\)BX\)BTQìBPG®BP=qBL=qBH33BH(öBD(öB@
+žB<{B<
+=B8
+=B4  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÂBxžRBxžRBt®Bp£×Bl£×BlBh\Bd
+Bd
+B`záB\p€BXp€BXffBT\)BP\)BPQìBLG®BH=qBH=qBD33B@(öB<(öB<
+žB8{B4
+=B4
+=B0  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|×
+BxÌÍBxÂBtžRBpžRBl®Bl£×Bh£×BdBd\B`
+B\
+BXzáBXp€BTp€BPffBP\)BL\)BHQìBHG®BD=qB@=qB<33B<(öB8(öB4
+žB4{B0
+=B,
+=B(  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|áHBx×
+Bx×
+BtÌÍBpÂBlžRBlžRBh®Bd£×Bd£×B`B\\BX
+BX
+BTzáBPp€BPp€BLffBH\)BH\)BDQìB@G®B<=qB<=qB833B4(öB4(öB0
+žB,{B(
+=B(
+=B$  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ë
+Bxë
+BxáHBt×
+Bp×
+BlÌÍBlÂBhžRBdžRBd®B`£×B\£×BXBX\BT
+BP
+BPzáBLp€BHp€BHffBD\)B@\)B<QìB<G®B8=qB4=qB433B0(öB,(öB(
+žB({B$
+=B 
+=B   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}  BxõÃBxë
+Btë
+BpáHBl×
+Bl×
+BhÌÍBdÂBdžRB`žRB\®BX£×BX£×BTBP\BP
+BL
+BHzáBHp€BDp€B@ffB<\)B<\)B8QìB4G®B4=qB0=qB,33B((öB((öB$
+žB {B 
+=B
+
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
+=By  By  BtõÃBpë
+Blë
+BláHBh×
+Bd×
+BdÌÍB`ÂB\žRBXžRBX®BT£×BP£×BPBL\BH
+BH
+BDzáB@p€B<p€B<ffB8\)B4\)B4QìB0G®B,=qB(=qB(33B$(öB (öB 
+žB
+{B
+=B
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
+žBy{By
+=Bu  Bq  BlõÃBlë
+Bhë
+BdáHBd×
+B`×
+B\ÌÍBXÂBXžRBTžRBP®BP£×BL£×BHBH\BD
+B@
+B<záB<p€B8p€B4ffB4\)B0\)B,QìB(G®B(=qB$=qB 33B (öB
+(öB
+žB{B
+=B
+=B
+  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}(öBy
+žBy
+žBu{Bq
+=Bm  Bm  BhõÃBdë
+Bdë
+B`áHB\×
+BX×
+BXÌÍBTÂBPžRBPžRBL®BH£×BH£×BDB@\B<
+B<
+B8záB4p€B4p€B0ffB,\)B(\)B(QìB$G®B =qB =qB
+33B(öB(öB
+žB{B
+
+=B
+
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}33By33By(öBu
+žBq
+žBm{Bm
+=Bi  Be  BdõÃB`ë
+B\ë
+BXáHBX×
+BT×
+BPÌÍBPÂBLžRBHžRBH®BD£×B@£×B<B<\B8
+B4
+B4záB0p€B,p€B(ffB(\)B$\)B QìB G®B
+=qB=qB33B(öB(öB
+
+žB
+{B
+=B
+=B  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}G®By=qBy33Bu33Bq(öBm
+žBm
+žBi{Be
+=Be  Ba  B\õÃBXë
+BXë
+BTáHBP×
+BP×
+BLÌÍBHÂBHžRBDžRB@®B<£×B<£×B8B4\B4
+B0
+B,záB(p€B(p€B$ffB \)B \)B
+QìBG®B=qB=qB33B
+(öB
+(öB
+žB{B
+=B 
+=Aø  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}QìByQìByG®Bu=qBq33Bm33Bm(öBi
+žBe
+žBe{Ba
+=B]  BY  BXõÃBTë
+BPë
+BPáHBL×
+BH×
+BHÌÍBDÂB@žRB<žRB<®B8£×B4£×B4B0\B,
+B(
+B(záB$p€B p€B ffB
+\)B\)BQìBG®B=qB
+=qB
+33B(öB(öB
+žB {Aø{Að{Að  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ffBy\)ByQìBuQìBqG®Bm=qBm33Bi33Be(öBe
+žBa
+žB]{BY
+=BY  BU  BPõÃBPë
+BLë
+BHáHBH×
+BD×
+B@ÌÍB<ÂB<žRB8žRB4®B4£×B0£×B,B(\B(
+B$
+B záB p€B
+p€BffB\)B\)BQìB
+G®B
+=qB=qB33B(öB (öAø=qAð(öAð{Aè{Aà  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}p€ByffByffBu\)BqQìBmQìBmG®Bi=qBe33Be33Ba(öB]
+žBY
+žBY{BU
+=BQ  BQ  BLõÃBHë
+BHë
+BDáHB@×
+B<×
+B<ÌÍB8ÂB4žRB4žRB0®B,£×B(£×B(B$\B 
+B 
+B
+záBp€Bp€BffB\)B
+\)B
+QìBG®B=qB=qB 33AøQìAðQìAð=qAè(öAà{Aà{AØ  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
+ByzáByp€BuffBqffBm\)BmQìBiQìBeG®Be=qBa33B]33BY(öBY
+žBU
+žBQ{BQ
+=BM  BI  BHõÃBDë
+B@ë
+B<áHB<×
+B8×
+B4ÌÍB4ÂB0žRB,žRB(®B(£×B$£×B B \B
+
+B
+BzáBp€Bp€B
+ffB
+\)B\)BQìBG®B =qAøzáAðffAðQìAèQìAà=qAà(öAØ{AÐ{AÈ  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}\By
+By
+BuzáBqp€BmffBmffBi\)BeQìBeQìBaG®B]=qBY33BY33BU(öBQ
+žBQ
+žBM{BI
+=BI  BE  B@õÃB<ë
+B<ë
+B8áHB4×
+B4×
+B0ÌÍB,ÂB(žRB(žRB$®B £×B £×B
+B\B
+B
+BzáB
+p€B
+p€BffB\)B\)B QìAø\AðzáAðzáAèffAàQìAàQìAØ=qAÐ(öAÈ{AÈ{AÀ  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ByBy\Bu
+Bq
+BmzáBmp€BiffBeffBe\)BaQìB]QìBYG®BY=qBU33BQ33BQ(öBM
+žBI
+žBI{BE
+=BA  B=  B<õÃB8ë
+B4ë
+B4áHB0×
+B,×
+B(ÌÍB(ÂB$žRB žRB ®B
+£×B£×BB\B
+B
+
+B
+záBp€Bp€BffB \)AøžRAð£×Að\AèzáAàzáAàffAØQìAÐQìAÈ=qAÈ(öAÀ{Až{Až  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}®By£×ByBuBq\Bm
+Bm
+BizáBep€BeffBaffB]\)BYQìBYQìBUG®BQ=qBQ33BM33BI(öBI
+žBE
+žBA{B=
+=B=  B9  B4õÃB4ë
+B0ë
+B,áHB(×
+B(×
+B$ÌÍB ÂB žRB
+žRB®B£×B£×BB
+\B
+
+B
+BzáBp€B p€AøÌÍAðžRAðžRAè£×Aà\AàzáAØzáAÐffAÈQìAÈQìAÀ=qAž(öAž{A°{Aš  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}žRBy®By®Bu£×BqBmBm\Bi
+Be
+BezáBap€B]ffBYffBY\)BUQìBQQìBQG®BM=qBI33BI33BE(öBA
+žB=
+žB={B9
+=B5  B5  B0õÃB,ë
+B(ë
+B(áHB$×
+B ×
+B ÌÍB
+ÂBžRBžRB®B£×B
+£×B
+B\B
+B
+B záAøáHAðáHAðÌÍAèžRAàžRAà£×AØ\AÐzáAÈzáAÈffAÀQìAžQìAž=qA°(öAš{Aš{A   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÌÍByÂByžRBu®Bq®Bm£×BmBiBe\Be
+Ba
+B]záBYp€BYffBUffBQ\)BQQìBMQìBIG®BI=qBE33BA33B=(öB=
+žB9
+žB5{B5
+=B1  B-  B(õÃB(ë
+B$ë
+B áHB ×
+B
+×
+BÌÍBÂBžRBžRB
+®B
+£×B£×BB\B 
+Aù
+=AðõÃAðáHAèáHAàÌÍAàžRAØžRAÐ£×AÈ\AÈzáAÀzáAžffAžQìA°QìAš=qAš(öA {A{A  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}×
+ByÌÍByÌÍBuÂBqžRBm®Bm®Bi£×BeBeBa\B]
+BY
+BYzáBUp€BQffBQffBM\)BIQìBIQìBEG®BA=qB=33B=33B9(öB5
+žB5
+žB1{B-
+=B)  B)  B$õÃB ë
+B ë
+B
+áHB×
+B×
+BÌÍBÂB
+žRB
+žRB®B£×B£×B Aù
+žAñ
+=Añ
+=AèõÃAàáHAàáHAØÌÍAÐžRAÈžRAÈ£×AÀ\AžzáAžzáA°ffAšQìAšQìA =qA(öA{A{A  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}áHByáHBy×
+BuÌÍBqÌÍBmÂBmžRBi®Be®Be£×BaB]BY\BY
+BU
+BQzáBQp€BMffBIffBI\)BEQìBAQìB=G®B==qB933B533B5(öB1
+žB-
+žB){B)
+=B%  B!  B õÃB
+ë
+Bë
+BáHB×
+B×
+B
+ÌÍB
+ÂBžRBžRB®B £×AùG®Añ33Añ
+žAé
+=Aá
+=AàõÃAØáHAÐáHAÈÌÍAÈžRAÀžRAž£×Až\A°záAšzáAšffA QìAQìA=qA(öA{A{A  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}õÃByë
+ByáHBuáHBq×
+BmÌÍBmÌÍBiÂBežRBe®Ba®B]£×BYBYBU\BQ
+BQ
+BMzáBIp€BIffBEffBA\)B=QìB=QìB9G®B5=qB533B133B-(öB)
+žB)
+žB%{B!
+=B!  B
+  BõÃBë
+Bë
+BáHB
+×
+B
+×
+BÌÍBÂBžRB žRAù\)AñG®AñG®Aé33Aá
+žAá
+=AÙ
+=AÐõÃAÈáHAÈáHAÀÌÍAžžRAžžRA°£×Aš\AšzáA záAffAQìAQìA=qA(öA{Ap(öA`  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~  Bz  ByõÃBuë
+BqáHBmáHBm×
+BiÌÍBeÌÍBeÂBažRB]®BY®BY£×BUBQBQ\BM
+BI
+BIzáBEp€BAffB=ffB=\)B9QìB5QìB5G®B1=qB-33B)33B)(öB%
+žB!
+žB!{B
+
+=B  B  BõÃBë
+B
+ë
+B
+áHB×
+B×
+BÌÍB ÂAùp€Añp€Añ\)AéG®AáG®Aá33AÙ
+žAÑ
+=AÉ
+=AÈõÃAÀáHAžáHAžÌÍA°žRAšžRAš£×A \AzáAzáAffAQìAQìA=qApQìA`(öAP(öAP  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~{Bz
+=Bz  Bv  BqõÃBmë
+BmáHBiáHBe×
+BeÌÍBaÌÍB]ÂBYžRBY®BU®BQ£×BQBMBI\BI
+BE
+BAzáB=p€B=ffB9ffB5\)B5QìB1QìB-G®B)=qB)33B%33B!(öB!
+žB
+
+žB{B
+=B  B  B
+õÃB
+ë
+Bë
+BáHB×
+B ×
+AùAñ
+Añp€Aép€Aá\)AáG®AÙG®AÑ33AÉ
+žAÉ
+=AÁ
+=AžõÃAžáHA°áHAšÌÍAšžRA žRA£×A\AzáAzáAffAQìAp£×A`záAPQìAP(öA@(öA0  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~
+žBz{Bz{Bv
+=Br  Bn  BmõÃBië
+BeáHBeáHBa×
+B]ÌÍBYÌÍBYÂBUžRBQ®BQ®BM£×BIBIBE\BA
+B=
+B=záB9p€B5ffB5ffB1\)B-QìB)QìB)G®B%=qB!33B!33B
+(öB
+žB
+žB{B
+=B
+  B
+  BõÃBë
+Bë
+B áHAù®Añ®AñAé
+Aáp€Aáp€AÙ\)AÑG®AÉG®AÉ33AÁ
+žA¹
+=A¹
+=A°õÃAšáHAšáHA ÌÍAžRAžRA£×A\AzáAzáApÌÍA`£×AP£×APzáA@QìA0(öA0(öA   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~(öBz(öBz
+žBv{Br{Bn
+=Bn  Bj  BeõÃBeë
+BaáHB]áHBY×
+BYÌÍBUÌÍBQÂBQžRBM®BI®BI£×BEBAB=\B=
+B9
+B5záB5p€B1ffB-ffB)\)B)QìB%QìB!G®B!=qB
+33B33B(öB
+žB
+žB
+{B
+=B	  B  BõÃB ë
+Aù×
+AñÂAñ®Aé®AáAá
+AÙp€AÑp€AÉ\)AÉG®AÁG®A¹33A¹
+žA±
+=A©
+=AšõÃA áHAáHAÌÍAžRAžRA£×A\ApõÃA`õÃAPÌÍAP£×A@£×A0záA0QìA (öA(öA  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~=qBz33Bz(öBv(öBr
+žBn{Bn{Bj
+=Bf  Bf  BaõÃB]ë
+BYáHBYáHBU×
+BQÌÍBQÌÍBMÂBIžRBI®BE®BA£×B=B=B9\B5
+B5
+B1záB-p€B)ffB)ffB%\)B!QìB!QìB
+G®B=qB33B33B(öB
+
+žB
+
+žB	{B
+=B  B  Aùë
+Añ×
+Añ×
+AéÂAá®Aá®AÙAÑ
+AÉp€AÉp€AÁ\)A¹G®A¹G®A±33A©
+žA©
+=A¡
+=AõÃAáHAáHAÌÍAžRAžRAqG®Aa
+žAPõÃAPõÃA@ÌÍA0£×A0£×A záAQìA(öA (ö@à  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~G®BzG®Bz=qBv33Br(öBn(öBn
+žBj{Bf{Bf
+=Bb  B^  BYõÃBYë
+BUáHBQáHBQ×
+BMÌÍBIÌÍBIÂBEžRBA®B=®B=£×B9B5B5\B1
+B-
+B)záB)p€B%ffB!ffB!\)B
+QìBQìBG®B=qB33B
+33B
+(öB	
+žB
+žB{B
+=Aú  Aò  Añë
+Aé×
+Aá×
+AáÂAÙ®AÑ®AÉAÉ
+AÁp€A¹p€A¹\)A±G®A©G®A©33A¡
+žA
+=A
+=AõÃAáHAáHAÌÍAqp€Aap€AQG®AQ
+žA@õÃA0õÃA0ÌÍA £×A£×AzáA Qì@àQì@ÀQì@À  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~\)BzQìBzG®BvG®Br=qBn33Bn(öBj(öBf
+žBf{Bb{B^
+=BZ  BZ  BUõÃBQë
+BQáHBMáHBI×
+BIÌÍBEÌÍBAÂB=žRB=®B9®B5£×B5B1B-\B)
+B)
+B%záB!p€B!ffB
+ffB\)BQìBQìBG®B
+=qB
+33B	33B(öB
+žB
+žAú(öAò{Aò  Aê  Aáë
+Aá×
+AÙ×
+AÑÂAÉ®AÉ®AÁA¹
+A¹p€A±p€A©\)A©G®A¡G®A33A
+žA
+=A
+=AõÃAáHAqÂAaAQp€AQp€AAG®A1
+žA0õÃA õÃAÌÍA£×A £×@àõÃ@À£×@ÀQì@ Qì@  ¿  ¿  ¿  ¿  ¿  ¿  B~ffBz\)Bz\)BvQìBrG®BnG®Bn=qBj33Bf(öBf(öBb
+žB^{BZ{BZ
+=BV  BR  BQõÃBMë
+BIáHBIáHBE×
+BAÌÍB=ÌÍB=ÂB9žRB5®B5®B1£×B-B)B)\B%
+B!
+B!záB
+p€BffBffB\)BQìB
+QìB
+G®B	=qB33B33B(öAú=qAò=qAò(öAê{Aâ  Aâ  AÙë
+AÑ×
+AÉ×
+AÉÂAÁ®A¹®A¹A±
+A©p€A©p€A¡\)AG®AG®A33A
+žA
+=A
+=Aqë
+AaÂAQÂAQAAp€A1p€A1G®A!
+žAõÃAõÃA ÌÍ@áG®@ÁG®@ÀõÃ@ £×@Qì@Qì@@  ¿  ¿  ¿  ¿  B~záBzp€BzffBv\)Br\)BnQìBnG®BjG®Bf=qBf33Bb(öB^(öBZ
+žBZ{BV{BR
+=BR  BN  BIõÃBIë
+BEáHBAáHB=×
+B=ÌÍB9ÌÍB5ÂB5žRB1®B-®B)£×B)B%B!\B!
+B
+
+BzáBp€BffBffB
+\)B
+QìB	QìBG®B=qB33AúffAòQìAò=qAê=qAâ(öAâ{AÚ  AÒ  AÉë
+AÉ×
+AÁ×
+A¹ÂA¹®A±®A©A©
+A¡p€Ap€A\)AG®AG®A33A
+žAr{Ab{AQë
+AQÂAAÂA1A1p€A!p€AG®A
+žA õÃ@áë
+@Á@ÁG®@¡G®@õÃ@£×@@£×@ £×?  ¿  ¿  B~
+BzzáBzzáBvp€BrffBn\)Bn\)BjQìBfG®BfG®Bb=qB^33BZ(öBZ(öBV
+žBR{BR{BN
+=BJ  BJ  BEõÃBAë
+B=áHB=áHB9×
+B5ÌÍB5ÌÍB1ÂB-žRB)®B)®B%£×B!B!B
+\B
+B
+BzáBp€B
+ffB
+ffB	\)BQìBQìBG®AúzáAòffAòffAêQìAâ=qAâ=qAÚ(öAÒ{AÊ  AÊ  AÁë
+A¹×
+A¹×
+A±ÂA©®A©®A¡A
+Ap€Ap€A\)AG®AG®ArffAb=qAR{AR{AAë
+A1ÂA1ÂA!Ap€Ap€AG®@â=q@Áë
+@Áë
+@¡@G®@G®@Aë
+@G®?G®?G®    ¿  ¿  Bz
+BvzáBrzáBnp€BnffBj\)Bf\)BfQìBbG®B^G®BZ=qBZ33BV(öBR(öBR
+žBN{BJ{BJ
+=BF  BB  B=õÃB=ë
+B9áHB5áHB5×
+B1ÌÍB-ÌÍB)ÂB)žRB%®B!®B!£×B
+BB\B
+B
+B
+záB
+p€B	ffBffB\)BQìAú£×Aò\AòzáAêffAâffAâQìAÚ=qAÒ=qAÊ(öAÊ{AÂ  Aº  A¹ë
+A±×
+A©×
+A©ÂA¡®A®AA
+Ap€Ap€A\)Ar\Ab\ARffAR=qAB{A2{A1ë
+A!ÂAÂAAp€@âáH@Â\@Â=q@¡ë
+@ë
+@@B\@\?×
+?\<#×
+¿  ¿  ¿  ¿  Br
+BnzáBnzáBjp€BfffBf\)Bb\)B^QìBZG®BZG®BV=qBR33BR(öBN(öBJ
+žBJ{BF{BB
+=B>  B>  B9õÃB5ë
+B5áHB1áHB-×
+B)ÌÍB)ÌÍB%ÂB!žRB!®B
+®B£×BBB\B
+
+B
+
+B	záBp€BffBffAúžRAò£×Aò£×Aê\AâzáAâffAÚffAÒQìAÊ=qAÊ=qAÂ(öAº{Aº  A²  A©ë
+A©×
+A¡×
+AÂA®A®AA
+Ap€AráHAbžRAR\AR\ABffA2=qA2{A"{Aë
+AÂAÂ@ã33@ÂáH@ÂáH@¢\@=q@ë
+@C×
+@33?
+
+ž?
+
+ž<õÂ¿  ¿  ¿  ¿  ¿  ¿  Bn
+BjzáBfzáBfp€BbffB^\)BZ\)BZQìBVG®BRG®BR=qBN33BJ(öBJ(öBF
+žBB{B>{B>
+=B:  B6  B5õÃB1ë
+B-áHB)áHB)×
+B%ÌÍB!ÌÍB!ÂB
+žRB®B®B£×BB
+B
+\B	
+B
+BzáBp€AúÌÍAòÌÍAòžRAê£×Aâ£×Aâ\AÚzáAÒffAÊffAÊQìAÂ=qAº=qAº(öA²{Aª  Aª  A¡ë
+A×
+A×
+AÂA®A®AAs
+=AbáHARáHARžRAB\A2\A2ffA"=qA{A{Aë
+@ã
+@Ã
+@Ã33@¢áH@áH@\@Dzá@×
+?®?ff=#×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bf
+BfzáBbzáB^p€BZffBZ\)BV\)BRQìBRG®BNG®BJ=qBJ33BF(öBB(öB>
+žB>{B:{B6
+=B6  B2  B-õÃB)ë
+B)áHB%áHB!×
+B!ÌÍB
+ÌÍBÂBžRB®B®B
+£×B
+B	B\B
+B
+AúõÃAòáHAòÌÍAêÌÍAâžRAâ£×AÚ£×AÒ\AÊzáAÊffAÂffAºQìAº=qA²=qAª(öAª{A¢  A  Aë
+A×
+A×
+AÂA®As\)Ac33AS
+=ARáHABáHA2žRA2\A"\AffA=qA{@ä(ö@Ã×
+@Ã
+@£
+@33@áH@EÂ@
+ž?õÃ?®=uÂ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bb
+B^záBZzáBZp€BVffBR\)BR\)BNQìBJG®BJG®BF=qBB33B>(öB>(öB:
+žB6{B6{B2
+=B.  B*  B)õÃB%ë
+B!áHB!áHB
+×
+BÌÍBÌÍBÂBžRB
+®B
+®B	£×BBB\Aû
+=Aó
+=AòõÃAêáHAâÌÍAâÌÍAÚžRAÒ£×AÊ£×AÊ\AÂzáAºffAºffA²QìAª=qAª=qA¢(öA{A  A  Aë
+A×
+A×
+As
+Ac\)AS\)AS33AC
+=A2áHA2áHA"žRA\A\Aff@äzá@Ä(ö@Ä(ö@£×
+@
+@
+@Fff@Â?
+?=q=\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BZ
+BZzáBVzáBRp€BRffBN\)BJ\)BJQìBFG®BBG®B>=qB>33B:(öB6(öB6
+žB2{B.{B*
+=B*  B&  B!õÃB!ë
+B
+áHBáHB×
+BÌÍBÌÍB
+ÂB
+žRB	®B®B£×BAû33Aó
+žAó
+=Aë
+=AâõÃAâáHAÚÌÍAÒÌÍAÊžRAÊ£×AÂ£×Aº\AºzáA²ffAªffAªQìA¢=qA=qA(öA{A  A  Aë
+As®Ac®AS
+AS\)AC\)A333A3
+=A"áHAáHAžRA\@å
+ž@ÄÌÍ@Äzá@€(ö@(ö@×
+@G
+=@
+=?ÌÍ?
+=žQì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BV
+BRzáBRzáBNp€BJffBJ\)BF\)BBQìB>G®B>G®B:=qB633B6(öB2(öB.
+žB*{B*{B&
+=B"  B"  B
+õÃBë
+BáHBáHB×
+B
+ÌÍB
+ÌÍB	ÂBžRB®B®AûG®Aó33Aó33Aë
+žAã
+=Aã
+=AÚõÃAÒáHAÊÌÍAÊÌÍAÂžRAº£×Aº£×A²\AªzáAªffA¢ffAQìA=qA=qA(öA{A  At  Ac×
+AS®AS®AC
+A3\)A3\)A#33A
+=AáHAáH@åp€@Å
+ž@Å
+ž@€ÌÍ@zá@(ö@HQì@®?{?{=ÌÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BR
+BNzáBJzáBJp€BFffBB\)B>\)B>QìB:G®B6G®B6=qB233B.(öB*(öB*
+žB&{B"{B"
+=B
+  B  BõÃBë
+BáHB
+áHB
+×
+B	ÌÍBÌÍBÂBžRAû\)Aó\)AóG®Aë33Aã33Aã
+žAÛ
+=AÓ
+=AÊõÃAÊáHAÂÌÍAºÌÍAºžRA²£×Aª£×Aª\A¢záAffAffAQìA=qA=qA(öAt(öAd  AT  AS×
+AC®A3®A3
+A#\)A\)A33A
+=@åÂ@ÅÂ@Åp€@¥
+ž@
+
+ž@ÌÍ@HõÃ@Qì?£×?\)=áG®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BJ
+BJzáBFzáBBp€B>ffB>\)B:\)B6QìB6G®B2G®B.=qB*33B*(öB&(öB"
+žB"{B
+{B
+=B  B  BõÃB
+ë
+B
+áHB	áHB×
+BÌÍBÌÍAû
+Aóp€Aó\)Aë\)AãG®Aã33AÛ33AÓ
+žAË
+=AË
+=AÂõÃAºáHAºÌÍA²ÌÍAªžRAª£×A¢£×A\AzáAffAffAQìA=qAtzáAdQìAT(öAT  AD  A3×
+A3®A#®A
+A\)A\)@æff@Æ{@ÅÂ@¥Â@
+p€@
+
+ž@J=q@	?ë
+?£×>
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BF
+BBzáB>záB>p€B:ffB6\)B6\)B2QìB.G®B*G®B*=qB&33B"(öB"(öB
+
+žB{B{B
+=B  B  B
+õÃB	ë
+BáHBáHB×
+AûAóAó
+Aëp€Aã\)Aã\)AÛG®AÓ33AË33AË
+žAÃ
+=A»
+=AºõÃA²áHAªÌÍAªÌÍA¢žRA£×A£×A\AzáAffAffAt£×AdzáATzáATQìAD(öA4  A4  A#×
+A®A®A
+@æžR@ÆžR@Æff@Š{@
+Â@
+Â@JáH@
+=q?zá?33>\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B>
+B>záB:záB6p€B6ffB2\)B.\)B*QìB*G®B&G®B"=qB"33B
+(öB(öB
+žB{B{B
+=B  B
+  BõÃBë
+BáHAûÂAó®AóAëAã
+Aãp€AÛ\)AÓ\)AËG®AË33AÃ33A»
+žA»
+=A³
+=AªõÃAªáHA¢ÌÍAÌÍAžRA£×A£×A\AzáAtÌÍAdÌÍAT£×ATzáADzáA4QìA4(öA$  A  A×
+A®@ç\)@Ç
+=@ÆžR@ŠžR@ff@{@K
+@
+
+?Â?zá>#×
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B:
+B6záB6záB2p€B.ffB*\)B*\)B&QìB"G®B"G®B
+=qB33B(öB(öB
+žB{B{B
+
+=B  B  BõÃAû×
+AóÂAóÂAë®AãAãAÛ
+AÓp€AË\)AË\)AÃG®A»33A»33A³
+žA«
+=A«
+=A¢õÃAáHAÌÍAÌÍAžRA£×A£×Au
+žAdõÃATÌÍATÌÍAD£×A4záA4záA$QìA(öA  A  @ç®@Ç\)@Ç\)@§
+=@žR@žR@LÌÍ@
+(ö?
+>?
+>>.{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B6
+B2záB.záB*p€B*ffB&\)B"\)B"QìB
+G®BG®B=qB33B(öB(öB
+žB
+{B{B
+=B  Aü  Aóë
+Aó×
+AëÂAãÂAã®AÛAÓAË
+AËp€AÃ\)A»\)A»G®A³33A«33A«
+žA£
+=A
+=AõÃAáHAÌÍAÌÍAžRAuG®AeG®AU
+žATõÃADÌÍA4ÌÍA4£×A$záAzáAQìA(ö@è  @È  @Ç®@§\)@\)@
+=@Mp€@
+p€??Qì>8Qì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B.
+B*záB*záB&p€B"ffB"\)B
+\)BQìBG®BG®B=qB33B(öB
+(öB
+žB{B{Aü{Aô  Aô  Aëë
+Aã×
+AãÂAÛÂAÓ®AËAËAÃ
+A»p€A»\)A³\)A«G®A«33A£33A
+žA
+=A
+=AõÃAáHAÌÍAuAep€AUG®AUG®AE
+žA4õÃA4ÌÍA$ÌÍA£×AzáAzá@è£×@ÈQì@È  @š  @®@\)@NžR@{?áH?áH>LÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B*
+B&záB"záB"p€B
+ffB\)B\)BQìBG®BG®B=qB
+33B(öB(öB
+žAü(öAô(öAô{Aì  Aä  Aãë
+AÛ×
+AÓÂAËÂAË®AÃA»A»
+A³p€A«\)A«\)A£G®A33A33A
+žA
+=A
+=AõÃAuÂAeAUAUp€AEG®A5G®A5
+žA$õÃAÌÍAÌÍA£×@èõÃ@ÈõÃ@È£×@šQì@  @  @O\)@žR?p€?(ö>W
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B"
+B"záB
+záBp€BffB\)B\)BQìBG®B
+G®B=qB33B(öAüQìAô=qAô(öAì(öAä{Aä  AÜ  AÓë
+AË×
+AËÂAÃÂA»®A»A³A«
+A«p€A£\)A\)AG®A33A33A
+žA
+=Av{Aeë
+AUÂAUAEA5p€A5G®A%G®A
+žAõÃAÌÍ@é@ÉG®@ÈõÃ@šõÃ@£×@Qì@P  @  ?žR?p€>k
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+
+BzáBzáBp€BffB\)B\)B
+QìBG®BG®B=qAüffAôQìAôQìAì=qAä(öAä(öAÜ{AÔ  AÌ  AËë
+AÃ×
+A»ÂA»ÂA³®A«A«A£
+Ap€A\)A\)AG®A33A33Av=qAf{AV{AUë
+AEÂA5A5A%p€AG®AG®A
+ž@éë
+@É@É@©G®@õÃ@õÃ@QG®@£×?   ?   >uÂ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+BzáBzáBp€BffB
+\)B\)BQìBG®Aü\AôzáAôffAìQìAäQìAä=qAÜ(öAÔ(öAÌ{AÌ  AÄ  A»ë
+A»×
+A³ÂA«ÂA«®A£AA
+Ap€A\)A\)AG®AvffAfffAV=qAV{AF{A5ë
+A5ÂA%AAp€AG®@ê\@Ê=q@Éë
+@©@@G®@Që
+@ë
+?¢\?¡G®>  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+BzáBzáB
+p€BffB\)B\)Aü£×Aô\Aô\AìzáAäffAäQìAÜQìAÔ=qAÌ(öAÌ(öAÄ{AŒ  AŒ  A³ë
+A«×
+A«ÂA£ÂA®AAA
+Ap€A\)AvžRAf\AVffAVffAF=qA6{A6{A%ë
+AÂAA@êáH@Ê\@Ê\@ª=q@ë
+@@S33@\?£×
+?£×
+>=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+B
+záBzáBp€BffAüžRAôžRAô£×Aì\Aä\AäzáAÜffAÔQìAÌQìAÌ=qAÄ(öAŒ(öAŒ{AŽ  A¬  A«ë
+A£×
+AÂAÂA®AAA
+AváHAfžRAVžRAV\AFffA6ffA6=qA&{A{Aë
+AÂ@ë33@Ë33@ÊáH@ª\@\@=q@S×
+@33?Šff?¥
+ž>\)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+BzáBzáAüáHAôÌÍAôžRAìžRAä£×Aä\AÜ\AÔzáAÌffAÌQìAÄQìAŒ=qAŒ(öAŽ(öA¬{A¬  A€  Aë
+A×
+AÂAÂA®AAw33Ag
+=AVáHAVžRAFžRA6\A6ffA&ffA=qA{A{@ë×
+@Ë
+@Ë33@«33@áH@\@U
+ž@zá?§®?Šff>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
+AüõÃAôõÃAôáHAìÌÍAäžRAäžRAÜ£×AÔ\AÌ\AÌzáAÄffAŒQìAŒQìAŽ=qA¬(öA¬(öA€{A  A  Aë
+A×
+AÂAÂAw\)Ag33AW33AW
+=AFáHA6žRA6žRA&\AffAffA=q@ì(ö@Ì(ö@Ë×
+@«
+@33@33@UÂ@
+ž?ª=q?šõÂ>žR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aõ
+=AôõÃAìõÃAäáHAäÌÍAÜžRAÔžRAÌ£×AÌ\AÄ\AŒzáAŒffAŽQìA¬QìA¬=qA€(öA(öA{A  A  Aë
+A×
+Aw
+Ag
+AW\)AW33AG33A7
+=A6áHA&žRAžRA\Aff@ìÌÍ@Ìzá@Ì(ö@¬(ö@×
+@
+@Vff@ff?«
+?ª=q>šõÃ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aí
+=AäõÃAäõÃAÜáHAÔÌÍAÌžRAÌžRAÄ£×AŒ\AŒ\AŽzáA¬ffA¬QìA€QìA=qA(öA(öA{A  A  Aw×
+Ag®AW
+AW
+AG\)A733A733A'
+=AáHAžRAžR@í
+ž@ÌÌÍ@ÌÌÍ@¬zá@(ö@(ö@W®@
+>?¬ÌÍ?¬ÌÍ>®{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aå
+=AÜõÃAÔõÃAÌáHAÌÌÍAÄžRAŒžRAŒ£×AŽ\A¬\A¬záA€ffAQìAQìA=qA(öA(öA{Ax  Ah  AW×
+AW®AG
+A7
+A7\)A'33A33A
+=AáH@íp€@Íp€@Í
+ž@¬ÌÍ@ÌÍ@zá@XQì@Qì?¯\)?®{>³33¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÕ
+=AÌõÃAÌõÃAÄáHAŒÌÍAŒžRAŽžRA¬£×A¬\A€\AzáAffAQìAQìA=qA(öAxQìAh(öAX  AX  AG×
+A7®A7
+A'
+A\)A33A33@î{@ÍÂ@Íp€@­p€@
+ž@ÌÍ@Y@õÂ?°£×?°£×>œp€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÍ
+=AÄõÃAŒõÃAŒáHAŽÌÍA¬žRA¬žRA€£×A\A\AzáAffAQìAQìAxzáAhQìAXQìAX(öAH  A8  A7×
+A'®A
+A
+A\)@îff@Îff@Î{@­Â@p€@p€@Z=q@?³33?±ë
+>Â\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aœ
+=AŒõÃAŽõÃA¬áHA¬ÌÍA€žRAžRA£×A\A\AzáAffAx£×Ah£×AXzáAXQìAHQìA8(öA8  A(  A×
+A®A
+@ï
+=@ÎžR@Îff@®ff@{@Â@ZáH@áH?Žzá?³33>ÌÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aµ
+=A¬õÃA¬õÃA€áHAÌÍAžRAžRA£×A\A\AxõÃAhÌÍAX£×AX£×AHzáA8QìA8QìA((öA  A  A×
+@ï\)@Ï
+=@Ï
+=@®žR@ff@ff@\(ö@
+?µÂ?µÂ>Ñë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A­
+=A€õÃAõÃAáHAÌÍAžRAžRA£×Ay
+žAi
+žAXõÃAXÌÍAH£×A8£×A8záA(QìAQìA(öA  @ð  @Ï®@Ï\)@¯
+=@
+=@žR@\ÌÍ@
+ÌÍ?žQì?·
+>>×
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+=AõÃAõÃAáHAÌÍAžRAyp€AiG®AY
+žAY
+žAHõÃA8ÌÍA8£×A(£×AzáAQìAQì@ðQì@Ð  @Ð  @¯®@\)@
+=@^{@
+p€?¹?¹>áG®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+=AõÃAõÃAáHAyAip€AYp€AYG®AI
+žA9
+žA8õÃA(ÌÍA£×A£×Azá@ð£×@Ð£×@ÐQì@°  @  @®@^žR@
+{?Œ(ö?ºáH>æff¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+
+=AõÃAyë
+AiÂAYAYp€AIp€A9G®A9
+žA)
+žAõÃAÌÍA£×@ñG®@ÐõÂ@Ð£×@°£×@Qì@  @`  @\)?œp€?Œ(ö>ð£×¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Az{Aië
+AYë
+AYÂAIA9p€A9p€A)G®A
+žA
+žAõÃ@ñ@ÑG®@ÑG®@°õÂ@£×@£×@`£×@   ?À  ?ŸžR>õÂ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AZ{AYë
+AIë
+A9ÂA9A)p€Ap€AG®A	
+ž@ò=q@Ñë
+@Ñ@±G®@G®@õÂ@aG®@!G®?ÁG®?À  ?   ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AJ{A9ë
+A9ë
+A)ÂAAp€A	p€@ò\@Ò=q@Ò=q@±ë
+@@G®@b\@!ë
+?Â\?Â\?\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A:{A)ë
+Aë
+AÂA	@òáH@ÒáH@Ò\@²=q@=q@ë
+@c33@"\?Å
+ž?Ã×
+?
+ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A{Aë
+A	ë
+@ó
+@Ó33@ÒáH@²áH@\@=q@dzá@#×
+?Æff?Å
+ž?
+=q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
+{@ó×
+@Ó×
+@Ó
+@³33@áH@áH@e
+ž@$zá?ÈõÂ?Ç®?
+ÌÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ô(ö@Ó×
+@³×
+@
+@33@eÂ@%Â?Ê=p?ÈõÂ?ë
+¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ž(ö@×
+@×
+@g
+>@&ff?Ë
+
+?Ë
+
+?zá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @(ö@g®@'®?Î{?ÌÌÍ?
+=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @(Qì?Ï\)?Ï\)?
+(ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?Ð£×?
+žR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B~
+B~záB~p€B~ffB~\)B~QìB~G®B~=qB~33B~(öB~
+žB~{B~
+=B~  B}õÃB}ë
+B}áHB}×
+B}ÌÍB}ÂB}žRB}®B}£×B}B}\B}
+B}záB}p€B}ffB}\)B}QìB}G®B}=qB}33B}(öB}
+žB}{B}
+=B}  B|õÃB|ë
+B|áHB|×
+B|ÌÍB|ÂB|žRB|®B|£×B|B|\B|
+B|záB|p€B|ffB|\)B|QìB|G®B|=qB|33B|(öB|
+žB|{B|
+=B|  Bz
+BzzáBzp€BzffBz\)BzQìBzG®Bz=qBz33Bz(öBz
+žBz{Bz
+=Bz  ByõÃByë
+ByáHBy×
+ByÌÍByÂByžRBy®By£×ByBy\By
+ByzáByp€ByffBy\)ByQìByG®By=qBy33By(öBy
+žBy{By
+=By  BxõÃBxë
+BxáHBx×
+BxÌÍBxÂBxžRBx®Bx£×BxBx\Bx
+BxzáBxp€BxffBx\)BxQìBxG®Bx=qBx33Bx(öBx
+žBx{Bx
+=Bx  Bv
+BvzáBvp€BvffBv\)BvQìBvG®Bv=qBv33Bv(öBv
+žBv{Bv
+=Bv  BuõÃBuë
+BuáHBu×
+BuÌÍBuÂBužRBu®Bu£×BuBu\Bu
+BuzáBup€BuffBu\)BuQìBuG®Bu=qBu33Bu(öBu
+žBu{Bu
+=Bu  BtõÃBtë
+BtáHBt×
+BtÌÍBtÂBtžRBt®Bt£×BtBt\Bt
+BtzáBtp€BtffBt\)BtQìBtG®Bt=qBt33Bt(öBt
+žBt{Bt
+=Bt  Br
+BrzáBrp€BrffBr\)BrQìBrG®Br=qBr33Br(öBr
+žBr{Br
+=Br  BqõÃBqë
+BqáHBq×
+BqÌÍBqÂBqžRBq®Bq£×BqBq\Bq
+BqzáBqp€BqffBq\)BqQìBqG®Bq=qBq33Bq(öBq
+žBq{Bq
+=Bq  BpõÃBpë
+BpáHBp×
+BpÌÍBpÂBpžRBp®Bp£×BpBp\Bp
+BpzáBpp€BpffBp\)BpQìBpG®Bp=qBp33Bp(öBp
+žBp{Bp
+=Bp  Bn
+BnzáBnp€BnffBn\)BnQìBnG®Bn=qBn33Bn(öBn
+žBn{Bn
+=Bn  BmõÃBmë
+BmáHBm×
+BmÌÍBmÂBmžRBm®Bm£×BmBm\Bm
+BmzáBmp€BmffBm\)BmQìBmG®Bm=qBm33Bm(öBm
+žBm{Bm
+=Bm  BlõÃBlë
+BláHBl×
+BlÌÍBlÂBlžRBl®Bl£×BlBl\Bl
+BlzáBlp€BlffBl\)BlQìBlG®Bl=qBl33Bl(öBl
+žBl{Bl
+=Bl  Bj
+BjzáBjp€BjffBj\)BjQìBjG®Bj=qBj33Bj(öBj
+žBj{Bj
+=Bj  BiõÃBië
+BiáHBi×
+BiÌÍBiÂBižRBi®Bi£×BiBi\Bi
+BizáBip€BiffBi\)BiQìBiG®Bi=qBi33Bi(öBi
+žBi{Bi
+=Bi  BhõÃBhë
+BháHBh×
+BhÌÍBhÂBhžRBh®Bh£×BhBh\Bh
+BhzáBhp€BhffBh\)BhQìBhG®Bh=qBh33Bh(öBh
+žBh{Bh
+=Bh  Bf
+BfzáBfp€BfffBf\)BfQìBfG®Bf=qBf33Bf(öBf
+žBf{Bf
+=Bf  BeõÃBeë
+BeáHBe×
+BeÌÍBeÂBežRBe®Be£×BeBe\Be
+BezáBep€BeffBe\)BeQìBeG®Be=qBe33Be(öBe
+žBe{Be
+=Be  BdõÃBdë
+BdáHBd×
+BdÌÍBdÂBdžRBd®Bd£×BdBd\Bd
+BdzáBdp€BdffBd\)BdQìBdG®Bd=qBd33Bd(öBd
+žBd{Bd
+=Bd  Bb
+BbzáBbp€BbffBb\)BbQìBbG®Bb=qBb33Bb(öBb
+žBb{Bb
+=Bb  BaõÃBaë
+BaáHBa×
+BaÌÍBaÂBažRBa®Ba£×BaBa\Ba
+BazáBap€BaffBa\)BaQìBaG®Ba=qBa33Ba(öBa
+žBa{Ba
+=Ba  B`õÃB`ë
+B`áHB`×
+B`ÌÍB`ÂB`žRB`®B`£×B`B`\B`
+B`záB`p€B`ffB`\)B`QìB`G®B`=qB`33B`(öB`
+žB`{B`
+=B`  B^
+B^záB^p€B^ffB^\)B^QìB^G®B^=qB^33B^(öB^
+žB^{B^
+=B^  B]õÃB]ë
+B]áHB]×
+B]ÌÍB]ÂB]žRB]®B]£×B]B]\B]
+B]záB]p€B]ffB]\)B]QìB]G®B]=qB]33B](öB]
+žB]{B]
+=B]  B\õÃB\ë
+B\áHB\×
+B\ÌÍB\ÂB\žRB\®B\£×B\B\\B\
+B\záB\p€B\ffB\\)B\QìB\G®B\=qB\33B\(öB\
+žB\{B\
+=B\  BZ
+BZzáBZp€BZffBZ\)BZQìBZG®BZ=qBZ33BZ(öBZ
+žBZ{BZ
+=BZ  BYõÃBYë
+BYáHBY×
+BYÌÍBYÂBYžRBY®BY£×BYBY\BY
+BYzáBYp€BYffBY\)BYQìBYG®BY=qBY33BY(öBY
+žBY{BY
+=BY  BXõÃBXë
+BXáHBX×
+BXÌÍBXÂBXžRBX®BX£×BXBX\BX
+BXzáBXp€BXffBX\)BXQìBXG®BX=qBX33BX(öBX
+žBX{BX
+=BX  BV
+BVzáBVp€BVffBV\)BVQìBVG®BV=qBV33BV(öBV
+žBV{BV
+=BV  BUõÃBUë
+BUáHBU×
+BUÌÍBUÂBUžRBU®BU£×BUBU\BU
+BUzáBUp€BUffBU\)BUQìBUG®BU=qBU33BU(öBU
+žBU{BU
+=BU  BTõÃBTë
+BTáHBT×
+BTÌÍBTÂBTžRBT®BT£×BTBT\BT
+BTzáBTp€BTffBT\)BTQìBTG®BT=qBT33BT(öBT
+žBT{BT
+=BT  BR
+BRzáBRp€BRffBR\)BRQìBRG®BR=qBR33BR(öBR
+žBR{BR
+=BR  BQõÃBQë
+BQáHBQ×
+BQÌÍBQÂBQžRBQ®BQ£×BQBQ\BQ
+BQzáBQp€BQffBQ\)BQQìBQG®BQ=qBQ33BQ(öBQ
+žBQ{BQ
+=BQ  BPõÃBPë
+BPáHBP×
+BPÌÍBPÂBPžRBP®BP£×BPBP\BP
+BPzáBPp€BPffBP\)BPQìBPG®BP=qBP33BP(öBP
+žBP{BP
+=BP  BN
+BNzáBNp€BNffBN\)BNQìBNG®BN=qBN33BN(öBN
+žBN{BN
+=BN  BMõÃBMë
+BMáHBM×
+BMÌÍBMÂBMžRBM®BM£×BMBM\BM
+BMzáBMp€BMffBM\)BMQìBMG®BM=qBM33BM(öBM
+žBM{BM
+=BM  BLõÃBLë
+BLáHBL×
+BLÌÍBLÂBLžRBL®BL£×BLBL\BL
+BLzáBLp€BLffBL\)BLQìBLG®BL=qBL33BL(öBL
+žBL{BL
+=BL  BJ
+BJzáBJp€BJffBJ\)BJQìBJG®BJ=qBJ33BJ(öBJ
+žBJ{BJ
+=BJ  BIõÃBIë
+BIáHBI×
+BIÌÍBIÂBIžRBI®BI£×BIBI\BI
+BIzáBIp€BIffBI\)BIQìBIG®BI=qBI33BI(öBI
+žBI{BI
+=BI  BHõÃBHë
+BHáHBH×
+BHÌÍBHÂBHžRBH®BH£×BHBH\BH
+BHzáBHp€BHffBH\)BHQìBHG®BH=qBH33BH(öBH
+žBH{BH
+=BH  BF
+BFzáBFp€BFffBF\)BFQìBFG®BF=qBF33BF(öBF
+žBF{BF
+=BF  BEõÃBEë
+BEáHBE×
+BEÌÍBEÂBEžRBE®BE£×BEBE\BE
+BEzáBEp€BEffBE\)BEQìBEG®BE=qBE33BE(öBE
+žBE{BE
+=BE  BDõÃBDë
+BDáHBD×
+BDÌÍBDÂBDžRBD®BD£×BDBD\BD
+BDzáBDp€BDffBD\)BDQìBDG®BD=qBD33BD(öBD
+žBD{BD
+=BD  BB
+BBzáBBp€BBffBB\)BBQìBBG®BB=qBB33BB(öBB
+žBB{BB
+=BB  BAõÃBAë
+BAáHBA×
+BAÌÍBAÂBAžRBA®BA£×BABA\BA
+BAzáBAp€BAffBA\)BAQìBAG®BA=qBA33BA(öBA
+žBA{BA
+=BA  B@õÃB@ë
+B@áHB@×
+B@ÌÍB@ÂB@žRB@®B@£×B@B@\B@
+B@záB@p€B@ffB@\)B@QìB@G®B@=qB@33B@(öB@
+žB@{B@
+=B@  B>
+B>záB>p€B>ffB>\)B>QìB>G®B>=qB>33B>(öB>
+žB>{B>
+=B>  B=õÃB=ë
+B=áHB=×
+B=ÌÍB=ÂB=žRB=®B=£×B=B=\B=
+B=záB=p€B=ffB=\)B=QìB=G®B==qB=33B=(öB=
+žB={B=
+=B=  B<õÃB<ë
+B<áHB<×
+B<ÌÍB<ÂB<žRB<®B<£×B<B<\B<
+B<záB<p€B<ffB<\)B<QìB<G®B<=qB<33B<(öB<
+žB<{B<
+=B<  B:
+B:záB:p€B:ffB:\)B:QìB:G®B:=qB:33B:(öB:
+žB:{B:
+=B:  B9õÃB9ë
+B9áHB9×
+B9ÌÍB9ÂB9žRB9®B9£×B9B9\B9
+B9záB9p€B9ffB9\)B9QìB9G®B9=qB933B9(öB9
+žB9{B9
+=B9  B8õÃB8ë
+B8áHB8×
+B8ÌÍB8ÂB8žRB8®B8£×B8B8\B8
+B8záB8p€B8ffB8\)B8QìB8G®B8=qB833B8(öB8
+žB8{B8
+=B8  B6
+B6záB6p€B6ffB6\)B6QìB6G®B6=qB633B6(öB6
+žB6{B6
+=B6  B5õÃB5ë
+B5áHB5×
+B5ÌÍB5ÂB5žRB5®B5£×B5B5\B5
+B5záB5p€B5ffB5\)B5QìB5G®B5=qB533B5(öB5
+žB5{B5
+=B5  B4õÃB4ë
+B4áHB4×
+B4ÌÍB4ÂB4žRB4®B4£×B4B4\B4
+B4záB4p€B4ffB4\)B4QìB4G®B4=qB433B4(öB4
+žB4{B4
+=B4  B2
+B2záB2p€B2ffB2\)B2QìB2G®B2=qB233B2(öB2
+žB2{B2
+=B2  B1õÃB1ë
+B1áHB1×
+B1ÌÍB1ÂB1žRB1®B1£×B1B1\B1
+B1záB1p€B1ffB1\)B1QìB1G®B1=qB133B1(öB1
+žB1{B1
+=B1  B0õÃB0ë
+B0áHB0×
+B0ÌÍB0ÂB0žRB0®B0£×B0B0\B0
+B0záB0p€B0ffB0\)B0QìB0G®B0=qB033B0(öB0
+žB0{B0
+=B0  B.
+B.záB.p€B.ffB.\)B.QìB.G®B.=qB.33B.(öB.
+žB.{B.
+=B.  B-õÃB-ë
+B-áHB-×
+B-ÌÍB-ÂB-žRB-®B-£×B-B-\B-
+B-záB-p€B-ffB-\)B-QìB-G®B-=qB-33B-(öB-
+žB-{B-
+=B-  B,õÃB,ë
+B,áHB,×
+B,ÌÍB,ÂB,žRB,®B,£×B,B,\B,
+B,záB,p€B,ffB,\)B,QìB,G®B,=qB,33B,(öB,
+žB,{B,
+=B,  B*
+B*záB*p€B*ffB*\)B*QìB*G®B*=qB*33B*(öB*
+žB*{B*
+=B*  B)õÃB)ë
+B)áHB)×
+B)ÌÍB)ÂB)žRB)®B)£×B)B)\B)
+B)záB)p€B)ffB)\)B)QìB)G®B)=qB)33B)(öB)
+žB){B)
+=B)  B(õÃB(ë
+B(áHB(×
+B(ÌÍB(ÂB(žRB(®B(£×B(B(\B(
+B(záB(p€B(ffB(\)B(QìB(G®B(=qB(33B((öB(
+žB({B(
+=B(  B&
+B&záB&p€B&ffB&\)B&QìB&G®B&=qB&33B&(öB&
+žB&{B&
+=B&  B%õÃB%ë
+B%áHB%×
+B%ÌÍB%ÂB%žRB%®B%£×B%B%\B%
+B%záB%p€B%ffB%\)B%QìB%G®B%=qB%33B%(öB%
+žB%{B%
+=B%  B$õÃB$ë
+B$áHB$×
+B$ÌÍB$ÂB$žRB$®B$£×B$B$\B$
+B$záB$p€B$ffB$\)B$QìB$G®B$=qB$33B$(öB$
+žB${B$
+=B$  B"
+B"záB"p€B"ffB"\)B"QìB"G®B"=qB"33B"(öB"
+žB"{B"
+=B"  B!õÃB!ë
+B!áHB!×
+B!ÌÍB!ÂB!žRB!®B!£×B!B!\B!
+B!záB!p€B!ffB!\)B!QìB!G®B!=qB!33B!(öB!
+žB!{B!
+=B!  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+=B
+  B
+õÃB
+ë
+B
+áHB
+×
+B
+ÌÍB
+ÂB
+žRB
+®B
+£×B
+B
+\B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B
+
+B
+záB
+p€B
+ffB
+\)B
+QìB
+G®B
+=qB
+33B
+(öB
+
+žB
+{B
+
+=B
+  B	õÃB	ë
+B	áHB	×
+B	ÌÍB	ÂB	žRB	®B	£×B	B	\B	
+B	záB	p€B	ffB	\)B	QìB	G®B	=qB	33B	(öB	
+žB	{B	
+=B	  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  BõÃBë
+BáHB×
+BÌÍBÂBžRB®B£×BB\B
+BzáBp€BffB\)BQìBG®B=qB33B(öB
+žB{B
+=B  B õÃB ë
+B áHB ×
+B ÌÍB ÂB žRB ®B £×B B \B 
+B záB p€B ffB \)B QìB G®B =qB 33B (öB 
+žB {B 
+=B   Aý
+=AüõÃAüáHAüÌÍAüžRAü£×Aü\AüzáAüffAüQìAü=qAü(öAü{Aü  Aûë
+Aû×
+AûÂAû®AûAû
+Aûp€Aû\)AûG®Aû33Aû
+žAû
+=AúõÃAúáHAúÌÍAúžRAú£×Aú\AúzáAúffAúQìAú=qAú(öAú{Aú  Aùë
+Aù×
+AùÂAù®AùAù
+Aùp€Aù\)AùG®Aù33Aù
+žAù
+=AøõÃAøáHAøÌÍAøžRAø£×Aø\AøzáAøffAøQìAø=qAø(öAø{Aø  Aõ
+=AôõÃAôáHAôÌÍAôžRAô£×Aô\AôzáAôffAôQìAô=qAô(öAô{Aô  Aóë
+Aó×
+AóÂAó®AóAó
+Aóp€Aó\)AóG®Aó33Aó
+žAó
+=AòõÃAòáHAòÌÍAòžRAò£×Aò\AòzáAòffAòQìAò=qAò(öAò{Aò  Añë
+Añ×
+AñÂAñ®AñAñ
+Añp€Añ\)AñG®Añ33Añ
+žAñ
+=AðõÃAðáHAðÌÍAðžRAð£×Að\AðzáAðffAðQìAð=qAð(öAð{Að  Aí
+=AìõÃAìáHAìÌÍAìžRAì£×Aì\AìzáAìffAìQìAì=qAì(öAì{Aì  Aëë
+Aë×
+AëÂAë®AëAë
+Aëp€Aë\)AëG®Aë33Aë
+žAë
+=AêõÃAêáHAêÌÍAêžRAê£×Aê\AêzáAêffAêQìAê=qAê(öAê{Aê  Aéë
+Aé×
+AéÂAé®AéAé
+Aép€Aé\)AéG®Aé33Aé
+žAé
+=AèõÃAèáHAèÌÍAèžRAè£×Aè\AèzáAèffAèQìAè=qAè(öAè{Aè  Aå
+=AäõÃAäáHAäÌÍAäžRAä£×Aä\AäzáAäffAäQìAä=qAä(öAä{Aä  Aãë
+Aã×
+AãÂAã®AãAã
+Aãp€Aã\)AãG®Aã33Aã
+žAã
+=AâõÃAâáHAâÌÍAâžRAâ£×Aâ\AâzáAâffAâQìAâ=qAâ(öAâ{Aâ  Aáë
+Aá×
+AáÂAá®AáAá
+Aáp€Aá\)AáG®Aá33Aá
+žAá
+=AàõÃAàáHAàÌÍAàžRAà£×Aà\AàzáAàffAàQìAà=qAà(öAà{Aà  AÝ
+=AÜõÃAÜáHAÜÌÍAÜžRAÜ£×AÜ\AÜzáAÜffAÜQìAÜ=qAÜ(öAÜ{AÜ  AÛë
+AÛ×
+AÛÂAÛ®AÛAÛ
+AÛp€AÛ\)AÛG®AÛ33AÛ
+žAÛ
+=AÚõÃAÚáHAÚÌÍAÚžRAÚ£×AÚ\AÚzáAÚffAÚQìAÚ=qAÚ(öAÚ{AÚ  AÙë
+AÙ×
+AÙÂAÙ®AÙAÙ
+AÙp€AÙ\)AÙG®AÙ33AÙ
+žAÙ
+=AØõÃAØáHAØÌÍAØžRAØ£×AØ\AØzáAØffAØQìAØ=qAØ(öAØ{AØ  AÕ
+=AÔõÃAÔáHAÔÌÍAÔžRAÔ£×AÔ\AÔzáAÔffAÔQìAÔ=qAÔ(öAÔ{AÔ  AÓë
+AÓ×
+AÓÂAÓ®AÓAÓ
+AÓp€AÓ\)AÓG®AÓ33AÓ
+žAÓ
+=AÒõÃAÒáHAÒÌÍAÒžRAÒ£×AÒ\AÒzáAÒffAÒQìAÒ=qAÒ(öAÒ{AÒ  AÑë
+AÑ×
+AÑÂAÑ®AÑAÑ
+AÑp€AÑ\)AÑG®AÑ33AÑ
+žAÑ
+=AÐõÃAÐáHAÐÌÍAÐžRAÐ£×AÐ\AÐzáAÐffAÐQìAÐ=qAÐ(öAÐ{AÐ  AÍ
+=AÌõÃAÌáHAÌÌÍAÌžRAÌ£×AÌ\AÌzáAÌffAÌQìAÌ=qAÌ(öAÌ{AÌ  AËë
+AË×
+AËÂAË®AËAË
+AËp€AË\)AËG®AË33AË
+žAË
+=AÊõÃAÊáHAÊÌÍAÊžRAÊ£×AÊ\AÊzáAÊffAÊQìAÊ=qAÊ(öAÊ{AÊ  AÉë
+AÉ×
+AÉÂAÉ®AÉAÉ
+AÉp€AÉ\)AÉG®AÉ33AÉ
+žAÉ
+=AÈõÃAÈáHAÈÌÍAÈžRAÈ£×AÈ\AÈzáAÈffAÈQìAÈ=qAÈ(öAÈ{AÈ  AÅ
+=AÄõÃAÄáHAÄÌÍAÄžRAÄ£×AÄ\AÄzáAÄffAÄQìAÄ=qAÄ(öAÄ{AÄ  AÃë
+AÃ×
+AÃÂAÃ®AÃAÃ
+AÃp€AÃ\)AÃG®AÃ33AÃ
+žAÃ
+=AÂõÃAÂáHAÂÌÍAÂžRAÂ£×AÂ\AÂzáAÂffAÂQìAÂ=qAÂ(öAÂ{AÂ  AÁë
+AÁ×
+AÁÂAÁ®AÁAÁ
+AÁp€AÁ\)AÁG®AÁ33AÁ
+žAÁ
+=AÀõÃAÀáHAÀÌÍAÀžRAÀ£×AÀ\AÀzáAÀffAÀQìAÀ=qAÀ(öAÀ{AÀ  Aœ
+=AŒõÃAŒáHAŒÌÍAŒžRAŒ£×AŒ\AŒzáAŒffAŒQìAŒ=qAŒ(öAŒ{AŒ  A»ë
+A»×
+A»ÂA»®A»A»
+A»p€A»\)A»G®A»33A»
+žA»
+=AºõÃAºáHAºÌÍAºžRAº£×Aº\AºzáAºffAºQìAº=qAº(öAº{Aº  A¹ë
+A¹×
+A¹ÂA¹®A¹A¹
+A¹p€A¹\)A¹G®A¹33A¹
+žA¹
+=AžõÃAžáHAžÌÍAžžRAž£×Až\AžzáAžffAžQìAž=qAž(öAž{Až  Aµ
+=AŽõÃAŽáHAŽÌÍAŽžRAŽ£×AŽ\AŽzáAŽffAŽQìAŽ=qAŽ(öAŽ{AŽ  A³ë
+A³×
+A³ÂA³®A³A³
+A³p€A³\)A³G®A³33A³
+žA³
+=A²õÃA²áHA²ÌÍA²žRA²£×A²\A²záA²ffA²QìA²=qA²(öA²{A²  A±ë
+A±×
+A±ÂA±®A±A±
+A±p€A±\)A±G®A±33A±
+žA±
+=A°õÃA°áHA°ÌÍA°žRA°£×A°\A°záA°ffA°QìA°=qA°(öA°{A°  A­
+=A¬õÃA¬áHA¬ÌÍA¬žRA¬£×A¬\A¬záA¬ffA¬QìA¬=qA¬(öA¬{A¬  A«ë
+A«×
+A«ÂA«®A«A«
+A«p€A«\)A«G®A«33A«
+žA«
+=AªõÃAªáHAªÌÍAªžRAª£×Aª\AªzáAªffAªQìAª=qAª(öAª{Aª  A©ë
+A©×
+A©ÂA©®A©A©
+A©p€A©\)A©G®A©33A©
+žA©
+=AšõÃAšáHAšÌÍAšžRAš£×Aš\AšzáAšffAšQìAš=qAš(öAš{Aš  A¥
+=A€õÃA€áHA€ÌÍA€žRA€£×A€\A€záA€ffA€QìA€=qA€(öA€{A€  A£ë
+A£×
+A£ÂA£®A£A£
+A£p€A£\)A£G®A£33A£
+žA£
+=A¢õÃA¢áHA¢ÌÍA¢žRA¢£×A¢\A¢záA¢ffA¢QìA¢=qA¢(öA¢{A¢  A¡ë
+A¡×
+A¡ÂA¡®A¡A¡
+A¡p€A¡\)A¡G®A¡33A¡
+žA¡
+=A õÃA áHA ÌÍA žRA £×A \A záA ffA QìA =qA (öA {A   A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
+
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
+A×
+AÂA®AA
+Ap€A\)AG®A33A
+žA
+=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Az{Ayë
+AyÂAyAyp€AyG®Ay
+žAxõÃAxÌÍAx£×AxzáAxQìAx(öAx  Aw×
+Aw®Aw
+Aw\)Aw33Aw
+=AváHAvžRAv\AvffAv=qAv{Auë
+AuÂAuAup€AuG®Au
+žAtõÃAtÌÍAt£×AtzáAtQìAt(öAt  As×
+As®As
+As\)As33As
+=AráHAržRAr\ArffAr=qAr{Aqë
+AqÂAqAqp€AqG®Aq
+žApõÃApÌÍAp£×ApzáApQìAp(öAp  Aj{Aië
+AiÂAiAip€AiG®Ai
+žAhõÃAhÌÍAh£×AhzáAhQìAh(öAh  Ag×
+Ag®Ag
+Ag\)Ag33Ag
+=AfáHAfžRAf\AfffAf=qAf{Aeë
+AeÂAeAep€AeG®Ae
+žAdõÃAdÌÍAd£×AdzáAdQìAd(öAd  Ac×
+Ac®Ac
+Ac\)Ac33Ac
+=AbáHAbžRAb\AbffAb=qAb{Aaë
+AaÂAaAap€AaG®Aa
+žA`õÃA`ÌÍA`£×A`záA`QìA`(öA`  AZ{AYë
+AYÂAYAYp€AYG®AY
+žAXõÃAXÌÍAX£×AXzáAXQìAX(öAX  AW×
+AW®AW
+AW\)AW33AW
+=AVáHAVžRAV\AVffAV=qAV{AUë
+AUÂAUAUp€AUG®AU
+žATõÃATÌÍAT£×ATzáATQìAT(öAT  AS×
+AS®AS
+AS\)AS33AS
+=ARáHARžRAR\ARffAR=qAR{AQë
+AQÂAQAQp€AQG®AQ
+žAPõÃAPÌÍAP£×APzáAPQìAP(öAP  AJ{AIë
+AIÂAIAIp€AIG®AI
+žAHõÃAHÌÍAH£×AHzáAHQìAH(öAH  AG×
+AG®AG
+AG\)AG33AG
+=AFáHAFžRAF\AFffAF=qAF{AEë
+AEÂAEAEp€AEG®AE
+žADõÃADÌÍAD£×ADzáADQìAD(öAD  AC×
+AC®AC
+AC\)AC33AC
+=ABáHABžRAB\ABffAB=qAB{AAë
+AAÂAAAAp€AAG®AA
+žA@õÃA@ÌÍA@£×A@záA@QìA@(öA@  A:{A9ë
+A9ÂA9A9p€A9G®A9
+žA8õÃA8ÌÍA8£×A8záA8QìA8(öA8  A7×
+A7®A7
+A7\)A733A7
+=A6áHA6žRA6\A6ffA6=qA6{A5ë
+A5ÂA5A5p€A5G®A5
+žA4õÃA4ÌÍA4£×A4záA4QìA4(öA4  A3×
+A3®A3
+A3\)A333A3
+=A2áHA2žRA2\A2ffA2=qA2{A1ë
+A1ÂA1A1p€A1G®A1
+žA0õÃA0ÌÍA0£×A0záA0QìA0(öA0  A*{A)ë
+A)ÂA)A)p€A)G®A)
+žA(õÃA(ÌÍA(£×A(záA(QìA((öA(  A'×
+A'®A'
+A'\)A'33A'
+=A&áHA&žRA&\A&ffA&=qA&{A%ë
+A%ÂA%A%p€A%G®A%
+žA$õÃA$ÌÍA$£×A$záA$QìA$(öA$  A#×
+A#®A#
+A#\)A#33A#
+=A"áHA"žRA"\A"ffA"=qA"{A!ë
+A!ÂA!A!p€A!G®A!
+žA õÃA ÌÍA £×A záA QìA (öA   A{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A
+{A	ë
+A	ÂA	A	p€A	G®A	
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žAõÃAÌÍA£×AzáAQìA(öA  A×
+A®A
+A\)A33A
+=AáHAžRA\AffA=qA{Aë
+AÂAAp€AG®A
+žA õÃA ÌÍA £×A záA QìA (öA   @ô(ö@ó×
+@ó
+@ó33@òáH@ò\@ò=q@ñë
+@ñ@ñG®@ðõÂ@ð£×@ðQì@ð  @ï®@ï\)@ï
+=@îžR@îff@î{@íÂ@íp€@í
+ž@ìÌÍ@ìzá@ì(ö@ë×
+@ë
+@ë33@êáH@ê\@ê=q@éë
+@é@éG®@èõÃ@è£×@èQì@è  @ç®@ç\)@ç
+=@æžR@æff@æ{@åÂ@åp€@å
+ž@äÌÍ@äzá@ä(ö@ã×
+@ã
+@ã33@âáH@â\@â=q@áë
+@á@áG®@àõÃ@à£×@àQì@à  @Ô(ö@Ó×
+@Ó
+@Ó33@ÒáH@Ò\@Ò=q@Ñë
+@Ñ@ÑG®@ÐõÂ@Ð£×@ÐQì@Ð  @Ï®@Ï\)@Ï
+=@ÎžR@Îff@Î{@ÍÂ@Íp€@Í
+ž@ÌÌÍ@Ìzá@Ì(ö@Ë×
+@Ë
+@Ë33@ÊáH@Ê\@Ê=q@Éë
+@É@ÉG®@ÈõÃ@È£×@ÈQì@È  @Ç®@Ç\)@Ç
+=@ÆžR@Æff@Æ{@ÅÂ@Åp€@Å
+ž@ÄÌÍ@Äzá@Ä(ö@Ã×
+@Ã
+@Ã33@ÂáH@Â\@Â=q@Áë
+@Á@ÁG®@ÀõÃ@À£×@ÀQì@À  @Ž(ö@³×
+@³
+@³33@²áH@²\@²=q@±ë
+@±@±G®@°õÂ@°£×@°Qì@°  @¯®@¯\)@¯
+=@®žR@®ff@®{@­Â@­p€@­
+ž@¬ÌÍ@¬zá@¬(ö@«×
+@«
+@«33@ªáH@ª\@ª=q@©ë
+@©@©G®@šõÃ@š£×@šQì@š  @§®@§\)@§
+=@ŠžR@Šff@Š{@¥Â@¥p€@¥
+ž@€ÌÍ@€zá@€(ö@£×
+@£
+@£33@¢áH@¢\@¢=q@¡ë
+@¡@¡G®@ õÃ@ £×@ Qì@   @(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÂ@£×@Qì@  @®@\)@
+=@žR@ff@{@Â@p€@
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @®@\)@
+=@žR@ff@{@
+Â@
+p€@
+
+ž@ÌÍ@zá@(ö@×
+@
+@33@áH@\@=q@ë
+@@G®@õÃ@£×@Qì@  @hQì@g®@g
+>@fff@eÂ@e
+ž@dzá@c×
+@c33@b\@aë
+@aG®@`£×@`  @_\)@^žR@^{@]p€@\ÌÍ@\(ö@[
+@ZáH@Z=q@Y@XõÂ@XQì@W®@W
+>@Vff@UÂ@U
+ž@Tzá@S×
+@S33@R\@Që
+@QG®@P£×@P  @O\)@NžR@N{@Mp€@LÌÍ@L(ö@K
+@JáH@J=q@I@HõÃ@HQì@G®@G
+=@Fff@EÂ@E
+ž@Dzá@C×
+@C33@B\@Aë
+@AG®@@£×@@  @(Qì@'®@'
+>@&ff@%Â@%
+ž@$zá@#×
+@#33@"\@!ë
+@!G®@ £×@   @\)@
+žR@
+{@
+p€@
+ÌÍ@
+(ö@
+@áH@=q@@õÂ@Qì@®@
+>@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@£×@  @\)@žR@{@
+p€@
+ÌÍ@
+(ö@
+
+@
+áH@
+=q@	@õÃ@Qì@®@
+=@ff@Â@
+ž@zá@×
+@33@\@ë
+@G®@ £×@   ?Ð£×?Ï\)?Î{?ÌÌÍ?Ë
+
+?Ê=p?ÈõÂ?Ç®?Æff?Å
+ž?Ã×
+?Â\?ÁG®?À  ?ŸžR?œp€?Œ(ö?ºáH?¹?žQì?·
+>?µÂ?Žzá?³33?±ë
+?°£×?¯\)?®{?¬ÌÍ?«
+?ª=q?šõÂ?§®?Šff?¥
+ž?£×
+?¢\?¡G®?   ?žR?p€?(ö?áH??Qì?
+>?Â?zá?33?ë
+?£×?\)?{?ÌÍ?
+?=q?õÃ?®?ff?
+
+ž?×
+?\?G®?  ?!G®?
+žR?
+(ö??
+=?zá?ë
+?\)?
+ÌÍ?
+=q?®?
+ž?\?   >úáH>õÂ>ð£×>ë
+>æff>áG®>Ü(ö>×
+=>Ñë
+>ÌÌÍ>Ç®>Â\>œp€>žQì>³33>®{>šõÃ>£×
+>žR>>zá>\)>=q>
+
+ž>  >uÂ>k
+>aG®>W
+=>LÌÍ>B\>8Qì>.{>#×
+>>\)>
+ž=õÂ=áG®=ÌÌÍ=žQì=£×
+=\)=uÂ=LÌÍ=#×
+<õÂ<£×
+<#×
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
Index: /trunk/psLib/test/fits/verified/sBiOut.fits
===================================================================
--- /trunk/psLib/test/fits/verified/sBiOut.fits	(revision 4547)
+++ /trunk/psLib/test/fits/verified/sBiOut.fits	(revision 4547)
@@ -0,0 +1,1414 @@
+SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; = ?ÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : < >ÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; =ÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : <ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ;ÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 :ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6ÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - /ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , .ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + -ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * ,ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) +ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( *ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' )ÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & (ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % 'ÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ &ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # %ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! #ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   "ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  !ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+  ÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ ÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+ÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+       ÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+       ÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+      ÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+      ÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+     ÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+     ÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+    ÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+    ÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+   ÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+   ÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+  ÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+  ÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ ÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ ÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ    ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ   ÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÁÿÃÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿ¿ÿÂÿÄÿÆÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŸÿÀÿÂÿÄÿÆÿÉÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , . 0 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + - / 1 3 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - 0 2 4 6 7ÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , . 0 2 4 7 9 :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + - / 1 3 5 7 9 < =ÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - 0 2 4 6 8 : < >ÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , . 0 2 4 7 9 ; = >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + - / 1 3 5 7 9 < <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - 0 2 4 6 8 : ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , . 0 2 4 7 9 :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + - / 1 3 5 7 8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - 0 2 4 6 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , . 0 2 4 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + - / 1 3 4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - 0 2 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , . 0 1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + - / 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) + - .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( * , -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & ( + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % ' ) *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ & ( )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " $ & 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! # % &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+  ! $ $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+   " #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+  ! !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       
+ 
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+        
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
+ 
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿñÿóÿõÿ÷ÿùÿüÿþ       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿ÷ÿùÿûÿýÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿùÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿüÿþ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ   ÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ     ÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ       ÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ         ÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	ÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+ÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+  ÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+    ÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+      ÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+        ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+          ÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+            ÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+              ÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+ ÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    !ÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " #ÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ %ÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & 'ÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( )ÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * +ÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , -ÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . /ÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1ÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3ÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7ÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9ÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;ÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < =           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿœÿÿÿÿÿÿÿÿÿÿÿÿÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿŸÿÿÿÿÿÿÿÿÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿ¿ÿÿÿÿÿÿÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿÁ      ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÿ         ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÃÿÿÿÿ          ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÿÿÿÿÿÿÿ            ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÿÿÿÿÿÿÿÿÿÿÿ              ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                  ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+  
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ         
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ           
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ             
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ               
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                 
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                   
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                     
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+                     
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 	 	                 ÿÿÿþÿþÿýÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+  
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 	 	                 ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 	 	            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ! ! !     
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 	 	       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ " # " ! !     
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 	 	   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ $ $ # " ! !     
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % & % $ $ # " ! !     
+ 
+ 
+ 
+                     
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & ' & & % $ $ # " ! !     
+ 
+ 
+ 
+                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( ( ( ' & & % $ $ # " ! !     
+ 
+ 
+ 
+              ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) * ) ( ( ' & & % $ $ # " ! !     
+ 
+ 
+ 
+          ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + + * ) ( ( ' & & % $ $ # " ! !     
+ 
+ 
+ 
+      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ , - , + + * ) ( ( ' & & % $ $ # " ! !     
+ 
+ 
+ 
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - . - - , + + * ) ( ( ' & & % $ $ # " ! !     
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / 0 / . - - , + + * ) ( ( ' & & % $ $ # " ! ! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 1 0 0 / . - - , + + * ) ( ( ' & & % $ $ "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 2 2 1 0 0 / . - - , + + * ) ( ( ' & %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 4 3 2 2 1 0 0 / . - - , + + * ) (ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 5 4 4 3 2 2 1 0 0 / . - - , +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6 7 6 5 4 4 3 2 2 1 0 0 / -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 7 8 7 7 6 5 4 4 3 2 2 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 9 9 8 7 7 6 5 4 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : ; : 9 9 8 7 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < < < ; : 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ = > = <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ   ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+    ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿ 
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿ 
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿ  
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿ  
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿ   
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿ   
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿ    
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿ    
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿ     
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿ     
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿ      
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿ      
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿ       
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿ       
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿ        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿ        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿ 
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿ 
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ   
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠ % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿš ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ© ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿª ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ« * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ® - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ° / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ± 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ² 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽ 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµ 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ· 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿž 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿº 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ» : 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒ ; 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœ < : 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸ = ; 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ > < : 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀ ? = ; 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁ                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿþÿüÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿùÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿýÿûÿùÿ÷ÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ! !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ # "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ' & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ * ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ . - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 / - + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 1 0 . , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 2 0 - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 4 3 1 / - + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 4 2 0 . , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 7 6 4 2 0 - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8 7 5 3 1 / - + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : 9 7 4 2 0 . , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ; : 8 6 4 2 0 - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < < 9 7 5 3 1 / - + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > = ; 9 7 4 2 0 . , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ ? > < : 8 6 4 2 0 - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿ = < 9 7 5 3 1 / - + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : 9 7 4 2 0 . , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿÿÿÿÿÿÿÿ 7 6 4 2 0 - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 3 1 / - + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 0 . , * ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / - + ) ' % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ , + ( & $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ( & $ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & % # !  
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ "   
+ 
+       
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !  
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+        
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÉÿÆÿÄÿÂÿÀÿŸÿœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÆÿÄÿÂÿ¿ÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÃÿÁÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	           = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþ ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿü 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿú 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿø 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿö 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿô 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿò / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿð - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿî + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿì ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿê ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿè % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿä !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâ  
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿà 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞ               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜ             
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚ           
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØ         
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖ       
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔ     
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒ   
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐ 
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊ         ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈ       ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆ     ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄ   ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < = > =ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 : ; < < <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6 7 8 9 9 : ; :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 4 5 6 7 7 8 9 9 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 2 2 3 4 4 5 6 7 7 8 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - / 0 0 1 2 2 3 4 4 5 6 7 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + , - - . / 0 0 1 2 2 3 4 4 5 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( ) * + + , - - . / 0 0 1 2 2 3 4 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % & ' ( ( ) * + + , - - . / 0 0 1 2 2 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ " $ $ % & & ' ( ( ) * + + , - - . / 0 0 1 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ! ! " # $ $ % & & ' ( ( ) * + + , - - . / 0 /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+     ! ! " # $ $ % & & ' ( ( ) * + + , - - . -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
+ 
+ 
+ 
+     ! ! " # $ $ % & & ' ( ( ) * + + , - ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
+ 
+ 
+ 
+     ! ! " # $ $ % & & ' ( ( ) * + + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ           
+ 
+ 
+ 
+     ! ! " # $ $ % & & ' ( ( ) * )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ               
+ 
+ 
+ 
+     ! ! " # $ $ % & & ' ( ( (ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                   
+ 
+ 
+ 
+     ! ! " # $ $ % & & ' &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+                     
+ 
+ 
+ 
+     ! ! " # $ $ % & %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+     ! ! " # $ $ $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    	 	 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+     ! ! " # "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        	 	 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+     ! ! !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ             	 	 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ                  	 	 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+  
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+                     
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+              ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+          ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+  
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ              ÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ            ÿÿÿÿÿÿÿÿÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ          ÿÿÿÿÿÃÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ         ÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ    ÿÿÿÁÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿÿÿÿÿÿÿ¿ÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿÿÿÿÿÿÿÿÿŸÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; = ?ÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : < >ÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; =ÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : <ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ;ÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 :ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6ÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - /ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , .ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + -ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * ,ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) +ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( *ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' )ÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & (ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % 'ÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ &ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # %ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! #ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   "ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  !ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+  ÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ ÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+ÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+       ÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+       ÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+      ÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+      ÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+     ÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+     ÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+    ÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+    ÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+   ÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+   ÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+  ÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+  ÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ ÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ ÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ    ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ   ÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
Index: /trunk/psLib/test/fits/verified/sOut.fits
===================================================================
--- /trunk/psLib/test/fits/verified/sOut.fits	(revision 4547)
+++ /trunk/psLib/test/fits/verified/sOut.fits	(revision 4547)
@@ -0,0 +1,1450 @@
+SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; = ?ÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : < >ÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; =ÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : <ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ;ÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 :ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6ÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - /ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , .ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + -ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * ,ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) +ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( *ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' )ÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & (ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % 'ÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ &ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # %ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! #ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   "ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  !ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+  ÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ ÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+ÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+       ÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+       ÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+      ÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+      ÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+     ÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+     ÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+    ÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+    ÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+   ÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+   ÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+  ÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+  ÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ ÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ ÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ    ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ   ÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÂÿÂÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿÀÿÁÿÄÿÆÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÿ¿ÿ¿ÿÂÿÅÿÈÿÈÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿœÿŸÿÁÿÃÿÆÿÇÿÊÿÌÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ÿŒÿœÿ¿ÿÂÿÅÿÅÿÈÿËÿÌÿÎÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿºÿ»ÿŸÿÁÿÃÿÄÿÇÿÉÿÊÿÍÿÐÿÒÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ÿ¹ÿºÿŒÿ¿ÿÂÿÃÿÅÿÈÿÉÿËÿÎÿÑÿÒÿÔÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿžÿžÿ»ÿŸÿÀÿÁÿÄÿÇÿÇÿÊÿÍÿÏÿÐÿÓÿÖÿÖÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ¶ÿ·ÿºÿŒÿ¿ÿÀÿÂÿÅÿÆÿÉÿËÿÎÿÏÿÑÿÔÿÕÿØÿÚÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿµÿ¶ÿžÿ»ÿŸÿŸÿÁÿÄÿÄÿÇÿÊÿÍÿÍÿÐÿÓÿÓÿÖÿÙÿÚÿÜÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿ³ÿŽÿ·ÿºÿŒÿœÿÀÿÂÿÃÿÆÿÈÿËÿÌÿÏÿÑÿÒÿÕÿ×ÿØÿÛÿÞÿàÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ²ÿ³ÿµÿžÿ»ÿŒÿŸÿÁÿÂÿÄÿÇÿÊÿÊÿÍÿÐÿÑÿÓÿÖÿ×ÿÙÿÜÿßÿàÿâÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ±ÿ±ÿŽÿ·ÿ¹ÿºÿœÿÀÿÀÿÃÿÆÿÈÿÉÿÌÿÎÿÏÿÒÿÕÿÕÿØÿÛÿÝÿÞÿáÿäÿäÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ¯ÿ°ÿ³ÿµÿžÿ¹ÿ»ÿŸÿ¿ÿÂÿÄÿÇÿÈÿÊÿÍÿÎÿÐÿÓÿÔÿ×ÿÙÿÜÿÝÿßÿâÿãÿæÿèÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿ®ÿ®ÿ±ÿŽÿ·ÿ·ÿºÿœÿœÿÀÿÃÿÆÿÆÿÉÿÌÿÌÿÏÿÒÿÒÿÕÿØÿÛÿÛÿÞÿáÿáÿäÿçÿêÿêÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ¬ÿ­ÿ°ÿ²ÿµÿ¶ÿ¹ÿ»ÿŒÿ¿ÿÁÿÄÿÅÿÈÿÊÿËÿÎÿÐÿÑÿÔÿÖÿÙÿÚÿÝÿßÿàÿãÿåÿèÿéÿìÿîÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšÿ«ÿ¬ÿ®ÿ±ÿŽÿŽÿ·ÿºÿ»ÿœÿÀÿÃÿÃÿÆÿÉÿÊÿÌÿÏÿÐÿÒÿÕÿØÿØÿÛÿÞÿßÿáÿäÿçÿçÿêÿíÿîÿðÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿªÿªÿ­ÿ°ÿ²ÿ³ÿ¶ÿžÿ¹ÿŒÿ¿ÿÁÿÂÿÅÿÇÿÈÿËÿÎÿÎÿÑÿÔÿÖÿ×ÿÚÿÜÿÝÿàÿãÿåÿæÿéÿëÿìÿïÿòÿòÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿšÿ©ÿ¬ÿ®ÿ±ÿ²ÿŽÿ·ÿžÿºÿœÿÀÿÁÿÃÿÆÿÇÿÉÿÌÿÍÿÐÿÒÿÕÿÖÿØÿÛÿÜÿÞÿáÿäÿåÿçÿêÿëÿíÿðÿñÿôÿöÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ§ÿ§ÿªÿ­ÿ°ÿ°ÿ³ÿ¶ÿ¶ÿ¹ÿŒÿŸÿ¿ÿÂÿÅÿÅÿÈÿËÿËÿÎÿÑÿÔÿÔÿ×ÿÚÿÚÿÝÿàÿâÿãÿæÿéÿéÿìÿïÿïÿòÿõÿøÿøÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿ¥ÿŠÿ©ÿ«ÿ®ÿ¯ÿ²ÿŽÿµÿžÿºÿœÿŸÿÀÿÃÿÄÿÇÿÉÿÊÿÍÿÏÿÒÿÓÿÖÿØÿÙÿÜÿÞÿáÿâÿäÿçÿèÿëÿíÿîÿñÿóÿöÿ÷ÿúÿüÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ€ÿ¥ÿ§ÿªÿ­ÿ­ÿ°ÿ³ÿŽÿ¶ÿ¹ÿŒÿŒÿ¿ÿÂÿÂÿÅÿÈÿÉÿËÿÎÿÑÿÑÿÔÿ×ÿØÿÚÿÝÿàÿàÿãÿæÿæÿéÿìÿíÿïÿòÿõÿõÿøÿûÿüÿþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ£ÿŠÿ©ÿ«ÿ¬ÿ¯ÿ±ÿ²ÿµÿžÿºÿ»ÿŸÿÀÿÁÿÄÿÆÿÇÿÊÿÍÿÏÿÐÿÓÿÕÿÖÿÙÿÜÿÞÿßÿâÿäÿåÿèÿêÿëÿîÿñÿóÿôÿ÷ÿùÿúÿý    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¢ÿ€ÿ§ÿªÿ«ÿ­ÿ°ÿ±ÿ³ÿ¶ÿ¹ÿºÿŒÿ¿ÿÀÿÂÿÅÿÆÿÈÿËÿÎÿÏÿÑÿÔÿÕÿ×ÿÚÿÝÿÞÿàÿãÿäÿæÿéÿêÿìÿïÿòÿóÿõÿøÿùÿûÿþ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ£ÿŠÿšÿ©ÿ¬ÿ¯ÿ¯ÿ²ÿµÿ·ÿžÿ»ÿŸÿŸÿÁÿÄÿÄÿÇÿÊÿÌÿÍÿÐÿÓÿÓÿÖÿÙÿÛÿÜÿßÿâÿâÿåÿèÿèÿëÿîÿðÿñÿôÿ÷ÿ÷ÿúÿýÿÿ      	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ€ÿ§ÿšÿªÿ­ÿ®ÿ±ÿ³ÿ¶ÿ·ÿ¹ÿŒÿœÿÀÿÂÿÃÿÆÿÈÿËÿÌÿÎÿÑÿÒÿÕÿ×ÿÚÿÛÿÝÿàÿáÿäÿæÿçÿêÿìÿïÿðÿòÿõÿöÿùÿûÿþÿÿ     
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ£ÿŠÿŠÿ©ÿ¬ÿ¬ÿ¯ÿ²ÿµÿµÿžÿ»ÿ»ÿŸÿÁÿÂÿÄÿÇÿÊÿÊÿÍÿÐÿÐÿÓÿÖÿÙÿÙÿÜÿßÿßÿâÿåÿæÿèÿëÿîÿîÿñÿôÿôÿ÷ÿúÿýÿý      	 
+ 
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ€ÿ¥ÿšÿªÿ«ÿ®ÿ°ÿ³ÿŽÿ·ÿ¹ÿºÿœÿ¿ÿÀÿÃÿÆÿÈÿÉÿÌÿÎÿÏÿÒÿÔÿ×ÿØÿÛÿÝÿÞÿáÿãÿäÿçÿêÿìÿíÿðÿòÿóÿöÿøÿûÿüÿÿ     
+ 
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ£ÿ£ÿŠÿ©ÿªÿ¬ÿ¯ÿ²ÿ²ÿµÿžÿ¹ÿ»ÿŸÿ¿ÿÁÿÄÿÇÿÈÿÊÿÍÿÎÿÐÿÓÿÖÿÖÿÙÿÜÿÝÿßÿâÿãÿåÿèÿëÿìÿîÿñÿòÿôÿ÷ÿúÿúÿý      	 	 
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¢ÿ¥ÿ§ÿšÿ«ÿ®ÿ°ÿ±ÿŽÿ¶ÿ·ÿºÿœÿœÿÀÿÃÿÅÿÆÿÉÿÌÿÌÿÏÿÒÿÔÿÕÿØÿÚÿÛÿÞÿáÿáÿäÿçÿéÿêÿíÿðÿðÿóÿöÿøÿùÿüÿþÿÿ     
+ 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ£ÿŠÿ§ÿ©ÿ¬ÿ¯ÿ°ÿ²ÿµÿ¶ÿžÿ»ÿŒÿ¿ÿÁÿÄÿÅÿÇÿÊÿËÿÎÿÐÿÓÿÔÿÖÿÙÿÚÿÜÿßÿàÿãÿåÿèÿéÿëÿîÿïÿòÿôÿ÷ÿøÿúÿýÿþ      	 
+ 
+      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ¥ÿ¥ÿšÿ«ÿ­ÿ®ÿ±ÿŽÿŽÿ·ÿºÿºÿœÿÀÿÃÿÃÿÆÿÉÿÉÿÌÿÏÿÒÿÒÿÕÿØÿØÿÛÿÞÿÞÿáÿäÿçÿçÿêÿíÿíÿðÿóÿöÿöÿùÿüÿüÿÿ     
+ 
+        
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ€ÿ§ÿ©ÿ¬ÿ­ÿ¯ÿ²ÿ³ÿ¶ÿžÿ¹ÿŒÿŸÿÁÿÂÿÅÿÇÿÈÿËÿÍÿÐÿÑÿÔÿÖÿ×ÿÚÿÜÿÝÿàÿâÿåÿæÿéÿëÿìÿïÿñÿôÿõÿøÿúÿûÿþ      	 
+ 
+       
+ 
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿ¥ÿšÿ«ÿ«ÿ®ÿ±ÿ±ÿŽÿ·ÿžÿºÿœÿÀÿÀÿÃÿÆÿÇÿÉÿÌÿÏÿÏÿÒÿÕÿÖÿØÿÛÿÜÿÞÿáÿäÿäÿçÿêÿëÿíÿðÿóÿóÿöÿùÿúÿüÿÿ      
+        
+ 
+   #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ€ÿ§ÿ©ÿªÿ­ÿ¯ÿ°ÿ³ÿµÿ¶ÿ¹ÿŒÿŸÿ¿ÿÂÿÄÿÅÿÈÿËÿÍÿÎÿÑÿÓÿÔÿ×ÿÚÿÚÿÝÿàÿâÿãÿæÿèÿéÿìÿïÿñÿòÿõÿ÷ÿøÿûÿþ       
+ 
+ 
+       
+  " $ %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿšÿ©ÿ«ÿ®ÿ¯ÿ±ÿŽÿµÿ·ÿºÿœÿŸÿÀÿÃÿÄÿÆÿÉÿÌÿÍÿÏÿÒÿÓÿÕÿØÿÙÿÜÿÞÿáÿâÿäÿçÿèÿêÿíÿðÿñÿóÿöÿ÷ÿùÿüÿÿ       
+ 
+        
+   # $ & )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ€ÿŠÿ§ÿªÿ­ÿ­ÿ°ÿ³ÿ³ÿ¶ÿ¹ÿ»ÿŒÿ¿ÿÂÿÂÿÅÿÈÿÊÿËÿÎÿÑÿÑÿÔÿ×ÿ×ÿÚÿÝÿàÿàÿãÿæÿæÿéÿìÿîÿïÿòÿõÿõÿøÿûÿýÿþ     
+ 
+ 
+       
+  ! " % ( ( +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿŠÿšÿ«ÿ¬ÿ¯ÿ±ÿ²ÿµÿ·ÿºÿ»ÿœÿÀÿÁÿÄÿÆÿÉÿÊÿÌÿÏÿÐÿÓÿÕÿÖÿÙÿÛÿÞÿßÿâÿäÿåÿèÿêÿíÿîÿðÿóÿôÿ÷ÿùÿüÿýÿÿ     	 
+        
+   ! # & ' * , -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ€ÿ€ÿ§ÿªÿªÿ­ÿ°ÿ±ÿ³ÿ¶ÿ¹ÿ¹ÿŒÿ¿ÿ¿ÿÂÿÅÿÈÿÈÿËÿÎÿÎÿÑÿÔÿÕÿ×ÿÚÿÝÿÝÿàÿãÿäÿæÿéÿìÿìÿïÿòÿòÿõÿøÿûÿûÿþ      
+ 
+       
+   " % % ( + , . 1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿŠÿšÿ©ÿ¬ÿ®ÿ¯ÿ²ÿµÿ·ÿžÿ»ÿœÿŸÿÁÿÃÿÆÿÇÿÊÿÌÿÍÿÐÿÒÿÓÿÖÿÙÿÛÿÜÿßÿáÿâÿåÿèÿêÿëÿîÿðÿñÿôÿöÿùÿúÿýÿÿ      	 
+        
+ 
+ ! # $ ' ) * - 0 2 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¡ÿ€ÿ§ÿšÿªÿ­ÿ®ÿ°ÿ³ÿ¶ÿ·ÿ¹ÿŒÿœÿ¿ÿÂÿÅÿÅÿÈÿËÿÌÿÎÿÑÿÒÿÔÿ×ÿÚÿÛÿÝÿàÿáÿãÿæÿéÿêÿìÿïÿðÿòÿõÿøÿøÿûÿþÿÿ     
+ 
+       
+ 
+  " # % ( ) + . 1 2 4 7ÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ£ÿ¥ÿŠÿ©ÿ¬ÿ¬ÿ¯ÿ²ÿŽÿµÿžÿ»ÿ»ÿŸÿÁÿÃÿÄÿÇÿÉÿÊÿÍÿÐÿÐÿÓÿÖÿØÿÙÿÜÿßÿßÿâÿåÿçÿèÿëÿîÿîÿñÿôÿöÿ÷ÿúÿüÿý      	 
+ 
+        
+   ! $ ' ' * - / 0 3 6 6 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ€ÿ¥ÿ§ÿªÿ«ÿ®ÿ°ÿ³ÿŽÿ¶ÿ¹ÿºÿœÿ¿ÿÂÿÃÿÅÿÈÿÉÿËÿÎÿÏÿÒÿÔÿ×ÿØÿÚÿÝÿÞÿáÿãÿæÿçÿéÿìÿíÿðÿòÿõÿöÿøÿûÿüÿþ     
+ 
+ 
+       
+    " % & ) + . / 1 4 5 8 : =ÿÿÿÿÿÿ
+ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ£ÿ£ÿŠÿ©ÿ©ÿ¬ÿ¯ÿ²ÿ²ÿµÿžÿžÿ»ÿŸÿÁÿÁÿÄÿÇÿÇÿÊÿÍÿÍÿÐÿÓÿÖÿÖÿÙÿÜÿÜÿßÿâÿåÿåÿèÿëÿëÿîÿñÿôÿôÿ÷ÿúÿúÿý       	 	 
+        
+ 
+ ! $ $ ' * - - 0 3 3 6 9 < < ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¢ÿ¥ÿ§ÿšÿ«ÿ­ÿ°ÿ±ÿŽÿ¶ÿ·ÿºÿŒÿ¿ÿÀÿÃÿÅÿÆÿÉÿËÿÌÿÏÿÑÿÔÿÕÿØÿÚÿÛÿÞÿàÿãÿäÿçÿéÿêÿíÿïÿòÿóÿöÿøÿùÿüÿþÿÿ     
+ 
+       
+ 
+   " # & ( + , / 1 2 5 7 : ; >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ£ÿŠÿ§ÿ©ÿ¬ÿ¯ÿ¯ÿ²ÿµÿ¶ÿžÿ»ÿŸÿŸÿÁÿÄÿÅÿÇÿÊÿËÿÍÿÐÿÓÿÓÿÖÿÙÿÚÿÜÿßÿâÿâÿåÿèÿéÿëÿîÿñÿñÿôÿ÷ÿøÿúÿýÿþ      	 
+ 
+       
+ 
+ ! " $ ' * * - 0 1 3 6 9 9 <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ¥ÿ¥ÿšÿ«ÿ­ÿ®ÿ±ÿ³ÿŽÿ·ÿºÿŒÿœÿÀÿÂÿÃÿÆÿÉÿÉÿÌÿÏÿÑÿÒÿÕÿ×ÿØÿÛÿÞÿàÿáÿäÿæÿçÿêÿíÿïÿðÿóÿõÿöÿùÿüÿüÿÿ     
+ 
+        
+     # & ( ) , . / 2 5 7 8 ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ£ÿ€ÿ§ÿ©ÿ¬ÿ­ÿ¯ÿ²ÿ³ÿµÿžÿ»ÿŒÿŸÿÁÿÂÿÄÿÇÿÈÿËÿÍÿÐÿÑÿÓÿÖÿ×ÿÙÿÜÿßÿàÿâÿåÿæÿèÿëÿîÿïÿñÿôÿõÿ÷ÿúÿûÿþ      	 
+ 
+        
+  " $ ' ( * - . 0 3 6 7 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ¢ÿ¥ÿšÿ«ÿ«ÿ®ÿ±ÿ±ÿŽÿ·ÿ¹ÿºÿœÿÀÿÀÿÃÿÆÿÆÿÉÿÌÿÏÿÏÿÒÿÕÿÕÿØÿÛÿÝÿÞÿáÿäÿäÿçÿêÿìÿíÿðÿóÿóÿöÿùÿùÿüÿÿ      
+        
+ 
+   # & & ) , , / 2 4 5 8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ€ÿŠÿ©ÿªÿ­ÿ¯ÿ°ÿ³ÿµÿžÿ¹ÿ»ÿŸÿ¿ÿÂÿÄÿÅÿÈÿÊÿÍÿÎÿÑÿÓÿÔÿ×ÿÙÿÜÿÝÿßÿâÿãÿæÿèÿëÿìÿîÿñÿòÿõÿ÷ÿøÿûÿý       
+ 
+        
+  ! $ % ( * + . 0 3 4 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿšÿšÿ«ÿ®ÿ¯ÿ±ÿŽÿ·ÿ·ÿºÿœÿœÿÀÿÃÿÄÿÆÿÉÿÌÿÌÿÏÿÒÿÓÿÕÿØÿÛÿÛÿÞÿáÿáÿäÿçÿêÿêÿíÿðÿðÿóÿöÿ÷ÿùÿüÿÿÿÿ     
+         
+   # # & ) * , / 2 2 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ€ÿŠÿ§ÿªÿ¬ÿ­ÿ°ÿ³ÿµÿ¶ÿ¹ÿ»ÿŒÿ¿ÿÁÿÂÿÅÿÈÿÊÿËÿÎÿÐÿÑÿÔÿ×ÿÙÿÚÿÝÿßÿàÿãÿåÿèÿéÿìÿîÿïÿòÿôÿõÿøÿûÿýÿþ     
+ 
+ 
+       
+  ! " % ' ( + . 0 1 4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ¥ÿŠÿšÿ«ÿ¬ÿ®ÿ±ÿŽÿµÿ·ÿºÿ»ÿœÿÀÿÁÿÃÿÆÿÉÿÊÿÌÿÏÿÐÿÒÿÕÿØÿÙÿÛÿÞÿßÿáÿäÿçÿçÿêÿíÿîÿðÿóÿôÿöÿùÿüÿýÿÿ     
+ 
+        
+   ! # & ' ) , / 0 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ€ÿ§ÿªÿªÿ­ÿ°ÿ²ÿ³ÿ¶ÿ¹ÿ¹ÿŒÿ¿ÿ¿ÿÂÿÅÿÇÿÈÿËÿÎÿÎÿÑÿÔÿÖÿ×ÿÚÿÝÿÝÿàÿãÿåÿæÿéÿëÿìÿïÿòÿòÿõÿøÿúÿûÿþ     	 
+ 
+       
+ 
+  " % % ( + - . 1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿ¥ÿšÿ©ÿ¬ÿ®ÿ±ÿ²ÿŽÿ·ÿžÿ»ÿœÿŸÿÁÿÃÿÆÿÇÿÉÿÌÿÍÿÐÿÒÿÕÿÖÿØÿÛÿÜÿßÿáÿäÿåÿçÿêÿëÿíÿðÿñÿôÿöÿùÿúÿüÿÿ      	 
+        
+ 
+   # $ ' ) , - /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ§ÿ§ÿªÿ­ÿ°ÿ°ÿ³ÿ¶ÿ¶ÿ¹ÿŒÿœÿ¿ÿÂÿÅÿÅÿÈÿËÿËÿÎÿÑÿÔÿÔÿ×ÿÚÿÚÿÝÿàÿãÿãÿæÿéÿéÿìÿïÿïÿòÿõÿøÿøÿûÿþÿþ     
+ 
+ 
+      
+ 
+  " " % ( + + .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ©ÿ«ÿ®ÿ¯ÿ²ÿŽÿµÿžÿºÿ»ÿŸÿÁÿÃÿÄÿÇÿÉÿÊÿÍÿÏÿÒÿÓÿÖÿØÿÙÿÜÿÞÿáÿâÿåÿçÿèÿëÿíÿîÿñÿóÿöÿ÷ÿúÿüÿý      	 
+ 
+        
+   ! $ & ) * -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ­ÿ­ÿ°ÿ³ÿŽÿ¶ÿ¹ÿºÿŒÿ¿ÿÂÿÃÿÅÿÈÿÉÿËÿÎÿÑÿÑÿÔÿ×ÿØÿÚÿÝÿàÿàÿãÿæÿçÿéÿìÿíÿïÿòÿõÿõÿøÿûÿüÿþ     
+ 
+ 
+       
+    " % ( ( +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ¯ÿ±ÿ²ÿµÿžÿžÿ»ÿŸÿÀÿÁÿÄÿÇÿÇÿÊÿÍÿÏÿÐÿÓÿÕÿÖÿÙÿÜÿÞÿßÿâÿäÿåÿèÿëÿëÿîÿñÿóÿôÿ÷ÿùÿúÿý       	 
+        
+ 
+ ! $ & ' *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ±ÿ³ÿ¶ÿ·ÿºÿŒÿ¿ÿÀÿÂÿÅÿÆÿÉÿËÿÎÿÏÿÑÿÔÿÕÿ×ÿÚÿÝÿÞÿàÿãÿäÿæÿéÿêÿíÿïÿòÿóÿõÿøÿùÿûÿþ      
+ 
+       
+ 
+   " % & (ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿµÿµÿžÿ»ÿŸÿŸÿÁÿÄÿÄÿÇÿÊÿÍÿÍÿÐÿÓÿÓÿÖÿÙÿÛÿÜÿßÿâÿâÿåÿèÿèÿëÿîÿñÿñÿôÿ÷ÿ÷ÿúÿýÿÿ      	 
+ 
+        
+ ! $ $ 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ·ÿ¹ÿŒÿœÿÀÿÂÿÃÿÆÿÈÿËÿÌÿÏÿÑÿÒÿÕÿ×ÿÚÿÛÿÝÿàÿáÿäÿæÿçÿêÿìÿïÿðÿóÿõÿöÿùÿûÿþÿÿ     
+ 
+        
+  " # &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿ»ÿ»ÿŸÿÁÿÂÿÄÿÇÿÊÿÊÿÍÿÐÿÑÿÓÿÖÿÙÿÙÿÜÿßÿßÿâÿåÿæÿèÿëÿîÿîÿñÿôÿõÿ÷ÿúÿýÿý      	 
+ 
+        
+ ! ! $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿœÿ¿ÿÀÿÃÿÆÿÈÿÉÿÌÿÎÿÏÿÒÿÕÿ×ÿØÿÛÿÝÿÞÿáÿãÿäÿçÿêÿìÿíÿðÿòÿóÿöÿùÿûÿüÿÿ      
+        
+    #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿ¿ÿÁÿÄÿÇÿÈÿÊÿÍÿÎÿÐÿÓÿÖÿ×ÿÙÿÜÿÝÿßÿâÿãÿåÿèÿëÿìÿîÿñÿòÿôÿ÷ÿúÿûÿý       	 
+        
+  !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÃÿÅÿÆÿÉÿÌÿÌÿÏÿÒÿÔÿÕÿØÿÛÿÛÿÞÿáÿáÿäÿçÿéÿêÿíÿðÿðÿóÿöÿøÿùÿüÿÿÿÿ     
+ 
+       
+ 
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÅÿÇÿÊÿËÿÎÿÐÿÓÿÔÿÖÿÙÿÚÿÝÿßÿàÿãÿåÿèÿéÿëÿîÿïÿòÿôÿ÷ÿøÿúÿýÿþ     	 
+ 
+       
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÉÿÉÿÌÿÏÿÒÿÒÿÕÿØÿØÿÛÿÞÿßÿáÿäÿçÿçÿêÿíÿíÿðÿóÿöÿöÿùÿüÿüÿÿ     
+ 
+        
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿËÿÍÿÐÿÑÿÔÿÖÿ×ÿÚÿÜÿÝÿàÿãÿåÿæÿéÿëÿìÿïÿñÿôÿõÿøÿúÿûÿþ      	 
+ 
+       
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿÏÿÏÿÒÿÕÿÖÿØÿÛÿÜÿÞÿáÿäÿåÿçÿêÿëÿíÿðÿóÿóÿöÿùÿúÿüÿÿ      	 
+       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÑÿÓÿÔÿ×ÿÚÿÚÿÝÿàÿâÿãÿæÿéÿéÿìÿïÿñÿòÿõÿ÷ÿøÿûÿþÿþ     
+ 
+ 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿÓÿÕÿØÿÙÿÜÿÞÿáÿâÿäÿçÿèÿëÿíÿðÿñÿóÿöÿ÷ÿùÿüÿý       
+ 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÿ×ÿ×ÿÚÿÝÿàÿàÿãÿæÿæÿéÿìÿïÿïÿòÿõÿõÿøÿûÿûÿþ     
+ 
+ 
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÙÿÛÿÞÿßÿâÿäÿåÿèÿêÿíÿîÿñÿóÿôÿ÷ÿùÿúÿýÿÿ     	 
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÝÿÝÿàÿãÿäÿæÿéÿìÿìÿïÿòÿóÿõÿøÿùÿûÿþ      
+ 
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿßÿáÿâÿåÿèÿêÿëÿîÿðÿñÿôÿ÷ÿ÷ÿúÿýÿÿ      	 
+   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿáÿãÿæÿéÿêÿìÿïÿðÿòÿõÿöÿùÿûÿþÿÿ     
+ 
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿåÿçÿèÿëÿîÿîÿñÿôÿôÿ÷ÿúÿýÿý      	 
+ 
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿçÿéÿìÿíÿðÿòÿóÿöÿøÿûÿüÿÿ     
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿëÿëÿîÿñÿòÿôÿ÷ÿúÿúÿý      	 	 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÿíÿïÿðÿóÿöÿøÿùÿüÿþÿÿ     
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿïÿñÿôÿ÷ÿøÿúÿýÿþ      	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿóÿõÿöÿùÿüÿüÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿõÿ÷ÿúÿûÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿùÿùÿüÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿûÿý    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ   ÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ     ÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ       ÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ         ÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	ÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+ÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+  ÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+    ÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+      ÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+        ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+          ÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+            ÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+              ÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+ ÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    !ÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " #ÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ %ÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & 'ÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( )ÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * +ÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , -ÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . /ÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1ÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3ÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7ÿúÿûÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9ÿüÿýÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;ÿþÿÿ           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < =           	 
+ 
+ 
+ 
+               
+ 
+ 
+    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿ¡ÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ¥ÿ£ÿ€ÿ£ÿ¢ÿ ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšÿ§ÿ§ÿŠÿ¥ÿŠÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ«ÿ©ÿšÿ©ÿšÿŠÿ§ÿŠÿ€ÿ£ÿ€ÿ£ÿ¡ÿ¢ÿ¡ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ­ÿ­ÿ¬ÿ«ÿªÿªÿ©ÿšÿšÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ£ÿ¢ÿ¡ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ±ÿ¯ÿ®ÿ¯ÿ®ÿ¬ÿ«ÿ¬ÿªÿ©ÿªÿ©ÿ§ÿŠÿ§ÿ¥ÿ€ÿ¥ÿ£ÿ¢ÿ£ÿ¢ÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ³ÿ±ÿ²ÿ±ÿ°ÿ°ÿ¯ÿ®ÿ¬ÿ­ÿ¬ÿ«ÿ«ÿªÿ©ÿ§ÿšÿ§ÿ¥ÿŠÿ¥ÿ€ÿ€ÿ£ÿ¢ÿ ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ÿµÿµÿŽÿ³ÿŽÿ²ÿ±ÿ²ÿ°ÿ¯ÿ®ÿ¯ÿ­ÿ¬ÿ­ÿ«ÿªÿ©ÿ©ÿšÿ§ÿšÿŠÿ¥ÿŠÿ€ÿ£ÿ¢ÿ£ÿ¡ÿ ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ¹ÿ·ÿ¶ÿ·ÿ¶ÿŽÿµÿŽÿ²ÿ³ÿ²ÿ±ÿ¯ÿ°ÿ¯ÿ­ÿ®ÿ­ÿ«ÿªÿ«ÿªÿšÿ©ÿšÿŠÿ§ÿŠÿ¥ÿ£ÿ€ÿ£ÿ¡ÿ¢ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÿ»ÿ»ÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿµÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ¯ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿªÿ©ÿšÿ©ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ£ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿ¿ÿœÿŒÿœÿŒÿºÿ¹ÿºÿžÿ·ÿžÿ·ÿµÿ¶ÿµÿ³ÿ²ÿ³ÿ±ÿ°ÿ±ÿ°ÿ®ÿ­ÿ®ÿ¬ÿ«ÿ¬ÿ«ÿ©ÿªÿ©ÿ§ÿŠÿ§ÿ¥ÿ€ÿ¥ÿ€ÿ¢ÿ¡ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÿÁÿ¿ÿÀÿ¿ÿŸÿŸÿœÿŒÿºÿ»ÿºÿ¹ÿ¹ÿžÿ·ÿ·ÿ¶ÿµÿ³ÿŽÿ³ÿ²ÿ²ÿ±ÿ°ÿ®ÿ¯ÿ®ÿ­ÿ­ÿ¬ÿ«ÿ«ÿªÿ©ÿ§ÿšÿ§ÿŠÿŠÿ¥ÿ€ÿ¢ÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÅÿÃÿÂÿÁÿÂÿÀÿ¿ÿÀÿŸÿœÿŒÿœÿ»ÿºÿ»ÿ¹ÿžÿ¹ÿ·ÿ¶ÿµÿ¶ÿŽÿ³ÿŽÿ²ÿ±ÿ°ÿ±ÿ¯ÿ®ÿ¯ÿ­ÿ¬ÿ­ÿ«ÿªÿ©ÿªÿšÿ§ÿšÿŠÿ¥ÿ€ÿ¥ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿÇÿÅÿÆÿÅÿÄÿÂÿÃÿÂÿÀÿÁÿÀÿ¿ÿœÿŸÿœÿ»ÿŒÿ»ÿ¹ÿºÿ¹ÿžÿ¶ÿ·ÿ¶ÿŽÿµÿŽÿ³ÿ±ÿ²ÿ±ÿ¯ÿ°ÿ¯ÿ­ÿ®ÿ­ÿ¬ÿªÿ«ÿªÿšÿ©ÿšÿ§ÿ¥ÿŠÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÉÿÉÿÈÿÇÿÈÿÆÿÅÿÄÿÄÿÃÿÂÿÃÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿŒÿºÿ¹ÿžÿžÿ·ÿ¶ÿ·ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ°ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ«ÿ©ÿšÿ§ÿ§ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÍÿËÿÊÿËÿÊÿÈÿÉÿÈÿÆÿÅÿÆÿÅÿÃÿÄÿÃÿÁÿÀÿÁÿ¿ÿŸÿ¿ÿŸÿŒÿœÿŒÿºÿ¹ÿºÿ¹ÿ·ÿžÿ·ÿµÿŽÿµÿ³ÿ²ÿ³ÿ²ÿ°ÿ±ÿ°ÿ®ÿ­ÿ®ÿ­ÿ«ÿ¬ÿ«ÿ©ÿšÿ©ÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÏÿÏÿÎÿÍÿÌÿÌÿËÿÊÿÊÿÉÿÈÿÇÿÇÿÆÿÅÿÅÿÄÿÃÿÁÿÂÿÁÿÀÿÀÿ¿ÿŸÿŸÿœÿŒÿ»ÿ»ÿºÿ¹ÿ¹ÿžÿ·ÿµÿ¶ÿµÿŽÿŽÿ³ÿ²ÿ²ÿ±ÿ°ÿ¯ÿ¯ÿ®ÿ­ÿ­ÿ¬ÿ«ÿªÿªÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿÓÿÑÿÐÿÑÿÐÿÎÿÍÿÎÿÌÿËÿÌÿËÿÉÿÈÿÉÿÇÿÆÿÇÿÅÿÄÿÃÿÄÿÂÿÁÿÂÿÀÿ¿ÿÀÿ¿ÿœÿŒÿœÿ»ÿºÿ»ÿ¹ÿžÿ·ÿžÿ¶ÿµÿ¶ÿŽÿ³ÿŽÿ³ÿ±ÿ°ÿ±ÿ¯ÿ®ÿ¯ÿ®ÿ¬ÿ«ÿ¬ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÕÿÓÿÔÿÓÿÒÿÒÿÑÿÐÿÎÿÏÿÎÿÍÿÍÿÌÿËÿÉÿÊÿÉÿÇÿÈÿÇÿÆÿÄÿÅÿÄÿÂÿÃÿÂÿÁÿÁÿÀÿ¿ÿœÿŸÿœÿ»ÿŒÿ»ÿºÿžÿ¹ÿžÿ¶ÿ·ÿ¶ÿµÿµÿŽÿ³ÿ±ÿ²ÿ±ÿ°ÿ°ÿ¯ÿ®ÿ¬ÿ­ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÿ×ÿ×ÿÖÿÕÿÖÿÔÿÓÿÔÿÒÿÑÿÐÿÑÿÏÿÎÿÏÿÍÿÌÿËÿËÿÊÿÉÿÊÿÈÿÇÿÆÿÆÿÅÿÄÿÅÿÃÿÂÿÃÿÁÿÀÿ¿ÿ¿ÿŸÿœÿŸÿŒÿ»ÿºÿºÿ¹ÿžÿ¹ÿ·ÿ¶ÿ·ÿµÿŽÿ³ÿŽÿ²ÿ±ÿ²ÿ°ÿ¯ÿ®ÿ®ÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÛÿÙÿØÿÙÿØÿÖÿ×ÿÖÿÔÿÕÿÔÿÓÿÑÿÒÿÑÿÏÿÐÿÏÿÍÿÌÿÍÿÌÿÊÿËÿÊÿÈÿÇÿÈÿÇÿÅÿÆÿÅÿÃÿÄÿÃÿÁÿÀÿÁÿÀÿŸÿ¿ÿŸÿŒÿ»ÿŒÿ»ÿ¹ÿºÿ¹ÿ·ÿžÿ·ÿ¶ÿŽÿµÿŽÿ²ÿ³ÿ²ÿ°ÿ¯ÿ°ÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÝÿÝÿÜÿÛÿÚÿÚÿÙÿØÿØÿ×ÿÖÿ×ÿÕÿÔÿÓÿÓÿÒÿÑÿÑÿÐÿÏÿÎÿÎÿÍÿÌÿÌÿËÿÊÿÉÿÉÿÈÿÇÿÇÿÆÿÅÿÅÿÄÿÃÿÂÿÂÿÁÿÀÿÀÿ¿ÿŸÿœÿœÿŒÿ»ÿ»ÿºÿ¹ÿºÿžÿ·ÿ¶ÿ¶ÿµÿŽÿŽÿ³ÿ²ÿ±ÿ±ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿáÿßÿÞÿßÿÞÿÜÿÛÿÜÿÚÿÙÿÚÿÙÿ×ÿØÿ×ÿÕÿÔÿÕÿÓÿÒÿÓÿÒÿÐÿÏÿÐÿÎÿÍÿÎÿÍÿËÿÊÿËÿÉÿÈÿÉÿÇÿÆÿÇÿÆÿÄÿÃÿÄÿÂÿÁÿÂÿÁÿ¿ÿŸÿ¿ÿœÿŒÿœÿŒÿºÿ»ÿºÿžÿ·ÿžÿ¶ÿµÿ¶ÿµÿ³ÿ²ÿ³ÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿãÿáÿâÿáÿàÿàÿßÿÞÿÜÿÝÿÜÿÛÿÛÿÚÿÙÿÙÿØÿ×ÿÕÿÖÿÕÿÔÿÔÿÓÿÒÿÐÿÑÿÐÿÏÿÏÿÎÿÍÿËÿÌÿËÿÉÿÊÿÉÿÈÿÈÿÇÿÆÿÄÿÅÿÄÿÃÿÃÿÂÿÁÿ¿ÿÀÿ¿ÿŸÿŸÿœÿŒÿŒÿ»ÿºÿžÿ¹ÿžÿ·ÿ·ÿ¶ÿµÿ³ÿŽÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿçÿåÿäÿãÿäÿâÿáÿâÿàÿßÿÞÿßÿÝÿÜÿÝÿÛÿÚÿÛÿÙÿØÿ×ÿØÿÖÿÕÿÖÿÔÿÓÿÒÿÓÿÑÿÐÿÑÿÏÿÎÿÍÿÍÿÌÿËÿÌÿÊÿÉÿÊÿÈÿÇÿÆÿÇÿÅÿÄÿÅÿÃÿÂÿÁÿÂÿÀÿ¿ÿÀÿŸÿœÿŸÿŒÿ»ÿºÿ»ÿ¹ÿžÿ¹ÿ·ÿ¶ÿµÿ¶ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÿéÿçÿèÿçÿæÿäÿåÿäÿâÿãÿâÿáÿßÿàÿßÿÝÿÞÿÝÿÛÿÜÿÛÿÚÿØÿÙÿØÿÖÿ×ÿÖÿÕÿÓÿÔÿÓÿÑÿÒÿÑÿÏÿÎÿÏÿÎÿÌÿÍÿÌÿÊÿËÿÊÿÉÿÇÿÈÿÇÿÅÿÆÿÅÿÄÿÂÿÃÿÂÿÀÿÁÿÀÿŸÿ¿ÿŸÿœÿ»ÿŒÿ»ÿ¹ÿºÿ¹ÿžÿ¶ÿ·ÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿëÿëÿêÿéÿêÿèÿçÿæÿæÿåÿäÿåÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÞÿÜÿÛÿÚÿÚÿÙÿØÿÙÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿÍÿËÿÊÿÉÿÉÿÈÿÇÿÈÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿÁÿ¿ÿŸÿœÿœÿŒÿ»ÿŒÿºÿ¹ÿžÿžÿ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿïÿíÿìÿíÿìÿêÿëÿêÿèÿçÿèÿçÿåÿæÿåÿãÿâÿãÿáÿàÿáÿàÿÞÿßÿÞÿÜÿÛÿÜÿÛÿÙÿÚÿÙÿ×ÿÖÿ×ÿÕÿÔÿÕÿÔÿÒÿÑÿÒÿÐÿÏÿÐÿÏÿÍÿÎÿÍÿËÿÊÿËÿÊÿÈÿÉÿÈÿÆÿÅÿÆÿÄÿÃÿÄÿÃÿÁÿÂÿÁÿ¿ÿŸÿ¿ÿŸÿŒÿœÿŒÿºÿ¹ÿºÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿñÿïÿðÿïÿîÿîÿíÿìÿìÿëÿêÿéÿéÿèÿçÿçÿæÿåÿãÿäÿãÿâÿâÿáÿàÿàÿßÿÞÿÝÿÝÿÜÿÛÿÛÿÚÿÙÿ×ÿØÿ×ÿÖÿÖÿÕÿÔÿÒÿÓÿÒÿÑÿÑÿÐÿÏÿÏÿÎÿÍÿÌÿÌÿËÿÊÿÊÿÉÿÈÿÆÿÇÿÆÿÅÿÅÿÄÿÃÿÃÿÂÿÁÿÀÿÀÿ¿ÿŸÿŸÿœÿŒÿºÿ»ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿõÿóÿòÿñÿòÿðÿïÿðÿîÿíÿîÿíÿëÿêÿëÿéÿèÿéÿçÿæÿåÿæÿäÿãÿäÿâÿáÿâÿáÿßÿÞÿßÿÝÿÜÿÝÿÛÿÚÿÙÿÚÿØÿ×ÿØÿÖÿÕÿÔÿÕÿÓÿÒÿÓÿÑÿÐÿÑÿÐÿÎÿÍÿÎÿÌÿËÿÌÿÊÿÉÿÈÿÉÿÇÿÆÿÇÿÅÿÄÿÅÿÄÿÂÿÁÿÂÿÀÿ¿ÿÀÿŸÿœÿŒÿœÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿ÷ÿõÿöÿõÿôÿòÿóÿòÿðÿñÿðÿïÿïÿîÿíÿëÿìÿëÿéÿêÿéÿèÿæÿçÿæÿäÿåÿäÿãÿãÿâÿáÿßÿàÿßÿÝÿÞÿÝÿÜÿÚÿÛÿÚÿØÿÙÿØÿ×ÿÕÿÖÿÕÿÓÿÔÿÓÿÒÿÒÿÑÿÐÿÎÿÏÿÎÿÌÿÍÿÌÿËÿÉÿÊÿÉÿÇÿÈÿÇÿÆÿÆÿÅÿÄÿÂÿÃÿÂÿÀÿÁÿÀÿ¿ÿœÿŸÿœÿÿÿÿÿÿÿÿÿÿÿÿÿúÿùÿùÿøÿ÷ÿøÿöÿõÿôÿôÿóÿòÿóÿñÿðÿñÿïÿîÿíÿíÿìÿëÿìÿêÿéÿèÿèÿçÿæÿçÿåÿäÿåÿãÿâÿáÿáÿàÿßÿàÿÞÿÝÿÜÿÜÿÛÿÚÿÛÿÙÿØÿ×ÿ×ÿÖÿÕÿÖÿÔÿÓÿÔÿÒÿÑÿÐÿÐÿÏÿÎÿÏÿÍÿÌÿËÿËÿÊÿÉÿÊÿÈÿÇÿÈÿÆÿÅÿÄÿÄÿÃÿÂÿÃÿÁÿÀÿ¿ÿ¿ÿŸÿÿÿÿÿÿÿÿÿþÿýÿûÿúÿûÿúÿøÿùÿøÿöÿõÿöÿõÿóÿôÿóÿñÿòÿñÿïÿîÿïÿîÿìÿíÿìÿêÿéÿêÿéÿçÿèÿçÿåÿæÿåÿãÿâÿãÿâÿàÿáÿàÿÞÿÝÿÞÿÝÿÛÿÜÿÛÿÙÿØÿÙÿØÿÖÿ×ÿÖÿÔÿÕÿÔÿÒÿÑÿÒÿÑÿÏÿÐÿÏÿÍÿÌÿÍÿÌÿÊÿËÿÊÿÈÿÉÿÈÿÆÿÅÿÆÿÅÿÃÿÄÿÃÿÁÿÀÿÁÿÀÿÿÿÿ  ÿÿÿÿÿþÿýÿüÿüÿûÿúÿúÿùÿøÿ÷ÿ÷ÿöÿõÿõÿôÿóÿóÿòÿñÿðÿðÿïÿîÿîÿíÿìÿëÿëÿêÿéÿéÿèÿçÿçÿæÿåÿäÿäÿãÿâÿâÿáÿàÿßÿßÿÞÿÝÿÝÿÜÿÛÿÚÿÚÿÙÿØÿØÿ×ÿÖÿÖÿÕÿÔÿÓÿÓÿÒÿÑÿÑÿÐÿÏÿÎÿÎÿÍÿÌÿÌÿËÿÊÿÊÿÉÿÈÿÇÿÇÿÆÿÅÿÅÿÄÿÃÿÂÿÂÿÁÿÿÿÿ      ÿþÿýÿþÿüÿûÿüÿûÿùÿøÿùÿ÷ÿöÿ÷ÿõÿôÿõÿôÿòÿñÿòÿðÿïÿðÿïÿíÿìÿíÿëÿêÿëÿéÿèÿéÿèÿæÿåÿæÿäÿãÿäÿãÿáÿàÿáÿßÿÞÿßÿÞÿÜÿÛÿÜÿÚÿÙÿÚÿØÿ×ÿØÿ×ÿÕÿÔÿÕÿÓÿÒÿÓÿÒÿÐÿÏÿÐÿÎÿÍÿÎÿÌÿËÿÌÿËÿÉÿÈÿÉÿÇÿÆÿÇÿÆÿÄÿÃÿÿÿÿÿÿÿÿ      ÿþÿÿÿþÿýÿýÿüÿûÿùÿúÿùÿ÷ÿøÿ÷ÿöÿöÿõÿôÿòÿóÿòÿñÿñÿðÿïÿíÿîÿíÿëÿìÿëÿêÿêÿéÿèÿæÿçÿæÿåÿåÿäÿãÿáÿâÿáÿàÿàÿßÿÞÿÜÿÝÿÜÿÚÿÛÿÚÿÙÿÙÿØÿ×ÿÕÿÖÿÕÿÔÿÔÿÓÿÒÿÐÿÑÿÐÿÎÿÏÿÎÿÍÿÍÿÌÿËÿÉÿÊÿÉÿÈÿÈÿÇÿÿÿÿÿÿÿÿÿÿÿÿ        ÿÿÿþÿÿÿýÿüÿûÿûÿúÿùÿúÿøÿ÷ÿøÿöÿõÿôÿõÿóÿòÿóÿñÿðÿïÿïÿîÿíÿîÿìÿëÿìÿêÿéÿèÿéÿçÿæÿçÿåÿäÿãÿäÿâÿáÿâÿàÿßÿÞÿÞÿÝÿÜÿÝÿÛÿÚÿÛÿÙÿØÿ×ÿØÿÖÿÕÿÖÿÔÿÓÿÒÿÒÿÑÿÐÿÑÿÏÿÎÿÏÿÍÿÌÿËÿÌÿÊÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        ÿÿ  ÿÿÿýÿüÿýÿüÿúÿûÿúÿøÿùÿøÿ÷ÿõÿöÿõÿóÿôÿóÿñÿðÿñÿðÿîÿïÿîÿìÿíÿìÿëÿéÿêÿéÿçÿèÿçÿæÿäÿåÿäÿâÿãÿâÿàÿßÿàÿßÿÝÿÞÿÝÿÛÿÜÿÛÿÚÿØÿÙÿØÿÖÿ×ÿÖÿÔÿÓÿÔÿÓÿÑÿÒÿÑÿÏÿÐÿÏÿÎÿÌÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ            ÿÿÿþÿþÿýÿüÿüÿûÿúÿûÿùÿøÿ÷ÿ÷ÿöÿõÿõÿôÿóÿòÿòÿñÿðÿðÿïÿîÿïÿíÿìÿëÿëÿêÿéÿêÿèÿçÿæÿæÿåÿäÿäÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÞÿÜÿÛÿÚÿÚÿÙÿØÿØÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÒÿÐÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	            ÿÿ  ÿþÿýÿþÿýÿûÿüÿûÿùÿøÿùÿ÷ÿöÿ÷ÿöÿôÿóÿôÿòÿñÿòÿñÿïÿðÿïÿíÿìÿíÿìÿêÿëÿêÿèÿçÿèÿæÿåÿæÿåÿãÿâÿãÿáÿàÿáÿàÿÞÿßÿÞÿÜÿÛÿÜÿÚÿÙÿÚÿÙÿ×ÿÖÿ×ÿÕÿÔÿÕÿÔÿÒÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 	 	              ÿÿÿÿÿþÿýÿýÿüÿûÿùÿúÿùÿøÿøÿ÷ÿöÿôÿõÿôÿóÿóÿòÿñÿñÿðÿïÿîÿîÿíÿìÿìÿëÿêÿèÿéÿèÿçÿçÿæÿåÿãÿäÿãÿâÿâÿáÿàÿàÿßÿÞÿÜÿÝÿÜÿÛÿÛÿÚÿÙÿ×ÿØÿ×ÿÖÿÖÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 	              ÿÿÿþÿÿÿýÿüÿûÿüÿúÿùÿúÿøÿ÷ÿöÿ÷ÿõÿôÿõÿóÿòÿóÿòÿðÿïÿðÿîÿíÿîÿìÿëÿêÿëÿéÿèÿéÿçÿæÿåÿæÿäÿãÿäÿâÿáÿâÿàÿßÿÞÿßÿÝÿÜÿÝÿÛÿÚÿÙÿÚÿØÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 
+ 
+  	           ÿÿ  ÿÿÿþÿüÿýÿüÿúÿûÿúÿùÿ÷ÿøÿ÷ÿõÿöÿõÿôÿôÿóÿòÿðÿñÿðÿîÿïÿîÿíÿëÿìÿëÿéÿêÿéÿèÿæÿçÿæÿäÿåÿäÿâÿãÿâÿáÿßÿàÿßÿÝÿÞÿÝÿÜÿÚÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+  
+ 
+ 
+ 
+ 	  	            ÿÿÿþÿþÿýÿüÿýÿûÿúÿùÿùÿøÿ÷ÿøÿöÿõÿöÿôÿóÿòÿòÿñÿðÿñÿïÿîÿíÿíÿìÿëÿìÿêÿéÿèÿèÿçÿæÿæÿåÿäÿåÿãÿâÿáÿáÿàÿßÿàÿÞÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+ 
+ 
+ 
+ 	 
+ 	            ÿÿ  ÿÿÿýÿþÿýÿûÿúÿûÿúÿøÿùÿøÿöÿ÷ÿöÿôÿóÿôÿóÿñÿòÿñÿïÿîÿïÿîÿìÿíÿìÿêÿéÿêÿèÿçÿèÿçÿåÿæÿåÿãÿâÿãÿâÿàÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 
+ 
+ 
+ 
+ 
+ 	              ÿÿÿÿÿþÿýÿüÿüÿûÿúÿúÿùÿøÿøÿ÷ÿöÿõÿõÿôÿóÿóÿòÿñÿðÿðÿïÿîÿîÿíÿìÿêÿëÿêÿéÿéÿèÿçÿçÿæÿåÿäÿäÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
+ 
+ 
+ 
+ 
+ 	 
+                ÿþÿýÿþÿüÿûÿüÿúÿùÿúÿùÿ÷ÿöÿ÷ÿõÿôÿõÿôÿòÿñÿòÿðÿïÿðÿîÿíÿìÿíÿëÿêÿëÿéÿèÿéÿèÿæÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ         
+  
+ 
+ 
+ 
+ 
+  	             ÿþÿÿÿþÿüÿýÿüÿûÿûÿúÿùÿ÷ÿøÿ÷ÿöÿöÿõÿôÿòÿóÿòÿðÿñÿðÿïÿíÿîÿíÿëÿìÿëÿêÿêÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ            
+ 
+ 
+ 
+ 
+ 
+ 	  	             ÿÿÿþÿÿÿýÿüÿýÿûÿúÿùÿúÿøÿ÷ÿøÿöÿõÿôÿôÿóÿòÿóÿñÿðÿïÿïÿîÿíÿîÿìÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ             
+  
+ 
+ 
+ 
+ 	 
+ 	           ÿÿ  ÿÿÿýÿþÿýÿüÿúÿûÿúÿøÿùÿøÿöÿõÿöÿõÿóÿôÿóÿñÿðÿñÿðÿîÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                
+ 
+ 
+ 
+ 
+ 
+ 	              ÿÿ  ÿþÿýÿüÿüÿûÿúÿúÿùÿøÿ÷ÿ÷ÿöÿõÿõÿôÿóÿòÿòÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                   
+ 
+ 
+ 
+ 	 
+                ÿþÿýÿþÿüÿûÿüÿûÿùÿøÿùÿ÷ÿöÿ÷ÿöÿôÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                     
+ 
+ 
+ 
+ 
+ 	 	             ÿþÿÿÿþÿýÿýÿüÿûÿùÿúÿùÿøÿøÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+  
+                   
+ 
+ 
+ 
+ 
+ 
+ 	              ÿÿÿþÿÿÿýÿüÿûÿüÿúÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 
+                   
+  
+ 
+ 
+ 
+ 
+  	           ÿÿ  ÿÿÿþÿüÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+  
+ 
+                     
+  
+ 
+ 
+ 
+ 	              ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !     
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 	 
+ 	         ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ " ! !    
+ 
+ 
+ 
+ 
+                    
+ 
+ 
+ 
+ 
+ 
+ 	 	     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ # " # "      
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+ 
+ 
+ 
+  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % $ $ # "   !   
+  
+ 
+  
+                   
+  
+ 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & % & $ # " " !   !  
+ 
+ 
+ 
+  
+                   
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( & ' & $ # $ # ! " !  
+  
+ 
+ 
+ 
+                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ( ( ' & % % $ # # " !      
+ 
+ 
+ 
+ 
+            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ * ) * ) ' & ' % $ % $ " ! "      
+ 
+ 
+ 
+         ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ , + + * ) ' ( ' & & % $ " # "   !     
+ 
+  
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - , - + * ) * ( ' ( & % $ $ # " # !   !  
+ 
+ 
+ 
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / - . - , * + * ( ) ( & % & % # $ # ! " !   
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 / 0 . - , , + * * ) ( ' ' & % % $ # $ " !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 0 1 0 . - . , + , + ) ( ) ' & ' & $ %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 2 2 1 0 . / . - - , + ) * ) ( ( 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 4 3 4 2 1 0 1 / . / - , + , * )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6 4 5 4 3 1 2 1 / 0 / . , -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 7 6 7 5 4 3 3 2 1 2 0 /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 7 8 7 5 4 5 4 2 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : 9 9 8 7 6 6 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ; : ; : 8 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ = < < ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > =ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ   ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+    ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿ 
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿ 
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿ  
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿ  
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿ   
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿ   
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿ    
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿ    
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿ     
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿ     
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿ      
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿ      
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿ       
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿ       
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿ        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿ        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿ 
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿ 
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ   
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠ % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿš ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ© ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿª ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ« * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ® - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ° / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ± 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ² 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽ 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµ 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ· 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿž 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿº 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ» : 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒ ; 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœ < : 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸ = ; 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ > < : 8 6 4 2 0 . , * ( & $ "   
+ 
+        
+ 
+      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀ ? = ; 9 7 5 3 1 / - + ) ' % # !  
+        
+ 
+ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁ                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿýÿûÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿüÿùÿùÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿûÿúÿ÷ÿõÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿüÿüÿùÿöÿõÿóÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	     ÿþÿýÿúÿøÿ÷ÿôÿñÿïÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+    ÿÿÿþÿüÿùÿøÿöÿóÿðÿïÿíÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 	 	     ÿýÿúÿúÿ÷ÿôÿòÿñÿîÿëÿëÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+    ÿÿÿüÿûÿøÿöÿóÿòÿðÿíÿìÿéÿçÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+ 
+ 	     ÿýÿýÿúÿ÷ÿôÿôÿñÿîÿîÿëÿèÿçÿåÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
+ 
+    ÿÿÿþÿûÿùÿöÿõÿòÿðÿïÿìÿêÿéÿæÿãÿáÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+ 	     ÿÿÿýÿúÿ÷ÿ÷ÿôÿñÿðÿîÿëÿêÿèÿåÿâÿáÿßÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+ 
+     ÿþÿûÿùÿøÿõÿóÿòÿïÿìÿìÿéÿæÿäÿãÿàÿÝÿÝÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+ 	    ÿÿÿýÿúÿùÿ÷ÿôÿóÿñÿîÿíÿêÿèÿåÿäÿâÿßÿÞÿÛÿÙÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+ 
+ 
+    ÿþÿûÿûÿøÿõÿõÿòÿïÿïÿìÿéÿæÿæÿãÿàÿàÿÝÿÚÿ×ÿ×ÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 
+      ÿýÿüÿùÿ÷ÿöÿóÿñÿðÿíÿëÿèÿçÿäÿâÿáÿÞÿÜÿÙÿØÿÕÿÓÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 
+ 
+    ÿþÿþÿûÿøÿ÷ÿõÿòÿñÿïÿìÿéÿéÿæÿãÿâÿàÿÝÿÚÿÚÿ×ÿÔÿÓÿÑÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
+ 	     ÿÿÿüÿúÿùÿöÿóÿóÿðÿíÿëÿêÿçÿåÿäÿáÿÞÿÜÿÛÿØÿÖÿÕÿÒÿÏÿÏÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+       
+ 
+ 	     ÿþÿûÿúÿøÿõÿôÿñÿïÿìÿëÿéÿæÿåÿãÿàÿÝÿÜÿÚÿ×ÿÖÿÔÿÑÿÐÿÍÿËÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+        
+ 
+    ÿÿÿüÿüÿùÿöÿöÿóÿðÿíÿíÿêÿçÿçÿäÿáÿßÿÞÿÛÿØÿØÿÕÿÒÿÒÿÏÿÌÿÉÿÉÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+       
+ 
+ 	    ÿþÿýÿúÿøÿ÷ÿôÿòÿïÿîÿëÿéÿèÿåÿãÿàÿßÿÝÿÚÿÙÿÖÿÔÿÓÿÐÿÎÿËÿÊÿÇÿÅÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
+ 
+       
+ 
+    ÿÿÿÿÿüÿùÿøÿöÿóÿðÿðÿíÿêÿéÿçÿäÿáÿáÿÞÿÛÿÛÿØÿÕÿÔÿÒÿÏÿÌÿÌÿÉÿÆÿÅÿÃÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !  
+        
+ 	      ÿýÿûÿúÿ÷ÿôÿòÿñÿîÿìÿëÿèÿåÿãÿâÿßÿÝÿÜÿÙÿ×ÿÖÿÓÿÐÿÎÿÍÿÊÿÈÿÇÿÄÿÁÿ¿ÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #    
+        
+     ÿÿÿüÿûÿùÿöÿóÿòÿðÿíÿìÿêÿçÿäÿãÿáÿÞÿÝÿÛÿØÿ×ÿÕÿÒÿÏÿÎÿÌÿÉÿÈÿÆÿÃÿÀÿ¿ÿœÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ ! ! 
+        
+ 
+ 	     ÿýÿýÿúÿ÷ÿõÿôÿñÿîÿîÿëÿèÿæÿåÿâÿßÿßÿÜÿÙÿÙÿÖÿÓÿÑÿÐÿÍÿÊÿÊÿÇÿÄÿÂÿÁÿŸÿ»ÿ»ÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & # "  
+        
+ 
+    ÿÿÿþÿûÿùÿöÿõÿóÿðÿïÿìÿêÿçÿæÿäÿáÿàÿÝÿÛÿÚÿ×ÿÕÿÒÿÑÿÏÿÌÿËÿÈÿÆÿÃÿÂÿÀÿœÿŒÿ¹ÿ·ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ' $ $ ! 
+        
+ 
+ 	     ÿÿÿýÿúÿ÷ÿ÷ÿôÿñÿñÿîÿëÿèÿèÿåÿâÿâÿßÿÜÿÛÿÙÿÖÿÓÿÓÿÐÿÍÿÍÿÊÿÇÿÄÿÄÿÁÿŸÿŸÿ»ÿžÿµÿµÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( & % "   
+ 
+       
+ 
+     ÿþÿûÿùÿøÿõÿóÿòÿïÿíÿêÿéÿæÿäÿãÿàÿÞÿÝÿÚÿ×ÿÕÿÔÿÑÿÏÿÎÿËÿÉÿÆÿÅÿÂÿÀÿ¿ÿŒÿºÿ·ÿ¶ÿ³ÿ±ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ * ' & $ ! 
+ 
+        
+ 	      ÿýÿúÿùÿ÷ÿôÿóÿñÿîÿëÿëÿèÿåÿäÿâÿßÿÞÿÜÿÙÿÖÿÕÿÓÿÐÿÏÿÍÿÊÿÇÿÇÿÄÿÁÿÀÿŸÿ»ÿžÿžÿµÿ²ÿ±ÿ¯ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + ( ( % "    
+       
+ 
+ 
+    ÿþÿüÿûÿøÿõÿõÿòÿïÿíÿìÿéÿçÿæÿãÿàÿàÿÝÿÚÿØÿ×ÿÔÿÑÿÑÿÎÿËÿÉÿÈÿÅÿÃÿÂÿ¿ÿŒÿºÿ¹ÿ¶ÿŽÿ³ÿ°ÿ­ÿ­ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - * ) & $ !   
+        
+ 
+ 	     ÿýÿüÿúÿ÷ÿöÿóÿñÿîÿíÿëÿèÿçÿåÿâÿáÿÞÿÜÿÙÿØÿÖÿÓÿÒÿÏÿÍÿÊÿÉÿÇÿÄÿÃÿÁÿŸÿ»ÿºÿžÿµÿŽÿ²ÿ¯ÿ®ÿ«ÿ©ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ . + + ( % " "  
+ 
+      
+ 
+ 
+    ÿþÿþÿûÿøÿøÿõÿòÿïÿïÿìÿéÿéÿæÿãÿãÿàÿÝÿÚÿÚÿ×ÿÔÿÔÿÑÿÎÿËÿËÿÈÿÅÿÅÿÂÿ¿ÿœÿŒÿ¹ÿ¶ÿ¶ÿ³ÿ°ÿ°ÿ­ÿªÿ§ÿ§ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / - , ) ' $ #   
+ 
+        
+ 	     ÿÿÿüÿúÿùÿöÿôÿñÿðÿíÿëÿêÿçÿåÿäÿáÿßÿÜÿÛÿØÿÖÿÕÿÒÿÐÿÍÿÌÿÉÿÇÿÆÿÃÿÁÿŸÿœÿ»ÿžÿ·ÿŽÿ²ÿ±ÿ®ÿ¬ÿ©ÿšÿ¥ÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 1 . - + ( % % "  
+ 
+       
+ 
+ 	    ÿþÿûÿúÿøÿõÿòÿòÿïÿìÿëÿéÿæÿåÿãÿàÿÝÿÝÿÚÿ×ÿÖÿÔÿÑÿÎÿÎÿËÿÈÿÇÿÅÿÂÿ¿ÿ¿ÿŒÿ¹ÿ¹ÿ¶ÿ³ÿ²ÿ°ÿ­ÿªÿªÿ§ÿ€ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 0 / , ) ' & # !   
+        
+ 
+    ÿÿÿýÿüÿùÿöÿôÿóÿðÿîÿíÿêÿçÿçÿäÿáÿßÿÞÿÛÿÙÿØÿÕÿÒÿÐÿÏÿÌÿÊÿÉÿÆÿÃÿÁÿÀÿœÿ»ÿºÿ·ÿµÿŽÿ±ÿ®ÿ¬ÿ«ÿšÿŠÿ¥ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 4 1 0 . + ( ' % " !  
+       
+ 
+ 
+    ÿþÿýÿûÿøÿõÿôÿòÿïÿîÿìÿéÿèÿåÿãÿàÿßÿÝÿÚÿÙÿ×ÿÔÿÑÿÐÿÎÿËÿÊÿÈÿÅÿÂÿÁÿ¿ÿŒÿ»ÿ¹ÿ¶ÿµÿ³ÿ°ÿ­ÿ¬ÿªÿ§ÿŠÿ€ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 2 2 / , * ) & # #   
+         
+    ÿÿÿÿÿüÿùÿ÷ÿöÿóÿðÿðÿíÿêÿêÿçÿäÿáÿáÿÞÿÛÿÛÿØÿÕÿÓÿÒÿÏÿÌÿÌÿÉÿÆÿÄÿÃÿÀÿœÿœÿºÿ·ÿ·ÿŽÿ±ÿ¯ÿ®ÿ«ÿšÿšÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6 4 3 0 . + * ( % $ !  
+        
+ 
+      ÿýÿûÿøÿ÷ÿõÿòÿñÿîÿìÿëÿèÿæÿãÿâÿßÿÝÿÜÿÙÿ×ÿÔÿÓÿÑÿÎÿÍÿÊÿÈÿÅÿÄÿÂÿ¿ÿŸÿ»ÿ¹ÿžÿµÿ³ÿ°ÿ¯ÿ­ÿªÿ©ÿŠÿ€ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8 5 4 2 / , , ) & & #   
+ 
+        
+     ÿÿÿüÿùÿùÿöÿóÿóÿðÿíÿìÿêÿçÿäÿäÿáÿÞÿÝÿÛÿØÿÕÿÕÿÒÿÏÿÏÿÌÿÉÿÆÿÆÿÃÿÀÿÀÿœÿºÿ¹ÿ·ÿŽÿ±ÿ±ÿ®ÿ«ÿ«ÿšÿ¥ÿ¢ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 7 6 3 0 . - * ( ' $ "  
+        
+ 
+ 	     ÿþÿûÿúÿ÷ÿõÿôÿñÿïÿîÿëÿèÿæÿåÿâÿàÿßÿÜÿÙÿ×ÿÖÿÓÿÑÿÐÿÍÿËÿÈÿÇÿÄÿÂÿÁÿŸÿŒÿ»ÿžÿµÿ³ÿ²ÿ¯ÿ­ÿ¬ÿ©ÿ§ÿ€ÿ£ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ; 8 7 5 2 / . , ) ( & #     
+        
+ 
+    ÿÿÿüÿüÿùÿöÿõÿóÿðÿïÿíÿêÿçÿæÿäÿáÿàÿÞÿÛÿØÿ×ÿÕÿÒÿÑÿÏÿÌÿÉÿÉÿÆÿÃÿÂÿÀÿœÿŒÿºÿ·ÿŽÿ³ÿ±ÿ®ÿ­ÿ«ÿšÿ¥ÿ¥ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < 9 9 6 3 1 0 - * * ' $ " ! 
+ 
+       
+ 
+ 	     ÿþÿýÿúÿøÿ÷ÿôÿñÿñÿîÿëÿéÿèÿåÿâÿâÿßÿÜÿÚÿÙÿÖÿÓÿÓÿÐÿÍÿËÿÊÿÇÿÅÿÄÿÁÿŸÿŸÿ»ÿžÿ¶ÿµÿ²ÿ¯ÿ¯ÿ¬ÿ©ÿ§ÿŠÿ£ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > ; : 7 5 2 1 / , + ( & # "   
+ 
+       
+ 
+    ÿÿÿþÿüÿùÿøÿöÿóÿòÿïÿíÿêÿéÿçÿäÿãÿàÿÞÿÛÿÚÿØÿÕÿÔÿÑÿÏÿÌÿËÿÉÿÆÿÅÿÃÿÀÿ¿ÿŒÿºÿ·ÿ¶ÿŽÿ±ÿ°ÿ­ÿ«ÿšÿ§ÿ¥ÿ¢ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ? < < 9 6 3 3 0 - - * ' $ $ ! 
+ 
+        
+ 	 	      ÿýÿúÿúÿ÷ÿôÿôÿñÿîÿëÿëÿèÿåÿåÿâÿßÿÜÿÜÿÙÿÖÿÖÿÓÿÐÿÍÿÍÿÊÿÇÿÇÿÄÿÁÿÁÿŸÿ»ÿžÿžÿµÿ²ÿ²ÿ¯ÿ¬ÿ©ÿ©ÿŠÿ£ÿ£ÿ ÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿÿÿÿÿ = : 8 5 4 1 / . + ) & % "    
+       
+ 
+ 
+    ÿþÿüÿûÿøÿöÿõÿòÿðÿíÿìÿéÿçÿæÿãÿáÿÞÿÝÿÚÿØÿ×ÿÔÿÒÿÏÿÎÿËÿÉÿÈÿÅÿÃÿÂÿ¿ÿœÿºÿ¹ÿ¶ÿŽÿ³ÿ°ÿ®ÿ«ÿªÿ§ÿ¥ÿ€ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 6 6 3 0 / - * ' ' $ !   
+        
+ 
+ 	     ÿýÿüÿúÿ÷ÿöÿôÿñÿîÿîÿëÿèÿçÿåÿâÿßÿßÿÜÿÙÿØÿÖÿÓÿÐÿÐÿÍÿÊÿÉÿÇÿÄÿÃÿÁÿŸÿ»ÿ»ÿžÿµÿŽÿ²ÿ¯ÿ¬ÿ¬ÿ©ÿŠÿ¥ÿ£ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿ 7 4 2 1 . + ) ( % # "  
+ 
+       
+ 
+    ÿÿÿþÿûÿøÿøÿõÿòÿðÿïÿìÿêÿéÿæÿãÿáÿàÿÝÿÛÿÚÿ×ÿÔÿÒÿÑÿÎÿÌÿËÿÈÿÅÿÅÿÂÿ¿ÿœÿŒÿ¹ÿ·ÿ¶ÿ³ÿ°ÿ®ÿ­ÿªÿšÿ§ÿ€ÿ¡ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 2 0 - * ) ' $ # ! 
+ 
+        
+ 	     ÿÿÿýÿúÿùÿöÿôÿñÿðÿîÿëÿêÿèÿåÿâÿáÿßÿÜÿÛÿÙÿÖÿÓÿÒÿÐÿÍÿÌÿÊÿÇÿÆÿÃÿÁÿŸÿœÿ»ÿžÿ·ÿµÿ²ÿ¯ÿ®ÿ¬ÿ©ÿšÿŠÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 1 . , + ( % % "   
+       
+ 
+     ÿþÿûÿûÿøÿõÿòÿòÿïÿìÿìÿéÿæÿäÿãÿàÿÝÿÝÿÚÿ×ÿÕÿÔÿÑÿÎÿÎÿËÿÈÿÈÿÅÿÂÿ¿ÿ¿ÿŒÿ¹ÿ¹ÿ¶ÿ³ÿ±ÿ°ÿ­ÿªÿªÿ§ÿ€ÿ€ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - , * ' & # !   
+        
+ 	    ÿÿÿýÿüÿùÿ÷ÿôÿóÿðÿîÿíÿêÿèÿåÿäÿâÿßÿÞÿÛÿÙÿÖÿÕÿÓÿÐÿÏÿÌÿÊÿÉÿÆÿÄÿÁÿÀÿœÿ»ÿºÿ·ÿµÿ²ÿ±ÿ¯ÿ¬ÿ«ÿšÿŠÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + ( ( % " !  
+       
+ 
+ 
+    ÿþÿýÿûÿøÿõÿõÿòÿïÿîÿìÿéÿæÿæÿãÿàÿàÿÝÿÚÿ×ÿ×ÿÔÿÑÿÑÿÎÿËÿÊÿÈÿÅÿÂÿÂÿ¿ÿŒÿ»ÿ¹ÿ¶ÿ³ÿ³ÿ°ÿ­ÿ­ÿªÿ§ÿŠÿ€ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) & $ #   
+        
+ 
+      ÿÿÿüÿùÿ÷ÿöÿóÿñÿðÿíÿêÿèÿçÿäÿâÿáÿÞÿÜÿÙÿØÿÕÿÓÿÒÿÏÿÍÿÌÿÉÿÆÿÄÿÃÿÀÿŸÿœÿºÿ·ÿµÿŽÿ±ÿ¯ÿ®ÿ«ÿ©ÿšÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % $ "  
+       
+ 
+ 
+      ÿþÿûÿøÿ÷ÿõÿòÿñÿïÿìÿéÿèÿæÿãÿâÿàÿÝÿÚÿÚÿ×ÿÔÿÓÿÑÿÎÿÍÿËÿÈÿÅÿÄÿÂÿ¿ÿŸÿŒÿ¹ÿ¶ÿµÿ³ÿ°ÿ¯ÿ­ÿªÿ©ÿ§ÿ€ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #   
+ 
+        
+     ÿÿÿüÿúÿùÿöÿóÿóÿðÿíÿëÿêÿçÿäÿäÿáÿÞÿÜÿÛÿØÿÖÿÕÿÒÿÏÿÏÿÌÿÉÿÇÿÆÿÃÿÀÿÀÿœÿºÿžÿ·ÿŽÿ±ÿ±ÿ®ÿ«ÿ«ÿšÿ¥ÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+ 
+       
+ 
+ 	     ÿþÿûÿúÿøÿõÿôÿñÿïÿìÿëÿéÿæÿåÿâÿàÿÝÿÜÿÚÿ×ÿÖÿÔÿÑÿÐÿÍÿËÿÈÿÇÿÅÿÂÿÁÿŸÿŒÿ¹ÿžÿ¶ÿ³ÿ²ÿ¯ÿ­ÿ¬ÿ©ÿ§ÿ€ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+        
+ 
+    ÿÿÿüÿüÿùÿöÿöÿóÿðÿíÿíÿêÿçÿçÿäÿáÿÞÿÞÿÛÿØÿØÿÕÿÒÿÒÿÏÿÌÿÉÿÉÿÆÿÃÿÃÿÀÿœÿºÿºÿ·ÿŽÿŽÿ±ÿ®ÿ­ÿ«ÿšÿ¥ÿ¥ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
+ 
+ 	     ÿþÿýÿúÿøÿ÷ÿôÿòÿïÿîÿëÿéÿèÿåÿãÿàÿßÿÜÿÚÿÙÿÖÿÔÿÓÿÐÿÎÿËÿÊÿÇÿÅÿÄÿÁÿ¿ÿŒÿ»ÿžÿ¶ÿµÿ²ÿ°ÿ¯ÿ¬ÿ©ÿ§ÿŠÿ£ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
+ 
+    ÿÿÿþÿüÿùÿøÿöÿóÿðÿðÿíÿêÿéÿçÿäÿáÿáÿÞÿÛÿÚÿØÿÕÿÔÿÒÿÏÿÌÿÌÿÉÿÆÿÅÿÃÿÀÿœÿœÿºÿ·ÿ¶ÿŽÿ±ÿ°ÿ®ÿ«ÿšÿ§ÿ¥ÿ¢ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+ 	 	     ÿýÿúÿúÿ÷ÿôÿòÿñÿîÿìÿëÿèÿåÿãÿâÿßÿÝÿÜÿÙÿÖÿÖÿÓÿÐÿÎÿÍÿÊÿÈÿÇÿÄÿÁÿ¿ÿŸÿ»ÿ¹ÿžÿµÿ²ÿ²ÿ¯ÿ¬ÿªÿ©ÿŠÿ£ÿ£ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
+ 
+    ÿÿÿüÿûÿøÿöÿóÿòÿðÿíÿìÿêÿçÿäÿãÿáÿÞÿÝÿÛÿØÿ×ÿÔÿÒÿÏÿÎÿÌÿÉÿÈÿÆÿÃÿÀÿ¿ÿœÿºÿ¹ÿ·ÿŽÿ³ÿ°ÿ®ÿ«ÿªÿšÿ¥ÿ€ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+ 
+ 	     ÿýÿýÿúÿ÷ÿôÿôÿñÿîÿîÿëÿèÿæÿåÿâÿßÿßÿÜÿÙÿÙÿÖÿÓÿÐÿÐÿÍÿÊÿÊÿÇÿÄÿÂÿÁÿŸÿ»ÿ»ÿžÿµÿµÿ²ÿ¯ÿ¬ÿ¬ÿ©ÿŠÿŠÿ£ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+    ÿÿÿþÿûÿùÿöÿõÿòÿðÿïÿìÿêÿçÿæÿäÿáÿàÿÝÿÛÿÚÿ×ÿÕÿÒÿÑÿÎÿÌÿËÿÈÿÆÿÃÿÂÿÀÿœÿŒÿ¹ÿ·ÿ¶ÿ³ÿ±ÿ®ÿ­ÿªÿšÿ§ÿ€ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	     ÿÿÿýÿúÿ÷ÿ÷ÿôÿñÿðÿîÿëÿèÿèÿåÿâÿâÿßÿÜÿÛÿÙÿÖÿÓÿÓÿÐÿÍÿÌÿÊÿÇÿÄÿÄÿÁÿŸÿŸÿ»ÿžÿ·ÿµÿ²ÿ¯ÿ¯ÿ¬ÿ©ÿšÿŠÿ£ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿþÿûÿùÿøÿõÿóÿòÿïÿìÿêÿéÿæÿäÿãÿàÿÞÿÝÿÚÿ×ÿÕÿÔÿÑÿÏÿÎÿËÿÈÿÆÿÅÿÂÿÀÿ¿ÿŒÿºÿ¹ÿ¶ÿ³ÿ±ÿ°ÿ­ÿ«ÿªÿ§ÿ€ÿ¢ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿýÿúÿùÿ÷ÿôÿóÿñÿîÿëÿêÿèÿåÿäÿâÿßÿÞÿÜÿÙÿÖÿÕÿÓÿÐÿÏÿÍÿÊÿÇÿÆÿÄÿÁÿÀÿŸÿ»ÿºÿžÿµÿ²ÿ±ÿ¯ÿ¬ÿ«ÿ©ÿŠÿ£ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿþÿüÿûÿøÿõÿõÿòÿïÿíÿìÿéÿæÿæÿãÿàÿàÿÝÿÚÿØÿ×ÿÔÿÑÿÑÿÎÿËÿÉÿÈÿÅÿÂÿÂÿ¿ÿŒÿŒÿ¹ÿ¶ÿŽÿ³ÿ°ÿ­ÿ­ÿªÿ§ÿ¥ÿ€ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿüÿúÿ÷ÿöÿóÿñÿîÿíÿëÿèÿçÿäÿâÿáÿÞÿÜÿÙÿØÿÖÿÓÿÒÿÏÿÍÿÊÿÉÿÇÿÄÿÃÿÀÿŸÿœÿºÿžÿµÿŽÿ²ÿ¯ÿ®ÿ«ÿ©ÿŠÿ¥ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿøÿøÿõÿòÿïÿïÿìÿéÿéÿæÿãÿâÿàÿÝÿÚÿÚÿ×ÿÔÿÔÿÑÿÎÿËÿËÿÈÿÅÿÅÿÂÿ¿ÿŸÿŒÿ¹ÿ¶ÿ¶ÿ³ÿ°ÿ°ÿ­ÿªÿ§ÿ§ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿöÿôÿñÿðÿíÿëÿêÿçÿåÿäÿáÿÞÿÜÿÛÿØÿÖÿÕÿÒÿÐÿÍÿÌÿÉÿÇÿÆÿÃÿÁÿÀÿœÿºÿžÿ·ÿŽÿ²ÿ±ÿ®ÿ¬ÿ©ÿšÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿòÿòÿïÿìÿëÿéÿæÿåÿãÿàÿÝÿÜÿÚÿ×ÿÖÿÔÿÑÿÎÿÎÿËÿÈÿÇÿÅÿÂÿÁÿ¿ÿŒÿ¹ÿžÿ¶ÿ³ÿ²ÿ°ÿ­ÿªÿªÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿðÿîÿíÿêÿçÿçÿäÿáÿßÿÞÿÛÿØÿØÿÕÿÒÿÐÿÏÿÌÿÊÿÉÿÆÿÃÿÃÿÀÿœÿ»ÿºÿ·ÿŽÿŽÿ±ÿ®ÿ¬ÿ«ÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿîÿìÿéÿèÿåÿãÿàÿßÿÝÿÚÿÙÿÖÿÔÿÑÿÐÿÎÿËÿÊÿÈÿÅÿÄÿÁÿ¿ÿŒÿ»ÿ¹ÿ¶ÿµÿ²ÿ°ÿ­ÿ¬ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿêÿêÿçÿäÿáÿáÿÞÿÛÿÛÿØÿÕÿÒÿÒÿÏÿÌÿÌÿÉÿÆÿÆÿÃÿÀÿœÿœÿºÿ·ÿ·ÿŽÿ±ÿ®ÿ®ÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿèÿæÿãÿâÿßÿÝÿÜÿÙÿ×ÿÔÿÓÿÐÿÎÿÍÿÊÿÈÿÇÿÄÿÂÿ¿ÿŸÿ»ÿ¹ÿžÿµÿ³ÿ°ÿ¯ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿäÿäÿáÿÞÿÝÿÛÿØÿÕÿÕÿÒÿÏÿÎÿÌÿÉÿÈÿÆÿÃÿÀÿÀÿœÿºÿ¹ÿ·ÿŽÿ±ÿ±ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿâÿàÿßÿÜÿÙÿ×ÿÖÿÓÿÑÿÐÿÍÿÊÿÊÿÇÿÄÿÂÿÁÿŸÿŒÿ»ÿžÿµÿ³ÿ²ÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿàÿÞÿÛÿØÿ×ÿÕÿÒÿÑÿÏÿÌÿËÿÈÿÆÿÃÿÂÿÀÿœÿŒÿºÿ·ÿŽÿ³ÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÜÿÚÿÙÿÖÿÓÿÓÿÐÿÍÿÍÿÊÿÇÿÄÿÄÿÁÿŸÿŸÿ»ÿžÿ¶ÿµÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÚÿØÿÕÿÔÿÑÿÏÿÎÿËÿÉÿÆÿÅÿÂÿÀÿ¿ÿŒÿºÿ·ÿ¶ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÖÿÖÿÓÿÐÿÏÿÍÿÊÿÇÿÇÿÄÿÁÿÀÿŸÿ»ÿžÿžÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿÔÿÒÿÑÿÎÿËÿÉÿÈÿÅÿÃÿÂÿ¿ÿŒÿºÿ¹ÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÒÿÐÿÍÿÊÿÉÿÇÿÄÿÃÿÁÿŸÿ»ÿºÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÎÿÌÿËÿÈÿÅÿÅÿÂÿ¿ÿœÿŒÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÌÿÊÿÇÿÆÿÃÿÁÿŸÿœÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÈÿÈÿÅÿÂÿ¿ÿ¿ÿŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÆÿÄÿÁÿÀÿœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÂÿÂÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	           = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþ ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿü 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿú 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿø 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿö 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿô 1 0 / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿò / . - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿð - , + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿî + * ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿì ) ( ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿê ' & % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿè % $ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæ # " !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿä !    
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâ  
+ 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿà 
+ 
+               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞ               
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜ             
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚ           
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØ         
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖ       
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔ     
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒ   
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐ 
+ 
+ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎ 
+ 
+ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊ         ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈ       ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆ     ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄ   ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ = >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ; < < =ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 7 8 : ; : ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 6 6 7 8 9 9 :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 2 4 5 4 5 7 8 7 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / 0 2 1 2 3 3 4 5 7 6 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - , . / 0 / 1 2 1 3 4 5 4 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) * , + , - / . / 1 0 1 2 4 3 4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ' ( ( ) * ) + , - - . / . 0 1 2 2 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % $ & ' & ' ) ( ) + , + , . - . 0 1 0 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ! " $ # $ % % & ' ' ( ) * * + , , - . 0 / 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+   ! " ! # $ # % & % & ( ) ( * + * , - . - /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
+ 
+ 
+ 
+  !   ! # " # $ $ % & ( ' ( * ) * + - , -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
+  
+ 
+     !   " # " $ % & & ' ( ' ) * + + ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ          
+ 
+ 
+ 
+      " ! " $ % $ % ' & ' ) * ) *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ             
+ 
+ 
+ 
+ 
+      ! " # # $ % % & ' ( ( )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                 
+ 
+ 
+ 
+  
+  ! " ! # $ # $ & ' & (ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+                   
+  
+ 
+ 
+ 
+  !   ! " " # $ & % &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
+ 
+ 
+ 
+  
+                   
+  
+ 
+  
+   !   " # $ $ %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
+ 
+ 
+ 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+      " # " #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      	 	 
+ 
+ 
+ 
+ 
+ 
+                    
+ 
+ 
+ 
+ 
+    ! ! "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ          	 
+ 	 
+ 
+ 
+ 
+                     
+ 
+ 
+ 
+     !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ               	 
+ 
+ 
+ 
+  
+                     
+ 
+  
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿüÿþÿÿ  ÿÿ            	  
+ 
+ 
+ 
+ 
+  
+                   
+ 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿúÿüÿûÿüÿýÿÿÿþÿÿ               	 
+ 
+ 
+ 
+ 
+ 
+                   
+  
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿøÿøÿùÿúÿùÿûÿüÿýÿýÿþÿÿÿþ              	 	 
+ 
+ 
+ 
+ 
+                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿôÿöÿ÷ÿöÿ÷ÿùÿøÿùÿûÿüÿûÿüÿþÿýÿþ                 
+ 	 
+ 
+ 
+ 
+                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿòÿòÿóÿôÿõÿõÿöÿ÷ÿ÷ÿøÿùÿúÿúÿûÿüÿüÿýÿþ  ÿÿ               	 
+ 
+ 
+ 
+ 
+ 
+               ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿîÿðÿñÿðÿñÿóÿôÿóÿõÿöÿõÿöÿøÿùÿøÿúÿûÿúÿüÿýÿþÿýÿÿ  ÿÿ            	 
+ 	 
+ 
+ 
+ 
+  
+            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿìÿîÿíÿîÿïÿïÿðÿñÿóÿòÿóÿôÿôÿõÿöÿøÿ÷ÿøÿúÿùÿúÿûÿýÿüÿýÿÿÿþÿÿ              	  	 
+ 
+ 
+ 
+ 
+ 
+           ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÿêÿêÿëÿìÿëÿíÿîÿíÿïÿðÿñÿðÿòÿóÿòÿôÿõÿöÿöÿ÷ÿøÿ÷ÿùÿúÿûÿûÿüÿýÿüÿþÿÿÿþ              	  
+ 
+ 
+ 
+ 
+  
+        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿæÿèÿéÿèÿéÿëÿêÿëÿíÿìÿíÿîÿðÿïÿðÿòÿñÿòÿôÿõÿôÿõÿ÷ÿöÿ÷ÿùÿúÿùÿúÿüÿûÿüÿþÿýÿþ                 
+ 	 
+ 
+ 
+ 
+ 
+       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿäÿäÿåÿæÿçÿçÿèÿéÿéÿêÿëÿêÿìÿíÿîÿîÿïÿðÿðÿñÿòÿóÿóÿôÿõÿõÿöÿ÷ÿøÿøÿùÿúÿúÿûÿüÿüÿýÿþÿÿÿÿ               	 
+ 
+ 
+ 
+ 
+ 
+     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿàÿâÿãÿâÿãÿåÿæÿåÿçÿèÿçÿèÿêÿéÿêÿìÿíÿìÿîÿïÿîÿïÿñÿòÿñÿóÿôÿóÿôÿöÿ÷ÿöÿøÿùÿøÿúÿûÿúÿûÿýÿþÿýÿÿ  ÿÿ             	 
+ 	 
+ 
+ 
+ 
+    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÞÿàÿßÿàÿáÿáÿâÿãÿåÿäÿåÿæÿæÿçÿèÿèÿéÿêÿìÿëÿìÿíÿíÿîÿïÿñÿðÿñÿòÿòÿóÿôÿöÿõÿöÿøÿ÷ÿøÿùÿùÿúÿûÿýÿüÿýÿþÿþÿÿ             	  	 
+ 
+ 
+ 
+  
+ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÚÿÜÿÝÿÞÿÝÿßÿàÿßÿáÿâÿãÿâÿäÿåÿäÿæÿçÿæÿèÿéÿêÿéÿëÿìÿëÿíÿîÿïÿîÿðÿñÿðÿòÿóÿôÿôÿõÿöÿõÿ÷ÿøÿ÷ÿùÿúÿûÿúÿüÿýÿüÿþÿÿ  ÿÿ            	  
+ 
+ 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿØÿÚÿÙÿÚÿÛÿÝÿÜÿÝÿßÿÞÿßÿàÿâÿáÿâÿäÿãÿäÿæÿåÿæÿçÿéÿèÿéÿëÿêÿëÿìÿîÿíÿîÿðÿïÿðÿòÿóÿòÿóÿõÿôÿõÿ÷ÿöÿ÷ÿøÿúÿùÿúÿüÿûÿüÿýÿÿÿþÿÿ               	 
+ 
+ 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÖÿÖÿ×ÿØÿ×ÿÙÿÚÿÛÿÛÿÜÿÝÿÜÿÞÿßÿàÿàÿáÿâÿâÿãÿäÿãÿåÿæÿçÿçÿèÿéÿèÿêÿëÿìÿìÿíÿîÿîÿïÿðÿñÿñÿòÿóÿóÿôÿõÿôÿöÿ÷ÿøÿøÿùÿúÿùÿûÿüÿýÿýÿþÿÿÿÿ               	 	 
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÒÿÔÿÕÿÔÿÕÿ×ÿÖÿ×ÿÙÿÚÿÙÿÚÿÜÿÛÿÜÿÞÿßÿÞÿàÿáÿàÿáÿãÿâÿãÿåÿæÿåÿæÿèÿçÿèÿêÿëÿêÿìÿíÿìÿíÿïÿðÿïÿñÿòÿñÿòÿôÿóÿôÿöÿ÷ÿöÿ÷ÿùÿøÿùÿûÿüÿûÿýÿþÿýÿþ  ÿÿ             	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÐÿÒÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿØÿØÿÙÿÚÿÚÿÛÿÜÿÞÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿäÿäÿåÿæÿæÿçÿèÿêÿéÿêÿëÿëÿìÿíÿïÿîÿïÿðÿðÿñÿòÿòÿóÿôÿõÿõÿöÿ÷ÿ÷ÿøÿùÿûÿúÿûÿüÿüÿýÿþÿþÿÿ            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÌÿÎÿÏÿÐÿÏÿÑÿÒÿÑÿÓÿÔÿÓÿÔÿÖÿ×ÿÖÿØÿÙÿØÿÚÿÛÿÜÿÛÿÝÿÞÿÝÿßÿàÿßÿàÿâÿãÿâÿäÿåÿäÿæÿçÿèÿçÿéÿêÿéÿëÿìÿíÿìÿîÿïÿîÿðÿñÿðÿñÿóÿôÿóÿõÿöÿõÿ÷ÿøÿùÿøÿúÿûÿúÿüÿýÿüÿýÿÿ  ÿÿ        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÊÿÌÿËÿÌÿÍÿÏÿÎÿÏÿÑÿÐÿÑÿÒÿÒÿÓÿÔÿÖÿÕÿÖÿØÿ×ÿØÿÙÿÛÿÚÿÛÿÝÿÜÿÝÿÞÿÞÿßÿàÿâÿáÿâÿäÿãÿäÿåÿçÿæÿçÿéÿèÿéÿêÿìÿëÿìÿîÿíÿîÿïÿïÿðÿñÿóÿòÿóÿõÿôÿõÿöÿøÿ÷ÿøÿúÿùÿúÿûÿûÿüÿýÿÿÿþÿÿ        ÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÈÿÈÿÉÿÊÿÉÿËÿÌÿÍÿÍÿÎÿÏÿÎÿÐÿÑÿÐÿÒÿÓÿÔÿÔÿÕÿÖÿÕÿ×ÿØÿÙÿÙÿÚÿÛÿÚÿÜÿÝÿÜÿÞÿßÿàÿàÿáÿâÿáÿãÿäÿåÿåÿæÿçÿæÿèÿéÿêÿêÿëÿìÿëÿíÿîÿíÿïÿðÿñÿñÿòÿóÿòÿôÿõÿöÿöÿ÷ÿøÿ÷ÿùÿúÿùÿûÿüÿýÿýÿþÿÿÿþ      ÿÿÿÿÿÿÿÿÿÃÿÄÿÆÿÇÿÆÿÇÿÉÿÈÿÉÿËÿÌÿËÿÌÿÎÿÍÿÎÿÐÿÏÿÐÿÒÿÓÿÒÿÓÿÕÿÔÿÕÿ×ÿØÿ×ÿØÿÚÿÙÿÚÿÜÿÛÿÜÿÞÿßÿÞÿßÿáÿàÿáÿãÿäÿãÿäÿæÿåÿæÿèÿéÿèÿéÿëÿêÿëÿíÿìÿíÿïÿðÿïÿðÿòÿñÿòÿôÿõÿôÿõÿ÷ÿöÿ÷ÿùÿøÿùÿûÿüÿûÿüÿþÿýÿþ      ÿÿÿÿÿÁÿÂÿÂÿÃÿÄÿÅÿÅÿÆÿÇÿÇÿÈÿÉÿÊÿÊÿËÿÌÿÌÿÍÿÎÿÎÿÏÿÐÿÑÿÑÿÒÿÓÿÓÿÔÿÕÿÖÿÖÿ×ÿØÿØÿÙÿÚÿÚÿÛÿÜÿÝÿÝÿÞÿßÿßÿàÿáÿâÿâÿãÿäÿäÿåÿæÿçÿçÿèÿéÿéÿêÿëÿëÿìÿíÿîÿîÿïÿðÿðÿñÿòÿóÿóÿôÿõÿõÿöÿ÷ÿ÷ÿøÿùÿúÿúÿûÿüÿüÿýÿþÿÿÿÿ  ÿÿÿÿÿÀÿÁÿÀÿÁÿÃÿÄÿÃÿÅÿÆÿÅÿÆÿÈÿÉÿÈÿÊÿËÿÊÿÌÿÍÿÌÿÍÿÏÿÐÿÏÿÑÿÒÿÑÿÒÿÔÿÕÿÔÿÖÿ×ÿÖÿØÿÙÿØÿÙÿÛÿÜÿÛÿÝÿÞÿÝÿÞÿàÿáÿàÿâÿãÿâÿãÿåÿæÿåÿçÿèÿçÿéÿêÿéÿêÿìÿíÿìÿîÿïÿîÿïÿñÿòÿñÿóÿôÿóÿõÿöÿõÿöÿøÿùÿøÿúÿûÿúÿûÿýÿþÿÿÿÿÿÿÿÿÿŸÿ¿ÿ¿ÿÀÿÁÿÃÿÂÿÃÿÄÿÄÿÅÿÆÿÈÿÇÿÈÿÊÿÉÿÊÿËÿËÿÌÿÍÿÏÿÎÿÏÿÐÿÐÿÑÿÒÿÔÿÓÿÔÿÖÿÕÿÖÿ×ÿ×ÿØÿÙÿÛÿÚÿÛÿÜÿÜÿÝÿÞÿàÿßÿàÿáÿáÿâÿãÿåÿäÿåÿçÿæÿçÿèÿèÿéÿêÿìÿëÿìÿíÿíÿîÿïÿñÿðÿñÿóÿòÿóÿôÿôÿõÿöÿøÿ÷ÿøÿùÿùÿúÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŸÿœÿ¿ÿÀÿÁÿÀÿÂÿÃÿÂÿÄÿÅÿÆÿÆÿÇÿÈÿÇÿÉÿÊÿÉÿËÿÌÿÍÿÌÿÎÿÏÿÎÿÐÿÑÿÒÿÒÿÓÿÔÿÓÿÕÿÖÿÕÿ×ÿØÿÙÿØÿÚÿÛÿÚÿÜÿÝÿÞÿÝÿßÿàÿßÿáÿâÿãÿãÿäÿåÿäÿæÿçÿæÿèÿéÿêÿéÿëÿìÿëÿíÿîÿïÿïÿðÿñÿðÿòÿóÿòÿôÿõÿöÿõÿ÷ÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿœÿŒÿœÿŸÿÀÿ¿ÿÀÿÂÿÁÿÂÿÄÿÅÿÄÿÅÿÇÿÆÿÇÿÉÿÈÿÉÿÊÿÌÿËÿÌÿÎÿÍÿÎÿÐÿÑÿÐÿÑÿÓÿÒÿÓÿÕÿÔÿÕÿÖÿØÿ×ÿØÿÚÿÙÿÚÿÛÿÝÿÜÿÝÿßÿÞÿßÿáÿâÿáÿâÿäÿãÿäÿæÿåÿæÿçÿéÿèÿéÿëÿêÿëÿíÿîÿíÿîÿðÿïÿðÿòÿñÿòÿóÿõÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ»ÿºÿŒÿœÿŸÿŸÿ¿ÿÀÿÀÿÁÿÂÿÃÿÃÿÄÿÅÿÅÿÆÿÇÿÆÿÈÿÉÿÊÿÊÿËÿÌÿÌÿÍÿÎÿÏÿÏÿÐÿÑÿÑÿÒÿÓÿÒÿÔÿÕÿÖÿÖÿ×ÿØÿ×ÿÙÿÚÿÛÿÛÿÜÿÝÿÝÿÞÿßÿàÿàÿáÿâÿâÿãÿäÿãÿåÿæÿçÿçÿèÿéÿéÿêÿëÿìÿìÿíÿîÿîÿïÿðÿïÿñÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿºÿ¹ÿºÿŒÿœÿŒÿŸÿ¿ÿŸÿ¿ÿÁÿÂÿÁÿÃÿÄÿÃÿÄÿÆÿÅÿÆÿÈÿÉÿÈÿÊÿËÿÊÿËÿÍÿÎÿÍÿÏÿÐÿÏÿÐÿÒÿÑÿÒÿÔÿÕÿÔÿÕÿ×ÿÖÿ×ÿÙÿÚÿÙÿÛÿÜÿÛÿÜÿÞÿßÿÞÿàÿáÿàÿáÿãÿâÿãÿåÿæÿåÿçÿèÿçÿèÿêÿëÿêÿìÿíÿìÿíÿïÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÿžÿžÿ¹ÿºÿŒÿ»ÿŒÿœÿœÿŸÿ¿ÿÁÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÈÿÇÿÈÿÉÿÉÿÊÿËÿÍÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿÙÿØÿÙÿÚÿÚÿÛÿÜÿÞÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿåÿäÿåÿæÿæÿçÿèÿêÿéÿêÿëÿëÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ÿ·ÿ¶ÿžÿ¹ÿºÿ¹ÿ»ÿŒÿ»ÿœÿŸÿ¿ÿŸÿÀÿÁÿÀÿÂÿÃÿÂÿÄÿÅÿÆÿÅÿÇÿÈÿÇÿÉÿÊÿËÿÊÿÌÿÍÿÌÿÎÿÏÿÎÿÏÿÑÿÒÿÑÿÓÿÔÿÓÿÕÿÖÿ×ÿÖÿØÿÙÿØÿÚÿÛÿÜÿÛÿÝÿÞÿÝÿßÿàÿßÿáÿâÿãÿâÿäÿåÿäÿæÿçÿèÿçÿéÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ¶ÿµÿ¶ÿ·ÿ¹ÿžÿ¹ÿ»ÿºÿ»ÿŒÿŸÿœÿŸÿÀÿ¿ÿÀÿÂÿÁÿÂÿÃÿÅÿÄÿÅÿÇÿÆÿÇÿÈÿÊÿÉÿÊÿÌÿËÿÌÿÍÿÍÿÎÿÏÿÑÿÐÿÑÿÓÿÒÿÓÿÔÿÖÿÕÿÖÿØÿ×ÿØÿÙÿÛÿÚÿÛÿÝÿÜÿÝÿßÿÞÿßÿàÿâÿáÿâÿäÿãÿäÿåÿçÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿŽÿ³ÿµÿ¶ÿ·ÿ·ÿžÿ¹ÿžÿºÿ»ÿŒÿŒÿœÿŸÿŸÿ¿ÿÀÿ¿ÿÁÿÂÿÃÿÃÿÄÿÅÿÄÿÆÿÇÿÈÿÈÿÉÿÊÿÉÿËÿÌÿËÿÍÿÎÿÏÿÏÿÐÿÑÿÐÿÒÿÓÿÔÿÔÿÕÿÖÿÕÿ×ÿØÿÙÿÙÿÚÿÛÿÛÿÜÿÝÿÜÿÞÿßÿàÿàÿáÿâÿáÿãÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿ³ÿ²ÿ³ÿµÿ¶ÿµÿ¶ÿžÿ·ÿžÿºÿ»ÿºÿŒÿœÿŒÿœÿ¿ÿŸÿ¿ÿÁÿÂÿÁÿÂÿÄÿÃÿÄÿÆÿÇÿÆÿÇÿÉÿÈÿÉÿËÿÊÿËÿÍÿÎÿÍÿÎÿÐÿÏÿÐÿÒÿÓÿÒÿÓÿÕÿÔÿÕÿ×ÿØÿ×ÿÙÿÚÿÙÿÚÿÜÿÛÿÜÿÞÿßÿÞÿßÿáÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ±ÿ±ÿ²ÿ³ÿŽÿŽÿµÿ¶ÿ¶ÿ·ÿžÿºÿ¹ÿºÿ»ÿ»ÿŒÿœÿœÿŸÿ¿ÿÀÿÀÿÁÿÂÿÂÿÃÿÄÿÅÿÅÿÆÿÇÿÇÿÈÿÉÿÉÿÊÿËÿÌÿÌÿÍÿÎÿÎÿÏÿÐÿÑÿÑÿÒÿÓÿÓÿÔÿÕÿ×ÿÖÿ×ÿØÿØÿÙÿÚÿÚÿÛÿÜÿÝÿÝÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ°ÿ¯ÿ°ÿ²ÿ³ÿ²ÿŽÿµÿŽÿ¶ÿ·ÿžÿ·ÿ¹ÿºÿ¹ÿ»ÿŒÿ»ÿŒÿŸÿ¿ÿŸÿÀÿÁÿÀÿÁÿÃÿÄÿÃÿÅÿÆÿÅÿÇÿÈÿÇÿÈÿÊÿËÿÊÿÌÿÍÿÌÿÍÿÏÿÐÿÏÿÑÿÒÿÑÿÓÿÔÿÕÿÔÿÖÿ×ÿÖÿØÿÙÿØÿÙÿÛÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿ®ÿ®ÿ¯ÿ°ÿ²ÿ±ÿ²ÿŽÿ³ÿŽÿµÿ·ÿ¶ÿ·ÿ¹ÿžÿ¹ÿºÿºÿ»ÿŒÿŸÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÃÿÂÿÃÿÅÿÄÿÅÿÆÿÆÿÇÿÈÿÊÿÉÿÊÿËÿËÿÌÿÍÿÏÿÎÿÏÿÑÿÐÿÑÿÒÿÔÿÓÿÔÿÖÿÕÿÖÿ×ÿ×ÿØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ­ÿ¬ÿ®ÿ¯ÿ°ÿ°ÿ±ÿ²ÿ±ÿ³ÿŽÿµÿµÿ¶ÿ·ÿ¶ÿžÿ¹ÿžÿºÿ»ÿŒÿ»ÿœÿŸÿœÿ¿ÿÀÿÁÿÁÿÂÿÃÿÂÿÄÿÅÿÄÿÆÿÇÿÈÿÇÿÉÿÊÿÉÿËÿÌÿÍÿÍÿÎÿÏÿÎÿÐÿÑÿÒÿÒÿÓÿÔÿÓÿÕÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ¬ÿ«ÿ¬ÿ®ÿ¯ÿ®ÿ¯ÿ±ÿ°ÿ±ÿ³ÿŽÿ³ÿŽÿ¶ÿµÿ¶ÿžÿ·ÿžÿ¹ÿ»ÿºÿ»ÿœÿŒÿœÿ¿ÿÀÿ¿ÿÀÿÂÿÁÿÂÿÄÿÃÿÄÿÅÿÇÿÆÿÇÿÉÿÈÿÉÿËÿÌÿËÿÌÿÎÿÍÿÎÿÐÿÑÿÐÿÑÿÓÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿªÿªÿ«ÿ¬ÿ­ÿ­ÿ®ÿ¯ÿ¯ÿ°ÿ±ÿ²ÿ²ÿ³ÿŽÿŽÿµÿ¶ÿµÿ·ÿžÿ¹ÿ¹ÿºÿ»ÿ»ÿŒÿœÿŸÿŸÿ¿ÿÀÿÀÿÁÿÂÿÁÿÃÿÄÿÅÿÅÿÆÿÇÿÇÿÈÿÉÿÊÿÊÿËÿÌÿÌÿÍÿÎÿÏÿÏÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšÿ©ÿšÿ©ÿ«ÿ¬ÿ«ÿ­ÿ®ÿ­ÿ®ÿ°ÿ±ÿ°ÿ²ÿ³ÿ²ÿ³ÿµÿŽÿµÿ·ÿžÿ·ÿ¹ÿºÿ¹ÿºÿŒÿœÿŒÿŸÿ¿ÿŸÿ¿ÿÁÿÀÿÁÿÃÿÄÿÃÿÅÿÆÿÅÿÆÿÈÿÉÿÈÿÊÿËÿÊÿËÿÍÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ§ÿ§ÿšÿ©ÿ«ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ°ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ·ÿ¶ÿ·ÿžÿžÿ¹ÿºÿŒÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÃÿÂÿÃÿÄÿÄÿÅÿÆÿÈÿÇÿÈÿÉÿÉÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿŠÿ¥ÿ§ÿšÿ©ÿšÿªÿ«ÿªÿ¬ÿ­ÿ®ÿ­ÿ¯ÿ°ÿ¯ÿ±ÿ²ÿ±ÿ³ÿŽÿµÿŽÿ¶ÿ·ÿ¶ÿžÿ¹ÿºÿ¹ÿ»ÿŒÿ»ÿœÿŸÿœÿ¿ÿÀÿÁÿÀÿÂÿÃÿÂÿÄÿÅÿÆÿÅÿÇÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿ¥ÿ€ÿ¥ÿŠÿšÿ§ÿšÿªÿ©ÿªÿ«ÿ­ÿ¬ÿ­ÿ¯ÿ®ÿ¯ÿ±ÿ°ÿ±ÿ²ÿŽÿ³ÿŽÿ¶ÿµÿ¶ÿ·ÿ¹ÿžÿ¹ÿ»ÿºÿ»ÿœÿŒÿœÿŸÿÀÿ¿ÿÀÿÂÿÁÿÂÿÃÿÅÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿ¢ÿ€ÿ¥ÿŠÿŠÿ§ÿšÿ§ÿ©ÿªÿ«ÿ«ÿ¬ÿ­ÿ­ÿ®ÿ¯ÿ®ÿ°ÿ±ÿ²ÿ²ÿ³ÿŽÿ³ÿµÿ¶ÿ·ÿ·ÿžÿ¹ÿ¹ÿºÿ»ÿºÿŒÿœÿŸÿŸÿ¿ÿÀÿ¿ÿÁÿÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¡ÿ¢ÿ€ÿ¥ÿ€ÿ¥ÿ§ÿŠÿ§ÿ©ÿªÿ©ÿ«ÿ¬ÿ«ÿ¬ÿ®ÿ­ÿ®ÿ°ÿ±ÿ°ÿ±ÿ³ÿ²ÿ³ÿµÿ¶ÿµÿ·ÿžÿ·ÿžÿºÿ¹ÿºÿŒÿœÿŒÿœÿ¿ÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ£ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ©ÿšÿ©ÿªÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ¯ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿµÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿ»ÿ»ÿŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¢ÿ¡ÿ£ÿ€ÿ£ÿ¥ÿŠÿ§ÿŠÿšÿ©ÿšÿªÿ«ÿªÿ«ÿ­ÿ®ÿ­ÿ¯ÿ°ÿ¯ÿ±ÿ²ÿ³ÿ²ÿŽÿµÿŽÿ¶ÿ·ÿ¶ÿ·ÿ¹ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ ÿ¡ÿ£ÿ¢ÿ£ÿ€ÿŠÿ¥ÿŠÿšÿ§ÿšÿ©ÿ©ÿªÿ«ÿ­ÿ¬ÿ­ÿ¯ÿ®ÿ¯ÿ°ÿ²ÿ±ÿ²ÿŽÿ³ÿŽÿµÿµÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ ÿ¢ÿ£ÿ€ÿ€ÿ¥ÿŠÿ¥ÿ§ÿšÿ§ÿ©ÿªÿ«ÿ«ÿ¬ÿ­ÿ¬ÿ®ÿ¯ÿ°ÿ°ÿ±ÿ²ÿ±ÿ³ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿ¢ÿ£ÿ¢ÿ£ÿ¥ÿ€ÿ¥ÿ§ÿŠÿ§ÿ©ÿªÿ©ÿªÿ¬ÿ«ÿ¬ÿ®ÿ¯ÿ®ÿ¯ÿ±ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¡ÿ¢ÿ£ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿšÿšÿ©ÿªÿªÿ«ÿ¬ÿ­ÿ­ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ¡ÿ¢ÿ¡ÿ£ÿ€ÿ£ÿ€ÿŠÿ§ÿŠÿšÿ©ÿšÿ©ÿ«ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿŠÿ¥ÿŠÿ§ÿ§ÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ ÿ¢ÿ£ÿ€ÿ£ÿ¥ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿ¡ÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
+ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; = ?ÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : < >ÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ; =ÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 : <ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9 ;ÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8 :ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7 9ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6 8ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5 7ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4 6ÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3 5ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2 4ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1 3ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0 2ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - / 1ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , . 0ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + - /ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * , .ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) + -ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( * ,ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' ) +ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & ( *ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % ' )ÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ & (ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # % 'ÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ &ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! # %ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   " $ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  ! #ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+   "ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+  !ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+  ÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ ÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ 
+ÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+        
+ÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+        
+ÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+       ÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+       ÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+      ÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+      ÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+     ÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+     ÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+    ÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+    ÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+   ÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+   ÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+  ÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+  ÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ ÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ ÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ 
+ÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ 
+ÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
+ÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
+ÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ    ÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ   ÿÿ
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
Index: /trunk/psLib/test/fits/verified/tst_psFits.stderr
===================================================================
--- /trunk/psLib/test/fits/verified/tst_psFits.stderr	(revision 4547)
+++ /trunk/psLib/test/fits/verified/tst_psFits.stderr	(revision 4547)
@@ -0,0 +1,216 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsAlloc}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|tst_psFitsAlloc
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psFitsAlloc (FILE:LINENO)
+    Specified filename can not be NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsAlloc} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsMoveExtName}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtName (FILE:LINENO)
+    Could not find HDU 'bogus' in file multi.fits.
+    CFITSIO Error: illegal HDU number
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtName (FILE:LINENO)
+    The input psFits object can not NULL.
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtName (FILE:LINENO)
+    Specified extension name can not be NULL.
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtName
+    Following should generate an error for NULL fits file
+<DATE><TIME>|<HOST>|E|psFitsGetExtName (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsMoveExtName} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsMoveExtNum}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsGetSize (FILE:LINENO)
+    The input psFits object can not NULL.
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
+    Could not move to specified HDU #-1 in file multi.fits.
+    CFITSIO Error: illegal HDU number
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
+    Could not move -1 HDUs from current position in file multi.fits.
+    CFITSIO Error: illegal HDU number
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
+    Could not move to specified HDU #8 in file multi.fits.
+    CFITSIO Error: tried to move past end of file
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
+    Could not move 1 HDUs from current position in file multi.fits.
+    CFITSIO Error: tried to move past end of file
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsMoveExtNum (FILE:LINENO)
+    The input psFits object can not NULL.
+<DATE><TIME>|<HOST>|I|tst_psFitsMoveExtNum
+    Following should generate an error for NULL fits file
+<DATE><TIME>|<HOST>|E|psFitsGetExtNum (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsMoveExtNum} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsReadHeader}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|tst_psFitsReadHeader
+    following should be an error (input psFits = NULL)
+<DATE><TIME>|<HOST>|E|psFitsReadHeader (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsReadHeader} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsReadHeaderSet}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psFitsReadHeaderSet (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsReadHeaderSet} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsReadTable}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psFitsReadTable (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsReadTable} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsReadTableColumnNum}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumnNum (FILE:LINENO)
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsReadTableColumnNum (FILE:LINENO)
+    The input psFits object can not NULL.
+<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumnNum (FILE:LINENO)
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsReadTableColumnNum (FILE:LINENO)
+    Specified column, BOGUS, was not found.
+    CFITSIO Error: named column not found
+
+---> TESTPOINT PASSED (psImage{psFitsReadTableColumnNum} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsReadTableColumn}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumn (FILE:LINENO)
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsReadTableColumn (FILE:LINENO)
+    The input psFits object can not NULL.
+<DATE><TIME>|<HOST>|W|tst_psFitsReadTableColumn (FILE:LINENO)
+    tst_psFitsReadTableColumn
+<DATE><TIME>|<HOST>|E|psFitsReadTableColumn (FILE:LINENO)
+    Specified column, BOGUS, was not found.
+    CFITSIO Error: named column not found
+
+---> TESTPOINT PASSED (psImage{psFitsReadTableColumn} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsUpdateTable}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
+    Following should be a warning.
+<DATE><TIME>|<HOST>|W|psFitsUpdateTable (FILE:LINENO)
+    No column with the name 'BOGUS' exists in the table.
+<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsUpdateTable (FILE:LINENO)
+    The input psFits object can not NULL.
+<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsUpdateTable (FILE:LINENO)
+    The input psImage was NULL.  Need a non-NULL psImage for operation to be performed.
+<DATE><TIME>|<HOST>|W|tst_psFitsUpdateTable (FILE:LINENO)
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psFitsUpdateTable (FILE:LINENO)
+    Could not write data to file,'table.fits'.
+    CFITSIO Error: bad first row number
+
+---> TESTPOINT PASSED (psImage{psFitsUpdateTable} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsReadImage}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRead
+    Following should generate error message for NULL psFits
+<DATE><TIME>|<HOST>|E|psFitsReadImage (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsReadImage} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsWriteImage}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageWrite
+    Following should generate an error message because input image is null.
+<DATE><TIME>|<HOST>|E|psFitsWriteImage (FILE:LINENO)
+    The input psImage was NULL.  Need a non-NULL psImage for operation to be performed.
+
+---> TESTPOINT PASSED (psImage{psFitsWriteImage} | tst_psFits.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFits.c                                               *
+*            TestPoint: psImage{psFitsWriteHeader}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psFitsWriteHeader (FILE:LINENO)
+    The input psMetadata was NULL.  Need a non-NULL psMetadata for operation to be performed.
+<DATE><TIME>|<HOST>|E|psFitsWriteHeader (FILE:LINENO)
+    The input psFits object can not NULL.
+
+---> TESTPOINT PASSED (psImage{psFitsWriteHeader} | tst_psFits.c)
+
Index: unk/psLib/test/image/tst_psImage.c
===================================================================
--- /trunk/psLib/test/image/tst_psImage.c	(revision 4546)
+++ 	(revision )
@@ -1,276 +1,0 @@
-/** @file  tst_psImage.c
- *
- *  @brief Contains the tests for psImage.[ch]
- *
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-05-19 05:03:48 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include <math.h>
-#include <float.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-#include "psType.h"
-
-static psS32 testImageAlloc(void);
-static psS32 testRegion(void);
-
-testDescription tests[] = {
-                              {testImageAlloc,546,"psImageAlloc",0,false},
-                              {testImageAlloc,548,"psImageFree",0,true},
-                              {testRegion,790,"psRegionSet",0,false},
-                              {testRegion,791,"psRegionFromString",0,true},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
-}
-
-psS32 testImageAlloc(void)
-{
-    psImage* image = NULL;
-    psU32 sizes = 6;
-    psU32 numCols[] = {
-                          0,1,1,100,100,150
-                      };
-    psU32 numRows[] = {
-                          0,1,100,1,150,100
-                      };
-    psU32 types = 12;
-    psElemType type[] = { PS_TYPE_S8, PS_TYPE_S16, PS_TYPE_S32, PS_TYPE_S64,
-                          PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_U32, PS_TYPE_U64,
-                          PS_TYPE_F32, PS_TYPE_F64, PS_TYPE_C32, PS_TYPE_C64};
-
-    psLogMsg(__func__,PS_LOG_INFO,"#546 - psImageAlloc shall allocate memory for a psImage structure");
-
-    for (psU32 t=0;t<types;t++) {
-        psLogMsg(__func__,PS_LOG_INFO,"Testing psImage with type %xh",type[t]);
-
-        for (psU32 i=0;i<sizes;i++) {
-
-            if (numRows[i] == 0 || numCols[i] == 0) {
-                psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-            }
-
-            image = psImageAlloc(numCols[i],numRows[i],type[t]);
-
-            if (image == NULL) {
-                if (numRows[i] == 0 || numCols[i] == 0) {
-                    continue;
-                }
-                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned NULL for type %x, size %dx%d.",
-                        type[t], numCols[i], numRows[i]);
-                psFree(image);
-                return 1;
-            }
-
-            if (image->type.dimen != PS_DIMEN_IMAGE || image->type.type != type[t]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageAlloc allocated wrong dimen/type (%d/%d), should be "
-                        "PS_IMAGE_DIMEN/%d", image->type.dimen, image->type.type, type[t]);
-                psFree(image);
-                return 2;
-            }
-
-            if (image->numCols != numCols[i] || image->numRows != numRows[i]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageAlloc allocated wrong size %dx%d, should be %dx%d (type = %d)",
-                        image->numCols, image->numRows, numCols[i], numRows[i],type[t]);
-                psFree(image);
-                return 3;
-            }
-
-            if (image->col0 != 0 || image->row0 != 0) {
-                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned row0/col0 of %d/%d.  Should be 0/0.",
-                        image->row0, image->row0);
-                psFree(image);
-                return 4;
-            }
-
-            if (image->parent != NULL) {
-                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned non-NULL parent");
-                psFree(image);
-                return 5;
-            }
-
-            if (image->children != NULL) {
-                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned non-NULL children array");
-                psFree(image);
-                return 7;
-            }
-
-            switch (type[t]) {
-            case PS_TYPE_U16: {
-                    psU32 rows = numRows[i];
-                    psU32 cols = numCols[i];
-
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            image->data.U16[r][c] = 2*c+r;
-                        }
-                    }
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            if (image->data.U16[r][c] != 2*c+r) {
-                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in uint16 image at (%d,%d)",c,r);
-                                psFree(image);
-                                return 8;
-                            }
-                        }
-                    }
-                }
-                break;
-            case PS_TYPE_F32: {
-                    psU32 rows = numRows[i];
-                    psU32 cols = numCols[i];
-
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            image->data.F32[r][c] = 2.0f*c+r;
-                        }
-                    }
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            if (fabsf(image->data.F32[r][c] - (2.0f*c+r)) > FLT_EPSILON) {
-                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in float image at (%d,%d)",c,r);
-                                psFree(image);
-                                return 8;
-                            }
-                        }
-                    }
-                }
-                break;
-            case PS_TYPE_F64: {
-                    psU32 rows = numRows[i];
-                    psU32 cols = numCols[i];
-
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            image->data.F64[r][c] = 2.0f*c+r;
-                        }
-                    }
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            if (fabs(image->data.F64[r][c] - (2.0f*c+r)) > DBL_EPSILON) {
-                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in double image at (%d,%d)",c,r);
-                                psFree(image);
-                                return 8;
-                            }
-                        }
-                    }
-                }
-                break;
-            case PS_TYPE_C32: {
-                    psU32 rows = numRows[i];
-                    psU32 cols = numCols[i];
-
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            image->data.C32[r][c] = r + I * c;
-                        }
-                    }
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            if (fabsf(crealf(image->data.C32[r][c]) - r) > FLT_EPSILON ||
-                                    fabsf(cimagf(image->data.C32[r][c]) - c) > FLT_EPSILON ) {
-                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in complex image at (%d,%d)",c,r);
-                                psFree(image);
-                                return 8;
-                            }
-                        }
-                    }
-                }
-                break;
-            default: {
-                    // ignore type and just use as byte bucket.
-                    psU32 rows = numRows[i];
-                    psU32 cols = numCols[i]*PSELEMTYPE_SIZEOF(type[t]);
-
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            image->data.U8[r][c] = (uint8_t)(r + c);
-                        }
-                    }
-                    for (psS32 r=0;r<rows;r++) {
-                        for (psS32 c=0;c<cols;c++) {
-                            if (image->data.U8[r][c] != (uint8_t)(r + c)) {
-                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in image (type=%d) at (%d,%d)",
-                                        type[t],c,r);
-                                psFree(image);
-                                return 8;
-                            }
-                        }
-                    }
-                }
-            }
-            psFree(image);
-        }
-    }
-
-    // #548: Verify no memory leaks or corruption are detected after a valid psImage structure with multiple
-    // children is freed.
-    image = psImageAlloc(100,100,PS_TYPE_F32);
-    psImageSubset(image,(psRegion) {
-                      50,0,70,20
-                  }
-                 );
-    psImageSubset(image,(psRegion) {
-                      70,20,90,40
-                  }
-                 );
-
-    psFree(image);
-
-    return 0;
-}
-
-static psS32 testRegion(void)
-{
-    int testNum = 0;
-
-
-    // Testpoint #790
-
-    psRegion region = psRegionSet(1,2,3,4);
-
-    testNum++;
-    if (region.x0 != 1 || region.x1 != 2 || region.y0 != 3 || region.y1 != 4) {
-        psError(PS_ERR_UNKNOWN, false,
-                "The region attributes are not set properly (%s)",
-                psRegionToString(region));
-        return testNum;
-    }
-
-    // Testpoint #791
-
-    region = psRegionFromString("[1:2,3:4]");
-
-    testNum++;
-    if (region.x0 != 1 || region.x1 != 2 || region.y0 != 3 || region.y1 != 4) {
-        psError(PS_ERR_UNKNOWN, false,
-                "The region attributes are not set properly (%s)",
-                psRegionToString(region));
-        return testNum;
-    }
-
-    region = psRegionFromString("[1:2,3:]");
-
-    testNum++;
-    if (! isnan(region.x0)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "psRegionFromString returned a non-NULL pointer given a malformed string.");
-        return testNum;
-    }
-
-    return 0;
-}
Index: unk/psLib/test/image/tst_psImageConvolve.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageConvolve.c	(revision 4546)
+++ 	(revision )
@@ -1,435 +1,0 @@
-/** @file  tst_psImageConvolve.c
- *
- *  @brief Contains the tests for psImageConvolve.[ch]
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-07-11 21:38:19 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include <math.h>
-#include <float.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-#include "psType.h"
-
-static psS32 testKernelAlloc(void);
-static psS32 testKernelGenerate(void);
-static psS32 testImageConvolve(void);
-
-testDescription tests[] = {
-                              {testKernelAlloc,731,"psKernelAlloc",0,false},
-                              {testKernelGenerate,732,"psKernelGenerate",0,false},
-                              {testImageConvolve,733,"psImageConvolve",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
-}
-
-static psS32 testKernelAlloc(void)
-{
-    psS32 numCases = 4;
-    psS32 xMin[] = { -5,  0,-10,  5};
-    psS32 xMax[] = {  0,  5, -5, 10};
-    psS32 yMin[] = { -4,  0, -8,  4};
-    psS32 yMax[] = {  0,  4, -4,  8};
-    psS32 i;
-    psKernel* k;
-
-    for (i=0;i<numCases;i++) {
-        k = psKernelAlloc(xMin[i],xMax[i],yMin[i],yMax[i]);
-
-        if (k == NULL) {
-            psError(PS_ERR_UNKNOWN, true,"psKernelAlloc returned NULL for [%d:%d,%d:%d].",
-                    xMin[i], xMax[i], yMin[i], yMax[i]);
-            return i*10+1;
-        }
-
-        if (k->xMin != xMin[i] || k->xMax != xMax[i] ||
-                k->yMin != yMin[i] || k->yMax != yMax[i]) {
-            psError(PS_ERR_UNKNOWN, true,"Min/max members, [%d:%d,%d:%d], of psKernel wrong. Should be [%d:%d,%d:%d].",
-                    k->xMin,k->xMax, k->yMin, k->yMax,
-                    xMin[i], xMax[i], yMin[i], yMax[i]);
-            return i*10+2;
-        }
-
-        if (k->image->numCols != xMax[i]-xMin[i]+1 ||
-                k->image->numRows != yMax[i]-yMin[i]+1) {
-            psError(PS_ERR_UNKNOWN, true,"Size of the kernel image is wrong (%dx%d vs %dx%d).",
-                    xMax[i]-xMin[i]+1, yMax[i]-yMin[i]+1,
-                    k->image->numCols, k->image->numRows);
-            return i*10+2;
-        }
-
-        for (psS32 j=yMin[i]; j<yMax[i]; j++) {
-            if (k->kernel[j]+xMin[i] != k->image->data.PS_TYPE_KERNEL_DATA[j-yMin[i]]) {
-                psError(PS_ERR_UNKNOWN, true,"The kernel pointer was set wrong for row %d.",
-                        j);
-                return i*10+4;
-            }
-        }
-
-        psFree(k);
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be a warning (xMin > xMax)");
-    k = psKernelAlloc(5, -5, -2, 2);
-    if (k == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc returned NULL for xMin > xMax.");
-        return i*10+5;
-    }
-
-    if (k->xMin != -5 || k->xMax != 5) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc didn't swap xMin & xMax.");
-        return i*10+6;
-    }
-
-    psFree(k);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be a warning (yMin > yMax)");
-    k = psKernelAlloc(-2, 2, 5, -5);
-    if (k == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc returned NULL for yMin > yMax.");
-        return i*10+7;
-    }
-
-    if (k->yMin != -5 || k->yMax != 5) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc didn't swap yMin & yMax.");
-        return i*10+8;
-    }
-
-    psFree(k);
-
-    return 0;
-}
-
-static psS32 testKernelGenerate(void)
-{
-    psS32 size = 5;
-    psS32 t[] = { 1, 2, 8, 9, 10 };
-    psS32 x[] = { 0, 1, 0, -1, 0 };
-    psS32 y[] = { 2, 1, -1, -2, 0 };
-    float sum;
-
-    psVector* xVec = psVectorAlloc(size,PS_TYPE_U32);
-    psVector* yVec = psVectorAlloc(size,PS_TYPE_U32);
-    psVector* tVec = psVectorAlloc(size,PS_TYPE_U32);
-
-    for (psS32 i = 0; i < size; i++) {
-        xVec->data.U32[i] = x[i];
-        yVec->data.U32[i] = y[i];
-        tVec->data.U32[i] = t[i];
-    }
-
-    psKernel* result = psKernelGenerate(tVec, xVec, yVec, false);
-
-    if (result == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned NULL.");
-        return 1;
-    }
-
-    if (result->xMin != -1 || result->xMax != 1 ||
-            result->yMin != -2 || result->yMax != 2) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result had a range of [%d:%d,%d:%d].  Suppose to be [-2:2,-1:1].",
-                result->xMin, result->xMax, result->yMin, result->yMax);
-        return 2;
-    }
-
-    sum = 0.0;
-    printf("Resulting kernel:\n");
-    for (psS32 y = result->yMin; y <= result->yMax; y++) {
-        for (psS32 x = result->xMin; x <= result->xMax; x++) {
-            printf(" %6.2f ", result->kernel[y][x]);
-            sum += result->kernel[y][x];
-        }
-        printf("\n");
-    }
-    if (fabsf(1.0 - sum) > FLT_EPSILON) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result is not normalized (sum=%g).",
-                sum);
-
-        return 3;
-
-    }
-
-    if (fabsf(result->kernel[-2][0] - 0.1) > FLT_EPSILON ||
-            fabsf(result->kernel[ -1][ -1] - 0.1) > FLT_EPSILON ||
-            fabsf(result->kernel[ 1][ 0] - 0.6) > FLT_EPSILON ||
-            fabsf(result->kernel[2][1] - 0.1) > FLT_EPSILON) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g,%g,%g, are wrong. Suppose to be 0.1,0.1,0.6,0.1",
-                result->kernel[-2][0], result->kernel[-1][-1],
-                result->kernel[1][0], result->kernel[2][1]);
-
-        return 4;
-    }
-
-    psFree(result);
-    psFree(xVec);
-    psFree(yVec);
-    psFree(tVec);
-
-    xVec = psVectorAlloc(size,PS_TYPE_S16);
-    yVec = psVectorAlloc(size,PS_TYPE_S16);
-    tVec = psVectorAlloc(size,PS_TYPE_S16);
-
-    for (psS32 i = 0; i < size; i++) {
-        xVec->data.S16[i] = x[i];
-        yVec->data.S16[i] = y[i];
-        tVec->data.S16[i] = t[i];
-    }
-
-    result = psKernelGenerate(tVec, xVec, yVec, true);
-
-    if (result == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned NULL.");
-        return 5;
-    }
-
-    if (result->xMin != 0 || result->xMax != 1 ||
-            result->yMin != 0 || result->yMax != 3) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result had a range of [%d:%d,%d:%d].  Suppose to be [0:1,1:2].",
-                result->xMin, result->xMax, result->yMin, result->yMax);
-        return 6;
-    }
-
-    sum = 0.0;
-    printf("Resulting kernel (relative=true):\n");
-    for (psS32 y = result->yMin; y <= result->yMax; y++) {
-        for (psS32 x = result->xMin; x <= result->xMax; x++) {
-            printf(" %6.2f ", result->kernel[y][x]);
-            sum += result->kernel[y][x];
-        }
-        printf("\n");
-    }
-    if (fabsf(1.0 - sum) > FLT_EPSILON) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result is not normalized (sum=%g).",
-                sum);
-
-        return 7;
-
-    }
-
-    if (fabsf(result->kernel[0][0] - 19.0/30.0) > FLT_EPSILON ||
-            fabsf(result->kernel[2][0] - 1.0/30.0) > FLT_EPSILON ||
-            fabsf(result->kernel[2][1] - 8.0/30.0) > FLT_EPSILON ||
-            fabsf(result->kernel[3][1] - 2.0/30.0) > FLT_EPSILON) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g;%g,%g, are wrong. Suppose to be 2,6;1,0.",
-                result->kernel[0][0], result->kernel[2][0],
-                result->kernel[2][1], result->kernel[3][1]);
-
-        return 8;
-    }
-
-    psFree(result);
-    psFree(xVec);
-    psFree(yVec);
-    psFree(tVec);
-
-    xVec = psVectorAlloc(size,PS_TYPE_F32);
-    yVec = psVectorAlloc(size,PS_TYPE_F32);
-    tVec = psVectorAlloc(size,PS_TYPE_F32);
-
-    for (psS32 i = 0; i < size; i++) {
-        xVec->data.F32[i] = x[i]+0.1;
-        yVec->data.F32[i] = y[i]+0.2;
-        tVec->data.F32[i] = t[i]+0.3;
-    }
-
-    tVec->n--; // decrease size by one to make vectors unequal in length.
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
-    result = psKernelGenerate(tVec, xVec, yVec, false);
-    if (result != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned non-NULL given differing sized vectors.");
-        return 9;
-    }
-
-    psFree(result);
-
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be a error (time vector NULL).");
-    result = psKernelGenerate(NULL, xVec, yVec, true);
-    if (result != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned a kernel with no time vector.");
-        return 11;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be a error (x vector NULL).");
-    result = psKernelGenerate(tVec, NULL, yVec, true);
-    if (result != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned a kernel with no x vector.");
-        return 11;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be a error (y vector NULL).");
-    result = psKernelGenerate(tVec, xVec, NULL, true);
-    if (result != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned a kernel with no y vector.");
-        return 11;
-    }
-
-    psFree(xVec);
-    psFree(yVec);
-    psFree(tVec);
-    psFree(result);
-
-    return 0;
-}
-
-static psS32 testImageConvolve(void)
-{
-    const psS32 r = 200;
-    const psS32 c = 300;
-    psS32 sum;
-
-    // approximate a normalized gaussian kernel.
-    psKernel* g = psKernelAlloc(-1,1,-1,1);
-    g->kernel[-1][-1] =
-        g->kernel[-1][1] =
-            g->kernel[1][-1] =
-                g->kernel[1][1] = 0.0113;
-    g->kernel[1][0] =
-        g->kernel[-1][0] =
-            g->kernel[0][-1] =
-                g->kernel[0][1] = 0.0838;
-    g->kernel[0][0] = 0.6193;
-
-    // create a normalized non-symetric kernel.
-    psKernel* nsk = psKernelAlloc(0,2,0,2);
-    sum = 0.0;
-    for (psS32 i=0;i<2;i++) {
-        for (psS32 j=0;j<2;j++) {
-            nsk->kernel[i][j] = i+j;
-            sum = i+j;
-        }
-    }
-    for (psS32 i=0;i<2;i++) {
-        for (psS32 j=0;j<2;j++) {
-            nsk->kernel[i][j] /= sum;
-        }
-    }
-
-
-    psImage* img = psImageAlloc(c,r,PS_TYPE_F32);
-    memset(img->data.F32[0],0,c*r*PSELEMTYPE_SIZEOF(PS_TYPE_F32));
-    img->data.F32[0][0] = 1.0f;
-    img->data.F32[r/2][c/2] = 1.0f;
-    img->data.F32[r-1][c/2] = 1.0f;
-
-    // test spacial convolution of gaussian
-    psLogMsg(__func__,PS_LOG_INFO,"Testing direct gaussian convolution");
-    psImage* out = psImageConvolve(NULL, img, g, true);
-
-    if (out == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve returned a NULL for direct gaussian case.");
-        return 1;
-    }
-
-    if (out->numCols != c || out->numRows != r) {
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is %dx%d, but expected %dx%d.",
-                out->numCols, out->numRows,
-                c,r);
-        return 2;
-    }
-
-    if (out->type.type != PS_TYPE_F32) {
-        char* typeStr;
-        PS_TYPE_NAME(typeStr,out->type.type);
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is of type %s, not psF32.",
-                typeStr);
-        return 3;
-    }
-
-    // test values
-    for (psS32 i=-1;i<1;i++) {
-        for (psS32 j=-1;j<1;j++) {
-            if (fabsf(out->data.F32[r/2+i][c/2+j] - g->kernel[i][j]) > 0.0001) {
-                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
-                        c/2+j,r/2+i,
-                        out->data.F32[r/2+i][c/2+j], g->kernel[i][j]);
-                return 4;
-            }
-            if (i >= 0 && j >= 0 && fabsf(out->data.F32[i][j] - g->kernel[i][j]) > 0.0001) {
-                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
-                        j,i,
-                        out->data.F32[i][j], g->kernel[i][j]);
-                return 5;
-            }
-            if (i <= 0 && fabsf(out->data.F32[r-1+i][c/2+j] - g->kernel[i][j]) > 0.0001) {
-                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
-                        c/2+j,r-1+i,
-                        out->data.F32[r-1+i][c/2+j], g->kernel[i][j]);
-                return 6;
-            }
-        }
-    }
-
-    // test fourier convolution of gaussian
-    psLogMsg(__func__,PS_LOG_INFO,"Testing fourier gaussian convolution");
-    psImage* out2 = psImageConvolve(out, img, g, false);
-
-    if (out == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve returned a NULL for gaussian case.");
-        return 10;
-    }
-
-    if (out != out2) {
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve didn't recycle the supplied out image struct.");
-        return 11;
-    }
-
-    if (out->numCols != c || out->numRows != r) {
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is %dx%d, but expected %dx%d.",
-                out->numCols, out->numRows,
-                c,r);
-        return 12;
-    }
-
-    if (out->type.type != PS_TYPE_F32) {
-        char* typeStr;
-        PS_TYPE_NAME(typeStr,out->type.type);
-        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is of type %s, not psF32.",
-                typeStr);
-        return 13;
-    }
-
-    // test values
-    for (psS32 i=-1;i<1;i++) {
-        for (psS32 j=-1;j<1;j++) {
-            if (fabsf(out->data.F32[r/2+i][c/2+j] - g->kernel[i][j]) > 0.01) {
-                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
-                        c/2+j,r/2+i,
-                        out->data.F32[r/2+i][c/2+j], g->kernel[i][j]);
-                return 14;
-            }
-            if (i >= 0 && j >= 0 && fabsf(out->data.F32[i][j] - g->kernel[i][j]) > 0.01) {
-                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
-                        j,i,
-                        out->data.F32[i][j], g->kernel[i][j]);
-                return 15;
-            }
-            if (i <= 0 && fabsf(out->data.F32[r-1+i][c/2+j] - g->kernel[i][j]) > 0.01) {
-                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
-                        c/2+j,r-1+i,
-                        out->data.F32[r-1+i][c/2+j], g->kernel[i][j]);
-                return 16;
-            }
-        }
-    }
-
-    psFree(g);
-    psFree(img);
-    psFree(nsk);
-    psFree(out);
-    return 0;
-}
-
Index: unk/psLib/test/image/tst_psImageFFT.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageFFT.c	(revision 4546)
+++ 	(revision )
@@ -1,664 +1,0 @@
-/** @file  tst_psImageFFT.c
- *
- *  @brief Contains the tests for psFFT.[ch]
- *
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-05-12 00:54:49 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include <complex.h>
-#include <math.h>
-#include <float.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-#define GENIMAGE(img,c,r,TYP, valueFcn) \
-img = psImageAlloc(c,r,PS_TYPE_##TYP); \
-for (psU32 row=0;row<r;row++) { \
-    ps##TYP* imgRow = img->data.TYP[row]; \
-    for (psU32 col=0;col<c;col++) { \
-        imgRow[col] = (ps##TYP)(valueFcn); \
-    } \
-}
-
-static psS32 testImageFFT(void);
-static psS32 testImageRealImaginary(void);
-static psS32 testImageComplex(void);
-static psS32 testImageConjugate(void);
-static psS32 testImagePowerSpectrum(void);
-
-testDescription tests[] = {
-                              {testImageFFT,632,"psImageFFT",0,false},
-                              {testImageRealImaginary,633,"psImageRealImaginary",0,false},
-                              {testImageComplex,634,"psImageComplex",0,false},
-                              {testImageConjugate,635,"psImageConjugate",0,false},
-                              {testImagePowerSpectrum,636,"psImagePowerSpectrum",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return (! runTestSuite(stderr,"psFFT",tests,argc,argv) );
-}
-
-psS32 testImageFFT(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* img3 = NULL;
-    psU32 m = 128;
-    psU32 n = 64;
-    psImage* img4 = NULL;
-    psImage* img5 = NULL;
-
-    /*
-    1. assign a image to a radial sinisoid
-    2. perform a forward transform
-    3. verify that the only significant component cooresponds to the freqency of the input in step 1.
-    4. perform a reverse transform
-    5. compare to original (should be equal to within a reasonable error)
-    */
-
-    // 1. assign a image to a radial sinisoid
-    GENIMAGE(img,m,n,F32, sinf((32.0f-row)/32.0f*M_PI)+sinf((64.0f-col)/64.0f*M_PI));
-
-    // 2. perform a forward transform
-    img2 = psImageFFT(img2,img,PS_FFT_FORWARD);
-    if (img2->type.type != PS_TYPE_C32) {
-        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce complex values?");
-        return 1;
-    }
-    if (img2->numCols != m || img2->numRows != n) {
-        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce proper size result (%dx%d vs. expected %dx%d).",
-                img2->numCols,img2->numRows,m,n);
-        return 2;
-    }
-
-    // 3. verify that the only significant component cooresponds to the freqency of the input in step 1.
-    for (psU32 row=0;row<n;row++) {
-        psC32* img2Row = img2->data.C32[row];
-        for (psU32 col=0;col<m;col++) {
-            psF32 mag = cabsf(img2Row[col])/m/n;
-            if (mag > 0.1f) {
-                // must be (0,1) or (0,n-1) or (1,0) or (m-1,0)
-                if (! (col == 0 && (row == 1 || row == n-1))
-                        && ! (row == 0 && (col==1 || col == m-1)) ) {
-                    psError(PS_ERR_UNKNOWN, true,"Result invalid at %d,%d (%.2f)",col,row,mag);
-                    return 3;
-                }
-            } else
-                if ( (col == 0 && (row == 1 || row == n-1))
-                        || (row == 0 && (col==1 || col == m-1)) ) {
-                    psError(PS_ERR_UNKNOWN, true,"Result invalid at %d,%d (%.2f)",col,row,mag);
-                    return 4;
-                }
-        }
-    }
-
-
-    // 4. perform a reverse transform
-    img3 = psImageFFT(img3,img2,PS_FFT_REVERSE);
-
-    if (img3->type.type != PS_TYPE_C32) {
-        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce complex values?");
-        return 5;
-    }
-
-    if (img3->numCols != m || img3->numRows != n) {
-        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce proper size result (%dx%d vs. expected %dx%d).",
-                img3->numCols,img3->numRows,m,n);
-        return 6;
-    }
-
-    for (psU32 row=0;row<n;row++) {
-        psC32* img3Row = img3->data.C32[row];
-        psF32* imgRow = img->data.F32[row];
-        for (psU32 col=0;col<m;col++) {
-            psF32 pixel = creal(img3Row[col])/m/n;
-            if (fabsf(pixel-imgRow[col]) > 0.1) {
-                psError(PS_ERR_UNKNOWN, true,"Reverse FFT didn't give original image back (%d,%d %.2f vs %.2f)",
-                        col,row,pixel,imgRow[col]);
-                return 7;
-            }
-        }
-    }
-
-    // 4. perform a reverse transform to real result
-    img3 = psImageFFT(img3,img2,PS_FFT_REVERSE|PS_FFT_REAL_RESULT);
-
-    if (img3->type.type != PS_TYPE_F32) {
-        char* typeStr;
-        PS_TYPE_NAME(typeStr,img3->type.type)
-        psError(PS_ERR_UNKNOWN, true,"FFT asked to make real result, but I got a %s type image?",typeStr);
-        return 8;
-    }
-
-    if (img3->numCols != m || img3->numRows != n) {
-        psError(PS_ERR_UNKNOWN, true,"FFT didn't produce proper size result (%dx%d vs. expected %dx%d).",
-                img3->numCols,img3->numRows,m,n);
-        return 9;
-    }
-
-    for (psU32 row=0;row<n;row++) {
-        psF32* img3Row = img3->data.F32[row];
-        psF32* imgRow = img->data.F32[row];
-        for (psU32 col=0;col<m;col++) {
-            psF32 pixel = img3Row[col]/m/n;
-            if (fabsf(pixel-imgRow[col]) > 0.1) {
-                psError(PS_ERR_UNKNOWN, true,"Reverse FFT didn't give original image back (%d,%d %.2f vs %.2f)",
-                        col,row,pixel,imgRow[col]);
-                return 10;
-            }
-        }
-    }
-
-    // check if error occurs if FORWARD and REVERSE are both given.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    if (psImageFFT(NULL,img2,PS_FFT_REVERSE|PS_FFT_FORWARD) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"PS_FFT_REVERSE|PS_FFT_FORWARD option produced something?");
-        return 11;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    if (psImageFFT(NULL,img2,PS_FFT_FORWARD|PS_FFT_REAL_RESULT) != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"PS_FFT_FORWARD|PS_FFT_REAL_RESULT option produced something?");
-        return 12;
-    }
-
-    /* Verify return null and program execution doesn't stop if input image is null */
-    img4 = psImageFFT(NULL,NULL,PS_FFT_FORWARD);
-    if (img4 != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psImageFFT should return null for a null input image.");
-        return 10;
-    }
-
-    /* Verify return null and program execution doesn't stop if input image is invalid direction */
-    GENIMAGE(img4,8,8,S8,row+col);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for invalid direction.");
-    img5 = psImageFFT(NULL,img4,PS_FFT_REAL_RESULT);
-    if (img5 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageFFT should return null for an invalid FFT direction.");
-        return 11;
-    }
-    psFree(img4);
-
-    psFree(img);
-    psFree(img2);
-    psFree(img3);
-
-    return 0;
-}
-
-psS32 testImageRealImaginary(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* img3 = NULL;
-    psImage* c64Img = NULL;
-    psImage* c64Img2 = NULL;
-    psImage* c64Img3 = NULL;
-    psImage* ncImg = NULL;
-    psImage* ncImg2 = NULL;
-    psImage* ncImg3 = NULL;
-
-    psU32 m = 128;
-    psU32 n = 64;
-
-    /*
-    1. create a C32 complex vector with distinctly different real and imaginary parts.
-    2. call psImageReal and psImageImaginary
-    3. compare results to the real/imaginary components of input
-    */
-
-    // 1. create a C32 complex vector with distinctly different real and imaginary parts.
-    GENIMAGE(img,m,n,C32, row + I * col);
-
-    // 2. call psImageReal and psImageImaginary
-    img2 = psImageReal(img2,img);
-    if (img2 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a NULL?");
-        return 1;
-    }
-    if (img2->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a wrong type (%d)?",
-                img2->type.type);
-        return 2;
-    }
-
-    img3 = psImageImaginary(img3,img);
-    if (img3 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a NULL?");
-        return 3;
-    }
-    if (img3->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a wrong type (%d)?",
-                img3->type.type);
-        return 4;
-    }
-
-    // 3. compare results to the real/imaginary components of input
-    for (psU32 row=0;row<n;row++) {
-        psF32* img2Row = img2->data.F32[row];
-        psF32* img3Row = img3->data.F32[row];
-        for (psU32 col=0;col<m;col++) {
-            if (fabsf(img2Row[col] - row) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImageReal didn't return the real portion at n=%d",
-                        n);
-                return 5;
-            }
-            if (fabsf(img3Row[col] - col) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImageImaginary didn't return the imag portion at n=%d",
-                        n);
-                return 6;
-            }
-        }
-    }
-
-    psFree(img);
-    psFree(img2);
-    psFree(img3);
-
-    /*
-    1. create a C64 complex vector with distinctly different real and imaginary parts.
-    2. call psImageReal and psImageImaginary
-    3. compare results to the real/imaginary components of input
-    */
-
-    // 1. create a C64 complex vector with distinctly different real and imaginary parts.
-    GENIMAGE(c64Img,m,n,C64, row + I * col);
-
-    // 2. call psImageReal and psImageImaginary
-    c64Img2 = psImageReal(c64Img2,c64Img);
-    if (c64Img2 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a NULL?");
-        return 1;
-    }
-    if (c64Img2->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN, true,"psImageReal returned a wrong type (%d)?",
-                img2->type.type);
-        return 2;
-    }
-
-    c64Img3 = psImageImaginary(c64Img3,c64Img);
-    if (c64Img3 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a NULL?");
-        return 3;
-    }
-    if (c64Img3->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN, true,"psImageImaginary returned a wrong type (%d)?",
-                c64Img3->type.type);
-        return 4;
-    }
-
-    // 3. compare results to the real/imaginary components of input
-    for (psU32 row=0;row<n;row++) {
-        psF64* img2Row = c64Img2->data.F64[row];
-        psF64* img3Row = c64Img3->data.F64[row];
-        for (psU32 col=0;col<m;col++) {
-            if (fabsf(img2Row[col] - row) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImageReal didn't return the real portion at n=%d",
-                        n);
-                return 5;
-            }
-            if (fabsf(img3Row[col] - col) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImageImaginary didn't return the imag portion at n=%d",
-                        n);
-                return 6;
-            }
-        }
-    }
-
-    GENIMAGE(ncImg,m,n,F32,row+col);
-    ncImg2 = psImageReal(ncImg2,ncImg);
-    ncImg3 = psImageImaginary(ncImg3,ncImg);
-    if(ncImg2 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageReal returned NULL");
-        return 40;
-    }
-    if(ncImg2->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"psImageReal returned a wrong type");
-        return 41;
-    }
-    if(ncImg3 == NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageImaginary returned NULL");
-        return 42;
-    }
-    if(ncImg3->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"psImageImaginary returned NULL");
-        return 43;
-    }
-    for(psU32 row=0; row<n; row++) {
-        psF32* ncImg2Row = ncImg2->data.F32[row];
-        psF32* ncImg3Row = ncImg3->data.F32[row];
-        for(psU32 col=0; col<m; col++) {
-            if(fabsf(ncImg2Row[col] - (row+col)) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN,true,"psImageReal didn't return the real portion");
-                return 45;
-            }
-            if(fabsf(ncImg3Row[col] - 0) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN,true,"psImageImaginary didn't return the imaginary portion");
-                return 46;
-            }
-        }
-    }
-    psFree(ncImg);
-    psFree(ncImg2);
-    psFree(ncImg3);
-
-    psFree(c64Img);
-    psFree(c64Img2);
-    psFree(c64Img3);
-
-    // Perform psImageReal with null input
-    if(psImageReal(NULL,NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psImageReal did not return null with null input");
-        return 10;
-    }
-
-    // Perform psImageImaginary with null input
-    if(psImageImaginary(NULL,NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psImageImaginary did not return null with null input");
-        return 10;
-    }
-
-    return 0;
-}
-
-psS32 testImageComplex(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* img3 = NULL;
-    psImage* c64Img = NULL;
-    psImage* c64Img2 = NULL;
-    psImage* c64Img3 = NULL;
-    psImage* pImg = NULL;
-    psImage* pImg2 = NULL;
-    psImage* pImg3 = NULL;
-
-    psU32 m = 128;
-    psU32 n = 64;
-
-    /*
-    1. create two unique psF32 vectors of the same size
-    2. call psImageComplex
-    3. verify that the result is a psC32
-    4. use crealf and cimagf on step 2 results
-    5. compare step 4 results to input.
-
-    6. create a psF32 and a psF64 vector of the same size
-    7. call psImageComplex
-    8. verify that an appropriate error occurred.
-
-    9. create two psf32 vectors of different sizes
-    10. call psImageComplex
-    11. verify thet an appropriate error occurred.
-    */
-
-    // 1. create two unique psF32 vectors of the same size
-    GENIMAGE(img,m,n,F32,row);
-    GENIMAGE(img2,m,n,F32,col);
-    GENIMAGE(c64Img,m,n,F64,row);
-    GENIMAGE(c64Img2,m,n,F64,col);
-    GENIMAGE(pImg,m,n,S16,row);
-    GENIMAGE(pImg2,m,n,S16,col);
-
-    // 2. call psImageComplex
-    img3 = psImageComplex(img3,img,img2);
-    c64Img3 = psImageComplex(c64Img3,c64Img,c64Img2);
-
-    // 3. verify that the result is a psC32
-    if (img3->type.type != PS_TYPE_C32) {
-        psError(PS_ERR_UNKNOWN, true,"Image Type from psImageComplex is not complex? (%d)",
-                img3->type.type);
-        return 1;
-    }
-    if (c64Img3->type.type != PS_TYPE_C64) {
-        psError(PS_ERR_UNKNOWN,true,"Image type from psImageComplex is not complex");
-        return 10;
-    }
-
-    // 4. call psImageReal and psImageImaginary on step 2 results (not needed, just use crealf/cimagf)
-    // 5. compare step 4 results to input.
-    for (psU32 row=0;row<n;row++) {
-        psC32* img3Row = img3->data.C32[row];
-        psC64* c64Img3Row = c64Img3->data.C64[row];
-        for (psU32 col=0;col<m;col++) {
-            if (fabsf(crealf(img3Row[col]) - row) > FLT_EPSILON ||
-                    fabsf(cimagf(img3Row[col]) - col) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImageComplex result is invalid (%d,%d, %.2f+%.2fi)",
-                        col,row,crealf(img3Row[col]),cimagf(img3Row[col]));
-                return 2;
-            }
-            if (fabsf(crealf(c64Img3Row[col]) - row) > FLT_EPSILON ||
-                    fabsf(cimagf(c64Img3Row[col]) - col) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN,true,"psImageComplex result is invalid");
-                return 3;
-            }
-        }
-    }
-
-    // 6. create a psF32 and a psF64 image of the same size
-    img2 = psImageRecycle(img2,m,n,PS_TYPE_F64);
-
-    // 7. call psImageComplex
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error (type mismatch).");
-    img3 = psImageComplex(img3,img,img2);
-    // 8. verify that an appropriate error occurred. (this partially has to be done via inspection)
-    if (img3 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageComplex returned a image though input types mismatched.");
-        return 3;
-    }
-
-    // 9. create two psf32 vectors of different sizes
-    img2 = psImageRecycle(img2,m/2,n,PS_TYPE_F32);
-
-    // 10. call psImageComplex
-    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error (size mismatch).");
-    img3 = psImageComplex(img3,img,img2);
-
-    // 11. verify thet an appropriate error occurred.
-    if (img3 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageComplex returned a image though input sizes mismatched.");
-        return 4;
-    }
-
-    // Perform psImageComplex with invalid type
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
-    pImg3 = psImageComplex(pImg3,pImg,pImg2);
-    if ( pImg3 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageComplex did not return NULL");
-        return 50;
-    }
-
-    psFree(img);
-    psFree(img2);
-    psFree(img3);
-    psFree(c64Img);
-    psFree(c64Img2);
-    psFree(c64Img3);
-    psFree(pImg);
-    psFree(pImg2);
-
-    // Perform psImageComplex with null input
-    if(psImageComplex(NULL,NULL,NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psImageComplex did not return null with null input");
-        return 20;
-    }
-
-    return 0;
-}
-
-psS32 testImageConjugate(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* c64Img = NULL;
-    psImage* c64Img2 = NULL;
-    psImage* pImg = NULL;
-    psImage* pImg2 = NULL;
-
-    psU32 m = 128;
-    psU32 n = 64;
-
-    /*
-    1. create a psC32 with unique real and imaginary values.
-    2. call psImageConjugate
-    3. verify result is psC32
-    4. verify each value is conjugate of input (a+bi -> a-bi)
-    */
-
-    // 1. create a psC32 with unique real and imaginary values.
-    GENIMAGE(img,m,n,C32, row + I * col);
-    GENIMAGE(c64Img,m,n,C64,row + I*col);
-    GENIMAGE(pImg,m,n,F32,row+col);
-
-    // 2. call psImageConjugate
-    img2 = psImageConjugate(img2,img);
-    c64Img2 = psImageConjugate(c64Img2,c64Img);
-    pImg2 = psImageConjugate(pImg2,pImg);
-
-    // 3. verify result is psC32
-    if (img2->type.type != PS_TYPE_C32) {
-        psError(PS_ERR_UNKNOWN, true,"the psImageConjugate didn't return a C32 image.");
-        return 1;
-    }
-    if (c64Img2->type.type != PS_TYPE_C64) {
-        psError(PS_ERR_UNKNOWN,true,"psImageConjugate did not return a C64 image");
-        return 10;
-    }
-    if (pImg2->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN,true,"psImageConjugate did not return a F32 image");
-        return 11;
-    }
-
-    // 4. verify each value is conjugate of input (a+bi -> a-bi)
-    for (psU32 row=0;row<n;row++) {
-        psC32* img2Row = img2->data.C32[row];
-        psC64* c64Img2Row = c64Img2->data.C64[row];
-        psF32* pImg2Row = pImg2->data.F32[row];
-        for (psU32 col=0;col<m;col++) {
-            if (fabsf(crealf(img2Row[col]) - row) > FLT_EPSILON ||
-                    fabsf(cimagf(img2Row[col]) + col) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImageComplex result is invalid (%d,%d, %.2f+%.2fi)",
-                        col,row,crealf(img2Row[col]),cimagf(img2Row[col]));
-                return 2;
-            }
-            if (fabsf(crealf(c64Img2Row[col]) - row) > FLT_EPSILON ||
-                    fabsf(cimagf(c64Img2Row[col]) + col) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN,true,"psImageComplex result is invalid");
-                return 20;
-            }
-            if (fabsf(pImg2Row[col] - (row+col)) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN,true,"psImageComplex result is invalid");
-                return 21;
-            }
-        }
-    }
-
-    psFree(img);
-    psFree(img2);
-    psFree(c64Img);
-    psFree(c64Img2);
-    psFree(pImg);
-    psFree(pImg2);
-
-    // Perform psImageConjugate with null input
-    if(psImageConjugate(NULL,NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psImageConjugate did not return null with null input");
-        return 30;
-    }
-
-    return 0;
-}
-
-psS32 testImagePowerSpectrum(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* c64Img = NULL;
-    psImage* c64Img2 = NULL;
-    psImage* pImg = NULL;
-
-    psU32 m = 128;
-    psU32 n = 64;
-
-    /*
-    1. create a psC32 vector with unique real and imaginary components
-    2. call psImagePowerSpectrum
-    3. verify result is psF32
-    4. verify the values are the square of the absolute values of the original
-    */
-
-    // 1. create a psC32 vector with unique real and imaginary components
-    GENIMAGE(img,m,n,C32, row + I * col);
-    GENIMAGE(c64Img,m,n,C64,row+I*col);
-    GENIMAGE(pImg,m,n,F32,row+col);
-
-    // 2. call psImagePowerSpectrum
-    img2 = psImagePowerSpectrum(img2,img);
-    c64Img2 = psImagePowerSpectrum(c64Img2, c64Img);
-
-    // 3. verify result is psF32
-    if (img2->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN, true,"the type was not PS_TYPE_F32.");
-        return 1;
-    }
-    if (c64Img2->type.type != PS_TYPE_F64) {
-        psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum did not return PS_TYPE_F64");
-        return 10;
-    }
-
-    // 4. verify the values are the square of the absolute values of the original
-    for (psU32 row=0;row<n;row++) {
-        psC32* imgRow = img->data.C32[row];
-        psF32* img2Row = img2->data.F32[row];
-        psC64* c64ImgRow = c64Img->data.C64[row];
-        psF64* c64Img2Row = c64Img2->data.F64[row];
-        for (psU32 col=0;col<m;col++) {
-            psF32 power = cabs(imgRow[col]);
-            psF64 power64 = cabs(c64ImgRow[col]);
-            power *= power/n/n/m/m;
-            power64 *= power64/n/n/m/m;
-
-            if (fabsf(img2Row[col] - power) > 2.0f*FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"psImagePowerSpectrum result is invalid (%d,%d, %.2f vs %.2f)",
-                        col,row,img2Row[col],power);
-                return 2;
-            }
-            if (fabsf(c64Img2Row[col] - power64) > 2.0f*FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum result is invalid");
-                return 22;
-            }
-        }
-    }
-
-    psFree(img);
-    psFree(img2);
-    psFree(c64Img);
-    psFree(c64Img2);
-
-    // Perform psImagePowerSpectrum with invalid input
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message.");
-    if(psImagePowerSpectrum(NULL,pImg) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum did not return null with invalid type");
-        return 41;
-    }
-    psFree(pImg);
-
-    // Perform psImagePowerSpectrum with null input
-    if(psImagePowerSpectrum(NULL,NULL) != NULL ) {
-        psError(PS_ERR_UNKNOWN,true,"psImagePowerSpectrum did not return null with null input");
-        return 40;
-    }
-
-    return 0;
-}
Index: unk/psLib/test/image/tst_psImageGeomManip.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageGeomManip.c	(revision 4546)
+++ 	(revision )
@@ -1,1204 +1,0 @@
-/** @file  tst_psImageGeomManip.c
- *
- *  @brief Contains the tests for psImageManip.[ch]
- *
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-07-12 19:27:28 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include <complex.h>
-#include <math.h>
-#include <float.h>
-#include <string.h>
-#include <stdlib.h>
-#include <string.h>                    // for memset
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-#include "psType.h"
-
-static psS32 testImageRebin(void);
-static psS32 testImageRoll(void);
-static psS32 testImageRotate(void);
-static psS32 testImageShift(void);
-static psS32 testImageShiftCase(psS32 cols, psS32 rows, float colShift,float rowShift);
-static psS32 testImageResample(void);
-static psS32 testImageTransform(void);
-
-testDescription tests[] = {
-                              {testImageRebin,559,"psImageRebin",0,false},
-                              {testImageRoll,562,"psImageRoll",0,false},
-                              {testImageRotate,560,"psImageRotate",0,false},
-                              {testImageShift,561,"psImageShift",0,false},
-                              {testImageResample,743,"psImageResample",0,false},
-                              {testImageTransform,-1,"psImageTransform",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
-}
-
-static psS32 testImageRebin(void)
-{
-
-    /*
-    This function shall generate a rescaled version of a psImage structure
-    derived from a specified statistics method.
-    */
-
-    psImage* in = NULL;
-    psImage* out = NULL;
-    psImage* out2 = NULL;
-    psImage* out3 = NULL;
-    psImage* mask = NULL;
-    psImage* meanTruth = NULL;
-    psImage* meanTruthWMask = NULL;
-    psImage* maxTruth = NULL;
-    psStats stats;
-
-    /*
-    Verify the returned psImage structure contains expected values, if the
-    input parameter input contains known data, the input scale is a known
-    value with a known statistical method specified in stats. Cases should
-    include at least two different scales and statistical methods. Comparison
-    of expected values should include a delta to allow testing on different
-    platforms.
-    */
-
-    #define testRebinType(DATATYPE)  \
-    in = psImageAlloc(16,16,PS_TYPE_##DATATYPE); \
-    mask = psImageAlloc(16,16,PS_TYPE_U8); \
-    meanTruth = psImageAlloc(4,4,PS_TYPE_F32); \
-    meanTruthWMask = psImageAlloc(4,4,PS_TYPE_F32); \
-    maxTruth = psImageAlloc(6,6,PS_TYPE_F32); \
-    memset(meanTruth->data.F32[0],0,sizeof(psF32)*4*4); \
-    memset(meanTruthWMask->data.F32[0],0,sizeof(psF32)*4*4); \
-    memset(maxTruth->data.F32[0],0,sizeof(psF32)*6*6); \
-    for (psS32 row = 0; row<16; row++) { \
-        ps##DATATYPE* inRow = in->data.DATATYPE[row]; \
-        psF32* meanTruthRow = meanTruth->data.F32[row/4]; \
-        psF32* meanTruthWMaskRow = meanTruthWMask->data.F32[row/4]; \
-        psF32* maxTruthRow = maxTruth->data.F32[row/3]; \
-        psU8* maskRow = mask->data.U8[row]; \
-        for (psS32 col = 0; col<16; col++) { \
-            if(col != 15) { \
-                maskRow[col] = 0; \
-            } else { \
-                maskRow[col] = 1; \
-            } \
-            inRow[col] = row + col; \
-            meanTruthRow[col/4] += row + col; \
-            if (maxTruthRow[col/3] < row + col) { \
-                maxTruthRow[col/3] = row+col; \
-            } \
-            if(maskRow[col] == 0 ) { \
-                meanTruthWMaskRow[col/4] += row + col; \
-            } \
-        } \
-    } \
-    for (psS32 row = 0; row<4; row++) { \
-        psF32* meanTruthRow = meanTruth->data.F32[row]; \
-        psF32* meanTruthWMaskRow = meanTruthWMask->data.F32[row]; \
-        for (psS32 col = 0; col<4; col++) { \
-            meanTruthRow[col] /= 16; \
-            if ( col == 3 ) { \
-                meanTruthWMaskRow[col] /= 12; \
-            } else { \
-                meanTruthWMaskRow[col] /= 16; \
-            } \
-        } \
-    } \
-    stats.options = PS_STAT_SAMPLE_MEAN; \
-    out = psImageRebin(NULL,in,NULL,0,4,&stats); \
-    if (out == NULL) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned a NULL pointer!?"); \
-        return 1; \
-    } \
-    if (out->numRows != 4 || out->numCols != 4) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper size image " \
-                "(%d x %d).", \
-                out->numCols, out->numRows); \
-        return 2; \
-    } \
-    for (psS32 row = 0; row<4; row++) { \
-        ps##DATATYPE* outRow = out->data.DATATYPE[row]; \
-        psF32* truthRow = meanTruth->data.F32[row]; \
-        for (psS32 col = 0; col<4; col++) { \
-            if (fabsf((float)outRow[col]-(float)truthRow[col]) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper mean " \
-                        "result at (%d,%d) [%f vs %f].", \
-                        col,row,outRow[col],truthRow[col]); \
-                return 3; \
-            } \
-        } \
-    } \
-    stats.options = PS_STAT_SAMPLE_MEAN; \
-    out3 = psImageRebin(NULL,in,mask,1,4,&stats); \
-    for (psS32 row = 0; row<4; row++) { \
-        ps##DATATYPE* outRow = out3->data.DATATYPE[row]; \
-        psF32* truthRow = meanTruthWMask->data.F32[row]; \
-        for ( psS32 col = 0; col<4; col++) { \
-            if(abs((psS32)outRow[col]-(psS32)truthRow[col]) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"psImageRebin with mask didn't produce the proper mean " \
-                        "result at (%d,%d) [%f vs %f].", \
-                        col,row,outRow[col],truthRow[col]); \
-                return 3; \
-            } \
-        } \
-    } \
-    stats.options = PS_STAT_MAX; \
-    out2 = psImageRebin(out,in,NULL,0,3,&stats); \
-    if (out != out2) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't recycle a psImage properly!?"); \
-        return 7; \
-    } \
-    if (out == NULL) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned a NULL pointer!?"); \
-        return 4; \
-    } \
-    if (out->numRows != 6 || out->numCols != 6) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper size image " \
-                "(%d x %d).", \
-                out->numCols, out->numRows); \
-        return 5; \
-    } \
-    for (psS32 row = 0; row<6; row++) { \
-        ps##DATATYPE* outRow = out->data.DATATYPE[row]; \
-        psF32* truthRow = maxTruth->data.F32[row]; \
-        for (psS32 col = 0; col<6; col++) { \
-            if (fabsf((float)outRow[col]-(float)truthRow[col]) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper " \
-                        "max result at (%d,%d) [%f vs %f].", \
-                        col,row,outRow[col],truthRow[col]); \
-                return 6; \
-            } \
-        } \
-    } \
-    psFree(in); \
-    psFree(out); \
-    psFree(out3); \
-    psFree(mask); \
-    psFree(meanTruth); \
-    psFree(meanTruthWMask); \
-    psFree(maxTruth);
-
-    testRebinType(F32);
-    testRebinType(F64);
-    testRebinType(U16);
-    testRebinType(S8);
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the input image type is not supported.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for unsupported type.");
-    in = psImageAlloc(16,16,PS_TYPE_U8);
-    mask = psImageAlloc(16,16,PS_TYPE_F32);
-    stats.options = PS_STAT_SAMPLE_MEAN;
-    out = psImageRebin(NULL,in,NULL,0,4,&stats);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin return an image eventhough the "
-                "type is not handled.");
-        return 14;
-    }
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the mask type is not U8
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invallid mask type.");
-    out = psImageRebin(NULL,in,mask,1,4,&stats);
-    if(out != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin return an image eventhough the "
-                "mask is not the correct type.");
-        return 17;
-    }
-    psFree(mask);
-    psFree(in);
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the input parameter input is null.
-
-    out2 = psImageRebin(NULL,NULL,NULL,0,1,&stats);
-
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the input was "
-                "NULL!?");
-        return 8;
-    }
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the input parameter scale is less than or equal to zero.
-    in = psImageAlloc(16, 16, PS_TYPE_F32);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for scale < 0.");
-    out2 = psImageRebin(NULL,in,NULL,0,0,&stats);
-
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the scale was "
-                "zero!?");
-        return 9;
-    }
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the input parameter stats is null.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stats null.");
-    out2 = psImageRebin(NULL,in,NULL,0,1,NULL);
-
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats was "
-                "NULL!?");
-        return 10;
-    }
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the input parameter psStats structure member options
-    // is zero or any value which doesn't correspond to a valid statistical
-    // method.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stats options 0.");
-    stats.options = 0;
-    out2 = psImageRebin(NULL,in,NULL,0,1,&stats);
-
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats "
-                "options was zero!?");
-        return 11;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stat options use range.");
-    stats.options = PS_STAT_USE_RANGE;
-    out2 = psImageRebin(NULL,in,NULL,0,1,&stats);
-
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats "
-                "options was PS_STAT_USE_RANGE!?");
-        return 12;
-    }
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the input parameter psStats structure member options
-    // specifies more than one valid statistical method.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stats with multiple options.");
-    stats.options = PS_STAT_SAMPLE_MEAN + PS_STAT_MAX;
-    out2 = psImageRebin(NULL,in,NULL,0,1,&stats);
-
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats "
-                "options was PS_STAT_SAMPLE_MEAN+PS_STAT_MAX!?");
-        return 13;
-    }
-
-    psFree(in);
-
-    return 0;
-}
-
-static psS32 testImageRoll(void)
-{
-
-    psImage* in;
-    psImage* out;
-    psImage* out2;
-    psS32 rows = 64;
-    psS32 cols = 64;
-    psS32 rows1 = 8;
-    psS32 cols1 = 8;
-
-    /*
-     The function psImageRoll shall generate a new psImage structure by
-     rolling the input image the correponding number of pixels in the vertical
-     and/or horizontal direction. The image output image shall be the same size
-     as the input image. Values which roll off the image are wrapped to the
-     other side.
-
-     Verify the returned psImage structure contains expected values, if the
-     input image contains known values and the roll performed is known.
-     Cases should include no roll, vertical roll, horizontal roll and
-     combination vertical/horizontal rolls. Positive and negative rolls
-     should be performed.
-    */
-
-    in = psImageAlloc(cols,rows,PS_TYPE_F32);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            inRow[col] = (psF32)row+(psF32)col/1000.0f;
-        }
-    }
-
-    out = psImageRoll(NULL,in,0,0);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[row];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[col] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=0, dy=0.",
-                        col,row,inRow[col],outRow[col]);
-                return 3;
-            }
-        }
-    }
-
-    out2 = psImageRoll(out,in,cols/4,0);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[row];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[(col+cols/4) % cols] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=cols/4, dy=0.",
-                        col,row,inRow[(col+cols/4) % cols],outRow[col]);
-                return 4;
-            }
-        }
-    }
-
-    // Verify the returned psImage structure pointer is equal to the input
-    // parameter out if provided.
-    if (out2 != out) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't recycle my out psImage!?");
-        return 1;
-    }
-
-    out = psImageRoll(out,in,0,rows/4);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[(row+rows/4)%rows];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[col] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=0, dy=rows/4.",
-                        col,row,inRow[col],outRow[col]);
-                return 5;
-            }
-        }
-    }
-
-    out = psImageRoll(out,in,cols/4,rows/4);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[(row+rows/4)%rows];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[(col+cols/4) % cols] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=cols/4, dy=rows/4.",
-                        col,row,inRow[(col+cols/4) % cols],outRow[col]);
-                return 6;
-            }
-        }
-    }
-
-    out = psImageRoll(out,in,-cols/4,0);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[row];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[(col+(cols-cols/4)) % cols] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=-cols/4, dy=0.",
-                        col,row,inRow[(col+(cols-cols/4)) % cols],outRow[col]);
-                return 7;
-            }
-        }
-    }
-
-    out = psImageRoll(out,in,0,-rows/4);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[(row+rows-rows/4)%rows];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[col] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=0, dy=-rows/4.",
-                        col,row,inRow[col],outRow[col]);
-                return 8;
-            }
-        }
-    }
-
-    out = psImageRoll(out,in,-cols/4,-rows/4);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[(row+rows-rows/4)%rows];
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            if (inRow[(col+cols-cols/4) % cols] != outRow[col]) {
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
-                        "at %d,%d (%f vs %f) for dx=cols/4, dy=rows/4.",
-                        col,row,inRow[(col+cols-cols/4) % cols],outRow[col]);
-                return 9;
-            }
-        }
-    }
-
-
-    // Verify the returned psImage structure pointer is null and program
-    // execution doesn't stop, if input parameter input is null.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error.");
-    out2 = psImageRoll(NULL,NULL,0,0);
-    if (out2 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageRoll did not return NULL though input image was NULL!?");
-        return 2;
-    }
-
-    psFree(in);
-    psFree(out);
-
-    #define testRollType(DATATYPE) \
-    in = psImageAlloc(rows1,cols1,PS_TYPE_##DATATYPE); \
-    \
-    for (psS32 row=0;row<rows1;row++) { \
-        ps##DATATYPE* inRow = in->data.DATATYPE[row]; \
-        for (psS32 col=0;col<cols1;col++) { \
-            inRow[col] = (ps##DATATYPE)row+(ps##DATATYPE)col; \
-        } \
-    } \
-    \
-    out = psImageRoll(NULL,in,rows1/4,cols1/4); \
-    for (psS32 row=0;row<rows1;row++) { \
-        ps##DATATYPE* inRow = in->data.DATATYPE[(row+rows1/4)%rows1]; \
-        ps##DATATYPE* outRow = out->data.DATATYPE[row]; \
-        for (psS32 col=0;col<cols1;col++) { \
-            if (inRow[(col+cols1/4)%cols1] != outRow[col]) { \
-                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result " \
-                        "at %d,%d (%f vs %f) for dx=0, dy=0.", \
-                        col,row,(float)inRow[col],(float)outRow[col]); \
-                return 3; \
-            } \
-        } \
-    } \
-    psFree(in); \
-    psFree(out);
-
-    testRollType(U8);
-    testRollType(U16);
-    testRollType(S8);
-    testRollType(S16);
-    testRollType(F64);
-    testRollType(C32);
-    testRollType(C64);
-
-    return 0;
-}
-
-psS32 testImageRotate(void)
-{
-    /*
-
-    This function shall calculate a new psImage structure based upon the
-    rotation of a given psImage structure. The center of rotation shall be the
-    center pixel of the input image.
-
-    The following steps of the testpoint are done manually via inspection of
-    temp/fOut.fits & temp/sOut.fits.
-
-        * Verify the returned psImage structure contains expected values, if
-          the input parameter psImage contains known values. Cases should
-          include rotations of 0, 45, 90, 135, 180, 225, 270, 315, 360 and at leat one
-          other arbitrary angle. Cases of the input image should include image
-          with a center pixel and an image without a center pixel.
-        * Verify the returned psImage structure contains pixels set to exposed value, if
-          the rotation and input psImage to not correspond to the output image.
-
-    */
-
-    psImage* fOut = NULL;
-    psImage* sOut = NULL;
-    psImage* fBiOut = NULL;
-    psImage* sBiOut = NULL;
-    psImage* fTruth = NULL;
-    psImage* sTruth = NULL;
-    psImage* fBiTruth = NULL;
-    psImage* sBiTruth = NULL;
-    psS32 rows = 64;
-    psS32 cols = 64;
-    psImage* fImg = psImageAlloc(cols,rows,PS_TYPE_F32);
-    psImage* sImg = psImageAlloc(cols,rows,PS_TYPE_S16);
-
-    for(psS32 row=0;row<rows;row++) {
-        psF32* fRow = fImg->data.F32[row];
-        psS16* sRow = sImg->data.S16[row];
-        for (psS32 col=0;col<cols;col++) {
-            fRow[col] = (psF32)(row)+(psF32)(col)/100.0f;
-            sRow[col] = row-2*col;
-        }
-    }
-
-    // since interpolation is involved, etc., the simplist way to verify things
-    // is to verify the results manually and bless it for automated comparison
-    // thereafter
-
-
-    // write results of various rotates to a file and verify with truth images
-    mkdir("temp",0777);
-    remove
-        ("temp/out.fits");
-    psS32 index = 0;
-    psBool fail = false;
-    psF32 radianRot;
-
-    psFits* fOutFile = psFitsAlloc("temp/fOut.fits");
-    psFits* sOutFile = psFitsAlloc("temp/sOut.fits");
-    psFits* fBiOutFile = psFitsAlloc("temp/fBiOut.fits");
-    psFits* sBiOutFile = psFitsAlloc("temp/sBiOut.fits");
-    if (fOutFile == NULL ||sOutFile == NULL || fBiOutFile == NULL || sBiOutFile == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "Can not create output files, so why continue!?");
-        return 1;
-    }
-
-    psFits* fTruthFile = psFitsAlloc("verified/fOut.fits");
-    psFits* sTruthFile = psFitsAlloc("verified/sOut.fits");
-    psFits* fBiTruthFile = psFitsAlloc("verified/fBiOut.fits");
-    psFits* sBiTruthFile = psFitsAlloc("verified/sBiOut.fits");
-    if (fTruthFile == NULL ||sTruthFile == NULL || fBiTruthFile == NULL || sBiTruthFile == NULL) {
-        psError(PS_ERR_UNKNOWN, true, "Can not open truth files, so why continue!?");
-        return 1;
-    }
-
-    psRegion regionAll = psRegionSet(0,0,0,0);
-    for (psS32 rot=-180;rot<=180;rot+=45) {
-        psImage* oldOut = fOut;
-        psImage* oldBiOut = fBiOut;
-        if (rot == 90) {
-            radianRot = M_PI_2;
-        } else if (rot == -90) {
-            radianRot = M_PI+M_PI_2;
-        } else if (rot == 180 || rot == -180) {
-            radianRot = M_PI;
-        } else {
-            radianRot = ((float)rot)*M_PI/180.0;
-        }
-
-        fOut = psImageRotate(fOut,fImg,radianRot,-1.0,PS_INTERPOLATE_FLAT);
-        fBiOut = psImageRotate(fBiOut,fImg,radianRot,-1.0,PS_INTERPOLATE_BILINEAR);
-        // Verify the returned psImage structure is equal to the input
-        // parameter out if provided.
-        if (oldOut != NULL && oldOut != fOut) {
-            psError(PS_ERR_UNKNOWN, true,"the output recycle functionality failed");
-            return 2;
-        }
-        if (oldBiOut != NULL && oldBiOut != fBiOut) {
-            psError(PS_ERR_UNKNOWN, true,"the output recycle functionality failed");
-            return 4;
-        }
-        sOut = psImageRotate(sOut,sImg,radianRot,-1.0,PS_INTERPOLATE_FLAT);
-        sBiOut = psImageRotate(sBiOut,sImg,radianRot,-1.0,PS_INTERPOLATE_BILINEAR);
-
-        if (! psFitsWriteImage(fOutFile, NULL, fOut, 1) ) {
-            psError(PS_ERR_UNKNOWN, true,"Can not write fOut.");
-            return 20;
-        }
-        if (! psFitsWriteImage(sOutFile, NULL, sOut, 1) ) {
-            psError(PS_ERR_UNKNOWN, true,"Can not write sOut.");
-            return 21;
-        }
-        if (! psFitsWriteImage(fBiOutFile, NULL, fBiOut, 1) ) {
-            psError(PS_ERR_UNKNOWN, true,"Can not write fBiOut.fits.");
-            return 40;
-        }
-        if (! psFitsWriteImage(sBiOutFile, NULL, sBiOut, 1) ) {
-            psError(PS_ERR_UNKNOWN, true,"Can not write sBiOut.fits.");
-            return 41;
-        }
-
-        // now, let's compare this with the verified file
-        psFitsMoveExtNum(fTruthFile, index, false);
-        psFitsMoveExtNum(sTruthFile, index, false);
-        psFitsMoveExtNum(fBiTruthFile, index, false);
-        psFitsMoveExtNum(sBiTruthFile, index, false);
-        fTruth = psFitsReadImage(fTruth, fTruthFile, regionAll, 0);
-        sTruth = psFitsReadImage(sTruth, sTruthFile, regionAll, 0);
-        fBiTruth = psFitsReadImage(fBiTruth, fBiTruthFile, regionAll, 0);
-        sBiTruth = psFitsReadImage(sBiTruth, sBiTruthFile, regionAll, 0);
-        if (fTruth == NULL) {
-            psError(PS_ERR_UNKNOWN, true,"verified psF32 image failed to be read (%d deg. rotation)",
-                    rot);
-            fail = true;
-        } else {
-            if (fTruth->numRows != fOut->numRows || fTruth->numCols != fOut->numCols) {
-                psError(PS_ERR_UNKNOWN, true,"Rotated float image size did not match truth "
-                        "image for %d deg rotation (%dx%d vs %dx%d).",
-                        rot,fOut->numCols,fOut->numRows,fTruth->numCols,fTruth->numRows);
-                fail = true;
-            } else {
-                for (psS32 row=0;row<fTruth->numRows;row++) {
-                    psF32* truthRow = fTruth->data.F32[row];
-                    psF32* outRow = fOut->data.F32[row];
-                    for (psS32 col=0;col<fTruth->numCols;col++) {
-                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
-                            psError(PS_ERR_UNKNOWN, true,"Float Image mismatch (%f vs %f) at %d,%d.",
-                                    outRow[col], truthRow[col],col,row);
-                            fail = true;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (sTruth == NULL) {
-            psError(PS_ERR_UNKNOWN, true,"verified psS16 image failed to be read "
-                    "(%d deg. rotation)",rot);
-            fail = true;
-        } else {
-            if (sTruth->numRows != sOut->numRows ||
-                    sTruth->numCols != sOut->numCols) {
-                psError(PS_ERR_UNKNOWN, true,"Rotated psS16 image size did not match truth "
-                        "image for %d deg rotation.",rot);
-                fail = true;
-            } else {
-                for (psS32 row=0;row<sTruth->numRows;row++) {
-                    psS16* truthRow = sTruth->data.S16[row];
-                    psS16* outRow = sOut->data.S16[row];
-                    for (psS32 col=0;col<sTruth->numCols;col++) {
-                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
-                            psError(PS_ERR_UNKNOWN, true,"Short Image mismatch (%d vs %d) "
-                                    "at %d,%d.",
-                                    outRow[col], truthRow[col],col,row);
-                            fail = true;
-                        }
-                    }
-                }
-            }
-        }
-
-
-        if (fBiTruth == NULL) {
-            psError(PS_ERR_UNKNOWN, true,"verified psF32 Bi image failed to be read (%d deg. rotation)",
-                    rot);
-            fail = true;
-        } else {
-            if (fBiTruth->numRows != fBiOut->numRows || fBiTruth->numCols != fBiOut->numCols) {
-                psError(PS_ERR_UNKNOWN, true,"Rotated float image size did not match truth "
-                        "image for %d deg rotation (%dx%d vs %dx%d). BILINEAR",
-                        rot,fBiOut->numCols,fBiOut->numRows,fBiTruth->numCols,fBiTruth->numRows);
-                fail = true;
-            } else {
-                for (psS32 row=0;row<fBiTruth->numRows;row++) {
-                    psF32* truthRow = fBiTruth->data.F32[row];
-                    psF32* outRow = fBiOut->data.F32[row];
-                    for (psS32 col=0;col<fBiTruth->numCols;col++) {
-                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
-                            psError(PS_ERR_UNKNOWN, true,"Float Image mismatch (%f vs %f) at %d,%d. BILINEAR",
-                                    outRow[col], truthRow[col],col,row);
-                            fail = true;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (sBiTruth == NULL) {
-            psError(PS_ERR_UNKNOWN, true,"verified psS16 image failed to be read "
-                    "(%d deg. rotation) BILINEAR",rot);
-            fail = true;
-        } else {
-            if (sBiTruth->numRows != sBiOut->numRows ||
-                    sBiTruth->numCols != sBiOut->numCols) {
-                psError(PS_ERR_UNKNOWN, true,"Rotated psS16 image size did not match truth "
-                        "image for %d deg rotation. BILINEAR",rot);
-                fail = true;
-            } else {
-                for (psS32 row=0;row<sBiTruth->numRows;row++) {
-                    psS16* truthRow = sBiTruth->data.S16[row];
-                    psS16* outRow = sBiOut->data.S16[row];
-                    for (psS32 col=0;col<sBiTruth->numCols;col++) {
-                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
-                            psError(PS_ERR_UNKNOWN, true,"Short Image mismatch (%d vs %d) "
-                                    "at %d,%d. BILINEAR",
-                                    outRow[col], truthRow[col],col,row);
-                            fail = true;
-                        }
-                    }
-                }
-            }
-        }
-
-        index++;
-    }
-
-    if (fail) {
-        psError(PS_ERR_UNKNOWN, true,"One or more images didn't match truth or truth did "
-                "not exist.");
-        return 10;
-    }
-
-
-    // Verify the returned psImage structure pointer is null and program
-    // execution doesn't stop, if the input parameter input is null.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
-    fOut = psImageRotate(fOut,NULL,0,0,PS_INTERPOLATE_FLAT);
-    if (fOut != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"NULL wasn't returned though the input image was NULL.");
-        return 3;
-    }
-
-    // Verify the returned psImage structure pointer is null and program
-    // execution doesn't stop, if the specified interpolation mode is invalid
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invalid "
-             "interpolation type.");
-    fOut = psImageRotate(fOut, fImg, 33, 0, -1);
-    if (fOut != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"NULL wasn't returned though the interpolation mode "
-                "is invalid.");
-        return 4;
-    }
-
-    psFree(sOut);
-    psFree(fImg);
-    psFree(sImg);
-    psFree(fTruth);
-    psFree(sTruth);
-    psFree(sBiOut);
-    psFree(fBiTruth);
-    psFree(sBiTruth);
-    psFree(fBiOut);
-
-    psFree(fOutFile);
-    psFree(sOutFile);
-    psFree(fBiOutFile);
-    psFree(sBiOutFile);
-
-    psFree(fTruthFile);
-    psFree(sTruthFile);
-    psFree(fBiTruthFile);
-    psFree(sBiTruthFile);
-
-    return 0;
-}
-
-static psS32 testImageShift(void)
-{
-    /* psImageShift:
-
-       This functions shall generate a new psImage structure by shifting the
-       input psImage structure a specified number of pixels in the horizontal
-       and/or vertical directions.
-
-       Verify the returned psImage structure contains expected values, if the
-       input psImage structure contains known values and a know shift in the
-       vertical and/or horizontal directions. Cases should include no shift,
-       vertical only(up,down), horizontal only(right, left), and combination
-       shift. Cases should include fractional shifts. Comparison of expected
-       values should include a delta to allow for testing on different
-       platforms.
-
-       Verify the returned psImage structure contains values for pixels not in
-       the original image set to the input parameter exposed.
-
-    */
-
-    psS32 retVal=0;
-
-    // integer shift
-    retVal |= testImageShiftCase(64,128,0.0f,0.0f);
-    retVal |= testImageShiftCase(64,128,0.0f,16.0f);
-    retVal |= testImageShiftCase(64,128,0.0f,-16.0f);
-    retVal |= testImageShiftCase(64,128,32.0f,0.0f);
-    retVal |= testImageShiftCase(64,128,-32.0f,0.0f);
-    retVal |= testImageShiftCase(64,128,32.0f,16.0f);
-    retVal |= testImageShiftCase(64,128,32.0f,-16.0f);
-    retVal |= testImageShiftCase(64,128,-32.0f,16.0f);
-    retVal |= testImageShiftCase(64,128,-32.0f,-16.0f);
-
-    if (retVal != 0) {
-        return retVal;
-    }
-
-    // fractional shift
-    retVal |= testImageShiftCase(64,128,0.0f,16.4f);
-    retVal |= testImageShiftCase(64,128,0.0f,-16.4f);
-    retVal |= testImageShiftCase(64,128,32.7f,0.0f);
-    retVal |= testImageShiftCase(64,128,-32.7f,0.0f);
-    retVal |= testImageShiftCase(64,128,32.6f,16.2f);
-    retVal |= testImageShiftCase(64,128,32.6f,-16.2f);
-    retVal |= testImageShiftCase(64,128,-32.6f,16.2f);
-    retVal |= testImageShiftCase(64,128,-32.6f,-16.2f);
-
-    if (retVal != 0) {
-        return retVal;
-    }
-
-    /*
-       Verify the returned psImage structure pointer is equal to the input
-       parameter out if provided.
-    */
-    psImage* fImg = psImageAlloc(32,32,PS_TYPE_F32);
-    psImage* fRecycle = psImageAlloc(32,32,PS_TYPE_F32);
-    psImage* fOut = psImageShift(fRecycle, fImg, 8,8, NAN, PS_INTERPOLATE_FLAT);
-
-    if (fRecycle != fOut) {
-        psError(PS_ERR_UNKNOWN, true,"psImageShift didn't recycle my image?");
-        return 10;
-    }
-
-    /*
-       Verify the returned psImage structure pointer is null and program
-       execution doesn't stop, if the input psImage structure pointer is null.
-    */
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error...");
-    fOut = psImageShift(fOut,NULL,8,8,NAN,PS_INTERPOLATE_FLAT);
-    if (fOut != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageShift didn't return NULL given a NULL input image.");
-        return 11;
-    }
-
-    // Verify the returned psImage structure is null and program execution
-    // doesn't stop, if the specified interpolation mode is invalid.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invalid interpolation mode.");
-    fOut = psImageShift(fOut,fImg,8,8,NAN,-1);
-    if (fOut != NULL ) {
-        psError(PS_ERR_UNKNOWN, true,"psImageShift didn't return NULL given an invalid interpolation mode.");
-        return 12;
-    }
-
-    psFree(fImg);
-
-    return 0;
-}
-
-static psS32 testImageShiftCase(psS32 cols,
-                                psS32 rows,
-                                float colShift,
-                                float rowShift)
-{
-    psImage* fOut = NULL;
-    psImage* sOut = NULL;
-
-    psLogMsg(__func__,PS_LOG_INFO,"Testing psImageShift with a %dx%d image for "
-             "a shift of %g,%g.",cols,rows,colShift,rowShift);
-
-    psImage* fImg = psImageAlloc(cols,rows,PS_TYPE_F32);
-    psImage* sImg = psImageAlloc(cols,rows,PS_TYPE_S16);
-    psImage* fBiOut = psImageAlloc(cols,rows,PS_TYPE_F32);
-    psImage* sBiOut = psImageAlloc(cols,rows,PS_TYPE_S16);
-
-    for(psS32 row=0;row<rows;row++) {
-        psF32* fRow = fImg->data.F32[row];
-        psS16* sRow = sImg->data.S16[row];
-        for (psS32 col=0;col<cols;col++) {
-            fRow[col] = (psF32)(row)+(psF32)(col)/100.0f;
-            sRow[col] = row-2*col;
-        }
-    }
-
-    fOut = psImageShift(fOut, fImg, colShift, rowShift, NAN, PS_INTERPOLATE_FLAT);
-    sOut = psImageShift(sOut, sImg, colShift, rowShift, -1, PS_INTERPOLATE_FLAT);
-    fBiOut = psImageShift(fBiOut, fImg, colShift, rowShift, NAN, PS_INTERPOLATE_BILINEAR);
-    sBiOut = psImageShift(sBiOut, sImg, colShift, rowShift, -1, PS_INTERPOLATE_BILINEAR);
-
-    for(psS32 row=0;row<rows;row++) {
-        psF32* fRow = fOut->data.F32[row];
-        psS16* sRow = sOut->data.S16[row];
-        psF32* fBiRow = fBiOut->data.F32[row];
-        psS16* sBiRow = sBiOut->data.S16[row];
-
-        for (psS32 col=0;col<cols;col++) {
-            psF32 fValue = psImagePixelInterpolate(fImg,col+colShift,
-                                                   row+rowShift,NULL,0,NAN,PS_INTERPOLATE_FLAT);
-            psS16 sValue = (psS16)psImagePixelInterpolate(sImg,col+colShift,
-                           row+rowShift,NULL,0,-1,PS_INTERPOLATE_FLAT);
-
-            psF32 fBiValue = psImagePixelInterpolate(fImg,col+colShift,
-                             row+rowShift,NULL,0,NAN,PS_INTERPOLATE_BILINEAR);
-            psS16 sBiValue = (psS16)psImagePixelInterpolate(sImg,col+colShift,
-                             row+rowShift,NULL,0,-1,PS_INTERPOLATE_BILINEAR);
-
-            if (fabsf(fRow[col] - fValue) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"Float image not shifted correctly at %d,%d (%g vs %g)",
-                        col,row,fRow[col],fValue);
-                return 1;
-            }
-            if (sRow[col] != sValue) {
-                psError(PS_ERR_UNKNOWN, true,"Short image not shifted correctly at %d,%d (%d vs %d)",
-                        col,row,sRow[col],sValue);
-                return 2;
-            }
-            if (fabsf(fBiRow[col] - fBiValue) > FLT_EPSILON) {
-                psError(PS_ERR_UNKNOWN, true,"Float image not shifted correctly at %d,%d (%g vs %g)",
-                        col,row,fBiRow[col],fBiValue);
-                return 1;
-            }
-            if (sBiRow[col] != sBiValue) {
-                psError(PS_ERR_UNKNOWN, true,"Short image not shifted correctly at %d,%d (%d vs %d)",
-                        col,row,sBiRow[col],sBiValue);
-                return 2;
-            }
-        }
-    }
-
-    psFree(fImg);
-    psFree(sImg);
-    psFree(fOut);
-    psFree(sOut);
-    psFree(fBiOut);
-    psFree(sBiOut);
-
-    return 0;
-}
-
-static psS32 testImageResample(void)
-{
-
-    psS32 rows = 60;
-    psS32 cols = 80;
-    psImage* result = NULL;
-    psS32 scale = 4;
-    psErr* err;
-
-    psImage* image = psImageAlloc(cols,rows,PS_TYPE_F32);
-    for(psS32 row=0;row<rows;row++) {
-        psF32* imageRow = image->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            imageRow[col] = row+2*col;
-        }
-    }
-    result = psImageCopy(NULL,image,PS_TYPE_F64);
-    psImage* orig = result;
-    result = psImageResample(result,image,scale,PS_INTERPOLATE_FLAT);
-
-    if (result == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "NULL return unexpected");
-        return 1;
-    }
-
-    if (result != orig) {
-        psLogMsg(__func__,PS_LOG_ERROR,"failure to recycle image.");
-        return 2;
-    }
-
-    if (result->type.type != PS_TYPE_F32) {
-        psLogMsg(__func__,PS_LOG_ERROR,"unexpected type");
-        return 3;
-    }
-
-
-    if (result->numCols != image->numCols*scale ||
-            result->numRows != image->numRows*scale) {
-        psLogMsg(__func__,PS_LOG_ERROR,"The size of the result is %dx%d, but %dx%d was expected.",
-                 result->numCols,result->numRows,
-                 image->numCols*scale, image->numRows*scale);
-        return 4;
-    }
-
-    psF32 truthValue;
-    for(psS32 row=0;row<result->numRows;row++) {
-        for (psS32 col=0;col<result->numCols;col++) {
-            truthValue = psImagePixelInterpolate(image,
-                                                 (float)col/(float)scale,(float)row/(float)scale,
-                                                 NULL,0,-1,PS_INTERPOLATE_FLAT);
-            if (fabs(truthValue - result->data.F32[row][col]) > FLT_EPSILON) {
-                psLogMsg(__func__,PS_LOG_ERROR,"value bad at (%d,%d).  Got %g, expected %g.",
-                         col,row,result->data.F32[row][col], truthValue);
-                return 5;
-            }
-        }
-    }
-
-    // verify that image=null is handled properly.
-    psErrorClear();
-    result = psImageResample(result,NULL,scale,PS_INTERPOLATE_FLAT);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "return was not NULL, as expected.");
-        return 6;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "error message was not appropriate type.");
-        return 7;
-    }
-    psFree(err);
-
-    // verify that scale < 1 is handled properly
-    psErrorClear();
-    result = psImageResample(result,image,0,PS_INTERPOLATE_FLAT);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "return was not NULL, as expected.");
-        return 8;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "error message was not appropriate type.");
-        return 9;
-    }
-    psFree(err);
-
-    // verify that invalid interpolation mode is handled properly
-    psErrorClear();
-    result = psImageResample(result,image,2,-1);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "return was not NULL, as expected.");
-        return 10;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "error message was not appropriate type.");
-        return 11;
-    }
-    psFree(err);
-
-    // Verify that that an invalid image type is handled properly
-    psErrorClear();
-    psImage* invImage = psImageAlloc(cols,rows,PS_TYPE_BOOL);
-    memset(invImage->rawDataBuffer,0,cols*rows*PSELEMTYPE_SIZEOF(PS_TYPE_BOOL)); // make sure the image is of all NULLs
-    result = psImageResample(result,invImage,2,PS_INTERPOLATE_FLAT);
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,"return was not NULL, as expected.");
-        return 20;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_TYPE) {
-        psLogMsg(__func__,PS_LOG_ERROR,"error message was not appropriate type.");
-        return 21;
-    }
-    psFree(err);
-
-    psFree(image);
-    psFree(result);
-    psFree(invImage);
-
-    return 0;
-}
-
-static psS32 testImageTransform(void)
-{
-    int cols = 16;
-    int rows = 32;
-
-    psPlaneTransform* trans = psPlaneTransformAlloc(2,2);
-    trans->x->coeff[1][0] = 0.5;
-    trans->y->coeff[0][1] = 1.5;
-
-    psImage* in = psImageAlloc(cols,rows,PS_TYPE_F32);
-    psImage* mask = psImageAlloc(cols,rows,PS_TYPE_MASK);
-    for (psS32 row=0;row<rows;row++) {
-        psF32* inRow = in->data.F32[row];
-        psMaskType* maskRow = mask->data.PS_TYPE_MASK_DATA[row];
-        for (psS32 col=0;col<cols;col++) {
-            inRow[col] = (psF32)row+(psF32)col/1000.0f;
-            maskRow[col] = 0;
-        }
-    }
-
-
-    // ********** check psImageTransform with minimum specified inputs.
-
-    psImage* out = psImageTransform(NULL,
-                                    NULL,
-                                    in,
-                                    NULL,
-                                    0,
-                                    trans,
-                                    psRegionSet(0,cols*2,0,rows*2),
-                                    NULL,
-                                    PS_INTERPOLATE_FLAT,
-                                    -1);
-
-    if (out == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "out == NULL");
-        return 1;
-    }
-    if (out->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN, false,
-                "out->type.type != PS_TYPE_F32, out->type.type == %d",
-                out->type.type);
-        return 2;
-    }
-    if (out->numRows != rows*2 || out->numCols != cols*2) {
-        psError(PS_ERR_UNKNOWN, false,
-                "out size is %dx%d, not %dx%d",
-                out->numCols, out->numRows, cols*2, rows);
-        return 3;
-    }
-
-    for (psS32 row=0;row<out->numRows;row++) {
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            float inValue = p_psImagePixelInterpolateFLAT_F32(in,
-                            col*trans->x->coeff[1][0]+trans->x->coeff[0][0],
-                            row*trans->y->coeff[0][1]+trans->y->coeff[0][0],
-                            NULL, 0,
-                            -1);
-            if (fabsf(outRow[col] - inValue) > FLT_EPSILON*10) {
-                psError(PS_ERR_UNKNOWN, false,
-                        "out at %d,%d was %g, expected %g",
-                        col,row,outRow[col], inValue);
-                return 4;
-            }
-        }
-    }
-
-    // zero out buffer
-    memset(out->rawDataBuffer, 0, sizeof(psF32)*out->numRows*out->numCols);
-
-    psPixels* blanks = psPixelsAlloc(10);
-    psPixels* mask = psPixelsAlloc(10);
-
-    // perform the same transform, but this time, supply a psImage to recycle and a mask
-    out = psImageTransform(out,
-                           blanks,
-                           in,
-                           mask,
-                           1,
-                           trans,
-                           psRegionSet(0,0,0,0),
-                           NULL,
-                           PS_INTERPOLATE_FLAT,
-                           -1);
-
-    if (out == NULL) {
-        psError(PS_ERR_UNKNOWN, false,
-                "out == NULL");
-        return 1;
-    }
-    if (out->type.type != PS_TYPE_F32) {
-        psError(PS_ERR_UNKNOWN, false,
-                "out->type.type != PS_TYPE_F32, out->type.type == %d",
-                out->type.type);
-        return 2;
-    }
-    if (out->numRows != rows*2 || out->numCols != cols*2) {
-        psError(PS_ERR_UNKNOWN, false,
-                "out size is %dx%d, not %dx%d",
-                out->numCols, out->numRows, cols*2, rows);
-        return 3;
-    }
-
-    for (psS32 row=0;row<out->numRows;row++) {
-        psF32* outRow = out->data.F32[row];
-        for (psS32 col=0;col<cols;col++) {
-            float inValue = p_psImagePixelInterpolateFLAT_F32(in,
-                            col*trans->x->coeff[1][0]+trans->x->coeff[0][0],
-                            row*trans->y->coeff[0][1]+trans->y->coeff[0][0],
-                            NULL, 0,
-                            -1);
-            if (fabsf(outRow[col] - inValue) > FLT_EPSILON*10) {
-                psError(PS_ERR_UNKNOWN, false,
-                        "out at %d,%d was %g, expected %g",
-                        col,row,outRow[col], inValue);
-                return 4;
-            }
-        }
-    }
-
-
-    psFree(out);
-    psFree(in);
-    psFree(trans);
-    return 0;
-}
Index: unk/psLib/test/image/tst_psImageInterpolate.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageInterpolate.c	(revision 4546)
+++ 	(revision )
@@ -1,282 +1,0 @@
-/** @file tst_psImageInterpolate.c
- *
- * @brief Contains the tests for psImagePixelInterpolate
- *
- * @author Eric Van Alst, MHPCC
- *
- * @version $Revision: 1.6 $
- *          $Name: not supported by cvs2svn $
- * @date $Date: 2005-04-07 20:27:42 $
- *
- * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "psTest.h"
-#include "pslib_strict.h"
-
-#define GENIMAGE(img,c,r,TYP,valueFcn) \
-img = psImageAlloc(c,r,PS_TYPE_##TYP); \
-for(psU32 row=0; row<r; row++) { \
-    ps##TYP* imgRow = img->data.TYP[row]; \
-    for(psU32 col=0; col<c; col++) { \
-        imgRow[col] = (ps##TYP)(valueFcn); \
-    } \
-}
-
-#define CHECK_INTERP_VALUE(img,x,y,mask,maskval,exposed,TYPE,expected) \
-val = (psF32)psImagePixelInterpolate(img,x,y,mask,maskval,exposed,PS_INTERPOLATE_##TYPE); \
-printf("returned = %.2f    expected = %.2f\n",val,expected); \
-if(fabsf(val-expected)>FLT_EPSILON) { \
-    psError(PS_ERR_UNKNOWN,true,"Return value is not as expected."); \
-    return 1; \
-}
-
-#define CHECK_INTERP_BY_TYPE(TYPE) \
-GENIMAGE(img1,10,10,TYPE,row+col) \
-CHECK_INTERP_VALUE(img1,1.9,1.6,NULL,0,0,FLAT,2.0) \
-CHECK_INTERP_VALUE(img1,4.0,2.0,NULL,0,0,BILINEAR,5.0) \
-psFree(img1);
-
-static psS32 testInterpolateFlatBilinear(void);
-static psS32 testInterpolateError(void);
-static psS32 testInterpolateMaskFlatBilinear(void);
-static psS32 testInterpolate1D(void);
-
-testDescription tests[] = {
-                              {testInterpolateFlatBilinear,999,"psImagePixelInterpolate",0,false},
-                              {testInterpolateError,999,"psImagePixelInterpolate",0,false},
-                              {testInterpolateMaskFlatBilinear,999,"psImagePixelInterpolate",0,false},
-                              {testInterpolate1D,999,"psImagePixelInterpolate",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    if ( !runTestSuite(stderr,"psImagePixelInterpolate",tests,argc,argv) ) {
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-psS32 testInterpolateFlatBilinear(void)
-{
-    psImage* img1;
-    psF32 val = 0;
-
-    // Perform simple(four neighbor) FLAT interpolation for all types
-    // Perform bilinear interpolation for all types
-    CHECK_INTERP_BY_TYPE(S8)
-    CHECK_INTERP_BY_TYPE(S16)
-    CHECK_INTERP_BY_TYPE(S32)
-    CHECK_INTERP_BY_TYPE(S64)
-    CHECK_INTERP_BY_TYPE(U8)
-    CHECK_INTERP_BY_TYPE(U16)
-    CHECK_INTERP_BY_TYPE(U32)
-    CHECK_INTERP_BY_TYPE(U64)
-    CHECK_INTERP_BY_TYPE(F32)
-    CHECK_INTERP_BY_TYPE(F64)
-    CHECK_INTERP_BY_TYPE(C32)
-    CHECK_INTERP_BY_TYPE(C64)
-
-    return 0;
-}
-
-psS32 testInterpolateError(void)
-{
-    psF32 val = 0;
-    psImage* img1 = NULL;
-
-    // Perform interpolation with NULL input image and verify return and error message
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,5.0,PS_INTERPOLATE_FLAT);
-    if(val != 5.0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
-        return 10;
-    }
-
-    // Perform interpolation with invalid input image type
-    img1 = psImageAlloc(10,10,PS_TYPE_BOOL);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,10.0,PS_INTERPOLATE_FLAT);
-    if(val != 10.0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
-        return 11;
-    }
-
-    // Perform interpolation with invalid method
-    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
-    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,10.0,PS_INTERPOLATE_BILINEAR+1);
-    if(val != 10.0) {
-        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
-        return 12;
-    }
-
-    psFree(img1);
-
-    return 0;
-}
-
-// The following assumptions about the test image are:
-//
-//                     col
-//             0   1   2   3   4   5   6   7  ...
-//
-// row 0       0   1   2   3   4   5   6   7
-// row 1       1   2   3   4   5   6   7   8
-// row 2       2   3   4   5   6   7   8   9
-// ...
-
-psS32 testInterpolateMaskFlatBilinear(void)
-{
-    psImage* img1 = NULL;
-    psImage* msk1 = NULL;
-    psF32 val = 0;
-
-    // Perform interpolate with mask and mask value set at nearest pixel to verify
-    // the unexposed value is return
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][1] = 1;
-    CHECK_INTERP_VALUE(img1,1.9,1.6,msk1,1,10.0,FLAT,10.0)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (upper left pixel)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.25)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (upper right pixel)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.75)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (lower left pixel)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[2][3] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.25)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (lower right pixel)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.75)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (upper pixels)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    msk1->data.U8[1][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.5)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (lower pixels)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[2][3] = 1;
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.5)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (left pixels)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    msk1->data.U8[2][3] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.5)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask and one mask value for bilinear (right pixels)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][4] = 1;
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.5)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask only one valid pixel (upper left)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][4] = 1;
-    msk1->data.U8[2][3] = 1;
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.0)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask only one valid pixel (upper right)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    msk1->data.U8[2][3] = 1;
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.0)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask only one valid pixel (lower left)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    msk1->data.U8[1][4] = 1;
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.0)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask only one valid pixel (lower right)
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    msk1->data.U8[1][4] = 1;
-    msk1->data.U8[2][3] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,6.0)
-    psFree(msk1);
-    psFree(img1);
-
-    // Perform interpolate with mask no valid pixels
-    GENIMAGE(img1,10,10,F32,row+col)
-    GENIMAGE(msk1,10,10,U8,0)
-    msk1->data.U8[1][3] = 1;
-    msk1->data.U8[1][4] = 1;
-    msk1->data.U8[2][3] = 1;
-    msk1->data.U8[2][4] = 1;
-    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,0.0)
-    psFree(msk1);
-    psFree(img1);
-    return 0;
-}
-
-// Perform interpolation for a 1D image
-psS32 testInterpolate1D(void)
-{
-    psImage* img1 = NULL;
-    psF32 val = 0;
-
-    GENIMAGE(img1,10,1,F32,row+col)
-    CHECK_INTERP_VALUE(img1,4.0,0.0,NULL,0,100.0,BILINEAR,3.5)
-
-    psFree(img1);
-
-    return 0;
-}
-
Index: unk/psLib/test/image/tst_psImagePixelExtract.c
===================================================================
--- /trunk/psLib/test/image/tst_psImagePixelExtract.c	(revision 4546)
+++ 	(revision )
@@ -1,743 +1,0 @@
-/** @file  tst_psImageExtraction.c
-*
-*  @brief Contains the tests for psImageExtraction.[ch]
-*
-*
-*  @author Robert DeSonia, MHPCC
-*
-*  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-06-10 02:30:47 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-#include<stdlib.h>
-#include<string.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-#include "psType.h"
-
-static psS32 testImageSlice(void);
-static psS32 testImageCut(void);
-static psS32 testImageRadialCut(void);
-
-
-testDescription tests[] = {
-                              {testImageSlice, 552, "psImageSlice", 0, false},
-                              {testImageCut, 555, "psImageCut", 0, false},
-                              {testImageRadialCut, 557, "psImageRadialCut", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    return ! runTestSuite( stderr, "psImage", tests, argc, argv );
-}
-
-psS32 testImageSlice(void)
-{
-    const psS32 r = 200;
-    const psS32 c = 300;
-    const psS32 m = r / 2 -1;
-    const psS32 n = r / 4 -1;
-    psVector* out = NULL;
-    psImage* image;
-    psVector* positions = psVectorAlloc( r, PS_TYPE_U32 );
-    psImage* mask = psImageAlloc( c, r, PS_TYPE_MASK );
-    psStats* stat = psStatsAlloc( PS_STAT_SAMPLE_MEDIAN );
-
-    /*
-        This function shall extract pixels from a specified region of a psImage
-        structure into a vector using a specified statistical method.
-
-        Verify the returned psVector structure contains expected data, if the
-        input psImage input has known data and the psStats structure specifies
-        a known statistical method. At least two different statistical methods
-        should be used within a valid range of psImage data. Allow for a delta
-        when comparing results to allow for testing a different platforms. Two
-        cases should be used for each possible direction. Data region cases
-        should include 0x0, 1x1, Nx1, 1xN, NxN, MxN
-
-     */
-
-    for ( psS32 row = 0;row < r;row++ ) {
-        psMaskType* maskRow = mask->data.PS_TYPE_MASK_DATA[row];
-        for ( psS32 col = 0;col < c;col++ ) {
-            maskRow[ col ] = 0;
-        }
-    }
-
-    #define PSIMAGESLICE_TEST1(TYPE,M,N,DIRECTION,TRUTH_SIZE,TRUTHPIX_X,TRUTHPIX_Y,TESTNUM) \
-    image = psImageAlloc( c, r, PS_TYPE_##TYPE ); \
-    for ( psS32 row = 0;row < r;row++ ) { \
-        ps##TYPE *imageRow = image->data.TYPE[ row ]; \
-        ps##TYPE rowOffset = row * 2; \
-        for ( psS32 col = 0;col < c;col++ ) { \
-            imageRow[ col ] = col + rowOffset; \
-        } \
-    } \
-    out = psImageSlice(out,positions,image,mask,1,psRegionSet(c/10,c/10+M,r/10,r/10+N),DIRECTION,stat); \
-    \
-    if (out->n != TRUTH_SIZE) { \
-        psError(PS_ERR_UNKNOWN,true,"Number of results is wrong (%d, not %d)", \
-                out->n,n); \
-        return TESTNUM*4+1; \
-    } \
-    \
-    if (positions->n != TRUTH_SIZE) { \
-        psError(PS_ERR_UNKNOWN,true,"Number of results for positions vector is wrong (%d, not %d)", \
-                out->n,n); \
-        return TESTNUM*4+2; \
-    } \
-    \
-    for (psS32 i=0;i<out->n;i++) { \
-        if (fabs(out->data.F64[i]-image->data.TYPE[r/10+TRUTHPIX_Y][c/10+TRUTHPIX_X]) > 1.0/(psF64)r) { \
-            psError(PS_ERR_UNKNOWN,true,"Improper result at position %d.  Got %g, expected %g",i, \
-                    out->data.F64[i],image->data.TYPE[r/10+TRUTHPIX_Y][c/10+TRUTHPIX_X]); \
-            return TESTNUM*4+3; \
-        } \
-        if (DIRECTION == PS_CUT_X_POS || DIRECTION == PS_CUT_X_NEG) { \
-            if (positions->data.U32[i] != c/10+TRUTHPIX_X) { \
-                psError(PS_ERR_UNKNOWN,true,"Improper positions (%d vs %d) result @ %d.", \
-                        positions->data.U32[i],c/10+TRUTHPIX_X,i); \
-                return TESTNUM*4+4; \
-            } \
-        } else { \
-            if (positions->data.U32[i] != r/10+TRUTHPIX_Y) { \
-                psError(PS_ERR_UNKNOWN,true,"Improper positions (%d vs %d) result @ %d.", \
-                        positions->data.U32[i],r/10+TRUTHPIX_Y,i); \
-                return TESTNUM*4+4; \
-            } \
-        } \
-    } \
-    psFree(image);
-
-    #define PSIMAGESLICE_TEST(TYPE) \
-    /* test MxN case */ \
-    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_X_POS, m, i, n / 2, 0 ); \
-    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_X_NEG, m, m - 1 - i, n / 2, 1 ); \
-    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_Y_POS, n, m / 2, i, 2 ); \
-    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_Y_NEG, n, m / 2, n - 1 - i, 3 ); \
-    \
-    /* test Mx1 case */ \
-    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_X_POS, m, i, 0, 4 ); \
-    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_X_NEG, m, m - 1 - i, 0, 5 ); \
-    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_Y_POS, 1, m / 2, 0, 6 ); \
-    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_Y_NEG, 1, m / 2, 0, 7 ); \
-    \
-    /* test 1xN case */ \
-    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_X_POS, 1, 0, n / 2, 8 ); \
-    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_X_NEG, 1, 0, n / 2, 9 ); \
-    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_Y_POS, n, 0, i, 10 ); \
-    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_Y_NEG, n, 0, n - 1 - i, 11 ); \
-    \
-    /* test 1x1 case */ \
-    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_X_POS, 1, 0, 0, 12 ); \
-    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_X_NEG, 1, 0, 0, 13 ); \
-    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_Y_POS, 1, 0, 0, 14 ); \
-    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_Y_NEG, 1, 0, 0, 15 ); \
-
-    PSIMAGESLICE_TEST(F32);
-    PSIMAGESLICE_TEST(F64);
-    PSIMAGESLICE_TEST(U16);
-
-    image = psImageAlloc( c, r, PS_TYPE_F32 );
-
-    /*
-       Verify the returned psVector structure pointer is null and program
-       execution doesn't stop, if input psImage input is null.
-
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out,
-                        NULL, NULL,
-                        NULL, 0,
-                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
-                        PS_CUT_X_POS,
-                        stat );
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving a NULL image, psImageSlice didn't return NULL as expected" );
-        return 101;
-    }
-
-
-    /*
-       Verify the returned psVector structure pointer is null and program
-       execution doesn't stop, if input psStats stats is null.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out,
-                        NULL, image,
-                        mask, 1,
-                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
-                        PS_CUT_X_POS,
-                        NULL );
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving a NULL stat struct, psImageSlice didn't return NULL as expected" );
-        return 102;
-    }
-    /*
-
-       Verify the returned psVector structure pointer is null and program
-       executions doesn't stop, if the input direction is not set to one of
-       the two valid values.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out, NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
-                        5,
-                        stat);
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving a bogus direction flag, psImageSlice didn't return NULL as expected" );
-        return 103;
-    }
-
-    /*
-       Verify the returned psVector structure pointer is null and program
-       execution doesn't stop, if the input nrow and/or ncol are zero.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out,
-                        NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c/10, c/10, r/10, r/10),
-                        PS_CUT_X_POS,
-                        stat );
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving a 0x0 region, psImageSlice didn't return NULL as expected" );
-        return 104;
-    }
-
-    /*
-       Verify the returned psVector structure pointer is null and program
-       execution doesn't stop, if the inputs row, col, nrow, ncol specify a
-       regions of data that is not within the input psImage structure.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out, NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c+1, c+2, r/10, r/10 + 10),
-                        PS_CUT_X_POS,
-                        stat );
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving an invalid x position, psImageSlice didn't return NULL as expected" );
-        return 105;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out, NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c/10, c/10 + 1, r+1,r+5),
-                        PS_CUT_X_POS,
-                        stat );
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving an invalid y position, psImageSlice didn't return NULL as expected" );
-        return 106;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out, NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c/10, c+1, r/10, r/10+1),
-                        PS_CUT_X_POS,
-                        stat);
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving an invalid numCols, psImageSlice didn't return NULL as expected" );
-        return 107;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    out = psImageSlice( out, NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c/10, c/10 + 1, r/10, r + 1),
-                        PS_CUT_X_POS,
-                        stat);
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving an invalid numRows, psImageSlice didn't return NULL as expected" );
-        return 108;
-    }
-
-    /*
-       Verify the returned psVector structure pointer is null and program
-       execution doesn't stop, if the input psStat structure member options is
-       zero which indicates no statistic method specified.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
-    stat->options = 0;
-    out = psImageSlice( out, NULL,
-                        image,
-                        mask, 1,
-                        psRegionSet(c/10, c/10 + 1, r/10, r/10+1),
-                        PS_CUT_X_POS,
-                        stat);
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Giving an invalid numRows, psImageSlice didn't return NULL as expected" );
-        return 109;
-    }
-
-    /* Verify that a mask of different size than the input image returns null and program
-       execution doesn't stop.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error mask size != image size.");
-    stat->options = PS_STAT_SAMPLE_MEDIAN;
-    psImage* maskSz = psImageAlloc( r, c, PS_TYPE_MASK );
-    out = psImageSlice( out, NULL,
-                        image,
-                        maskSz, 1,
-                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
-                        PS_CUT_X_POS,
-                        stat);
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Mask size different than image size didn't return NULL as expected" );
-        return 110;
-    }
-
-    /* Verify the a invalid type mask returns null and program execution doesn't stop.
-    */
-    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error invalid mask type.");
-    psImage* maskS8 = psImageAlloc( c, r, PS_TYPE_S8 );
-    out =  psImageSlice( out, NULL,
-                         image,
-                         maskS8, 1,
-                         psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
-                         PS_CUT_X_POS,
-                         stat);
-    if ( out != NULL ) {
-        psError( PS_ERR_UNKNOWN,true, "Mask invalid type didn't return NULL as expected.");
-        return 111;
-    }
-
-    psFree( image );
-    psFree( positions );
-    psFree( mask );
-    psFree( out );
-    psFree( stat );
-    psFree( maskS8 );
-    psFree( maskSz );
-
-    return 0;
-
-}
-
-static psS32 testImageCut(void)
-{
-    psS32 c = 300;
-    psS32 r = 200;
-    psS32 numPoints = 15;
-    float startCol[] = { 40,150, 40,  0,280, 40,280, -1,300, 20, 20, 20, 20, 20, 20};
-    float endCol[] =   {240,150,240,299, 40,240, 40,240,240, -1,300,240,240,240,240};
-    float startRow[] = { 20, 10,100,  0, 20,180,180, 10, 10, 10, 10, -1,200, 10, 10};
-    float endRow[] =   {160,180,100,199,160, 10, 10,180,180,180,180,180,180, -1,200};
-    psBool success[] = {true,true,true,true,true,true,true,false,false,false,false,false,false,false,false};
-    psU32 length = 100;
-
-    psImage* image = psImageAlloc(c,r,PS_TYPE_F32);
-    psImage* mask = psImageAlloc(c,r,PS_TYPE_MASK);
-    for (psS32 row = 0; row < image->numRows; row++) {
-        for (psS32 col = 0; col < image->numCols; col++) {
-            image->data.F32[row][col] = (psF32)col + (psF32)row/1000.0f;
-            if ((row & 0x0F) == 0) {
-                mask->data.PS_TYPE_MASK_DATA[row][col] = 1;
-            } else {
-                mask->data.PS_TYPE_MASK_DATA[row][col] = 0;
-            }
-        }
-    }
-    psVector* rows = psVectorAlloc(length,PS_TYPE_F32);
-    psVector* cols = psVectorAlloc(length,PS_TYPE_F32);
-
-    psVector* result = NULL;
-    for (psS32 n = 0; n < numPoints; n++) {
-        psVector* orig = result;
-        if (! success[n]) {
-            psLogMsg(__func__,PS_LOG_INFO,"The following should be an error.");
-        }
-        if (n == 1) {
-            result = psImageCut(result,
-                                cols,rows,
-                                image,
-                                NULL,0,
-                                psRegionSet(startCol[n], endCol[n], startRow[n],endRow[n]),
-                                length,
-                                PS_INTERPOLATE_FLAT);
-        } else {
-            result = psImageCut(result,
-                                cols,rows,
-                                image,
-                                mask,1,
-                                psRegionSet(startCol[n], endCol[n], startRow[n], endRow[n]),
-                                length,
-                                PS_INTERPOLATE_FLAT);
-        }
-
-        if (success[n]) {
-            if (result == NULL) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "psImageCut returned NULL instead of a valid result.");
-                return n*10+1;
-            }
-
-            if (orig != NULL && orig != result) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "psImageCut didn't recycle the out parameter properly.");
-                return n*10+2;
-            }
-
-            float deltaRow = (endRow[n]-startRow[n])/(length-1);
-            float deltaCol = (endCol[n]-startCol[n])/(length-1);
-            psF32 truth;
-            for (psS32 i = 0; i < length; i++) {
-                float x = (float)startCol[n]+(float)i*deltaCol;
-                float y = (float)startRow[n]+(float)i*deltaRow;
-                if (n == 1) {
-                    truth = psImagePixelInterpolate( image, x, y,
-                                                     NULL,0,0,PS_INTERPOLATE_FLAT);
-                } else {
-                    truth = psImagePixelInterpolate( image, x, y,
-                                                     mask,1,0,PS_INTERPOLATE_FLAT);
-                }
-                if (fabs(result->data.F32[i]-truth) > FLT_EPSILON) {
-                    psLogMsg(__func__,PS_LOG_ERROR,
-                             "Bad result in position %d; Found %g but expected %g.",
-                             i, result->data.F32[i], truth);
-                    return n*10+5;
-                }
-                if (fabsf(x - cols->data.F32[i]) > FLT_EPSILON ||
-                        fabsf(y - rows->data.F32[i]) > FLT_EPSILON) {
-                    psLogMsg(__func__,PS_LOG_ERROR,
-                             "Bad resulting col/row at index %d; Found (%g,%g) but expected (%g,%g).",
-                             i, cols->data.F32[i], rows->data.F32[i], x, y);
-                    return n*10+6;
-                }
-            }
-        } else {
-            if (result != NULL) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "psImageCut did not return NULL with a cut of (%g,%g)->(%g,%g).",
-                         startCol[n],startRow[n],endCol[n],endRow[n]);
-                return n*10+7;
-            }
-            psErr* err = psErrorLast();
-            if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "psImageCut did not generate proper error message.");
-                return 105;
-            }
-            psFree(err);
-        }
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (NULL image).");
-    result = psImageCut(result,
-                        cols,rows,
-                        NULL,
-                        mask,1,
-                        psRegionSet(startCol[0], endCol[0], startRow[0], endRow[0]),
-                        length,
-                        PS_INTERPOLATE_FLAT);
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageCut did not return NULL given NULL image.");
-        return 100;
-    }
-    psErr* err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageCut did not generate proper error message given NULL image.");
-        return 101;
-    }
-    psFree(err);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (length=0).");
-    result = psImageCut(result,
-                        cols,rows,
-                        image,
-                        mask,1,
-                        psRegionSet(startCol[0], endCol[0], startRow[0], endRow[0]),
-                        0,
-                        PS_INTERPOLATE_FLAT);
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageCut did not return NULL given length=0.");
-        return 102;
-    }
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageCut did not generate proper error message given length=0.");
-        return 103;
-    }
-    psFree(err);
-
-    psFree(result);
-    psFree(image);
-    psFree(mask);
-    psFree(rows);
-    psFree(cols);
-
-    return 0;
-}
-
-static psS32 testImageRadialCut(void)
-{
-    psS32 c = 300;
-    psS32 r = 200;
-    psS32 centerX = c/2;
-    psS32 centerY = r/2;
-    psErr* err = NULL;
-
-    psImage* image = psImageAlloc(c,r,PS_TYPE_F32);
-    psImage* mask = psImageAlloc(c,r,PS_TYPE_MASK);
-    for (psS32 row = 0; row < image->numRows; row++) {
-        for (psS32 col = 0; col < image->numCols; col++) {
-            image->data.F32[row][col] = sqrtf((col-centerX)*(col-centerX)+(row-centerY)*(row-centerY));
-            if ((row & 0x0F) == 0) {
-                mask->data.PS_TYPE_MASK_DATA[row][col] = 1;
-            } else {
-                mask->data.PS_TYPE_MASK_DATA[row][col] = 0;
-            }
-        }
-    }
-
-    psStats* stat = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
-    psVector* radii = psVectorAlloc(10,PS_TYPE_F32);
-    for (psS32 i=0; i < 10; i++) {
-        radii->data.F32[i] = 10+i*10;
-    }
-
-    psVector* result = NULL;
-
-    result = psImageRadialCut(result,image,mask,1,centerX,centerY,radii,stat);
-
-    if (result == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value of NULL unexpected.");
-        return 1;
-    }
-
-    if (result->type.type != PS_TYPE_F64) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return type not psF64, as expected.");
-        return 2;
-    }
-
-    for (psS32 i=0; i < 9; i++) {
-        if (fabs(result->data.F64[i] - (15.0+i*10)) > 1) {
-            psLogMsg(__func__,PS_LOG_ERROR,
-                     "Result was not as expected for radii #%d (%g, expected %d +/- 1)",
-                     result->data.F64[i], (15.0+i*10) );
-            return 3+i;
-        }
-    }
-
-    // again, but without mask
-    psVector* orig = result;
-    result = psImageRadialCut(result,image,NULL,1,centerX,centerY,radii,stat);
-
-    if (result == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value of NULL unexpected.");
-        return 12;
-    }
-
-    if (result != orig) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value of is not same as input parameter 'out'.");
-        return 13;
-    }
-
-    for (psS32 i=0; i < 9; i++) {
-        if (fabs(result->data.F64[i] - (15.0+i*10)) > 1) {
-            psLogMsg(__func__,PS_LOG_ERROR,
-                     "Result was not as expected for radii #%d (%g, expected %d +/- 1)",
-                     result->data.F64[i], (15.0+i*10) );
-            return 14+i;
-        }
-    }
-
-    // NULL input image...
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,NULL,NULL,1,centerX,centerY,radii,stat);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 23;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 24;
-    }
-    psFree(err);
-
-    // NULL input radii...
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image,mask,1,centerX,centerY,NULL,stat);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 23;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 24;
-    }
-    psFree(err);
-
-    // NULL input stat...
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image,mask,1,centerX,centerY,radii,NULL);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 23;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 24;
-    }
-    psFree(err);
-
-    // Bad center X
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image,mask,1,
-                              c+1,centerY,radii,stat);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 25;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 26;
-    }
-    psFree(err);
-
-    // Bad center Y
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image,mask,1,
-                              centerX,r+1,radii,stat);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 27;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 28;
-    }
-    psFree(err);
-
-    // Bad mask type (N.B., swapped image/mask to do this)
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,mask,image,1,
-                              centerX,r+1,radii,stat);
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 29;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_TYPE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 30;
-    }
-    psFree(err);
-
-    // Bad mask size
-    psImage* mask2 = psImageAlloc(c/2,r/2,PS_TYPE_MASK);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image, mask2, 1,
-                              centerX,centerY,radii,stat);
-    psFree(mask2);
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 31;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_SIZE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 32;
-    }
-    psFree(err);
-
-    // Bad radii size
-    psVector* radii2 = psVectorAlloc(1,PS_TYPE_MASK);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image, mask, 1,
-                              centerX,centerY,radii2,stat);
-    psFree(radii2);
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 33;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_SIZE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 34;
-    }
-    psFree(err);
-
-    // bad input stat option...
-    stat->options = 0;
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    result = psImageRadialCut(result,image,mask,1,centerX,centerY,radii,stat);
-    stat->options = PS_STAT_SAMPLE_MEAN;
-
-    if (result != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not NULL as expected.");
-        return 35;
-    }
-
-    err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageRadialCut did not generate proper error message.");
-        return 36;
-    }
-    psFree(err);
-
-    psFree(image);
-    psFree(mask);
-    psFree(radii);
-    psFree(stat);
-    psFree(result);
-
-    return 0;
-}
Index: unk/psLib/test/image/tst_psImagePixelManip.c
===================================================================
--- /trunk/psLib/test/image/tst_psImagePixelManip.c	(revision 4546)
+++ 	(revision )
@@ -1,797 +1,0 @@
-/** @file  tst_psImageManip.c
- *
- *  @brief Contains the tests for psImageManip.[ch]
- *
- *
- *  @author Robert DeSonia, MHPCC
- *
- *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-05-19 21:37:02 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include <complex.h>
-#include <math.h>
-#include <float.h>
-#include <string.h>
-#include <stdlib.h>
-#include <string.h>                    // for memset
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-#include "psType.h"
-
-static psS32 testImageClip(void);
-static psS32 testImageClipNAN(void);
-static psS32 testImageClipComplexRegion(void);
-static psS32 testImageOverlay(void);
-
-testDescription tests[] = {
-                              {testImageClip,571,"psImageClip",0,false},
-                              {testImageClipNAN,572,"psImageClipNAN",0,false},
-                              {testImageClipComplexRegion,673,"psImageClipComplexRegion",0,false},
-                              {testImageOverlay,573,"psImageOverlay",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
-}
-
-
-psS32 testImageClip(void)
-{
-    psImage* img = NULL;
-    psU32 c = 128;
-    psU32 r = 256;
-    psF64 min;
-    psF64 max;
-    psS32 numClipped = 0;
-    psS32 retVal;
-
-    psLogMsg(__func__,PS_LOG_INFO,
-             "psImageClip shall limit the minimum and maximum data value within a psImage structure");
-
-    /*
-
-        psImageClip shall limit the minimum and maximum data value within a
-        psImage structure to a specified min and max value.
-
-        Verify the returned integer is equal to the number of pixels clipped,
-        if the input psImage structure contains known values and input parameters
-        min and max have know values.
-
-        Verify the psImage structure specified by the input parameter input is
-        modified to contain the expected values, if the input psImage structure
-        contains known values, min and max are specified and vmin and vmax
-        parameters are known.
-
-        Verify the retuned integer is zero, psImage structure input is unmodified
-        and program executions doesn't stop, if input parameter psImage structure
-        pointer is null.
-
-        Verify the retuned integer is zero, psImage structure input is unmodified
-        and program executions doesn't stop, if input parameter min is larger than max.
-    */
-
-    // create image
-    #define testImageClipByType(datatype) \
-    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
-    for (psU32 row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (psU32 col=0;col<c;col++) { \
-            imgRow[col] = (ps##datatype)(row+col); \
-        } \
-    } \
-    min = (psF64)r/2.0; \
-    max = (psF64)r; \
-    \
-    retVal = psImageClip(img,min,(double)PS_MIN_##datatype,max,(double)PS_MAX_##datatype); \
-    \
-    numClipped = 0; \
-    for (psU32 row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (psU32 col=0;col<c;col++) { \
-            ps##datatype value = (ps##datatype)(row+col); \
-            if (value < min) { \
-                numClipped++; \
-                value = PS_MIN_##datatype; \
-            } else if (value > max) { \
-                numClipped++; \
-                value = PS_MAX_##datatype; \
-            } \
-            if (fabsf(imgRow[col]-value) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%g vs %g) at %u,%u", \
-                        (psF64)imgRow[col],(psF64)value,col,row); \
-                return 1; \
-            } \
-        } \
-    } \
-    if (retVal != numClipped) { \
-        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
-                numClipped,retVal); \
-        return 2; \
-    } \
-    psFree(img);
-
-    #define testImageClipByComplexType(datatype) \
-    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
-    for (psU32 row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (psU32 col=0;col<c;col++) { \
-            imgRow[col] = (ps##datatype)(row+I*col); \
-        } \
-    } \
-    min = (float)r/2.0f; \
-    max = (float)r; \
-    \
-    retVal = psImageClip(img,min,-1.0f,max,-2.0f); \
-    \
-    numClipped = 0; \
-    for (psU32 row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (psU32 col=0;col<c;col++) { \
-            ps##datatype value = row+I*col; \
-            if (cabs(value) < min) { \
-                numClipped++; \
-                value = -1.0f; \
-            } else if (cabs(value) > max) { \
-                numClipped++; \
-                value = -2.0f; \
-            } \
-            if (fabsf(creal(imgRow[col])-creal(value)) > FLT_EPSILON || \
-                    fabsf(cimag(imgRow[col])-cimag(value)) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%.2f+%.2fi vs %.2f+%.2fi) at %u,%u", \
-                        creal(imgRow[col]),cimag(imgRow[col]),creal(value),cimag(value),col,row); \
-                return 1; \
-            } \
-        } \
-    } \
-    if (retVal != numClipped) { \
-        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
-                numClipped,retVal); \
-        return 2; \
-    } \
-    psFree(img);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of F64 imagery");
-    testImageClipByType(F64);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of F32 imagery");
-    testImageClipByType(F32);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of S32 imagery");
-    testImageClipByType(S32);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of S16 imagery");
-    testImageClipByType(S16);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of S8 imagery");
-    testImageClipByType(S8);
-    //    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of U32 imagery");
-    //    testImageClipByType(U32);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of U16 imagery");
-    testImageClipByType(U16);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of U8 imagery");
-    testImageClipByType(U8);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of C32 imagery");
-    testImageClipByComplexType(C32);
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of C64 imagery");
-    testImageClipByComplexType(C64);
-
-    // Verify the retuned integer is zero, psImage structure input is unmodified
-    // and program executions doesn't stop, if input parameter psImage structure
-    // pointer is null.
-    retVal = psImageClip(NULL,min,-1.0f,max,-2.0f);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips of a NULL image.");
-        return 3;
-    }
-
-    // Verify the retuned integer is zero, psImage structure input is unmodified
-    // and program executions doesn't stop, if input parameter min is larger than max.
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (max<min)");
-    retVal = psImageClip(img,max,-1.0f,min,-2.0f);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips when max < min.");
-        return 4;
-    }
-
-    return 0;
-}
-
-psS32 testImageClipNAN(void)
-{
-    psImage* img = NULL;
-    psU32 c = 128;
-    psU32 r = 256;
-    psS32 numClipped = 0;
-    psS32 retVal;
-
-    psLogMsg(__func__,PS_LOG_INFO,
-             "psImageClipNaN shall modified pixel values of NaN with a specified value");
-
-    /*
-        psImageClipNaN shall modify a psImage structure with pixel values set
-        to NaN to a value specified as an input parameter.
-
-        Verify the returned integer is equal to the number of pixels modified
-        and the psImage is modified at locations where NaN pixels where
-        located to the value specified in the input parameter value.
-
-        Verify the returned integer is zero and program execution doesn't stop,
-        if the input parameter psImage structure pointer is null.
-    */
-
-    // create image
-    #define testImageClipNaNByType(datatype) \
-    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
-    for (unsigned row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            if (row == col) { \
-                imgRow[col] = NAN; \
-            } else if (row+1 == col) { \
-                imgRow[col] = INFINITY; \
-            } else { \
-                imgRow[col] = (ps##datatype)(row+col); \
-            } \
-        } \
-    } \
-    \
-    retVal = psImageClipNaN(img,-1.0f); \
-    \
-    numClipped = 0; \
-    for (unsigned row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            ps##datatype value = (ps##datatype)(row+col); \
-            if ( (row == col) || (row+1 == col) ) { \
-                numClipped++; \
-                value = -1.0; \
-            } \
-            if (fabsf(imgRow[col]-value) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%f vs %f) at %d,%d", \
-                        imgRow[col],value,col,row); \
-                return 1; \
-            } \
-        } \
-    } \
-    if (retVal != numClipped) { \
-        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
-                numClipped,retVal); \
-        return 2; \
-    } \
-    psFree(img);
-
-    testImageClipNaNByType(F32);
-    testImageClipNaNByType(F64);
-    testImageClipNaNByType(C32);
-    testImageClipNaNByType(C64);
-
-    // Verify the retuned integer is zero, psImage structure input is unmodified
-    // and program executions doesn't stop, if input parameter psImage structure
-    // pointer is null.
-    retVal = psImageClipNaN(NULL,-1.0f);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips of a NULL image.");
-        return 3;
-    }
-
-    // Verify program execution doesn't stop if the input image type is something
-    // other than F32, F64, C32, C64.
-    img = psImageAlloc(c,r,PS_TYPE_S32);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (invalid type)");
-    retVal = psImageClipNaN(img,2.0f);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clip of invalid image type.");
-        return 4;
-    }
-    psFree(img);
-
-    return 0;
-}
-
-psS32 testImageClipComplexRegion(void)
-{
-    psImage* img = NULL;
-    psU32 c = 1024;
-    psU32 r = 2048;
-    psS32 numClipped = 0;
-    psS32 retVal;
-
-    psLogMsg(__func__,PS_LOG_INFO,
-             "psImageClipNaN shall modified pixel values of NaN with a specified value");
-
-    /*
-    1. Create a complex image with a wide range of complex values
-
-    2. call psImageClipComplexRegion with min and max where there is at least
-       2 pixels in the image above) that is:
-        a) real(p) < real(min) && complex(p) < complex(min),
-        b) real(p) < real(min) && complex(min) < complex(p) < complex(max)
-        c) real(min) < real(p) < real(max) && complex(p) < complex(min)
-        d) real(min) < real(p) < real(max) && complex(min) < complex(p) < complex(max)
-        e) real(p) > real(max) && complex(min) < complex(p) < complex(max)
-        f) real(pmin) < real(p) < real(max) && complex(p) > complex(max)
-        g) real(p) > real(max) && complex(p) > complex(max)
-        h) real(p) < real(min) && complex(p) > complex(max)
-        i) real(p) > real(max) && complex(p) < complex(min)
-
-    3. verify that All pixels in case (a), (b), and (c) have the value vmin
-
-    4. verify that all pixels in case (d) are unchanged from input
-
-    5. verify that all pixels in case (e), (f), (g), (h), and (i) have the
-       value vmax
-
-    */
-
-    #define testImageClipComplexByType(datatype,MIN,MAX) /* datatype must be complex */ \
-    /* create image */ \
-    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
-    for (unsigned row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            imgRow[col] = row+I*col; \
-        } \
-    } \
-    \
-    retVal = psImageClipComplexRegion(img,MIN,-1.0-1.0*I,MAX,-2.0-2.0*I); \
-    \
-    numClipped = 0; \
-    for (unsigned row=0;row<r;row++) { \
-        ps##datatype* imgRow = img->data.datatype[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            ps##datatype value = (ps##datatype)(row+I*col); \
-            if ( (row > creal(MAX)) || (col > cimag(MAX)) ) { \
-                numClipped++; \
-                value = -2.0-2.0*I; \
-            } else if ((row < creal(MIN)) || (col < cimag(MIN)) ) { \
-                numClipped++; \
-                value = -1.0-1.0*I; \
-            } \
-            if (cabs(imgRow[col]-value) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%g%+gi vs %g%+gi) at %d,%d", \
-                        creal(imgRow[col]),cimag(imgRow[col]),creal(value),cimag(value),col,row); \
-                return 1; \
-            } \
-        } \
-    } \
-    if (retVal != numClipped) { \
-        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
-                numClipped,retVal); \
-        return 2; \
-    } \
-    psFree(img);
-
-    complex double min = ((double)r)/5.0+I*((double)c)/4.0;
-    complex double max = ((double)r)/3.0+I*((double)c)/2.0;
-
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping at %g%+gi to %g%+gi for psC32",
-             creal(min),cimag(min),creal(max),cimag(max));
-
-    testImageClipComplexByType(C32,min,max);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping at %g%+gi to %g%+gi for psC64",
-             creal(min),cimag(min),creal(max),cimag(max));
-    testImageClipComplexByType(C64,min,max);
-
-    //  6. Call psImageClipComplexRegion with NULL input parameter; should error
-    //     but not stop execution.
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(NULL,0,0,0,0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips of a NULL image.");
-        return 3;
-    }
-
-
-    img = psImageAlloc(c,r,PS_TYPE_C32);
-    for (unsigned row=0;row<r;row++) {
-        psC32* imgRow = img->data.C32[row];
-        for (unsigned col=0;col<c;col++) {
-            imgRow[col] = row+I*col;
-        }
-    }
-
-    //  7. Call psImageClipComplexRegion with min > max; should error and return 0,
-    //     but not stop execution
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,10.0+I*1.0,-1.0,5.0+5.0*I,-2.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for creal(min)>creal(max).");
-        return 3;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,1.0+I*10.0,-1.0,5.0+5.0*I,-2.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for cimag(min)>cimag(max).");
-        return 3;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,10.0+I*10.0,-1.0,5.0+5.0*I,-2.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for min>max.");
-        return 3;
-    }
-
-    //  8. Call psImageClipComplexRegion with the follow vmin/vmax values; each
-    //     should error and return 0, but not stop execution
-    //      a) vmin < datatype region's minimum
-    //      b) vmax < datatype region's minimum
-    //      c) vmin > datatype region's maximum
-    //      d) vmax > datatype region's maximum
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      -2.0*(double)FLT_MAX,
-                                      5.0+5.0*I,
-                                      0.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
-        return 80;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      2.0*(double)FLT_MAX,
-                                      5.0+5.0*I,
-                                      0.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
-        return 81;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      FLT_EPSILON-2.0*(double)FLT_MAX*I,
-                                      5.0+5.0*I,
-                                      0.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
-        return 82;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      FLT_EPSILON+2.0*(double)FLT_MAX*I,
-                                      5.0+5.0*I,
-                                      0.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
-        return 83;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      0.0,
-                                      5.0+5.0*I,
-                                      -2.0*(double)FLT_MAX);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
-        return 84;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      0.0,
-                                      5.0+5.0*I,
-                                      2.0*(double)FLT_MAX);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
-        return 85;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      0.0,
-                                      5.0+5.0*I,
-                                      FLT_EPSILON-2.0*(double)FLT_MAX*I);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
-        return 87;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      0.0,
-                                      5.0+5.0*I,
-                                      FLT_EPSILON+2.0*(double)FLT_MAX*I);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
-        return 88;
-    }
-
-
-    // now check if vmin > vmax is OK
-    for (unsigned row=0;row<r;row++) {
-        psC32* imgRow = img->data.C32[row];
-        for (unsigned col=0;col<c;col++) {
-            imgRow[col] = row+I*col;
-        }
-    }
-    retVal = psImageClipComplexRegion(img,
-                                      1.0+I*1.0,
-                                      10.0,
-                                      5.0+5.0*I,
-                                      0.0);
-    if (retVal == 0) {
-        psError(PS_ERR_UNKNOWN, true,"Didn't expect zero return for vmin > vmax.");
-        return 83;
-    }
-
-
-    psFree(img);
-    img = NULL;
-
-    //  9. Call psImageClipComplexRegion with the max value out of datatype's
-    //     range; should clip as expected (see step 1-5). Repeat with min value
-    //     out of datatype's range.
-
-    testImageClipComplexByType(C32,-(double)FLT_MAX*2.0-I*(double)FLT_MAX*2.0,10.0+I*10.0);
-    testImageClipComplexByType(C32,10.0+I*10.0,(double)FLT_MAX*2.0+I*(double)FLT_MAX*2.0);
-
-    // Verify program execution doesn't stop if the input image type is something
-    // other than C32, C64.
-    img = psImageAlloc(c,r,PS_TYPE_S32);
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (invalid type)");
-    retVal = psImageClipComplexRegion(img,2.0,10.0,5.0,0.0);
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clip of invalid image type.");
-        return 84;
-    }
-    psFree(img);
-
-    return 0;
-}
-
-psS32 testImageOverlay(void)
-{
-
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* img3 = NULL;
-    psImage* img4 = NULL;
-    psU32 c = 128;
-    psU32 r = 256;
-    psS32 retVal;
-
-    /*
-    psImageSectionOverlay shall modified pixel values in a psImage structure to
-    be equal to the value of the originaldata and an overlay image with a
-    specified operation. Valid operations include =, +, -, *, /.
-
-    Verify the returned integer is zero
-    and the input parameter psImage structure is modified at the specified
-    location and range with the given overlay image and the specified
-    function. Cases should include all the valid operations. Comparison of
-    expected values should include a delta to allow for testing on
-    different platforms.
-
-    */
-
-    #define testOverlayTypeOP(DATATYPE,OP,OPSTRING) \
-    img = psImageAlloc(c,r,PS_TYPE_##DATATYPE); \
-    for (unsigned row=0;row<r;row++) { \
-        ps##DATATYPE* imgRow = img->data.DATATYPE[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            imgRow[col] = 6.0; \
-        } \
-    } \
-    img2 = psImageAlloc(c/2,r/2,PS_TYPE_##DATATYPE); \
-    for (unsigned row=0;row<r/2;row++) { \
-        ps##DATATYPE* img2Row = img2->data.DATATYPE[row]; \
-        for (unsigned col=0;col<c/2;col++) { \
-            img2Row[col] = 2.0; \
-        } \
-    } \
-    retVal = psImageOverlaySection(img,img2,c/4,r/4,OPSTRING); \
-    if (retVal == 0) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned zero with %s op", \
-                OPSTRING); \
-        return 1; \
-    } \
-    for (unsigned row=0;row<r;row++) { \
-        ps##DATATYPE* imgRow = img->data.DATATYPE[row]; \
-        ps##DATATYPE* img2Row = img2->data.DATATYPE[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            ps##DATATYPE val = 6.0; \
-            if ( ! (row < r/4 || row >= r/2+r/4 || col < c/4 || col >= c/2+c/4)) { \
-                val OP 2.0; \
-            } \
-            if (fabsf(imgRow[col] - val) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"Value incorrect at %d,%d (%.2f vs %.2f for %s)", \
-                        col,row,imgRow[col],val,OPSTRING); \
-                return 2; \
-            } \
-            if (row < r/2 && col < c/2 && fabsf(img2Row[col] - 2.0) > FLT_EPSILON) { \
-                psError(PS_ERR_UNKNOWN, true,"Overlay modified at %d,%d (%.2f for %s)", \
-                        col,row,img2Row[col],OPSTRING); \
-                return 2; \
-            } \
-        } \
-    } \
-    psFree(img); \
-    psFree(img2);
-
-    #define testOverlayType(DATATYPE) \
-    testOverlayTypeOP(DATATYPE,+=,"+"); \
-    testOverlayTypeOP(DATATYPE,-=,"-"); \
-    testOverlayTypeOP(DATATYPE,*=,"*");\
-    testOverlayTypeOP(DATATYPE,/=,"/");\
-    testOverlayTypeOP(DATATYPE,=,"=");
-
-    testOverlayType(C64);
-    testOverlayType(C32);
-    testOverlayType(F64);
-    testOverlayType(F32);
-    testOverlayType(S16);
-    testOverlayType(S8);
-    testOverlayType(U16);
-    testOverlayType(U8);
-
-    /*
-    Verify the returned integer is equal to non-zero and the input psImage structure
-    is unmodified, if the overlay specified is not within the data range of the
-    input psImage structure.
-    */
-
-    img = psImageAlloc(c,r,PS_TYPE_F32);
-    for (unsigned row=0;row<r;row++) {
-        psF32* imgRow = img->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            imgRow[col] = 6.0f;
-        }
-    }
-    img2 = psImageAlloc(c,r,PS_TYPE_F32);
-    for (unsigned row=0;row<r;row++) {
-        psF32* img2Row = img2->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            img2Row[col] = 2.0f;
-        }
-    }
-    img3 = psImageAlloc(c,r,PS_TYPE_S64);
-    for (unsigned row=0;row<r;row++) {
-        psS64* img3Row = img3->data.S64[row];
-        for (unsigned col=0;col<c;col++) {
-            img3Row[col] = 6.0f;
-        }
-    }
-    img4 = psImageAlloc(c,r,PS_TYPE_S64);
-    for (unsigned row=0;row<r;row++) {
-        psS64* img4Row = img4->data.S64[row];
-        for (unsigned col=0;col<c;col++) {
-            img4Row[col] = 2.0f;
-        }
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error as overlay isn't "
-             "within image boundaries");
-    retVal = psImageOverlaySection(img,img2,c/4,r/4,"+");
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection did not return "
-                "zero even though overlay too big");
-        return 3;
-    }
-    for (unsigned row=0;row<r;row++) {
-        psF32* imgRow = img->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            if (imgRow[col] != 6.0f) {
-                psError(PS_ERR_UNKNOWN, true,"Input image modified when overlay size too big");
-                return 4;
-            }
-        }
-    }
-
-    /*
-    Verify the returned integer is equal to non-zero, the input psImage
-    structure is unmodified and program execution doesn't stop, if the
-    overlay specified is null.
-    */
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error as overlay is NULL");
-    retVal = psImageOverlaySection(img,NULL,c/4,r/4,"+");
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection did not return "
-                "zero even though overlay too big");
-        return 5;
-    }
-    for (unsigned row=0;row<r;row++) {
-        psF32* imgRow = img->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            if (imgRow[col] != 6.0f) {
-                psError(PS_ERR_UNKNOWN, true,"Input image modified when overlay NULL");
-                return 6;
-            }
-        }
-    }
-
-    /*
-    Verify the returned integer is equal to non-zero and program execution
-    doesn't stop, if the input parameter image is null.
-    */
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error as image input is NULL");
-    retVal = psImageOverlaySection(NULL,img2,c/4,r/4,"+");
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned non-zero even though "
-                "overlay too big");
-        return 7;
-    }
-
-    /*
-    Verify the return integer is equal to non-zero and program execution
-    doesn't stop, if the specified operator is not =,+,-,*,/
-    */
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error as operator is invalid");
-    retVal = psImageOverlaySection(img,img2,0,0,"$");
-    if (retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned non-zero even though "
-                "overlay operator is invalid");
-        return 8;
-    }
-
-    /*
-    Verify the return integer is equal to non-zero and program execution
-    doesn't stop, if the specified operator is NULL
-    */
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error as operator is invalid");
-    retVal = psImageOverlaySection(img,img2,0,0,NULL);
-    if(retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned non-zero even though "
-                "overlay operator is NULL");
-        return 9;
-    }
-
-    /*
-    Verify the return integer is equal to non-zero and program execution
-    doesn't stop, if overlay image is a different type than the input image
-    */
-    psLogMsg(__func__,PS_LOG_INFO,"Following should error as overlay is "
-             "a different type");
-    retVal = psImageOverlaySection(img,img3,0,0,"+");
-    if(retVal != 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned nonzero eventhough "
-                " overlay image type is different than input image.");
-        return 10;
-    }
-
-    /*
-    Verify program execution doen't stop, if the overly image contains
-    zero values with division operation is specified.
-    */
-    for (unsigned row=0;row<r;row++) {
-        psF32* img2Row = img2->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            img2Row[col] = 0.0f;
-        }
-    }
-    retVal = psImageOverlaySection(img,img2,0,0,"/");
-    if (retVal == 0) {
-        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned zero when "
-                "checking divide-by-zero.");
-        return 12;
-    }
-
-    psFree(img);
-    psFree(img2);
-    psFree(img3);
-    psFree(img4);
-
-    return 0;
-}
Index: unk/psLib/test/image/tst_psImageStats.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageStats.c	(revision 4546)
+++ 	(revision )
@@ -1,688 +1,0 @@
-/*
-*  C Implementation: %{MODULE}
-*
-* Description:
-*
-*
-* Author: %{AUTHOR} <%{EMAIL}>, (C) %{YEAR}
-*
-* Copyright: See COPYING file that comes with this distribution
-*
-*/
-
-#include <stdio.h>
-#include <float.h>
-#include <math.h>
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testPsImageHistogram(void);
-static psS32 testPsImageStats(void);
-static psS32 testPsImageFitPolynomial(void);
-static psS32 testPsImagePixelInterpolate(void);
-static psS32 testPsImageEvalPolynom(void);
-
-static bool FitChebyF32(int numCols, int numRows);
-static bool FitChebyF64(int numCols, int numRows);
-
-testDescription tests[] = {
-                              {testPsImageHistogram,0,"psImageHistogram",0,false},
-                              {testPsImageStats,1,"psImageStats",0,false},
-                              {testPsImageFitPolynomial,2,"psImageFitPolynomial",0,false},
-                              {testPsImagePixelInterpolate,3,"psImagePixelInterpolate",0,false},
-                              {testPsImageEvalPolynom,4,"psImageEvalPolynom()",0,false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
-}
-
-
-
-static psS32 testPsImageHistogram(void)
-{
-    const int NUM_BINS = 20;
-    const int N = 32;
-    const int M = 64;
-
-    psHistogram * myHist = NULL;
-    psHistogram *myHist2 = NULL;
-    psImage *tmpImage = NULL;
-    psImage *tmpImage2 = NULL;
-    psImage *tmpMask = NULL;
-    psImage *tmpMask2 = NULL;
-    psS32 testStatus = true;
-    psS32 nb = 0;
-    psS32 i = 0;
-    psS32 j = 0;
-    psS32 IMAGE_X_SIZE = 0;
-    psS32 IMAGE_Y_SIZE = 0;
-    psS32 currentId = 0;
-
-    currentId = psMemGetId();
-    for ( nb = 0;nb < 7;nb++ ) {
-        if ( nb == 0 ) {
-            IMAGE_X_SIZE = 1;
-            IMAGE_Y_SIZE = 1;
-        }
-        if ( nb == 1 ) {
-            IMAGE_X_SIZE = 1;
-            IMAGE_Y_SIZE = N;
-        }
-        if ( nb == 2 ) {
-            IMAGE_X_SIZE = N;
-            IMAGE_Y_SIZE = 1;
-        }
-        if ( nb == 3 ) {
-            IMAGE_X_SIZE = N;
-            IMAGE_Y_SIZE = N;
-        }
-        if ( nb == 4 ) {
-            IMAGE_X_SIZE = N;
-            IMAGE_Y_SIZE = M;
-        }
-        if ( nb == 5 ) {
-            IMAGE_X_SIZE = M;
-            IMAGE_Y_SIZE = N;
-        }
-        if ( nb == 6 ) {
-            IMAGE_X_SIZE = M;
-            IMAGE_Y_SIZE = N;
-        }
-        fprintf(stderr, "*******************************\n" );
-        if (nb != 6) {
-            fprintf(stderr, "* IMAGE SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
-        } else {
-            fprintf(stderr, "* IMAGE SUBSET SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
-        }
-        fprintf(stderr, "*******************************\n" );
-        /*********************************************************************/
-        /*  Allocate and initialize data structures                      */
-        /*********************************************************************/
-        if (nb != 6) {
-            tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
-            tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U8 );
-            tmpImage2 = NULL;
-            tmpMask2 = NULL;
-        } else {
-            tmpImage2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_F32 );
-            tmpMask2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_U8 );
-            tmpImage = psImageSubset(tmpImage2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
-                                     IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
-            tmpMask= psImageSubset(tmpMask2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
-                                   IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
-        }
-
-
-        for ( i = 0;i < tmpImage->numRows;i++ ) {
-            for ( j = 0;j < tmpImage->numCols;j++ ) {
-                tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j + 0.1 );
-            }
-        }
-
-
-        for ( i = 0;i < tmpMask->numRows;i++ ) {
-            for ( j = 0;j < tmpMask->numCols;j++ ) {
-                if ( ( i > ( tmpMask->numRows / 2 ) ) &&
-                        ( j > ( tmpMask->numCols / 2 ) ) ) {
-                    tmpMask->data.U8[ i ][ j ] = 1;
-                } else {
-                    tmpMask->data.U8[ i ][ j ] = 0;
-                }
-            }
-        }
-
-        /*************************************************************************/
-        /*  Calculate Histogram with no mask                             */
-        /*************************************************************************/
-
-        myHist = psHistogramAlloc( 0.0, ( float ) ( IMAGE_X_SIZE + IMAGE_Y_SIZE ),
-                                   NUM_BINS );
-        myHist = psImageHistogram( myHist, tmpImage, NULL, 0 );
-        for ( i = 0;i < NUM_BINS;i++ ) {
-            fprintf(stderr, "Bin number %d bounds: (%.1f - %.1f) data (%.2f)\n", i,
-                    myHist->bounds->data.F32[ i ],
-                    myHist->bounds->data.F32[ i + 1 ],
-                    myHist->nums->data.F32[ i ] );
-        }
-        psFree( myHist );
-
-        /*************************************************************************/
-        /*  Calculate Histogram with mask                                */
-        /*************************************************************************/
-
-        myHist = psHistogramAlloc( 0.0, ( float ) ( IMAGE_X_SIZE + IMAGE_Y_SIZE ),
-                                   NUM_BINS );
-        myHist = psImageHistogram( myHist, tmpImage, tmpMask, 1 );
-        for ( i = 0;i < NUM_BINS;i++ ) {
-            fprintf( stderr, "Bin number %d bounds: (%.2f - %.2f) data (%.2f)\n", i,
-                     myHist->bounds->data.F32[ i ],
-                     myHist->bounds->data.F32[ i + 1 ],
-                     myHist->nums->data.F32[ i ] );
-        }
-
-        /*************************************************************************/
-        /*  Deallocate data structures                                   */
-        /*************************************************************************/
-        psFree( myHist );
-        psFree( tmpImage );
-        psFree( tmpImage2 );
-        psFree( tmpMask );
-        psFree( tmpMask2 );
-    }
-    tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
-    myHist = psHistogramAlloc( 0.0, ( float ) ( IMAGE_X_SIZE + IMAGE_Y_SIZE ),
-                               NUM_BINS );
-    myHist2 = psImageHistogram( NULL, tmpImage, NULL, 0 );
-    if ( myHist2 != NULL ) {
-        fprintf(stderr, "ERROR: myHist2 not equal to NULL\n" );
-    }
-
-    myHist2 = psImageHistogram( myHist, NULL, NULL, 0 );
-    myHist2 = psImageHistogram( NULL, tmpImage, NULL, 0 );
-    if ( myHist2 != NULL ) {
-        fprintf(stderr, "ERROR: myHist2 not equal to NULL\n" );
-    }
-
-
-    tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_S8 );
-    for ( i = 0;i < tmpMask->numRows;i++ ) {
-        for ( j = 0;j < tmpMask->numCols;j++ ) {
-            if ( ( i > ( tmpMask->numRows / 2 ) ) &&
-                    ( j > ( tmpMask->numCols / 2 ) ) ) {
-                tmpMask->data.S8[ i ][ j ] = 1;
-            } else {
-                tmpMask->data.S8[ i ][ j ] = 0;
-            }
-        }
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invalid mask type.");
-    myHist2 = psImageHistogram(myHist,tmpImage,tmpMask,1);
-    if (myHist2 != NULL) {
-        fprintf(stderr,"ERROR: myHist2 not equal to NULL\n");
-    }
-
-    psFree( tmpMask );
-    psFree(myHist);
-    psFree(myHist2);
-    psFree( tmpImage );
-
-    return ( !testStatus );
-}
-
-static psS32 testPsImageStats()
-{
-    const int N  = 32;
-    const int M = 64;
-
-    psStats * myStats = NULL;
-    psStats *myStats2 = NULL;
-    psImage *tmpImage = NULL;
-    psImage *tmpImage2 = NULL;
-    psImage *tmpMask = NULL;
-    psImage *tmpMask2 = NULL;
-    psS32 testStatus = true;
-    psS32 nb = 0;
-    psS32 i = 0;
-    psS32 j = 0;
-    psS32 IMAGE_X_SIZE = 0;
-    psS32 IMAGE_Y_SIZE = 0;
-    psS32 currentId = 0;
-
-    currentId = psMemGetId();
-    for ( nb = 0;nb < 7;nb++ ) {
-        if ( nb == 0 ) {
-            IMAGE_X_SIZE = 1;
-            IMAGE_Y_SIZE = 1;
-        }
-        if ( nb == 1 ) {
-            IMAGE_X_SIZE = 1;
-            IMAGE_Y_SIZE = N;
-        }
-        if ( nb == 2 ) {
-            IMAGE_X_SIZE = N;
-            IMAGE_Y_SIZE = 1;
-        }
-        if ( nb == 3 ) {
-            IMAGE_X_SIZE = N;
-            IMAGE_Y_SIZE = N;
-        }
-        if ( nb == 4 ) {
-            IMAGE_X_SIZE = N;
-            IMAGE_Y_SIZE = M;
-        }
-        if ( nb == 5 ) {
-            IMAGE_X_SIZE = M;
-            IMAGE_Y_SIZE = N;
-        }
-        if ( nb == 6 ) {
-            IMAGE_X_SIZE = M;
-            IMAGE_Y_SIZE = N;
-        }
-        fprintf(stderr, "*******************************\n" );
-        if (nb != 6) {
-            fprintf(stderr, "* IMAGE SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
-        } else {
-            fprintf(stderr, "* IMAGE SUBSET SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
-        }
-        fprintf(stderr, "*******************************\n" );
-
-        /*************************************************************************/
-        /*  Allocate and initialize data structures                      */
-        /*************************************************************************/
-        if (nb != 6) {
-            tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
-            tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U8 );
-            tmpImage2 = NULL;
-            tmpMask2 = NULL;
-        } else {
-            tmpImage2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_F32 );
-            tmpMask2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_U8 );
-            tmpImage = psImageSubset(tmpImage2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
-                                     IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
-            tmpMask = psImageSubset(tmpMask2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
-                                    IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
-        }
-
-        for ( i = 0;i < tmpImage->numRows;i++ ) {
-            for ( j = 0;j < tmpImage->numCols;j++ ) {
-                tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j );
-            }
-        }
-        for ( i = 0;i < tmpMask->numRows;i++ ) {
-            for ( j = 0;j < tmpMask->numCols;j++ ) {
-                if ( ( i > ( tmpMask->numRows / 2 ) ) &&
-                        ( j > ( tmpMask->numCols / 2 ) ) ) {
-                    tmpMask->data.U8[ i ][ j ] = 1;
-                } else {
-                    tmpMask->data.U8[ i ][ j ] = 0;
-                }
-            }
-        }
-
-        myStats = psStatsAlloc( PS_STAT_SAMPLE_MEAN );
-        /*************************************************************************/
-        /*  Calculate Sample Mean with no mask                           */
-        /*************************************************************************/
-        psStats* tmpStats = myStats;
-        myStats = psImageStats( myStats, tmpImage, NULL, 0 );
-        if ( myStats != tmpStats ) {
-            fprintf(stderr,"ERROR: input psStats not equal to return psStats\n");
-            psAbort(__func__,"Failed input psStats equal to returned psStats");
-        }
-        fprintf(stderr, "The sample mean was %.2f\n", myStats->sampleMean );
-
-        /*************************************************************************/
-        /*  Calculate Sample Mean with mask                              */
-        /*************************************************************************/
-
-        myStats = psImageStats( myStats, tmpImage, tmpMask, 1 );
-        fprintf(stderr, "The sample mean was %.2f\n", myStats->sampleMean );
-
-        /*************************************************************************/
-        /*  Deallocate data structures                                   */
-        /*************************************************************************/
-        psFree( myStats );
-        psFree( tmpImage );
-        psFree( tmpMask );
-        psFree( tmpImage2 );
-        psFree( tmpMask2 );
-    }
-
-    /*************************************************************************/
-    /*  Test With Various Null Inputs                                        */
-    /*************************************************************************/
-
-    tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
-    tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U8 );
-    myStats = psStatsAlloc( 0 );
-
-    myStats2 = psImageStats( myStats, NULL, NULL, 0 );
-    if ( myStats2 != NULL ) {
-        fprintf(stderr, "ERROR: myStats2 = psImageStats(myStats, NULL, NULL, 0) != NULL\n" );
-    }
-
-    myStats2 = psImageStats( NULL, tmpImage, NULL, 0 );
-    if ( myStats2 != NULL ) {
-        fprintf(stderr, "ERROR: myStats2 = psImageStats(NULL, tmpImage, NULL, 0) != NULL\n" );
-    }
-
-    myStats2 = psImageStats( myStats, tmpImage, NULL, 0 );
-
-    psFree( myStats );
-    psFree( tmpImage );
-    psFree( tmpMask );
-
-    tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32);
-    tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U32);
-    myStats = psStatsAlloc( PS_STAT_SAMPLE_MEAN );
-    myStats2 = psImageStats( myStats, tmpImage, tmpMask, 0 );
-    if ( myStats2 != NULL ) {
-        fprintf(stderr, "ERROR: psImageStats did not return null when mask is invalid type.\n");
-    }
-    psFree(tmpImage);
-    psFree(tmpMask);
-    psFree(myStats);
-
-    return ( !testStatus );
-}
-
-static psS32 testPsImageFitPolynomial()
-{
-    const int IMAGE_SIZE = 64;
-    const int CHEBY_X_DIM = 8;
-    const int CHEBY_Y_DIM = 8;
-    const int THRESHOLD = 10;
-
-    psStats * myStats = NULL;
-    psImage *tmpImage = NULL;
-    psImage *outImage = NULL;
-    psImage *nullImage = NULL;
-    psPolynomial2D *my2DPoly = NULL;
-    psPolynomial2D *null2DPoly = NULL;
-    psS32 testStatus = true;
-    psS32 i = 0;
-    psS32 j = 0;
-    psS32 currentId = 0;
-
-    currentId = psMemGetId();
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    tmpImage = psImageAlloc( IMAGE_SIZE, IMAGE_SIZE, PS_TYPE_F32 );
-    outImage = psImageAlloc( IMAGE_SIZE, IMAGE_SIZE, PS_TYPE_F32 );
-    for ( i = 0;i < IMAGE_SIZE;i++ ) {
-        for ( j = 0;j < IMAGE_SIZE;j++ ) {
-            tmpImage->data.F32[ i ][ j ] = 4.0;
-            tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j );
-            tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j ) + ( 4.0 * ( float ) i );
-            outImage->data.F32[ i ][ j ] = 0.0;
-        }
-    }
-    my2DPoly = psPolynomial2DAlloc( CHEBY_X_DIM, CHEBY_Y_DIM, PS_POLYNOMIAL_CHEB );
-    /*************************************************************************/
-    /*  Calculate Chebyshev Polynomials, no mask                     */
-    /*************************************************************************/
-    my2DPoly = psImageFitPolynomial( my2DPoly, tmpImage );
-    for ( i = 0;i < CHEBY_X_DIM;i++ ) {
-        for ( j = 0;j < CHEBY_Y_DIM;j++ ) {
-            fprintf(stderr, "Cheby Polynomial (%d, %d) coefficient is %.2f\n", i, j, 0.0001f+my2DPoly->coeff[ i ][ j ] );
-        }
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error message for NULL coeffs argument.");
-    null2DPoly = psImageFitPolynomial( NULL, tmpImage );
-    if ( null2DPoly != NULL ) {
-        fprintf(stderr,"ERROR: psImageFitPolynomial did not return NULL with invalid coeffs argument.");
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be a error message for NULL input argument.");
-    null2DPoly = psImageFitPolynomial( null2DPoly, NULL );
-    if ( null2DPoly != NULL ) {
-        fprintf(stderr,"ERROR: psImageFitPolynomial did not return NULL with null input image.");
-    }
-
-    /*************************************************************************/
-    /*  Evaluate Chebyshev Polynomials, no mask                      */
-    /*************************************************************************/
-    outImage = psImageEvalPolynomial( outImage, my2DPoly );
-    for ( i = 0;i < IMAGE_SIZE;i++ ) {
-        for ( j = 0;j < IMAGE_SIZE;j++ ) {
-
-            //             fprintf(stderr,"pixel[%d][%d] is (%.2f, %.2f)\n", i, j,
-            //                     tmpImage->data.F32[i][j],
-            //                     outImage->data.F32[i][j]);
-            if ( fabs( outImage->data.F32[ i ][ j ] - tmpImage->data.F32[ i ][ j ] ) > THRESHOLD ) {
-                fprintf(stderr, "Pixel (%d, %d) is %.2f, should be %.2f\n", i, j,
-                        outImage->data.F32[ i ][ j ],
-                        tmpImage->data.F32[ i ][ j ] );
-            }
-
-        }
-    }
-
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error message for NULL coeffs argument.");
-    nullImage = psImageEvalPolynomial( outImage, NULL );
-    if ( nullImage != NULL ) {
-        fprintf(stderr,"ERROR: psImageEvalPolynomial did not return NULL with invalid coeffs argument.");
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be a error message for NULL input argument.");
-    nullImage = psImageEvalPolynomial( NULL, my2DPoly );
-    if ( nullImage != NULL ) {
-        fprintf(stderr,"ERROR: psImageEvalPolynomial did not return NULL with null input image.");
-    }
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-    psFree( myStats );
-    psFree( tmpImage );
-    psFree( outImage );
-    psFree( my2DPoly );
-
-    return ( !testStatus );
-}
-
-static psS32 testPsImagePixelInterpolate()
-{
-    const int IMAGE_SIZE = 10;
-
-    psImage *tmpImage   = NULL;
-    psS32 testStatus      = true;
-    psS32 i               = 0;
-    psS32 j               = 0;
-    float pixel         = 0.0;
-    float x             = 0.0;
-    float y             = 0.0;
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-    tmpImage = psImageAlloc(IMAGE_SIZE, IMAGE_SIZE, PS_TYPE_F32);
-    for (i=0;i<IMAGE_SIZE;i++) {
-        for (j=0;j<IMAGE_SIZE;j++) {
-            tmpImage->data.F32[i][j] = 4.0;
-            tmpImage->data.F32[i][j] = (float) (i + j) + (4.0 * (float) i);
-            tmpImage->data.F32[i][j] = (float) (i + j);
-            fprintf(stderr,"%.1f ", tmpImage->data.F32[i][j]);
-        }
-        fprintf(stderr,"\n");
-    }
-    for (i=0;i<IMAGE_SIZE-1;i++) {
-        for (j=0;j<IMAGE_SIZE-1;j++) {
-            x = 0.2 + (float) i;
-            y = 0.2 + (float) j;
-            pixel = psImagePixelInterpolate(tmpImage,
-                                            x, y,
-                                            NULL, 0,
-                                            0,
-                                            PS_INTERPOLATE_BILINEAR);
-            fprintf(stderr,"%.1f ", pixel);
-        }
-        fprintf(stderr,"\n");
-    }
-
-    for (i=0;i<IMAGE_SIZE-1;i++) {
-        for (j=0;j<IMAGE_SIZE-1;j++) {
-            x = 0.2 + (float) i;
-            y = 0.2 + (float) j;
-            pixel = psImagePixelInterpolate(tmpImage,
-                                            x, y,
-                                            NULL,0,
-                                            0,
-                                            PS_INTERPOLATE_BILINEAR);
-            fprintf(stderr,"image[%.1f][%.1f] is interpolated at %.1f\n", x, y, pixel);
-        }
-    }
-
-    psFree(tmpImage);
-
-    return (!testStatus);
-}
-
-#define I_POLY(X, Y) \
-((A) + (B * X) + (C * Y) + (D * X * Y) + (E * X * X) + (F * Y * Y)) \
-
-static bool FitChebyF32(int numCols, int numRows)
-{
-    const double A = 1.0;
-    const double B = 2.0;
-    const double C = 3.0;
-    const double D = 4.0;
-    const double E = 5.0;
-    const double F = 6.0;
-    const double ERROR_TOL = 0.1;
-
-    psImage *tmpImage     = NULL;
-    psImage *outImage     = NULL;
-    bool testStatus      = true;
-    psS32 i               = 0;
-    psS32 j               = 0;
-    float chi2 = 0.0;
-
-
-    fprintf(stderr,"psImageFitPolynomial(), psImageEvalPolynom(): (%d by %d)\n", numRows, numCols);
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-
-    tmpImage = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-    outImage = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-    for (i=0;i<numRows;i++) {
-        for (j=0;j<numCols;j++) {
-            tmpImage->data.F32[i][j] = I_POLY(((float) i), ((float) j));
-        }
-    }
-
-    psPolynomial2D *chebys = psPolynomial2DAlloc(5, 5, PS_POLYNOMIAL_CHEB);
-
-    chebys = psImageFitPolynomial(chebys, tmpImage);
-
-    outImage = psImageEvalPolynomial(outImage, chebys);
-
-    chi2 = 0.0;
-    for (i=0;i<numRows;i++) {
-        for (j=0;j<numCols;j++) {
-            float expect = tmpImage->data.F32[i][j];
-            float actual = outImage->data.F32[i][j];
-            chi2+= (actual-expect) * (actual-expect);
-            if (fabs((actual - expect) / expect) > ERROR_TOL) {
-                fprintf(stderr,"pixel [%d][%d] is %.2f should be %.2f\n", i, j, actual, expect);
-            }
-        }
-    }
-    chi2/= ((float) (numCols * numRows));
-    fprintf(stderr,"The chi-squared per pixel is %.2f\n", chi2);
-
-    psFree(tmpImage);
-    psFree(outImage);
-    psFree(chebys);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-
-    return(testStatus);
-}
-
-static bool FitChebyF64(int numCols, int numRows)
-{
-    const double A = 1.0;
-    const double B = 2.0;
-    const double C = 3.0;
-    const double D = 4.0;
-    const double E = 5.0;
-    const double F = 6.0;
-    const double ERROR_TOL = 0.1;
-
-    psImage *tmpImage     = NULL;
-    psImage *outImage     = NULL;
-    bool testStatus      = true;
-    psS32 i               = 0;
-    psS32 j               = 0;
-    double chi2 = 0.0;
-
-
-    fprintf(stderr,"psImageFitPolynomial(), psImageEvalPolynom(): (%d by %d)\n", numRows, numCols);
-
-    /*************************************************************************/
-    /*  Allocate and initialize data structures                      */
-    /*************************************************************************/
-
-    tmpImage = psImageAlloc(numCols, numRows, PS_TYPE_F64);
-    outImage = psImageAlloc(numCols, numRows, PS_TYPE_F64);
-    for (i=0;i<numRows;i++) {
-        for (j=0;j<numCols;j++) {
-            tmpImage->data.F64[i][j] = I_POLY(((double) i), ((double) j));
-        }
-    }
-
-    psPolynomial2D *chebys = psPolynomial2DAlloc(5, 5, PS_POLYNOMIAL_CHEB);
-
-    chebys = psImageFitPolynomial(chebys, tmpImage);
-
-    outImage = psImageEvalPolynomial(outImage, chebys);
-
-    chi2 = 0.0;
-    for (i=0;i<numRows;i++) {
-        for (j=0;j<numCols;j++) {
-            double expect = tmpImage->data.F64[i][j];
-            double actual = outImage->data.F64[i][j];
-            chi2+= (actual-expect) * (actual-expect);
-            if (fabs((actual - expect) / expect) > ERROR_TOL) {
-                fprintf(stderr,"pixel [%d][%d] is %.2f should be %.2f\n", i, j, actual, expect);
-            }
-        }
-    }
-    chi2/= ((double) (numCols * numRows));
-    fprintf(stderr,"The chi-squared per pixel is %.2f\n", chi2);
-
-    psFree(tmpImage);
-    psFree(outImage);
-    psFree(chebys);
-
-    /*************************************************************************/
-    /*  Deallocate data structures                                   */
-    /*************************************************************************/
-
-    return(testStatus);
-}
-
-static psS32 testPsImageEvalPolynom()
-{
-    if (!FitChebyF32(1, 1)) {
-        return 1;
-    }
-    if (!FitChebyF32(1, 5)) {
-        return 2;
-    }
-    if (!FitChebyF32(5, 1)) {
-        return 3;
-    }
-    if (!FitChebyF32(5, 5)) {
-        return 4;
-    }
-    if (!FitChebyF64(1, 1)) {
-        return 5;
-    }
-    if (!FitChebyF64(1, 5)) {
-        return 6;
-    }
-    if (!FitChebyF64(5, 1)) {
-        return 7;
-    }
-    if (!FitChebyF64(5, 5)) {
-        return 8;
-    }
-    return 0;
-}
-
Index: unk/psLib/test/image/tst_psImageStructManip.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageStructManip.c	(revision 4546)
+++ 	(revision )
@@ -1,676 +1,0 @@
-/** @file  tst_psImageExtraction.c
-*
-*  @brief Contains the tests for psImageExtraction.[ch]
-*
-*
-*  @author Robert DeSonia, MHPCC
-*
-*  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-06-01 22:16:20 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-#include<stdlib.h>
-#include<string.h>
-
-#include "psTest.h"
-#include "pslib_strict.h"
-#include "psType.h"
-
-static psS32 testImageSubset(void);
-static psS32 testImageCopy(void);
-static psS32 testImageTrim(void);
-
-
-testDescription tests[] = {
-                              {testImageSubset,547,"psImageSubset",0,false},
-                              {testImageSubset,550,"psImageSubset",0,true},
-                              {testImageCopy,551,"psImageCopy",0,false},
-                              {testImageTrim, 744, "psImageTrim", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    return ! runTestSuite( stderr, "psImage", tests, argc, argv );
-}
-
-// #547: psImageSubset shall create child image of a specified size from a parent psImage structure
-psS32 testImageSubset(void)
-{
-    psImage preSubsetStruct;
-    psImage* original;
-    psImage* subset1 = NULL;
-    psImage* subset2 = NULL;
-    psImage* subset3 = NULL;
-    psS32 c = 128;
-    psS32 r = 256;
-    psRegion region1 = psRegionSet(0,c/2,0,r/2);
-    psRegion region2 = psRegionSet(c/4,c/4+c/2,r/4,r/4+r/2);
-
-    original = psImageAlloc(c,r,PS_TYPE_U32);
-    for (psS32 row=0;row<r;row++) {
-        for (psS32 col=0;col<c;col++) {
-            original->data.F32[row][col] = row*1000+col;
-        }
-    }
-
-    memcpy(&preSubsetStruct,original,sizeof(psImage));
-
-    subset2 = psImageSubset(original,region2);
-
-    subset3 = psImageSubset(original,region1);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure members nrow and ncol are equal to "
-             "the input parameter nrow and ncol respectively.");
-
-    if (subset2->numCols != c/2 || subset2->numRows != r/2) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset output size was not proper(%dx%d, should be %dx%d).",
-                subset2->numCols, subset2->numRows, c/2,r/2);
-        return 1;
-    }
-
-    if (subset3->numCols != c/2 || subset3->numRows != r/2) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset output size was not proper(%dx%d, should be %dx%d).",
-                subset3->numCols, subset3->numRows, c/2,r/2);
-        return 2;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure contains expected values in the "
-             "row member, if the input psImage structure image contains known values.");
-
-    for (psS32 row=0;row<r/2;row++) {
-        for (psS32 col=0;col<c/2;col++) {
-            if (subset2->data.U32[row][col] != original->data.U32[row+r/4][col+c/4]) {
-                psError(PS_ERR_UNKNOWN,true,"psImageSubset output #1 was wrong at %dx%d (%d vs %d).",
-                        row,col,subset2->data.U32[row][col], original->data.U32[row+r/4][col+c/4]);
-                return 3;
-            }
-            if (subset3->data.U32[row][col] != original->data.U32[row][col]) {
-                psError(PS_ERR_UNKNOWN,true,"psImageSubset output #1 was wrong at %dx%d (%d vs %d).",
-                        row,col,subset2->data.U32[row][col], original->data.U32[row][col]);
-                return 4;
-            }
-        }
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure member type is equal to the input "
-             "psImage structure member type.");
-
-    if (subset2->type.type != PS_TYPE_U32) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset output type was not proper(%d, should be %d).",
-                subset2->type.type, PS_TYPE_U32);
-        return 6;
-    }
-    if (subset3->type.type != PS_TYPE_U32) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset output type was not proper(%d, should be %d).",
-                subset3->type.type, PS_TYPE_U32);
-        return 7;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure members row0 and col0 are equal to "
-             "the input parameters row0 and col0 respectively.");
-
-    if (subset2->col0 != c/4 || subset2->row0 != r/4) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set col0/row0 for subset2 (%d/%d, should be %d/%d).",
-                subset2->col0,subset2->row0,c/4,r/4);
-        return 8;
-    }
-    if (subset3->col0 != 0 || subset3->row0 != 0) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set col0/row0 for subset3 (%d/%d, should be %d/%d).",
-                subset3->col0,subset3->row0,0,0);
-        return 9;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure member parent is equal to the "
-             "input psImage structure pointer image.");
-
-    if (subset2->parent != original || subset3->parent != original) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set parent.");
-        return 10;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure member children is null.");
-
-    if (subset2->children != NULL || subset3->children != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set children to NULL.");
-        return 11;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the input psImage structure image only has the following members "
-             "changed: 1) Nchildren is increased by one. 2) parent contains pointer psImage structure "
-             "out at parent[Nchildren-1].");
-
-    if (original->children == NULL || original->children->n != 2) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't increment number of children by one per subset.");
-        return 12;
-    }
-    if (original->children->data[0] != subset2 || original->children->data[1] != subset3) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't properly store the children pointers.");
-        return 13;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
-             "execution doesn't stop, if the input parameter image is null. Also verified the input "
-             "psImage structure is not modified.");
-
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(NULL,region1);
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when input image was NULL.");
-        return 14;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
-             " execution doesn't stop, if the input parameters nrow and/or ncol are zero. Also verify "
-             "input psImage structure is not modified.");
-
-    memcpy(&preSubsetStruct,original,sizeof(psImage));
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original, psRegionSet(0,c/2,r/2,r/2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when numRows=0.");
-        return 15;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original,psRegionSet(c/2,c/2,0,r/2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when numCols=0.");
-        return 16;
-    }
-    if (memcmp(original,&preSubsetStruct,sizeof(psImage)) != 0) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset changed the original struct though it failed to subset.");
-        return 17;
-    }
-
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
-             "execution doesn't stop, if the input parameters row0 and col0 are not within the range of "
-             "values of psImage structure image.");
-
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original, psRegionSet(0,c/2, 0,r*2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
-                "image (via cols).");
-        return 18;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original,psRegionSet(0,c*2,0,r/2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
-                "image (via rows).");
-        return 19;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original, psRegionSet(-1,c/2,0,r/2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
-                "image (col0=-1).");
-        return 20;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original, psRegionSet(0,c/2,-1,r/2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
-                "image (row0=-1).");
-        return 21;
-    }
-
-    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
-             "execution doesn't stop if the input parameters nrow, ncol, row0 and col0 specify a range of "
-             "data not within the input psImage structure image.  Also verify the input psImage structure "
-             "is not modified.");
-
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original,psRegionSet(0,c/2,0,r+1));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset was outside of image (via rows).");
-        return 22;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original, psRegionSet(0,c+1,0,r/2));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset was outside of image (via cols).");
-        return 23;
-    }
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    subset1 = psImageSubset(original,psRegionSet(0,c+1,0,r+1));
-    if (subset1 != NULL) {
-        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset was outside of image (via row+cols).");
-        return 24;
-    }
-
-    psLogMsg(__func__, PS_LOG_INFO, "psImageFreeChildren shall deallocate any children images of a "
-             "psImage structure");
-
-    memcpy(&preSubsetStruct,original,sizeof(psImage));
-
-    psImageFreeChildren(original);
-
-    // Verify the returned psImage structure member Nchildren is set to zero.
-    if (original->children != NULL && original->children->n > 0) {
-        psError(PS_ERR_UNKNOWN,true,"psImageFreeChildren didn't set number of children to zero.");
-        return 25;
-    }
-
-    //Verify the returned psImage structure members type, nrow, ncol, row0, col0, rows and parent are not
-    // modified.
-    if (preSubsetStruct.numRows != original->numRows ||
-            preSubsetStruct.numCols != original->numCols ||
-            preSubsetStruct.row0 != original->row0 ||
-            preSubsetStruct.col0 != original->col0) {
-
-        psError(PS_ERR_UNKNOWN,true,"psImageFreeChildren modified parent's non-children elements.");
-        return 27;
-    }
-
-    psFree(original);
-
-    return 0;
-}
-
-psS32 testImageCopy(void)
-{
-    psImage* img = NULL;
-    psImage* img2 = NULL;
-    psImage* img3 = NULL;
-    psImage* img4 = NULL;
-    psU32 c = 128;
-    psU32 r = 256;
-
-    img = psImageAlloc(c,r,PS_TYPE_F32);
-    for (unsigned row=0;row<r;row++) {
-        psF32* imgRow = img->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            imgRow[col] = (psF32)(row+col);
-        }
-    }
-    img2 = psImageAlloc(c,r,PS_TYPE_F32);
-    for (unsigned row=0;row<r;row++) {
-        psF32* img2Row = img2->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            img2Row[col] = 0.0f;
-        }
-    }
-
-    img3 = psImageCopy(img2,img,PS_TYPE_F32);
-
-    // Verify the returned psImage structure pointer is equal to the input parameter output.
-    if (img2 != img3) {
-        psError(PS_ERR_UNKNOWN, true,"the image given for recycled wasn't");
-        return 1;
-    }
-
-    // Verify the returned psImage structure is the same type as the input image structure
-    // if the specified output argument is NULL.
-    img4 = psImageCopy(NULL,img,PS_TYPE_F32);
-    if (img4 == NULL) {
-        psError(PS_ERR_UNKNOWN, true,"output image doesn't exist");
-        return 4;
-    }
-    if (img4->type.type != img->type.type) {
-        psError(PS_ERR_UNKNOWN, true,"output image is not the same type as input image");
-        return 4;
-    }
-    for (psU32 row=0;row<r;row++) {
-        psF32* imgInRow = img->data.F32[row];
-        psF32* imgOutRow = img4->data.F32[row];
-        for (unsigned col=0;col<c;col++) {
-            if( imgInRow[col] != imgOutRow[col] ) {
-                psError(PS_ERR_UNKNOWN, true,"Input image not equal to output image at %d,%d!",
-                        col, row);
-                return 4;
-            }
-        }
-    }
-
-    // Verify the returned psImage structure member are equal to the values in
-    // the input psImage structure input.
-
-    #define testImageCopyType(IN,OUT) \
-    img = psImageRecycle(img,c,r,PS_TYPE_##IN); \
-    for (unsigned row=0;row<r;row++) { \
-        ps##IN* imgRow = img->data.IN[row]; \
-        for (unsigned col=0;col<c;col++) { \
-            imgRow[col] = (ps##IN)(row+col); \
-        } \
-    } \
-    img2 = psImageCopy(img2,img,PS_TYPE_##OUT); \
-    if (img2 == NULL) { \
-        psError(PS_ERR_UNKNOWN, true,"psImageCopy failed to copy U8."); \
-        return 2; \
-    } \
-    for (psU32 row=0;row<r;row++) { \
-        ps##IN* imgRow = img->data.IN[row]; \
-        ps##OUT* img2Row = img2->data.OUT[row]; \
-        for (psU32 col=0;col<c;col++) { \
-            if (abs(imgRow[col] - (ps##IN)(row+col)) > 0.5) { \
-                psError(PS_ERR_UNKNOWN, true,"Input image was changed at %d,%d!", \
-                        col,row); \
-                return 2; \
-            } \
-            if (abs(img2Row[col] - (ps##OUT)(imgRow[col])) > 0.5) { \
-                psError(PS_ERR_UNKNOWN, true,"returned psImage values after copy don't match at %d,%d " \
-                        "(%d vs %d)",\
-                        col,row,img2Row[col], (ps##OUT)(imgRow[col])); \
-                return 2; \
-            } \
-        } \
-    }
-
-    #define testImageCopyTypes(IN) \
-    printf("to psF32\n"); \
-    testImageCopyType(IN,F32);\
-    printf("to psF64\n"); \
-    testImageCopyType(IN,F64); \
-    printf("to psU8\n"); \
-    testImageCopyType(IN,U8); \
-    printf("to psU16\n"); \
-    testImageCopyType(IN,U16); \
-    printf("to psU32\n"); \
-    testImageCopyType(IN,U32); \
-    printf("to psS8\n"); \
-    testImageCopyType(IN,S8);\
-    printf("to psS16\n"); \
-    testImageCopyType(IN,S16);\
-    printf("to psS32\n"); \
-    testImageCopyType(IN,S32);
-
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psU8");
-    testImageCopyTypes(U8);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psU16");
-    testImageCopyTypes(U16);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psU32");
-    testImageCopyTypes(U32);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psS8");
-    testImageCopyTypes(S8);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psS16");
-    testImageCopyTypes(S16);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psS32");
-    testImageCopyTypes(S32);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psF32");
-    testImageCopyTypes(F32);
-    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psF64");
-    testImageCopyTypes(F64);
-
-    // Verify the returned psImage structure pointer is null and program
-    // execution doesn't stop, if the input parameter input is null.
-    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
-    img3 = psImageCopy(NULL,NULL,PS_TYPE_F32);
-    if (img3 != NULL) {
-        psError(PS_ERR_UNKNOWN, true,"psImageCopy didn't return NULL when input image was NULL.");
-        return 3;
-    }
-
-    psFree(img);
-    psFree(img2);
-    psFree(img3);
-    psFree(img4);
-
-    return 0;
-}
-
-static psS32 testImageTrim(void)
-{
-    psS32 r = 200;
-    psS32 c = 300;
-    psS32 qtrR = r/4;
-    psS32 qtrC = c/4;
-    psS32 halfR = r/2;
-    psS32 halfC = c/2;
-    psRegion centerHalf = {qtrC,qtrC+halfC,qtrR,qtrR+halfR};
-
-    psImage* image = psImageAlloc(c,r,PS_TYPE_F32);
-    for (psS32 row = 0; row < image->numRows; row++) {
-        for (psS32 col = 0; col < image->numCols; col++) {
-            image->data.F32[row][col] = (psF32)col + (psF32)row/1000.0f;
-        }
-    }
-
-    /*
-        1. invoke psImageTrim with non-NULL image, and a valid region
-           x0,y0->x1,y1 (using only positive values). Verify that:
-            a. the return psImage is the same as the input psImage.
-            b. the size of the psImage is x1-x0 by y1-y0.
-            c. the pixel values coorespond to the region [x0:x1-1,y0:y1-1].
-    */
-    psImage* image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    psImage* image2 = psImageTrim(image1,centerHalf);
-
-    if (image1 != image2) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not same as input value.  Not done in-place?");
-        return 1;
-    }
-
-    if (image2->numCols != halfC ||
-            image2->numRows != halfR) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "The resulting image size was %dx%d, but should be %dx%d.",
-                 image2->numCols, image2->numRows,
-                 halfC, halfR);
-        return 2;
-    }
-
-    for (psS32 row = 0; row < image2->numRows; row++) {
-        for (psS32 col = 0; col < image2->numCols; col++) {
-            if (fabsf(image2->data.F32[row][col] - image->data.F32[row+qtrR][col+qtrC]) > FLT_EPSILON) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "The value at (%d,%d) was %g, but should be %g.",
-                         col,row,
-                         image2->data.F32[row][col],
-                         image->data.F32[row+qtrR][col+qtrC]);
-                return 3;
-            }
-        }
-    }
-
-    /*
-        2. invoke psImageTrim with non-NULL image and valid region where x1=0,
-           y1=0. Verify that:
-            a. the return psImage size is numCols-x0 by numRows-y0
-            b. the pixel values coorespond to the region
-               [x0:numCols-1,y0:numRows-1].
-    */
-    image1 = psImageCopy(image1,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1,psRegionSet(qtrC,0,qtrR,0));
-
-    if (image1 != image2) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not same as input value.  Not done in-place?");
-        return 11;
-    }
-
-    if (image2->numCols != image->numCols-qtrC ||
-            image2->numRows != image->numRows-qtrR) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "The resulting image size was %dx%d, but should be %dx%d.",
-                 image2->numCols, image2->numRows,
-                 image->numCols-qtrC, image->numRows-qtrR);
-        return 12;
-    }
-
-    for (psS32 row = 0; row < image2->numRows; row++) {
-        for (psS32 col = 0; col < image2->numCols; col++) {
-            if (fabsf(image2->data.F32[row][col] -
-                      image->data.F32[row+qtrR][col+qtrC]) > FLT_EPSILON) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "The value at (%d,%d) was %g, but should be %g.",
-                         col,row,
-                         image2->data.F32[row][col],
-                         image->data.F32[row+qtrR][col+qtrC]);
-                return 13;
-            }
-        }
-    }
-
-    /*
-        4. invoke psImageTrim with x1<0, y1<0. Verify:
-            a. the psImage size is (numCols+x1)-x0 by (numRows+y1)-y0.
-            b. the pixel values coorespond to the region
-               [x0:numCols+x1-1,y0:numRows+y1-1].
-
-    */
-    image1 = psImageCopy(image1,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1,psRegionSet(qtrC,-qtrC, qtrR,-qtrR));
-
-    if (image1 != image2) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "Return value not same as input value.  Not done in-place?");
-        return 21;
-    }
-
-    if (image2->numCols != image->numCols-qtrC-qtrC ||
-            image2->numRows != image->numRows-qtrR-qtrR) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "The resulting image size was %dx%d, but should be %dx%d.",
-                 image2->numCols, image2->numRows,
-                 image->numCols-qtrC, image->numRows-qtrR);
-        return 22;
-    }
-
-    for (psS32 row = 0; row < image2->numRows; row++) {
-        for (psS32 col = 0; col < image2->numCols; col++) {
-            if (fabsf(image2->data.F32[row][col] -
-                      image->data.F32[row+qtrR][col+qtrC]) > FLT_EPSILON) {
-                psLogMsg(__func__,PS_LOG_ERROR,
-                         "The value at (%d,%d) was %g, but should be %g.",
-                         col,row,
-                         image2->data.F32[row][col],
-                         image->data.F32[row+qtrR][col+qtrC]);
-                return 23;
-            }
-        }
-    }
-
-    psFree(image2);
-
-    /*
-        6. invoke psImageTrim with image=NULL Verify:
-            a. execution does not cease.
-            b. return value is NULL
-            c. appropriate error is generated.
-    */
-
-    image2 = psImageTrim(NULL, psRegionSet(qtrC,0,qtrR,0));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given a NULL input image.");
-        return 31;
-    }
-    psErr* err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for NULL input image.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 32;
-    }
-    psFree(err);
-
-    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1, psRegionSet(-1,0,0,0));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given x0=-1.");
-        return 33;
-    }
-    err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for x0=-1.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 34;
-    }
-    psFree(err);
-
-    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1, psRegionSet(0,0,-1,0));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given y0=-1.");
-        return 35;
-    }
-    err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for y0=-1.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 36;
-    }
-    psFree(err);
-
-    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1, psRegionSet(0,image->numCols+1,0,0));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given x1=numCols+1.");
-        return 37;
-    }
-    err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for x1=numCols+1.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 38;
-    }
-    psFree(err);
-
-    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1, psRegionSet(0,0,0,image->numRows+1));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given y1=numRows+1.");
-        return 39;
-    }
-    err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for y1=numRows+1.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 40;
-    }
-    psFree(err);
-
-    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1, psRegionSet(0,(((psF32)image->numCols)*-1.0),0,0));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given x1=-numCols.");
-        return 41;
-    }
-    err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for x1=-numCols.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 42;
-    }
-    psFree(err);
-
-    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
-    image2 = psImageTrim(image1, psRegionSet(0,0,0,(((psF32)image->numRows)*-1.0)));
-
-    if (image2 != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not return NULL given y1=-numRows.");
-        return 41;
-    }
-    err = psErrorLast();
-    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psImageTrim did not generate an appropriate error for y1=-numRows.");
-        psErrorStackPrint(stderr,"Error Stack:");
-        return 42;
-    }
-    psFree(err);
-
-    psFree(image);
-    return 0;
-}
Index: unk/psLib/test/image/verified/fBiOut.fits
===================================================================
--- /trunk/psLib/test/image/verified/fBiOut.fits	(revision 4546)
+++ 	(revision )
@@ -1,6427 +1,0 @@
-SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B~
-B~záB~p€B~ffB~\)B~QìB~G®B~=qB~33B~(öB~
-žB~{B~
-=B~  B}õÃB}ë
-B}áHB}×
-B}ÌÍB}ÂB}žRB}®B}£×B}B}\B}
-B}záB}p€B}ffB}\)B}QìB}G®B}=qB}33B}(öB}
-žB}{B}
-=B}  B|õÃB|ë
-B|áHB|×
-B|ÌÍB|ÂB|žRB|®B|£×B|B|\B|
-B|záB|p€B|ffB|\)B|QìB|G®B|=qB|33B|(öB|
-žB|{B|
-=B|  Bz
-BzzáBzp€BzffBz\)BzQìBzG®Bz=qBz33Bz(öBz
-žBz{Bz
-=Bz  ByõÃByë
-ByáHBy×
-ByÌÍByÂByžRBy®By£×ByBy\By
-ByzáByp€ByffBy\)ByQìByG®By=qBy33By(öBy
-žBy{By
-=By  BxõÃBxë
-BxáHBx×
-BxÌÍBxÂBxžRBx®Bx£×BxBx\Bx
-BxzáBxp€BxffBx\)BxQìBxG®Bx=qBx33Bx(öBx
-žBx{Bx
-=Bx  Bv
-BvzáBvp€BvffBv\)BvQìBvG®Bv=qBv33Bv(öBv
-žBv{Bv
-=Bv  BuõÃBuë
-BuáHBu×
-BuÌÍBuÂBužRBu®Bu£×BuBu\Bu
-BuzáBup€BuffBu\)BuQìBuG®Bu=qBu33Bu(öBu
-žBu{Bu
-=Bu  BtõÃBtë
-BtáHBt×
-BtÌÍBtÂBtžRBt®Bt£×BtBt\Bt
-BtzáBtp€BtffBt\)BtQìBtG®Bt=qBt33Bt(öBt
-žBt{Bt
-=Bt  Br
-BrzáBrp€BrffBr\)BrQìBrG®Br=qBr33Br(öBr
-žBr{Br
-=Br  BqõÃBqë
-BqáHBq×
-BqÌÍBqÂBqžRBq®Bq£×BqBq\Bq
-BqzáBqp€BqffBq\)BqQìBqG®Bq=qBq33Bq(öBq
-žBq{Bq
-=Bq  BpõÃBpë
-BpáHBp×
-BpÌÍBpÂBpžRBp®Bp£×BpBp\Bp
-BpzáBpp€BpffBp\)BpQìBpG®Bp=qBp33Bp(öBp
-žBp{Bp
-=Bp  Bn
-BnzáBnp€BnffBn\)BnQìBnG®Bn=qBn33Bn(öBn
-žBn{Bn
-=Bn  BmõÃBmë
-BmáHBm×
-BmÌÍBmÂBmžRBm®Bm£×BmBm\Bm
-BmzáBmp€BmffBm\)BmQìBmG®Bm=qBm33Bm(öBm
-žBm{Bm
-=Bm  BlõÃBlë
-BláHBl×
-BlÌÍBlÂBlžRBl®Bl£×BlBl\Bl
-BlzáBlp€BlffBl\)BlQìBlG®Bl=qBl33Bl(öBl
-žBl{Bl
-=Bl  Bj
-BjzáBjp€BjffBj\)BjQìBjG®Bj=qBj33Bj(öBj
-žBj{Bj
-=Bj  BiõÃBië
-BiáHBi×
-BiÌÍBiÂBižRBi®Bi£×BiBi\Bi
-BizáBip€BiffBi\)BiQìBiG®Bi=qBi33Bi(öBi
-žBi{Bi
-=Bi  BhõÃBhë
-BháHBh×
-BhÌÍBhÂBhžRBh®Bh£×BhBh\Bh
-BhzáBhp€BhffBh\)BhQìBhG®Bh=qBh33Bh(öBh
-žBh{Bh
-=Bh  Bf
-BfzáBfp€BfffBf\)BfQìBfG®Bf=qBf33Bf(öBf
-žBf{Bf
-=Bf  BeõÃBeë
-BeáHBe×
-BeÌÍBeÂBežRBe®Be£×BeBe\Be
-BezáBep€BeffBe\)BeQìBeG®Be=qBe33Be(öBe
-žBe{Be
-=Be  BdõÃBdë
-BdáHBd×
-BdÌÍBdÂBdžRBd®Bd£×BdBd\Bd
-BdzáBdp€BdffBd\)BdQìBdG®Bd=qBd33Bd(öBd
-žBd{Bd
-=Bd  Bb
-BbzáBbp€BbffBb\)BbQìBbG®Bb=qBb33Bb(öBb
-žBb{Bb
-=Bb  BaõÃBaë
-BaáHBa×
-BaÌÍBaÂBažRBa®Ba£×BaBa\Ba
-BazáBap€BaffBa\)BaQìBaG®Ba=qBa33Ba(öBa
-žBa{Ba
-=Ba  B`õÃB`ë
-B`áHB`×
-B`ÌÍB`ÂB`žRB`®B`£×B`B`\B`
-B`záB`p€B`ffB`\)B`QìB`G®B`=qB`33B`(öB`
-žB`{B`
-=B`  B^
-B^záB^p€B^ffB^\)B^QìB^G®B^=qB^33B^(öB^
-žB^{B^
-=B^  B]õÃB]ë
-B]áHB]×
-B]ÌÍB]ÂB]žRB]®B]£×B]B]\B]
-B]záB]p€B]ffB]\)B]QìB]G®B]=qB]33B](öB]
-žB]{B]
-=B]  B\õÃB\ë
-B\áHB\×
-B\ÌÍB\ÂB\žRB\®B\£×B\B\\B\
-B\záB\p€B\ffB\\)B\QìB\G®B\=qB\33B\(öB\
-žB\{B\
-=B\  BZ
-BZzáBZp€BZffBZ\)BZQìBZG®BZ=qBZ33BZ(öBZ
-žBZ{BZ
-=BZ  BYõÃBYë
-BYáHBY×
-BYÌÍBYÂBYžRBY®BY£×BYBY\BY
-BYzáBYp€BYffBY\)BYQìBYG®BY=qBY33BY(öBY
-žBY{BY
-=BY  BXõÃBXë
-BXáHBX×
-BXÌÍBXÂBXžRBX®BX£×BXBX\BX
-BXzáBXp€BXffBX\)BXQìBXG®BX=qBX33BX(öBX
-žBX{BX
-=BX  BV
-BVzáBVp€BVffBV\)BVQìBVG®BV=qBV33BV(öBV
-žBV{BV
-=BV  BUõÃBUë
-BUáHBU×
-BUÌÍBUÂBUžRBU®BU£×BUBU\BU
-BUzáBUp€BUffBU\)BUQìBUG®BU=qBU33BU(öBU
-žBU{BU
-=BU  BTõÃBTë
-BTáHBT×
-BTÌÍBTÂBTžRBT®BT£×BTBT\BT
-BTzáBTp€BTffBT\)BTQìBTG®BT=qBT33BT(öBT
-žBT{BT
-=BT  BR
-BRzáBRp€BRffBR\)BRQìBRG®BR=qBR33BR(öBR
-žBR{BR
-=BR  BQõÃBQë
-BQáHBQ×
-BQÌÍBQÂBQžRBQ®BQ£×BQBQ\BQ
-BQzáBQp€BQffBQ\)BQQìBQG®BQ=qBQ33BQ(öBQ
-žBQ{BQ
-=BQ  BPõÃBPë
-BPáHBP×
-BPÌÍBPÂBPžRBP®BP£×BPBP\BP
-BPzáBPp€BPffBP\)BPQìBPG®BP=qBP33BP(öBP
-žBP{BP
-=BP  BN
-BNzáBNp€BNffBN\)BNQìBNG®BN=qBN33BN(öBN
-žBN{BN
-=BN  BMõÃBMë
-BMáHBM×
-BMÌÍBMÂBMžRBM®BM£×BMBM\BM
-BMzáBMp€BMffBM\)BMQìBMG®BM=qBM33BM(öBM
-žBM{BM
-=BM  BLõÃBLë
-BLáHBL×
-BLÌÍBLÂBLžRBL®BL£×BLBL\BL
-BLzáBLp€BLffBL\)BLQìBLG®BL=qBL33BL(öBL
-žBL{BL
-=BL  BJ
-BJzáBJp€BJffBJ\)BJQìBJG®BJ=qBJ33BJ(öBJ
-žBJ{BJ
-=BJ  BIõÃBIë
-BIáHBI×
-BIÌÍBIÂBIžRBI®BI£×BIBI\BI
-BIzáBIp€BIffBI\)BIQìBIG®BI=qBI33BI(öBI
-žBI{BI
-=BI  BHõÃBHë
-BHáHBH×
-BHÌÍBHÂBHžRBH®BH£×BHBH\BH
-BHzáBHp€BHffBH\)BHQìBHG®BH=qBH33BH(öBH
-žBH{BH
-=BH  BF
-BFzáBFp€BFffBF\)BFQìBFG®BF=qBF33BF(öBF
-žBF{BF
-=BF  BEõÃBEë
-BEáHBE×
-BEÌÍBEÂBEžRBE®BE£×BEBE\BE
-BEzáBEp€BEffBE\)BEQìBEG®BE=qBE33BE(öBE
-žBE{BE
-=BE  BDõÃBDë
-BDáHBD×
-BDÌÍBDÂBDžRBD®BD£×BDBD\BD
-BDzáBDp€BDffBD\)BDQìBDG®BD=qBD33BD(öBD
-žBD{BD
-=BD  BB
-BBzáBBp€BBffBB\)BBQìBBG®BB=qBB33BB(öBB
-žBB{BB
-=BB  BAõÃBAë
-BAáHBA×
-BAÌÍBAÂBAžRBA®BA£×BABA\BA
-BAzáBAp€BAffBA\)BAQìBAG®BA=qBA33BA(öBA
-žBA{BA
-=BA  B@õÃB@ë
-B@áHB@×
-B@ÌÍB@ÂB@žRB@®B@£×B@B@\B@
-B@záB@p€B@ffB@\)B@QìB@G®B@=qB@33B@(öB@
-žB@{B@
-=B@  B>
-B>záB>p€B>ffB>\)B>QìB>G®B>=qB>33B>(öB>
-žB>{B>
-=B>  B=õÃB=ë
-B=áHB=×
-B=ÌÍB=ÂB=žRB=®B=£×B=B=\B=
-B=záB=p€B=ffB=\)B=QìB=G®B==qB=33B=(öB=
-žB={B=
-=B=  B<õÃB<ë
-B<áHB<×
-B<ÌÍB<ÂB<žRB<®B<£×B<B<\B<
-B<záB<p€B<ffB<\)B<QìB<G®B<=qB<33B<(öB<
-žB<{B<
-=B<  B:
-B:záB:p€B:ffB:\)B:QìB:G®B:=qB:33B:(öB:
-žB:{B:
-=B:  B9õÃB9ë
-B9áHB9×
-B9ÌÍB9ÂB9žRB9®B9£×B9B9\B9
-B9záB9p€B9ffB9\)B9QìB9G®B9=qB933B9(öB9
-žB9{B9
-=B9  B8õÃB8ë
-B8áHB8×
-B8ÌÍB8ÂB8žRB8®B8£×B8B8\B8
-B8záB8p€B8ffB8\)B8QìB8G®B8=qB833B8(öB8
-žB8{B8
-=B8  B6
-B6záB6p€B6ffB6\)B6QìB6G®B6=qB633B6(öB6
-žB6{B6
-=B6  B5õÃB5ë
-B5áHB5×
-B5ÌÍB5ÂB5žRB5®B5£×B5B5\B5
-B5záB5p€B5ffB5\)B5QìB5G®B5=qB533B5(öB5
-žB5{B5
-=B5  B4õÃB4ë
-B4áHB4×
-B4ÌÍB4ÂB4žRB4®B4£×B4B4\B4
-B4záB4p€B4ffB4\)B4QìB4G®B4=qB433B4(öB4
-žB4{B4
-=B4  B2
-B2záB2p€B2ffB2\)B2QìB2G®B2=qB233B2(öB2
-žB2{B2
-=B2  B1õÃB1ë
-B1áHB1×
-B1ÌÍB1ÂB1žRB1®B1£×B1B1\B1
-B1záB1p€B1ffB1\)B1QìB1G®B1=qB133B1(öB1
-žB1{B1
-=B1  B0õÃB0ë
-B0áHB0×
-B0ÌÍB0ÂB0žRB0®B0£×B0B0\B0
-B0záB0p€B0ffB0\)B0QìB0G®B0=qB033B0(öB0
-žB0{B0
-=B0  B.
-B.záB.p€B.ffB.\)B.QìB.G®B.=qB.33B.(öB.
-žB.{B.
-=B.  B-õÃB-ë
-B-áHB-×
-B-ÌÍB-ÂB-žRB-®B-£×B-B-\B-
-B-záB-p€B-ffB-\)B-QìB-G®B-=qB-33B-(öB-
-žB-{B-
-=B-  B,õÃB,ë
-B,áHB,×
-B,ÌÍB,ÂB,žRB,®B,£×B,B,\B,
-B,záB,p€B,ffB,\)B,QìB,G®B,=qB,33B,(öB,
-žB,{B,
-=B,  B*
-B*záB*p€B*ffB*\)B*QìB*G®B*=qB*33B*(öB*
-žB*{B*
-=B*  B)õÃB)ë
-B)áHB)×
-B)ÌÍB)ÂB)žRB)®B)£×B)B)\B)
-B)záB)p€B)ffB)\)B)QìB)G®B)=qB)33B)(öB)
-žB){B)
-=B)  B(õÃB(ë
-B(áHB(×
-B(ÌÍB(ÂB(žRB(®B(£×B(B(\B(
-B(záB(p€B(ffB(\)B(QìB(G®B(=qB(33B((öB(
-žB({B(
-=B(  B&
-B&záB&p€B&ffB&\)B&QìB&G®B&=qB&33B&(öB&
-žB&{B&
-=B&  B%õÃB%ë
-B%áHB%×
-B%ÌÍB%ÂB%žRB%®B%£×B%B%\B%
-B%záB%p€B%ffB%\)B%QìB%G®B%=qB%33B%(öB%
-žB%{B%
-=B%  B$õÃB$ë
-B$áHB$×
-B$ÌÍB$ÂB$žRB$®B$£×B$B$\B$
-B$záB$p€B$ffB$\)B$QìB$G®B$=qB$33B$(öB$
-žB${B$
-=B$  B"
-B"záB"p€B"ffB"\)B"QìB"G®B"=qB"33B"(öB"
-žB"{B"
-=B"  B!õÃB!ë
-B!áHB!×
-B!ÌÍB!ÂB!žRB!®B!£×B!B!\B!
-B!záB!p€B!ffB!\)B!QìB!G®B!=qB!33B!(öB!
-žB!{B!
-=B!  B õÃB ë
-B áHB ×
-B ÌÍB ÂB žRB ®B £×B B \B 
-B záB p€B ffB \)B QìB G®B =qB 33B (öB 
-žB {B 
-=B   B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-=B
-  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B	õÃB	ë
-B	áHB	×
-B	ÌÍB	ÂB	žRB	®B	£×B	B	\B	
-B	záB	p€B	ffB	\)B	QìB	G®B	=qB	33B	(öB	
-žB	{B	
-=B	  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B õÃB ë
-B áHB ×
-B ÌÍB ÂB žRB ®B £×B B \B 
-B záB p€B ffB \)B QìB G®B =qB 33B (öB 
-žB {B 
-=B   Aý
-=AüõÃAüáHAüÌÍAüžRAü£×Aü\AüzáAüffAüQìAü=qAü(öAü{Aü  Aûë
-Aû×
-AûÂAû®AûAû
-Aûp€Aû\)AûG®Aû33Aû
-žAû
-=AúõÃAúáHAúÌÍAúžRAú£×Aú\AúzáAúffAúQìAú=qAú(öAú{Aú  Aùë
-Aù×
-AùÂAù®AùAù
-Aùp€Aù\)AùG®Aù33Aù
-žAù
-=AøõÃAøáHAøÌÍAøžRAø£×Aø\AøzáAøffAøQìAø=qAø(öAø{Aø  Aõ
-=AôõÃAôáHAôÌÍAôžRAô£×Aô\AôzáAôffAôQìAô=qAô(öAô{Aô  Aóë
-Aó×
-AóÂAó®AóAó
-Aóp€Aó\)AóG®Aó33Aó
-žAó
-=AòõÃAòáHAòÌÍAòžRAò£×Aò\AòzáAòffAòQìAò=qAò(öAò{Aò  Añë
-Añ×
-AñÂAñ®AñAñ
-Añp€Añ\)AñG®Añ33Añ
-žAñ
-=AðõÃAðáHAðÌÍAðžRAð£×Að\AðzáAðffAðQìAð=qAð(öAð{Að  Aí
-=AìõÃAìáHAìÌÍAìžRAì£×Aì\AìzáAìffAìQìAì=qAì(öAì{Aì  Aëë
-Aë×
-AëÂAë®AëAë
-Aëp€Aë\)AëG®Aë33Aë
-žAë
-=AêõÃAêáHAêÌÍAêžRAê£×Aê\AêzáAêffAêQìAê=qAê(öAê{Aê  Aéë
-Aé×
-AéÂAé®AéAé
-Aép€Aé\)AéG®Aé33Aé
-žAé
-=AèõÃAèáHAèÌÍAèžRAè£×Aè\AèzáAèffAèQìAè=qAè(öAè{Aè  Aå
-=AäõÃAäáHAäÌÍAäžRAä£×Aä\AäzáAäffAäQìAä=qAä(öAä{Aä  Aãë
-Aã×
-AãÂAã®AãAã
-Aãp€Aã\)AãG®Aã33Aã
-žAã
-=AâõÃAâáHAâÌÍAâžRAâ£×Aâ\AâzáAâffAâQìAâ=qAâ(öAâ{Aâ  Aáë
-Aá×
-AáÂAá®AáAá
-Aáp€Aá\)AáG®Aá33Aá
-žAá
-=AàõÃAàáHAàÌÍAàžRAà£×Aà\AàzáAàffAàQìAà=qAà(öAà{Aà  AÝ
-=AÜõÃAÜáHAÜÌÍAÜžRAÜ£×AÜ\AÜzáAÜffAÜQìAÜ=qAÜ(öAÜ{AÜ  AÛë
-AÛ×
-AÛÂAÛ®AÛAÛ
-AÛp€AÛ\)AÛG®AÛ33AÛ
-žAÛ
-=AÚõÃAÚáHAÚÌÍAÚžRAÚ£×AÚ\AÚzáAÚffAÚQìAÚ=qAÚ(öAÚ{AÚ  AÙë
-AÙ×
-AÙÂAÙ®AÙAÙ
-AÙp€AÙ\)AÙG®AÙ33AÙ
-žAÙ
-=AØõÃAØáHAØÌÍAØžRAØ£×AØ\AØzáAØffAØQìAØ=qAØ(öAØ{AØ  AÕ
-=AÔõÃAÔáHAÔÌÍAÔžRAÔ£×AÔ\AÔzáAÔffAÔQìAÔ=qAÔ(öAÔ{AÔ  AÓë
-AÓ×
-AÓÂAÓ®AÓAÓ
-AÓp€AÓ\)AÓG®AÓ33AÓ
-žAÓ
-=AÒõÃAÒáHAÒÌÍAÒžRAÒ£×AÒ\AÒzáAÒffAÒQìAÒ=qAÒ(öAÒ{AÒ  AÑë
-AÑ×
-AÑÂAÑ®AÑAÑ
-AÑp€AÑ\)AÑG®AÑ33AÑ
-žAÑ
-=AÐõÃAÐáHAÐÌÍAÐžRAÐ£×AÐ\AÐzáAÐffAÐQìAÐ=qAÐ(öAÐ{AÐ  AÍ
-=AÌõÃAÌáHAÌÌÍAÌžRAÌ£×AÌ\AÌzáAÌffAÌQìAÌ=qAÌ(öAÌ{AÌ  AËë
-AË×
-AËÂAË®AËAË
-AËp€AË\)AËG®AË33AË
-žAË
-=AÊõÃAÊáHAÊÌÍAÊžRAÊ£×AÊ\AÊzáAÊffAÊQìAÊ=qAÊ(öAÊ{AÊ  AÉë
-AÉ×
-AÉÂAÉ®AÉAÉ
-AÉp€AÉ\)AÉG®AÉ33AÉ
-žAÉ
-=AÈõÃAÈáHAÈÌÍAÈžRAÈ£×AÈ\AÈzáAÈffAÈQìAÈ=qAÈ(öAÈ{AÈ  AÅ
-=AÄõÃAÄáHAÄÌÍAÄžRAÄ£×AÄ\AÄzáAÄffAÄQìAÄ=qAÄ(öAÄ{AÄ  AÃë
-AÃ×
-AÃÂAÃ®AÃAÃ
-AÃp€AÃ\)AÃG®AÃ33AÃ
-žAÃ
-=AÂõÃAÂáHAÂÌÍAÂžRAÂ£×AÂ\AÂzáAÂffAÂQìAÂ=qAÂ(öAÂ{AÂ  AÁë
-AÁ×
-AÁÂAÁ®AÁAÁ
-AÁp€AÁ\)AÁG®AÁ33AÁ
-žAÁ
-=AÀõÃAÀáHAÀÌÍAÀžRAÀ£×AÀ\AÀzáAÀffAÀQìAÀ=qAÀ(öAÀ{AÀ  Aœ
-=AŒõÃAŒáHAŒÌÍAŒžRAŒ£×AŒ\AŒzáAŒffAŒQìAŒ=qAŒ(öAŒ{AŒ  A»ë
-A»×
-A»ÂA»®A»A»
-A»p€A»\)A»G®A»33A»
-žA»
-=AºõÃAºáHAºÌÍAºžRAº£×Aº\AºzáAºffAºQìAº=qAº(öAº{Aº  A¹ë
-A¹×
-A¹ÂA¹®A¹A¹
-A¹p€A¹\)A¹G®A¹33A¹
-žA¹
-=AžõÃAžáHAžÌÍAžžRAž£×Až\AžzáAžffAžQìAž=qAž(öAž{Až  Aµ
-=AŽõÃAŽáHAŽÌÍAŽžRAŽ£×AŽ\AŽzáAŽffAŽQìAŽ=qAŽ(öAŽ{AŽ  A³ë
-A³×
-A³ÂA³®A³A³
-A³p€A³\)A³G®A³33A³
-žA³
-=A²õÃA²áHA²ÌÍA²žRA²£×A²\A²záA²ffA²QìA²=qA²(öA²{A²  A±ë
-A±×
-A±ÂA±®A±A±
-A±p€A±\)A±G®A±33A±
-žA±
-=A°õÃA°áHA°ÌÍA°žRA°£×A°\A°záA°ffA°QìA°=qA°(öA°{A°  A­
-=A¬õÃA¬áHA¬ÌÍA¬žRA¬£×A¬\A¬záA¬ffA¬QìA¬=qA¬(öA¬{A¬  A«ë
-A«×
-A«ÂA«®A«A«
-A«p€A«\)A«G®A«33A«
-žA«
-=AªõÃAªáHAªÌÍAªžRAª£×Aª\AªzáAªffAªQìAª=qAª(öAª{Aª  A©ë
-A©×
-A©ÂA©®A©A©
-A©p€A©\)A©G®A©33A©
-žA©
-=AšõÃAšáHAšÌÍAšžRAš£×Aš\AšzáAšffAšQìAš=qAš(öAš{Aš  A¥
-=A€õÃA€áHA€ÌÍA€žRA€£×A€\A€záA€ffA€QìA€=qA€(öA€{A€  A£ë
-A£×
-A£ÂA£®A£A£
-A£p€A£\)A£G®A£33A£
-žA£
-=A¢õÃA¢áHA¢ÌÍA¢žRA¢£×A¢\A¢záA¢ffA¢QìA¢=qA¢(öA¢{A¢  A¡ë
-A¡×
-A¡ÂA¡®A¡A¡
-A¡p€A¡\)A¡G®A¡33A¡
-žA¡
-=A õÃA áHA ÌÍA žRA £×A \A záA ffA QìA =qA (öA {A   A
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
-
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Az{Ayë
-AyÂAyAyp€AyG®Ay
-žAxõÃAxÌÍAx£×AxzáAxQìAx(öAx  Aw×
-Aw®Aw
-Aw\)Aw33Aw
-=AváHAvžRAv\AvffAv=qAv{Auë
-AuÂAuAup€AuG®Au
-žAtõÃAtÌÍAt£×AtzáAtQìAt(öAt  As×
-As®As
-As\)As33As
-=AráHAržRAr\ArffAr=qAr{Aqë
-AqÂAqAqp€AqG®Aq
-žApõÃApÌÍAp£×ApzáApQìAp(öAp  Aj{Aië
-AiÂAiAip€AiG®Ai
-žAhõÃAhÌÍAh£×AhzáAhQìAh(öAh  Ag×
-Ag®Ag
-Ag\)Ag33Ag
-=AfáHAfžRAf\AfffAf=qAf{Aeë
-AeÂAeAep€AeG®Ae
-žAdõÃAdÌÍAd£×AdzáAdQìAd(öAd  Ac×
-Ac®Ac
-Ac\)Ac33Ac
-=AbáHAbžRAb\AbffAb=qAb{Aaë
-AaÂAaAap€AaG®Aa
-žA`õÃA`ÌÍA`£×A`záA`QìA`(öA`  AZ{AYë
-AYÂAYAYp€AYG®AY
-žAXõÃAXÌÍAX£×AXzáAXQìAX(öAX  AW×
-AW®AW
-AW\)AW33AW
-=AVáHAVžRAV\AVffAV=qAV{AUë
-AUÂAUAUp€AUG®AU
-žATõÃATÌÍAT£×ATzáATQìAT(öAT  AS×
-AS®AS
-AS\)AS33AS
-=ARáHARžRAR\ARffAR=qAR{AQë
-AQÂAQAQp€AQG®AQ
-žAPõÃAPÌÍAP£×APzáAPQìAP(öAP  AJ{AIë
-AIÂAIAIp€AIG®AI
-žAHõÃAHÌÍAH£×AHzáAHQìAH(öAH  AG×
-AG®AG
-AG\)AG33AG
-=AFáHAFžRAF\AFffAF=qAF{AEë
-AEÂAEAEp€AEG®AE
-žADõÃADÌÍAD£×ADzáADQìAD(öAD  AC×
-AC®AC
-AC\)AC33AC
-=ABáHABžRAB\ABffAB=qAB{AAë
-AAÂAAAAp€AAG®AA
-žA@õÃA@ÌÍA@£×A@záA@QìA@(öA@  A:{A9ë
-A9ÂA9A9p€A9G®A9
-žA8õÃA8ÌÍA8£×A8záA8QìA8(öA8  A7×
-A7®A7
-A7\)A733A7
-=A6áHA6žRA6\A6ffA6=qA6{A5ë
-A5ÂA5A5p€A5G®A5
-žA4õÃA4ÌÍA4£×A4záA4QìA4(öA4  A3×
-A3®A3
-A3\)A333A3
-=A2áHA2žRA2\A2ffA2=qA2{A1ë
-A1ÂA1A1p€A1G®A1
-žA0õÃA0ÌÍA0£×A0záA0QìA0(öA0  A*{A)ë
-A)ÂA)A)p€A)G®A)
-žA(õÃA(ÌÍA(£×A(záA(QìA((öA(  A'×
-A'®A'
-A'\)A'33A'
-=A&áHA&žRA&\A&ffA&=qA&{A%ë
-A%ÂA%A%p€A%G®A%
-žA$õÃA$ÌÍA$£×A$záA$QìA$(öA$  A#×
-A#®A#
-A#\)A#33A#
-=A"áHA"žRA"\A"ffA"=qA"{A!ë
-A!ÂA!A!p€A!G®A!
-žA õÃA ÌÍA £×A záA QìA (öA   A{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A
-{A	ë
-A	ÂA	A	p€A	G®A	
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žA õÃA ÌÍA £×A záA QìA (öA   @ô(ö@ó×
-@ó
-@ó33@òáH@ò\@ò=q@ñë
-@ñ@ñG®@ðõÂ@ð£×@ðQì@ð  @ï®@ï\)@ï
-=@îžR@îff@î{@íÂ@íp€@í
-ž@ìÌÍ@ìzá@ì(ö@ë×
-@ë
-@ë33@êáH@ê\@ê=q@éë
-@é@éG®@èõÃ@è£×@èQì@è  @ç®@ç\)@ç
-=@æžR@æff@æ{@åÂ@åp€@å
-ž@äÌÍ@äzá@ä(ö@ã×
-@ã
-@ã33@âáH@â\@â=q@áë
-@á@áG®@àõÃ@à£×@àQì@à  @Ô(ö@Ó×
-@Ó
-@Ó33@ÒáH@Ò\@Ò=q@Ñë
-@Ñ@ÑG®@ÐõÂ@Ð£×@ÐQì@Ð  @Ï®@Ï\)@Ï
-=@ÎžR@Îff@Î{@ÍÂ@Íp€@Í
-ž@ÌÌÍ@Ìzá@Ì(ö@Ë×
-@Ë
-@Ë33@ÊáH@Ê\@Ê=q@Éë
-@É@ÉG®@ÈõÃ@È£×@ÈQì@È  @Ç®@Ç\)@Ç
-=@ÆžR@Æff@Æ{@ÅÂ@Åp€@Å
-ž@ÄÌÍ@Äzá@Ä(ö@Ã×
-@Ã
-@Ã33@ÂáH@Â\@Â=q@Áë
-@Á@ÁG®@ÀõÃ@À£×@ÀQì@À  @Ž(ö@³×
-@³
-@³33@²áH@²\@²=q@±ë
-@±@±G®@°õÂ@°£×@°Qì@°  @¯®@¯\)@¯
-=@®žR@®ff@®{@­Â@­p€@­
-ž@¬ÌÍ@¬zá@¬(ö@«×
-@«
-@«33@ªáH@ª\@ª=q@©ë
-@©@©G®@šõÃ@š£×@šQì@š  @§®@§\)@§
-=@ŠžR@Šff@Š{@¥Â@¥p€@¥
-ž@€ÌÍ@€zá@€(ö@£×
-@£
-@£33@¢áH@¢\@¢=q@¡ë
-@¡@¡G®@ õÃ@ £×@ Qì@   @(ö@×
-@
-@33@áH@\@=q@ë
-@@G®@õÂ@£×@Qì@  @®@\)@
-=@žR@ff@{@Â@p€@
-ž@ÌÍ@zá@(ö@×
-@
-@33@áH@\@=q@ë
-@@G®@õÃ@£×@Qì@  @®@\)@
-=@žR@ff@{@
-Â@
-p€@
-
-ž@ÌÍ@zá@(ö@×
-@
-@33@áH@\@=q@ë
-@@G®@õÃ@£×@Qì@  @hQì@g®@g
->@fff@eÂ@e
-ž@dzá@c×
-@c33@b\@aë
-@aG®@`£×@`  @_\)@^žR@^{@]p€@\ÌÍ@\(ö@[
-@ZáH@Z=q@Y@XõÂ@XQì@W®@W
->@Vff@UÂ@U
-ž@Tzá@S×
-@S33@R\@Që
-@QG®@P£×@P  @O\)@NžR@N{@Mp€@LÌÍ@L(ö@K
-@JáH@J=q@I@HõÃ@HQì@G®@G
-=@Fff@EÂ@E
-ž@Dzá@C×
-@C33@B\@Aë
-@AG®@@£×@@  @(Qì@'®@'
->@&ff@%Â@%
-ž@$zá@#×
-@#33@"\@!ë
-@!G®@ £×@   @\)@
-žR@
-{@
-p€@
-ÌÍ@
-(ö@
-@áH@=q@@õÂ@Qì@®@
->@ff@Â@
-ž@zá@×
-@33@\@ë
-@G®@£×@  @\)@žR@{@
-p€@
-ÌÍ@
-(ö@
-
-@
-áH@
-=q@	@õÃ@Qì@®@
-=@ff@Â@
-ž@zá@×
-@33@\@ë
-@G®@ £×@   ?Ð£×?Ï\)?Î{?ÌÌÍ?Ë
-
-?Ê=p?ÈõÂ?Ç®?Æff?Å
-ž?Ã×
-?Â\?ÁG®?À  ?ŸžR?œp€?Œ(ö?ºáH?¹?žQì?·
->?µÂ?Žzá?³33?±ë
-?°£×?¯\)?®{?¬ÌÍ?«
-?ª=q?šõÂ?§®?Šff?¥
-ž?£×
-?¢\?¡G®?   ?žR?p€?(ö?áH??Qì?
->?Â?zá?33?ë
-?£×?\)?{?ÌÍ?
-?=q?õÃ?®?ff?
-
-ž?×
-?\?G®?  ?!G®?
-žR?
-(ö??
-=?zá?ë
-?\)?
-ÌÍ?
-=q?®?
-ž?\?   >úáH>õÂ>ð£×>ë
->æff>áG®>Ü(ö>×
-=>Ñë
->ÌÌÍ>Ç®>Â\>œp€>žQì>³33>®{>šõÃ>£×
->žR>>zá>\)>=q>
-
-ž>  >uÂ>k
->aG®>W
-=>LÌÍ>B\>8Qì>.{>#×
->>\)>
-ž=õÂ=áG®=ÌÌÍ=žQì=£×
-=\)=uÂ=LÌÍ=#×
-<õÂ<£×
-<#×
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~bB~Æ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BxºrB{-B~[B~vK¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BsKBuæBx²ÜB{³B~LB~gÏ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bmj#Bp=ÞBs
-ŽBu×Bx€aB{q7B~>B~YT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BgÁûBj¶BmbBp/cBrü9BuÉBxæB{bœB~/B~JÙ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BbÓBdíBgºdBj;BmTBp çBríŸBuºBxkB{TAB~!B~<^¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B\q«B_EfBb<BdßBg«éBjx¿BmEBpmBrßCBu¬BxxðB{EÆB~B~-ã¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BVÉBY?B\jB_6ìBbÂBdÐBgoBjjFBm7
-BpòBrÐÉBuBxjuB{7LB~"B~g¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BQ!\BSõBVÁíBYÄB\[B_(pBaõGBdÂ
-BgôBj[ÊBm(¡BoõwBrÂMBu$Bx[úB{(ÐB}õ§B~ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BKy4BNLïBQÅBSæBV³rBYHB\MB_öBaæÌBd³¢BgyBjMOBm%BoæüBr³ÒBušBxMB{UB}ç+B~q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BEÑ
-BH€ÇBKqBN>tBQ
-JBSØ BV€÷BYqÎB\>€B_
-zBaØQBd¥'BgqýBj>ÔBm
-ªBoØBr¥WBur-Bx?B{
-ÚB}Ø°B}óö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B@(äBBüBEÉuBHLBKc"BN/øBPüÏBSÉŠBV|BYcRB\0)B^üÿBaÉÕBd¬BgcBj0XBlý/BoÊBrÛBuc²Bx0Bzý_B}Ê5B}åz¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B:œB=TxB@!NBBî%BEºûBHÑBKTšBN!BPîUBS»+BVBYTØB\!®B^î
-Ba»[Bd1BgUBj!ÞBlîŽBo»BraBuU8Bx"BzîäB}»»B}Öÿ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B4ØB7¬PB:y&B=EýB@ÓBBß©BE¬BHyWBKF-BNBPßÚBS¬°BVyBYF]B\3B^à	Ba¬àBdy¶BgFBjcBlà9Bo­BryæBuFŒBxBzàiB}­?B}È¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B/0mB2(B4ÐþB7ÕB:j«B=7B@XBBÑ/BEBHjÛBK7²BNBPÑ^BS5BVk
-BY7áB\žB^ÑBadBdk;Bg8BjèBlÑŸBoBrkkBu8ABxBzÑîB}ÄB}º¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B)EB,\ B/(ÖB1õ­B4ÂB7YB:\0B=)B?õÝBBÂ³BEBH\`BK)6BMö
-BPÂãBS¹BV\BY)fB[ö<B^ÃBaéBd\ÀBg)BiölBlÃCBoBr\ïBu)ÆBwöBzÃrB}HB}«¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B#à
-B&³ØB)®B,M
-B/[B1ç1B4ŽB7ßB:MµB=B?çbBBŽ8BEBHMåBK»BMçBPŽhBS>BVNBYëB[çÁB^ŽBanBdNDBgBiçñBlŽÇBoBrNtBuJBwè BzŽ÷B}ÍB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-7õB!
-°B#ØB&¥]B)r3B,?	B/
-àB1Ø·B4¥B7rcB:?:B=
-B?ØæBB¥œBErBH?iBK
-@BMÙBP¥ìBSrÃBV?BY
-pB[ÙFB^Š
-BaróBd?ÉBg
-BiÙvBlŠLBos"Br?øBu
-ÏBwÙ¥BzŠ|B}sRB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BÎBcB
-0_B ý6B#Ê
-B&âB)c¹B,0B.ýfB1Ê<B4B7céB:0¿B<ýB?ÊlBBBBEdBH0ïBJýÅBMÊBPrBSdIBV1BXýõB[ÊÌB^¢BadxBd1OBfþ%BiÊûBlÑBodšBr1~BtþUBwË+BzB}dØB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BçŠB»aB7BUB
-!äB îºB#»B&hB)U>B,"B.îëB1»ÁB4B7UnB:"DB<ïB?»ñBBÇBEUBH"tBJïJBMŒ!BP÷BSUÍBV"€BXïzB[ŒPB^'BaUýBd"ÓBfï©BiŒBlVBoV-Br#BtïÙBwŒ°BzB}V\B}q ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-?~B9BàB¬æByŒBFB
-iB à@B#­B&yìB)FÃB,B.àoB1­FB4z
-B7FòB:ÉB<àB?­uBBzLBEG"BHùBJàÏBM­¥BPz|BSGRBV(BXàÿB[­ÕB^z«BaGBdXBfá.Bi®BlzÛBoG±BrBtá^Bw®4Bz{
-B}GáB}c$¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BVB
-kB
-7çBŸBÑBjBkAB8B
-îB ÑÄB#B&kqB)8GB,
-B.ÑôB1ÊB4k¡B78wB:MB<Ò$B?úBBkÑBE8§BH}BJÒTBM*BPl BS8×BV­BXÒB[YB^l0Ba9BdÝBfÒ³BiBll`Bo96Br
-BtÒãBw¹BzlB}9fB}Tª¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bï.BÂéB¿B
-\B
-)lBöBBÃBðB\ÆB)B
-ösB ÃIB#B&\öB))ÌB+ö¢B.ÃyB1OB4]%B7)üB9öÒB<Ã©B?BB]UBE*,BG÷BJÃØBM¯BP]
-BS*[BU÷1BXÄB[ÞB^]µBa*Bc÷aBfÄ8BiBl]äBo*»Bq÷BtÄgBw>Bz^B}*ëB}F.¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aø
-Aþ5BçBŽnBDB
-NB
-ñBçÈBŽBtBNKB!B
-ç÷B ŽÎB#€B&NzB)QB+è'B.ŽýB1ÔB4NªB7B9èWB<µ-B?BBNÚBE°BGèBJµ]BM3BPO	BSàBUè¶BXµB[cB^O9Ba
-BcèæBfµŒBiBlOiBo
-?BqéBtµíBwÃBzOB}
-pB}7³¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aí=ŒAòå3Aø~àAþBÙ
-B¥òBrÉB
-? B
-
-vBÙLBŠ#BrùB?ÏB
-ŠB
-Ù|B ŠRB#s)B&?ÿB)
-ÕB+Ù¬B.ŠB1sYB4@/B7
-B9ÙÜB<Š²B?sBB@_BE
-5BGÚ
-BJŠáBMsžBP@BS
-eBUÚ;BX§B[sèB^@ŸBa
-BcÚkBf§ABitBl@îBo
-ÅBqÚBt§qBwtHBzA
-B}
-ôB})8¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AáílAçãAí.AòÈ=AøaêAýûBÊ¡BxBdNB
-1$B
-ýûBÊÑB§Bd~B1TBþ*B
-ËB ×B#d­B&1B(þZB+Ë1B.B1dÝB41ŽB6þB9Ë`B<7B?e
-BB1ãBDþ¹BGËBJfBMe=BP2BRþéBUËÀBXB[elB^2CB`ÿBcËïBfÆBieBl2sBnÿIBqÌ BtöBweÌBz2£B|ÿyB}Œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÖ
-AÜDAáÞ@AçwíAíAò«GAøDóAýÞ BŒ&BüBUÓB
-"©B
-ïBŒVB,BVB"ÙBï¯B
-Œ
-B \B#V2B&#	B(ïßB+ŒµB.B1VbB4#8B6ðB9ŒåB<»B?VBB#hBDð>BGœBJëBMVÁBP#BRðnBUœDBXB[VñB^#ÇB`ðBcœuBfKBiW!Bl#øBnðÎBqœ€Bt{BwWQBz$'B|ðþB}
-A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AËLÌAÐôCAÖðAÜ'AáÁJAçZ÷Aìô£AòPAø'üAýÁ©B­«BzBGWB
-.B
-áB­ÚBz±BGB]Bá4B
-®
-B záB#G·B&B(ádB+®:B.{B1GçB4œB6áB9®iB<{@B?HBBíBDáÃBG®BJ{pBMHFBP
-BRáóBU®ÉBX{B[HvB^MB`â#Bc®ùBf{ÐBiHŠBl|BnâSBq¯)Bt{ÿBwHÖBz¬B|âB|ýÆ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¿ü|AÅ£óAË= AÐ×MAÖpúAÜ
-§Aá€SAç> Aì×¬AòqYAø
-Aý€²B/BlB8ÜB
-²B
-ÒB_Bl5B9
-BâBÒ¹B
-B leB#9<B&B(ÒèB+¿B.lB19kB4AB6ÓB9îB<lÅB?9BBqBDÓHBG 
-BJlôBM9ËBP¡BRÓwBU NBXm%B[9ûB^ÑB`ÓšBc ~BfmTBi:+BlBnÓ×Bq ®BtmBw:ZBz1B|ÔB|ïJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AŽ¬,AºS£A¿íPAÅýAË ªAÐºWAÖTAÛí°Aá\Aç!	Aìº¶AòTbA÷îAýŒBŽB]B*aB	÷7B
-Ä
-BäB]ºB*B÷gBÄ=B
-B ]êB#*ÀB%÷B(ÄmB+CB.^B1*ðB3÷ÆB6ÄB9sB<^IB?+ BA÷öBDÄÌBG£BJ^yBM+OBOø&BRÄýBUÓBX^©B[+B]øVB`Å,BcBf^ÙBi+¯BkøBnÅ\Bq2Bt_	Bw+ßByøµB|ÅB|àÏ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A©[ÜA¯SAŽ Aº6­A¿ÐZAÅjAË³AÐ`AÖ7
-AÛÐ¹AájfAçAì¿Aò7lA÷ÑAýjÆB9BOBåB	èŒB
-µBiBO?B
-BèìBµÂB
-B OoB#
-EB%éB(µñB+ÈB.OB1
-uB3éKB6¶!B9øB<OÎB?
-€BAé{BD¶QBG'BJOþBM
-ÕBOé«BR¶BUXBXP.B[
-B]éÛB`¶±BcBfP^Bi
-4Bkê
-Bn¶áBq·BtPBw
-dByê:B|·B|ÒT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
-A£³A©L¯A®æ\AŽ	Aº¶A¿³bAÅMAÊæ»AÐhAÖAÛ³ÁAáMnAæçAìÈAòuA÷Ž"AýMÎBsœB@B
-jB	ÚAB
-§BsíB@ÄB
-BÚpB§GB
-t
-B @óB#
-ÉB%Ú B(§vB+tMB.A#B1
-ùB3ÚÐB6§ŠB9t|B<ASB?)BAÚÿBD§ÖBGt­BJABMYBOÛ0BRšBUtÜBXA³B[B]Û_B`š6Bcu
-BfAâBi¹BkÛBnšeBqu<BtBBwèByÛ¿B|šB|ÃØ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A»;Ab²Aü_A£
-A©/¹A®ÉfAŽcA¹ü¿A¿kAÅ0AÊÉÅAÐcqAÕý
-AÛËAá0xAæÊ%AìcÒAñý~A÷+Aý0×BeBB2BþïB	ËÅB
-BerB2HBÿBËõBËB
-e¡B 2xB"ÿNB%Ì%B(ûB+eÑB.2šB0ÿ~B3ÌTB6+B9fB<2×B>ÿ®BAÌ
-BD[BGf1BJ3BLÿÞBOÌŽBRBUfaBX37B[ B]ÌäB`ºBcfBf3gBi =BkÍBnêBqfÀBt3Bw mByÍCB|B|µ]¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AjëAbA¬AEŒAßiA£yA©ÂA®¬oAŽFA¹ßÈA¿yuAÅ!AÊ¬ÎAÐF{AÕà(AÛyÕAáAæ­.AìFÛAñàA÷z4AýáBVÇB#BðtB	œJB
- BV÷B#ÍBð£BœyBPB
-W&B #ýB"ðÓB%œ©B(B+WVB.$,B0ñB3œÙB6¯B9WB<$]B>ñ3BAŸ	BDàBGW¶BJ$BLñcBOŸ9BRBUWæBX$ŒBZñB]ŸiB`?BcXBf$ìBhñÂBkŸBnoBqXEBt%BvñòByŸÈB|B|Šâ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Ax58AÂA[¿AõlAA(ÆAÂrA£\AšõËA®xAŽ)%A¹ÂÑA¿\~AÄö+AÊØAÐ)
-AÕÃ2AÛ\ÞAàöAæ7Aì)äAñÃA÷]=AüöêBHLB"BáøB	®ÏB
-{¥BH{BQBâ(B®þB{ÕB
-H«B B"âXB%¯.B(|B+HÛB.±B0âB3¯^B6|5B9I
-B<áB>âžBA¯BD|dBGI;BJBLâçBO¯ŸBR|BUIjBXABZãB]¯íB`|ÄBcIBfpBhãGBk°
-Bn|óBqIÊBt BvãvBy°MB|}$B|g¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AaAlãAxßA¥
-A>ÉAØvAr"A
-ÏA¥{A£?(AšØÕA®rAŽ
-.A¹¥ÛA¿?AÄÙ5AÊrâAÐ
-AÕŠ;AÛ?çAàÙAæsAAì
-íAñŠA÷@GAüÙóB9ÐB§BÓ}B	 SB
-m)B: BÖBÓ­B BmYB
-:0B B"ÓÜB% ³B(mB+:_B.6B0Ô
-B3 ãB6m¹B9:B<fB>Ô<BA¡BDméBG:¿BJBLÔlBO¡BBRnBU:ïBXÅBZÔB]¡rB`nHBc;BfõBhÔËBk¡¢BnnxBq;NBt%BvÔüBy¡ÒB|nšB|ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AJóûAVBèAav@Al©AwÜñA&A!ÒA»AU+AîØA
-A£"1Aš»ÞA®UA³ï8A¹åA¿"AÄŒ>AÊUëAÏïAÕDAÛ"ñAàŒAæVJAëï÷Añ£A÷#QAüŒýB+UBø+BÅB	ØB
-^®B+
-Bø[BÅ1BB^ÞB
-+ŽBøB"ÅaB%7B(_B++åB-ø»B0ÅB3hB6_>B9,B;øëB>ÅÁBABD_nBG,DBIùBLÅñBOÇBR_BU,tBWùJBZÆ B]÷B`_ÍBc,£BeùzBhÆPBk&Bn_ýBq,ÔBsùªBvÆByWB|`-B|{p¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A4S]A?¢JAJÕ¢AVûAa<SAlo¬Aw£Ak/AÛAA85AÑáAkA£;AšèA®8A³ÒBA¹kîA¿AÄGAÊ8ôAÏÒ¡AÕlMAÛúAà§Aæ9SAëÓAñl®A÷ZAü B
-ÙBé°B¶B	]B
-P3B
-	BéàB¶¶BBPcB
-
-9BêB"¶æB%œB(PB+
-iB-ê@B0·B3ìB6PÃB9
-B;êoB>·FBA
-BDPòBG
-ÉBIêBL·uBOLBRQ"BU
-øBWêÏBZ·¥B]{B`QRBc
-(BeêþBh·ÕBk¬BnQBq
-XBsë/BvžByÛB|Q²B|lõ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
-²¿A)¬A45A?h]AJµAUÏAafAl5¿AwiAN8AçåAA>AŽëANA¢èEAšòA®A³µKA¹N÷AŸè€AÄQAÊýAÏµªAÕOWAÚéAà±Aæ
-^Aë¶
-AñO·AöécAüB^BÛ5Bš
-B	táB
-AžBBÛdBš;BuBAçB
-ŸBÛB"škB%uAB(BB+îB-ÛÄB0šB3uqB6BGB9
-B;ÛôB>šÊBAu¡BDBwBGMBIÜ$BLšúBOuÐBRB§BU}BWÜSBZ©*B]v B`BÖBc­BeÜBh©ZBkv0BnCBqÝBsÜ³Bv©Byv`B|C6B|^z¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A!AaA
-fA(Ç¿A3ûA?.pAJaÈAU!A`ÈyAkûÑAw/*A1BAÊîAdAþHAõA1¢A¢ËNAšdûA­þ§A³TA¹2AŸË­AÄeZAÉÿAÏ³AÕ2aAÚÌAàeºAåÿgAëAñ2ÀAöÌmAüfB ÿãBÌ¹BB	ffB
-3<B BÌéB¿BfB3mB
- CBÍB"ðB%fÆB(3B+ sB-ÍIB0B3föB63ÌB9 ¢B;ÍyB>OBAg%BD3üBG ÒBIÍšBLBOgUBR4+BUBWÍØBZ®B]g
-B`4\Bc2BeÎBhßBkgµBn4BqbBsÎ8BvBygåB|4»B|Oÿ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @àã@÷ÞAóÇA' A
-ZxA(ÑA3Á)A>ôAJ'ÚAU[2A`AkÁäAvõ<AJA­÷AG€AáQAzýAªA¢®VAšHA­á°A³{\A¹	AŸ®¶AÄHbAÉâAÏ{œAÕiAÚ¯AàHÂAåâoAë|
-AñÈAö¯uAüI"B ñgBŸ=BB	WêB
-$ÀBñBŸmBDBXB$ðB
-ñÇBŸB"sB%XJB(% B*ñöB-ŸÍB0£B3XyB6%PB8ò&B;ŸüB>ÓBAX©BD%BFòVBI¿,BLBOXÙBR%¯BTò
-BW¿\BZ3B]Y	B`%ßBbò¶Be¿BhbBkY9Bn&BpòåBs¿ŒBvByYiB|&?B|A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @³¡È@Ê?¢@àŠS@÷
-A¹ÚAí3A
- A(SäA3<A>ºAIííAU!FA`TAköAv»OA÷TAA*­AÄZA^A÷³A¢`Aš+
-A­Ä¹A³^fAžøAŸÀAÄ+mAÉÅAÏ^ÆAÔørAÚAà+ÌAåÅxAë_%AðøÒAö~Aü,+B âëB¯ÂB|B	InB
-EBã
-B¯òB|ÈBIBuB
-ãKB°"B"|øB%IÎB(¥B*ã{B-°QB0}(B3IþB6ÕB8ã«B;°B>}WBAJ.BDBFãÚBI°±BL}BOJ]BR4BTä
-BW°áBZ}·B]JB`dBbä:Be±Bh}çBkJœBnBpäjBs±ABv~ByJíB|ÄB|3¿  ¿  ¿  ¿  ¿  ¿  @`@þe@³e@ÉËÇ@à2x@ö)AíA³FA
-æA(öA3MOA>šAIŽ ATçXA`±AkN	AvbAÚ]At
-A
-·A§cAAAÚŒA¢tiAšA­§ÂA³ApAžÛ
-AŸtÉAÄvAÉš"AÏAÏAÔÛ|AÚu(AàÕAåšAëB.AðÛÛAöuAü5B ÔpB¡FBn
-B	:ôB
-ÊBÔ B¡wBnMB;#BúB
-ÔÐB¡ŠB"n}B%;SB()B*Õ B-¡ÖB0n­B3;B6YB8Õ/B;¢B>nÜBA;²BDBFÕ_BI¢5BLo
-BO;ãBR¹BTÕBW¢fBZo<B]<B`éBbÕ¿Be¢BholBk<BBn	BpÕïBs¢ÅBvoBy<rB|	HB|$¿  ¿  ¿  ¿  @2>@_zS@#Ú@@²ñ<@ÉWì@ßŸ@ö%OAF AyXA
-¬±A'à
-A3bA>FºAIzAT­kA_àÄAk
-AvGuAœgAWAðÀAlA$AœÆA¢WrA§ñ A­ÍA³$yAžŸ&AŸWÒAÃñAÉ,AÏ$ØAÔŸ
-AÚX2AßñÞAåAë%9AðŸåAöXAûò>B ÅõBÌB_¢B	,xB
-ùOBÆ%BûB_ÒB,šBù~B
-ÆUB+B"`B%,ØB'ù®B*Æ
-B-[B0`1B3-B5ùÞB8ÆŽB;B>`aBA-7BCú
-BFÆäBI»BL`BO-gBQú>BTÇBWêBZ`ÁB]-B_úmBbÇDBeBh`ñBk-ÇBmúBpÇtBsJBva By-÷B{úÍB|¿  ¿  ?¯xI@÷Ú@1Å<@^@
-° @°@²}b@Èä@ßJÃ@õ±tA
-A?lA
-rÄA'Š
-A2ÙuA>
-ÍAI@&ATs~A_Š×AjÚ/Av
-A pA:
-AÓÉAmvA"A ÐA¢:}A§Ô)A­mÖA³Až¡/AŸ:ÜAÃÔAÉn5AÏâAÔ¡AÚ;;AßÔéAånAëBAð¡îAö;AûÕHB ·zBPBQ'B	
-ýB
-êÓB·ªBBQVB
--BëB
-·ÙB°B"QB%
-]B'ë3B*ž	B-ßB0Q¶B3
-B5ëbB8ž9B;
-B>QåBA
-ŒBCëBFžiBI
-?BLRBO
-ìBQëÂBTžBW
-oBZREB]
-B_ëòBbžÉBe
-BhRuBkLBmì"BpžøBs
-ÏBvR¥By{B{ìQB|?!G®?)Õ?®
-@$@0Ý@]ªé@
-<%@¢×@²	@Èp8@ÞÖé@õ=AÒ&A~A
-8×A'l/A2A=ÒàAI9AT9A_léAj BAuÓAyA
-&A¶ÒAPAê-AÙA¢
-A§·2A­PßA²êAž8AŸ
-åAÃ·AÉQ>AÎêëAÔAÚ
-EAß·òAåQAêëKAðøAö
-€AûžQB šÿBuÕBB«B	B
-ÜXB©.BvBBÛB±BÜB
-©^Bv5B"C
-B%áB'Ü·B*©B-vdB0C:B3B5ÜçB8©œB;vB>CkBAABCÝBF©îBIvÄBLCBOqBQÝGBTª
-BWvôBZCÊB]¡B_ÝwBbªMBew$BhCúBkÐBmÝ§Bpª}BswSBvD)By B{ÝÖ¿  ?b(?&6¬?¬¶@(p@/õÒ@\Ã4@ÈK@.ü@±­@Çü^@Þc@ôÉÀA9AËAþêA'2BA2eA=óAHÌKASÿ€A_2üAjfUAu­AfA 0AÝA3AÍ6AfâA¢ A§<A­3èA²ÍAžgBAŸ îAÃAÉ4IAÎÍõAÔg¢AÚNAßûAå4šAêÎTAðhAö®AûZB BgZB40B	B
-ÍÝB³BgB4`B6BÎ
-B
-ãBg¹B"4B%fB'Î<B*B-géB04¿B3B5ÎlB8CB;hB>4ïBAÆBCÎBFrBIhIBL5BOõBQÎÌBT¢BWhyBZ5OB]%B_ÎüBbÒBehšBh5BkUBmÏ+BpBshØBv5®By	j¿  ¿  ?ÃV?"×?ªæ°@@º@/
-@[Û~@Tp@»!@±!Ò@Ç@Ýï3@ôUäA^KA£AÄüA&øTA2+¬A=_AH]ASÅ¶A^ùAj,gAu_¿AIA
-ã9A|æAA°?AIìA¡ãA§}EA­òA²°AžJKAœãùAÃ}¥AÉRAÎ°þAÔJ«AÙäXAß~Aå±Aê±^AðK
-Aõä·Aû~eB BXÞB%µBòB
-¿aB8BYB%åBò»B¿B
-gBY>B"&B$òêB'¿ÁB*B-YmB0&DB2óB5¿ñB8ÇB;YB>&tB@óJBCÀ!BF÷BIYÍBL&€BNózBQÀQBT'BWYýBZ&ÔB\óªB_ÀBbWBeZ-Bh'BjóÙBmÀ°BpBsaB¿  ¿  ¿  ¿  ?$?
-ù?©F@Y@.&h@ZóÊ@à@GG@°­÷@Çš@Ý{Y@óâ
-A$^AW¶AA&ŸgA1ñ¿A=%AHXpASÉA^¿!AiòyAu%ÒA,A
-ÆCA_ïAùAHA,õA¡Æ¢A§`NA¬ùûA²©Až-UAœÇAÃ`¯AÈú[AÎAÔ-ŽAÙÇaAßaAäúºAêgAð.AõÇÁAûanB }BJcB9BäB
-°æB}œBJBiBä?B±B
-}ìBJÂB"B$äoB'±EB*~
-B-JóB0ÉB2äB5±vB8~LB;K"B>ùB@äÏBC±¥BF~|BIKRBL)BNäÿBQ±ÕBT~¬BWKBZXB\å/B_²Bb~ÛBeK±BhBjå^Bm¹¿  ¿  ¿  ¿  ¿  ¿  ?
-²?Z1?§GÝ@ qQ@->³@Z
-@l»@Ól@°:
-@Æ Î@Ý@ón0AêpA
-ÉAQ!A&zA1·ÒA<ë+AH
-ASQÛA^
-4AižAtëåAA
-©LABøAÜ¥AvRAþA¡©«A§CYA¬ÝA²v²Až_Aœª
-AÃCžAÈÝdAÎwAÔŸAÙªjAßDAäÝÅAêwqAð
-AõªÊAûDwB oB;èBŸBÕB
-¢kBoAB<BîBÕÄB¢B
-oqB<GB"	
-B$ÕôB'¢ËB*o¡B-<wB0	NB2Ö$B5¢úB8oÑB;<§B>	}B@ÖTBC£*BFpBI<×BL	­BNÖBQ£ZBTp0BW=BZ	ÝB\Ö³B_£Bbp`Be=6Bhò¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?æá?»X?¥xp?ÿ5@,Vý@Y$_@øà@_@¯ÆC@Æ,ó@Ü€@òúTA°AãÜA4A&JA1}åA<±=AGäASïA^KGAi~At±øAåQA
-UA&A¿®AY[Aó	A¡µA§&bA¬ÀA²Y»A·óhAœAÃ&ÁAÈÀnAÎZAÓóÇAÙuAß'!AäÀÎAêZzAïô'AõÔAû'B `B-mBúCBÇB
-ïB`ÆB-BúrBÇIBB
-`õB-ÌB!ú£B$ÇyB'OB*a&B--üB/úÒB2Ç©B5B8aUB;.,B=ûB@ÇÙBC¯BFa
-BI.\BKû2BNÈBQßBTaµBW.BYûaB\È8B_BbhÊ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
-H?
-?£©?ýCÌ@+oI@X<ª@
-@ë·@¯Rh@Å¹@ÜÊ@òzAvA©ïAÝGA&A1CøA<wQAGª©ARÞA^ZAiD²Atx
-A«dA
-o^A	
-A¢¹A<eAÖA¡o¿A§	kA¬£A²<ÄA·ÖqAœp
-AÃ	ÊAÈ£wAÎ=%AÓÖÑAÙp~Aß
-*Aä£×Aê=Aï×0AõpÝAû
-B RB
-ñBëÇBžB
-
-tBRJB!Bë÷BžÍB
-€B
-R{BQB!ì'B$žþB'
-ÔB*RªB-B/ìWB2¹-B5B8RÚB;±B=ìB@¹]BC4BFS
-BIàBKì·BN¹BQcBTS9BW BYìæB\À¢¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?	©>?}¬?¡Ù?ût_@*@WTô@+@wÛ@®Þ@ÅE=@Û«î@òA<šAp A£YA%Ö²A1
-
-A<=bAGp»AR€A]×lAi
-ÄAt>
-AquA
-RhAìA
-ÁAnA¹A¡RÇAŠìsA¬ A²ÍA·¹yAœS&AÂìÔAÈAÎ -AÓ¹ÚAÙSAÞí3AäßAê Aïº9AõSåAúíB CBvBÝLBª"B
-vùBCÏB¥BÝ|BªSBw)B
-CÿBÖB!Ý¬B$ªB'wYB*D/B-B/ÝÜB2ª²B5wB8D_B;5B=Þ
-B@ªâBCwžBFDBIeBKÞ;BN«BQwèBTDŸBWz¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
-k?
-ÞÚ? 
-2?ù€ö@)Þ@Vm@@Q@@®j²@ÄÑc@Û8@ñÅA»A6AilA%ÄA0Ð
-A<uAG6ÎARj&A]AhÐ×At/A7A
-5qAÏ
-AhÊAwA#A¡5ÐAŠÏ}A¬i)A²ÖA·Aœ60AÂÏÝAÈiAÎ6AÓãAÙ6AÞÐ<AäiéAêAïBAõ6ïAúÐB 5$BúBÎÑB§B
-h}B5TB+BÏB×Bh®B
-5BZB!Ï1B$B'hÝB*5ŽB-B/ÏaB27B5i
-B85äB;ºB=ÏB@gBCi=BF6BIéBKÏÀBNBQpR¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?k?	@?:Å?÷Õ@(ž(@U
-@)u@&@­ö×@Ä]@ÚÄ9@ñ*êAÈÎAü&A/A%b×A00A;ÉAFüáAR09A]cAhêAsÊBA~ýA
-zA²'AKÓAåA-A¡ÙAŠ²A¬L4A±åàA·Aœ:AÂ²æAÈLAÍæ?AÓìAÙAÞ³EAäLòAéæAïLAõùAú³¥B &©BóBÀUB,B
-ZB&ÙBó¯BÀB\BZ2B
-'	B
-óßB!ÀµB$B'ZbB*'9B,ôB/ÀåB2ŒB5ZB8'hB:ô?B=ÁB@ëBCZÁBF'BHônBKÈ*¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ý?¡/?k\?ö!@'Ðs@TÕ@µ@
-L@­ý@Ãé®@ÚP_@ð·AáAÂ9AõA%(êA0\CA;AFÂóAQöLA])€Ah\ýAsUA~Ã®AûA0A.ÝAÈAb6A ûäAŠA¬/=A±ÈêA·bAŒüCAÂïAÈ/AÍÉIAÓbõAØü¢AÞOAä/üAéÉ©AïcUAôýAú¯B -BåB±ÛB~±B
-KB^Bå4B²
-B~áBK·B
-B
-ådB!²:B$B'KçB*œB,åB/²jB2@B5LB8íB:åÃB=²B@pBCLFBF ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ö[ë?U?ï?ô6Ž@&èœ@S¶
-@AÀ@šq@­"@ÃuÓ@ÙÜ@ðC4ATóAKA»€A$îüA0"TA;U­AFAQŒ^A\ï¶Ah#AsVgA~ÀAÞAx9AæA«AE@A ÞíAŠxA¬FA±«óA·EAŒßLAÂxùAÈ¥AÍ¬RAÓEÿAØß¬AÞyYAäAé¬²AïF_Aôà
-AúyžB 	³BÖB£_Bp6B
-=
-B	âBÖ¹B£BpeB=<B
-
-B
-ÖéB!£¿B$pB'=lB*
-BB,×B/£ïB2pÅB5=B8
-qB:×HB=€
-B@wÚ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ï
-I>üÇ?Ì?ògK@&@RÎj@Ì@4@¬G@Ãù@Ùh©@ïÏZAAN^A¶A$µA/ègA;ÀAFOAQqA\µÉAgé!As
-zA~OÓAÁA[DAôðAA(JA ÁöAŠ[£A«õOA±üA·(©AŒÂUAÂ\AÇõ¯AÍ\AÓ)	AØÂ¶AÞ\bAãöAé»Aï)hAôÃAú\ÁAÿönBÈBäBaºB
-.B
-ûgBÈ=BBaêB.ÁBûB
-ÈmB!DB$bB'.ðB)ûÇB,ÈB/sB2bIB5/ B7ûöB:Ï²¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >çà¥>õc?ý
-?ðâ@%T@Qæ¶@~Ž@Àœ@¬'m@Â
-@ØôÏ@ï[AáAqAGÉA${"A/®zA:áÓAF+AQHA\{ÜAg¯5ArâA~çA€ A>MA×úAqŠA
-SA €ÿAŠ>¬A«ØYA±rA·
-²AŒ¥_AÂ?
-AÇØ¹AÍrfAÓ
-AØ¥¿AÞ?kAãÙAérÅAï
-qAôŠ
-Aú?ËAÿÙxB¹BiBS?B
- B
-ììB¹ÂBBSoB EBí
-B
-¹òB!ÈB$SB' uB)íKB,º!B/øB2SÎB5'¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >à£>îK ?-¬?îÈq@$1@Pþý@}Ì_@Là@«³@ÂB@Øó@îç€A§*A
-ÚA
-ÛA$A4A/tA:§äAEÛ=AQA\AîAguFAršA}ÛøA©A!UA»AT®Aî[A AŠ!ŽA«»aA±UA¶î»AŒhAÂ"AÇ»ÁAÍUnAÒïAØÇAÞ"tAãŒ AéUÍAîïzAô&Aú"ÔAÿŒB«BwìBDÃB
-B
-ÞpB«FBx
-BDóBÉBÞB
-«vB!xLB$E"B'øB)ÞÏB,«¥B/a¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ùe]>ç
-û?^C?ìù@#Iç@PH@|äª@Ù@«?·@ÁŠh@Ø
-@îsÊAm=A
- AÓîA$FA/:A:møAE¡PAPÔšA\Ag;YArn²A}¢
-Aj²A^A
-A7žAÑdA kAŠŸA«kA±8A¶ÑÅAŒkqAÂ
-AÇÊAÍ8wAÒÒ$AØkÐAÞ}Aã*Aé8ÖAîÒAôl1AúÝAÿBBiqB6HB
-
-B
-ÏôBËBi¡B6wBNBÐ$B
-úB!iÐB$6§B'}B)×9¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ò'»>ßÐY?Û?ë)@"b3@O/@{üö@e,@ªËÝ@Á2@×?@íÿïA3PA
-fšAA#ÍZA/ ²A:4
-AEgcAP»A[ÎAglAr4ÅA}h
-AM»AçhAAÁAŽnA NA¥çÈA«uA±!A¶ŽÎAŒNzAÁè'AÇÔAÍAÒµ-AØNÚAÝèAã4AéáAîµAôO:AùèæAÿB BZöB'ÌB
-ô£B
-ÁyBOB[&B'üBôÒBÁšB
-B![UB$/¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Êê>Øµ?¿r?éZ6@!z~@NGà@{A@ñR@ªX@ÀŸ³@×%d@íAùcA
-,ŒA`A#lA.ÆÅA9ú
-AE-vAP`ÎA['AfÇAqú×A}./A0ÄAÊqAd
-AýËAxA 1%A¥ÊÑA«d~A°þ*A¶×AŒ1AÁË0AÇdÝAÌþAÒ7AØ1äAÝËAãe=AèþêAîAô2CAùËðAÿeB€BL{BQB
-æ'B
-²þBÔBLªBBæWB³-B
-é¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ã¬s>ÑTñ?ð?çÆ@ Å@M`'@z-@}u@©ä&@ÀJ×@Ö±@í9A¿uA
-òÍA&&A#Y~A.×A9À/ADóAP&àA[Z8AfAqÀéA|ôBAÎA­{AG(AàÕAzA .A¥­ÚA«GA°á4A¶zàAŒAÁ®:AÇGçAÌáAÒ{AAØíAÝ®AãHFAèáóAî{ AôLAù®ùAÿH¥Bq)B=ÿB
-ÖB
-×¬B
-€BqXB>/B
-BÞÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ŒnÐ>ÊN? ?å»\@«@Lxr@yEÔ@	@©pL@¿Öý@Ö=®@ì€_A
-A
-žàAì9A#A.RêA9BAD¹AOìòA[ KAfS€AqüA|ºUAöØA
-A*1AÃÞA]A÷7A¥äA«*A°Ä=A¶]êA»÷AÁDAÇ*ñAÌÄAÒ^JA×÷öAÝ£Aã+PAèÄüAî^©AóøVAùAÿ+¯Bb®B/BüZB
-É0B
-BbÝB6¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >µ1,>ÂÙª?Q/?ãëó@
-Ã\@KŸ@x^ @Á@šür@¿c#@ÕÉÔ@ì0
-AKA
-~óA²LA"å€A.üA9LTAD­AO³AZæ^Af·AqMA|iAÙáAsA
-:AŠçA@AÚ@A¥síA«
-A°§GA¶@ôA»Ú¡AÁtMAÇ
-úAÌ§ŠAÒASA×Û AÝt¬AãYAèšAîA²AóÛ`Aùu
-Aÿ·BT2B!BíßB
-ºµB
-q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >­ó>»?Æ?â
-@
-Ûš@J©
-@wvl@!ç@š@ŸïI@ÕUù@ëŒ«A®A
-EAx^A"«¶A-ßA9hADEÀAOyAZ¬qAeßÉAq"A|F|AŒêAVAðDAðA#AœJA¥V÷Aªð€A°QA¶#ýA»œªAÁWVAÆñAÌ°AÒ$\A×Ÿ	AÝW¶AâñbAèAî$œAóŸiAùXAþñÁBE·BBæI¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Šµå>Ž^C?²U?àM@
-óï@IÁQ@v³@®
-@š»@Ÿ{m@Ôâ
-@ëHÎA ×¿A
-
-A>pA"qÉA-¥!A8ØzAD
-ÒAO?*AZrAe¥ÜApÙ4A|
-AóA9AÓLAlùAŠA SA¥: AªÓ¬A°mYA¶A» ²AÁ:_AÆÔ
-AÌmžAÒeA×¡AÝ:¿AâÔlAènAîÅAó¡rAù;
-AþÔËB>!¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >xA>­ À?âô?Þ}¹@
-
-?@HÙ¡@u§@:3@§ ã@Ÿ@ÔnD@êÔöA ÓA
-Ñ,AA"7ÝA-k5A8ACÑæAO?AZ8AekïApGA{Ò¡AýA
-ªA¶WAPAé±A]A¥
-
-Aª¶¶A°PcAµêA»ŒAÁ
-iAÆ·AÌPÂAÑêpA×
-AÝ
-ÉAâ·vAèQ#AíêÏAó|Aù+ó¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >:>¥ã??Ü®P@$@Gñì@t¿N@ÆX@§-@œº@Óúk@êaA cæA
-?AÊA!ýïA-1HA8d¡ACùANËQAYþ©Ae2Ape[A{ŽAfAÿŽAaA3
-AÌºAffA¥ AªÀA°3lAµÍA»fÆAÁ rAÆ AÌ3ÍAÑÍyA×g&AÝ ÓAâAè4,AíÛ£¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >üú>¥x?D"?ÚÞç@<Ö@G
-8@s×@R~@Š¹/@œß@Ó@éíAA )ùA
-]QAªA!ÄA,÷[A8*³AC^
-ANdAYÄœAdøAp+nA{^ÇAIAâœA|jAA¯ÃAIpA€ã
-Aª|ÉA°vAµ°"A»IÐAÀã}AÆ})AÌÖAÑ°A×J/AÜãÜAâS¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >¿W>h?~é?Ù@U*@F"@rïí@Þ§@ŠEX@Œ¬	@Óº@éyk@ÿà
-A
-#gAV¿A!A,œpA7ðÈAC$!ANWyAYÒAdŸ*AoñA{$ÜA,AÅÈA_tAù!AÍA,zA€Æ'Aª_ÓA¯ùAµ.A»,ÚAÀÆAÆ`4AËùàAÑA×;¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >³>*q?{JÂ?×@%@mv@E:×@r9@jÍ@¥Ñ~@Œ8/@Òà@é@ÿlBA
-éyA
-ÒA!P*A,A7¶ÛABê4AN
-AYPäAd=Ao·AzêïA$AšÑAB}AÜ*Au×AA€©1AªBÞA¯ÜAµv7A»äAÀ©AÆC=AËêŽ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >v
->ìÍ?w«ð?Õpœ@
-Á@DS#@q @öó@¥]€@»ÄU@Ò+@è¶@þøgA
-¯AâåA!=A,IA7|îAB°FAMãAYøAdJPAo}šAz±Aò-AÚA%A¿3AXáAòA€:Aª%çA¯¿AµY@AºòíAÀd¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >h
-×>¯j?t
->?Ó¡d@@Ckv@p8Ø@
-@€éÎ@»P~@Ñ·/@è
-à@þA
-u¡AšúA ÜRA,ªA7CABv\AM©ŽAXÝ
-AdeAoCœAzwAÕ8AnäAA¢?A;ëAÕA€oEAªñA¯¢AµJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Y>tã?pnm?ÑÑû@¶`@BÂ@oQ$@C@€uó@ºÜ¥@ÑCU@çª@þ·A
-;ŽAo
-A ¢eA+ÕŸA7	AB<nAMoÇAX£AcÖxAo	ÐAz=)AžBAQïAëA
-HA
-õAž¡A€RNA©ùÅ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >KJ>fhÆ?lÏ»?Ð¢@ÎŽ@A@niw@m@€
-@ºhÎ@ÐÏ@ç60@ýáA
-ÉA5"A hzA+ÒA6Ï+ABAM5ÜAXi4AcAnÏåAz?ALA4ùAÎŠAhRAÿA©v¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ><>Wí?i0è?Î39@ç @@Ža@mÃ@'@£C@¹ôô@Ð[¥@æÂV@ý)A	ÇÜAû4A .A+aåA6>AAÈALûïAX/GAcbAnøAyÉRA~VAA±¯AY&¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >.»>Ir7?e?ÌcÐ@ÿK@?Ì­@l@³ž@£i@¹@ÏçË@æN|@üµ-A	ïAÁGAô A+'øA6[QAA©ALÂAWõZAc(³An\
-AydAa_AÖ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >€s>:÷p?aóe?Êx@@>å @k²b@?â@¢Š@¹
-D@Ïsõ@åÚ¥@üAVA	TA\AºµA*î
-A6!eAATŸALAW»oAbîÇAn" Ayq¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >)/>,|,?^T?ÈÅ@/ê@=ýL@jÊ­@Ì@¢2¹@žj@Ï @åfË@ûÍ}A	AMoAÇA*Ž A5çyAAÑALN)AWAbÐo¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >­é>
- æ?ZµÃ?ÆõŠ@H5@=@iâù@X.@¡Ÿß@ž%@Î@@äòò@ûY¢Aà)AAFÛA*z3A5­A@àäAL/Ñ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =èeE>?W?Å&M@`@<-ë@hûM@äW@¡K@·±º@Îj@ä@úåÌAŠ?AÙA
-ïA*@HA55¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =Ën¹>
-Ù?Sx@?ÃVä@xÕ@;F7@h@p~@ ×.@·=ß@Í€@ä
-A@úqòAlQAªA
-î¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =®x1=å *?OÙ?Á@
-(@:^@g+ì@ü§@ cX@¶Ê	@Í0º@ãk@ùþ
-AMû¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =€=È)?L:Œ?¿ž#@
-©t@9vÖ@fD8@Í@ï~@¶V/@ÌŒà@ãZº¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =i.=«3?Hë?œèº@
-ÁÀ@8"@e\@ó@{€@¶~¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =/)==?Dý9?Œa@
-Ú@7§u@dt×@ØF¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  <êwô=bì?A^h?ºIù@	ò_@7.¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  <m;Š=( Ü?=¿?¹W6¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  9°ç\=
-J¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ?!G®?Ð£×@(Qì@hQì@(ö@Ž(ö@Ô(ö@ô(öA
-{A{A*{A:{AJ{AZ{Aj{Az{A
-
-=A
-=A
-=A
-=A¥
-=A­
-=Aµ
-=Aœ
-=AÅ
-=AÍ
-=AÕ
-=AÝ
-=Aå
-=Aí
-=Aõ
-=Aý
-=B
-B
-B
-
-B
-B
-B
-B
-B
-
-B"
-B&
-B*
-B.
-B2
-B6
-B:
-B>
-BB
-BF
-BJ
-BN
-BR
-BV
-BZ
-B^
-Bb
-Bf
-Bj
-Bn
-Br
-Bv
-Bz
-B~
-?
-žR?Ï\)@'®@g®@×
-@³×
-@Ó×
-@ó×
-A	ë
-Aë
-A)ë
-A9ë
-AIë
-AYë
-Aië
-Ayë
-AõÃAõÃAõÃAõÃA€õÃA¬õÃAŽõÃAŒõÃAÄõÃAÌõÃAÔõÃAÜõÃAäõÃAìõÃAôõÃAüõÃBzáBzáB
-záBzáBzáBzáBzáB
-záB"záB&záB*záB.záB2záB6záB:záB>záBBzáBFzáBJzáBNzáBRzáBVzáBZzáB^záBbzáBfzáBjzáBnzáBrzáBvzáBzzáB~zá?
-(ö?Î{@'
->@g
->@
-@³
-@Ó
-@ó
-A	ÂAÂA)ÂA9ÂAIÂAYÂAiÂAyÂAáHAáHAáHAáHA€áHA¬áHAŽáHAŒáHAÄáHAÌáHAÔáHAÜáHAäáHAìáHAôáHAüáHBp€Bp€B
-p€Bp€Bp€Bp€Bp€B
-p€B"p€B&p€B*p€B.p€B2p€B6p€B:p€B>p€BBp€BFp€BJp€BNp€BRp€BVp€BZp€B^p€Bbp€Bfp€Bjp€Bnp€Brp€Bvp€Bzp€B~p€??ÌÌÍ@&ff@fff@33@³33@Ó33@ó33A	AA)A9AIAYAiAyAÌÍAÌÍAÌÍAÌÍA€ÌÍA¬ÌÍAŽÌÍAŒÌÍAÄÌÍAÌÌÍAÔÌÍAÜÌÍAäÌÍAìÌÍAôÌÍAüÌÍBffBffB
-ffBffBffBffBffB
-ffB"ffB&ffB*ffB.ffB2ffB6ffB:ffB>ffBBffBFffBJffBNffBRffBVffBZffB^ffBbffBfffBjffBnffBrffBvffBzffB~ff?
-=?Ë
-
-@%Â@eÂ@áH@²áH@ÒáH@òáHA	p€Ap€A)p€A9p€AIp€AYp€Aip€Ayp€AžRAžRAžRAžRA€žRA¬žRAŽžRAŒžRAÄžRAÌžRAÔžRAÜžRAäžRAìžRAôžRAüžRB\)B\)B
-\)B\)B\)B\)B\)B
-\)B"\)B&\)B*\)B.\)B2\)B6\)B:\)B>\)BB\)BF\)BJ\)BN\)BR\)BV\)BZ\)B^\)Bb\)Bf\)Bj\)Bn\)Br\)Bv\)Bz\)B~\)?zá?Ê=p@%
-ž@e
-ž@\@²\@Ò\@ò\A	G®AG®A)G®A9G®AIG®AYG®AiG®AyG®A£×A£×A£×A£×A€£×A¬£×AŽ£×AŒ£×AÄ£×AÌ£×AÔ£×AÜ£×Aä£×Aì£×Aô£×Aü£×BQìBQìB
-QìBQìBQìBQìBQìB
-QìB"QìB&QìB*QìB.QìB2QìB6QìB:QìB>QìBBQìBFQìBJQìBNQìBRQìBVQìBZQìB^QìBbQìBfQìBjQìBnQìBrQìBvQìBzQìB~Qì?ë
-?ÈõÂ@$zá@dzá@=q@²=q@Ò=q@ò=qA	
-žA
-žA)
-žA9
-žAI
-žAY
-žAi
-žAy
-žA\A\A\A\A€\A¬\AŽ\AŒ\AÄ\AÌ\AÔ\AÜ\Aä\Aì\Aô\Aü\BG®BG®B
-G®BG®BG®BG®BG®B
-G®B"G®B&G®B*G®B.G®B2G®B6G®B:G®B>G®BBG®BFG®BJG®BNG®BRG®BVG®BZG®B^G®BbG®BfG®BjG®BnG®BrG®BvG®BzG®B~G®?\)?Ç®@#×
-@c×
-@ë
-@±ë
-@Ñë
-@ñë
-AõÃAõÃA(õÃA8õÃAHõÃAXõÃAhõÃAxõÃAzáAzáAzáAzáA€záA¬záAŽzáAŒzáAÄzáAÌzáAÔzáAÜzáAäzáAìzáAôzáAüzáB=qB=qB
-=qB=qB=qB=qB=qB
-=qB"=qB&=qB*=qB.=qB2=qB6=qB:=qB>=qBB=qBF=qBJ=qBN=qBR=qBV=qBZ=qB^=qBb=qBf=qBj=qBn=qBr=qBv=qBz=qB~=q?
-ÌÍ?Æff@#33@c33@@±@Ñ@ñAÌÍAÌÍA(ÌÍA8ÌÍAHÌÍAXÌÍAhÌÍAxÌÍAffAffAffAffA€ffA¬ffAŽffAŒffAÄffAÌffAÔffAÜffAäffAìffAôffAüffB33B33B
-33B33B33B33B33B
-33B"33B&33B*33B.33B233B633B:33B>33BB33BF33BJ33BN33BR33BV33BZ33B^33Bb33Bf33Bj33Bn33Br33Bv33Bz33B~33?
-=q?Å
-ž@"\@b\@G®@±G®@ÑG®@ñG®A£×A£×A(£×A8£×AH£×AX£×Ah£×Ax£×AQìAQìAQìAQìA€QìA¬QìAŽQìAŒQìAÄQìAÌQìAÔQìAÜQìAäQìAìQìAôQìAüQìB(öB(öB
-(öB(öB(öB(öB(öB
-(öB"(öB&(öB*(öB.(öB2(öB6(öB:(öB>(öBB(öBF(öBJ(öBN(öBR(öBV(öBZ(öB^(öBb(öBf(öBj(öBn(öBr(öBv(öBz(öB~(ö?®?Ã×
-@!ë
-@aë
-@õÂ@°õÂ@ÐõÂ@ðõÂAzáAzáA(záA8záAHzáAXzáAhzáAxzáA=qA=qA=qA=qA€=qA¬=qAŽ=qAŒ=qAÄ=qAÌ=qAÔ=qAÜ=qAä=qAì=qAô=qAü=qB
-žB
-žB
-
-žB
-žB
-žB
-žB
-žB
-
-žB"
-žB&
-žB*
-žB.
-žB2
-žB6
-žB:
-žB>
-žBB
-žBF
-žBJ
-žBN
-žBR
-žBV
-žBZ
-žB^
-žBb
-žBf
-žBj
-žBn
-žBr
-žBv
-žBz
-žB~
-ž?
-ž?Â\@!G®@aG®@£×@°£×@Ð£×@ð£×AQìAQìA(QìA8QìAHQìAXQìAhQìAxQìA(öA(öA(öA(öA€(öA¬(öAŽ(öAŒ(öAÄ(öAÌ(öAÔ(öAÜ(öAä(öAì(öAô(öAü(öB{B{B
-{B{B{B{B{B
-{B"{B&{B*{B.{B2{B6{B:{B>{BB{BF{BJ{BN{BR{BV{BZ{B^{Bb{Bf{Bj{Bn{Br{Bv{Bz{B~{?\?ÁG®@ £×@`£×@Qì@°Qì@ÐQì@ðQìA(öA(öA((öA8(öAH(öAX(öAh(öAx(öA{A{A{A{A€{A¬{AŽ{AŒ{AÄ{AÌ{AÔ{AÜ{Aä{Aì{Aô{Aü{B
-=B
-=B
-
-=B
-=B
-=B
-=B
-=B
-
-=B"
-=B&
-=B*
-=B.
-=B2
-=B6
-=B:
-=B>
-=BB
-=BF
-=BJ
-=BN
-=BR
-=BV
-=BZ
-=B^
-=Bb
-=Bf
-=Bj
-=Bn
-=Br
-=Bv
-=Bz
-=B~
-=?   ?À  @   @`  @  @°  @Ð  @ð  A  A  A(  A8  AH  AX  Ah  Ax  A  A  A  A  A€  A¬  AŽ  AŒ  AÄ  AÌ  AÔ  AÜ  Aä  Aì  Aô  Aü  B  B  B
-  B  B  B  B  B
-  B"  B&  B*  B.  B2  B6  B:  B>  BB  BF  BJ  BN  BR  BV  BZ  B^  Bb  Bf  Bj  Bn  Br  Bv  Bz  B~  >úáH?ŸžR@\)@_\)@®@¯®@Ï®@ï®A×
-A×
-A'×
-A7×
-AG×
-AW×
-Ag×
-Aw×
-Aë
-Aë
-Aë
-Aë
-A£ë
-A«ë
-A³ë
-A»ë
-AÃë
-AËë
-AÓë
-AÛë
-Aãë
-Aëë
-Aóë
-Aûë
-BõÃBõÃB	õÃB
-õÃBõÃBõÃBõÃB
-õÃB!õÃB%õÃB)õÃB-õÃB1õÃB5õÃB9õÃB=õÃBAõÃBEõÃBIõÃBMõÃBQõÃBUõÃBYõÃB]õÃBaõÃBeõÃBiõÃBmõÃBqõÃBuõÃByõÃB}õÃ>õÂ?œp€@
-žR@^žR@\)@¯\)@Ï\)@ï\)A®A®A'®A7®AG®AW®Ag®Aw®A×
-A×
-A×
-A×
-A£×
-A«×
-A³×
-A»×
-AÃ×
-AË×
-AÓ×
-AÛ×
-Aã×
-Aë×
-Aó×
-Aû×
-Bë
-Bë
-B	ë
-B
-ë
-Bë
-Bë
-Bë
-B
-ë
-B!ë
-B%ë
-B)ë
-B-ë
-B1ë
-B5ë
-B9ë
-B=ë
-BAë
-BEë
-BIë
-BMë
-BQë
-BUë
-BYë
-B]ë
-Baë
-Beë
-Bië
-Bmë
-Bqë
-Buë
-Byë
-B}ë
->ð£×?Œ(ö@
-{@^{@
-=@¯
-=@Ï
-=@ï
-=A
-A
-A'
-A7
-AG
-AW
-Ag
-Aw
-AÂAÂAÂAÂA£ÂA«ÂA³ÂA»ÂAÃÂAËÂAÓÂAÛÂAãÂAëÂAóÂAûÂBáHBáHB	áHB
-áHBáHBáHBáHB
-áHB!áHB%áHB)áHB-áHB1áHB5áHB9áHB=áHBAáHBEáHBIáHBMáHBQáHBUáHBYáHB]áHBaáHBeáHBiáHBmáHBqáHBuáHByáHB}áH>ë
-?ºáH@
-p€@]p€@žR@®žR@ÎžR@îžRA\)A\)A'\)A7\)AG\)AW\)Ag\)Aw\)A®A®A®A®A£®A«®A³®A»®AÃ®AË®AÓ®AÛ®Aã®Aë®Aó®Aû®B×
-B×
-B	×
-B
-×
-B×
-B×
-B×
-B
-×
-B!×
-B%×
-B)×
-B-×
-B1×
-B5×
-B9×
-B=×
-BA×
-BE×
-BI×
-BM×
-BQ×
-BU×
-BY×
-B]×
-Ba×
-Be×
-Bi×
-Bm×
-Bq×
-Bu×
-By×
-B}×
->æff?¹@
-ÌÍ@\ÌÍ@ff@®ff@Îff@îffA33A33A'33A733AG33AW33Ag33Aw33AAAAA£A«A³A»AÃAËAÓAÛAãAëAóAûBÌÍBÌÍB	ÌÍB
-ÌÍBÌÍBÌÍBÌÍB
-ÌÍB!ÌÍB%ÌÍB)ÌÍB-ÌÍB1ÌÍB5ÌÍB9ÌÍB=ÌÍBAÌÍBEÌÍBIÌÍBMÌÍBQÌÍBUÌÍBYÌÍB]ÌÍBaÌÍBeÌÍBiÌÍBmÌÍBqÌÍBuÌÍByÌÍB}ÌÍ>áG®?žQì@
-(ö@\(ö@{@®{@Î{@î{A
-=A
-=A'
-=A7
-=AG
-=AW
-=Ag
-=Aw
-=A
-A
-A
-A
-A£
-A«
-A³
-A»
-AÃ
-AË
-AÓ
-AÛ
-Aã
-Aë
-Aó
-Aû
-BÂBÂB	ÂB
-ÂBÂBÂBÂB
-ÂB!ÂB%ÂB)ÂB-ÂB1ÂB5ÂB9ÂB=ÂBAÂBEÂBIÂBMÂBQÂBUÂBYÂB]ÂBaÂBeÂBiÂBmÂBqÂBuÂByÂB}Â>Ü(ö?·
->@
-@[
-@Â@­Â@ÍÂ@íÂAáHAáHA&áHA6áHAFáHAVáHAfáHAváHAp€Ap€Ap€Ap€A£p€A«p€A³p€A»p€AÃp€AËp€AÓp€AÛp€Aãp€Aëp€Aóp€Aûp€BžRBžRB	žRB
-žRBžRBžRBžRB
-žRB!žRB%žRB)žRB-žRB1žRB5žRB9žRB=žRBAžRBEžRBIžRBMžRBQžRBUžRBYžRB]žRBažRBežRBižRBmžRBqžRBužRByžRB}žR>×
-=?µÂ@áH@ZáH@p€@­p€@Íp€@íp€AžRAžRA&žRA6žRAFžRAVžRAfžRAvžRA\)A\)A\)A\)A£\)A«\)A³\)A»\)AÃ\)AË\)AÓ\)AÛ\)Aã\)Aë\)Aó\)Aû\)B®B®B	®B
-®B®B®B®B
-®B!®B%®B)®B-®B1®B5®B9®B=®BA®BE®BI®BM®BQ®BU®BY®B]®Ba®Be®Bi®Bm®Bq®Bu®By®B}®>Ñë
-?Žzá@=q@Z=q@
-ž@­
-ž@Í
-ž@í
-žA\A\A&\A6\AF\AV\Af\Av\AG®AG®AG®AG®A£G®A«G®A³G®A»G®AÃG®AËG®AÓG®AÛG®AãG®AëG®AóG®AûG®B£×B£×B	£×B
-£×B£×B£×B£×B
-£×B!£×B%£×B)£×B-£×B1£×B5£×B9£×B=£×BA£×BE£×BI£×BM£×BQ£×BU£×BY£×B]£×Ba£×Be£×Bi£×Bm£×Bq£×Bu£×By£×B}£×>ÌÌÍ?³33@@Y@ÌÍ@¬ÌÍ@ÌÌÍ@ìÌÍAffAffA&ffA6ffAFffAVffAfffAvffA33A33A33A33A£33A«33A³33A»33AÃ33AË33AÓ33AÛ33Aã33Aë33Aó33Aû33BBB	B
-BBBB
-B!B%B)B-B1B5B9B=BABEBIBMBQBUBYB]BaBeBiBmBqBuByB}>Ç®?±ë
-@õÂ@XõÂ@zá@¬zá@Ìzá@ìzáA=qA=qA&=qA6=qAF=qAV=qAf=qAv=qA
-žA
-žA
-žA
-žA£
-žA«
-žA³
-žA»
-žAÃ
-žAË
-žAÓ
-žAÛ
-žAã
-žAë
-žAó
-žAû
-žB\B\B	\B
-\B\B\B\B
-\B!\B%\B)\B-\B1\B5\B9\B=\BA\BE\BI\BM\BQ\BU\BY\B]\Ba\Be\Bi\Bm\Bq\Bu\By\B}\>Â\?°£×@Qì@XQì@(ö@¬(ö@Ì(ö@ì(öA{A{A&{A6{AF{AV{Af{Av{A
-=A
-=A
-=A
-=A£
-=A«
-=A³
-=A»
-=AÃ
-=AË
-=AÓ
-=AÛ
-=Aã
-=Aë
-=Aó
-=Aû
-=B
-B
-B	
-B
-
-B
-B
-B
-B
-
-B!
-B%
-B)
-B-
-B1
-B5
-B9
-B=
-BA
-BE
-BI
-BM
-BQ
-BU
-BY
-B]
-Ba
-Be
-Bi
-Bm
-Bq
-Bu
-By
-B}
->œp€?¯\)@®@W®@×
-@«×
-@Ë×
-@ë×
-Aë
-Aë
-A%ë
-A5ë
-AEë
-AUë
-Aeë
-Auë
-AõÃAõÃAõÃAõÃA¢õÃAªõÃA²õÃAºõÃAÂõÃAÊõÃAÒõÃAÚõÃAâõÃAêõÃAòõÃAúõÃBzáBzáB	záB
-záBzáBzáBzáB
-záB!záB%záB)záB-záB1záB5záB9záB=záBAzáBEzáBIzáBMzáBQzáBUzáBYzáB]záBazáBezáBizáBmzáBqzáBuzáByzáB}zá>žQì?®{@
->@W
->@
-@«
-@Ë
-@ë
-AÂAÂA%ÂA5ÂAEÂAUÂAeÂAuÂAáHAáHAáHAáHA¢áHAªáHA²áHAºáHAÂáHAÊáHAÒáHAÚáHAâáHAêáHAòáHAúáHBp€Bp€B	p€B
-p€Bp€Bp€Bp€B
-p€B!p€B%p€B)p€B-p€B1p€B5p€B9p€B=p€BAp€BEp€BIp€BMp€BQp€BUp€BYp€B]p€Bap€Bep€Bip€Bmp€Bqp€Bup€Byp€B}p€>³33?¬ÌÍ@ff@Vff@33@«33@Ë33@ë33AAA%A5AEAUAeAuAÌÍAÌÍAÌÍAÌÍA¢ÌÍAªÌÍA²ÌÍAºÌÍAÂÌÍAÊÌÍAÒÌÍAÚÌÍAâÌÍAêÌÍAòÌÍAúÌÍBffBffB	ffB
-ffBffBffBffB
-ffB!ffB%ffB)ffB-ffB1ffB5ffB9ffB=ffBAffBEffBIffBMffBQffBUffBYffB]ffBaffBeffBiffBmffBqffBuffByffB}ff>®{?«
-@Â@UÂ@áH@ªáH@ÊáH@êáHAp€Ap€A%p€A5p€AEp€AUp€Aep€Aup€AžRAžRAžRAžRA¢žRAªžRA²žRAºžRAÂžRAÊžRAÒžRAÚžRAâžRAêžRAòžRAúžRB\)B\)B	\)B
-\)B\)B\)B\)B
-\)B!\)B%\)B)\)B-\)B1\)B5\)B9\)B=\)BA\)BE\)BI\)BM\)BQ\)BU\)BY\)B]\)Ba\)Be\)Bi\)Bm\)Bq\)Bu\)By\)B}\)>šõÃ?ª=q@
-ž@U
-ž@\@ª\@Ê\@ê\AG®AG®A%G®A5G®AEG®AUG®AeG®AuG®A£×A£×A£×A£×A¢£×Aª£×A²£×Aº£×AÂ£×AÊ£×AÒ£×AÚ£×Aâ£×Aê£×Aò£×Aú£×BQìBQìB	QìB
-QìBQìBQìBQìB
-QìB!QìB%QìB)QìB-QìB1QìB5QìB9QìB=QìBAQìBEQìBIQìBMQìBQQìBUQìBYQìB]QìBaQìBeQìBiQìBmQìBqQìBuQìByQìB}Qì>£×
-?šõÂ@zá@Tzá@=q@ª=q@Ê=q@ê=qA
-žA
-žA%
-žA5
-žAE
-žAU
-žAe
-žAu
-žA\A\A\A\A¢\Aª\A²\Aº\AÂ\AÊ\AÒ\AÚ\Aâ\Aê\Aò\Aú\BG®BG®B	G®B
-G®BG®BG®BG®B
-G®B!G®B%G®B)G®B-G®B1G®B5G®B9G®B=G®BAG®BEG®BIG®BMG®BQG®BUG®BYG®B]G®BaG®BeG®BiG®BmG®BqG®BuG®ByG®B}G®>žR?§®@×
-@S×
-@ë
-@©ë
-@Éë
-@éë
-AõÃAõÃA$õÃA4õÃADõÃATõÃAdõÃAtõÃAzáAzáAzáAzáA¢záAªzáA²záAºzáAÂzáAÊzáAÒzáAÚzáAâzáAêzáAòzáAúzáB=qB=qB	=qB
-=qB=qB=qB=qB
-=qB!=qB%=qB)=qB-=qB1=qB5=qB9=qB==qBA=qBE=qBI=qBM=qBQ=qBU=qBY=qB]=qBa=qBe=qBi=qBm=qBq=qBu=qBy=qB}=q>?Šff@33@S33@@©@É@éAÌÍAÌÍA$ÌÍA4ÌÍADÌÍATÌÍAdÌÍAtÌÍAffAffAffAffA¢ffAªffA²ffAºffAÂffAÊffAÒffAÚffAâffAêffAòffAúffB33B33B	33B
-33B33B33B33B
-33B!33B%33B)33B-33B133B533B933B=33BA33BE33BI33BM33BQ33BU33BY33B]33Ba33Be33Bi33Bm33Bq33Bu33By33B}33>zá?¥
-ž@\@R\@G®@©G®@ÉG®@éG®A£×A£×A$£×A4£×AD£×AT£×Ad£×At£×AQìAQìAQìAQìA¢QìAªQìA²QìAºQìAÂQìAÊQìAÒQìAÚQìAâQìAêQìAòQìAúQìB(öB(öB	(öB
-(öB(öB(öB(öB
-(öB!(öB%(öB)(öB-(öB1(öB5(öB9(öB=(öBA(öBE(öBI(öBM(öBQ(öBU(öBY(öB](öBa(öBe(öBi(öBm(öBq(öBu(öBy(öB}(ö>\)?£×
-@ë
-@Që
-@õÃ@šõÃ@ÈõÃ@èõÃAzáAzáA$záA4záADzáATzáAdzáAtzáA=qA=qA=qA=qA¢=qAª=qA²=qAº=qAÂ=qAÊ=qAÒ=qAÚ=qAâ=qAê=qAò=qAú=qB
-žB
-žB	
-žB
-
-žB
-žB
-žB
-žB
-
-žB!
-žB%
-žB)
-žB-
-žB1
-žB5
-žB9
-žB=
-žBA
-žBE
-žBI
-žBM
-žBQ
-žBU
-žBY
-žB]
-žBa
-žBe
-žBi
-žBm
-žBq
-žBu
-žBy
-žB}
-ž>=q?¢\@G®@QG®@£×@š£×@È£×@è£×AQìAQìA$QìA4QìADQìATQìAdQìAtQìA(öA(öA(öA(öA¢(öAª(öA²(öAº(öAÂ(öAÊ(öAÒ(öAÚ(öAâ(öAê(öAò(öAú(öB{B{B	{B
-{B{B{B{B
-{B!{B%{B){B-{B1{B5{B9{B={BA{BE{BI{BM{BQ{BU{BY{B]{Ba{Be{Bi{Bm{Bq{Bu{By{B}{>
-
-ž?¡G®@£×@P£×@Qì@šQì@ÈQì@èQìA(öA(öA$(öA4(öAD(öAT(öAd(öAt(öA{A{A{A{A¢{Aª{A²{Aº{AÂ{AÊ{AÒ{AÚ{Aâ{Aê{Aò{Aú{B
-=B
-=B	
-=B
-=B
-=B
-=B
-=B
-
-=B!
-=B%
-=B)
-=B-
-=B1
-=B5
-=B9
-=B=
-=BA
-=BE
-=BI
-=BM
-=BQ
-=BU
-=BY
-=B]
-=Ba
-=Be
-=Bi
-=Bm
-=Bq
-=Bu
-=By
-=B}
-=>  ?   @  @P  @  @š  @È  @è  A  A  A$  A4  AD  AT  Ad  At  A  A  A  A  A¢  Aª  A²  Aº  AÂ  AÊ  AÒ  AÚ  Aâ  Aê  Aò  Aú  B  B  B	  B
-  B  B  B  B
-  B!  B%  B)  B-  B1  B5  B9  B=  BA  BE  BI  BM  BQ  BU  BY  B]  Ba  Be  Bi  Bm  Bq  Bu  By  B}  >uÂ?žR@\)@O\)@®@§®@Ç®@ç®A×
-A×
-A#×
-A3×
-AC×
-AS×
-Ac×
-As×
-Aë
-Aë
-Aë
-Aë
-A¡ë
-A©ë
-A±ë
-A¹ë
-AÁë
-AÉë
-AÑë
-AÙë
-Aáë
-Aéë
-Añë
-Aùë
-B õÃBõÃBõÃB
-õÃBõÃBõÃBõÃB
-õÃB õÃB$õÃB(õÃB,õÃB0õÃB4õÃB8õÃB<õÃB@õÃBDõÃBHõÃBLõÃBPõÃBTõÃBXõÃB\õÃB`õÃBdõÃBhõÃBlõÃBpõÃBtõÃBxõÃB|õÃ>k
-?p€@žR@NžR@\)@§\)@Ç\)@ç\)A®A®A#®A3®AC®AS®Ac®As®A×
-A×
-A×
-A×
-A¡×
-A©×
-A±×
-A¹×
-AÁ×
-AÉ×
-AÑ×
-AÙ×
-Aá×
-Aé×
-Añ×
-Aù×
-B ë
-Bë
-Bë
-B
-ë
-Bë
-Bë
-Bë
-B
-ë
-B ë
-B$ë
-B(ë
-B,ë
-B0ë
-B4ë
-B8ë
-B<ë
-B@ë
-BDë
-BHë
-BLë
-BPë
-BTë
-BXë
-B\ë
-B`ë
-Bdë
-Bhë
-Blë
-Bpë
-Btë
-Bxë
-B|ë
->aG®?(ö@{@N{@
-=@§
-=@Ç
-=@ç
-=A
-A
-A#
-A3
-AC
-AS
-Ac
-As
-AÂAÂAÂAÂA¡ÂA©ÂA±ÂA¹ÂAÁÂAÉÂAÑÂAÙÂAáÂAéÂAñÂAùÂB áHBáHBáHB
-áHBáHBáHBáHB
-áHB áHB$áHB(áHB,áHB0áHB4áHB8áHB<áHB@áHBDáHBHáHBLáHBPáHBTáHBXáHB\áHB`áHBdáHBháHBláHBpáHBtáHBxáHB|áH>W
-=?áH@
-p€@Mp€@žR@ŠžR@ÆžR@æžRA\)A\)A#\)A3\)AC\)AS\)Ac\)As\)A®A®A®A®A¡®A©®A±®A¹®AÁ®AÉ®AÑ®AÙ®Aá®Aé®Añ®Aù®B ×
-B×
-B×
-B
-×
-B×
-B×
-B×
-B
-×
-B ×
-B$×
-B(×
-B,×
-B0×
-B4×
-B8×
-B<×
-B@×
-BD×
-BH×
-BL×
-BP×
-BT×
-BX×
-B\×
-B`×
-Bd×
-Bh×
-Bl×
-Bp×
-Bt×
-Bx×
-B|×
->LÌÍ?@
-ÌÍ@LÌÍ@ff@Šff@Æff@æffA33A33A#33A333AC33AS33Ac33As33AAAAA¡A©A±A¹AÁAÉAÑAÙAáAéAñAùB ÌÍBÌÍBÌÍB
-ÌÍBÌÍBÌÍBÌÍB
-ÌÍB ÌÍB$ÌÍB(ÌÍB,ÌÍB0ÌÍB4ÌÍB8ÌÍB<ÌÍB@ÌÍBDÌÍBHÌÍBLÌÍBPÌÍBTÌÍBXÌÍB\ÌÍB`ÌÍBdÌÍBhÌÍBlÌÍBpÌÍBtÌÍBxÌÍB|ÌÍ>B\?Qì@
-(ö@L(ö@{@Š{@Æ{@æ{A
-=A
-=A#
-=A3
-=AC
-=AS
-=Ac
-=As
-=A
-A
-A
-A
-A¡
-A©
-A±
-A¹
-AÁ
-AÉ
-AÑ
-AÙ
-Aá
-Aé
-Añ
-Aù
-B ÂBÂBÂB
-ÂBÂBÂBÂB
-ÂB ÂB$ÂB(ÂB,ÂB0ÂB4ÂB8ÂB<ÂB@ÂBDÂBHÂBLÂBPÂBTÂBXÂB\ÂB`ÂBdÂBhÂBlÂBpÂBtÂBxÂB|Â>8Qì?
->@
-
-@K
-@
-Â@¥Â@ÅÂ@åÂAáHAáHA"áHA2áHABáHARáHAbáHAráHAp€Ap€Ap€Ap€A¡p€A©p€A±p€A¹p€AÁp€AÉp€AÑp€AÙp€Aáp€Aép€Añp€Aùp€B žRBžRBžRB
-žRBžRBžRBžRB
-žRB žRB$žRB(žRB,žRB0žRB4žRB8žRB<žRB@žRBDžRBHžRBLžRBPžRBTžRBXžRB\žRB`žRBdžRBhžRBlžRBpžRBtžRBxžRB|žR>.{?Â@
-áH@JáH@
-p€@¥p€@Åp€@åp€AžRAžRA"žRA2žRABžRARžRAbžRAržRA\)A\)A\)A\)A¡\)A©\)A±\)A¹\)AÁ\)AÉ\)AÑ\)AÙ\)Aá\)Aé\)Añ\)Aù\)B ®B®B®B
-®B®B®B®B
-®B ®B$®B(®B,®B0®B4®B8®B<®B@®BD®BH®BL®BP®BT®BX®B\®B`®Bd®Bh®Bl®Bp®Bt®Bx®B|®>#×
-?zá@
-=q@J=q@
-
-ž@¥
-ž@Å
-ž@å
-žA\A\A"\A2\AB\AR\Ab\Ar\AG®AG®AG®AG®A¡G®A©G®A±G®A¹G®AÁG®AÉG®AÑG®AÙG®AáG®AéG®AñG®AùG®B £×B£×B£×B
-£×B£×B£×B£×B
-£×B £×B$£×B(£×B,£×B0£×B4£×B8£×B<£×B@£×BD£×BH£×BL£×BP£×BT£×BX£×B\£×B`£×Bd£×Bh£×Bl£×Bp£×Bt£×Bx£×B|£×>?33@	@I@ÌÍ@€ÌÍ@ÄÌÍ@äÌÍAffAffA"ffA2ffABffARffAbffArffA33A33A33A33A¡33A©33A±33A¹33AÁ33AÉ33AÑ33AÙ33Aá33Aé33Añ33Aù33B BBB
-BBBB
-B B$B(B,B0B4B8B<B@BDBHBLBPBTBXB\B`BdBhBlBpBtBxB|>\)?ë
-@õÃ@HõÃ@zá@€zá@Äzá@äzáA=qA=qA"=qA2=qAB=qAR=qAb=qAr=qA
-žA
-žA
-žA
-žA¡
-žA©
-žA±
-žA¹
-žAÁ
-žAÉ
-žAÑ
-žAÙ
-žAá
-žAé
-žAñ
-žAù
-žB \B\B\B
-\B\B\B\B
-\B \B$\B(\B,\B0\B4\B8\B<\B@\BD\BH\BL\BP\BT\BX\B\\B`\Bd\Bh\Bl\Bp\Bt\Bx\B|\>
-ž?£×@Qì@HQì@(ö@€(ö@Ä(ö@ä(öA{A{A"{A2{AB{AR{Ab{Ar{A
-=A
-=A
-=A
-=A¡
-=A©
-=A±
-=A¹
-=AÁ
-=AÉ
-=AÑ
-=AÙ
-=Aá
-=Aé
-=Añ
-=Aù
-=B 
-B
-B
-B
-
-B
-B
-B
-B
-
-B 
-B$
-B(
-B,
-B0
-B4
-B8
-B<
-B@
-BD
-BH
-BL
-BP
-BT
-BX
-B\
-B`
-Bd
-Bh
-Bl
-Bp
-Bt
-Bx
-B|
-=õÂ?\)@®@G®@×
-@£×
-@Ã×
-@ã×
-Aë
-Aë
-A!ë
-A1ë
-AAë
-AQë
-Aaë
-Aqë
-AõÃAõÃAõÃAõÃA õÃAšõÃA°õÃAžõÃAÀõÃAÈõÃAÐõÃAØõÃAàõÃAèõÃAðõÃAøõÃB záBzáBzáB
-záBzáBzáBzáB
-záB záB$záB(záB,záB0záB4záB8záB<záB@záBDzáBHzáBLzáBPzáBTzáBXzáB\záB`záBdzáBhzáBlzáBpzáBtzáBxzáB|zá=áG®?{@
-=@G
-=@
-@£
-@Ã
-@ã
-AÂAÂA!ÂA1ÂAAÂAQÂAaÂAqÂAáHAáHAáHAáHA áHAšáHA°áHAžáHAÀáHAÈáHAÐáHAØáHAàáHAèáHAðáHAøáHB p€Bp€Bp€B
-p€Bp€Bp€Bp€B
-p€B p€B$p€B(p€B,p€B0p€B4p€B8p€B<p€B@p€BDp€BHp€BLp€BPp€BTp€BXp€B\p€B`p€Bdp€Bhp€Blp€Bpp€Btp€Bxp€B|p€=ÌÌÍ?ÌÍ@ff@Fff@33@£33@Ã33@ã33AAA!A1AAAQAaAqAÌÍAÌÍAÌÍAÌÍA ÌÍAšÌÍA°ÌÍAžÌÍAÀÌÍAÈÌÍAÐÌÍAØÌÍAàÌÍAèÌÍAðÌÍAøÌÍB ffBffBffB
-ffBffBffBffB
-ffB ffB$ffB(ffB,ffB0ffB4ffB8ffB<ffB@ffBDffBHffBLffBPffBTffBXffB\ffB`ffBdffBhffBlffBpffBtffBxffB|ff=žQì?
-@Â@EÂ@áH@¢áH@ÂáH@âáHAp€Ap€A!p€A1p€AAp€AQp€Aap€Aqp€AžRAžRAžRAžRA žRAšžRA°žRAžžRAÀžRAÈžRAÐžRAØžRAàžRAèžRAðžRAøžRB \)B\)B\)B
-\)B\)B\)B\)B
-\)B \)B$\)B(\)B,\)B0\)B4\)B8\)B<\)B@\)BD\)BH\)BL\)BP\)BT\)BX\)B\\)B`\)Bd\)Bh\)Bl\)Bp\)Bt\)Bx\)B|\)=£×
-?=q@
-ž@E
-ž@\@¢\@Â\@â\AG®AG®A!G®A1G®AAG®AQG®AaG®AqG®A£×A£×A£×A£×A £×Aš£×A°£×Až£×AÀ£×AÈ£×AÐ£×AØ£×Aà£×Aè£×Að£×Aø£×B QìBQìBQìB
-QìBQìBQìBQìB
-QìB QìB$QìB(QìB,QìB0QìB4QìB8QìB<QìB@QìBDQìBHQìBLQìBPQìBTQìBXQìB\QìB`QìBdQìBhQìBlQìBpQìBtQìBxQìB|Qì=\)?õÃ@zá@Dzá@=q@¢=q@Â=q@â=qA
-žA
-žA!
-žA1
-žAA
-žAQ
-žAa
-žAq
-žA\A\A\A\A \Aš\A°\Až\AÀ\AÈ\AÐ\AØ\Aà\Aè\Að\Aø\B G®BG®BG®B
-G®BG®BG®BG®B
-G®B G®B$G®B(G®B,G®B0G®B4G®B8G®B<G®B@G®BDG®BHG®BLG®BPG®BTG®BXG®B\G®B`G®BdG®BhG®BlG®BpG®BtG®BxG®B|G®=uÂ?®@×
-@C×
-@ë
-@¡ë
-@Áë
-@áë
-A õÃAõÃA õÃA0õÃA@õÃAPõÃA`õÃApõÃAzáAzáAzáAzáA záAšzáA°záAžzáAÀzáAÈzáAÐzáAØzáAàzáAèzáAðzáAøzáB =qB=qB=qB
-=qB=qB=qB=qB
-=qB =qB$=qB(=qB,=qB0=qB4=qB8=qB<=qB@=qBD=qBH=qBL=qBP=qBT=qBX=qB\=qB`=qBd=qBh=qBl=qBp=qBt=qBx=qB|=q=LÌÍ?ff@33@C33@@¡@Á@áA ÌÍAÌÍA ÌÍA0ÌÍA@ÌÍAPÌÍA`ÌÍApÌÍAffAffAffAffA ffAšffA°ffAžffAÀffAÈffAÐffAØffAàffAèffAðffAøffB 33B33B33B
-33B33B33B33B
-33B 33B$33B(33B,33B033B433B833B<33B@33BD33BH33BL33BP33BT33BX33B\33B`33Bd33Bh33Bl33Bp33Bt33Bx33B|33=#×
-?
-
-ž@\@B\@G®@¡G®@ÁG®@áG®A £×A£×A £×A0£×A@£×AP£×A`£×Ap£×AQìAQìAQìAQìA QìAšQìA°QìAžQìAÀQìAÈQìAÐQìAØQìAàQìAèQìAðQìAøQìB (öB(öB(öB
-(öB(öB(öB(öB
-(öB (öB$(öB((öB,(öB0(öB4(öB8(öB<(öB@(öBD(öBH(öBL(öBP(öBT(öBX(öB\(öB`(öBd(öBh(öBl(öBp(öBt(öBx(öB|(ö<õÂ?×
-@ë
-@Aë
-@õÃ@ õÃ@ÀõÃ@àõÃA záAzáA záA0záA@záAPzáA`záApzáA=qA=qA=qA=qA =qAš=qA°=qAž=qAÀ=qAÈ=qAÐ=qAØ=qAà=qAè=qAð=qAø=qB 
-žB
-žB
-žB
-
-žB
-žB
-žB
-žB
-
-žB 
-žB$
-žB(
-žB,
-žB0
-žB4
-žB8
-žB<
-žB@
-žBD
-žBH
-žBL
-žBP
-žBT
-žBX
-žB\
-žB`
-žBd
-žBh
-žBl
-žBp
-žBt
-žBx
-žB|
-ž<£×
-?\@G®@AG®@£×@ £×@À£×@à£×A QìAQìA QìA0QìA@QìAPQìA`QìApQìA(öA(öA(öA(öA (öAš(öA°(öAž(öAÀ(öAÈ(öAÐ(öAØ(öAà(öAè(öAð(öAø(öB {B{B{B
-{B{B{B{B
-{B {B${B({B,{B0{B4{B8{B<{B@{BD{BH{BL{BP{BT{BX{B\{B`{Bd{Bh{Bl{Bp{Bt{Bx{B|{<#×
-?G®@ £×@@£×@Qì@ Qì@ÀQì@àQìA (öA(öA (öA0(öA@(öAP(öA`(öAp(öA{A{A{A{A {Aš{A°{Až{AÀ{AÈ{AÐ{AØ{Aà{Aè{Að{Aø{B 
-=B
-=B
-=B
-
-=B
-=B
-=B
-=B
-
-=B 
-=B$
-=B(
-=B,
-=B0
-=B4
-=B8
-=B<
-=B@
-=BD
-=BH
-=BL
-=BP
-=BT
-=BX
-=B\
-=B`
-=Bd
-=Bh
-=Bl
-=Bp
-=Bt
-=Bx
-=B|
-=    ?  @   @@  @  @   @À  @à  A   A  A   A0  A@  AP  A`  Ap  A  A  A  A  A   Aš  A°  Až  AÀ  AÈ  AÐ  AØ  Aà  Aè  Að  Aø  B   B  B  B
-  B  B  B  B
-  B   B$  B(  B,  B0  B4  B8  B<  B@  BD  BH  BL  BP  BT  BX  B\  B`  Bd  Bh  Bl  Bp  Bt  Bx  B|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?!1?)ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
-Æ?(þ?¯m®@ý¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?óô?$h,?­E@:@29Q@_¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?U"? É:?«ÎÌ@}@1Q@_«@]â@D¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?¶P?
-*h?©ÿb@ŽÈ@0ià@^
-ø@
-ê@Ä@³ @ÊB¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ??w?š/ê@Í
-@/#@]7;@
-v)@P¶@³+B@ÊÎ@ààZ@÷Œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?
-x­?ì¥?Š`@ åX@.o@\O@
-O@ÜÜ@²·g@Éô@àl@÷G
-AÌAb|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?ÙÚ?M³?€?ÿû6@-²²@[gÊ@q@hý@²C@É
-@ßø¡@öÓ.AÖÜAD"A
-±hA)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?;	?®á?¢Á?þ+Î@,Êþ@Z@@õ#@±Ï¯@Èª;@ßÈ@ö_TAðA
-5A
-wzA(äÀA4RA?£¶¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ? 7?
-? ò6?ü\e@+ãJ@Ya@Šœ@I@±[Õ@È6a@ßí@õëyAcAÐHA
-=A(ªÓA4A?
-^AJò€AVDT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ùúÊ?q
-?"Ÿ?úì@*û@X°€@2Þ@
-j@°ç÷@ÇÂ@Þ@õwA)AYA
-A(päA3Þ*A?KoAJžŽAV%úAa@Aläð¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >òœ(?ÒL?SU?øœ@*Ù@WÈð@¿@@°t
-@ÇNš@Þ)5@õÁAï&A\lA
-É±A(6÷A3€<A?AJ~ÈAUì
-AaYRAlÆAx3ÞAÂÇ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ë? 3Z?Ü?öî
-@),
-@Vá4@K&@%³@° >@ÆÚÊ@ÝµV@ôâAµ7A"}A
-ÂA'ýA3jMA>×AJDØAU²
-AadAl©AwùîA³Aj=A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >äAà>ù)?Žs?õ
-¢@(Dh@Uù@×L@±Ø@¯d@Æfñ@ÝA|@ô
-A{IAèA
-UÕA'ÃA30`A>ŠAJ
-ëAUx1A`åvAlRŒAwÀA€AMHAëAºAcf¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ý<>ñë,?äú?óO)@'\¬@UÃ@cm@=ú@¯
-@Åó@ÜÍ@óš+AA[A® A
-åA'+A2öqA>c·AIÐüAU>BA`«AlÍAwAy­A0PAæóAAT:A
-ÜA£³µ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ÕÆ>ê­??ñÀ@&t÷@T*@ï@Ê@®€«@Å8@ÜYÃ@ó4PAnAt³AáùA'O>A2ŒA>)ÉAIAUUA`qAkÞàAwL%A\¶AYAÉýA A7CAíçA£€A©[,A¯¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Îõ>ão€?F?ï°G@%;@SBR@{µ@VA@®0Í@Å
-Y@Ûåå@òÀqAÍ~A:ÄAš
-A'OA2A=ïÚAI]ATÊeA`7«Ak€ñAw6A?ŸAöaA­AcšALAÐïA£A©>6A®ôÙAŽ«{AºTT¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ÇKQ>Ü2?v¯?íàÞ@$¥@RZ@Û@âg@­Œó@Ä@Ûr
-@òLAA ÖAn
-A&ÛbA2HšA=µíAI#3ATxA_ýœAkkAvØIA"ÈAÙkAAF±AýUA³øA£jA©!?A®×âAŽAºE)A¿ûËAÅ€€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >À
-®>Ôô
-?§6?ìe@#œÊ@Qrá@'ù@n@­I@Ä#¡@Úþ-@ñØ¹AY¢AÆèA4-A&¡rA2žA={þAHéDATVA_ÃÏAk1AvYAÐAŒsAsA)ºAà]A A£M€A©GA®ºëAŽqAº(1A¿ÞÕAÅxAËLAÐôó¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >žÐ
->Í¶z?×Î?êAü@"Ö@P-@~@E@ú®@¬Õ;@Ã¯Ç@ÚS@ñdßAµAúAú@A&gA1ÔËA=BAH¯VAT
-A_âAj÷'AvdmAèÚA}AV!A
-ÃAÃfAz
-A£0­AšçPA®ôAŽTAº
-;A¿ÁÞAÅxAË/%AÐåÈAÖjAÜEC¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >±f>Æx?U?èr@!îY@O£p@}X@Ð@¬a\@Ã;è@Úu@ðñAåÆAS
-AÀQA&-A1ÜA="AHugASâ¬A_OòAjœ8Av*~AËâAA9)AïÌAŠpA]A£µAšÊYA®üAŽ7A¹îCA¿€æAÅ[AË-AÐÈÐAÖtAÜ6Aáì¹Aç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >ªTÃ>¿:ó?8ì?æ£@!¥@N»»@|pÔ@ö@«í@ÂÈ@Ù¢@ð}&A«ÙAAdA%ó©A1`ïA<Î4AH;zASšÀA_AjJAuðA®ëAeA
-2AÒÖAyA@
-A¢öÀAš­bA®dAŽ©A¹ÑLA¿ïAÅ>AÊõ6AÐ«ÚAÖb}AÜ AáÏÄAçgAí=	Aòåâ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >£>·ý?is?äÓ¡@ 
-ç@MÓÿ@{@@«y€@ÂT0@Ù.Œ@ð	HAqéAß/ALuA%¹»A1' A<EAHASnÐA^ÜAjI\Au¶¡AôAHAÿ:AµÞAlA#%A¢ÙÈAškA®GA³ý±A¹ŽTA¿jøAÅ!AÊØ>AÐâAÖE
-AÛü)Aá²ÌAçioAí AòÖ¶AøXAþ61¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >Ù|>°¿??ã@@77@LìN@z¡g@+@@«Ì@ÁàX@Øºä@ïpA7þA¥CAA%ÎA0íA<ZZAGÇAS4äA^¢*AjpAu|µAtýA+ AâDAçAOA.A¢ŒÑAšsuA®*A³à»A¹_A¿NAÅ€AÊ»HAÐqëAÖ(AÛß2AáÕAçLyAí
-Aò¹¿AøpcAþ'BîÕBÃA¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >×>©è?
-Ê©?á4×@
-O@L@y¹²@·f@ªñ@Ál~@ØG
-@ï!AþAkVAØA%EáA0³&A< lAG²ARúøA^h=AiÕAuBÈAXAªAÅMA{ðA2Aé7A¢ÚAšV~A®
-!A³ÃÅA¹zhA¿1
-AÄç¯AÊQAÐTôAÖ
-AÛÂ;AáxÞAç/Aìæ%AòÉAøSlAþ
-BàYB»«BýB
-ki¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >^4>¢DD?û@?ßen@
-gÎ@K
-å@xÑþ@C@ª
-@Àø€@×Ó/@î­ŒAÄ#A1iA®A%
-ôA0y:A;æAGSÄARÁ
-A^.PAiAuÛA;A
-ñŽAšWA^úAAÌ@A¢äAš9A­ð*A³ŠÎA¹]qA¿AÄÊžAÊ[AÐ7ÿAÕî¡AÛ¥DAá[èAçAìÉ.AòÒAø6uAýíBÑÞB­0BB
-cÓB
-?%B¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  > > ?+×?Ý@
-@J51@wêJ@Ï±@©ª=@ÀÉ@×_U@î9âA6A
-÷|AdÁA$ÒA0?LA;¬AGØAR
-A]ôbAiašAtÎîA
-A
-ÔœAaABAø§A¯JA¢eíAš
-A­Ó4A³×A¹@zAŸ÷
-AÄ­ÁAÊdeAÐAÕÑ«AÛOAá>ñAæõAì¬8AòbÛAø~AýÐ"BÃcBŽBzB
-UXB
-0©B
-ûBçMB»¹¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >}ÅØ>Èü?\n?ÛÆ@e@IM}@w@[×@©6c@Àï@Öë{@íÆAPIA
-œA*ÕA$A0_A;r¥AFßêARM0A]ºvAi'»At A#A
-·ÆAnjA%
-AÛ±ATA¢H÷A§ÿA­¶=A³làA¹#AŸÚ'AÄÊAÊGnAÏþAÕŽµAÛkXAá!ûAæØAìAAòEäA÷üAý³+BŽçB9BkB
-FÜB
-".BýBØÑBŽ#BuBcá¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >oJ>X?}
-?Ù÷3@°±@HeÈ@vá@çý@šÂ@¿@Öw¡@íR-A\A
-¡AðçA$^-A/ËsA;8žAF¥ýARCA]AhíÎAt[AÈYA
-ÐAQsAAŸºAu]A¢,A§â€A­GA³OêA¹AŸœ0AÄsÔAÊ*wAÏáAÕŸAÛNaAáAæ»šAìrKAò(ïA÷ßAý4BŠlBŸB]B
-8aB
-³BïBÊVB¥šBùB\KB
-7B!
-	¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >`ÏI>
-Mµ?y{8?Ø'Ë@Èý@G~@u3,@t"@šN®@¿);@ÖÆ@ìÞSAÜoA
-IµA¶úA$$?A/
-A:þËAFlAQÙVA]FAh³áAt!&AlA
-}ÙA4|Aë A¡ÃAXfA¢
-A§Å­A­|QA³2ôAžéAŸ :AÄVÝAÊ
-AÏÄ$AÕzÇAÛ1jAàèAæ±AìUUAò
-øA÷ÂAýy?BñBsBBNB
-)æB
-7BàB»ÛB,Br~BMÐB
-)!B!sB#ßÅB&Ž1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >RT >|  ?uÜf?ÖXb@áH@F_@tKw@ H@§ÚÔ@Ÿµ`@Õì@ìjyA¢A
-ÇA}
-A#êSA/WA:ÄÝAF2#AQiA]
-¯AhyôAsç9ATA
-`ãAAÎ)AÌA;pA¡òA§š¶A­_ZA³ýAžÌ¡AŸDAÄ9çAÉðAÏ§-AÕ]ÐAÛtAàËAæºAì8^AñïA÷¥¥Aý\HBuBdÇB@B
-jB
-öŒBÒB­_B±BdB?TB
-ŠB õøB#ÑIB&¬B)íB,\Y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >CØž>m€Ø?r=?Ôù@ù@E®«@scÃ@m@§fú@ŸA@Õ
-@ëöAhA
-ÕÚAC A#°eA/
-«A:ñAEø6AQe{A\ÒÁAh@As­MAA
-CìAúA±3AgÖA
-yA¡Õ
-A§ÀA­BcA²ùAž¯ªAŸfMAÄ
-ñAÉÓAÏ7AÕ@ÚAÚ÷}Aà® AædÄAìgAñÒ
-A÷®Aý?QBzúBVLB1B
-
-ïB
-èABÃBäBz6BUB0ÙB
-
-+B ç|B#ÂÎB& B)yqB,TÃB/0B2¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >5]q>_)?nÃ?Ò¹@ß@DÆö@r|@@Šó@œÍ«@Ôš8@ëÄA.šA
-íA	3A#vxA.ãŸA:QAEŸIAQ+A\ÔAhAss_A~à¥A
-&öAÝA<AJàAA¡ž&A§nÉA­%lA²ÜAž³AŸIVAÃÿúAÉ¶AÏmAAÕ#äAÚÚAà*AæGÍAëþpAñµA÷k·Aý"ZBlBGÐB#"B	þtB
-ÙÅBµBiBkºBG
-B"^B
-ý¯B ÙB#ŽSB&€B)jöB,FHB/!B1üëB4Ø=B7¬©¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >&â)>P®?k ?Ðê/@*/@CßF@q^@€»@ŠG@œYÓ@Ô4_@ëëA ô»A
-bAÏGA#<A.©ÒA:AE]APñ¢A\^èAgÌ.As9sA~Š¹A
-
- AÀ£AwGA-êAäA¡1A§QÔA­wA²¿AžuœAŸ,aAÃãAÉ§AÏPKAÕîAÚœAàt5Aæ*ØAëá{Añ
-A÷NÁAýeB^B9UB§B	ïøB
-ËJBŠBíB]?B8BâB
-ï4B ÊB#¥×B&)B)\{B,7ÌB/
-B1îpB4ÉÁB7¥B:eB=TÑ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >fâ>B3?ga
-?ÏŸ@Bv@B÷@p¬Š@0ß@Š
-k@Œå÷@ÓÀ@êA ºÍA
-(AXA#A.oäA9Ý)AEJoAP·ŽA\$úAg?Arÿ
-A~lÊAíA£¬AZOAòAÇA¡~9A§4ÜA¬ëA²¢#AžXÆAŸiAÃÆ
-AÉ|°AÏ3SAÔéöAÚ AàW=Aæ
-áAëÄAñ{'A÷1ÊAüèmBOB*ÚB,B	á}B
-ŒÏB BsrBNÄB*BgB
-à¹B Œ
-B#\B&r®B)MÿB,)QB/£B1ßôB4»FB7B:qéB=M;B@(BBüù¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  >	ë>3·?cÂD?ÍKQ@ZÀ@B×@oÄï@œ@¥@Œr
-@ÓLš@ê'4A àA
-î%A[kA"È±A.5öA9£<AEAP}ÇA[ë
-AgXRArÅA~2ÝAÐAµA=XAóüAªA¡aBA§æA¬ÎA²
-,Až;ÐAœòsAÃ©AÉ_¹AÏ\AÔÍ AÚ£Aà:FAåðêAë§Añ^1A÷ÔAüËwBA
-B
-_B÷°B	ÓB
-®TB¥Bd÷B@HBBöìB
-Ò=B ­B#áB&d2B)?B,ÖB.ö'B1ÑyB4¬ËB7
-B:cnB=>ÀB@BBõcBEÐµBH¥!¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =öà©>%<3?`#k?Ë{ä@s	@A(!@nÝ9@I)@¥#Ž@»þ@@ÒØÍ@é³YA FòA
-Ž8A!}A"ÂA-üA9iNADÖAPCÙA[±Ag
-dArªA}øñA³
-AiŸA bA×AšA¡DLAŠúïA¬±A²h6Až
-ÙAœÕ|AÃ AÉBÃAÎùfAÔ°	AÚf¬Aà
-PAåÓóAëAñA:Aö÷ÝAü®B2B
-ãBé5B	ÄB
-ØB{*BV|B1ÍB
-BèpB
-ÃÂB B#zeB&U·B)1	B,
-ZB.ç¬B1ÂþB4OB7y¡B:TóB=0DB@
-BBæèBEÂ9BHBKxÝBNMI¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =Ùê>Àí?\?É¬{@U@@@l@mõ@ÕN@€¯Ú@»g@Òdò@é?~A 
-A
-zJAçA"TÖA-ÂA9/`ADŠAP	ìA[w1AfäwArQœA}¿A%ALÈAlAºAp²A¡'UAŠÝøA¬A²K?AžâAœžAÃo)AÉ%ÌAÎÜpAÔAÚI¶Aà YAå¶üAëm Añ$CAöÚæAüB$BÿhBÚºB	¶
-B
-]Bl¯BH B#RBþ€BÙõB
-µGB B#kêB&G<B)"B+ýßB.Ù1B1ŽB4ÔB7k&B:FwB=!ÉB?ýBBØlBE³ŸBHBKjaBNE³BQ!BSõq¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =Œó>E?XåÀ?ÇÝ@£@?X¶@m
-Î@as@€;ÿ@»@Ññ@èË€@ÿŠ0A
-@]A­¢A"èA-.A8õtADb¹AOÏþA[=DAfªArÏA}
-Ay.A/ÒAæuAASŒA¡
-^AŠÁA¬w¥A².HA·äìAœAÃR2AÉÖAÎ¿yAÔv
-AÚ,ÀAßãcAåAëP©AñLAöœðAütBBðíBÌ>B	§B
-âB^3B9
-B×Bð(BËzB
-ŠÌB 
-B#]oB&8ÀB)B+ïdB.ÊµB1ŠB4YB7\ªB:7üB=NB?îBBÉñBE¥CBHBK[æBN78BQBSíÛBVÉ-BY¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =ý=ó@?UFæ?Æ
-¡@»ç@>pÿ@l&@í@£È$@º¢°@Ñ}<@èWÈ@ÿ2SA
-oAsµA!àúA-N?A8»
-AD(ËAOA[VAfpAqÝáA}K'A\7AÚAÉ}A!A6ÄA ígAŠ€
-A¬Z­A²QA·ÇôAœ~AÃ5;AÈëÞAÎ¢AÔY%AÚÈAßÆkAå}Aë3²AðêUAö øAüWBBâpBœÂB	B
-teBO·B+	BZBá¬BŒþB
-OB s¡B#NóB&*DB)B+àçB.Œ9B1B4rÜB7N.B:)B=ÑB?à#BB»uBEÆBHrBKMjBN(»BQ
-BSß_BVº°BYB\qTB_EÀ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =t=Ö?Qš?Ä>6@Ô2@=I@k>a@yœ@£TH@º.Õ@Ñ	a@çãí@þŸyA
-ÌA9ÈA!§
-A-SA8ACîÝAO\#AZÉiAf6¯Aq£ôA}9A?@AõãA¬Ac*AÍA ÐqAŠA¬=·A±ô[A·ªýAœa¡AÃDAÈÎçAÎ
-AÔ<.AÙòÑAß©uAå`Aë»AðÍ_AöAü:¥B ø£BÓõB¯GB	B
-eêBA<B
-B÷ßBÓ1B®B
-ÔB e&B#@wB&ÉB(÷B+ÒlB.­ŸB1B4daB7?³B:B<öVB?ÑšBB¬ùBEKBHcBK>îBN@BPõBSÐãBV¬5BYB\bØB_>*Bb|Bdíè¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =LÍ=¹Šä?N	:?ÂnÌ@ì}@<¡@jV¬@â@¢ào@¹ºû@Ð@çp@þJA
-AÿÚA!m A,ÚfA8G«ACŽñAO"6AZ{AeüÁAqjA|×LA"IAØíAAF3Aü×A ³zAŠj
-A¬ ÁA±×dA·AœD«AÂûMAÈ±ñAÎhAÔ7AÙÕÛAß~AåC!AêùÅAð°hAög
-Aü
-¯B ê(BÅzB ÌB	|
-B
-WoB2ÀBBédBÄµB B
-{YB VªB#1üB&
-NB(èB+ÃñB.CB1zB4UæB717B:
-B<çÛB?Ã,BB~BEyÐBHU!BK0sBN
-ÅBPçBSÂhBVºBYy
-B\T]B_/¯Bb
- BdæRBgÁ€Bj¿  ¿  ¿  ¿  ¿  ¿  =2³=°8?Jjd?À`@Ç@;¹ß@inö@@¢l@¹G@Ð!¬@æü8@ýÖÂA
-X§AÅíA!32A, wA8
-œAC{ANèHAZUAeÂÓAq0A|`ASA»öArA)=AßàA AŠM'A¬ÊA±ºmA·qAœ'ŽAÂÞWAÈûAÎKAÔAAÙžäAßoAå&+AêÜÎAðqAöJAü žB Û­B¶ÿBPB	m¢B
-HôB$EBÿBÚèB¶:BB
-lÝB H/B##B%þÒB(Ú$B+µvB.ÇB1lB4GkB7"ŒB9þB<Ù_B?Ž±BBBEkTBHFŠBK!øBMýIBPØBS³íBV>BYjB\EâB_!3Baü
-Bd××Bg³(BjzBmiÌBp>8¿  ¿  ¿  ¿  <°/=s4?FË?ŸÏø@
-
-@:Ò*@hB@
--@¡ø¹@žÓE@Ï­Ñ@æ]@ýbèA
-
-¹AÿA ùEA,fA7ÓÐACAAN®[AZ¡AeæApö,A|csAè]A AU£A
-FAÂéA yAŠ00A«æÓA±wA·TAœ
-œAÂÁaAÈxAÎ.§AÓåKAÙíAßRAå	4Aê¿×Aðv{Aö-
-AûãÁB Í2BšBÕB	_'B
-:xBÊBñ
-BÌmB§¿BB
-^bB 9ŽB#B%ðWB(Ë©B+ŠúB.LB1]B48ïB7AB9ïB<ÊäB?Š6BBBE\ÙBH8+BK|BMîÎBPÊ BS¥qBVÃBY\B\7fB_žBaî
-BdÉ[Bg€­BjÿBm[PBp6¢BsôBuæ`¿  ¿  ;òÃë=E
-ê?C,œ?œ @
-5^@9êu@g@ªS@¡ß@ž_k@Ï9÷@æ@üïA	äÍARA ¿WA,,A7ãAC)ANtnAYá³AeNùApŒ?A|)
-AËfA	A8­AïPA¥óA \AŠ9A«ÉÝA±A·7#AŒíÇAÂ€jAÈ[
-AÎ±AÓÈTAÙ~÷Aß5Aäì=Aê¢áAðYAö'AûÆËB Ÿ·BBuZB	P«B
-+ýBOBâ BœòBDBtB
-OçB +8B#B%áÜB(œ-B+B.sÑB1O"B4*tB7ÆB9áB<ŒiB?»BBs
-BEN^BH)¯BKBMàSBP»€BSöBVrHBYMB\(ëB_=BaßBdºàBg2BjqBmLÕBp('BsxBuÞÊBxº
-B{    =
-??è?»1"@
-Mš@9¿@f·×@6x@¡@·ë@ÎÆ
-@å š@ü{4A	ªàA%A 
-kA+ò°A7_õABÍ;AN:AY§ÇAe
-ApQA{ïA®oAeA¶AÒYAýA ? A¥öCA«¬æA±cA·-AŒÐÐAÂsAÈ>AÍôºAÓ«]AÙbAß€AäÏGAê
-ëAð<Aõó1Aû©ÔB °;BBfßB	B0B
-
-BøÓBÔ%B¯wBÈBfB
-AlB 
-œB"øB%Ó`B(®²B+B.eUB1@§B4ùB6÷JB9ÒB<­îB??BBdBE?ãBH4BJöBMÑ×BP­)BS{BVcÌBY?
-B\pB^õÁBaÑBd¬eBg¶BjcBm>ZBp«BrôýBuÐOBx« B{òB~bD¿  ?=š\?¹a·@
-eó@8
-@eÐ"@Â@ *@·w¶@ÎRB@å,Î@üZA	pòAÞ8A K~A+žÃA7&	ABNAN AYmÙAdÛApHeA{µ«AyAH
-Aþ¿AµcAlA "©A¥ÙMA«ðA±FA¶ý6AŒ³ÙAÂj}AÈ! AÍ×ÃAÓgAÙE
-AÞû­Aä²QAêhôAðAõÖ;AûÝB ¡ÀB}BXcB	3µB
-BêXBÅªB ûB|MBWB
-2ðB BB"éB%ÄåB( 7B+{B.VÚB12,B4
-}B6èÏB9Ä!B<rB?zÄBBVBE1gBH
-¹BJè
-BMÃ\BP®BSyÿBVUQBY0£B\
-ôB^çFBaÂBdéBgy;BjTBm/ÞBp
-0BræBuÁÓBx%B{xwB~SÈB~}¿  ¿  @	ì@73U@dèl@NÂ@ )N@·Û@ÍÞg@äžó@û~A	7A€JA A+~ÕA6ìABY`AMÆŠAY3ëAd¡0ApvA{{ŒAtA+$AáÈAkAOA ²A¥ŒUA«røA±)A¶à?AŒâAÂM
-AÈ(AÍºÌAÓqoAÙ(AÞÞ¶AäYAêKüAð Aõ¹CAûoæB EBnBIèB	%:B
- BÛÝB·/BBmÒBI#B
-$uBÿÇB"ÛB%¶jB(ŒB+m
-B.H_B1#°B3ÿB6ÚTB9µ¥B<÷B?lIBBGBE"ìBGþ>BJÙBMŽáBP3BSkBVFÖBY"'B[ýyB^ØËBaŽ
-BdnBgjÀBjFBm!cBoüµBrØBu³XBxªB{iûB~EMB~o¿  ¿  ¿  ¿  @do
-@Úè@µt@¶ @Íj@äE@û£AýAj]A×£A+DèA6²-ABsAM¹AXùþAdgDAoÔA{AÏAWA.AÄÑA{tA2Aè»A¥^A«VA±
-¥A¶ÃHAŒyìAÂ0AÇç2AÍÕAÓTxAÙ
-
-AÞÁ¿AäxbAê/Aïå©AõLAûRðB ÉB`B;mB	ŸB
-òBÍbBš³BB_WB:šB
-úBñKB"ÌB%§ïB(@B+^B.9äB15B3ðB6ËØB9§*B<|B?]ÍBB9BEqBGïÂBJËBMŠfBP·BS]	BV8[BY¬B[îþB^ÊOBa¥¡BdóBg\DBj7BmèBoî9BrÉBu€ÝBx.B{[B~6ÒB~`¿  ¿  ¿  ¿  ¿  ¿  @xÂ@¶
-%@Ìö±@ãÑ=@ú«ÊAÃ*A0pAµA+
-ûA6xAAAåAMRËAXÀAd-WAoA{âA:Añ8A§ÛA^~A!AËÄA¥hA«9
-A°ï®A¶ŠRAŒ\õAÂAÇÊ<AÍßAÓ7AØî%AÞ€ÈAä[lAêAïÈ²AõVAû5ùB vNBQ B,ñB	CB
-ãBŸæB8BuBPÛB,-B
-BâÐB"Ÿ"B%sB(tÅB+PB.+hB1ºB3â
-B6œ]B9¯B<t B?ORBB*€BEõBGáGBJŒBMêBPs<BSNBV)ßBY1B[àB^»ÔBa&BdrwBgMÉBj)BmlBoßŸBr»BuaBxq³B{MB~(VB~R¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ìº @ã]c@ú7ïA=AöAcÈA*ÑA6>SAA«AMßAX$AcóiAo`¯AzÍõA
-AÔAAäAAAø+A®ÎA¥eqA«
-A°ÒžA¶[AŒ?þAÁö¢AÇ­EAÍcèAÓAØÑ/AÞÒAä>uAéõAï«ŒAõb_AûB gÓBC$B
-vBùÈB
-ÕB°kBœBgBB`B
-²B
-ùBÔUB"¯§B%øB(fJB+AB.
-íB0ø?B3ÓB6®âB94B<e
-B?@×BB
-(BD÷zBGÒÌBJ®
-BMoBPdÁBS@BVdBXö¶B[ÒB^­YBa«BdcüBg?NBjBlõñBoÑCBr¬BuæBxc8B{>B~ÛB~C¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ùû<AOOAŒA)ÚA* A6eAAq«ALÞðAXL6Ac¹|Ao&ÁAzA §A·JAmîA$AÛ4AØA¥H{Aªÿ
-A°µÁA¶ldAŒ#AÁÙ«AÇNAÍFòAÒýAØŽ8AÞjÜAä!AéØ"AïÅAõEhAúü
-B YXB4ªBûBëLB
-ÆB¡ðB}ABXB3åB6B
-êBÅÚB"¡+B%|}B(WÏB+3 B.rB0éÃB3ÅB6 gB9{žB<W
-B?2\BB
-­BDèÿBGÄPBJ¢BMzôBPVEBS1BV
-éBXè:B[ÃB^ÞBaz/BdUBg0ÓBj
-$BlçvBoÂÇBrBuykBxTŒB{0B~
-`B~5 ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A<A
-ïíA*]3A5ÊxAA7ŸAL¥AXIAcAnìÔAzZAã°ATAP÷AAŸ>AtáA¥+Aªâ(A°ËA¶OnAŒAÁŒŽAÇsXAÍ)ûAÒàAØBAÞMåAäAé»,AïqÏAõ(rAúßB JÜB&.BBÜÒB
-ž#BtBnÆBJB%iB »B
-Ü
-B·^B"°B%nB(ISB+$¥B-ÿ÷B0ÛHB3¶B6ëB9m=B<HB?#àBAÿ2BDÚBGµÕBJ'BMlxBPGÊBS#
-BUþmBXÙ¿B[µB^bBakŽBdGBg"WBiý©BlØûBoŽLBrBujïBxFAB{!B}üäB~&¥¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A*>ÚA5A@ýÑALkAWØ\AcE¡An²çAz .AÆ¹A}]A4 Aê€A¡GAWêA¥AªÅ1A°{ÔA¶2xA»éAÁŸAÇVaAÍ
-AÒÃšAØzKAÞ0îAãçAé5AïTØAõ
-|AúÂB <aB³BóBÎVB
-©šBúB`KB;BîBò@B
-ÍBšãB"5B%_B(:ØB+*B-ñ{B0ÌÍB3šB6pB9^ÂB<:B?eBAð·BDÌBG§ZBJ«BM]ýBP9OBS BUïòBXËDB[ŠB^çBa]9Bd8BgÜBiï.BlÊBo¥ÑBr#Bu\tBx7ÆB{B}îiB~*¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A@ßwAL1(AWnAc
-³AnxùAyæ>A©ÃA`fAAÍ¬AOA:óA€ñAªš9A°^ÝA¶A»Ì#AÁÇAÇ9jAÌð
-AÒŠ°AØ]SAÞ÷AãÊAé=Aï7áAôîAú¥'B -äB	6BäB¿ÚB
-,Bv}BQÏB-!BrBãÃB
-¿BgB"užB%Q
-B(,\B+­B-âÿB0ŸQB3¢B6tôB9PFB<+B?éBAâ:BDœBGÞBJt/BMOBP*ÒBS$BUávBXŒÇB[B^skBaNŒBd*Bg`Bià±BlŒBoUBrrŠBuMøBx)JB{B}ßíB~	®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AWAbÑÆAn?
-Ay¬QAÌACoAúA°¶AgXA
-üA€ÔAªCA°AæAµøA»¯-AÁeÐAÇ
-sAÌÓAÒºAØ@]AÝ÷ Aã­£AédGAïêAôÑAú0B iBú»BÖ
-B±^B
-°BhBCTB
-¥Bù÷BÕIB
-°BëB"g=B%BB(
-àB*ù2B-ÔB0¯ÕB3'B6fyB9AÊB<
-
-B>ønBAÓ¿BD¯BGbBJeŽBMABP
-WBR÷©BUÒúBX®LB[B^dïBa@ABdBföäBiÒ6Bl­BoÙBrd+Bu?}BxÎBzö B}ÑrB}û3¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  An ²AyrdAoÕA&yAÝ
-A¿AJcAA€·šAªnLA°$ïAµÛA»6AÁHÙAÆÿ}AÌ¶ AÒlÃAØ#gAÝÚ
-Aã­AéGPAîýóAôŽAúk:B îBì?BÇB¢ãB
-~4BYB4ØB*Bë|BÆÍB
-¢B}qB"XÂB%4B(eB*ê·B-ÆB0¡ZB3|¬B6WýB93OB<¡B>éòBAÅDBD BG{çBJW9BM2BP
-ÜBRé.BUÄBXÑB[{"B^VtBa1ÆBd
-BfèiBiÃ»Bl
-Boz^BrU°Bu1Bx
-SBzç¥B}ÂöB}ìž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A`©A	AÀ%AvÉA-lAäA€³AªQVA°øAµŸA»u?AÁ+ãAÆâAÌ)AÒOÍAØpAÝœAãs·Aé*ZAîàýAô AúNCB sBÝÅB¹BgB
-o¹BK
-B&\B®BÝ BžRB
-€BnõB"JGB%%B( êB*Ü;B-·B0ßB3n0B6IB9$ÔB< %B>ÛwBA¶ÉBDBGmlBJHŸBM$BOÿaBRÚ²BU¶BXVB[l§B^GùBa#JBcþBfÙîBiµ?BlBokãBrG4Bu"BwýØBzÙ)B}Ž{B}Þ=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A°ùAYÒAuAÇA€}ŒAª4_A¯ëAµ¡ŠA»XHAÁìAÆÅAÌ|3AÒ2ÖA×éyAÝ 
-AãVÀAé
-cAîÄAôzªAú1MAÿçïBÏIBªB
-íB
-a>B<BáBó3BÎB©ÖB
-
-(B`zB";ÌB%
-B'òoB*ÍÁB-©B0cB3_µB6;B9XB;ñªB>ÌüBAšMBDBG^ñBJ:BBMBOðæBRÌ7BU§BXÚB[^,B^9~BaÏBcð!BfËrBiŠÄBlBo]gBr8¹Bu
-Bwï\BzÊ®B}Š B}ÏÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AIAª"A€`ÅAªiA¯Î
-Aµ¯A»;SAÀñöAÆšAÌ_<AÒßA×ÌAÝ&Aã9ÉAèðmAî§Aô]³AúWAÿÊøBÀÎB BwqB
-RÃB.B	fBä·BÀ	B[B
-v¬BQþB"-PB%¢B'ãôB*¿EB-B0uéB3Q:B6,B9ÝB;ã/B>ŸBAÒBDu$BGPuBJ+ÇBMBOâjBRœŒBUBXt_B[O±B^+BaTBcáŠBfŒ÷BiIBlsBoNìBr*>BuBwàáBzŒ3B}B}ÁF¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A€QA©úrA¯±Aµg¹A»
-\AÀÔÿAÆ£AÌBFAÑøèA×¯AÝf/Aã
-ÓAèÓvAîAô@œAù÷`Aÿ®B²SB€BhöB
-DHBBúëBÖ=B±BßB
-h1BCB"
-ÔB$ú&B'ÕxB*°ÊB-
-B0gmB3B¿B6
-B8ùbB;Ô³B>°BAWBDfšBGAúBJ
-LBLøBOÓïBR¯ABUBXeäB[A6B^
-B`÷ÙBcÓ*Bf®|BiÎBleBo@qBrÂBt÷BwÒfBz­·B}	B}²Ë¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¯¡éAµJÂA»eAÀž	AÆn¬AÌ%OAÑÛóA×AÝI8AâÿÜAè¶Aîm#Aô#ÆAùÚiAÿ
-B£×B)BZ{B
-5ÌB
-BìpBÇÁB£B~eB
-Y¶B5B"YB$ë«B'ÆüB*¢NB-} B0XòB34DB6B8êçB;Æ9B>¡BA|ÛBDX-BG3BJÐBLê"BOÅtBR ÅBU|BXWiB[2ºB^
-B`é^BcÄ¯Bf Bi{RBlV€Bo1öBr
-GBtèBwÃêBz<B}zB}€O¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aºò9AÀAÆQµAÌYAÑŸüA×uAÝ,CAââæAèAîP,AôÏAùœsAÿtB\Bp®BKÿB
-'QB£BÝôB¹FBBoéB
-K;B&B"ÞB$Ý/B'žB*ÓB-o$B0JvB3%ÈB6B8ÜlB;·œB>BAnaBDI²BG%BJ UBLÛ§BO¶øBRJBUmBXHíB[$?B]ÿB`ÚâBc¶4BfBil×BlH)Bo#zBqþÌBtÚ
-BwµoBzÁB}lB}Ô¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÆBAËëbAÑ¢A×X©AÝLAâÅïAè|Aî36AóéØAù |AÿWBáBb3B=B
-ÖB
-ô'BÏyBªËB
-BanB
-<ÀBB!ócB$ÎµB'ªB*
-WB-`©B0;ûB3LB5òB8ÍðB;©BB>BA_åBD;7BGBIñÚBLÍ+BOš}BRÏBU_ BX:rB[ÄB]ñB`ÌgBc§¹Bf
-Bi^\Bl9®BoÿBqðQBtË¢BwŠôBzFB}]B}Y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÑÙA×;²AÜòUAâšùAè_Aî?AóÌãAùAÿ:'BxfBS·B/	B
-
-[B
-å¬BÀþBOBw¡BRóB
-.DB	B!äèB$À9B'B*vÝB-R.B0-B3ÑB5ä#B8¿tB;ÆB>vBAQjBD,ŒBG
-BIã_BLŸ±BOBRuSBUP¥BX+÷B[HB]âB`œìBc=BftBiOáBl+2BoBqáÖBtœ'BwyBzsÊB}O
-B}xÞ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÜã)AâAèB¥AíùIAó¯ìAùfAÿ
-1BiêBE<B B
-ûßB
-×1B²BÔBi&BDwB
-ÉB
-ûB!ÖlB$±ŸB'B*haB-C³B0B2úVB5Õ§B8°ùB;KB>gBABîBD
-@BFùBIÔäBL°5BOBRfÙBUB*BX
-{BZøÍB]ÔB`¯pBcÂBffBiAeBl
-·Bnø	BqÓZBt®¬BwþBzeOB}@¡B}jb¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aè3yAíÜRAóõAùIAÿ ;B[oB6ÁBB
-ídB
-È¶B€BYBZ«B5üB
-NB
-ìB!ÇñB$£CB'~B*YæB-58B0B2ëÛB5Ç-B8¢~B;}ÏB>Y!BA4sBDÄBFëBIÆhBL¡ºBO}
-BRX]BU3¯BXBZêRB]Å£B` õBc|GBfWBi2êBl<BnéBqÄßBt 1Bw{BzVÔB}2&B}[ç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AóÉAù,¢AþãDBLôB(EBB
-ÞéB
-º:BBpÞBL/B'B
-ÓB
-Þ$B!¹vB$ÇB'pB*KkB-&ŒB0B2Ý`B5ž±B8B;oUB>JŠBA%÷BDIBFÜBI·ìBL>BOnBRIâBU%4BX 
-BZÛ×B]·)B`zBcmËBfI
-Bi$oBkÿÀBnÛBq¶dBtµBwmBzHYB}#ªB}Ml¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AþÔB>xBÊBõ
-B
-ÐmB
-«¿BBbbB=ŽBBôWB
-Ï©B!ªûB$LB'aB*<ïB-AB/óB2ÎäB5ª6B8
-B;`ÙB><+BA}BCòÎBFÎBI©qBLÃBO`BR;fBUžBWò
-BZÍ\B]š­B`ÿBc_QBf:¢BióBkñEBnÌBq§èBt:Bw^Bz9ÝB}/B}>ñ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B4Bæ B
-ÁòB
-DBxBSçB/9B
-BåÜB
-Á.B!B$wÑB'S#B*.tB-	ÆB/åB2ÀiB5»B8w
-B;R^B>-°BA	BCäSBF¿¥BIöBLvGBOQBR,ëBU<BWãBZŸàB]2B`uBcPÕBf,'BiyBkâÊBnŸBqmBtt¿BwPBz+bB}ŽB}0u¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-º\B
-ÈBjBElB œBüB×aB
-²²B!B$iVB'D§B*ùB,ûKB/ÖB2±îB5?B8hB;CãB>4B@úBCÕØBF±)BI{BLgÍBOC
-BR
-oBTùÁBWÕBZ°dB]¶B`gBcBZBf
-¬BhøýBkÔOBn¯¡BqòBtfCBwABz
-çB|ø8B}!ú¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BbB6ïBABíBÈäB
-€6B!B$ZÙB'6+B*}B,ìÎB/È B2£rB5~ÃB8ZB;5fB>žB@ì
-BCÇ[BF¢­BI}ÿBLYPBO4¢BRôBTëEBWÆBZ¡èB]}:B`XBc3ÝBf/BhêBkÅÓBn¡$Bq|vBtWÈBw3BzjB|éŒB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-«BßBºiB
-»B!q
-B$L^B''°B*B,ÞSB/¹¥B2öB5pHB8KB;&ëB>=B@ÝBCžàBF2BIoBLJÕBO&'BRxBTÜÊBWž
-BZmB]nŸB`JBc%bBf ³BhÜBk·WBn©BqmûBtILBw$ByÿðB|ÛAB}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B²ÓB
-?B!bB$=ãB'4B)ôB,ÏØB/«)B2{B5aÍB8=
-B;pB=óÂB@ÏBCªeBF
-¶BIaBL<ZBO«BQòýBTÎOBW© BZòB]`DB`;BcæBeò8BhÍBkšÛBn-Bq_Bt:ÑBw#ByñtB|ÌÆB|ö¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B!ZûB$/gB'
-¹B)æ
-B,Á\B/®B2x B5SQB8.£B;	õB=åFB@ÀBCêBFw;BIRBL-ÞBO	0BQäBT¿ÓBW%BZvwB]QÈB`-BclBeãœBh¿Bk`Bnu²BqQBt,UBw§ByâùB|ŸKB|è
-¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B'#B)×B,²áB/3B2iB5DÖB8 (B:ûyB=ÖËB@²
-BCnBFhÀBIDBLcBNúµBQÖBT±XBWªBZgûB]CMB`
-BbùðBeÕBBh°BkåBng6BqBBt
-ÚBvù+ByÔ}B|¯ÏB|Ù¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B,«JB/¶B2[B56ZB8«B:ìýB=ÈOB@£ BC~òBFZDBI5BLçBNì9BQÇBT¢ÜBW~-BZYB]4ÑB`"BbëtBeÆÆBh¢Bk}iBnX»Bq4
-Bt]Bvê¯ByÆB|¡RB|Ë¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B2SrB5'ÞB80B:ÞB=¹ÓB@%BCpwBFKÈBI'BLlBNÝœBQ¹BTaBWo²BZKB]&UB`§BbÜùBežJBhBknîBnJ?Bq%Bt ãBvÜ4By·
-B|×B|Œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B7ûB:ÐB=«XB@ªBCaûBF=MBIBKóðBNÏBBQªBT
-åBWa7BZ<B]ÚB_ó,BbÎ}Be©ÏBh
-!Bk`rBn;ÄBqBsògBvÍ¹By©
-B|\B|®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B=£ÂB@x.BCSBF.ÒBI
-#BKåuBNÀÇBQBTwjBWRŒBZ.
-B]	_B_ä±BbÀBeTBhv¥BkQ÷Bn-IBqBsãìBv¿>ByB|uáB|¥¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BCKéBF UBHû§BKÖùBN²JBQBThîBWD?BZB\úãB_Ö4Bb±BeØBhh)BkC{Bn
-ÌBpú
-BsÕpBv°ÁByB|geB|)¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BHôBKÈ}BN£ÏBQ!BTZrBW5ÄBZB\ìgB_Ç¹Bb£
-Be~\BhY®Bk5 BnQBpë£BsÆôBv¢FBy}B|XéB|®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BN9BQp¥BTK÷BW'IBZB\ÝìB_¹>BbBeoáBhK3Bk&BnÖBpÝ(BsžyBvËByo
-B|JnB|t3¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BTDaBWÍBYôB\ÏqB_ªÂBbBeafBh<·Bk	Bmó[BpÎ¬Bs©þBv
-PBy`¡B|;óB|e·¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BYìB\ÀôB_FBbwBeRéBh.;Bk	BmäÞBpÀ0BsBvvÓByR%B|-wB|W<¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B_°Bbi
-BeDnBhÀBjûBmÖcBp±µBsBvhXByCªB|
-ûB|HÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Be<ØBhDBjìBmÇèBp£9Bs~BvYÝBy5.B|B|:F¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bjå Bm¹lBpŸBspBvKaBy&³B|B|+Ê¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bp'BsaBv<åBy7B{óB|
-O¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bv5OBy	»B{å
-B|Ô¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B{ÝwB| X¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 <#×
-<£×
-<õÂ=#×
-=LÌÍ=uÂ=\)=£×
-=žQì=ÌÌÍ=áG®=õÂ>
-ž>\)>>#×
->.{>8Qì>B\>LÌÍ>W
-=>aG®>k
->uÂ>  >
-
-ž>=q>\)>zá>>žR>£×
->šõÃ>®{>³33>žQì>œp€>Â\>Ç®>ÌÌÍ>Ñë
->×
-=>Ü(ö>áG®>æff>ë
->ð£×>õÂ>úáH?   ?\?
-ž?®?
-=q?
-ÌÍ?\)?ë
-?zá?
-=??
-(ö?
-žR?!G®?  ?G®?\?×
-?
-
-ž?ff?®?õÃ?=q?
-?ÌÍ?{?\)?£×?ë
-?33?zá?Â?
->?Qì??áH?(ö?p€?žR?   ?¡G®?¢\?£×
-?¥
-ž?Šff?§®?šõÂ?ª=q?«
-?¬ÌÍ?®{?¯\)?°£×?±ë
-?³33?Žzá?µÂ?·
->?žQì?¹?ºáH?Œ(ö?œp€?ŸžR?À  ?ÁG®?Â\?Ã×
-?Å
-ž?Æff?Ç®?ÈõÂ?Ê=p?Ë
-
-?ÌÌÍ?Î{?Ï\)?Ð£×@   @ £×@G®@ë
-@\@33@×
-@zá@
-ž@Â@ff@
-=@®@Qì@õÃ@	@
-=q@
-áH@
-
-@
-(ö@
-ÌÍ@
-p€@{@žR@\)@  @£×@G®@ë
-@\@33@×
-@zá@
-ž@Â@ff@
->@®@Qì@õÂ@@=q@áH@
-@
-(ö@
-ÌÍ@
-p€@
-{@
-žR@\)@   @ £×@!G®@!ë
-@"\@#33@#×
-@$zá@%
-ž@%Â@&ff@'
->@'®@(Qì@@  @@£×@AG®@Aë
-@B\@C33@C×
-@Dzá@E
-ž@EÂ@Fff@G
-=@G®@HQì@HõÃ@I@J=q@JáH@K
-@L(ö@LÌÍ@Mp€@N{@NžR@O\)@P  @P£×@QG®@Që
-@R\@S33@S×
-@Tzá@U
-ž@UÂ@Vff@W
->@W®@XQì@XõÂ@Y@Z=q@ZáH@[
-@\(ö@\ÌÍ@]p€@^{@^žR@_\)@`  @`£×@aG®@aë
-@b\@c33@c×
-@dzá@e
-ž@eÂ@fff@g
->@g®@hQì@  @Qì@£×@õÃ@G®@@ë
-@=q@\@áH@33@
-@×
-@(ö@zá@ÌÍ@
-
-ž@
-p€@
-Â@{@ff@žR@
-=@\)@®@  @Qì@£×@õÃ@G®@@ë
-@=q@\@áH@33@
-@×
-@(ö@zá@ÌÍ@
-ž@p€@Â@{@ff@žR@
-=@\)@®@  @Qì@£×@õÂ@G®@@ë
-@=q@\@áH@33@
-@×
-@(ö@   @ Qì@ £×@ õÃ@¡G®@¡@¡ë
-@¢=q@¢\@¢áH@£33@£
-@£×
-@€(ö@€zá@€ÌÍ@¥
-ž@¥p€@¥Â@Š{@Šff@ŠžR@§
-=@§\)@§®@š  @šQì@š£×@šõÃ@©G®@©@©ë
-@ª=q@ª\@ªáH@«33@«
-@«×
-@¬(ö@¬zá@¬ÌÍ@­
-ž@­p€@­Â@®{@®ff@®žR@¯
-=@¯\)@¯®@°  @°Qì@°£×@°õÂ@±G®@±@±ë
-@²=q@²\@²áH@³33@³
-@³×
-@Ž(ö@À  @ÀQì@À£×@ÀõÃ@ÁG®@Á@Áë
-@Â=q@Â\@ÂáH@Ã33@Ã
-@Ã×
-@Ä(ö@Äzá@ÄÌÍ@Å
-ž@Åp€@ÅÂ@Æ{@Æff@ÆžR@Ç
-=@Ç\)@Ç®@È  @ÈQì@È£×@ÈõÃ@ÉG®@É@Éë
-@Ê=q@Ê\@ÊáH@Ë33@Ë
-@Ë×
-@Ì(ö@Ìzá@ÌÌÍ@Í
-ž@Íp€@ÍÂ@Î{@Îff@ÎžR@Ï
-=@Ï\)@Ï®@Ð  @ÐQì@Ð£×@ÐõÂ@ÑG®@Ñ@Ñë
-@Ò=q@Ò\@ÒáH@Ó33@Ó
-@Ó×
-@Ô(ö@à  @àQì@à£×@àõÃ@áG®@á@áë
-@â=q@â\@âáH@ã33@ã
-@ã×
-@ä(ö@äzá@äÌÍ@å
-ž@åp€@åÂ@æ{@æff@æžR@ç
-=@ç\)@ç®@è  @èQì@è£×@èõÃ@éG®@é@éë
-@ê=q@ê\@êáH@ë33@ë
-@ë×
-@ì(ö@ìzá@ìÌÍ@í
-ž@íp€@íÂ@î{@îff@îžR@ï
-=@ï\)@ï®@ð  @ðQì@ð£×@ðõÂ@ñG®@ñ@ñë
-@ò=q@ò\@òáH@ó33@ó
-@ó×
-@ô(öA   A (öA QìA záA £×A ÌÍA õÃA
-žAG®Ap€AAÂAë
-A{A=qAffA\AžRAáHA
-=A33A\)A
-A®A×
-A  A(öAQìAzáA£×AÌÍAõÃA
-žAG®Ap€AAÂAë
-A{A=qAffA\AžRAáHA
-=A33A\)A
-A®A×
-A  A(öAQìAzáA£×AÌÍAõÃA	
-žA	G®A	p€A	A	ÂA	ë
-A
-{A  A(öAQìAzáA£×AÌÍAõÃA
-žAG®Ap€AAÂAë
-A{A=qAffA\AžRAáHA
-=A33A\)A
-A®A×
-A  A(öAQìAzáA£×AÌÍAõÃA
-žAG®Ap€AAÂAë
-A{A=qAffA\AžRAáHA
-=A33A\)A
-A®A×
-A  A(öAQìAzáA£×AÌÍAõÃA
-žAG®Ap€AAÂAë
-A{A   A (öA QìA záA £×A ÌÍA õÃA!
-žA!G®A!p€A!A!ÂA!ë
-A"{A"=qA"ffA"\A"žRA"áHA#
-=A#33A#\)A#
-A#®A#×
-A$  A$(öA$QìA$záA$£×A$ÌÍA$õÃA%
-žA%G®A%p€A%A%ÂA%ë
-A&{A&=qA&ffA&\A&žRA&áHA'
-=A'33A'\)A'
-A'®A'×
-A(  A((öA(QìA(záA(£×A(ÌÍA(õÃA)
-žA)G®A)p€A)A)ÂA)ë
-A*{A0  A0(öA0QìA0záA0£×A0ÌÍA0õÃA1
-žA1G®A1p€A1A1ÂA1ë
-A2{A2=qA2ffA2\A2žRA2áHA3
-=A333A3\)A3
-A3®A3×
-A4  A4(öA4QìA4záA4£×A4ÌÍA4õÃA5
-žA5G®A5p€A5A5ÂA5ë
-A6{A6=qA6ffA6\A6žRA6áHA7
-=A733A7\)A7
-A7®A7×
-A8  A8(öA8QìA8záA8£×A8ÌÍA8õÃA9
-žA9G®A9p€A9A9ÂA9ë
-A:{A@  A@(öA@QìA@záA@£×A@ÌÍA@õÃAA
-žAAG®AAp€AAAAÂAAë
-AB{AB=qABffAB\ABžRABáHAC
-=AC33AC\)AC
-AC®AC×
-AD  AD(öADQìADzáAD£×ADÌÍADõÃAE
-žAEG®AEp€AEAEÂAEë
-AF{AF=qAFffAF\AFžRAFáHAG
-=AG33AG\)AG
-AG®AG×
-AH  AH(öAHQìAHzáAH£×AHÌÍAHõÃAI
-žAIG®AIp€AIAIÂAIë
-AJ{AP  AP(öAPQìAPzáAP£×APÌÍAPõÃAQ
-žAQG®AQp€AQAQÂAQë
-AR{AR=qARffAR\ARžRARáHAS
-=AS33AS\)AS
-AS®AS×
-AT  AT(öATQìATzáAT£×ATÌÍATõÃAU
-žAUG®AUp€AUAUÂAUë
-AV{AV=qAVffAV\AVžRAVáHAW
-=AW33AW\)AW
-AW®AW×
-AX  AX(öAXQìAXzáAX£×AXÌÍAXõÃAY
-žAYG®AYp€AYAYÂAYë
-AZ{A`  A`(öA`QìA`záA`£×A`ÌÍA`õÃAa
-žAaG®Aap€AaAaÂAaë
-Ab{Ab=qAbffAb\AbžRAbáHAc
-=Ac33Ac\)Ac
-Ac®Ac×
-Ad  Ad(öAdQìAdzáAd£×AdÌÍAdõÃAe
-žAeG®Aep€AeAeÂAeë
-Af{Af=qAfffAf\AfžRAfáHAg
-=Ag33Ag\)Ag
-Ag®Ag×
-Ah  Ah(öAhQìAhzáAh£×AhÌÍAhõÃAi
-žAiG®Aip€AiAiÂAië
-Aj{Ap  Ap(öApQìApzáAp£×ApÌÍApõÃAq
-žAqG®Aqp€AqAqÂAqë
-Ar{Ar=qArffAr\AržRAráHAs
-=As33As\)As
-As®As×
-At  At(öAtQìAtzáAt£×AtÌÍAtõÃAu
-žAuG®Aup€AuAuÂAuë
-Av{Av=qAvffAv\AvžRAváHAw
-=Aw33Aw\)Aw
-Aw®Aw×
-Ax  Ax(öAxQìAxzáAx£×AxÌÍAxõÃAy
-žAyG®Ayp€AyAyÂAyë
-Az{A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-
-=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A
-žA33AG®A\)Ap€A
-AA®AÂA×
-Aë
-A  A{A(öA=qAQìAffAzáA\A£×AžRAÌÍAáHAõÃA
-=A   A {A (öA =qA QìA ffA záA \A £×A žRA ÌÍA áHA õÃA¡
-=A¡
-žA¡33A¡G®A¡\)A¡p€A¡
-A¡A¡®A¡ÂA¡×
-A¡ë
-A¢  A¢{A¢(öA¢=qA¢QìA¢ffA¢záA¢\A¢£×A¢žRA¢ÌÍA¢áHA¢õÃA£
-=A£
-žA£33A£G®A£\)A£p€A£
-A£A£®A£ÂA£×
-A£ë
-A€  A€{A€(öA€=qA€QìA€ffA€záA€\A€£×A€žRA€ÌÍA€áHA€õÃA¥
-=Aš  Aš{Aš(öAš=qAšQìAšffAšzáAš\Aš£×AšžRAšÌÍAšáHAšõÃA©
-=A©
-žA©33A©G®A©\)A©p€A©
-A©A©®A©ÂA©×
-A©ë
-Aª  Aª{Aª(öAª=qAªQìAªffAªzáAª\Aª£×AªžRAªÌÍAªáHAªõÃA«
-=A«
-žA«33A«G®A«\)A«p€A«
-A«A«®A«ÂA«×
-A«ë
-A¬  A¬{A¬(öA¬=qA¬QìA¬ffA¬záA¬\A¬£×A¬žRA¬ÌÍA¬áHA¬õÃA­
-=A°  A°{A°(öA°=qA°QìA°ffA°záA°\A°£×A°žRA°ÌÍA°áHA°õÃA±
-=A±
-žA±33A±G®A±\)A±p€A±
-A±A±®A±ÂA±×
-A±ë
-A²  A²{A²(öA²=qA²QìA²ffA²záA²\A²£×A²žRA²ÌÍA²áHA²õÃA³
-=A³
-žA³33A³G®A³\)A³p€A³
-A³A³®A³ÂA³×
-A³ë
-AŽ  AŽ{AŽ(öAŽ=qAŽQìAŽffAŽzáAŽ\AŽ£×AŽžRAŽÌÍAŽáHAŽõÃAµ
-=Až  Až{Až(öAž=qAžQìAžffAžzáAž\Až£×AžžRAžÌÍAžáHAžõÃA¹
-=A¹
-žA¹33A¹G®A¹\)A¹p€A¹
-A¹A¹®A¹ÂA¹×
-A¹ë
-Aº  Aº{Aº(öAº=qAºQìAºffAºzáAº\Aº£×AºžRAºÌÍAºáHAºõÃA»
-=A»
-žA»33A»G®A»\)A»p€A»
-A»A»®A»ÂA»×
-A»ë
-AŒ  AŒ{AŒ(öAŒ=qAŒQìAŒffAŒzáAŒ\AŒ£×AŒžRAŒÌÍAŒáHAŒõÃAœ
-=AÀ  AÀ{AÀ(öAÀ=qAÀQìAÀffAÀzáAÀ\AÀ£×AÀžRAÀÌÍAÀáHAÀõÃAÁ
-=AÁ
-žAÁ33AÁG®AÁ\)AÁp€AÁ
-AÁAÁ®AÁÂAÁ×
-AÁë
-AÂ  AÂ{AÂ(öAÂ=qAÂQìAÂffAÂzáAÂ\AÂ£×AÂžRAÂÌÍAÂáHAÂõÃAÃ
-=AÃ
-žAÃ33AÃG®AÃ\)AÃp€AÃ
-AÃAÃ®AÃÂAÃ×
-AÃë
-AÄ  AÄ{AÄ(öAÄ=qAÄQìAÄffAÄzáAÄ\AÄ£×AÄžRAÄÌÍAÄáHAÄõÃAÅ
-=AÈ  AÈ{AÈ(öAÈ=qAÈQìAÈffAÈzáAÈ\AÈ£×AÈžRAÈÌÍAÈáHAÈõÃAÉ
-=AÉ
-žAÉ33AÉG®AÉ\)AÉp€AÉ
-AÉAÉ®AÉÂAÉ×
-AÉë
-AÊ  AÊ{AÊ(öAÊ=qAÊQìAÊffAÊzáAÊ\AÊ£×AÊžRAÊÌÍAÊáHAÊõÃAË
-=AË
-žAË33AËG®AË\)AËp€AË
-AËAË®AËÂAË×
-AËë
-AÌ  AÌ{AÌ(öAÌ=qAÌQìAÌffAÌzáAÌ\AÌ£×AÌžRAÌÌÍAÌáHAÌõÃAÍ
-=AÐ  AÐ{AÐ(öAÐ=qAÐQìAÐffAÐzáAÐ\AÐ£×AÐžRAÐÌÍAÐáHAÐõÃAÑ
-=AÑ
-žAÑ33AÑG®AÑ\)AÑp€AÑ
-AÑAÑ®AÑÂAÑ×
-AÑë
-AÒ  AÒ{AÒ(öAÒ=qAÒQìAÒffAÒzáAÒ\AÒ£×AÒžRAÒÌÍAÒáHAÒõÃAÓ
-=AÓ
-žAÓ33AÓG®AÓ\)AÓp€AÓ
-AÓAÓ®AÓÂAÓ×
-AÓë
-AÔ  AÔ{AÔ(öAÔ=qAÔQìAÔffAÔzáAÔ\AÔ£×AÔžRAÔÌÍAÔáHAÔõÃAÕ
-=AØ  AØ{AØ(öAØ=qAØQìAØffAØzáAØ\AØ£×AØžRAØÌÍAØáHAØõÃAÙ
-=AÙ
-žAÙ33AÙG®AÙ\)AÙp€AÙ
-AÙAÙ®AÙÂAÙ×
-AÙë
-AÚ  AÚ{AÚ(öAÚ=qAÚQìAÚffAÚzáAÚ\AÚ£×AÚžRAÚÌÍAÚáHAÚõÃAÛ
-=AÛ
-žAÛ33AÛG®AÛ\)AÛp€AÛ
-AÛAÛ®AÛÂAÛ×
-AÛë
-AÜ  AÜ{AÜ(öAÜ=qAÜQìAÜffAÜzáAÜ\AÜ£×AÜžRAÜÌÍAÜáHAÜõÃAÝ
-=Aà  Aà{Aà(öAà=qAàQìAàffAàzáAà\Aà£×AàžRAàÌÍAàáHAàõÃAá
-=Aá
-žAá33AáG®Aá\)Aáp€Aá
-AáAá®AáÂAá×
-Aáë
-Aâ  Aâ{Aâ(öAâ=qAâQìAâffAâzáAâ\Aâ£×AâžRAâÌÍAâáHAâõÃAã
-=Aã
-žAã33AãG®Aã\)Aãp€Aã
-AãAã®AãÂAã×
-Aãë
-Aä  Aä{Aä(öAä=qAäQìAäffAäzáAä\Aä£×AäžRAäÌÍAäáHAäõÃAå
-=Aè  Aè{Aè(öAè=qAèQìAèffAèzáAè\Aè£×AèžRAèÌÍAèáHAèõÃAé
-=Aé
-žAé33AéG®Aé\)Aép€Aé
-AéAé®AéÂAé×
-Aéë
-Aê  Aê{Aê(öAê=qAêQìAêffAêzáAê\Aê£×AêžRAêÌÍAêáHAêõÃAë
-=Aë
-žAë33AëG®Aë\)Aëp€Aë
-AëAë®AëÂAë×
-Aëë
-Aì  Aì{Aì(öAì=qAìQìAìffAìzáAì\Aì£×AìžRAìÌÍAìáHAìõÃAí
-=Að  Að{Að(öAð=qAðQìAðffAðzáAð\Að£×AðžRAðÌÍAðáHAðõÃAñ
-=Añ
-žAñ33AñG®Añ\)Añp€Añ
-AñAñ®AñÂAñ×
-Añë
-Aò  Aò{Aò(öAò=qAòQìAòffAòzáAò\Aò£×AòžRAòÌÍAòáHAòõÃAó
-=Aó
-žAó33AóG®Aó\)Aóp€Aó
-AóAó®AóÂAó×
-Aóë
-Aô  Aô{Aô(öAô=qAôQìAôffAôzáAô\Aô£×AôžRAôÌÍAôáHAôõÃAõ
-=Aø  Aø{Aø(öAø=qAøQìAøffAøzáAø\Aø£×AøžRAøÌÍAøáHAøõÃAù
-=Aù
-žAù33AùG®Aù\)Aùp€Aù
-AùAù®AùÂAù×
-Aùë
-Aú  Aú{Aú(öAú=qAúQìAúffAúzáAú\Aú£×AúžRAúÌÍAúáHAúõÃAû
-=Aû
-žAû33AûG®Aû\)Aûp€Aû
-AûAû®AûÂAû×
-Aûë
-Aü  Aü{Aü(öAü=qAüQìAüffAüzáAü\Aü£×AüžRAüÌÍAüáHAüõÃAý
-=B   B 
-=B {B 
-žB (öB 33B =qB G®B QìB \)B ffB p€B záB 
-B \B B £×B ®B žRB ÂB ÌÍB ×
-B áHB ë
-B õÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB	  B	
-=B	{B	
-žB	(öB	33B	=qB	G®B	QìB	\)B	ffB	p€B	záB	
-B	\B	B	£×B	®B	žRB	ÂB	ÌÍB	×
-B	áHB	ë
-B	õÃB
-  B
-
-=B
-{B
-
-žB
-(öB
-33B
-=qB
-G®B
-QìB
-\)B
-ffB
-p€B
-záB
-
-B
-  B
-
-=B
-{B
-
-žB
-(öB
-33B
-=qB
-G®B
-QìB
-\)B
-ffB
-p€B
-záB
-
-B
-\B
-B
-£×B
-®B
-žRB
-ÂB
-ÌÍB
-×
-B
-áHB
-ë
-B
-õÃB
-  B
-=B
-{B
-
-žB
-(öB
-33B
-=qB
-G®B
-QìB
-\)B
-ffB
-p€B
-záB
-
-B
-\B
-B
-£×B
-®B
-žRB
-ÂB
-ÌÍB
-×
-B
-áHB
-ë
-B
-õÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B\BB£×B®BžRBÂBÌÍB×
-BáHBë
-BõÃB  B
-=B{B
-žB(öB33B=qBG®BQìB\)BffBp€BzáB
-B
-  B
-
-=B
-{B
-
-žB
-(öB
-33B
-=qB
-G®B
-QìB
-\)B
-ffB
-p€B
-záB
-
-B
-\B
-B
-£×B
-®B
-žRB
-ÂB
-ÌÍB
-×
-B
-áHB
-ë
-B
-õÃB
-  B
-
-=B
-{B
-
-žB
-(öB
-33B
-=qB
-G®B
-QìB
-\)B
-ffB
-p€B
-záB
-
-B
-\B
-B
-£×B
-®B
-žRB
-ÂB
-ÌÍB
-×
-B
-áHB
-ë
-B
-õÃB
-  B
-
-=B
-{B
-
-žB
-(öB
-33B
-=qB
-G®B
-QìB
-\)B
-ffB
-p€B
-záB
-
-B   B 
-=B {B 
-žB (öB 33B =qB G®B QìB \)B ffB p€B záB 
-B \B B £×B ®B žRB ÂB ÌÍB ×
-B áHB ë
-B õÃB!  B!
-=B!{B!
-žB!(öB!33B!=qB!G®B!QìB!\)B!ffB!p€B!záB!
-B!\B!B!£×B!®B!žRB!ÂB!ÌÍB!×
-B!áHB!ë
-B!õÃB"  B"
-=B"{B"
-žB"(öB"33B"=qB"G®B"QìB"\)B"ffB"p€B"záB"
-B$  B$
-=B${B$
-žB$(öB$33B$=qB$G®B$QìB$\)B$ffB$p€B$záB$
-B$\B$B$£×B$®B$žRB$ÂB$ÌÍB$×
-B$áHB$ë
-B$õÃB%  B%
-=B%{B%
-žB%(öB%33B%=qB%G®B%QìB%\)B%ffB%p€B%záB%
-B%\B%B%£×B%®B%žRB%ÂB%ÌÍB%×
-B%áHB%ë
-B%õÃB&  B&
-=B&{B&
-žB&(öB&33B&=qB&G®B&QìB&\)B&ffB&p€B&záB&
-B(  B(
-=B({B(
-žB((öB(33B(=qB(G®B(QìB(\)B(ffB(p€B(záB(
-B(\B(B(£×B(®B(žRB(ÂB(ÌÍB(×
-B(áHB(ë
-B(õÃB)  B)
-=B){B)
-žB)(öB)33B)=qB)G®B)QìB)\)B)ffB)p€B)záB)
-B)\B)B)£×B)®B)žRB)ÂB)ÌÍB)×
-B)áHB)ë
-B)õÃB*  B*
-=B*{B*
-žB*(öB*33B*=qB*G®B*QìB*\)B*ffB*p€B*záB*
-B,  B,
-=B,{B,
-žB,(öB,33B,=qB,G®B,QìB,\)B,ffB,p€B,záB,
-B,\B,B,£×B,®B,žRB,ÂB,ÌÍB,×
-B,áHB,ë
-B,õÃB-  B-
-=B-{B-
-žB-(öB-33B-=qB-G®B-QìB-\)B-ffB-p€B-záB-
-B-\B-B-£×B-®B-žRB-ÂB-ÌÍB-×
-B-áHB-ë
-B-õÃB.  B.
-=B.{B.
-žB.(öB.33B.=qB.G®B.QìB.\)B.ffB.p€B.záB.
-B0  B0
-=B0{B0
-žB0(öB033B0=qB0G®B0QìB0\)B0ffB0p€B0záB0
-B0\B0B0£×B0®B0žRB0ÂB0ÌÍB0×
-B0áHB0ë
-B0õÃB1  B1
-=B1{B1
-žB1(öB133B1=qB1G®B1QìB1\)B1ffB1p€B1záB1
-B1\B1B1£×B1®B1žRB1ÂB1ÌÍB1×
-B1áHB1ë
-B1õÃB2  B2
-=B2{B2
-žB2(öB233B2=qB2G®B2QìB2\)B2ffB2p€B2záB2
-B4  B4
-=B4{B4
-žB4(öB433B4=qB4G®B4QìB4\)B4ffB4p€B4záB4
-B4\B4B4£×B4®B4žRB4ÂB4ÌÍB4×
-B4áHB4ë
-B4õÃB5  B5
-=B5{B5
-žB5(öB533B5=qB5G®B5QìB5\)B5ffB5p€B5záB5
-B5\B5B5£×B5®B5žRB5ÂB5ÌÍB5×
-B5áHB5ë
-B5õÃB6  B6
-=B6{B6
-žB6(öB633B6=qB6G®B6QìB6\)B6ffB6p€B6záB6
-B8  B8
-=B8{B8
-žB8(öB833B8=qB8G®B8QìB8\)B8ffB8p€B8záB8
-B8\B8B8£×B8®B8žRB8ÂB8ÌÍB8×
-B8áHB8ë
-B8õÃB9  B9
-=B9{B9
-žB9(öB933B9=qB9G®B9QìB9\)B9ffB9p€B9záB9
-B9\B9B9£×B9®B9žRB9ÂB9ÌÍB9×
-B9áHB9ë
-B9õÃB:  B:
-=B:{B:
-žB:(öB:33B:=qB:G®B:QìB:\)B:ffB:p€B:záB:
-B<  B<
-=B<{B<
-žB<(öB<33B<=qB<G®B<QìB<\)B<ffB<p€B<záB<
-B<\B<B<£×B<®B<žRB<ÂB<ÌÍB<×
-B<áHB<ë
-B<õÃB=  B=
-=B={B=
-žB=(öB=33B==qB=G®B=QìB=\)B=ffB=p€B=záB=
-B=\B=B=£×B=®B=žRB=ÂB=ÌÍB=×
-B=áHB=ë
-B=õÃB>  B>
-=B>{B>
-žB>(öB>33B>=qB>G®B>QìB>\)B>ffB>p€B>záB>
-B@  B@
-=B@{B@
-žB@(öB@33B@=qB@G®B@QìB@\)B@ffB@p€B@záB@
-B@\B@B@£×B@®B@žRB@ÂB@ÌÍB@×
-B@áHB@ë
-B@õÃBA  BA
-=BA{BA
-žBA(öBA33BA=qBAG®BAQìBA\)BAffBAp€BAzáBA
-BA\BABA£×BA®BAžRBAÂBAÌÍBA×
-BAáHBAë
-BAõÃBB  BB
-=BB{BB
-žBB(öBB33BB=qBBG®BBQìBB\)BBffBBp€BBzáBB
-BD  BD
-=BD{BD
-žBD(öBD33BD=qBDG®BDQìBD\)BDffBDp€BDzáBD
-BD\BDBD£×BD®BDžRBDÂBDÌÍBD×
-BDáHBDë
-BDõÃBE  BE
-=BE{BE
-žBE(öBE33BE=qBEG®BEQìBE\)BEffBEp€BEzáBE
-BE\BEBE£×BE®BEžRBEÂBEÌÍBE×
-BEáHBEë
-BEõÃBF  BF
-=BF{BF
-žBF(öBF33BF=qBFG®BFQìBF\)BFffBFp€BFzáBF
-BH  BH
-=BH{BH
-žBH(öBH33BH=qBHG®BHQìBH\)BHffBHp€BHzáBH
-BH\BHBH£×BH®BHžRBHÂBHÌÍBH×
-BHáHBHë
-BHõÃBI  BI
-=BI{BI
-žBI(öBI33BI=qBIG®BIQìBI\)BIffBIp€BIzáBI
-BI\BIBI£×BI®BIžRBIÂBIÌÍBI×
-BIáHBIë
-BIõÃBJ  BJ
-=BJ{BJ
-žBJ(öBJ33BJ=qBJG®BJQìBJ\)BJffBJp€BJzáBJ
-BL  BL
-=BL{BL
-žBL(öBL33BL=qBLG®BLQìBL\)BLffBLp€BLzáBL
-BL\BLBL£×BL®BLžRBLÂBLÌÍBL×
-BLáHBLë
-BLõÃBM  BM
-=BM{BM
-žBM(öBM33BM=qBMG®BMQìBM\)BMffBMp€BMzáBM
-BM\BMBM£×BM®BMžRBMÂBMÌÍBM×
-BMáHBMë
-BMõÃBN  BN
-=BN{BN
-žBN(öBN33BN=qBNG®BNQìBN\)BNffBNp€BNzáBN
-BP  BP
-=BP{BP
-žBP(öBP33BP=qBPG®BPQìBP\)BPffBPp€BPzáBP
-BP\BPBP£×BP®BPžRBPÂBPÌÍBP×
-BPáHBPë
-BPõÃBQ  BQ
-=BQ{BQ
-žBQ(öBQ33BQ=qBQG®BQQìBQ\)BQffBQp€BQzáBQ
-BQ\BQBQ£×BQ®BQžRBQÂBQÌÍBQ×
-BQáHBQë
-BQõÃBR  BR
-=BR{BR
-žBR(öBR33BR=qBRG®BRQìBR\)BRffBRp€BRzáBR
-BT  BT
-=BT{BT
-žBT(öBT33BT=qBTG®BTQìBT\)BTffBTp€BTzáBT
-BT\BTBT£×BT®BTžRBTÂBTÌÍBT×
-BTáHBTë
-BTõÃBU  BU
-=BU{BU
-žBU(öBU33BU=qBUG®BUQìBU\)BUffBUp€BUzáBU
-BU\BUBU£×BU®BUžRBUÂBUÌÍBU×
-BUáHBUë
-BUõÃBV  BV
-=BV{BV
-žBV(öBV33BV=qBVG®BVQìBV\)BVffBVp€BVzáBV
-BX  BX
-=BX{BX
-žBX(öBX33BX=qBXG®BXQìBX\)BXffBXp€BXzáBX
-BX\BXBX£×BX®BXžRBXÂBXÌÍBX×
-BXáHBXë
-BXõÃBY  BY
-=BY{BY
-žBY(öBY33BY=qBYG®BYQìBY\)BYffBYp€BYzáBY
-BY\BYBY£×BY®BYžRBYÂBYÌÍBY×
-BYáHBYë
-BYõÃBZ  BZ
-=BZ{BZ
-žBZ(öBZ33BZ=qBZG®BZQìBZ\)BZffBZp€BZzáBZ
-B\  B\
-=B\{B\
-žB\(öB\33B\=qB\G®B\QìB\\)B\ffB\p€B\záB\
-B\\B\B\£×B\®B\žRB\ÂB\ÌÍB\×
-B\áHB\ë
-B\õÃB]  B]
-=B]{B]
-žB](öB]33B]=qB]G®B]QìB]\)B]ffB]p€B]záB]
-B]\B]B]£×B]®B]žRB]ÂB]ÌÍB]×
-B]áHB]ë
-B]õÃB^  B^
-=B^{B^
-žB^(öB^33B^=qB^G®B^QìB^\)B^ffB^p€B^záB^
-B`  B`
-=B`{B`
-žB`(öB`33B`=qB`G®B`QìB`\)B`ffB`p€B`záB`
-B`\B`B`£×B`®B`žRB`ÂB`ÌÍB`×
-B`áHB`ë
-B`õÃBa  Ba
-=Ba{Ba
-žBa(öBa33Ba=qBaG®BaQìBa\)BaffBap€BazáBa
-Ba\BaBa£×Ba®BažRBaÂBaÌÍBa×
-BaáHBaë
-BaõÃBb  Bb
-=Bb{Bb
-žBb(öBb33Bb=qBbG®BbQìBb\)BbffBbp€BbzáBb
-Bd  Bd
-=Bd{Bd
-žBd(öBd33Bd=qBdG®BdQìBd\)BdffBdp€BdzáBd
-Bd\BdBd£×Bd®BdžRBdÂBdÌÍBd×
-BdáHBdë
-BdõÃBe  Be
-=Be{Be
-žBe(öBe33Be=qBeG®BeQìBe\)BeffBep€BezáBe
-Be\BeBe£×Be®BežRBeÂBeÌÍBe×
-BeáHBeë
-BeõÃBf  Bf
-=Bf{Bf
-žBf(öBf33Bf=qBfG®BfQìBf\)BfffBfp€BfzáBf
-Bh  Bh
-=Bh{Bh
-žBh(öBh33Bh=qBhG®BhQìBh\)BhffBhp€BhzáBh
-Bh\BhBh£×Bh®BhžRBhÂBhÌÍBh×
-BháHBhë
-BhõÃBi  Bi
-=Bi{Bi
-žBi(öBi33Bi=qBiG®BiQìBi\)BiffBip€BizáBi
-Bi\BiBi£×Bi®BižRBiÂBiÌÍBi×
-BiáHBië
-BiõÃBj  Bj
-=Bj{Bj
-žBj(öBj33Bj=qBjG®BjQìBj\)BjffBjp€BjzáBj
-Bl  Bl
-=Bl{Bl
-žBl(öBl33Bl=qBlG®BlQìBl\)BlffBlp€BlzáBl
-Bl\BlBl£×Bl®BlžRBlÂBlÌÍBl×
-BláHBlë
-BlõÃBm  Bm
-=Bm{Bm
-žBm(öBm33Bm=qBmG®BmQìBm\)BmffBmp€BmzáBm
-Bm\BmBm£×Bm®BmžRBmÂBmÌÍBm×
-BmáHBmë
-BmõÃBn  Bn
-=Bn{Bn
-žBn(öBn33Bn=qBnG®BnQìBn\)BnffBnp€BnzáBn
-Bp  Bp
-=Bp{Bp
-žBp(öBp33Bp=qBpG®BpQìBp\)BpffBpp€BpzáBp
-Bp\BpBp£×Bp®BpžRBpÂBpÌÍBp×
-BpáHBpë
-BpõÃBq  Bq
-=Bq{Bq
-žBq(öBq33Bq=qBqG®BqQìBq\)BqffBqp€BqzáBq
-Bq\BqBq£×Bq®BqžRBqÂBqÌÍBq×
-BqáHBqë
-BqõÃBr  Br
-=Br{Br
-žBr(öBr33Br=qBrG®BrQìBr\)BrffBrp€BrzáBr
-Bt  Bt
-=Bt{Bt
-žBt(öBt33Bt=qBtG®BtQìBt\)BtffBtp€BtzáBt
-Bt\BtBt£×Bt®BtžRBtÂBtÌÍBt×
-BtáHBtë
-BtõÃBu  Bu
-=Bu{Bu
-žBu(öBu33Bu=qBuG®BuQìBu\)BuffBup€BuzáBu
-Bu\BuBu£×Bu®BužRBuÂBuÌÍBu×
-BuáHBuë
-BuõÃBv  Bv
-=Bv{Bv
-žBv(öBv33Bv=qBvG®BvQìBv\)BvffBvp€BvzáBv
-Bx  Bx
-=Bx{Bx
-žBx(öBx33Bx=qBxG®BxQìBx\)BxffBxp€BxzáBx
-Bx\BxBx£×Bx®BxžRBxÂBxÌÍBx×
-BxáHBxë
-BxõÃBy  By
-=By{By
-žBy(öBy33By=qByG®ByQìBy\)ByffByp€ByzáBy
-By\ByBy£×By®ByžRByÂByÌÍBy×
-ByáHByë
-ByõÃBz  Bz
-=Bz{Bz
-žBz(öBz33Bz=qBzG®BzQìBz\)BzffBzp€BzzáBz
-B|  B|
-=B|{B|
-žB|(öB|33B|=qB|G®B|QìB|\)B|ffB|p€B|záB|
-B|\B|B|£×B|®B|žRB|ÂB|ÌÍB|×
-B|áHB|ë
-B|õÃB}  B}
-=B}{B}
-žB}(öB}33B}=qB}G®B}QìB}\)B}ffB}p€B}záB}
-B}\B}B}£×B}®B}žRB}ÂB}ÌÍB}×
-B}áHB}ë
-B}õÃB~  B~
-=B~{B~
-žB~(öB~33B~=qB~G®B~QìB~\)B~ffB~p€B~záB~
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  =
-(Ð9±¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?¹V:?=œ =(a<m<{¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @7-@	ñâ?ºHþ?A\r=bn|<êxs¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @Ø@dt\@7Šù@
-Ù?Œg?DûC=-Ë=/)S¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @¶<@{b@±@e\@8@
-Á;?œç°?HÔ=«"U=ig¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ãZx@ÌŒ@¶Uí@ï<@@fCµ@9vR@
-šï?¿·?L8Š=Èâ=Á¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AMÚ@ùýÚ@ã)@Í0x@¶ÉÇ@ c@üf@g+i@:^@
-£?Á?O×x=åm=®xL¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A
-îxAAl3@úqµ@ä
-@Í€S@·=¢@ Öñ@p@@h
-@;Eº@xX?ÃUê?SvJ>ý=ËnÙ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A5A*@)A
-ÑAÙxAŠ @úå@ä~Þ@Î-@·±|@¡JË@ä@húÒ@<-o@`
-?Å%S?W>~C=èee¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AL/°A@àÃA5­kA*zAFºAaAà	@ûYa@äò°@Îÿ@ž%N@¡Ÿ@Wì@iâv@=@G°?Æô?Z³¬>
-ø>­÷¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AbÐNAWaALN	AA°A5çXA*³ÿA§AMNA	ö@ûÍ;@åf@ÎÿÙ@ž(@¢2w@ËÆ@jÊ*@=üÇ@/e?ÈÄ?^R~>,sÏ>)>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AypìAn!ÿAbî§AW»NALöAATA6!EA*íìAºA<A	Sã@üA@åÚd@Ïs³@¹
-@¢ŠQ@?¡@k±ß@>ä|@?Ên?añO>:ï>€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÆAaOAyEAn[ìAc(AWõ;ALÁãAAA6[2A+'ÚAôAÁ(A	Ð@üŽï@æN>@Ïç@¹Ý@£,@³z@l@?Ì1@þÎ?ÌbÖ?e!>Ij[>.Ì¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AYA±AðA~DAyÉ.AnÕAcb}AX/$ALûÌAAÈtA6A+aÂA .jAûA	Ç¹@ý(Â@æÂ@Ð[`@¹ô®@£þ@'M@m8@@³Õ@æs?Î2?i.²>Wä£><¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A©dAíAh@AÎA4çA:AzAnÏÂAcjAXiAM5¹AB`A6ÏA+°A hWA4ÿA
-Š@ý@ç5ê@ÐÏ:@ºh@€Ø@'@nhì@A@Î'?Ð?lÍ
->f_ê>KZ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A©ùŽA€R=AžA
-äA
-7AëAQÞAž1Az=Ao	°AcÖWAX¢þAMoŠAB<NA7õA+ÕA ¢DAnëA
-;@þv@ç©Å@ÑC@ºÜc@€u²@@oP¡@B>@µÛ?ÑÐñ?plW>tÛ1>Y¡¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AµJA¯¢AªàA€o4AÕA;ÚA¢.AAnÓAÕ'AzvõAoCAdDAXÜìAM©ABv;A7BâA,A Ü1AšÙA
-u@þP@è
-@Ñ¶î@»P=@€é@Û@p8U@Cjó@?Ó Z?t
-(>«<>h
-è¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÀTAºòÝAµY0A¯¿Aª%×A€*Aò~AXÑA¿#A%wAÊAò
-Az°âAo}AdJ1AYÙAMãAB°'A7|ÏA,IwA!AâÆA
-¯m@þø*@èy@Ò*È@»Ä@¥]f@ö¶@q 	@DR§@
-D?ÕoÃ?w©ú>èà>v/¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AËê¢AÆC+AÀ©~A»ÒAµv%A¯ÜxAªBÌA€©AqAuÅAÜABlAš¿AAzêËAo·sAdAYPÁAN
-iABêA7¶¹A,`A!PA
-¯A
-éV@ÿkü@éK@Ò@Œ7ê@¥Ñ8@j@r®@E:K@lè?×?
-?{H>&>»¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A×:òAÑ{AËùÎAÆ`"AÀÆuA»,ÈAµ
-A¯ùoAª_ÁA€ÆA,hAŒAùA_bAÅ¶A,	A{$žAoñ_AdŸAY¯ANWWAC#þA7ð¥A,œMA!ôAVA
-#D@ÿßÖ@éy&@Ót@Œ«Ä@ŠE@Þb@rïb@F" @T?Ùt?~ç]>c§>¿_¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AâBAÜãËA×J
-AÑ°rAÌÅAÆ}AÀãlA»I¿Aµ°A°eAª|žA€ã
-AI_A¯²AA|YAâ¬AI A{^ŠAp+MAd÷õAYÄANCAC]ëA8*A,÷:A!ÃâAA
-]0A )Ø@éí @ÓO@œ@Šží@R<@s×@G	Ž@<Q?ÚÝÝ?C>¡K>ý¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AíÛAè4AânAÝ ÂA×gAÑÍhAÌ3ŒAÆAÁ aA»fµAµÍA°3\Aª¯A¥ AfVAÌ©A2üAPAÿ£AeöA{Ape:Ae1áAYþANË0ACØA8dA-1'A!ýÎAÊvA
-
-A cÆ@ê`Ú@Óú)@œx@§,Ç@Æ@tŸÌ@Gñh@$?Ü­F?>¥Þî>:Š¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aù+âAókAíêŸAèQAâ·eAÝ
-žA×
-AÑê_AÌP±AÆ·AÁ
-XA»¬AµéÿA°PRAª¶ŠA¥
-ùALAé AOóA¶FA
-AìA{ÒAp'AekÎAZ8vAO
-ACÑÅA8lA-kA"7ŒAdA
-Ñ
-A ²@êÔŽ@Ôn@ŸR@§ ¢@9ñ@uŠ@HÙ
-@
-
-º?Þ|¯?áé>­
->xJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B>AþÔ¹Aù;
-Aó¡`Aî³AènAâÔZAÝ:­A× ÿAÒSAÌmŠAÆÓúAÁ:MA»  A¶ôA°mGAªÓA¥9îA AAAlçAÓ:A9AáA|
-hApÙAe¥žAZr_AO?AD
-®A8ØVA-€þA"q¥A>LA
-
-ôA ×@ëH@ÔáÖ@Ÿ{%@št@­Ã@v$@IÀÁ@
-ó_?àK÷?±2>ŽYµ>Šµí¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bæ@BBE®Aþñ¯AùXAóŸVAî$ªAèýAâñOAÝW£A×œöAÒ$JAÌAÆððAÁWDA»œA¶#êA°>AªðA¥VäAœ7A#AÝAð1AVAŒØA|FVAqýAeß€AZ¬LAOxôADEA9CA-ÞêA"«Ax9A
-DáA@ëŒa@ÕU°@Ÿîÿ@šN@!@wuÙ@Jšv@
-Û?â`?>»Y>­ó¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-hB
-º¬BíÖB! BT)AÿŠAùtúAóÛMAîAAè§óAãFAÝtA×ÚíAÒA@AÌ§AÇ
-çAÁt:A»ÚA¶@áA°§4A«
-A¥sÚAÚ-A@AŠÔA
-(As{AÙÎA|CAqLêAfAZæ:AO²áADA9L0A.×A"åA²'A
-~ÏAKv@ì0;@ÕÉ@¿bÙ@šü)@x@x]@K*@
-ÂÇ?ãêÊ?P>ÂÔü>µ15¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B6BbÔB
-þB
-É(BüQB/{Bb¥Aÿ+AùïAóøCAî^AèÄêAã+=AÝA×÷äAÒ^7AÌÄAÇ*ÞAÁ1A»÷A¶]×A°Ä*A«*}A¥ÑA÷$A]xAÃËA*
-ArAöÅA|º0AqØAfSA[ &AOìÎAD¹uA9
-A.RÅA#mAìA
-žŒA
-c@ì€@Ö=e@¿ÖŽ@©p@	R@yEB@Lwß@ª|?åº2?m>Ê¡>ŒnÙ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BÞžB
-üB>&BqPB
-€yB
-×£B
-ÍB=öBq AÿHAù®æAô:Aî{AèáàAãH4AÝ®AØÚAÒ{.AÌáAÇGÔAÁ®'AŒzA¶zÎA°á!A«GtA¥­ÈA AznAàÂAGA­hA»A|ô
-AqÀÄAflA[ZAP&»ADócA9À
-A.²A#YZA&A
-ò©A¿P@íð@Ö±?@ÀJ@©ãÝ@},@z,ö@M_@ 1?ç?îÖ>ÑPD>Ã¬|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-ßB³#BæMBwBL BÊB
-²ôB
-æ
-BGBLqBAÿeAùËÛAô2.AîAèþÕAãe(AÝË|AØ1ÏAÒ"AÌþuAÇdÈAÁË
-AŒ1oA¶ÂA°þA«diA¥ÊŒA 1AcAý¶Ad	AÊ\A0°A}.Aqú­AfÇUA[ýAP`¥AE-LA9ùôA.ÆA#CA_êA
-,Aù:@íÂ@×%@ÀŸ`@ªW¯@ðþ@{@NG8@!yÕ?éXå?Ÿ>Øh>Êê ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B$/B![KB
-uBÁBôÈB'òB[
-BEB
-ÁoB
-ôB'ÂBZìBAÿAùèÒAôO%AîµxAéÌAãAÝèrAØNÅAÒµAÍlAÇ¿AÁèAŒNfA¶Ž¹A±
-A«`A¥ç³A NAŽYA¬A AçSAMŠA}góAr4AgCA[ÍêAPAEg9A:3áA/ A#Í0AØA
-fA3&@íÿ@×ë@Á2:@ªË@dÙ@{üO@O.ì@"a?ë(M?>ßË
->Ò'Ä¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B)×/B'sB$6B!iÇB
-ðBÐBDB6mBiBÁB
-ÏêB
-B6>BigBAÿtAúÈAôl
-AîÒoAé8ÂAãAÞhAØkŒAÒÒAÍ8bAÇ¶AÂ	AŒk\A¶Ñ°A±8A«VAŠ©A jüAÑPA7£AöAJAjA}¡áArnAg;0A\×APÔAE¡&A:mÎA/:vA$
-AÓÄA
- lAm@îsv@Ø
-Å@ÁŠ@«?c@Ø³@|ä@P @#I>?ì÷·?\ñ>ç¯>Ùeh¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B/WB,«B)ÞÅB'ïB$EB!xBB
-«lBÞB¿BDéBxB«<B
-ÞfB
-BD¹BwâB«
-AÿŒkAú"¿AôAîïeAéUžAãŒ
-AÞ"_AØ²AÒïAÍUYAÇ»¬AÂ" AŒSA¶îŠA±TùA«»LAŠ! A óAîFATAºíA!@AA}ÛÎAršuAgu
-A\AÄAQlAEÛA:§»A/tbA$A
-A
-²A
-ÚYA§@îçQ@Ø@Âï@«³>@L@}Ëž@PþV@$0ó?îÇ ?,Z>îFT>à£
-¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B5'B2SÃB/íB,ºB)í@B' jB$SB!œB
-¹çBíB :BSdBB¹·B
-ìáB
- 
-BS4B^B¹AÿÙbAú?µAôŠAï
-\Aér¯AãÙAÞ?VAØ¥©AÓ
-üAÍrPAÇØ£AÂ>öAŒ¥IA·
-A±qðA«ØCAŠ>A €êA
-=AqA×äA>7A€A~»ArâbAg¯
-A\{²AQHYAF A:ášA/®PA$z÷AGAFAàî@ï[+@Øôz@ÂÉ@¬'@Àg@~³l@Qæ
-@%§?ð?ûÄ>õù>çà°¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B:ÏŠB7ûêB5/B2b>B/gB,ÈB)û»B'.äB$bB!8B
-ÈaBûB.µBaÞBBÈ1B
-û[B
-.
-Ba®BØBÈAÿöVAú\ªAôÂýAï)PAé€Aãõ÷AÞ\JAØÂAÓ(ñAÍDAÇõAÂ[êAŒÂ>A·(A±äA«õ8AŠ[A ÁÞA(2A
-AôØA[,AÁ~A~O£As
-LAgèóA\µAQBAFNêA;A/è9A$ŽàAAN/A×@ïÎý@ÙhL@Ã@¬ê@49@@RÍ¯@& L?òeÒ?Ë
->üÁ
->ï
-U¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B@wÎB=€B:×<B8
-fB5=B2p¹B/£ãB,×
-B*
-6B'=`B$pB!£³B
-ÖÝB
-
-B=0BpYB£BÖ­B	ÖB
-= Bp*B£SBÖ}B 	§Aúy AôßôAïFGAé¬AäîAÞyAAØßAÓEçAÍ¬:AÈAÂxáAŒß4A·EA±«ÛA¬.AŠxA ÞÕAE(A«|AÎAx"AÞuA~AsV8Ah"àA\ïAQŒ/AF×A;U~A0"&A$îÍA»uA
-ATÄ@ðB×@ÙÜ&@Ãuu@­Ä@š@Ac@Sµc@&è ?ô5;?u?ÿ`>ö[ø¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BFöBCL:B@dB=²B:å·B8áB5L
-B24B/²^B,åB*±B'KÛB$B!².B
-åXB
-BK«B~ÕB±þBå(BRB
-K{B~¥B±ÏBäøB !AúAôüêAïc>AéÉAä/äAÞ7AØüAÓbÞAÍÉ1AÈ/AÂØAŒü+A·b~A±ÈÒA¬/%AŠxA ûÌAb
-AÈrA.ÅAAûlA~Ã~As&Ah\ÍA])uAQö
-AFÂÄA;kA0\A%(»AõbAÂ	A±@ð¶±@ÚP @ÃéO@­@î@µ=@T@'Ïµ?ö€?iÞ?2>ý¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BKÈ
-BHôbBF'BCZ¶B@ßB=Á	B:ô3B8'\B5ZB2°B/ÀÙB,ôB*'-B'ZVB$B!À©B
-óÓB
-&ýBZ&BPBÀzBó£B&ÍB
-Y÷B BÀIBósB &Aú³AõáAï4AéæAäLÚAÞ³.AÙAÓÔAÍæ(AÈL{AÂ²ÎAœ"A·uA±åÈA¬L
-AŠ²nA¡ÂAAåhAKŒA²A
-bA~ýkAsÊAhºA]cbAR0	AFü±A;ÉYA0 A%b§A/OAû÷AÈ@ñ*@ÚÃÛ@Ä]*@­öy@È@)@UÌ@(·i?÷Ô
-?9G?	=?k ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BQpFBNBKÏŽBIÞBF6BCi1B@[B=ÏB;®B85ØB5iB2+B/ÏUB-~B*5šB'hÑB$ûB!Ï%BNB
-5xBh¢BËBÎõBB5HB
-hqBBÎÅBîB 5AúÐAõ6×Aï*Aê~AäiÑAÞÐ$AÙ6xAÓËAÎ
-AÈirAÂÏÅAœ6A·lA²ŸA¬iAŠÏeA¡5žA
-A_Ah²AÏA
-5YA7XAt AhÐ§A]OARi÷AG6A<EA0ÏíA%Ai<A5äA@ñf@Û7µ@ÄÑ@®jS@¢@ò@Vl@)
-?ù£v? °?
-ÛÖ?
-r¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BWmBTD±BQwÛBN«BKÞ.BIXBFDBCw«B@ªÕB=ÝÿB;(B8DRB5w|B2ª¥B/ÝÏB-øB*D"B'wLB$ªuB!ÝBÉB
-CòBw
-BªFBÝoBBCÂB
-vìBªBÝ?BiB CAúíxAõSÌAïºAê rAäÆAÞíAÙSlAÓ¹ÀAÎ AÈfAÂìºAœS
-A·¹`A²³A¬AŠìZA¡R­A¹ ATA
-§AëúA
-RNAqAAt=éAi
-A]×8AR£ßAGpA<=/A1	ÖA%Ö~A£%AoÍA<t@ò8@Û«@ÅDÖ@®Þ%@wt@Ä@WT%@*Â?ûrŸ?¡×ù?zg?	©D¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B\ÀBYìÙBW BTS-BQVBN¹BKìªBIÓBFRýBC'B@¹PB=ìzB;€B8RÍB5
-÷B2¹ B/ìJB-tB*RB'
-ÇB$žñB!ìBDB
-RnB
-BžÀBëêBBR=B
-
-gBžBë»B
-åB RAû
-oAõpÂAï×Aê=iAä£ŒAß
-AÙpcAÓÖ¶AÎ=
-AÈ£\AÃ	°AœpA·ÖVA²<ªA¬¢ýA§	PA¡o€AÕ÷A<JA¢AñA
-oDA«.AtwÖAiD}A^%ARÝÍAGªtA<w
-A1CÃA&kAÝA©ºAvb@ò@Üa@Åž°@¯R @ëO@@X;Ù@+nv?ýB'?£§b?:?
-H¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BbhœB_B\È+BYûUBW.~BTašBQÒBNÇûBKû%BI.OBFaxBC¢B@ÇÌB=úõB;.B8aHB5rB2ÇB/úÅB--ïB*aB'BB$ÇlB!úB-¿B
-`èBBÇ<BúeB-B`¹B
-ãBÇ
-Bú6B-`B `Aû'fAõ¹Aïô
-AêZ`AäÀ³Aß'AÙZAÓó¬AÎZ AÈÀSAÃ&ŠAœúA·óMA²Y A¬¿ôA§&GA¡AòîAYAA¿A%çA
-:AåAt±ÃAi~kA^KASºAGäaA<±	A1}°A&JXA Aã§A°N@òùì@Ü<@Æ,@¯ÅÚ@_)@øx@Y#@,V+?ÿ?¥vË?ž
-?æè¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BhåBe=)BbpSB_£}B\ÖŠBZ	ÐBW<úBTp#BQ£MBNÖwBL	 BI<ÊBFoôBC£
-B@ÖGB>	pB;<B8oÄB5¢íB2ÖB0	AB-<jB*oB'¢ŸB$ÕçB"	B<:B
-odB¢BÕ·BáB<
-Bo5B
-¢^BÕB²B;ÛB oAûD\Aõª°AðAêwVAäÝªAßCüAÙªPAÔ£AÎvöAÈÝJAÃCAœ©ðAžDA²vA¬ÜêA§C>A¡©AäAv7AÜABÞA
-©1AAtë°AižXA^ÿASQ§AH
-NA<êöA1·A&EAPìA
-Aê<@ómÇ@Ý@Æ e@°9Ž@Ó@lR@Z
-B@-=ß@ p|?§F3?VÝ?
-¹¿  ¿  ¿  ¿  ¿  ¿  Bm¹
-BjåQBh{BeK¥Bb~ÎB_±øB\å"BZKBWKuBT~BQ±ÈBNäòBL
-BIKEBF~oBC±B@äÂB>ìB;KB8~?B5±iB2äB0ŒB-JæB*~B'±8B$äbB"BJµB
-}ßB±	Bä3B]BJB}°B
-°ÚBäB,BJVB }AûaSAõÇŠAð-úAêLAäú Aß`óAÙÇFAÔ-AÎíAÈú@AÃ`AœÆçAž-:A²A¬ùáA§`4A¡ÆA,ÚA.AùA_ÔA
-Æ(A,{Au%AiòEA^ŸìASAHX<A=$ãA1ñA&Ÿ2AÚAWA$)@óá¡@Ýzð@Ç?@°­@FÞ@à-@Zòö@.%@X1?©?
-õ¯?$¿  ¿  ¿  ¿  Bsa4BpxBmÀ¢BjóÌBh&õBeZBbIB_ÀrB\óBZ&ÆBWYïBTBQÀCBNólBL&BIY¿BFéBCÀB@ó<B>&fB;YB8¹B5¿ãB2ó
-B0&6B-Y_B*B'¿³B$òÜB"&BY0B
-ZB¿Bò­B%×BYB*B
-¿SBò}B%§BXÐB úAû~HAõäAðJîAê±AAåAß}èAÙä;AÔJAÎ°âAÉ5AÃ}AœãÜAžJ/A²°A­ÕA§}(A¡ã|AIÏA°"AvA|ÉA
-ã
-AIpAu_Aj,.A^øÖASÅ}AH$A=^ÌA2+tA&øAÄÃAkA^@ôUs@ÝîÂ@Ç@±!a@º°@Sÿ@[Ú@/
-8@?Õ?ªäæ?"B?Ã^¿  ¿  By	\Bv5 BshÊBpôBmÏ
-BkGBh5qBehBbÄB_ÎîB]BZ5ABWhkBTBQÎŸBOçBL5BIh;BFdBCÎBAžB>4áB;h
-B85B5Î^B3B04±B-gÛB*B'Î.B%XB"4Bg¬B
-ÕBÍÿB)B4RBg{B¥B
-ÍÏB	 øB4"BgLB uAû>AöAðgäAêÎ8Aå4AßÞAÚ2AÔg
-AÎÍØAÉ4,AÃAŸ ÒAžg%A²ÍxA­3ÌA§A¢ rAfÆAÍA3lAÀA AffAutAjfA_2ÂASÿjAHÌA=¹A2eaA'2	Aþ°AËWAÿ@ôÉN@Þb@Çûì@±;@.@ÇÙ@\ÂO@/ôí@'?¬ŽO?&3?b/B|  B{ÝÈByòBvD
-BswEBpªoBmÝBkÂBhCìBewBbª?B_ÝiB]BZCŒBWvæBTªBQÝ9BOcBLCBIv¶BF©àBCÝ	BA3B>C]B;vB8©¯B5ÜÙB3B0C,B-vVB*©B'ÜªB%ÔB"BýBv'B
-©QBÜzB£BBÍBu÷B© B
-ÜJB	tBBBuÇB šñAûž4Aö
-AðÛAêë.AåQAß·ÕAÚ
-(AÔ|AÎêÏAÉQ"AÃ·uAŸ
-ÈAž
-A²êoA­PÂA§·A¢
-iAŒAêAPcA¶¶A
-	A\AuÓ`Aj A_l°AT9WAIÿA=Ò§A2NA'kõA
-8AEAÑí@õ=(@ÞÖw@ÈoÆ@²	@¢e@
-;³@]ª@0Ü¢@??®ž?)Ñå¿  B|B{ìDBymBvRBs
-ÁBpžêBmìBk>BhRgBe
-Bbž»B_ëäB]BZR7BW
-aBTžBQëŽBO
-ÞBLRBI
-1BFž[BCë
-BA
-®B>Q×B;
-B8ž+B5ëTB3
-~B0QšB-ÒB*·üB'ë%B%
-OB"QyB¢B
-·ËBêõB
-BQHBrB·B
-êÅB	
-ïBQBBB ·lAûÕ+Aö;~Að¡ÒAë%AånxAßÔÌAÚ;AÔ¡rAÏÅAÉnAÃÔlAŸ:¿Až¡A³fA­m¹A§Ô
-A¢:`A ³AAmYAÓ¬A: A SAv
-NAjÙõA_ŠATsEAI?ìA>
-A2Ù;A'¥ãA
-rA?2A
-Ù@õ±@ßJQ@Èã¡@²|ð@>@
-¯@^¹@1ÄV@öó?¯vw¿  ¿  B|B{ú¿By-éBvaBs<BpÇfBmúBk-¹Bh`ãBe
-BbÇ6B_ú_B]-BZ`³BWÜBTÇBQú0BO-YBL`BI­BFÆÖBCùÿBA-)B>`SB;|B8ÆŠB5ùÐB3,úB0`$B-MB*ÆwB'ù¡B%,ÊB"_óB
-B
-ÆGBùpB,B_ÄBíBÆB
-ùAB	,jB_BŸB ÅçAûò"AöXuAðŸÈAë%
-AåoAßñÂAÚXAÔŸhAÏ$ŒAÉAÃñbAŸW¶AžŸ	A³$\A­°A§ñA¢WVAœ©A#üAPAð£AVöAœJAvG;AkãA_àAT­1AIyÙA>FA3)A'ßÐA
-¬wAyAEÇ@ö$Ý@ßŸ,@ÉWz@²ðÊ@@#h@_yn@2=¶¿  ¿  ¿  ¿  B|$B|	:By<dBvoBs¢·BpÕáBn	
-Bk<4Bho^Be¢BbÕ±B`ÛB]<BZo.BW¢XBTÕBR«BO;ÕBLnþBI¢'BFÕQBD{BA;€B>nÎB;¡øB8Õ"B6LB3;uB0nB-¡ÉB*ÔòB(B%;EB"noB¡B
-ÔÂBìB;Bn?B¡iBÔB
-ŒB	:æBnB¡9B ÔbAüAöulAðÛ¿AëBAåšeAàžAÚu
-AÔÛ_AÏA²AÉšAÄYAŸt¬AžÛ A³ASA­§ŠAš
-ùA¢tLAÚ A@óA§FA
-AsíAÚ@Av(AkMÏA`wATçAI³ÇA>nA3MA(œA
-æeA³
-AŽ@ö·@à2@ÉËU@³d€@ýó@`¿  ¿  ¿  ¿  ¿  ¿  B|3B|¶ByJßBv~	Bs±3Bpä\BnBkJ¯Bh}ÙBe±Bbä,B`VB]JBZ}©BW°ÓBTãýBR&BOJOBL}yBI°£BFãÌBDöBAJ B>}JB;°tB8ãB6ÇB3IñB0}B-°CB*ãmB(B%IÀB"|êB°B
-ã=BgBIB|ºB¯äBãB
-7B	IaB|B¯ŽB âÞAü,AöbAðøµAë_AåÅ\Aà+¯AÚAÔøVAÏ^©AÉÄüAÄ+PAŸ£Až÷öA³^IA­ÄAš*ðA¢CA÷A]êAÄ=A*AäA÷7Av»AkœA`TeAU!
-AIí³A>º[A3A(SªA
- RAìúA¹¡@÷
-@à¥à@Ê?/@³¡T¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|AB|&/ByYYBvBs¿¬BpòÕBn%ÿBkY)BhRBe¿|BbòŠB`%ÏB]XùBZ#BW¿LBTòuBR%BOXÉBLòBI¿
-BFòFBD%pBAXB>ÃB;ŸíB8òB6%@B3XiB0B-ŸœB*ñæB(%B%X:B"cBŸB
-ñ·B$àBX
-B4BŸ]BñB
-$°B	WÚBBŸ-B ñWAüIAö¯TAñšAë{ûAåâNAàH¢AÚ®õAÕHAÏ{AÉáïAÄHBAŸ®A¹èA³{<A­áAšGâA¢®6AAzÜAá0AGA­×A)AvôûAkÁ¢A`IAUZñAJ'A>ô@A3ÀèA(A
-Z7A&ÞAó@÷[@àâ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|OÿB|4ªBygÔBvýBsÎ'BqQBn4zBkg€BhÎBeÍ÷Bc!B`4KB]gtBZBWÍÇBU ñBR4BOgDBLnBIÍBG ÂBD3ëBAgB>?B;ÍhB9 B63»B3fåB0B-Í8B+ bB(3B%fµB"ßBÍB
- 2B3\Bf
-B¯BÌØB B
-3,B	fUBBÌšB ÿÒAüeøAöÌKAñ2AëòAåÿEAàeAÚËìAÕ2?AÏAÉþåAÄe8AŸËA¹1ßA³2A­þAšdÙA¢Ë,A1AÓAþ'AdyAÊÌA1 Aw.çAkûA`È7AUÞAJaA?..A3úÕA(Ç|A
-$A`ÌAÞ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|^zB|C%ByvOBv©yBsÜ¢BqÌBnBöBkvBh©IBeÜsBcB`BÅB]uïBZ©BWÜBBUlBRBBOuÀBLšêBIÜBG=BDBgBAuB>š¹B;ÛãB9
-B6B6B3u`B0šB-Û³B+ÝB(BB%u0B"šZBÛB
-­BA×Bu Bš*BÛTB}B
-A§B	tÐB§úBÛ$BMAüîAöéBAñOAëµèAæ
-<AàAÚèâAÕO5AÏµAÊÜAÄ/AŸèA¹NÖA³µ)A®|AšÐA¢è#ANwAŽÉA
-ApAçÃANAwhÕAl5|Aa$AUÎÌAJsA?hA44ÂA)jA
-²|¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|lõB|Q¡ByÊBv·ôBsë
-Bq
-GBnQqBkBh·ÄBeêíBc
-B`QAB]jBZ·BWêŸBU
-èBRQBO;BL·eBIêBG
-žBDPáBA
-B>·5B;ê^B9
-B6P²B3ÛB0·B-ê/B+
-XB(PB%¬B"¶ÕBéÿB
-
-(BPRB|B¶¥BéÏB
-øB
-P"B	LB¶uBéB
-ÉAüåA÷8AñlAëÒßAæ92Aà
-AÛØAÕl,AÏÒAÊ8ÒAÄ&A¿yA¹kÌA³Ò A®8sAšÇA£AklAÑÀA8AfAºAk
-Aw¢ÂAlojAa<AVžAJÕ`A?¢A4S¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|{pB|`
-ByFBvÆoBsùBq,ÃBn_ìBkBhÆ?BeùiBc,B`_ŒB]æBZÆBWù:BU,cBR_BO·BLÅàBIù	BG,3BD_]BAB>Å°B;øÚB9,B6_-B3WB0ÅB-øªB++ÔB(^ýB%'B"ÅPBøzB
-+€B^ÍB÷BÅ BøJB+tB
-^B	ÇBÄñBøB+DAüŒÜA÷#/AñAëïÕAæV(AàŒ|AÛ"ÏAÕ"AÏïvAÊUÉAÄŒ
-A¿"pA¹ÃA³ïA®UiAš»ŒA£"AcAî¶AU
-A»]A!°AAwÜ¯Al©VAauþAVBŠAJóž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ìB|nBy¡ÁBvÔëBtBq;=BnngBk¡BhÔºBfäBc;B`n8B]¡bBZÔBXµBU:ßBRnBO¡1BLÔ[BJ
-BG:®BDmØBA¡B>Ô+B<UB9:B6mšB3 ÒB0ÓüB.%B+:OB(mxB% ¢B"ÓÌB õB
-:BmHB rBÓBÅB9ïB
-mB	 BBÓlBB9¿AüÙÒA÷@%AñŠxAì
-ÌAæsAàÙrAÛ?ÆAÕŠAÐ
-lAÊrÀAÄÙA¿?gA¹¥¹AŽ
-
-A®r`AšØ³A£?A¥ZA
-­Ar AØTA>§A€úAxAlãDAaV¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|gB|}By°<BvãeBtBqI¹Bn|âBk°
-Bhã6Bf`BcIB`|³B]¯ÝBZãBX0BUIYBR|BO¯­BLâÖBJ BGI*BD|SBA¯}B>â§B<ÐB9HúB6|$B3¯MB0âwB. B+HÊB({ôB%¯
-B"âGB pB
-HB{ÄB®íBâBABHjB
-{B	®ŸBáçBBH;AüöÈA÷]
-AñÃoAì)ÂAæAàöiAÛ\ŒAÕÃAÐ)cAÊ·AÄö	A¿\\A¹Â°AŽ)A®VAšõªA£[ýAÂPA(€A÷AõKA[AÁñAx4ô¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ŠâB|ByŸ·BvñáBt%
-BqX4Bn^BkŸBhñ²Bf$ÛBcXB`/B]ŸXBZñBX$«BUWÕBRþBOŸ(BLñRBJ${BGW¥BDÏBAœøB>ñ"B<$LB9WuB6B3œÈB0ðòB.$
-B+WEB(oB%œB"ðÂB #ìB
-WB?BœiBðB#ŒBVæB
-B	œ9BðcB#BV¶Aý¿A÷zAñàfAìF¹Aæ­
-Aá`AÛy³AÕàAÐFYAÊ¬¬AÅ A¿ySA¹ßŠAŽEúA®¬MA© A£xôAßGAEA«îA@AjÉ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|µ]B|	ByÍ2Bw \Bt3Bqf°BnÚBkÍBi -Bf3WBcfB`©B]ÌÓBZÿýBX3&BUfPBRzBOÌ£BLÿÍBJ2÷BGf BDJBAÌtB>ÿB<2ÇB9eðB6B3ÌDB0ÿmB.2B+eÀB(êB%ÌB"ÿ=B 2gB
-eBºBËäBÿB27BeaB
-B	ËŽBþÞB2Be1Aý0¶A÷	Añý\Aìc°AæÊAá0WAÛ©AÕüüAÐcPAÊÉ£AÅ/öA¿JA¹üAŽbðA®ÉDA©/A£ëAü>AbA»¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÃØB|šByÛ®BwØBtBBqu+BnšUBkÛBišBfAÑBctûB`š%B]ÛNB[xBXA¢BUtËBR§õBOÛBMHBJArBGtBD§ÅBAÚïB?B<ABB9tlB6§B3Ú¿B1
-èB.AB+t<B(§eB%ÚB#
-¹B @âB
-t
-B§6BÚ_B
-B@³BsÜB
-§B	Ú0B
-YB@Bs¬AýM¬A÷Ž AòSAì§AææùAáMLAÛ³ AÖóAÐFAÊæAÅLíA¿³@AºAŽçA®æ;A©LA£²àA
-i¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÒTB|¶þByê(Bw
-QBtP{Bq¥Bn¶ÎBké÷Bi
-!BfPKBctB`¶B]éÈB[
-ñBXPBUEBR¶nBOéBM
-ÂBJOëBGBD¶>BAéhB?
-B<O»B9åB6¶B3é8B1
-bB.OB+µB(µßB%éB#
-2B O\B
-
-Bµ¯BèÙB
-BO,BVB
-µB	è©BÒBNüB&AýjA÷ÐóAò7EAìAçìAáj?AÛÐAÖ6æAÐ9AËAÅiàA¿Ð3Aº6AŽÚA¯,A©[µ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|àÐB|ÅyByø£Bw+ÍBt^öBqBnÅIBkøsBi+Bf^ÆBcðB`ÅB]øCB[+mBX^BUÀBRÄêBOøBM+=BJ^fBGBDÄºBA÷ãB?+
-B<^6B9`B6ÄB3÷³B1*ÝB.^B+0B(ÄZB%÷B#*­B ]×B
-BÄ*B÷TB*~B]§BÑB
-ÃúB	÷$B*NB]wB¡AýA÷íèAòT<AìºAç âAá6AÛíAÖSÜAÐº0AË AÅ×A¿í*AºS|AŽ¬¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ïKB|ÓõBz
-Bw:GBtmqBq BnÓÄBlîBi:BfmABc kB`ÓB^ŸB[9èBXmBU ;BRÓeBPBM9žBJlâBG 
-BDÓ5BB^B?9B<l²B9ÛB6ÓB4/B19XB.lB+¬B(ÒÕB&ÿB#9)B lRB
-|BÒŠBÏB8ùBl"BLB
-ÒvB
-B8ÉBkóB
-Aý€Aø
-ßAòq2Aì×Aç=ÙAá€,AÜ
-AÖpÓAÐ×'AË=zAÅ£ÌA¿üU¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ýÆB|âoBzBwHÃBt{ìBq¯Bnâ@BliBiHBf{œBc®æB`âB^:B[HcBX{BU®¶BRáàBP
-BMH3BJ{]BG®BDá°BBÚB?HB<{-B9®WB6áB4ªB1GÔB.zýB+®'B(áQB&zB#G€B zÎB
-­÷Bá!BJBGtBzB­ÇB
-àñB
-BGDBznB­AýÁAø'ÖAò)Aìô|AçZÐAáÁ#AÜ'wAÖÊAÐô
-AËL¥¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}
-AB|ðëBz$BwW>BthBqœBnð»Bl#åBiWBf8BcœbB`ðB^#µB[VÞBXBUœ2BRð[BP#
-BMV®BJØBGœBDð+BB#UB?VB<šB9ŒÒB6ïüB4#%B1VOB.yB+Œ¢B(ïÌB&"öB#VB IB
-ŒrBïB"ÆBUïBBŒCB
-ïlB
-"BUÀBéBŒAýÞyAøDÌAò« AísAçwÇAáÞAÜDlAÖõ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ŒB|ÿfBz2Bwe¹BtãBqÌ
-Bnÿ6Bl2`BieBf³BcËÝB`ÿB^20B[eZBXBUË­BRþÖBP2 BMe*BJSBGË}BDþ§BB1ÐB?dúB<$B9ËMB6þwB41¡B1dÊB.ôB+Ë
-B(þGB&1qB#dB ÄB
-ÊîBþB1ABdkBBÊŸB
-ýèB
-1Bd;BeBÊAýûpAøaÃAòÈAí.jAçŒAáíE¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B})8B}
-áBzA
-Bwt5Bt§^BqÚBo
-²Bl@ÛBitBf§.BcÚXBa
-B^@«B[sÕBXŠþBUÚ(BS
-RBP@{BMs¥BJŠÏBGÙøBE
-"BB@LB?suB<ŠB9ÙÉB7
-òB4@
-B1sFB.ŠoB+ÙB)
-ÂB&?ìB#sB Š?B
-ÙiB
-B?ŒBræBŠBÙ9B
-
-cB
-?Br¶B¥ßBÙ
-AþgAø~ºAòå
-Aí=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}7³B}
-]BzOBw°BtµÚBqéBo
--BlOVBiBfµªBcèÓBaýB^O&B[PBXµzBUè£BSÍBPN÷BM BJµJBGètBEBBNÇB?ñB<µB9èDB7nB4NB1ÁB.ŽêB+èB)>B&NgB#B Ž»B
-çäBBN8BaBŽBçµB
-ÞB
-NB2BŽ[Bç
-Aþ5\Aøå¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}F.B}*ØBz^Bw+BtÄUBq÷~Bo*šBl]ÒBiûBfÄ%Bc÷NBa*xB^]¢B[ËBXÃõBU÷BS*HBP]rBMBJÃÅBGöïBE*BB]BB?lB<ÃB9ö¿B7)éB4]B1<B.ÃfB+öB))¹B&\ãB#
-B Ã6B
-ö`B)B\³BÝBÃBö/B
-)ZB
-\B­BÂ×Bï¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}TªB}9SBzl}BwŠBtÒÐBrúBo9#BllMBivBfÒ BdÊBa8óB^l
-B[GBXÒpBVBS8ÄBPkíBMBJÒABHjBE8BBkŸB?çB<ÒB::B78dB4kB1·B.ÑáB,
-B)84B&k^B#B Ñ±B
-ÛB8Bk.BWBÑB«B
-7ÕB
-jÿBC¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}c%B}GÌBzzöBw® BtáIBrsBoGBlzÆBi­ðBfáBdCBaGmB^zB[­ÀBXàêBVBSG=BPzgBM­BJàºBHäBEG
-BBz7B?­`B<àB:ŽB7FÝB4zB1­1B.àZB,B)F®B&y×B#­B à+B
-TBF}ByšB¬ÑBßûB%B
-?i¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}q B}VHBzqBwŒBtïÄBr"îBoVBlABiŒkBfïBd"ŸBaUèB^B[Œ;BXïeBV"BSUžBPâBMŒ
-BJï5BH"_BEUBB²B?»ÜB<ïB:"/B7UYB4B1»¬B.îÖB,!ÿB)U)B&SB#»|B î¥B
-!ÐBTùB#B»MBç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B}dÃBzìBwËBtþ@Br1iBodBlœBiÊæBfþBd1:BadcB^B[Ê·BXýàBV1
-BSd4BP]BMÊBJý°BH0ÚBEdBB-B?ÊWB<ýB:0ªB7cÔB4þB1Ê'B.ýQB,0{B)c€B&ÍB#ÉøB ý!B
-0KBcuB¹¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B}s>BzŠhBwÙBu
-»Br?åBosBlŠ8BiÙbBg
-Bd?µBarßB^ŠB[Ù2BY
-\BV?
-BSr¯BP¥ØBMÙBK
-,BH?UBErBB¥©B?ØÒB=
-üB:?&B7rOB4¥yB1Ø£B/
-ÌB,>õB)r B&¥IB#ØsB!
-B
-7á¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B}¹BzŽãBwè
-Bu6BrN`BoBlŽ³BiçÝBgBdN0BaZB^ŽB[ç­BY×BVN BS*BPŽTBMç}BK§BHMÑBEúBBŽ$B?çNB=wB:M¡B7ËB4³ôB1ç
-B/HB,MqB)B&³ÅB#à	¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}«B}5BzÃ^BwöBu)²Br\ÛBoBlÃ/BiöXBg)Bd\¬BaÕB^ÂÿB[ö(BY)RBV\|BS¥BPÂÏBMõùBK)"BH\LBEvBBÂB?õÉB=(óB:\
-B7EB4ÂpB1õB/(ÃB,[íB)1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ºB}°BzÑÚBxBu8-BrkWBoBlÑªBjÔBg7ýBdk'BaPB^ÑzB\€BY7ÍBVj÷BS!BPÑJBNtBK7BHjÇBEñBBÑB@DB=7mB:jB7ÁB4ÐëB2B/0Y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÈB}­+BzàUBxBuFšBryÒBo¬üBlà%BjOBgFxBdy¢Ba¬ÌB^ßõB\BYFIBVyrBS¬BPßÆBNïBKFBHyCBE¬lBBßB@ÀB=EéB:yB7¬=B4Ø¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÖÿB}»§BzîÐBx!úBuU$BrMBo»wBlî Bj!ÊBgTôBd
-Ba»GB^îqB\!BYTÄBVîBS»BPîABN!kBKTBHœBEºèBBîB@!;B=TeB:©¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}åzB}Ê"BzýLBx0uBucBrÈBoÉòBlý
-Bj0EBgcoBdBaÉÂB^üìB\0BYc?BViBSÉBPüŒBN/åBKcBH9BEÉcBBüB@(Ñ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}óöB}ØB{
-ÅBx>îBurBr¥BBoØkBm
-Bj>¿BgqèBd¥BaØ<B_
-eB\>BYq¹BV€âBSØ
-BQ
-6BN>_BKqBH€³BEÐ÷¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~qB}çB{@BxMjBuBr³œBoæçBmBjM:BgdBd³Baæ·B_áB\M
-BY3BV³^BSæBQ±BNLÛBKy¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~ìB}õB{(»Bx[åBuBrÂ8BoõbBm(Bj[µBgßBdÂ	Baõ2B_([B\[BY¯BVÁÙBSõBQ!G¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~gB~
-B{77Bxj`BuBrÐŽBpÝBm7Bjj1BgZBdÐBb®B_6×B\jBY+BVÉo¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~-ãB~B{E²BxxÜBu¬Brß/BpYBmEBjx«Bg«ÖBdÞÿBb)B_ESB\q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~<^B~!B{T-BxWBuºBríªBp ÓBmSþBj'BgºQBdí{Bb¿¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~JÙB~/B{b©BxÒBuÈûBrü&Bp/OBmbyBj£BgÁç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~YUB~=úB{q#Bx€MBu×wBs
-¡Bp=ËBmj¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~gÏB~LuB{Bx²ÉBuåóBs7¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~vKB~ZñB{Bxº_¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~ÇB~b
-¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B|  Bx  Bt  Bp  Bl  Bh  Bd  B`  B\  BX  BT  BP  BL  BH  BD  B@  B<  B8  B4  B0  B,  B(  B$  B   B
-  B  B  B  B
-  B  B  B   Aø  Að  Aè  Aà  AØ  AÐ  AÈ  AÀ  Až  A°  Aš  A   A  A  A  A  Ap  A`  AP  A@  A0  A   A  A   @à  @À  @   @  @@  @   ?      B|
-=Bx
-=Bt
-=Bp
-=Bl
-=Bh
-=Bd
-=B`
-=B\
-=BX
-=BT
-=BP
-=BL
-=BH
-=BD
-=B@
-=B<
-=B8
-=B4
-=B0
-=B,
-=B(
-=B$
-=B 
-=B
-
-=B
-=B
-=B
-=B
-
-=B
-=B
-=B 
-=Aø{Að{Aè{Aà{AØ{AÐ{AÈ{AÀ{Až{A°{Aš{A {A{A{A{A{Ap(öA`(öAP(öA@(öA0(öA (öA(öA (ö@àQì@ÀQì@ Qì@Qì@@£×@ £×?G®<#×
-B|{Bx{Bt{Bp{Bl{Bh{Bd{B`{B\{BX{BT{BP{BL{BH{BD{B@{B<{B8{B4{B0{B,{B({B${B {B
-{B{B{B{B
-{B{B{B {Aø(öAð(öAè(öAà(öAØ(öAÐ(öAÈ(öAÀ(öAž(öA°(öAš(öA (öA(öA(öA(öA(öApQìA`QìAPQìA@QìA0QìA QìAQìA Qì@à£×@À£×@ £×@£×@AG®@G®?\<£×
-B|
-žBx
-žBt
-žBp
-žBl
-žBh
-žBd
-žB`
-žB\
-žBX
-žBT
-žBP
-žBL
-žBH
-žBD
-žB@
-žB<
-žB8
-žB4
-žB0
-žB,
-žB(
-žB$
-žB 
-žB
-
-žB
-žB
-žB
-žB
-
-žB
-žB
-žB 
-žAø=qAð=qAè=qAà=qAØ=qAÐ=qAÈ=qAÀ=qAž=qA°=qAš=qA =qA=qA=qA=qA=qApzáA`záAPzáA@záA0záA záAzáA zá@àõÃ@ÀõÃ@ õÃ@õÃ@Aë
-@ë
-?×
-<õÂB|(öBx(öBt(öBp(öBl(öBh(öBd(öB`(öB\(öBX(öBT(öBP(öBL(öBH(öBD(öB@(öB<(öB8(öB4(öB0(öB,(öB((öB$(öB (öB
-(öB(öB(öB(öB
-(öB(öB(öB (öAøQìAðQìAèQìAàQìAØQìAÐQìAÈQìAÀQìAžQìA°QìAšQìA QìAQìAQìAQìAQìAp£×A`£×AP£×A@£×A0£×A £×A£×A £×@áG®@ÁG®@¡G®@G®@B\@\?
-
-ž=#×
-B|33Bx33Bt33Bp33Bl33Bh33Bd33B`33B\33BX33BT33BP33BL33BH33BD33B@33B<33B833B433B033B,33B(33B$33B 33B
-33B33B33B33B
-33B33B33B 33AøffAðffAèffAàffAØffAÐffAÈffAÀffAžffA°ffAšffA ffAffAffAffAffApÌÍA`ÌÍAPÌÍA@ÌÍA0ÌÍA ÌÍAÌÍA ÌÍ@á@Á@¡@@C33@33?ff=LÌÍB|=qBx=qBt=qBp=qBl=qBh=qBd=qB`=qB\=qBX=qBT=qBP=qBL=qBH=qBD=qB@=qB<=qB8=qB4=qB0=qB,=qB(=qB$=qB =qB
-=qB=qB=qB=qB
-=qB=qB=qB =qAøzáAðzáAèzáAàzáAØzáAÐzáAÈzáAÀzáAžzáA°záAšzáA záAzáAzáAzáAzáApõÃA`õÃAPõÃA@õÃA0õÃA õÃAõÃA õÃ@áë
-@Áë
-@¡ë
-@ë
-@C×
-@×
-?®=uÂB|G®BxG®BtG®BpG®BlG®BhG®BdG®B`G®B\G®BXG®BTG®BPG®BLG®BHG®BDG®B@G®B<G®B8G®B4G®B0G®B,G®B(G®B$G®B G®B
-G®BG®BG®BG®B
-G®BG®BG®B G®Aø\Að\Aè\Aà\AØ\AÐ\AÈ\AÀ\Až\A°\Aš\A \A\A\A\A\Aq
-žAa
-žAQ
-žAA
-žA1
-žA!
-žA
-žA
-ž@â=q@Â=q@¢=q@=q@Dzá@zá?õÃ=\)B|QìBxQìBtQìBpQìBlQìBhQìBdQìB`QìB\QìBXQìBTQìBPQìBLQìBHQìBDQìB@QìB<QìB8QìB4QìB0QìB,QìB(QìB$QìB QìB
-QìBQìBQìBQìB
-QìBQìBQìB QìAø£×Að£×Aè£×Aà£×AØ£×AÐ£×AÈ£×AÀ£×Až£×A°£×Aš£×A £×A£×A£×A£×A£×AqG®AaG®AQG®AAG®A1G®A!G®AG®AG®@â\@Â\@¢\@\@E
-ž@
-ž?=q=£×
-B|\)Bx\)Bt\)Bp\)Bl\)Bh\)Bd\)B`\)B\\)BX\)BT\)BP\)BL\)BH\)BD\)B@\)B<\)B8\)B4\)B0\)B,\)B(\)B$\)B \)B
-\)B\)B\)B\)B
-\)B\)B\)B \)AøžRAðžRAèžRAàžRAØžRAÐžRAÈžRAÀžRAžžRA°žRAšžRA žRAžRAžRAžRAžRAqp€Aap€AQp€AAp€A1p€A!p€Ap€Ap€@âáH@ÂáH@¢áH@áH@EÂ@Â?
-=žQìB|ffBxffBtffBpffBlffBhffBdffB`ffB\ffBXffBTffBPffBLffBHffBDffB@ffB<ffB8ffB4ffB0ffB,ffB(ffB$ffB ffB
-ffBffBffBffB
-ffBffBffB ffAøÌÍAðÌÍAèÌÍAàÌÍAØÌÍAÐÌÍAÈÌÍAÀÌÍAžÌÍA°ÌÍAšÌÍA ÌÍAÌÍAÌÍAÌÍAÌÍAqAaAQAAA1A!AA@ã33@Ã33@£33@33@Fff@ff?ÌÍ=ÌÌÍB|p€Bxp€Btp€Bpp€Blp€Bhp€Bdp€B`p€B\p€BXp€BTp€BPp€BLp€BHp€BDp€B@p€B<p€B8p€B4p€B0p€B,p€B(p€B$p€B p€B
-p€Bp€Bp€Bp€B
-p€Bp€Bp€B p€AøáHAðáHAèáHAàáHAØáHAÐáHAÈáHAÀáHAžáHA°áHAšáHA áHAáHAáHAáHAáHAqÂAaÂAQÂAAÂA1ÂA!ÂAÂAÂ@ã
-@Ã
-@£
-@
-@G
-=@
-=?{=áG®B|záBxzáBtzáBpzáBlzáBhzáBdzáB`záB\záBXzáBTzáBPzáBLzáBHzáBDzáB@záB<záB8záB4záB0záB,záB(záB$záB záB
-záBzáBzáBzáB
-záBzáBzáB záAøõÃAðõÃAèõÃAàõÃAØõÃAÐõÃAÈõÃAÀõÃAžõÃA°õÃAšõÃA õÃAõÃAõÃAõÃAõÃAqë
-Aaë
-AQë
-AAë
-A1ë
-A!ë
-Aë
-Aë
-@ã×
-@Ã×
-@£×
-@×
-@G®@®?\)=õÂB|
-Bx
-Bt
-Bp
-Bl
-Bh
-Bd
-B`
-B\
-BX
-BT
-BP
-BL
-BH
-BD
-B@
-B<
-B8
-B4
-B0
-B,
-B(
-B$
-B 
-B
-
-B
-B
-B
-B
-
-B
-B
-B 
-Aù
-=Añ
-=Aé
-=Aá
-=AÙ
-=AÑ
-=AÉ
-=AÁ
-=A¹
-=A±
-=A©
-=A¡
-=A
-=A
-=A
-=A
-=Ar{Ab{AR{AB{A2{A"{A{A{@ä(ö@Ä(ö@€(ö@(ö@HQì@Qì?£×>
-žB|\Bx\Bt\Bp\Bl\Bh\Bd\B`\B\\BX\BT\BP\BL\BH\BD\B@\B<\B8\B4\B0\B,\B(\B$\B \B
-\B\B\B\B
-\B\B\B \Aù
-žAñ
-žAé
-žAá
-žAÙ
-žAÑ
-žAÉ
-žAÁ
-žA¹
-žA±
-žA©
-žA¡
-žA
-žA
-žA
-žA
-žAr=qAb=qAR=qAB=qA2=qA"=qA=qA=q@äzá@Äzá@€zá@zá@HõÃ@õÃ?ë
->\)B|BxBtBpBlBhBdB`B\BXBTBPBLBHBDB@B<B8B4B0B,B(B$B B
-BBBB
-BBB Aù33Añ33Aé33Aá33AÙ33AÑ33AÉ33AÁ33A¹33A±33A©33A¡33A33A33A33A33ArffAbffARffABffA2ffA"ffAffAff@äÌÍ@ÄÌÍ@€ÌÍ@ÌÍ@I@	?33>B|£×Bx£×Bt£×Bp£×Bl£×Bh£×Bd£×B`£×B\£×BX£×BT£×BP£×BL£×BH£×BD£×B@£×B<£×B8£×B4£×B0£×B,£×B(£×B$£×B £×B
-£×B£×B£×B£×B
-£×B£×B£×B £×AùG®AñG®AéG®AáG®AÙG®AÑG®AÉG®AÁG®A¹G®A±G®A©G®A¡G®AG®AG®AG®AG®Ar\Ab\AR\AB\A2\A"\A\A\@å
-ž@Å
-ž@¥
-ž@
-
-ž@J=q@
-=q?zá>#×
-B|®Bx®Bt®Bp®Bl®Bh®Bd®B`®B\®BX®BT®BP®BL®BH®BD®B@®B<®B8®B4®B0®B,®B(®B$®B ®B
-®B®B®B®B
-®B®B®B ®Aù\)Añ\)Aé\)Aá\)AÙ\)AÑ\)AÉ\)AÁ\)A¹\)A±\)A©\)A¡\)A\)A\)A\)A\)AržRAbžRARžRABžRA2žRA"žRAžRAžR@åp€@Åp€@¥p€@
-p€@JáH@
-áH?Â>.{B|žRBxžRBtžRBpžRBlžRBhžRBdžRB`žRB\žRBXžRBTžRBPžRBLžRBHžRBDžRB@žRB<žRB8žRB4žRB0žRB,žRB(žRB$žRB žRB
-žRBžRBžRBžRB
-žRBžRBžRB žRAùp€Añp€Aép€Aáp€AÙp€AÑp€AÉp€AÁp€A¹p€A±p€A©p€A¡p€Ap€Ap€Ap€Ap€AráHAbáHARáHABáHA2áHA"áHAáHAáH@åÂ@ÅÂ@¥Â@
-Â@K
-@
-
-?
->>8QìB|ÂBxÂBtÂBpÂBlÂBhÂBdÂB`ÂB\ÂBXÂBTÂBPÂBLÂBHÂBDÂB@ÂB<ÂB8ÂB4ÂB0ÂB,ÂB(ÂB$ÂB ÂB
-ÂBÂBÂBÂB
-ÂBÂBÂB ÂAù
-Añ
-Aé
-Aá
-AÙ
-AÑ
-AÉ
-AÁ
-A¹
-A±
-A©
-A¡
-A
-A
-A
-A
-As
-=Ac
-=AS
-=AC
-=A3
-=A#
-=A
-=A
-=@æ{@Æ{@Š{@{@L(ö@
-(ö?Qì>B\B|ÌÍBxÌÍBtÌÍBpÌÍBlÌÍBhÌÍBdÌÍB`ÌÍB\ÌÍBXÌÍBTÌÍBPÌÍBLÌÍBHÌÍBDÌÍB@ÌÍB<ÌÍB8ÌÍB4ÌÍB0ÌÍB,ÌÍB(ÌÍB$ÌÍB ÌÍB
-ÌÍBÌÍBÌÍBÌÍB
-ÌÍBÌÍBÌÍB ÌÍAùAñAéAáAÙAÑAÉAÁA¹A±A©A¡AAAAAs33Ac33AS33AC33A333A#33A33A33@æff@Æff@Šff@ff@LÌÍ@
-ÌÍ?>LÌÍB|×
-Bx×
-Bt×
-Bp×
-Bl×
-Bh×
-Bd×
-B`×
-B\×
-BX×
-BT×
-BP×
-BL×
-BH×
-BD×
-B@×
-B<×
-B8×
-B4×
-B0×
-B,×
-B(×
-B$×
-B ×
-B
-×
-B×
-B×
-B×
-B
-×
-B×
-B×
-B ×
-Aù®Añ®Aé®Aá®AÙ®AÑ®AÉ®AÁ®A¹®A±®A©®A¡®A®A®A®A®As\)Ac\)AS\)AC\)A3\)A#\)A\)A\)@æžR@ÆžR@ŠžR@žR@Mp€@
-p€?áH>W
-=B|áHBxáHBtáHBpáHBláHBháHBdáHB`áHB\áHBXáHBTáHBPáHBLáHBHáHBDáHB@áHB<áHB8áHB4áHB0áHB,áHB(áHB$áHB áHB
-áHBáHBáHBáHB
-áHBáHBáHB áHAùÂAñÂAéÂAáÂAÙÂAÑÂAÉÂAÁÂA¹ÂA±ÂA©ÂA¡ÂAÂAÂAÂAÂAs
-Ac
-AS
-AC
-A3
-A#
-A
-A
-@ç
-=@Ç
-=@§
-=@
-=@N{@{?(ö>aG®B|ë
-Bxë
-Btë
-Bpë
-Blë
-Bhë
-Bdë
-B`ë
-B\ë
-BXë
-BTë
-BPë
-BLë
-BHë
-BDë
-B@ë
-B<ë
-B8ë
-B4ë
-B0ë
-B,ë
-B(ë
-B$ë
-B ë
-B
-ë
-Bë
-Bë
-Bë
-B
-ë
-Bë
-Bë
-B ë
-Aù×
-Añ×
-Aé×
-Aá×
-AÙ×
-AÑ×
-AÉ×
-AÁ×
-A¹×
-A±×
-A©×
-A¡×
-A×
-A×
-A×
-A×
-As®Ac®AS®AC®A3®A#®A®A®@ç\)@Ç\)@§\)@\)@NžR@žR?p€>k
-B|õÃBxõÃBtõÃBpõÃBlõÃBhõÃBdõÃB`õÃB\õÃBXõÃBTõÃBPõÃBLõÃBHõÃBDõÃB@õÃB<õÃB8õÃB4õÃB0õÃB,õÃB(õÃB$õÃB õÃB
-õÃBõÃBõÃBõÃB
-õÃBõÃBõÃB õÃAùë
-Añë
-Aéë
-Aáë
-AÙë
-AÑë
-AÉë
-AÁë
-A¹ë
-A±ë
-A©ë
-A¡ë
-Aë
-Aë
-Aë
-Aë
-As×
-Ac×
-AS×
-AC×
-A3×
-A#×
-A×
-A×
-@ç®@Ç®@§®@®@O\)@\)?žR>uÂB}  By  Bu  Bq  Bm  Bi  Be  Ba  B]  BY  BU  BQ  BM  BI  BE  BA  B=  B9  B5  B1  B-  B)  B%  B!  B
-  B  B  B  B
-  B	  B  B  Aú  Aò  Aê  Aâ  AÚ  AÒ  AÊ  AÂ  Aº  A²  Aª  A¢  A  A  A  A  At  Ad  AT  AD  A4  A$  A  A  @è  @È  @š  @  @P  @  ?   >  B}
-=By
-=Bu
-=Bq
-=Bm
-=Bi
-=Be
-=Ba
-=B]
-=BY
-=BU
-=BQ
-=BM
-=BI
-=BE
-=BA
-=B=
-=B9
-=B5
-=B1
-=B-
-=B)
-=B%
-=B!
-=B
-
-=B
-=B
-=B
-=B
-=B	
-=B
-=B
-=Aú{Aò{Aê{Aâ{AÚ{AÒ{AÊ{AÂ{Aº{A²{Aª{A¢{A{A{A{A{At(öAd(öAT(öAD(öA4(öA$(öA(öA(ö@èQì@ÈQì@šQì@Qì@P£×@£×?¡G®>
-
-žB}{By{Bu{Bq{Bm{Bi{Be{Ba{B]{BY{BU{BQ{BM{BI{BE{BA{B={B9{B5{B1{B-{B){B%{B!{B
-{B{B{B{B
-{B	{B{B{Aú(öAò(öAê(öAâ(öAÚ(öAÒ(öAÊ(öAÂ(öAº(öA²(öAª(öA¢(öA(öA(öA(öA(öAtQìAdQìATQìADQìA4QìA$QìAQìAQì@è£×@È£×@š£×@£×@QG®@G®?¢\>=qB}
-žBy
-žBu
-žBq
-žBm
-žBi
-žBe
-žBa
-žB]
-žBY
-žBU
-žBQ
-žBM
-žBI
-žBE
-žBA
-žB=
-žB9
-žB5
-žB1
-žB-
-žB)
-žB%
-žB!
-žB
-
-žB
-žB
-žB
-žB
-
-žB	
-žB
-žB
-žAú=qAò=qAê=qAâ=qAÚ=qAÒ=qAÊ=qAÂ=qAº=qA²=qAª=qA¢=qA=qA=qA=qA=qAtzáAdzáATzáADzáA4záA$záAzáAzá@èõÃ@ÈõÃ@šõÃ@õÃ@Që
-@ë
-?£×
->\)B}(öBy(öBu(öBq(öBm(öBi(öBe(öBa(öB](öBY(öBU(öBQ(öBM(öBI(öBE(öBA(öB=(öB9(öB5(öB1(öB-(öB)(öB%(öB!(öB
-(öB(öB(öB(öB
-(öB	(öB(öB(öAúQìAòQìAêQìAâQìAÚQìAÒQìAÊQìAÂQìAºQìA²QìAªQìA¢QìAQìAQìAQìAQìAt£×Ad£×AT£×AD£×A4£×A$£×A£×A£×@éG®@ÉG®@©G®@G®@R\@\?¥
-ž>záB}33By33Bu33Bq33Bm33Bi33Be33Ba33B]33BY33BU33BQ33BM33BI33BE33BA33B=33B933B533B133B-33B)33B%33B!33B
-33B33B33B33B
-33B	33B33B33AúffAòffAêffAâffAÚffAÒffAÊffAÂffAºffA²ffAªffA¢ffAffAffAffAffAtÌÍAdÌÍATÌÍADÌÍA4ÌÍA$ÌÍAÌÍAÌÍ@é@É@©@@S33@33?Šff>B}=qBy=qBu=qBq=qBm=qBi=qBe=qBa=qB]=qBY=qBU=qBQ=qBM=qBI=qBE=qBA=qB==qB9=qB5=qB1=qB-=qB)=qB%=qB!=qB
-=qB=qB=qB=qB
-=qB	=qB=qB=qAúzáAòzáAêzáAâzáAÚzáAÒzáAÊzáAÂzáAºzáA²záAªzáA¢záAzáAzáAzáAzáAtõÃAdõÃATõÃADõÃA4õÃA$õÃAõÃAõÃ@éë
-@Éë
-@©ë
-@ë
-@S×
-@×
-?§®>žRB}G®ByG®BuG®BqG®BmG®BiG®BeG®BaG®B]G®BYG®BUG®BQG®BMG®BIG®BEG®BAG®B=G®B9G®B5G®B1G®B-G®B)G®B%G®B!G®B
-G®BG®BG®BG®B
-G®B	G®BG®BG®Aú\Aò\Aê\Aâ\AÚ\AÒ\AÊ\AÂ\Aº\A²\Aª\A¢\A\A\A\A\Au
-žAe
-žAU
-žAE
-žA5
-žA%
-žA
-žA
-ž@ê=q@Ê=q@ª=q@=q@Tzá@zá?šõÂ>£×
-B}QìByQìBuQìBqQìBmQìBiQìBeQìBaQìB]QìBYQìBUQìBQQìBMQìBIQìBEQìBAQìB=QìB9QìB5QìB1QìB-QìB)QìB%QìB!QìB
-QìBQìBQìBQìB
-QìB	QìBQìBQìAú£×Aò£×Aê£×Aâ£×AÚ£×AÒ£×AÊ£×AÂ£×Aº£×A²£×Aª£×A¢£×A£×A£×A£×A£×AuG®AeG®AUG®AEG®A5G®A%G®AG®AG®@ê\@Ê\@ª\@\@U
-ž@
-ž?ª=q>šõÃB}\)By\)Bu\)Bq\)Bm\)Bi\)Be\)Ba\)B]\)BY\)BU\)BQ\)BM\)BI\)BE\)BA\)B=\)B9\)B5\)B1\)B-\)B)\)B%\)B!\)B
-\)B\)B\)B\)B
-\)B	\)B\)B\)AúžRAòžRAêžRAâžRAÚžRAÒžRAÊžRAÂžRAºžRA²žRAªžRA¢žRAžRAžRAžRAžRAup€Aep€AUp€AEp€A5p€A%p€Ap€Ap€@êáH@ÊáH@ªáH@áH@UÂ@Â?«
->®{B}ffByffBuffBqffBmffBiffBeffBaffB]ffBYffBUffBQffBMffBIffBEffBAffB=ffB9ffB5ffB1ffB-ffB)ffB%ffB!ffB
-ffBffBffBffB
-ffB	ffBffBffAúÌÍAòÌÍAêÌÍAâÌÍAÚÌÍAÒÌÍAÊÌÍAÂÌÍAºÌÍA²ÌÍAªÌÍA¢ÌÍAÌÍAÌÍAÌÍAÌÍAuAeAUAEA5A%AA@ë33@Ë33@«33@33@Vff@ff?¬ÌÍ>³33B}p€Byp€Bup€Bqp€Bmp€Bip€Bep€Bap€B]p€BYp€BUp€BQp€BMp€BIp€BEp€BAp€B=p€B9p€B5p€B1p€B-p€B)p€B%p€B!p€B
-p€Bp€Bp€Bp€B
-p€B	p€Bp€Bp€AúáHAòáHAêáHAâáHAÚáHAÒáHAÊáHAÂáHAºáHA²áHAªáHA¢áHAáHAáHAáHAáHAuÂAeÂAUÂAEÂA5ÂA%ÂAÂAÂ@ë
-@Ë
-@«
-@
-@W
->@
->?®{>žQìB}záByzáBuzáBqzáBmzáBizáBezáBazáB]záBYzáBUzáBQzáBMzáBIzáBEzáBAzáB=záB9záB5záB1záB-záB)záB%záB!záB
-záBzáBzáBzáB
-záB	záBzáBzáAúõÃAòõÃAêõÃAâõÃAÚõÃAÒõÃAÊõÃAÂõÃAºõÃA²õÃAªõÃA¢õÃAõÃAõÃAõÃAõÃAuë
-Aeë
-AUë
-AEë
-A5ë
-A%ë
-Aë
-Aë
-@ë×
-@Ë×
-@«×
-@×
-@W®@®?¯\)>œp€B}
-By
-Bu
-Bq
-Bm
-Bi
-Be
-Ba
-B]
-BY
-BU
-BQ
-BM
-BI
-BE
-BA
-B=
-B9
-B5
-B1
-B-
-B)
-B%
-B!
-B
-
-B
-B
-B
-B
-
-B	
-B
-B
-Aû
-=Aó
-=Aë
-=Aã
-=AÛ
-=AÓ
-=AË
-=AÃ
-=A»
-=A³
-=A«
-=A£
-=A
-=A
-=A
-=A
-=Av{Af{AV{AF{A6{A&{A{A{@ì(ö@Ì(ö@¬(ö@(ö@XQì@Qì?°£×>Â\B}\By\Bu\Bq\Bm\Bi\Be\Ba\B]\BY\BU\BQ\BM\BI\BE\BA\B=\B9\B5\B1\B-\B)\B%\B!\B
-\B\B\B\B
-\B	\B\B\Aû
-žAó
-žAë
-žAã
-žAÛ
-žAÓ
-žAË
-žAÃ
-žA»
-žA³
-žA«
-žA£
-žA
-žA
-žA
-žA
-žAv=qAf=qAV=qAF=qA6=qA&=qA=qA=q@ìzá@Ìzá@¬zá@zá@XõÂ@õÂ?±ë
->Ç®B}ByBuBqBmBiBeBaB]BYBUBQBMBIBEBAB=B9B5B1B-B)B%B!B
-BBBB
-B	BBAû33Aó33Aë33Aã33AÛ33AÓ33AË33AÃ33A»33A³33A«33A£33A33A33A33A33AvffAfffAVffAFffA6ffA&ffAffAff@ìÌÍ@ÌÌÍ@¬ÌÍ@ÌÍ@Y@?³33>ÌÌÍB}£×By£×Bu£×Bq£×Bm£×Bi£×Be£×Ba£×B]£×BY£×BU£×BQ£×BM£×BI£×BE£×BA£×B=£×B9£×B5£×B1£×B-£×B)£×B%£×B!£×B
-£×B£×B£×B£×B
-£×B	£×B£×B£×AûG®AóG®AëG®AãG®AÛG®AÓG®AËG®AÃG®A»G®A³G®A«G®A£G®AG®AG®AG®AG®Av\Af\AV\AF\A6\A&\A\A\@í
-ž@Í
-ž@­
-ž@
-ž@Z=q@=q?Žzá>Ñë
-B}®By®Bu®Bq®Bm®Bi®Be®Ba®B]®BY®BU®BQ®BM®BI®BE®BA®B=®B9®B5®B1®B-®B)®B%®B!®B
-®B®B®B®B
-®B	®B®B®Aû\)Aó\)Aë\)Aã\)AÛ\)AÓ\)AË\)AÃ\)A»\)A³\)A«\)A£\)A\)A\)A\)A\)AvžRAfžRAVžRAFžRA6žRA&žRAžRAžR@íp€@Íp€@­p€@p€@ZáH@áH?µÂ>×
-=B}žRByžRBužRBqžRBmžRBižRBežRBažRB]žRBYžRBUžRBQžRBMžRBIžRBEžRBAžRB=žRB9žRB5žRB1žRB-žRB)žRB%žRB!žRB
-žRBžRBžRBžRB
-žRB	žRBžRBžRAûp€Aóp€Aëp€Aãp€AÛp€AÓp€AËp€AÃp€A»p€A³p€A«p€A£p€Ap€Ap€Ap€Ap€AváHAfáHAVáHAFáHA6áHA&áHAáHAáH@íÂ@ÍÂ@­Â@Â@[
-@
-?·
->>Ü(öB}ÂByÂBuÂBqÂBmÂBiÂBeÂBaÂB]ÂBYÂBUÂBQÂBMÂBIÂBEÂBAÂB=ÂB9ÂB5ÂB1ÂB-ÂB)ÂB%ÂB!ÂB
-ÂBÂBÂBÂB
-ÂB	ÂBÂBÂAû
-Aó
-Aë
-Aã
-AÛ
-AÓ
-AË
-AÃ
-A»
-A³
-A«
-A£
-A
-A
-A
-A
-Aw
-=Ag
-=AW
-=AG
-=A7
-=A'
-=A
-=A
-=@î{@Î{@®{@{@\(ö@
-(ö?žQì>áG®B}ÌÍByÌÍBuÌÍBqÌÍBmÌÍBiÌÍBeÌÍBaÌÍB]ÌÍBYÌÍBUÌÍBQÌÍBMÌÍBIÌÍBEÌÍBAÌÍB=ÌÍB9ÌÍB5ÌÍB1ÌÍB-ÌÍB)ÌÍB%ÌÍB!ÌÍB
-ÌÍBÌÍBÌÍBÌÍB
-ÌÍB	ÌÍBÌÍBÌÍAûAóAëAãAÛAÓAËAÃA»A³A«A£AAAAAw33Ag33AW33AG33A733A'33A33A33@îff@Îff@®ff@ff@\ÌÍ@
-ÌÍ?¹>æffB}×
-By×
-Bu×
-Bq×
-Bm×
-Bi×
-Be×
-Ba×
-B]×
-BY×
-BU×
-BQ×
-BM×
-BI×
-BE×
-BA×
-B=×
-B9×
-B5×
-B1×
-B-×
-B)×
-B%×
-B!×
-B
-×
-B×
-B×
-B×
-B
-×
-B	×
-B×
-B×
-Aû®Aó®Aë®Aã®AÛ®AÓ®AË®AÃ®A»®A³®A«®A£®A®A®A®A®Aw\)Ag\)AW\)AG\)A7\)A'\)A\)A\)@îžR@ÎžR@®žR@žR@]p€@
-p€?ºáH>ë
-B}áHByáHBuáHBqáHBmáHBiáHBeáHBaáHB]áHBYáHBUáHBQáHBMáHBIáHBEáHBAáHB=áHB9áHB5áHB1áHB-áHB)áHB%áHB!áHB
-áHBáHBáHBáHB
-áHB	áHBáHBáHAûÂAóÂAëÂAãÂAÛÂAÓÂAËÂAÃÂA»ÂA³ÂA«ÂA£ÂAÂAÂAÂAÂAw
-Ag
-AW
-AG
-A7
-A'
-A
-A
-@ï
-=@Ï
-=@¯
-=@
-=@^{@
-{?Œ(ö>ð£×B}ë
-Byë
-Buë
-Bqë
-Bmë
-Bië
-Beë
-Baë
-B]ë
-BYë
-BUë
-BQë
-BMë
-BIë
-BEë
-BAë
-B=ë
-B9ë
-B5ë
-B1ë
-B-ë
-B)ë
-B%ë
-B!ë
-B
-ë
-Bë
-Bë
-Bë
-B
-ë
-B	ë
-Bë
-Bë
-Aû×
-Aó×
-Aë×
-Aã×
-AÛ×
-AÓ×
-AË×
-AÃ×
-A»×
-A³×
-A«×
-A£×
-A×
-A×
-A×
-A×
-Aw®Ag®AW®AG®A7®A'®A®A®@ï\)@Ï\)@¯\)@\)@^žR@
-žR?œp€>õÂB}õÃByõÃBuõÃBqõÃBmõÃBiõÃBeõÃBaõÃB]õÃBYõÃBUõÃBQõÃBMõÃBIõÃBEõÃBAõÃB=õÃB9õÃB5õÃB1õÃB-õÃB)õÃB%õÃB!õÃB
-õÃBõÃBõÃBõÃB
-õÃB	õÃBõÃBõÃAûë
-Aóë
-Aëë
-Aãë
-AÛë
-AÓë
-AËë
-AÃë
-A»ë
-A³ë
-A«ë
-A£ë
-Aë
-Aë
-Aë
-Aë
-Aw×
-Ag×
-AW×
-AG×
-A7×
-A'×
-A×
-A×
-@ï®@Ï®@¯®@®@_\)@\)?ŸžR>úáHB~  Bz  Bv  Br  Bn  Bj  Bf  Bb  B^  BZ  BV  BR  BN  BJ  BF  BB  B>  B:  B6  B2  B.  B*  B&  B"  B
-  B  B  B  B  B
-  B  B  Aü  Aô  Aì  Aä  AÜ  AÔ  AÌ  AÄ  AŒ  AŽ  A¬  A€  A  A  A  A  Ax  Ah  AX  AH  A8  A(  A  A  @ð  @Ð  @°  @  @`  @   ?À  ?   B~
-=Bz
-=Bv
-=Br
-=Bn
-=Bj
-=Bf
-=Bb
-=B^
-=BZ
-=BV
-=BR
-=BN
-=BJ
-=BF
-=BB
-=B>
-=B:
-=B6
-=B2
-=B.
-=B*
-=B&
-=B"
-=B
-
-=B
-=B
-=B
-=B
-=B
-
-=B
-=B
-=Aü{Aô{Aì{Aä{AÜ{AÔ{AÌ{AÄ{AŒ{AŽ{A¬{A€{A{A{A{A{Ax(öAh(öAX(öAH(öA8(öA((öA(öA(ö@ðQì@ÐQì@°Qì@Qì@`£×@ £×?ÁG®?\B~{Bz{Bv{Br{Bn{Bj{Bf{Bb{B^{BZ{BV{BR{BN{BJ{BF{BB{B>{B:{B6{B2{B.{B*{B&{B"{B
-{B{B{B{B{B
-{B{B{Aü(öAô(öAì(öAä(öAÜ(öAÔ(öAÌ(öAÄ(öAŒ(öAŽ(öA¬(öA€(öA(öA(öA(öA(öAxQìAhQìAXQìAHQìA8QìA(QìAQìAQì@ð£×@Ð£×@°£×@£×@aG®@!G®?Â\?
-žB~
-žBz
-žBv
-žBr
-žBn
-žBj
-žBf
-žBb
-žB^
-žBZ
-žBV
-žBR
-žBN
-žBJ
-žBF
-žBB
-žB>
-žB:
-žB6
-žB2
-žB.
-žB*
-žB&
-žB"
-žB
-
-žB
-žB
-žB
-žB
-žB
-
-žB
-žB
-žAü=qAô=qAì=qAä=qAÜ=qAÔ=qAÌ=qAÄ=qAŒ=qAŽ=qA¬=qA€=qA=qA=qA=qA=qAxzáAhzáAXzáAHzáA8záA(záAzáAzá@ðõÂ@ÐõÂ@°õÂ@õÂ@aë
-@!ë
-?Ã×
-?®B~(öBz(öBv(öBr(öBn(öBj(öBf(öBb(öB^(öBZ(öBV(öBR(öBN(öBJ(öBF(öBB(öB>(öB:(öB6(öB2(öB.(öB*(öB&(öB"(öB
-(öB(öB(öB(öB(öB
-(öB(öB(öAüQìAôQìAìQìAäQìAÜQìAÔQìAÌQìAÄQìAŒQìAŽQìA¬QìA€QìAQìAQìAQìAQìAx£×Ah£×AX£×AH£×A8£×A(£×A£×A£×@ñG®@ÑG®@±G®@G®@b\@"\?Å
-ž?
-=qB~33Bz33Bv33Br33Bn33Bj33Bf33Bb33B^33BZ33BV33BR33BN33BJ33BF33BB33B>33B:33B633B233B.33B*33B&33B"33B
-33B33B33B33B33B
-33B33B33AüffAôffAìffAäffAÜffAÔffAÌffAÄffAŒffAŽffA¬ffA€ffAffAffAffAffAxÌÍAhÌÍAXÌÍAHÌÍA8ÌÍA(ÌÍAÌÍAÌÍ@ñ@Ñ@±@@c33@#33?Æff?
-ÌÍB~=qBz=qBv=qBr=qBn=qBj=qBf=qBb=qB^=qBZ=qBV=qBR=qBN=qBJ=qBF=qBB=qB>=qB:=qB6=qB2=qB.=qB*=qB&=qB"=qB
-=qB=qB=qB=qB=qB
-=qB=qB=qAüzáAôzáAìzáAäzáAÜzáAÔzáAÌzáAÄzáAŒzáAŽzáA¬záA€záAzáAzáAzáAzáAxõÃAhõÃAXõÃAHõÃA8õÃA(õÃAõÃAõÃ@ñë
-@Ñë
-@±ë
-@ë
-@c×
-@#×
-?Ç®?\)B~G®BzG®BvG®BrG®BnG®BjG®BfG®BbG®B^G®BZG®BVG®BRG®BNG®BJG®BFG®BBG®B>G®B:G®B6G®B2G®B.G®B*G®B&G®B"G®B
-G®BG®BG®BG®BG®B
-G®BG®BG®Aü\Aô\Aì\Aä\AÜ\AÔ\AÌ\AÄ\AŒ\AŽ\A¬\A€\A\A\A\A\Ay
-žAi
-žAY
-žAI
-žA9
-žA)
-žA
-žA	
-ž@ò=q@Ò=q@²=q@=q@dzá@$zá?ÈõÂ?ë
-B~QìBzQìBvQìBrQìBnQìBjQìBfQìBbQìB^QìBZQìBVQìBRQìBNQìBJQìBFQìBBQìB>QìB:QìB6QìB2QìB.QìB*QìB&QìB"QìB
-QìBQìBQìBQìBQìB
-QìBQìBQìAü£×Aô£×Aì£×Aä£×AÜ£×AÔ£×AÌ£×AÄ£×AŒ£×AŽ£×A¬£×A€£×A£×A£×A£×A£×AyG®AiG®AYG®AIG®A9G®A)G®AG®A	G®@ò\@Ò\@²\@\@e
-ž@%
-ž?Ê=p?záB~\)Bz\)Bv\)Br\)Bn\)Bj\)Bf\)Bb\)B^\)BZ\)BV\)BR\)BN\)BJ\)BF\)BB\)B>\)B:\)B6\)B2\)B.\)B*\)B&\)B"\)B
-\)B\)B\)B\)B\)B
-\)B\)B\)AüžRAôžRAìžRAäžRAÜžRAÔžRAÌžRAÄžRAŒžRAŽžRA¬žRA€žRAžRAžRAžRAžRAyp€Aip€AYp€AIp€A9p€A)p€Ap€A	p€@òáH@ÒáH@²áH@áH@eÂ@%Â?Ë
-
-?
-=B~ffBzffBvffBrffBnffBjffBfffBbffB^ffBZffBVffBRffBNffBJffBFffBBffB>ffB:ffB6ffB2ffB.ffB*ffB&ffB"ffB
-ffBffBffBffBffB
-ffBffBffAüÌÍAôÌÍAìÌÍAäÌÍAÜÌÍAÔÌÍAÌÌÍAÄÌÍAŒÌÍAŽÌÍA¬ÌÍA€ÌÍAÌÍAÌÍAÌÍAÌÍAyAiAYAIA9A)AA	@ó33@Ó33@³33@33@fff@&ff?ÌÌÍ?B~p€Bzp€Bvp€Brp€Bnp€Bjp€Bfp€Bbp€B^p€BZp€BVp€BRp€BNp€BJp€BFp€BBp€B>p€B:p€B6p€B2p€B.p€B*p€B&p€B"p€B
-p€Bp€Bp€Bp€Bp€B
-p€Bp€Bp€AüáHAôáHAìáHAäáHAÜáHAÔáHAÌáHAÄáHAŒáHAŽáHA¬áHA€áHAáHAáHAáHAáHAyÂAiÂAYÂAIÂA9ÂA)ÂAÂA	Â@ó
-@Ó
-@³
-@
-@g
->@'
->?Î{?
-(öB~záBzzáBvzáBrzáBnzáBjzáBfzáBbzáB^záBZzáBVzáBRzáBNzáBJzáBFzáBBzáB>záB:záB6záB2záB.záB*záB&záB"záB
-záBzáBzáBzáBzáB
-záBzáBzáAüõÃAôõÃAìõÃAäõÃAÜõÃAÔõÃAÌõÃAÄõÃAŒõÃAŽõÃA¬õÃA€õÃAõÃAõÃAõÃAõÃAyë
-Aië
-AYë
-AIë
-A9ë
-A)ë
-Aë
-A	ë
-@ó×
-@Ó×
-@³×
-@×
-@g®@'®?Ï\)?
-žRB~
-Bz
-Bv
-Br
-Bn
-Bj
-Bf
-Bb
-B^
-BZ
-BV
-BR
-BN
-BJ
-BF
-BB
-B>
-B:
-B6
-B2
-B.
-B*
-B&
-B"
-B
-
-B
-B
-B
-B
-B
-
-B
-B
-Aý
-=Aõ
-=Aí
-=Aå
-=AÝ
-=AÕ
-=AÍ
-=AÅ
-=Aœ
-=Aµ
-=A­
-=A¥
-=A
-=A
-=A
-=A
-
-=Az{Aj{AZ{AJ{A:{A*{A{A
-{@ô(ö@Ô(ö@Ž(ö@(ö@hQì@(Qì?Ð£×?!G®                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B| XB{Ýf¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÔB{äþBy	¬Bv5@¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|
-OB{óyBy(Bv<ÖBsaBp¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|+ÊB|õBy&£BvKQBsp Bp®Bm¹\Bjäð¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|:FB|pBy5
-BvYÍBs~{Bp£)BmÇ×BjìBh4Be<È¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|HÁB|
-ëByCBvhHBsöBp±¥BmÖSBjûBh¯BeD^Bbi
-B_ ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|W<B|-gByRBvvÃBsrBpÀ BmäÎBk	}Bh.+BeRÙBbwB_6B\ÀäBYìx¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|e·B|;âBy`Bv
-?Bs©íBpÎBmóJBkøBh<ŠBeaUBbB_ª±B\Ï_BYôBWŒBTDP¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|t3B|J]Byo
-BvºBsžhBpÝBnÅBk&sBhK"BeoÐBb~B_¹-B\ÝÛBZBW'7BTKæBQpBN(¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|®B|XØBy}Bv¢5BsÆãBpëBn@Bk4ïBhYBe~KBb¢úB_ÇšB\ìVBZBW5³BTZaBQBN£ŸBKÈlBHô ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|)B|gTByBv°°BsÕ_Bpú
-Bn
-»BkCjBhhBeÇBb±uB_Ö#B\úÒBZBWD.BThÝBQBN²9BKÖçBHûBF DBCKØ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|¥B|uÑByBv¿.BsãÜBqBn-9BkQçBhvBeDBb¿òB_ä¡B]	OBZ-ýBWR¬BTwZBQBNÀ·BKåeBI
-BF.ÁBCSpB@x
-B=£²¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|®B|LByšûBvÍ©BsòWBqBn;ŽBk`bBh
-Be©¿BbÎmB_ó
-B]ÊBZ<yBWa'BT
-ÕBQªBNÏ2BKóàBIBF==BCaëB@B=«HB:ÏöB7û¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ŒB|ÇBy·uBvÜ$Bt ÓBq%BnJ/BknÞBhBež:BbÜéB`B]&EBZJôBWo¢BTQBQžÿBNÝ­BL\BI'
-BFKžBCpgB@B=¹ÃB:ÞqB8 B5'ÎB2Sb¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ËB|¡BByÅñBvêBtMBq3üBnX«Bk}YBh¢BeÆ¶BbëdB`B]4ÁBZYoBW~
-BT¢ÌBQÇzBNì)BL×BI5
-BFZ4BC~âB@£B=È?B:ìíB8B56IB2ZøB/ŠB,«:¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|ÙB|¯ŸByÔlBvùBt
-ÉBqBwBng%BkÔBh°BeÕ1BbùßB`
-B]C<BZgêBWBT±GBQÕõBNú€BLRBIDBFh¯BC]B@²
-B=ÖºB:ûhB8 B5DÅB2isB/!B,²ÐB)×~B'¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|è
-B|Ÿ9ByâçBwBt,DBqPòBnu¡BkOBhŸýBeã¬Bc[B`-	B]Q·BZvfBWBT¿ÂBQäqBO	BL-ÍBIR|BFw*BCÙB@ÀB=å5B;	äB8.B5S@B2wïB/B,ÁKB)åùB'
-šB$/VB!Zê¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B|öB|ÌµByñcBwBt:¿Bq_nBn
-BkšÊBhÍyBeò'BcÕB`;B]`3BZáBW©BTÎ>BQòìBOBL<IBI`÷BF
-¥BCªTB@ÏB=ó±B;_B8=
-B5aŒB2jB/«B,ÏÇB)ôuB'#B$=ÑB!bB
-.B²Â¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B|Û0ByÿÞBw$BtI;BqméBnBk·FBhÛôBf ¢Bc%QB`IÿB]n­BZ\BWž
-BTÜ¹BRgBO&BLJÄBIorBF!BCžÏB@Ý}B>,B;&ÚB8KB5p7B2åB/¹B,ÞBB*ðB''B$LMB!pûB
-©BºXBßB
-¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}B|é«BzYBw3BtW¶Bq|eBn¡BkÅÁBhêoBf
-Bc3ÌB`XzB]})BZ¡×BWÆ
-BTë4BRãBO4BLY?BI}îBF¢BCÇJB@ëùB>§B;5UB8ZB5~²B2£aB/ÈB,ìœB*lB'6B$ZÈB!wB
-€%BÈÓBíB0B6ÞBbr¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}!úB|ø&Bz
-ÕBwABtf1BqàBn¯BkÔ=BhøëBf
-BcBGB`föB]€BZ°RBWÕBTù¯BR
-]BOC
-BLg»BIiBF±BCÕÆB@útB>"B;CÑB8hB5-B2±ÜB/ÖB,û9B*çB'DB$iDB!òB
-² B×OBûýB «BEYBjB
-¶B
-ºJ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}0uB}€Bz+RBwP Btt¯Bq]BnŸ
-BkâºBihBf,BcPÅB`usB]!BZŸÐBWã~BU,BR,ÛBOQBLv7BIæBF¿BCäCBAñB>- B;RNB8vüB5«B2ÀYB/åB-	¶B*.dB'SB$wÁB!oB
-Á
-BåÌB
-zB/)BS×Bx
-B
-3B
-ÁâBæB$¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}>ñB}Bz9ÍBw^|Bt*Bq§ØBnÌBkñ5BiãBf:Bc_@B`ïB]šBZÍKBWñùBUšBR;VBO`BL³BI©aBFÎBCòŸBAmB><B;`ÉB8
-xB5ª&B2ÎÔB/óB-1B*<ßB'aB$<B!ªëB
-ÏBôGBöB=€BbRBB
-«¯B
-Ð]Bõ
-BºB>hAþÓø¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}MlB}#BzHIBwl÷Bt¥Bq¶TBnÛBkÿ°Bi$_BfI
-Bcm»B`jB]·BZÛÇBX uBU%#BRIÑBOnBL.BI·ÜBFÜBD9BA%çB>JB;oEB8óB5ž¡B2ÝPB0þB-&¬B*K[B'p	B$·B!¹fB
-ÞB
-ÃB'qBLBpÎB|B
-º*B
-ÞÙBB(5BLãAþã#Aù,Aóš¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}[çB}2BzVÄBw{rBt !BqÄÏBné}Bl,Bi2ÚBfWBc|7B` åB]ÅBZêBBXðBU3BRXMBO|ûBL¡©BIÆXBFëBDŽBA4cB>YB;}¿B8¢nB5Ç
-B2ëËB0yB-5(B*YÖB'~B$£3B!ÇáB
-ìB
->B5ìBZBIB£÷B
-ÈŠB
-íTBB6±B[_Aÿ AùIwAóÔAíÜ1Aè3X¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}jbB}@Bze?BwîBt®BqÓJBn÷ùBl
-§BiAUBffBc²B`¯`B]ÔBZøœBX
-kBUBBRfÈBOwBL°%BIÔÓBFùBD
-0BABÞB>gB;;B8°éB5ÕB2úFB0
-õB-C£B*hQB' B$±®B!Ö\B
-û
-B
-¹BDgBiBÄB²sB
-×!B
-ûÏB ~BE,BiÚAÿ
-AùfnAó¯ËAíù'AèBAâáAÜã¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}xÝB}O
-BzsºBwhBtœBqáÆBotBl+"BiOÑBftBc-B`œÜB]âB[8BX+çBUPBRuCBOòBLŸ BIãOBGýBD,«BAQYB>vB;¶B8¿dB5äB3ÁB0-oB-R
-B*vÍB'{B$À)B!äØB	B
-.4BRãBwB?BÀîB
-åB
-
-KB.ùBS§BxVAÿ:AùeAóÌÂAî
-Aè_{Aâš×AÜò4A×;AÑž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}YB}]Bz5BwŠäBtËBqð@BoïBl9Bi^LBfúBc§©B`ÌWB]ñB[ŽBX:bBU_BR¿BOšmBLÍBIñÊBGxBD;'BA_ÕB>B;©1B8ÍàB5òB3<B0;ëB-`B*
-GB'©öB$Î¥B!óSBB
-<°Ba^B
-Bª»BÏiB
-ôB
-ÆB=tBb#BÑAÿVÿAù [Aóé·Aî3Aè|rAâÅÎAÝ+A×XAÑ¡äAËëAAÆBh¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÔB}lBz±Bwµ_BtÚ
-BqþŒBo#jBlHBilÇBfvBc¶$B`ÚÒB]ÿB[$/BXHÝBUmBR:BO¶èBLÛBJ EBG$óBDI¢BAnPB>ÿB;·­B8Ü[B6	B3%žB0JfB-oB*ÃB'žqB$ÝB"ÎB&}B
-K+BoÙBB¹6BÝäBB
-'ABKïBpBLAÿsõAùœQAô®AîP
-AègAââÅAÝ,"A×u~AÑŸÛAÌ7AÆQAÀñAºò¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}€OB}z~Bz,BwÃÚBtèBr
-7Bo1åBlVBi{BBfðBcÄB`éNB^
-üB[2ªBXWYBU|BR µBOÅdBLêBJÀBG3oBDX
-BA|ËB>¡zB;Æ(B8ê×B6
-B343B0XáB-}B*¢>B'ÆìB$ëB"IB4÷B
-YŠB~UB£BÇ±Bì`BB
-5ŒBZkBB£ÇAÿëAùÚHAô#¥AîmAè¶^Aâÿ»AÝIA×uAÑÛÒAÌ%.AÆnAÀ·çA»DAµJ¡A¯¡È¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}²ÊB}ùBz­§BwÒVBt÷Br²Bo@aBleBiœBf®lBcÓB`÷ÈB^
-wB[A&BXeÔBUBR¯1BOÓßBLøBJ
-<BGAêBDfBAGB>¯õB;Ô£B8ùRB6
- B3B¯B0g]B-
-B*°¹B'ÕhB$úB"
-ÄBCsB
-h!BÏB±~BÖ-BúÛBB
-D8BhæBB²CAÿ­âAù÷?Aô@AîøAèÓUAã
-±AÝfA×¯kAÑøÇAÌB%AÆAÀÔÞA»
-;AµgA¯°ôA©úQA€Qx¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÁFB}vBzŒ$BwàÓBuBr*0BoNÞBlsBi;BfŒéBcáBaFB^*ôB[O¢BXtQBU BRœ®BOâ\BM
-BJ+¹BGPgBDuBAÄB>ŸrB;ã!B9ÏB6,}B3Q,B0uÚB-B*¿7B'ãåB%B"-BBQðB
-vBMB¿ûBä©B	XB.B
-RµBwcBBÀÀAÿÊÜAú9Aô]AîŠóAèðOAã9¬AÝ	A×ÌeAÒÂAÌ_AÆš{AÀñÙA»;6AµA¯ÍïAªKA€`šAªA,¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ÏÁB}¥òBzÊ BwïNBuüBr8«Bo]YBlBiŠ¶BfËdBcðBaÁB^9oB[^
-BXÌBU§zBRÌ)BOðØBMBJ:4BG^ãBDBAš?B>ÌîB;ñB9JB6:ùB3_§B0UB-©B*Í²B'òaB%B";œB`kB
-
-B©ÈBÎvBó%BÓB<B
-a0B
-ßBªBÏ;AÿçÓAú10AôzAîÃéAé
-FAãV£AÝÿA×é\AÒ2¹AÌ|AÆÅrAÁÏA»X+Aµ¡A¯êæAª4BA€}AÆûAXAYµA°Ü¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}Þ=B}ŽmBzÙBwýÊBu"xBrG&BokÔBlBiµ1BfÙàBcþBa#<B^GëB[lBXGBUµöBRÚ€BOÿRBM$BJH°BGm^BD
-BA¶»B>ÛiB< B9$ÆB6ItB3n"B0ÑB-·B*Ü-B( ÜB%%B"J9BnçB
-BžCBÜòB B&NBJýB
-o«BYB¹BÝ·B eAúN&AôAîàßAé*=AãsAÝŒöAØSAÒO¯AÌ
-AÆâiAÁ+ÅA»u"AµŸA°ÛAªQ9A€AãòA-OAv«AÀA	eA`¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}ìžB}ÂèBzçBx
-EBu0óBrU¢BozPBlþBiÃ¬Bfè[Bd
-	Ba1žB^VfB[{BXÃBUÄqBRéBP
-ÎBM2|BJW*BG{ÙBD BAÅ6B>éäB<B93AB6WïB3|B0¡LB-ÅúB*ê©B(WB%4B"XŽB}bB
-¢BÆ¿BëmBB4ÊBYxB
-~&B¢ÕBÇBì1B àAúk
-AôŽyAîýÖAéG3AãAÝÙíAØ#IAÒlŠAÌ¶AÆÿ_AÁHŒA»AµÛuA°$ÒAªn/A€·A éAJFA¢AÜÿA&[AožAyr)An y¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B}û3B}ÑdBzöBxÀBu?oBrd
-BoËBl­zBiÒ(BföÖBdBa@3B^dáB[BX®>BUÒìBR÷BP
-IBM@÷BJeŠBGTBD¯BAÓ±B>ø`B<
-B9AŒB6fkB3B0¯ÇB-ÔvB*ù$B(
-ÒB%BB"g/BÝB
-°BÕ:BùéB
-BCEBgóB
-¢B±PBÕþBú­B [AúAôÑpAïÍAéd)Aã­AÝöãAØ@?AÒAÌÒùAÇ
-VAÁe³A»¯AµølA°AÉAª%A€ÔA
-ßAg;A°AùöACRA¯Ay¬An>ÑAbÑAWÛ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~	®B}ßßB{Bx)<BuMêBrrBoGBl»õBià£BgRBd* BaN®B^s\B[
-BXŒ¹BUáhBSBP*ÄBMOsBJt!BGÏBDœ~BAâ,B?ÚB<+B9P8B6tæB3B0ŸCB-âñB+B(,NB%PüB"uªBYB
-¿BãµBdB-BQÁBvoB
-
-B¿ËBäzB	(B -ÖAú¥
-AôîgAï7ÃAé AãÊ}AÞÙAØ]6AÒŠAÌïïAÇ9MAÁ©A»ÌA¶cA°^¿Aªš
-A€ñyA:ÕA2AÍAëA`IA©ŠAyæAnxŸAc
-yAW3AL0íA@ß=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~*B}îZB{Bx7·Bu\eBrBo¥ÂBlÊpBiïBgÍBd8{Ba]*B^ØB[ŠBXË4BUïãBSBP9@BM]îBJBG§KBDËùBAð§B?VB<:B9^²B6aB3šB0ÌŸB-ñlB+B(:ÉB%_wB"&BšÔB
-ÍBò1BßB;B`<BêB
-©BÎGBòõB£B <RAúÂAõ
-]AïTºAéAãçsAÞ0ÐAØz-AÒÃAÍ
-æAÇVCAÁA»èýA¶2YA°{¶AªÅA¥oAWÌA¡)Aê
-A3âA}?AÆAzñAn²«AcEeAWØ ALjÛA@ýA5OA*>¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~&¥B}üÕB{!BxF2BujàBrBoŽ=BlØìBiýBg"HBdF÷Bak¥B^SB[µBXÙ°BUþ^BS#
-BPG»BMliBJBGµÆBDÚtBAÿ#B?#ÑB<HB9m.B6ÜB3¶B0Û9B-ÿèB+$B(IDB%móB"¡B·OB
-ÛþB ¬B%ZBJ	Bn·BeB
-žBÜÂBpB&B JÍAúÞ÷Aõ(TAïq±Aé»
-AäjAÞMÇAØ#AÒàAÍ)ÝAÇs9AÁŒAŒóA¶OOA°­Aªâ	A¥+fAtÃAŸA|APÙA5AãAzYÞAnìAcSAX
-AL€ÇAA7A5Ê=A*\÷A
-ï±A¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~5 B~
-QB{/ÿBxT­Buy\Br
-BoÂžBlçgBj
-Bg0ÄBdUrBaz B^ÏB[Ã}BXè+BV
-ÚBS1BPV6BMzäBJBGÄABDèðBB
-B?2LB<VûB9{©B6 WB3ÅB0éŽB.bB+3B(WÀB%|nB"¡
-BÅËB
-êyB'B3ÖBXB}2B¡áB
-ÆBë=BìB4B YHAúûíAõEJAï§AéØAä!aAÞjœAØŽAÒýwAÍFÓAÇ0AÁÙAŒ"éA¶lFA°µ£AªþÿA¥H]A¹AÛA$sAmÏA·,A AzËAo&
-Ac¹@AXKúALÞµAAqoA6)A*äA)AŒYAO@ùúÆ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~CB~ÌB{>zBxc)Bu×Br¬
-BoÑ4BlõâBjBg??BdcíBaB^­JB[ÑøBXö§BVUBS@BPd²BM`BJ®BGÒŒBD÷kBB
-B?@ÈB<evB9$B6®ÓB3ÓB0ø/B.
-ÞB+AB(f:B%éB"¯BÔFB
-øôB
-£BBQBfÿB®B°\B
-Õ
-Bù¹B
-gBCB gÄAûäAõbAAï«AéôúAä>WAÞŽAØÑAÓmAÍcÊAÇ­'AÁöAŒ?àA¶=A°ÒA«öA¥eSA®¯Aø
-AAiAÆAÔ#A
-AzÍžAo`rAcó-AX
-çAM¢AA«\A6>A*ÐÑAcAöFA@ú7v@ã\ë@Ì¹¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B~RB~(IB{LøBxqŠBuTBr»Boß±Bm_Bj)BgMŒBdrjBaB^»ÇB[àvBY$BV)ÒBSNBPs/BMÝBJŒBGá:BEèBB*B?OEB<sóB9¢B6œPB3áþB1­B.+[B+P	B(tžB%fB"ŸBâÃB
-rB, BPÎBu}B+BŸÙB
-ãB	6B,äBQB vAAû5ßAõ;AïÈAêõAä[QAÞ€®AØî
-AÓ7hAÍÅAÇÊ!AÂ~AŒ\ÛA¶Š7A°ïA«8ñA¥MAËªAA^cA§ÁAñ
-A:zA{­AohAd-"AX¿ÜAMRAAåQA6x
-A+
-ÆAA0;AÂõ@ú«a@ãÐÕ@ÌöJ@¶¿@x^¿  ¿  ¿  ¿  ¿  ¿  B~`B~6ÅB{[sBx!Bu€ÐBrÉ~Boî,BmÛBj7Bg\7BdæBa¥B^ÊBB[îñBYBV8NBS\üBPªBMŠYBJËBGïµBEdBB9B?]ÀB<nB9§
-B6ËËB3ðzB1(B.9ÖB+^
-B(3B%§áB"ÌBñ>B
-ìB:B_JBøBšŠBÍUB
-òB	±B;`B`B ŒAûRÕAõ2AïåAê.ëAäxHAÞÁ¥AÙ
-AÓT^AÍ»AÇçAÂ0uAŒyÑA¶Ã.A±
-A«UçA¥DAè¡A1ýA{ZAÄ·AAWqA{AAoÔUAdgAXùÊAMAB>A6±ùA+D³A×nAj(Aüã@û:@äD¯@Íj$@¶@µ@Ú@dnD¿  ¿  ¿  ¿  B~o
-B~E?B{iîBxBu³KBr×ùBoüšBm!VBjFBgj³BdaBaŽB^ØŸB[ýlBY"BVFÉBSkwBP&BMŽÔBJÙBGþ1BE"ßBBGB?l<B<êB9µB6ÚFB3þõB1#£B.HRB+m B(®B%¶]B"Û
-Bÿ¹B
-$hBIBmÄBsB·"BÛÐB
- ~B	%-BIÛBnB 8AûoÌAõ¹)Að
-AêKâAä?AÞÞAÙ'øAÓqUAÍº±AÈAÂMkAŒÈA¶à%A±)A«rÞA¥Œ;A ANôAQAá­A+
-AtgA{{ApBAd üAY3·AMÆqABY,A6ëæA+~ A [A€A	6Ð@û@äž@ÍÝþ@·s@ (è@N]@dç€@72@	ëÊ¿  ¿  B~}B~S»B{xiBxBuÁÆBræuBp
-#Bm/ÑBjTBgy.BdÜBaÂB^ç9B\
-çBY0BVUDBSyòBP¡BMÃOBJçþBH
-¬BE1ZBBV	B?z·B<eB9ÄB6èÂB4
-pB12
-B.VÍB+{{B( *B%ÄØB"éB 5B
-2ãBWB|@B îBÅBêKB
-úB	3šBXVB}B ¡³AûÂAõÖAð|AêhÙAä²5AÞûAÙDïAÓKAÍ×šAÈ!AÂjaAŒ³ŸA¶ýA±FxA«ÕA¥Ù1A "AkëAµGAþ€AHA]A{µtApH/AdÚéAYm€AN ^ABA7%ÓA+žA KHAÞA	pœ@üï@å,d@ÎQÙ@·wM@ Â@Â7@eÏX@8A@
-e)?¹`%?=¥@B~
-B~b7B{äBx«BuÐABrôïBpBm>MBjbûBg©Bd¬XBaÑB^õŽB\cBY?BVc¿BSnBP­
-BMÑÊBJöyBH'BE?ÖBBdB?2B<­áB9ÒB6÷=B4ìB1@B.eHB+öB(®¥B%ÓSB"øB 
-°B
-A^Bf
-B»B¯iBÔBøÆB
-
-tB	B#BfÒBB °.Aû©¹AõóAð<rAê
-ÏAäÏ,AßAÙaåAÓ«BAÍôAÈ=ûAÂXAŒÐµA·A±cnA«¬ËA¥ö(A ?
-AáAÒ>AAd÷A®TA{ïaAp
-Ae×AY§AN:KABÍA7_ÀA+ò{A 
-5AðA	ªª@üzÉ@å >@ÎÅ³@·ë(@¡@6@f·
-@9õ@
-LÞ?»/??Ÿ=
-f$¿  B{{BxºBuÞŒBskBp(BmLÇBjqvBg%BdºÓBaßB_0B\(ÞBYMBVr;BSéBP»BMàFBKôBH)¢BENQBBrÿB?®B<Œ\B9á
-B7¹B4*gB1OB.sÄB+rB(œ B%áÎB#}B ++B
-OÚBtB6BœåBâBAB
-+ðB	PBuLBûB ŸªAûÆ¯Aö
-AðYiAê¢ÅAäì"Aß5AÙ~ÜAÓÈ9AÎAÈZòAÂ€OAŒí«A·7A±eA«ÉÁAŠ
-A \{A¥ØAï5A8AîAËKA|)OApŒ	AeNÃAYá~ANt9ACóA7­A,,hA ¿"AQÝA	ä@üî£@æ@Ï9@ž_@¡w@©ì@gÁ@9é©@
-4?Œþö?C)=ES?;ò¿
-¿  ¿  BuæSBsçBp6Bm[CBjñBg€BdÉNBaíýB_«B\7YBY\BV¶BS¥dBPÊBMîÁBKoBH8
-BE\ÌBBzB?Š)B<Ê×B9ïB74B48âB1]B.?B+ŠíB(ËB%ðJB#øB 9ŠB
-^UBB§²BÌ`BñBœB
-:kB	_BÈBšvB Í$AûãŠAö-Aðv_Aê¿ŒAå	AßRuAÙÒAÓå/AÎ.AÈwéAÂÁEAœ
-¢A·SÿA±[A«æžAŠ0A yqAÂÎA
-+AUAåAèAA|c<ApõöAe±AZkAN®%AC@àA7ÓA,fUA ùAÊA
-
-@ýb}@æò@Ï­g@žÒÜ@¡øQ@
-Æ@hu@:Ñ^@
-
-G?ŸÎ_?FÈa=@Y<°ø¿  ¿  ¿  ¿  Bp>,BmiÀBjmBg³
-Bd×ÊBaüxB_!'B\EÖBYjBV2BS³áBPØBMý=BK!ìBHFBEkHBB÷B?Ž¥B<ÙSB9þB7"°B4G_B1l
-B.»B+µjB(ÚB%þÆB##uB H#B
-lÑBB¶.BÚÜBÿB$9B
-HçB	mBDB¶òB Û¡Aü AöIûAðXAêÜµAå&AßonAÙžËAÔ'AÎKAÈáAÂÞ>Aœ'A·p÷A±ºTA¬±AŠM
-A jAßÇA)#ArA»ÝA:A|-Aq/çAeÂ¢AZU\ANèACzÑA8
-A, FA!3AÅ»A
-Xu@ýÖ_@æûÔ@Ð!I@¹FŸ@¢l3@š@in9@;¹"@
-?Àç?Jgr=º=2¿  ¿  ¿  ¿  ¿  ¿  BjBgÁBdæEBb
-ôB_/¢B\TPBYxÿBV®BSÂ\BPç
-BN
-¹BK0gBHUBEyÄBBrB?Ã B<çÏB:
-}B71+B4UÚB1zB.7B+ÃåB(èB&
-BB#1ðB VB
-{MBûBÄ©BéWBB2ŽB
-WcB	|B ¿BÅnB ê
-Aü
-AöfòAð°OAêù«AåCAßeAÙÕÁAÔ
-AÎh{AÈ±×AÂû4AœDA·îA±×KA¬ §AŠjA ³aAüœAFAwAØÓA"0A|×AqiÔAeüAZIAO"ACŽŸA8GyA,Ú3A!líAÿšA
-c@þJ:@ço¯@Ð#@¹º@¢à
-@@jUî@< Ö@ë¿?ÂmQ?ND=¹F=L1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BdíÜBboB_>
-B\bÌBYzBV¬(BSÐ×BPõBN4BK>âBHcBE?BB¬íB?ÑB<öJB:øB7?§B4dUB1B.­²B+Ò`B(÷B&œB#@kB eB
-ÈB®vBÓ%B÷ÓB
-BA/B
-eÞB	B¯;BÓéB øAü:AöèAðÍEAë¢Aå_ÿAß©[AÙòžAÔ<AÎ
-qAÈÎÎAÃ+AœaA·ªäA±ôAA¬=AŠûA ÐWAŽAcA¬mAõÊA?'A}Aq£ÂAf6|AZÉ6AO[ðACî«A8fA- A!ŠÛA9A
-ÌO@þŸ@çã@Ñý@º.r@£Sç@y\@k=¢@=@Ós?Ä<¹?Q¥=Ö
-Ê=¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B_EŽB\qGBYõBVº€BSßRBQ BN(¯BKM^BHr
-BEºBB»iB?àB=ÅB:)tB7N"B4rÐB1B.Œ-B+àÛB)B&*8B#NçB sB
-CBŒòBá BNB*ýBO«B
-tYB	Bœ¶BâdBAüWAö ßAðê;Aë3Aå|õAßÆRAÚ¯AÔY
-AÎ¢hAÈëÅAÃ5!Aœ~~A·ÇÛA²7A¬ZAŠ£ñA íNA6«AAÉdAÁA\
-A}JôAqÝ®AfpiA[$AOÞAD(A8»RA-N
-A!àÈAsA
-=@ÿ1î@èWc@Ñ|Ø@º¢L@£ÇÁ@í6@l%V@>p?@»(?Æ
-!?UCç=ó|V=ü§¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BYBVÉBSíÍBQ|BN7*BK[ØBHBE¥6BBÉäB?îB=AB:7ïB7\B4LB1¥úB.ÊšB+ïWB)B&8³B#]bB B
-Š¿BËmBðBÊB9xB^&B
-ÕB	§BÌ1BðßBAütyAöœÕAñ2AëPAåëAßãHAÚ,¥AÔvAÎ¿_AÉ»AÃRAœuA·äÑA²..A¬wAŠÀçA¡
-DAS¡AþAæ[A/·AyA}áArAfªVA[=AOÏËADbA8õ@A-úA"ŽA­oA
-@*@ÿ¥È@èË=@Ñð²@»'@€;@a@m
-
-@?Wô@¢Ü?ÇÛ?Xâž>9r=Œó5¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BSõeBQ øBNEŠBKjUBHBE³±BBØ`B?ýB=!œB:FkB7kB4ÈB1ŽvB.Ù%B+ýÓB)"B&G0B#kÞB B
-µ;BÙéBþB#FBGôBl£B
-QB	µÿBÚ®Bÿ\B$
-AüqAöÚÎAñ$+AëmAå¶äAà AAÚIAÔúAÎÜWAÉ%ŽAÃoAœžmAžÊA²K'A¬AŠÝàA¡'=ApA¹öASAL°A
-A}ŸÓArQAfäGA[wAP	ŒADvA9/1A-ÁìA"TŠAç`A
-zA 
-Õ@é?@Òd@»	@€¯~@Ôó@môÐ@@?ž@¡?É«?\Ê>µž=ÙéÁ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BNM=BKxÐBH~BEÂ-BBæÛB@
-B=08B:TçB7yB4CB1ÂòB.ç B,
-NB)0ýB&U«B#zYB B
-Ã¶BèdB
-B1ÁBVpB{
-B
-ÌB	Ä{Bé)B
-×B2Aü®hAö÷ÅAñA!Aë~AåÓÛAà
-7AÚfAÔ¯ñAÎùMAÉBªAÃAœÕdAž
-ÁA²h
-A¬±zAŠú×A¡D3AAÖíA IAiŠA³A}øÀArzAg
-5A[°ïAPC©ADÖdA9i
-A-ûØA"A!NA
-ŽA FÂ@é²ù@ÒØn@»ýã@¥#X@HÍ@nÜ@A'm@rV?Ëz|?` >%0þ=öàN¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BH¥BEÐšBBõVB@B=>³B:caB7B4¬¿B1ÑmB.öB,ÊB)?xB&d&B#ÕB ­B
-Ò1BöàBB@<BdëBB
-®HB	ÒöB÷€B
-SBAAüË_A÷ŒAñ^Aë§uAåðÑAà:.AÚAÔÌçAÏDAÉ_¡AÃšýAœòZAž;·A²
-A¬ÎqA§ÍA¡a*AªAóãA=@AAÏùA~2¬ArÅgAgX!A[êÜAP}AEQA9£
-A.5ÆA"ÈA[:A
-íõA °@ê&Ô@ÓLH@Œqœ@¥2@Œ§@oÄ8@B!@Z
-?ÍIå?c¿m>3¬E>	ëm¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BBüíB@(B=M.B:qÝB7B4»9B1ßèB/B,)EB)MóB&r¢B#PB »þB
-à­B[B*	BNžBsfBB
-ŒÃB	áqB B*ÎBO|AüèUA÷1±Añ{AëÄlAæ
-ÈAàW%AÚ AÔéÞAÏ3;AÉ|AÃÅôAŸQAžX­A²¢
-A¬ëgA§4ÄA¡~!AÇ}AÚAZ7A£AìðA~lArÿTAgA\$ÉAP·AEJ>A9ÜùA.o³A#mA(A
-'âA º@ê®@ÓÀ"@Œå@Š
-
-@0@p«í@BöÖ@AŸ?ÏN?g^>>B'>fŽ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B=TÅB:XB7¥B4ÉµB1îcB/B,7ÀB)\oB&
-B#¥ËB ÊzB
-ï(BÖB8
-B]3BáBŠB
-Ë>B	ïìBB9IB]øAýKA÷NšAñAëáaAæ*¿Aàt
-AÚœxAÕÕAÏP1AÉAÃâëAŸ,GAžu€A²¿A­]A§QºA¡AätA-ÑAw-AÀA
-	çA~ŠAs9AAgËüA\^¶APñqAE+A:åA.© A#<[AÏA
-aÏA ô@ë@Ô3ý@œYr@Š~æ@€\@q¡@CÞ@)s?Ðè·?jý>P¢Ó>&áû¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B7¬B4Ø1B1üßB/!B,F<B)jêB&B#ŽHB ØöB
-ý€B"SBGBk¯B^Bµ
-B
-ÙºB	þiB#BGÅBltAý"DA÷k¡AñŽýAëþZAæG·AàAÚÚqAÕ#ÎAÏm*AÉ¶AÃÿãAŸI@AžA²ÛùA­%VA§n³A¡žAlAJÉA&AÝA
-&ßA~àxAss2AhíA\§AQ+bAEŸ
-A:P×A.ãA#vKA	A
-ÁA.{@ëk@Ô§ß@œÍT@ŠòÉ@>@r{e@DÆO@7?Òž@?n#>_>5]C¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B2vB/0	B,T·B)yfB&B#ÂÂB çqB
-
- B0ÎBU|Bz+BÙBÃB
-è6B
-
-äB1BVABzïAý?;A÷AñÑôAìQAæd­Aà®
-AÚ÷gAÕ@ÃAÏ!AÉÓ~AÄ
-ÚAŸf7Až¯A²øðA­BMA§©A¡ÕA
-cAg¿A±
-AúyA
-CÖAeAs­ Ah?ÚA\ÒAQeOAEø	A:ÄA/
-~A#°9ABóA
-Õ­Ahh@ëöE@Õº@ŸA/@§f£@@sc@E®@øì?Ô©?r:õ>mb>CØ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B,\NB)áB&¬B#Ñ>B õìB
-B?IBcøBŠB­TBÒB
-ö±B
-_B@BdŒBjAý\1A÷¥AñîëAì8GAæ€AàËAÛ]AÕ]ºAÏ§AÉðsAÄ9ÑAŸ-AžÌA³çA­_CA§š A¡ñýA;YA¶AÎAoA
-`ÌATSAsç
-AhyÇA]
-AQ<AF1öA:Ä±A/WkA#ê&A|àA
-A¢U@ìj@Õ@Ÿµ@§Ú~@ÿò@tJÎ@F·@à ?ÖW?uÙÅ>|€>RSÍ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B&Ž&B#ß¹B!gB
-)BMÄBrrB!B»ÐBà~B
-,B
-)ÛBNBs7BæAýy(A÷Â
-Aò
-áAìU>AæAàç÷AÛ1TAÕz±AÏÄ
-AÊ
-jAÄVÇAŸ #AžéA³2ÝA­|:A§ÅA¢óAXPA¡­Aë	A4fA
-}ÃA?At úAh³ŽA]FnAQÙ)AFkäA:þA/XA$$A¶ÍA
-IAÜB@ìÝù@Ön@¿(ã@šNX@sÌ@u2@G}k@ÈT?Ø&z?yx>
-Hv>`Ï¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B!
-þB
-7B\?BîB¥BÊJBîùB
-šB
-8VB]B³BŠaAý
-A÷ß{Aò(ØAìr5Aæ»AáîAÛNKAÕ§AÏáAÊ*aAÄsœAŸœA¹wA³OÓA­1A§âA¢+êAuGAŸ£A AQ]A
-¹AÈ,AtZçAhí¡A]\ARAF¥ÐA;8A/ËFA$^ AðºA
-uA/@íQÓ@ÖwH@¿œ@šÂ2@ç§@v7@He @°	?Ùõã?}i>>oJ\¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Bc×BjBŽBØÇBýuB
-"#B
-FÒBkB/BŽÝAý³A÷üsAòEÐAì-AæØAá!çAÛkCAÕŽ AÏýýAÊGYAÄ¶AŸÚA¹#oA³lÌA­¶)A§ÿ
-A¢HãA?AÛA$ùAnUA
-·²AAtØAi'A]ºMARMAFßÂA;r|A06A$ñA*¬A
-œfAP @íÅµ@Öë+@À@©6@[@wü@ILä@Í?ÛÅl?[=>Ä>>}Å€¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B»¯BçBB
-ðB
-0B
-UMByûBªBÃYAýÐAøjAòbÇAì¬#AæõAá>ÝAÛ:AÕÑAÐóAÊdPAÄ­­AŸ÷	A¹@fA³ÃA­ÓAš
-|A¢eÙA¯5AøAAïALA
-Ô©A
-AtÎÅAiaA]ô:ARôAG¯A;¬iA0?$A$ÑÞAdA
-÷SA@î9@×_@Àz@©©ï@Ïc@wé°@J4@
-?ÝÕ?*Š>â> v¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BB
-?B
-cÈBwB­%BÑÓAýíAø6aAòœAìÉAçwAá[ÓAÛ¥0AÕîAÐ7êAÊGAÄÊ£A¿ A¹]]A³Š¹A­ðAš9sA¢ÏAÌ,AA^åAšCA
-ñA:üAu²AimA^.'ARÀáAGSA;æVA0yA%
-ËAA1@AÃú@î­j@×Òß@ÀøT@ª
-É@C>@xÑe@K
-M@
-g6?ßd=?ú>¢?
->^¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  B
-k_BòB» BàOAþ	ûAøSWAòŽAìæAç/mAáxÊAÛÂ'AÖ
-AÐTàAÊ=AÄçA¿0÷A¹zSA³Ã°A®
-
-AšViA¢ÆAé#A2A{ÜAÅ9AAWòAuBAiÕYA^hARúÏAGA< CA0²þA%EžAØsAk-Aýè@ï!D@ØF¹@Ál.@ª£@·@y¹@L@
-Nê?á3Š?
-Éx>©}*>œ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  BÃ7BîÊAþ&ñAøpNAò¹«AíAçLdAáÁAÛß
-AÖ(zAÐq×AÊ»3AÅA¿MíA¹JA³à§A®*Ašs`A¢ŒœAAOvAÓAâ/A+AtéAu|AjGA^¢AS4»AGÇvA<Z1A0ìëA%¥A`A¥A7Õ@ï@Øº@Áà@«}@*ò@z Í@Lë¶@6?ã?á>°ºÍ>Ùb¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  Aþ6AøFAòÖ£Aí  Açi]Aá²¹AÛüAÖEsAÐÏAÊØ,AÅ!A¿jåA¹ŽBA³ýA®FüAšYA¢ÙµA#AloAµËAÿ(AH
-AáAu¶}AjI8A^ÛòASn­AHgA<!A1&ÜA%¹ALQAß
-AqÆ@ð	@Ù.u@ÂSë@«y_@Ô@{@MÓ{@ 
-c?äÒ?hk>·øñ>£¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AòåÏAí<öAçSAáÏ°AÜ
-AÖbiAÐ«ÆAÊõ#AÅ>A¿ÜA¹Ñ9AŽA®còAš­OA¢ö¬A@	AeAÒÂA
-Ae{A®ØAuðjAj%A_ßASšAH;TA<ÎA1`ÉA%óA>AùA«³@ð|Û@Ù¢P@ÂÇÅ@«í9@¯@|pG@N»/@!?æ¢?7Ó>¿6>ªT©¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AçAáìŠAÜ6AÖ`AÐÈœAËAÅ[vA¿€ÓA¹î/AŽ7A®éAšÊEA£¢A\ÿAŠ\Aï¹A9ArAËÏAv*XAjœA_OÌASâAHuAA=üA1¶A&-qAÀ+ARåAå @ððµ@Ú*@Ã;@¬a@@}Wú@O¢ä@!íÌ?èqj?<>Æt6>±J¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÜE/AÖVAÐå³AË/AÅxmA¿ÁÉAº
-&AŽTA®ßAšç<A£0AyõAÃRA
-¯AV
-AiAèÅAvdEAjöÿA_ºAT
-tAH¯.A=AéA1Ô£A&g^AúAÓA@ñd@Ú@Ã¯y@¬Ôî@úb@~?¯@P@"Õ?ê@Ó?Ö€>Í±Ú>žÏï¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÐôßAËLAÅcA¿ÞÀAº(
-AŽqyA®ºÖA©3A£MAìAàIA)¥AsAŒ_AŒAv2Ak0íA_Ã§ATVaAHé
-A={ÖA2A&¡KA4AÆÀAYz@ñØi@ÚýÞ@Ä#S@­HÈ@n=@'d@QrM@#œ6?ì<?Š
->Ôï~>À
-¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÅ€A¿ûžAºEAŽrA®×ÏA©!+A£jA³åAýAAFAûAÙWA"ŽAvØ#AkjÝA_ýATSAI#
-A=µÇA2HA&Û<AmöA ±Ak@òLK@ÛqÁ@Ä5@­Œª@â@@RZ@$€ú?íßÅ?u>Ü-¢>ÇK5¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AºTAAŽ«hA®ôÅA©>"A£AÐÛA8AcA¬ñAöNA?«AwAk€ËA`7
-ATÊ?AI\úA=ïµA2oA')A§äA:AÍX@òÀ&@Ûå@Å
-@®0
-@Uù@{n@SAÆ@%®?ï¯.?Dÿ>ãkE>ÎÚ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A¯ñA©[A£€uAíÒA7/AAÉèAEA\¡AwKýAkÞžA`qsAU-AIçA>)¡A2Œ\A'OAáÑAtAF@ó4 @ÜYu@Å~ê@®€_@ÉÓ@ïI@T)z@&tc?ñ~?i>êšé>ÕÆ}¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A£³¡A
-ÈAT%AAæßA0;AyAw
-êAl¥A`«_AU>AIÐÕA>cA2öIA'A
-ŸA®yAA3@ó§Û@ÜÍO@ÅòÄ@¯9@=®@c#@U.@'\?óN ?ãÒ>ñæ>Ý!¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AcQAºxAÕAM2AAw¿ØAlRA`åLAUxAJ
-ÁA>|A307A'ÂñA
-U«AèeA{ @ôŽ@ÝA*@Æf@¯@±@Öý@Uøã@(CÌ?õ
-i?³:>ù$1>äAÅ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AAj*A³AwùÈAlAa>AU±øAJD²A>×mA3j'A'üâA
-A"WAµ@ô@Ýµ
-@ÆÚ@¯ÿö@%k@Jß@Và§@)+?öìò?Ã? 1*>ëi¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AÂ³Ax3¶AlÆpAaY*AUëåAJ~ A?ZA3€A(6ÏA
-ÉA\DAîþ@õq@Þ(æ@ÇN[@°sÏ@D@Ÿº@WÈ\@*E?øŒ[?R,?Ïü>òœ
-¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AläÉAaAV%ÒAJžA?KGA3ÞA(pŒA
-vA1A(ë@õwK@ÞÀ@ÇÂ5@°çª@
-@2@X°@*úù?úÃ?!?nÍ>ùú®¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AVD+AJòzA?
-4A4îA(ª©A
-=dAÐ
-AbØ@õë%@ß@È6@±[@ù@Šn@YÄ@+â­?ü[,? ðý?
-
-? )¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A?£A4QàA(äA
-wTA
-AÊ@ö_@ß}@È©ñ@±Ïg@ôÛ@P@Z@,Êr?þ*µ?¢À?¬°?:û¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  A)óA
-±BACüAÖ¶@öÒâ@ßøW@É
-Ì@²CA@hµ@*@[g=@-²&?ÿú
-?€ï?K?ÙÌ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  AbUA€@÷FŒ@àl1@ÉŠ@²·@Ü@
-@\Nò@.Ú@ äÃ?Š_X?êU?
-x¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @÷n@àà
-@Ê@³*õ@Pj@
-uß@]6Š@/@Ìx?š.Á?'?q¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ÊB2@³Ð@ÄD@
-é¹@^
-[@0iC@Ž,?©þ*?
-'ø?¶B¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ þ@]@_@1Q@ñ?«Í³? Ç
-?U¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @_@28œ@¥?­
-?$eÝ?óç¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  @ý	?¯l
-?(®?
-ž¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ?)ê;?!1¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿  ¿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -32 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             B~
-B~záB~p€B~ffB~\)B~QìB~G®B~=qB~33B~(öB~
-žB~{B~
-=B~  B}õÃB}ë
-B}áHB}×
-B}ÌÍB}ÂB}žRB}®B}£×B}B}\B}
-B}záB}p€B}ffB}\)B}QìB}G®B}=qB}33B}(öB}
-žB}{B}
-=B}  B|õÃB|ë
-B|áHB|×
-B|ÌÍB|ÂB|žRB|®B|£×B|B|\B|
-B|záB|p€B|ffB|\)B|QìB|G®B|=qB|33B|(öB|
-žB|{B|
-=B|  Bz
-BzzáBzp€BzffBz\)BzQìBzG®Bz=qBz33Bz(öBz
-žBz{Bz
-=Bz  ByõÃByë
-ByáHBy×
-ByÌÍByÂByžRBy®By£×ByBy\By
-ByzáByp€ByffBy\)ByQìByG®By=qBy33By(öBy
-žBy{By
-=By  BxõÃBxë
-BxáHBx×
-BxÌÍBxÂBxžRBx®Bx£×BxBx\Bx
-BxzáBxp€BxffBx\)BxQìBxG®Bx=qBx33Bx(öBx
-žBx{Bx
-=Bx  Bv
-BvzáBvp€BvffBv\)BvQìBvG®Bv=qBv33Bv(öBv
-žBv{Bv
-=Bv  BuõÃBuë
-BuáHBu×
-BuÌÍBuÂBužRBu®Bu£×BuBu\Bu
-BuzáBup€BuffBu\)BuQìBuG®Bu=qBu33Bu(öBu
-žBu{Bu
-=Bu  BtõÃBtë
-BtáHBt×
-BtÌÍBtÂBtžRBt®Bt£×BtBt\Bt
-BtzáBtp€BtffBt\)BtQìBtG®Bt=qBt33Bt(öBt
-žBt{Bt
-=Bt  Br
-BrzáBrp€BrffBr\)BrQìBrG®Br=qBr33Br(öBr
-žBr{Br
-=Br  BqõÃBqë
-BqáHBq×
-BqÌÍBqÂBqžRBq®Bq£×BqBq\Bq
-BqzáBqp€BqffBq\)BqQìBqG®Bq=qBq33Bq(öBq
-žBq{Bq
-=Bq  BpõÃBpë
-BpáHBp×
-BpÌÍBpÂBpžRBp®Bp£×BpBp\Bp
-BpzáBpp€BpffBp\)BpQìBpG®Bp=qBp33Bp(öBp
-žBp{Bp
-=Bp  Bn
-BnzáBnp€BnffBn\)BnQìBnG®Bn=qBn33Bn(öBn
-žBn{Bn
-=Bn  BmõÃBmë
-BmáHBm×
-BmÌÍBmÂBmžRBm®Bm£×BmBm\Bm
-BmzáBmp€BmffBm\)BmQìBmG®Bm=qBm33Bm(öBm
-žBm{Bm
-=Bm  BlõÃBlë
-BláHBl×
-BlÌÍBlÂBlžRBl®Bl£×BlBl\Bl
-BlzáBlp€BlffBl\)BlQìBlG®Bl=qBl33Bl(öBl
-žBl{Bl
-=Bl  Bj
-BjzáBjp€BjffBj\)BjQìBjG®Bj=qBj33Bj(öBj
-žBj{Bj
-=Bj  BiõÃBië
-BiáHBi×
-BiÌÍBiÂBižRBi®Bi£×BiBi\Bi
-BizáBip€BiffBi\)BiQìBiG®Bi=qBi33Bi(öBi
-žBi{Bi
-=Bi  BhõÃBhë
-BháHBh×
-BhÌÍBhÂBhžRBh®Bh£×BhBh\Bh
-BhzáBhp€BhffBh\)BhQìBhG®Bh=qBh33Bh(öBh
-žBh{Bh
-=Bh  Bf
-BfzáBfp€BfffBf\)BfQìBfG®Bf=qBf33Bf(öBf
-žBf{Bf
-=Bf  BeõÃBeë
-BeáHBe×
-BeÌÍBeÂBežRBe®Be£×BeBe\Be
-BezáBep€BeffBe\)BeQìBeG®Be=qBe33Be(öBe
-žBe{Be
-=Be  BdõÃBdë
-BdáHBd×
-BdÌÍBdÂBdžRBd®Bd£×BdBd\Bd
-BdzáBdp€BdffBd\)BdQìBdG®Bd=qBd33Bd(öBd
-žBd{Bd
-=Bd  Bb
-BbzáBbp€BbffBb\)BbQìBbG®Bb=qBb33Bb(öBb
-žBb{Bb
-=Bb  BaõÃBaë
-BaáHBa×
-BaÌÍBaÂBažRBa®Ba£×BaBa\Ba
-BazáBap€BaffBa\)BaQìBaG®Ba=qBa33Ba(öBa
-žBa{Ba
-=Ba  B`õÃB`ë
-B`áHB`×
-B`ÌÍB`ÂB`žRB`®B`£×B`B`\B`
-B`záB`p€B`ffB`\)B`QìB`G®B`=qB`33B`(öB`
-žB`{B`
-=B`  B^
-B^záB^p€B^ffB^\)B^QìB^G®B^=qB^33B^(öB^
-žB^{B^
-=B^  B]õÃB]ë
-B]áHB]×
-B]ÌÍB]ÂB]žRB]®B]£×B]B]\B]
-B]záB]p€B]ffB]\)B]QìB]G®B]=qB]33B](öB]
-žB]{B]
-=B]  B\õÃB\ë
-B\áHB\×
-B\ÌÍB\ÂB\žRB\®B\£×B\B\\B\
-B\záB\p€B\ffB\\)B\QìB\G®B\=qB\33B\(öB\
-žB\{B\
-=B\  BZ
-BZzáBZp€BZffBZ\)BZQìBZG®BZ=qBZ33BZ(öBZ
-žBZ{BZ
-=BZ  BYõÃBYë
-BYáHBY×
-BYÌÍBYÂBYžRBY®BY£×BYBY\BY
-BYzáBYp€BYffBY\)BYQìBYG®BY=qBY33BY(öBY
-žBY{BY
-=BY  BXõÃBXë
-BXáHBX×
-BXÌÍBXÂBXžRBX®BX£×BXBX\BX
-BXzáBXp€BXffBX\)BXQìBXG®BX=qBX33BX(öBX
-žBX{BX
-=BX  BV
-BVzáBVp€BVffBV\)BVQìBVG®BV=qBV33BV(öBV
-žBV{BV
-=BV  BUõÃBUë
-BUáHBU×
-BUÌÍBUÂBUžRBU®BU£×BUBU\BU
-BUzáBUp€BUffBU\)BUQìBUG®BU=qBU33BU(öBU
-žBU{BU
-=BU  BTõÃBTë
-BTáHBT×
-BTÌÍBTÂBTžRBT®BT£×BTBT\BT
-BTzáBTp€BTffBT\)BTQìBTG®BT=qBT33BT(öBT
-žBT{BT
-=BT  BR
-BRzáBRp€BRffBR\)BRQìBRG®BR=qBR33BR(öBR
-žBR{BR
-=BR  BQõÃBQë
-BQáHBQ×
-BQÌÍBQÂBQžRBQ®BQ£×BQBQ\BQ
-BQzáBQp€BQffBQ\)BQQìBQG®BQ=qBQ33BQ(öBQ
-žBQ{BQ
-=BQ  BPõÃBPë
-BPáHBP×
-BPÌÍBPÂBPžRBP®BP£×BPBP\BP
-BPzáBPp€BPffBP\)BPQìBPG®BP=qBP33BP(öBP
-žBP{BP
-=BP  BN
-BNzáBNp€BNffBN\)BNQìBNG®BN=qBN33BN(öBN
-žBN{BN
-=BN  BMõÃBMë
-BMáHBM×
-BMÌÍBMÂBMžRBM®BM£×BMBM\BM
-BMzáBMp€BMffBM\)BMQìBMG®BM=qBM33BM(öBM
-žBM{BM
-=BM  BLõÃBLë
-BLáHBL×
-BLÌÍBLÂBLžRBL®BL£×BLBL\BL
-BLzáBLp€BLffBL\)BLQìBLG®BL=qBL33BL(öBL
-žBL{BL
-=BL  BJ
-BJzáBJp€BJffBJ\)BJQìBJG®BJ=qBJ33BJ(öBJ
-žBJ{BJ
-=BJ  BIõÃBIë
-BIáHBI×
-BIÌÍBIÂBIžRBI®BI£×BIBI\BI
-BIzáBIp€BIffBI\)BIQìBIG®BI=qBI33BI(öBI
-žBI{BI
-=BI  BHõÃBHë
-BHáHBH×
-BHÌÍBHÂBHžRBH®BH£×BHBH\BH
-BHzáBHp€BHffBH\)BHQìBHG®BH=qBH33BH(öBH
-žBH{BH
-=BH  BF
-BFzáBFp€BFffBF\)BFQìBFG®BF=qBF33BF(öBF
-žBF{BF
-=BF  BEõÃBEë
-BEáHBE×
-BEÌÍBEÂBEžRBE®BE£×BEBE\BE
-BEzáBEp€BEffBE\)BEQìBEG®BE=qBE33BE(öBE
-žBE{BE
-=BE  BDõÃBDë
-BDáHBD×
-BDÌÍBDÂBDžRBD®BD£×BDBD\BD
-BDzáBDp€BDffBD\)BDQìBDG®BD=qBD33BD(öBD
-žBD{BD
-=BD  BB
-BBzáBBp€BBffBB\)BBQìBBG®BB=qBB33BB(öBB
-žBB{BB
-=BB  BAõÃBAë
-BAáHBA×
-BAÌÍBAÂBAžRBA®BA£×BABA\BA
-BAzáBAp€BAffBA\)BAQìBAG®BA=qBA33BA(öBA
-žBA{BA
-=BA  B@õÃB@ë
-B@áHB@×
-B@ÌÍB@ÂB@žRB@®B@£×B@B@\B@
-B@záB@p€B@ffB@\)B@QìB@G®B@=qB@33B@(öB@
-žB@{B@
-=B@  B>
-B>záB>p€B>ffB>\)B>QìB>G®B>=qB>33B>(öB>
-žB>{B>
-=B>  B=õÃB=ë
-B=áHB=×
-B=ÌÍB=ÂB=žRB=®B=£×B=B=\B=
-B=záB=p€B=ffB=\)B=QìB=G®B==qB=33B=(öB=
-žB={B=
-=B=  B<õÃB<ë
-B<áHB<×
-B<ÌÍB<ÂB<žRB<®B<£×B<B<\B<
-B<záB<p€B<ffB<\)B<QìB<G®B<=qB<33B<(öB<
-žB<{B<
-=B<  B:
-B:záB:p€B:ffB:\)B:QìB:G®B:=qB:33B:(öB:
-žB:{B:
-=B:  B9õÃB9ë
-B9áHB9×
-B9ÌÍB9ÂB9žRB9®B9£×B9B9\B9
-B9záB9p€B9ffB9\)B9QìB9G®B9=qB933B9(öB9
-žB9{B9
-=B9  B8õÃB8ë
-B8áHB8×
-B8ÌÍB8ÂB8žRB8®B8£×B8B8\B8
-B8záB8p€B8ffB8\)B8QìB8G®B8=qB833B8(öB8
-žB8{B8
-=B8  B6
-B6záB6p€B6ffB6\)B6QìB6G®B6=qB633B6(öB6
-žB6{B6
-=B6  B5õÃB5ë
-B5áHB5×
-B5ÌÍB5ÂB5žRB5®B5£×B5B5\B5
-B5záB5p€B5ffB5\)B5QìB5G®B5=qB533B5(öB5
-žB5{B5
-=B5  B4õÃB4ë
-B4áHB4×
-B4ÌÍB4ÂB4žRB4®B4£×B4B4\B4
-B4záB4p€B4ffB4\)B4QìB4G®B4=qB433B4(öB4
-žB4{B4
-=B4  B2
-B2záB2p€B2ffB2\)B2QìB2G®B2=qB233B2(öB2
-žB2{B2
-=B2  B1õÃB1ë
-B1áHB1×
-B1ÌÍB1ÂB1žRB1®B1£×B1B1\B1
-B1záB1p€B1ffB1\)B1QìB1G®B1=qB133B1(öB1
-žB1{B1
-=B1  B0õÃB0ë
-B0áHB0×
-B0ÌÍB0ÂB0žRB0®B0£×B0B0\B0
-B0záB0p€B0ffB0\)B0QìB0G®B0=qB033B0(öB0
-žB0{B0
-=B0  B.
-B.záB.p€B.ffB.\)B.QìB.G®B.=qB.33B.(öB.
-žB.{B.
-=B.  B-õÃB-ë
-B-áHB-×
-B-ÌÍB-ÂB-žRB-®B-£×B-B-\B-
-B-záB-p€B-ffB-\)B-QìB-G®B-=qB-33B-(öB-
-žB-{B-
-=B-  B,õÃB,ë
-B,áHB,×
-B,ÌÍB,ÂB,žRB,®B,£×B,B,\B,
-B,záB,p€B,ffB,\)B,QìB,G®B,=qB,33B,(öB,
-žB,{B,
-=B,  B*
-B*záB*p€B*ffB*\)B*QìB*G®B*=qB*33B*(öB*
-žB*{B*
-=B*  B)õÃB)ë
-B)áHB)×
-B)ÌÍB)ÂB)žRB)®B)£×B)B)\B)
-B)záB)p€B)ffB)\)B)QìB)G®B)=qB)33B)(öB)
-žB){B)
-=B)  B(õÃB(ë
-B(áHB(×
-B(ÌÍB(ÂB(žRB(®B(£×B(B(\B(
-B(záB(p€B(ffB(\)B(QìB(G®B(=qB(33B((öB(
-žB({B(
-=B(  B&
-B&záB&p€B&ffB&\)B&QìB&G®B&=qB&33B&(öB&
-žB&{B&
-=B&  B%õÃB%ë
-B%áHB%×
-B%ÌÍB%ÂB%žRB%®B%£×B%B%\B%
-B%záB%p€B%ffB%\)B%QìB%G®B%=qB%33B%(öB%
-žB%{B%
-=B%  B$õÃB$ë
-B$áHB$×
-B$ÌÍB$ÂB$žRB$®B$£×B$B$\B$
-B$záB$p€B$ffB$\)B$QìB$G®B$=qB$33B$(öB$
-žB${B$
-=B$  B"
-B"záB"p€B"ffB"\)B"QìB"G®B"=qB"33B"(öB"
-žB"{B"
-=B"  B!õÃB!ë
-B!áHB!×
-B!ÌÍB!ÂB!žRB!®B!£×B!B!\B!
-B!záB!p€B!ffB!\)B!QìB!G®B!=qB!33B!(öB!
-žB!{B!
-=B!  B õÃB ë
-B áHB ×
-B ÌÍB ÂB žRB ®B £×B B \B 
-B záB p€B ffB \)B QìB G®B =qB 33B (öB 
-žB {B 
-=B   B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-=B
-  B
-õÃB
-ë
-B
-áHB
-×
-B
-ÌÍB
-ÂB
-žRB
-®B
-£×B
-B
-\B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B
-
-B
-záB
-p€B
-ffB
-\)B
-QìB
-G®B
-=qB
-33B
-(öB
-
-žB
-{B
-
-=B
-  B	õÃB	ë
-B	áHB	×
-B	ÌÍB	ÂB	žRB	®B	£×B	B	\B	
-B	záB	p€B	ffB	\)B	QìB	G®B	=qB	33B	(öB	
-žB	{B	
-=B	  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  BõÃBë
-BáHB×
-BÌÍBÂBžRB®B£×BB\B
-BzáBp€BffB\)BQìBG®B=qB33B(öB
-žB{B
-=B  B õÃB ë
-B áHB ×
-B ÌÍB ÂB žRB ®B £×B B \B 
-B záB p€B ffB \)B QìB G®B =qB 33B (öB 
-žB {B 
-=B   Aý
-=AüõÃAüáHAüÌÍAüžRAü£×Aü\AüzáAüffAüQìAü=qAü(öAü{Aü  Aûë
-Aû×
-AûÂAû®AûAû
-Aûp€Aû\)AûG®Aû33Aû
-žAû
-=AúõÃAúáHAúÌÍAúžRAú£×Aú\AúzáAúffAúQìAú=qAú(öAú{Aú  Aùë
-Aù×
-AùÂAù®AùAù
-Aùp€Aù\)AùG®Aù33Aù
-žAù
-=AøõÃAøáHAøÌÍAøžRAø£×Aø\AøzáAøffAøQìAø=qAø(öAø{Aø  Aõ
-=AôõÃAôáHAôÌÍAôžRAô£×Aô\AôzáAôffAôQìAô=qAô(öAô{Aô  Aóë
-Aó×
-AóÂAó®AóAó
-Aóp€Aó\)AóG®Aó33Aó
-žAó
-=AòõÃAòáHAòÌÍAòžRAò£×Aò\AòzáAòffAòQìAò=qAò(öAò{Aò  Añë
-Añ×
-AñÂAñ®AñAñ
-Añp€Añ\)AñG®Añ33Añ
-žAñ
-=AðõÃAðáHAðÌÍAðžRAð£×Að\AðzáAðffAðQìAð=qAð(öAð{Að  Aí
-=AìõÃAìáHAìÌÍAìžRAì£×Aì\AìzáAìffAìQìAì=qAì(öAì{Aì  Aëë
-Aë×
-AëÂAë®AëAë
-Aëp€Aë\)AëG®Aë33Aë
-žAë
-=AêõÃAêáHAêÌÍAêžRAê£×Aê\AêzáAêffAêQìAê=qAê(öAê{Aê  Aéë
-Aé×
-AéÂAé®AéAé
-Aép€Aé\)AéG®Aé33Aé
-žAé
-=AèõÃAèáHAèÌÍAèžRAè£×Aè\AèzáAèffAèQìAè=qAè(öAè{Aè  Aå
-=AäõÃAäáHAäÌÍAäžRAä£×Aä\AäzáAäffAäQìAä=qAä(öAä{Aä  Aãë
-Aã×
-AãÂAã®AãAã
-Aãp€Aã\)AãG®Aã33Aã
-žAã
-=AâõÃAâáHAâÌÍAâžRAâ£×Aâ\AâzáAâffAâQìAâ=qAâ(öAâ{Aâ  Aáë
-Aá×
-AáÂAá®AáAá
-Aáp€Aá\)AáG®Aá33Aá
-žAá
-=AàõÃAàáHAàÌÍAàžRAà£×Aà\AàzáAàffAàQìAà=qAà(öAà{Aà  AÝ
-=AÜõÃAÜáHAÜÌÍAÜžRAÜ£×AÜ\AÜzáAÜffAÜQìAÜ=qAÜ(öAÜ{AÜ  AÛë
-AÛ×
-AÛÂAÛ®AÛAÛ
-AÛp€AÛ\)AÛG®AÛ33AÛ
-žAÛ
-=AÚõÃAÚáHAÚÌÍAÚžRAÚ£×AÚ\AÚzáAÚffAÚQìAÚ=qAÚ(öAÚ{AÚ  AÙë
-AÙ×
-AÙÂAÙ®AÙAÙ
-AÙp€AÙ\)AÙG®AÙ33AÙ
-žAÙ
-=AØõÃAØáHAØÌÍAØžRAØ£×AØ\AØzáAØffAØQìAØ=qAØ(öAØ{AØ  AÕ
-=AÔõÃAÔáHAÔÌÍAÔžRAÔ£×AÔ\AÔzáAÔffAÔQìAÔ=qAÔ(öAÔ{AÔ  AÓë
-AÓ×
-AÓÂAÓ®AÓAÓ
-AÓp€AÓ\)AÓG®AÓ33AÓ
-žAÓ
-=AÒõÃAÒáHAÒÌÍAÒžRAÒ£×AÒ\AÒzáAÒffAÒQìAÒ=qAÒ(öAÒ{AÒ  AÑë
-AÑ×
-AÑÂAÑ®AÑAÑ
-AÑp€AÑ\)AÑG®AÑ33AÑ
-žAÑ
-=AÐõÃAÐáHAÐÌÍAÐžRAÐ£×AÐ\AÐzáAÐffAÐQìAÐ=qAÐ(öAÐ{AÐ  AÍ
-=AÌõÃAÌáHAÌÌÍAÌžRAÌ£×AÌ\AÌzáAÌffAÌQìAÌ=qAÌ(öAÌ{AÌ  AËë
-AË×
-AËÂAË®AËAË
-AËp€AË\)AËG®AË33AË
-žAË
-=AÊõÃAÊáHAÊÌÍAÊžRAÊ£×AÊ\AÊzáAÊffAÊQìAÊ=qAÊ(öAÊ{AÊ  AÉë
-AÉ×
-AÉÂAÉ®AÉAÉ
-AÉp€AÉ\)AÉG®AÉ33AÉ
-žAÉ
-=AÈõÃAÈáHAÈÌÍAÈžRAÈ£×AÈ\AÈzáAÈffAÈQìAÈ=qAÈ(öAÈ{AÈ  AÅ
-=AÄõÃAÄáHAÄÌÍAÄžRAÄ£×AÄ\AÄzáAÄffAÄQìAÄ=qAÄ(öAÄ{AÄ  AÃë
-AÃ×
-AÃÂAÃ®AÃAÃ
-AÃp€AÃ\)AÃG®AÃ33AÃ
-žAÃ
-=AÂõÃAÂáHAÂÌÍAÂžRAÂ£×AÂ\AÂzáAÂffAÂQìAÂ=qAÂ(öAÂ{AÂ  AÁë
-AÁ×
-AÁÂAÁ®AÁAÁ
-AÁp€AÁ\)AÁG®AÁ33AÁ
-žAÁ
-=AÀõÃAÀáHAÀÌÍAÀžRAÀ£×AÀ\AÀzáAÀffAÀQìAÀ=qAÀ(öAÀ{AÀ  Aœ
-=AŒõÃAŒáHAŒÌÍAŒžRAŒ£×AŒ\AŒzáAŒffAŒQìAŒ=qAŒ(öAŒ{AŒ  A»ë
-A»×
-A»ÂA»®A»A»
-A»p€A»\)A»G®A»33A»
-žA»
-=AºõÃAºáHAºÌÍAºžRAº£×Aº\AºzáAºffAºQìAº=qAº(öAº{Aº  A¹ë
-A¹×
-A¹ÂA¹®A¹A¹
-A¹p€A¹\)A¹G®A¹33A¹
-žA¹
-=AžõÃAžáHAžÌÍAžžRAž£×Až\AžzáAžffAžQìAž=qAž(öAž{Až  Aµ
-=AŽõÃAŽáHAŽÌÍAŽžRAŽ£×AŽ\AŽzáAŽffAŽQìAŽ=qAŽ(öAŽ{AŽ  A³ë
-A³×
-A³ÂA³®A³A³
-A³p€A³\)A³G®A³33A³
-žA³
-=A²õÃA²áHA²ÌÍA²žRA²£×A²\A²záA²ffA²QìA²=qA²(öA²{A²  A±ë
-A±×
-A±ÂA±®A±A±
-A±p€A±\)A±G®A±33A±
-žA±
-=A°õÃA°áHA°ÌÍA°žRA°£×A°\A°záA°ffA°QìA°=qA°(öA°{A°  A­
-=A¬õÃA¬áHA¬ÌÍA¬žRA¬£×A¬\A¬záA¬ffA¬QìA¬=qA¬(öA¬{A¬  A«ë
-A«×
-A«ÂA«®A«A«
-A«p€A«\)A«G®A«33A«
-žA«
-=AªõÃAªáHAªÌÍAªžRAª£×Aª\AªzáAªffAªQìAª=qAª(öAª{Aª  A©ë
-A©×
-A©ÂA©®A©A©
-A©p€A©\)A©G®A©33A©
-žA©
-=AšõÃAšáHAšÌÍAšžRAš£×Aš\AšzáAšffAšQìAš=qAš(öAš{Aš  A¥
-=A€õÃA€áHA€ÌÍA€žRA€£×A€\A€záA€ffA€QìA€=qA€(öA€{A€  A£ë
-A£×
-A£ÂA£®A£A£
-A£p€A£\)A£G®A£33A£
-žA£
-=A¢õÃA¢áHA¢ÌÍA¢žRA¢£×A¢\A¢záA¢ffA¢QìA¢=qA¢(öA¢{A¢  A¡ë
-A¡×
-A¡ÂA¡®A¡A¡
-A¡p€A¡\)A¡G®A¡33A¡
-žA¡
-=A õÃA áHA ÌÍA žRA £×A \A záA ffA QìA =qA (öA {A   A
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  A
-
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Aë
-A×
-AÂA®AA
-Ap€A\)AG®A33A
-žA
-=AõÃAáHAÌÍAžRA£×A\AzáAffAQìA=qA(öA{A  Az{Ayë
-AyÂAyAyp€AyG®Ay
-žAxõÃAxÌÍAx£×AxzáAxQìAx(öAx  Aw×
-Aw®Aw
-Aw\)Aw33Aw
-=AváHAvžRAv\AvffAv=qAv{Auë
-AuÂAuAup€AuG®Au
-žAtõÃAtÌÍAt£×AtzáAtQìAt(öAt  As×
-As®As
-As\)As33As
-=AráHAržRAr\ArffAr=qAr{Aqë
-AqÂAqAqp€AqG®Aq
-žApõÃApÌÍAp£×ApzáApQìAp(öAp  Aj{Aië
-AiÂAiAip€AiG®Ai
-žAhõÃAhÌÍAh£×AhzáAhQìAh(öAh  Ag×
-Ag®Ag
-Ag\)Ag33Ag
-=AfáHAfžRAf\AfffAf=qAf{Aeë
-AeÂAeAep€AeG®Ae
-žAdõÃAdÌÍAd£×AdzáAdQìAd(öAd  Ac×
-Ac®Ac
-Ac\)Ac33Ac
-=AbáHAbžRAb\AbffAb=qAb{Aaë
-AaÂAaAap€AaG®Aa
-žA`õÃA`ÌÍA`£×A`záA`QìA`(öA`  AZ{AYë
-AYÂAYAYp€AYG®AY
-žAXõÃAXÌÍAX£×AXzáAXQìAX(öAX  AW×
-AW®AW
-AW\)AW33AW
-=AVáHAVžRAV\AVffAV=qAV{AUë
-AUÂAUAUp€AUG®AU
-žATõÃATÌÍAT£×ATzáATQìAT(öAT  AS×
-AS®AS
-AS\)AS33AS
-=ARáHARžRAR\ARffAR=qAR{AQë
-AQÂAQAQp€AQG®AQ
-žAPõÃAPÌÍAP£×APzáAPQìAP(öAP  AJ{AIë
-AIÂAIAIp€AIG®AI
-žAHõÃAHÌÍAH£×AHzáAHQìAH(öAH  AG×
-AG®AG
-AG\)AG33AG
-=AFáHAFžRAF\AFffAF=qAF{AEë
-AEÂAEAEp€AEG®AE
-žADõÃADÌÍAD£×ADzáADQìAD(öAD  AC×
-AC®AC
-AC\)AC33AC
-=ABáHABžRAB\ABffAB=qAB{AAë
-AAÂAAAAp€AAG®AA
-žA@õÃA@ÌÍA@£×A@záA@QìA@(öA@  A:{A9ë
-A9ÂA9A9p€A9G®A9
-žA8õÃA8ÌÍA8£×A8záA8QìA8(öA8  A7×
-A7®A7
-A7\)A733A7
-=A6áHA6žRA6\A6ffA6=qA6{A5ë
-A5ÂA5A5p€A5G®A5
-žA4õÃA4ÌÍA4£×A4záA4QìA4(öA4  A3×
-A3®A3
-A3\)A333A3
-=A2áHA2žRA2\A2ffA2=qA2{A1ë
-A1ÂA1A1p€A1G®A1
-žA0õÃA0ÌÍA0£×A0záA0QìA0(öA0  A*{A)ë
-A)ÂA)A)p€A)G®A)
-žA(õÃA(ÌÍA(£×A(záA(QìA((öA(  A'×
-A'®A'
-A'\)A'33A'
-=A&áHA&žRA&\A&ffA&=qA&{A%ë
-A%ÂA%A%p€A%G®A%
-žA$õÃA$ÌÍA$£×A$záA$QìA$(öA$  A#×
-A#®A#
-A#\)A#33A#
-=A"áHA"žRA"\A"ffA"=qA"{A!ë
-A!ÂA!A!p€A!G®A!
-žA õÃA ÌÍA £×A záA QìA (öA   A{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A
-{A	ë
-A	ÂA	A	p€A	G®A	
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žAõÃAÌÍA£×AzáAQìA(öA  A×
-A®A
-A\)A33A
-=AáHAžRA\AffA=qA{Aë
-AÂAAp€AG®A
-žA õÃA ÌÍA £×A záA QìA (öA   @ô(ö@ó×
-@ó
-@ó33@òáH@ò\@ò=q@ñë
-@ñ@ñG®@ðõÂ@ð£×@ðQì@ð  @ï®@ï\)@ï
-=@îžR@îff@î{@íÂ@íp€@í
-ž@ìÌÍ@ìzá@ì(ö@ë×
-@ë
-@ë33@êáH@ê\@ê=q@éë
-@é@éG®@èõÃ@è£×@èQì@è  @ç®@ç\)@ç
-=@æžR@æff@æ{@åÂ@åp€@å
-ž@äÌÍ@äzá@ä(ö@ã×
-@ã
-@ã33@âáH@â\@â=q@áë
-@á@áG®@àõÃ@à£×@àQì@à  @Ô(ö@Ó×
-@Ó
-@Ó33@ÒáH@Ò\@Ò=q@Ñë
-@Ñ@ÑG®@ÐõÂ@Ð£×@ÐQì@Ð  @Ï®@Ï\)@Ï
-=@ÎžR@Îff@Î{@ÍÂ@Íp€@Í
-ž@ÌÌÍ@Ìzá@Ì(ö@Ë×
-@Ë
-@Ë33@ÊáH@Ê\@Ê=q@Éë
-@É@ÉG®@ÈõÃ@È£×@ÈQì@È  @Ç®@Ç\)@Ç
-=@ÆžR@Æff@Æ{@ÅÂ@Åp€@Å
-ž@ÄÌÍ@Äzá@Ä(ö@Ã×
-@Ã
-@Ã33@ÂáH@Â\@Â=q@Áë
-@Á@ÁG®@ÀõÃ@À£×@ÀQì@À  @Ž(ö@³×
-@³
-@³33@²áH@²\@²=q@±ë
-@±@±G®@°õÂ@°£×@°Qì@°  @¯®@¯\)@¯
-=@®žR@®ff@®{@­Â@­p€@­
-ž@¬ÌÍ@¬zá@¬(ö@«×
-@«
-@«33@ªáH@ª\@ª=q@©ë
-@©@©G®@šõÃ@š£×@šQì@š  @§®@§\)@§
-=@ŠžR@Šff@Š{@¥Â@¥p€@¥
-ž@€ÌÍ@€zá@€(ö@£×
-@£
-@£33@¢áH@¢\@¢=q@¡ë
-@¡@¡G®@ õÃ@ £×@ Qì@   @(ö@×
-@
-@33@áH@\@=q@ë
-@@G®@õÂ@£×@Qì@  @®@\)@
-=@žR@ff@{@Â@p€@
-ž@ÌÍ@zá@(ö@×
-@
-@33@áH@\@=q@ë
-@@G®@õÃ@£×@Qì@  @®@\)@
-=@žR@ff@{@
-Â@
-p€@
-
-ž@ÌÍ@zá@(ö@×
-@
-@33@áH@\@=q@ë
-@@G®@õÃ@£×@Qì@  @hQì@g®@g
->@fff@eÂ@e
-ž@dzá@c×
-@c33@b\@aë
-@aG®@`£×@`  @_\)@^žR@^{@]p€@\ÌÍ@\(ö@[
-@ZáH@Z=q@Y@XõÂ@XQì@W®@W
->@Vff@UÂ@U
-ž@Tzá@S×
-@S33@R\@Që
-@QG®@P£×@P  @O\)@NžR@N{@Mp€@LÌÍ@L(ö@K
-@JáH@J=q@I@HõÃ@HQì@G®@G
-=@Fff@EÂ@E
-ž@Dzá@C×
-@C33@B\@Aë
-@AG®@@£×@@  @(Qì@'®@'
->@&ff@%Â@%
-ž@$zá@#×
-@#33@"\@!ë
-@!G®@ £×@   @\)@
-žR@
-{@
-p€@
-ÌÍ@
-(ö@
-@áH@=q@@õÂ@Qì@®@
->@ff@Â@
-ž@zá@×
-@33@\@ë
-@G®@£×@  @\)@žR@{@
-p€@
-ÌÍ@
-(ö@
-
-@
-áH@
-=q@	@õÃ@Qì@®@
-=@ff@Â@
-ž@zá@×
-@33@\@ë
-@G®@ £×@   ?Ð£×?Ï\)?Î{?ÌÌÍ?Ë
-
-?Ê=p?ÈõÂ?Ç®?Æff?Å
-ž?Ã×
-?Â\?ÁG®?À  ?ŸžR?œp€?Œ(ö?ºáH?¹?žQì?·
->?µÂ?Žzá?³33?±ë
-?°£×?¯\)?®{?¬ÌÍ?«
-?ª=q?šõÂ?§®?Šff?¥
-ž?£×
-?¢\?¡G®?   ?žR?p€?(ö?áH??Qì?
->?Â?zá?33?ë
-?£×?\)?{?ÌÍ?
-?=q?õÃ?®?ff?
-
-ž?×
-?\?G®?  ?!G®?
-žR?
-(ö??
-=?zá?ë
-?\)?
-ÌÍ?
-=q?®?
-ž?\?   >úáH>õÂ>ð£×>ë
->æff>áG®>Ü(ö>×
-=>Ñë
->ÌÌÍ>Ç®>Â\>œp€>žQì>³33>®{>šõÃ>£×
->žR>>zá>\)>=q>
-
-ž>  >uÂ>k
->aG®>W
-=>LÌÍ>B\>8Qì>.{>#×
->>\)>
-ž=õÂ=áG®=ÌÌÍ=žQì=£×
-=\)=uÂ=LÌÍ=#×
-<õÂ<£×
-<#×
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
Index: unk/psLib/test/image/verified/sBiOut.fits
===================================================================
--- /trunk/psLib/test/image/verified/sBiOut.fits	(revision 4546)
+++ 	(revision )
@@ -1,1414 +1,0 @@
-SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9 ; = ?ÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8 : < >ÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9 ; =ÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8 : <ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9 ;ÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8 :ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6ÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - /ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , .ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + -ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * ,ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) +ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( *ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' )ÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & (ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % 'ÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ &ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # %ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! #ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   "ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  !ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-  ÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
- ÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-ÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-ÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-ÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-       ÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-       ÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-      ÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-      ÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-     ÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-     ÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-    ÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-    ÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-   ÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-   ÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-  ÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-  ÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
- ÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
- ÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-ÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-ÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
-ÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
-ÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ    ÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ   ÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                  XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÁÿÃÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿ¿ÿÂÿÄÿÆÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŸÿÀÿÂÿÄÿÆÿÉÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , . 0 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + - / 1 3 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - 0 2 4 6 7ÿÿÿÿÿÿÿÿÿ
-ÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , . 0 2 4 7 9 :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + - / 1 3 5 7 9 < =ÿÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - 0 2 4 6 8 : < >ÿÿÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , . 0 2 4 7 9 ; = >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + - / 1 3 5 7 9 < <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - 0 2 4 6 8 : ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , . 0 2 4 7 9 :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + - / 1 3 5 7 8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - 0 2 4 6 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , . 0 2 4 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + - / 1 3 4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - 0 2 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , . 0 1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + - / 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) + - .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ§ÿ©ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( * , -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿªÿ¬ÿ®ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & ( + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ­ÿ¯ÿ±ÿ³ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % ' ) *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ & ( )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " $ & 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! # % &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÿžÿºÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-  ! $ $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ»ÿœÿ¿ÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
-   " #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŸÿÀÿÂÿÄÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
-  ! !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       
- 
- ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÆÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-        
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿÉÿËÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÌÿÎÿÐÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÏÿÑÿÓÿÕÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÒÿÔÿÖÿØÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿ×ÿÚÿÜÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿÚÿÜÿßÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÝÿßÿáÿãÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
-   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿàÿâÿäÿæÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
-   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿãÿåÿçÿéÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿæÿèÿêÿìÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 
- 
- ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿèÿëÿíÿïÿñÿóÿõÿ÷ÿùÿüÿþ       	 
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÿëÿíÿïÿòÿôÿöÿøÿúÿüÿþ       
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿîÿðÿòÿôÿ÷ÿùÿûÿýÿÿ      	 	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿñÿóÿõÿ÷ÿùÿüÿþ       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿ÷ÿùÿûÿýÿÿ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿùÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿüÿþ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÿÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÿÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿÿÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÿÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÿÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿ ÿ¡ÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿ¢ÿ£ÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿ€ÿ¥ÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿŠÿ§ÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿšÿ©ÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿªÿ«ÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿ¬ÿ­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿ°ÿ±ÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿ²ÿ³ÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿŽÿµÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿ¶ÿ·ÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿžÿ¹ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿºÿ»ÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿŒÿœÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿŸÿ¿ÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿÀÿÁÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿÿÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ   ÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ     ÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ       ÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ         ÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	ÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
-ÿÎÿÏÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-ÿÐÿÑÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-  ÿÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-    ÿÔÿÕÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-      ÿÖÿ×ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-        ÿØÿÙÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-          ÿÚÿÛÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-            ÿÜÿÝÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-              ÿÞÿßÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
-ÿàÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
- ÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    !ÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " #ÿæÿçÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ %ÿèÿéÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & 'ÿêÿëÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( )ÿìÿíÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * +ÿîÿïÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , -ÿðÿñÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . /ÿòÿóÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1ÿôÿõÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3ÿöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5ÿøÿùÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7ÿúÿûÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9ÿüÿýÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;ÿþÿÿ           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < =           	 
- 
- 
- 
-               
- 
- 
-    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿ
-ÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ¢ÿ¡ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ£ÿ¢ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿ¥ÿ€ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿŠÿ¥ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ§ÿ§ÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿ©ÿšÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿªÿ©ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ®ÿ®ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ±ÿ±ÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿ³ÿ²ÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿŽÿ³ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ¶ÿµÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿ·ÿ¶ÿ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿžÿžÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿºÿ¹ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿ»ÿºÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿœÿŒÿœÿÿÿÿÿÿÿÿÿÿÿÿÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿŸÿœÿŸÿÿÿÿÿÿÿÿÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿ¿ÿ¿ÿ¿ÿÿÿÿÿÿÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÁÿÀÿÁ      ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÄÿÃÿÂÿÂÿÿ         ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÆÿÅÿÄÿÃÿÿÿÿ          ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÉÿÈÿÇÿÆÿÿÿÿÿÿÿÿ            ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿÌÿËÿËÿÊÿÉÿÿÿÿÿÿÿÿÿÿÿÿ              ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÏÿÎÿÎÿÍÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÒÿÑÿÐÿÐÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                  ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÕÿÔÿÓÿÓÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿ×ÿÖÿÕÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÚÿÙÿØÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÝÿÜÿÜÿÛÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
-  
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿàÿßÿßÿÞÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿãÿâÿáÿáÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿæÿåÿäÿãÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ         
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿèÿçÿæÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ           
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿëÿêÿéÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ             
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿîÿíÿíÿìÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ               
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿñÿðÿïÿïÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                 
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿôÿóÿòÿòÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                   
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿ÷ÿöÿõÿôÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                     
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿùÿøÿ÷ÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
-                     
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿüÿûÿúÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
- 
- 
-                     
- 
- 
- 
- 
- 	 	                 ÿÿÿþÿþÿýÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
-  
- 
- 
- 
-                     
- 
- 
- 
- 
- 	 	                 ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
- 
- 
- 
-                     
- 
- 
- 
- 
- 	 	            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ! ! !     
- 
- 
- 
-                     
- 
- 
- 
- 
- 	 	       ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ " # " ! !     
- 
- 
- 
-                     
- 
- 
- 
- 
- 	 	   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ $ $ # " ! !     
- 
- 
- 
-                     
- 
- 
- 
- 
- 	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % & % $ $ # " ! !     
- 
- 
- 
-                     
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & ' & & % $ $ # " ! !     
- 
- 
- 
-                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( ( ( ' & & % $ $ # " ! !     
- 
- 
- 
-              ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) * ) ( ( ' & & % $ $ # " ! !     
- 
- 
- 
-          ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + + * ) ( ( ' & & % $ $ # " ! !     
- 
- 
- 
-      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ , - , + + * ) ( ( ' & & % $ $ # " ! !     
- 
- 
- 
-  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - . - - , + + * ) ( ( ' & & % $ $ # " ! !     
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / 0 / . - - , + + * ) ( ( ' & & % $ $ # " ! ! ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 1 0 0 / . - - , + + * ) ( ( ' & & % $ $ "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 2 2 1 0 0 / . - - , + + * ) ( ( ' & %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 4 3 2 2 1 0 0 / . - - , + + * ) (ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 5 4 4 3 2 2 1 0 0 / . - - , +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6 7 6 5 4 4 3 2 2 1 0 0 / -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 7 8 7 7 6 5 4 4 3 2 2 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 9 9 8 7 7 6 5 4 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : ; : 9 9 8 7 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < < < ; : 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ = > = <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿ   ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-    ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿ 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿ 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿ 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿ 
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿ 
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿ  
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿ  
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿ   
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿ   
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿ    
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿ    
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿ     
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿ     
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿ      
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿ      
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿ       
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿ       
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿ        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿ        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿ 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿ 
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿ 
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ   
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿ¡   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠÿ€ # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿšÿŠ % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿªÿš ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ«ÿ© ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿª ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ÿ« * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ÿ­ , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ°ÿ® - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ¯ . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ²ÿ° / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ± 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿ² 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽ 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ·ÿµ 4 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ 5 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ÿ· 6 4 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿºÿž 7 5 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ»ÿ¹ 8 6 4 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒÿº 9 7 5 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿ» : 8 6 4 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸÿŒ ; 9 7 5 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœ < : 8 6 4 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀÿŸ = ; 9 7 5 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ > < : 8 6 4 2 0 . , * ( & $ "   
- 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿðÿîÿìÿêÿèÿæÿäÿâÿàÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÀ ? = ; 9 7 5 3 1 / - + ) ' % # !  
-        
- 
- 	    ÿÿÿýÿûÿùÿ÷ÿõÿóÿñÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÇÿÅÿÃÿÁ                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    ÿþÿüÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿùÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿÿÿýÿûÿùÿ÷ÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ! !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ # "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ' & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ * ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ . - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 / - + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 1 0 . , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 2 0 - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 4 3 1 / - + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 4 2 0 . , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 7 6 4 2 0 - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 8 7 5 3 1 / - + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : 9 7 4 2 0 . , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ; : 8 6 4 2 0 - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < < 9 7 5 3 1 / - + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > = ; 9 7 4 2 0 . , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿ ? > < : 8 6 4 2 0 - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿÿÿ = < 9 7 5 3 1 / - + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ : 9 7 4 2 0 . , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿ
-ÿÿÿÿÿÿÿÿ 7 6 4 2 0 - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 5 3 1 / - + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 0 . , * ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ / - + ) ' % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ , + ( & $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ) ( & $ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ & % # !  
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ "   
- 
-       
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !  
-        
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
-        
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    
- 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
- 
-      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
- 	      ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 	     ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ      ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ     ÿþÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ¢ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿýÿûÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ€ÿ¢ÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ÿþÿüÿúÿøÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ¥ÿ£ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿüÿùÿ÷ÿõÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿ§ÿ¥ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿùÿ÷ÿôÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿšÿŠÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿöÿôÿòÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ©ÿ§ÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿóÿñÿïÿíÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ«ÿ©ÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿðÿîÿìÿêÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ¬ÿªÿ©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿíÿëÿéÿçÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ®ÿ¬ÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿëÿèÿæÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ¯ÿ­ÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÿèÿæÿãÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ±ÿ®ÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿåÿãÿáÿßÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ²ÿ°ÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿâÿàÿÞÿÜÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿ³ÿ±ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿßÿÝÿÛÿÙÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿµÿ³ÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÜÿÚÿØÿÖÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿ¶ÿŽÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÚÿ×ÿÕÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿžÿ¶ÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÿ×ÿÕÿÓÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿ¹ÿ·ÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÔÿÒÿÐÿÎÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿºÿžÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÑÿÏÿÍÿËÿÉÿÆÿÄÿÂÿÀÿŸÿŒÿºÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÎÿÌÿÊÿÈÿÆÿÄÿÂÿ¿ÿœÿ»ÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿËÿÉÿÇÿÅÿÃÿÁÿ¿ÿœÿŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÉÿÆÿÄÿÂÿÀÿŸÿœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÆÿÄÿÂÿ¿ÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÿÃÿÁÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	           = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþ ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿü 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿú 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿø 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿö 3 2 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿô 1 0 / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿò / . - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿð - , + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿî + * ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿì ) ( ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿê ' & % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿè % $ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæ # " !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿä !    
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâ  
- 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿà 
- 
-               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞ               
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜ             
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚ           
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØ         
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖ       
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔ     
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒ   
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐ 
- 
- 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎ 
- 
- 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌ 	          ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊ         ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈ       ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆ     ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄ   ÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÿÿþÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿýÿüÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿûÿúÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿùÿøÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ÷ÿöÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿõÿôÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿóÿòÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿñÿðÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿïÿîÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿíÿìÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿëÿêÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿéÿèÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿçÿæÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿåÿäÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿãÿâÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿáÿàÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿßÿÞÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÝÿÜÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÛÿÚÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÙÿØÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿ×ÿÖÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÕÿÔÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÓÿÒÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÎÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÿÌÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÿÂÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿÿÁÿÀÿ¿ÿŸÿœÿŒÿ»ÿºÿ¹ÿžÿ·ÿ¶ÿµÿŽÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿªÿ©ÿšÿ§ÿŠÿ¥ÿ€ÿ£ÿ¢ÿ¡ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   91 / length of data axis 1                          NAXIS2  =                   91 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ > >ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ < = > =ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 9 : ; < < <ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6 7 8 9 9 : ; :ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 3 4 5 6 7 7 8 9 9 9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0 2 2 3 4 4 5 6 7 7 8 7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ - / 0 0 1 2 2 3 4 4 5 6 7 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ + , - - . / 0 0 1 2 2 3 4 4 5 5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ( ) * + + , - - . / 0 0 1 2 2 3 4 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ % & ' ( ( ) * + + , - - . / 0 0 1 2 2 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ " $ $ % & & ' ( ( ) * + + , - - . / 0 0 1 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  ! ! " # $ $ % & & ' ( ( ) * + + , - - . / 0 /ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
-     ! ! " # $ $ % & & ' ( ( ) * + + , - - . -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ   
- 
- 
- 
-     ! ! " # $ $ % & & ' ( ( ) * + + , - ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ       
- 
- 
- 
-     ! ! " # $ $ % & & ' ( ( ) * + + +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ           
- 
- 
- 
-     ! ! " # $ $ % & & ' ( ( ) * )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ               
- 
- 
- 
-     ! ! " # $ $ % & & ' ( ( (ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                   
- 
- 
- 
-     ! ! " # $ $ % & & ' &ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 
- 
-                     
- 
- 
- 
-     ! ! " # $ $ % & %ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 	 
- 
- 
- 
- 
-                     
- 
- 
- 
-     ! ! " # $ $ $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    	 	 
- 
- 
- 
- 
-                     
- 
- 
- 
-     ! ! " # "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ        	 	 
- 
- 
- 
- 
-                     
- 
- 
- 
-     ! ! !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ             	 	 
- 
- 
- 
- 
-                     
- 
- 
- 
-     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ                  	 	 
- 
- 
- 
- 
-                     
- 
- 
- 
-  
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-                     
- 
- 
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-                     
- ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-                    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-              ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-            ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-          ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-  
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
- 
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 
- 
- 
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  	 	 	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ                ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ              ÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ            ÿÿÿÿÿÿÿÿÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ          ÿÿÿÿÿÃÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ         ÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿþÿÿ    ÿÿÿÁÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿüÿýÿþÿÿÿÿÿÿÿ¿ÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿùÿúÿûÿüÿÿÿÿÿÿÿÿÿŸÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿöÿ÷ÿ÷ÿøÿùÿÿÿÿÿÿÿÿÿÿÿÿÿœÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿóÿôÿôÿõÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿðÿñÿòÿòÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿíÿîÿïÿïÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿëÿìÿíÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿèÿéÿêÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿåÿæÿæÿçÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿâÿãÿãÿäÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿßÿàÿáÿáÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÜÿÝÿÞÿßÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÚÿÛÿÜÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿ×ÿØÿÙÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÔÿÕÿÕÿÖÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÑÿÒÿÓÿÓÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÎÿÏÿÐÿÐÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿËÿÌÿÍÿÎÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÉÿÊÿËÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÆÿÇÿÈÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÃÿÄÿÄÿÅÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÀÿÁÿÂÿÂÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿœÿŸÿ¿ÿ¿ÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿºÿ»ÿŒÿœÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿžÿ¹ÿºÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿ¶ÿ¶ÿ·ÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ²ÿ³ÿ³ÿŽÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ¯ÿ°ÿ±ÿ±ÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ¬ÿ­ÿ®ÿ®ÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿ©ÿªÿ«ÿ¬ÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿ§ÿšÿ©ÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ€ÿ¥ÿ¥ÿŠÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¡ÿ¢ÿ¢ÿ£ÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿ
-ÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                   16 / number of bits per data pixel                  NAXIS   =                    3 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          NAXIS2  =                   64 / length of data axis 2                          NAXIS3  =                    1 / length of data axis 3                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BZERO   =   0.000000000000E+00 / Pixel Value Offset                             BSCALE  =   1.000000000000E+00 / Pixel Value Scale                              END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9 ; = ?ÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8 : < >ÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9 ; =ÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8 : <ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9 ;ÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8 :ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7 9ÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6 8ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5 7ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4 6ÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3 5ÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2 4ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1 3ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0 2ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - / 1ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , . 0ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + - /ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * , .ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) + -ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( * ,ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' ) +ÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & ( *ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % ' )ÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ & (ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # % 'ÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ &ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! # %ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   " $ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  ! #ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-   "ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-  !ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-  ÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
- ÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
- 
-ÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-        
-ÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-        
-ÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-       ÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-       ÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-      ÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-      ÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-     ÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-     ÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-    ÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-    ÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-   ÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-   ÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-  ÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-  ÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
- ÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
- ÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
- 
-ÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
- 
-ÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	 
-ÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ       
-ÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ     	ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ      ÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ    ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ     ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ    ÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ   ÿÿ
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿ£ÿ¥ÿ§ÿ©ÿ«ÿ­ÿ¯ÿ±ÿ³ÿµÿ·ÿ¹ÿ»ÿœÿ¿ÿÁÿÃÿÅÿÇÿÉÿËÿÍÿÏÿÑÿÓÿÕÿ×ÿÙÿÛÿÝÿßÿáÿãÿåÿçÿéÿëÿíÿïÿñÿóÿõÿ÷ÿùÿûÿýÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¢ÿ€ÿŠÿšÿªÿ¬ÿ®ÿ°ÿ²ÿŽÿ¶ÿžÿºÿŒÿŸÿÀÿÂÿÄÿÆÿÈÿÊÿÌÿÎÿÐÿÒÿÔÿÖÿØÿÚÿÜÿÞÿàÿâÿäÿæÿèÿêÿìÿîÿðÿòÿôÿöÿøÿúÿüÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
Index: unk/psLib/test/image/verified/tst_psImage.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImage.stderr	(revision 4546)
+++ 	(revision )
@@ -1,98 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImage.c                                              *
-*            TestPoint: psImage{psImageAlloc}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    #546 - psImageAlloc shall allocate memory for a psImage structure
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 101h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 102h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 104h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 108h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 301h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 302h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 304h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 308h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 404h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 408h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 808h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Testing psImage with type 810h
-<DATE><TIME>|<HOST>|I|testImageAlloc
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
-    Specified number of rows (0) or columns (0) is invalid.
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [50:99,70:19], is invalid or outside input psImage's boundaries, [0:99,0:99].
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [70:19,90:39], is invalid or outside input psImage's boundaries, [0:99,0:99].
-
----> TESTPOINT PASSED (psImage{psImageAlloc} | tst_psImage.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImage.c                                              *
-*            TestPoint: psImage{psRegionSet}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psRegionFromString (FILE:LINENO)
-    Specified subsection string, '[1:2,3:]', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
-
----> TESTPOINT PASSED (psImage{psRegionSet} | tst_psImage.c)
-
Index: unk/psLib/test/image/verified/tst_psImageConvolve.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageConvolve.stderr	(revision 4546)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageConvolve.c                                      *
-*            TestPoint: psImage{psKernelAlloc}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testKernelAlloc
-    Following should be a warning (xMin > xMax)
-<DATE><TIME>|<HOST>|W|psKernelAlloc
-    Specified xMin, 5, was greater than xMax, -5.  Values swapped.
-<DATE><TIME>|<HOST>|I|testKernelAlloc
-    Following should be a warning (yMin > yMax)
-<DATE><TIME>|<HOST>|W|psKernelAlloc
-    Specified yMin, 5, was greater than yMax, -5.  Values swapped.
-
----> TESTPOINT PASSED (psImage{psKernelAlloc} | tst_psImageConvolve.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageConvolve.c                                      *
-*            TestPoint: psImage{psKernelGenerate}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testKernelGenerate
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
-    Shift vectors can not be of different sizes.
-<DATE><TIME>|<HOST>|I|testKernelGenerate
-    Following should be a error (time vector NULL).
-<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
-    Specified shift vectors can not be NULL.
-<DATE><TIME>|<HOST>|I|testKernelGenerate
-    Following should be a error (x vector NULL).
-<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
-    Specified shift vectors can not be NULL.
-<DATE><TIME>|<HOST>|I|testKernelGenerate
-    Following should be a error (y vector NULL).
-<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
-    Specified shift vectors can not be NULL.
-
----> TESTPOINT PASSED (psImage{psKernelGenerate} | tst_psImageConvolve.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageConvolve.c                                      *
-*            TestPoint: psImage{psImageConvolve}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageConvolve
-    Testing direct gaussian convolution
-<DATE><TIME>|<HOST>|I|testImageConvolve
-    Testing fourier gaussian convolution
-
----> TESTPOINT PASSED (psImage{psImageConvolve} | tst_psImageConvolve.c)
-
Index: unk/psLib/test/image/verified/tst_psImageExtraction.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageExtraction.stderr	(revision 4546)
+++ 	(revision )
@@ -1,296 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageExtraction.c                                    *
-*            TestPoint: psImage{psImageSubset}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure members nrow and ncol are equal to the input parameter nrow and ncol respectively.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure contains expected values in the row member, if the input psImage structure image contains known values.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure member type is equal to the input psImage structure member type.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure members row0 and col0 are equal to the input parameters row0 and col0 respectively.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure member parent is equal to the input psImage structure pointer image.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure member children is null.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the input psImage structure image only has the following members changed: 1) Nchildren is increased by one. 2) parent contains pointer psImage structure out at parent[Nchildren-1].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameter image is null. Also verified the input psImage structure is not modified.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program  execution doesn't stop, if the input parameters nrow and/or ncol are zero. Also verify input psImage structure is not modified.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,128:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [64:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameters row0 and col0 are not within the range of values of psImage structure image.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,0:511], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:255,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [-1:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,-1:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program execution doesn't stop if the input parameters nrow, ncol, row0 and col0 specify a range of data not within the input psImage structure image.  Also verify the input psImage structure is not modified.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:128,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:128,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    psImageFreeChildren shall deallocate any children images of a psImage structure
-
----> TESTPOINT PASSED (psImage{psImageSubset} | tst_psImageExtraction.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageExtraction.c                                    *
-*            TestPoint: psImage{psImageSubsection}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    Testing subsection [0:32,0:32].
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    Testing subsection [32:64,32:64].
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    Testing subsection [64:127,32:64].
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    Testing subsection [32:64,128:255].
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (x1>x2)
-<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
-    Specified subset range, [64:32,32:64], is invalid.  Ranges must be incremental.
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (y1>y2)
-<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
-    Specified subset range, [32:64,64:32], is invalid.  Ranges must be incremental.
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (x2>nCols)
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [64:256,32:64], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (y2>=nRows)
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [32:64,64:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (malformed string - no brackets)
-<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
-    Specified subsection string, '32:64,32:64', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (malformed string - no colons)
-<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
-    Specified subsection string, '[32-64,32-64]', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (malformed string - not four numbers)
-<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
-    Specified subsection string, '[32:64,32]', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (image is NULL)
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageSubsection
-    An error should follow (subsection string is NULL)
-<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
-    Specified subsection string can not be NULL.
-
----> TESTPOINT PASSED (psImage{psImageSubsection} | tst_psImageExtraction.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageExtraction.c                                    *
-*            TestPoint: psImage{psImageSlice}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified statistic can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified slice direction, 5, is invalid.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:30,20:20], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [301:302,20:30], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:31,201:205], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:301,20:21], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:31,20:201], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error mask size != image size.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Input psImage mask size, 200x300, does not match psImage input size, 300x200.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error invalid mask type.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Input psImage mask type, psS8, is not the supported mask datatype of psU8.
-
----> TESTPOINT PASSED (psImage{psImageSlice} | tst_psImageExtraction.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageExtraction.c                                    *
-*            TestPoint: psImage{psImageTrim}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [-1:299,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:299,-1:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:300,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:299,0:200], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:-1,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:299,0:-1], is invalid or outside input psImage's boundaries, [0:299,0:199].
-
----> TESTPOINT PASSED (psImage{psImageTrim} | tst_psImageExtraction.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageExtraction.c                                    *
-*            TestPoint: psImage{psImageCut}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (-1.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (300.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(-1.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(300.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,-1.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,200.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(240.000000,-1.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(240.000000,200.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    Following should be an error (NULL image).
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageCut
-    Following should be an error (length=0).
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified number of samples, 0, must be greater than 1 to make a line.
-
----> TESTPOINT PASSED (psImage{psImageCut} | tst_psImageExtraction.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageExtraction.c                                    *
-*            TestPoint: psImage{psImageRadialCut}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified radii vector can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified statistic can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified center, (301,100), is outside of the psImage boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified center, (150,201), is outside of the psImage boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Input psImage mask size, 150x100, does not match psImage input size, 300x200.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Input radii vector size, 1, can not be less than 2.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
-
----> TESTPOINT PASSED (psImage{psImageRadialCut} | tst_psImageExtraction.c)
-
Index: unk/psLib/test/image/verified/tst_psImageFFT.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageFFT.stderr	(revision 4546)
+++ 	(revision )
@@ -1,73 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageFFT.c                                           *
-*            TestPoint: psFFT{psImageFFT}                                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageFFT
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageFFT (FILE:LINENO)
-    Can not specify both PS_FFT_FORWARD and PS_FFT_REVERSE options.
-<DATE><TIME>|<HOST>|I|testImageFFT
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageFFT (FILE:LINENO)
-    The PS_FFT_FORWARD and PS_FFT_REAL_RESULT combinition is not supported.
-<DATE><TIME>|<HOST>|I|testImageFFT
-    Following should generate error for invalid direction.
-<DATE><TIME>|<HOST>|E|psImageFFT (FILE:LINENO)
-    Must specify either PS_FFT_FORWARD or PS_FFT_REVERSE option.
-
----> TESTPOINT PASSED (psFFT{psImageFFT} | tst_psImageFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageFFT.c                                           *
-*            TestPoint: psFFT{psImageRealImaginary}                                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psFFT{psImageRealImaginary} | tst_psImageFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageFFT.c                                           *
-*            TestPoint: psFFT{psImageComplex}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageComplex
-    Following should be an error (type mismatch).
-<DATE><TIME>|<HOST>|E|psImageComplex (FILE:LINENO)
-    Real psImage type (psF32) and imaginary psImage type (psF64) must be the same.
-<DATE><TIME>|<HOST>|I|testImageComplex
-    Following should be an error (size mismatch).
-<DATE><TIME>|<HOST>|E|psImageComplex (FILE:LINENO)
-    Real psImage size (128x64) and imaginary psImage size (64x64) must be the same.
-<DATE><TIME>|<HOST>|I|testImageComplex
-    Following should generate an error message.
-<DATE><TIME>|<HOST>|E|psImageComplex (FILE:LINENO)
-    Input psImage type, psS16, is required to be either psF32 or psF64.
-
----> TESTPOINT PASSED (psFFT{psImageComplex} | tst_psImageFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageFFT.c                                           *
-*            TestPoint: psFFT{psImageConjugate}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psFFT{psImageConjugate} | tst_psImageFFT.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageFFT.c                                           *
-*            TestPoint: psFFT{psImagePowerSpectrum}                                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImagePowerSpectrum
-    Following should generate error message.
-<DATE><TIME>|<HOST>|E|psImagePowerSpectrum (FILE:LINENO)
-    Input psImage type, psF32, is required to be either psC32 or psC64.
-
----> TESTPOINT PASSED (psFFT{psImagePowerSpectrum} | tst_psImageFFT.c)
-
Index: unk/psLib/test/image/verified/tst_psImageGeomManip.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageGeomManip.stderr	(revision 4546)
+++ 	(revision )
@@ -1,146 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageGeomManip.c                                     *
-*            TestPoint: psImage{psImageRebin}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for unsupported type.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified psImage type, psU8, is not supported.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for invallid mask type.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for scale < 0.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified scale value, 0, must be a positive value.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stats null.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stats options 0.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stat options use range.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic option, 8192, is not valid.  Must specify one and only one statistic type.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stats with multiple options.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic option, 2049, is not valid.  Must specify one and only one statistic type.
-
----> TESTPOINT PASSED (psImage{psImageRebin} | tst_psImageGeomManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageGeomManip.c                                     *
-*            TestPoint: psImage{psImageRoll}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRoll
-    Following should generate an error.
-<DATE><TIME>|<HOST>|E|psImageRoll (FILE:LINENO)
-    Can not operate on a NULL psImage.
-
----> TESTPOINT PASSED (psImage{psImageRoll} | tst_psImageGeomManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageGeomManip.c                                     *
-*            TestPoint: psImage{psImageRotate}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRotate
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageRotate
-    Following should be an error for invalid interpolation type.
-<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
-    Specified interpolation mode, -1, is unsupported.
-
----> TESTPOINT PASSED (psImage{psImageRotate} | tst_psImageGeomManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageGeomManip.c                                     *
-*            TestPoint: psImage{psImageShift}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,-16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32,16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32,-16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32,16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32,-16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,16.4.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,-16.4.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32.7,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32.7,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32.6,16.2.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32.6,-16.2.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32.6,16.2.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32.6,-16.2.
-<DATE><TIME>|<HOST>|I|testImageShift
-    Following should be an error...
-<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageShift
-    Following should be an error for invalid interpolation mode.
-<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
-    Specified interpolation mode, -1, is unsupported.
-
----> TESTPOINT PASSED (psImage{psImageShift} | tst_psImageGeomManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageGeomManip.c                                     *
-*            TestPoint: psImage{psImageResample}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Specified scale value, 0, must be a positive value.
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Specified interpolation mode, -1, is unsupported.
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Specified psImage type, psBool, is not supported.
-
----> TESTPOINT PASSED (psImage{psImageResample} | tst_psImageGeomManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageGeomManip.c                                     *
-*            TestPoint: psImage{psImageTransform}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psImage{psImageTransform} | tst_psImageGeomManip.c)
-
Index: unk/psLib/test/image/verified/tst_psImageIO.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageIO.stderr	(revision 4546)
+++ 	(revision )
@@ -1,404 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageIO.c                                            *
-*            TestPoint: psImage{psImageReadSection}                                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|I|testImageRead
-    Following should be an error as file doesn't exist.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
-    Could not open file,'foobar.fits'.
-    CFITSIO Error: could not open the named file
-<DATE><TIME>|<HOST>|I|testImageRead
-    Following should be an error as filename is NULL.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
-    Specified filename can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRead
-    Following should be an error as extnum is invalid.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
-    Could not find HDU #4 in file tmpImages/MxN_F32.fits.
-    CFITSIO Error: tried to move past end of file
-<DATE><TIME>|<HOST>|I|testImageRead
-    Following should be an error as extname is invalid.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
-    Could not find HDU with extension name 'bogus' in file tmpImages/MxN_F32.fits.
-    CFITSIO Error: illegal HDU number
-
----> TESTPOINT PASSED (psImage{psImageReadSection} | tst_psImageIO.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageIO.c                                            *
-*            TestPoint: psImage{psImageWriteSection}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|I|testImageWrite
-    Following should generate an error message because input image is null.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageWrite
-    Following should be an error for passing invalid image type.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
-    Could not create file,'panstarrs/writeFits.fits'.
-    CFITSIO Error: couldn't create the named file
-<DATE><TIME>|<HOST>|I|testImageWrite
-    Following should be an error for passing invalid FITS file.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
-    Could not open file,'tmpImages/writeInvalidFile.fits'.
-    CFITSIO Error: tried to move past end of file
-<DATE><TIME>|<HOST>|I|testImageWrite
-    Following should be an error for invalid extension name.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
-    Could not find HDU with extension name 'ext2' in file tmpImages/writeTest.fits.
-    CFITSIO Error: illegal HDU number
-<DATE><TIME>|<HOST>|I|testImageWrite
-    Following should be an error for invalid extension number.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
-    Specified extension number, 99, must not exceed number of HDUs, 1, by more than one.
-
----> TESTPOINT PASSED (psImage{psImageWriteSection} | tst_psImageIO.c)
-
Index: unk/psLib/test/image/verified/tst_psImageInterpolate.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageInterpolate.stderr	(revision 4546)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageInterpolate.c                                   *
-*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageInterpolate.c                                   *
-*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testInterpolateError
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testInterpolateError
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (FILE:LINENO)
-    Specified psImage type, psBool, is not supported.
-<DATE><TIME>|<HOST>|I|testInterpolateError
-    Following should generate an error message
-<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (FILE:LINENO)
-    Specified psImage type, psBool, is not supported.
-
----> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageInterpolate.c                                   *
-*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageInterpolate.c                                   *
-*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
-
Index: unk/psLib/test/image/verified/tst_psImageManip.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageManip.stderr	(revision 4546)
+++ 	(revision )
@@ -1,429 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageClip}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageClip
-    psImageClip shall limit the minimum and maximum data value within a psImage structure
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of F64 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of F32 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of S32 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of S16 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of S8 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of U16 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of U8 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of C32 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of C64 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Following should be an error (max<min)
-<DATE><TIME>|<HOST>|E|psImageClip (FILE:LINENO)
-    Specified min value, 256, can not be greater than the specified max value, 128.
-
----> TESTPOINT PASSED (psImage{psImageClip} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageClipNAN}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageClipNAN
-    psImageClipNaN shall modified pixel values of NaN with a specified value
-<DATE><TIME>|<HOST>|I|testImageClipNAN
-    Following should be an error (invalid type)
-<DATE><TIME>|<HOST>|E|psImageClipNaN (FILE:LINENO)
-    Specified psImage type, psS32, is not supported.
-
----> TESTPOINT PASSED (psImage{psImageClipNAN} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageClipComplexRegion}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    psImageClipNaN shall modified pixel values of NaN with a specified value
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Testing clipping at 409.6+256i to 682.667+512i for psC32
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Testing clipping at 409.6+256i to 682.667+512i for psC64
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified imaginary-portion of min value, 10, can not be greater than the imaginary-portion of max value, 5.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, -0-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, 0+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, -0-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, 0+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error (invalid type)
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified psImage type, psS32, is not supported.
-
----> TESTPOINT PASSED (psImage{psImageClipComplexRegion} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageOverlay}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as overlay isn't within image boundaries
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Specified subset range, [32:160,64:320], is invalid or outside input psImage's boundaries, [0:128,0:256].
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as overlay is NULL
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as image input is NULL
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as operator is invalid
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Specified operation, '$', is not supported.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as operator is invalid
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Operation can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as overlay is a different type
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Input overlay psImage type, psS64, must match input psImage type, psF32.
-
----> TESTPOINT PASSED (psImage{psImageOverlay} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageRebin}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for unsupported type.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified psImage type, psU8, is not supported.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for invallid mask type.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for scale < 0.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified scale value, 0, must be a positive value.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stats null.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stats options 0.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stat options use range.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic option, 8192, is not valid.  Must specify one and only one statistic type.
-<DATE><TIME>|<HOST>|I|testImageRebin
-    Following should be an error for stats with multiple options.
-<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
-    Specified statistic option, 2049, is not valid.  Must specify one and only one statistic type.
-
----> TESTPOINT PASSED (psImage{psImageRebin} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageRoll}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRoll
-    Following should generate an error.
-<DATE><TIME>|<HOST>|E|psImageRoll (FILE:LINENO)
-    Can not operate on a NULL psImage.
-
----> TESTPOINT PASSED (psImage{psImageRoll} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageRotate}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageWriteSection
-    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|W|psImageReadSection
-    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
-<DATE><TIME>|<HOST>|I|testImageRotate
-    Following should be an error
-<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageRotate
-    Following should be an error for invalid interpolation type.
-<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
-    Specified interpolation mode, -1, is unsupported.
-
----> TESTPOINT PASSED (psImage{psImageRotate} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageShift}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,-16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32,16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32,-16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32,16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32,-16.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,16.4.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 0,-16.4.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32.7,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32.7,0.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32.6,16.2.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of 32.6,-16.2.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32.6,16.2.
-<DATE><TIME>|<HOST>|I|testImageShiftCase
-    Testing psImageShift with a 64x128 image for a shift of -32.6,-16.2.
-<DATE><TIME>|<HOST>|I|testImageShift
-    Following should be an error...
-<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageShift
-    Following should be an error for invalid interpolation mode.
-<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
-    Specified interpolation mode, -1, is unsupported.
-
----> TESTPOINT PASSED (psImage{psImageShift} | tst_psImageManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageManip.c                                         *
-*            TestPoint: psImage{psImageResample}                                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Specified scale value, 0, must be a positive value.
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Specified interpolation mode, -1, is unsupported.
-<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
-    Specified psImage type, psBool, is not supported.
-
----> TESTPOINT PASSED (psImage{psImageResample} | tst_psImageManip.c)
-
Index: unk/psLib/test/image/verified/tst_psImagePixelExtract.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImagePixelExtract.stderr	(revision 4546)
+++ 	(revision )
@@ -1,147 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelExtract.c                                  *
-*            TestPoint: psImage{psImageSlice}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified statistic can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified slice direction, 5, is invalid.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:30,20:20], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [301:302,20:30], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:31,201:205], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:301,20:21], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified subset range, [30:31,20:201], is invalid or outside input psImage's boundaries, [0:300,0:200].
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error mask size != image size.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Input psImage mask size, 200x300, does not match psImage input size, 300x200.
-<DATE><TIME>|<HOST>|I|testImageSlice
-    Following should be an error invalid mask type.
-<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
-    Input psImage mask type, psS8, is not the supported mask datatype of psU8.
-
----> TESTPOINT PASSED (psImage{psImageSlice} | tst_psImagePixelExtract.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelExtract.c                                  *
-*            TestPoint: psImage{psImageCut}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (-1.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (300.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(-1.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(300.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,-1.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,200.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(240.000000,-1.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    The following should be an error.
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified line, (20.000000,10.000000)->(240.000000,200.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageCut
-    Following should be an error (NULL image).
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageCut
-    Following should be an error (length=0).
-<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
-    Specified number of samples, 0, must be greater than 1 to make a line.
-
----> TESTPOINT PASSED (psImage{psImageCut} | tst_psImagePixelExtract.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelExtract.c                                  *
-*            TestPoint: psImage{psImageRadialCut}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified radii vector can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified statistic can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified center, (301,100), is outside of the psImage boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified center, (150,201), is outside of the psImage boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Input psImage mask size, 150x100, does not match psImage input size, 300x200.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Input radii vector size, 1, can not be less than 2.
-<DATE><TIME>|<HOST>|I|testImageRadialCut
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
-    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
-
----> TESTPOINT PASSED (psImage{psImageRadialCut} | tst_psImagePixelExtract.c)
-
Index: unk/psLib/test/image/verified/tst_psImagePixelManip.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImagePixelManip.stderr	(revision 4546)
+++ 	(revision )
@@ -1,146 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelManip.c                                    *
-*            TestPoint: psImage{psImageClip}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageClip
-    psImageClip shall limit the minimum and maximum data value within a psImage structure
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of F64 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of F32 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of S32 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of S16 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of S8 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of U16 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of U8 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of C32 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Testing clipping of C64 imagery
-<DATE><TIME>|<HOST>|I|testImageClip
-    Following should be an error (max<min)
-
----> TESTPOINT PASSED (psImage{psImageClip} | tst_psImagePixelManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelManip.c                                    *
-*            TestPoint: psImage{psImageClipNAN}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageClipNAN
-    psImageClipNaN shall modified pixel values of NaN with a specified value
-<DATE><TIME>|<HOST>|I|testImageClipNAN
-    Following should be an error (invalid type)
-<DATE><TIME>|<HOST>|E|psImageClipNaN (FILE:LINENO)
-    Specified psImage type, psS32, is not supported.
-
----> TESTPOINT PASSED (psImage{psImageClipNAN} | tst_psImagePixelManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelManip.c                                    *
-*            TestPoint: psImage{psImageClipComplexRegion}                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    psImageClipNaN shall modified pixel values of NaN with a specified value
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Testing clipping at 409.6+256i to 682.667+512i for psC32
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Testing clipping at 409.6+256i to 682.667+512i for psC64
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified imaginary-portion of min value, 10, can not be greater than the imaginary-portion of max value, 5.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, 1.19209e-07-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmin value, 1.19209e-07+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, 1.19209e-07-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error:
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified vmax value, 1.19209e-07+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
-<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
-    Following should be an error (invalid type)
-<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
-    Specified psImage type, psS32, is not supported.
-
----> TESTPOINT PASSED (psImage{psImageClipComplexRegion} | tst_psImagePixelManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImagePixelManip.c                                    *
-*            TestPoint: psImage{psImageOverlay}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as overlay isn't within image boundaries
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Specified subset range, [32:160,64:320], is invalid or outside input psImage's boundaries, [0:128,0:256].
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as overlay is NULL
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as image input is NULL
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as operator is invalid
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Specified operation, '$', is not supported.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as operator is invalid
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Operation can not be NULL.
-<DATE><TIME>|<HOST>|I|testImageOverlay
-    Following should error as overlay is a different type
-<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
-    Input overlay psImage type, psS64, must match input psImage type, psF32.
-
----> TESTPOINT PASSED (psImage{psImageOverlay} | tst_psImagePixelManip.c)
-
Index: unk/psLib/test/image/verified/tst_psImageStats.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageStats.stderr	(revision 4546)
+++ 	(revision )
@@ -1,617 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStats.c                                         *
-*            TestPoint: psImage{psImageHistogram}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-*******************************
-* IMAGE SIZE is (1 by 1)
-*******************************
-Bin number 0 bounds: (0.0 - 0.1) data (1.00)
-Bin number 1 bounds: (0.1 - 0.2) data (0.00)
-Bin number 2 bounds: (0.2 - 0.3) data (0.00)
-Bin number 3 bounds: (0.3 - 0.4) data (0.00)
-Bin number 4 bounds: (0.4 - 0.5) data (0.00)
-Bin number 5 bounds: (0.5 - 0.6) data (0.00)
-Bin number 6 bounds: (0.6 - 0.7) data (0.00)
-Bin number 7 bounds: (0.7 - 0.8) data (0.00)
-Bin number 8 bounds: (0.8 - 0.9) data (0.00)
-Bin number 9 bounds: (0.9 - 1.0) data (0.00)
-Bin number 10 bounds: (1.0 - 1.1) data (0.00)
-Bin number 11 bounds: (1.1 - 1.2) data (0.00)
-Bin number 12 bounds: (1.2 - 1.3) data (0.00)
-Bin number 13 bounds: (1.3 - 1.4) data (0.00)
-Bin number 14 bounds: (1.4 - 1.5) data (0.00)
-Bin number 15 bounds: (1.5 - 1.6) data (0.00)
-Bin number 16 bounds: (1.6 - 1.7) data (0.00)
-Bin number 17 bounds: (1.7 - 1.8) data (0.00)
-Bin number 18 bounds: (1.8 - 1.9) data (0.00)
-Bin number 19 bounds: (1.9 - 2.0) data (0.00)
-Bin number 0 bounds: (0.00 - 0.10) data (1.00)
-Bin number 1 bounds: (0.10 - 0.20) data (0.00)
-Bin number 2 bounds: (0.20 - 0.30) data (0.00)
-Bin number 3 bounds: (0.30 - 0.40) data (0.00)
-Bin number 4 bounds: (0.40 - 0.50) data (0.00)
-Bin number 5 bounds: (0.50 - 0.60) data (0.00)
-Bin number 6 bounds: (0.60 - 0.70) data (0.00)
-Bin number 7 bounds: (0.70 - 0.80) data (0.00)
-Bin number 8 bounds: (0.80 - 0.90) data (0.00)
-Bin number 9 bounds: (0.90 - 1.00) data (0.00)
-Bin number 10 bounds: (1.00 - 1.10) data (0.00)
-Bin number 11 bounds: (1.10 - 1.20) data (0.00)
-Bin number 12 bounds: (1.20 - 1.30) data (0.00)
-Bin number 13 bounds: (1.30 - 1.40) data (0.00)
-Bin number 14 bounds: (1.40 - 1.50) data (0.00)
-Bin number 15 bounds: (1.50 - 1.60) data (0.00)
-Bin number 16 bounds: (1.60 - 1.70) data (0.00)
-Bin number 17 bounds: (1.70 - 1.80) data (0.00)
-Bin number 18 bounds: (1.80 - 1.90) data (0.00)
-Bin number 19 bounds: (1.90 - 2.00) data (0.00)
-*******************************
-* IMAGE SIZE is (1 by 32)
-*******************************
-Bin number 0 bounds: (0.0 - 1.7) data (2.00)
-Bin number 1 bounds: (1.7 - 3.3) data (2.00)
-Bin number 2 bounds: (3.3 - 5.0) data (1.00)
-Bin number 3 bounds: (5.0 - 6.6) data (2.00)
-Bin number 4 bounds: (6.6 - 8.2) data (2.00)
-Bin number 5 bounds: (8.2 - 9.9) data (1.00)
-Bin number 6 bounds: (9.9 - 11.6) data (2.00)
-Bin number 7 bounds: (11.6 - 13.2) data (2.00)
-Bin number 8 bounds: (13.2 - 14.9) data (1.00)
-Bin number 9 bounds: (14.9 - 16.5) data (2.00)
-Bin number 10 bounds: (16.5 - 18.2) data (2.00)
-Bin number 11 bounds: (18.2 - 19.8) data (1.00)
-Bin number 12 bounds: (19.8 - 21.5) data (2.00)
-Bin number 13 bounds: (21.5 - 23.1) data (2.00)
-Bin number 14 bounds: (23.1 - 24.8) data (1.00)
-Bin number 15 bounds: (24.8 - 26.4) data (2.00)
-Bin number 16 bounds: (26.4 - 28.1) data (1.00)
-Bin number 17 bounds: (28.1 - 29.7) data (2.00)
-Bin number 18 bounds: (29.7 - 31.4) data (2.00)
-Bin number 19 bounds: (31.4 - 33.0) data (0.00)
-Bin number 0 bounds: (0.00 - 1.65) data (2.00)
-Bin number 1 bounds: (1.65 - 3.30) data (2.00)
-Bin number 2 bounds: (3.30 - 4.95) data (1.00)
-Bin number 3 bounds: (4.95 - 6.60) data (2.00)
-Bin number 4 bounds: (6.60 - 8.25) data (2.00)
-Bin number 5 bounds: (8.25 - 9.90) data (1.00)
-Bin number 6 bounds: (9.90 - 11.55) data (2.00)
-Bin number 7 bounds: (11.55 - 13.20) data (2.00)
-Bin number 8 bounds: (13.20 - 14.85) data (1.00)
-Bin number 9 bounds: (14.85 - 16.50) data (2.00)
-Bin number 10 bounds: (16.50 - 18.15) data (2.00)
-Bin number 11 bounds: (18.15 - 19.80) data (1.00)
-Bin number 12 bounds: (19.80 - 21.45) data (2.00)
-Bin number 13 bounds: (21.45 - 23.10) data (2.00)
-Bin number 14 bounds: (23.10 - 24.75) data (1.00)
-Bin number 15 bounds: (24.75 - 26.40) data (2.00)
-Bin number 16 bounds: (26.40 - 28.05) data (1.00)
-Bin number 17 bounds: (28.05 - 29.70) data (2.00)
-Bin number 18 bounds: (29.70 - 31.35) data (2.00)
-Bin number 19 bounds: (31.35 - 33.00) data (0.00)
-*******************************
-* IMAGE SIZE is (32 by 1)
-*******************************
-Bin number 0 bounds: (0.0 - 1.7) data (2.00)
-Bin number 1 bounds: (1.7 - 3.3) data (2.00)
-Bin number 2 bounds: (3.3 - 5.0) data (1.00)
-Bin number 3 bounds: (5.0 - 6.6) data (2.00)
-Bin number 4 bounds: (6.6 - 8.2) data (2.00)
-Bin number 5 bounds: (8.2 - 9.9) data (1.00)
-Bin number 6 bounds: (9.9 - 11.6) data (2.00)
-Bin number 7 bounds: (11.6 - 13.2) data (2.00)
-Bin number 8 bounds: (13.2 - 14.9) data (1.00)
-Bin number 9 bounds: (14.9 - 16.5) data (2.00)
-Bin number 10 bounds: (16.5 - 18.2) data (2.00)
-Bin number 11 bounds: (18.2 - 19.8) data (1.00)
-Bin number 12 bounds: (19.8 - 21.5) data (2.00)
-Bin number 13 bounds: (21.5 - 23.1) data (2.00)
-Bin number 14 bounds: (23.1 - 24.8) data (1.00)
-Bin number 15 bounds: (24.8 - 26.4) data (2.00)
-Bin number 16 bounds: (26.4 - 28.1) data (1.00)
-Bin number 17 bounds: (28.1 - 29.7) data (2.00)
-Bin number 18 bounds: (29.7 - 31.4) data (2.00)
-Bin number 19 bounds: (31.4 - 33.0) data (0.00)
-Bin number 0 bounds: (0.00 - 1.65) data (2.00)
-Bin number 1 bounds: (1.65 - 3.30) data (2.00)
-Bin number 2 bounds: (3.30 - 4.95) data (1.00)
-Bin number 3 bounds: (4.95 - 6.60) data (2.00)
-Bin number 4 bounds: (6.60 - 8.25) data (2.00)
-Bin number 5 bounds: (8.25 - 9.90) data (1.00)
-Bin number 6 bounds: (9.90 - 11.55) data (2.00)
-Bin number 7 bounds: (11.55 - 13.20) data (2.00)
-Bin number 8 bounds: (13.20 - 14.85) data (1.00)
-Bin number 9 bounds: (14.85 - 16.50) data (2.00)
-Bin number 10 bounds: (16.50 - 18.15) data (2.00)
-Bin number 11 bounds: (18.15 - 19.80) data (1.00)
-Bin number 12 bounds: (19.80 - 21.45) data (2.00)
-Bin number 13 bounds: (21.45 - 23.10) data (2.00)
-Bin number 14 bounds: (23.10 - 24.75) data (1.00)
-Bin number 15 bounds: (24.75 - 26.40) data (2.00)
-Bin number 16 bounds: (26.40 - 28.05) data (1.00)
-Bin number 17 bounds: (28.05 - 29.70) data (2.00)
-Bin number 18 bounds: (29.70 - 31.35) data (2.00)
-Bin number 19 bounds: (31.35 - 33.00) data (0.00)
-*******************************
-* IMAGE SIZE is (32 by 32)
-*******************************
-Bin number 0 bounds: (0.0 - 3.2) data (10.00)
-Bin number 1 bounds: (3.2 - 6.4) data (18.00)
-Bin number 2 bounds: (6.4 - 9.6) data (27.00)
-Bin number 3 bounds: (9.6 - 12.8) data (36.00)
-Bin number 4 bounds: (12.8 - 16.0) data (45.00)
-Bin number 5 bounds: (16.0 - 19.2) data (74.00)
-Bin number 6 bounds: (19.2 - 22.4) data (66.00)
-Bin number 7 bounds: (22.4 - 25.6) data (75.00)
-Bin number 8 bounds: (25.6 - 28.8) data (84.00)
-Bin number 9 bounds: (28.8 - 32.0) data (93.00)
-Bin number 10 bounds: (32.0 - 35.2) data (118.00)
-Bin number 11 bounds: (35.2 - 38.4) data (78.00)
-Bin number 12 bounds: (38.4 - 41.6) data (69.00)
-Bin number 13 bounds: (41.6 - 44.8) data (60.00)
-Bin number 14 bounds: (44.8 - 48.0) data (51.00)
-Bin number 15 bounds: (48.0 - 51.2) data (54.00)
-Bin number 16 bounds: (51.2 - 54.4) data (30.00)
-Bin number 17 bounds: (54.4 - 57.6) data (21.00)
-Bin number 18 bounds: (57.6 - 60.8) data (12.00)
-Bin number 19 bounds: (60.8 - 64.0) data (3.00)
-Bin number 0 bounds: (0.00 - 3.20) data (10.00)
-Bin number 1 bounds: (3.20 - 6.40) data (18.00)
-Bin number 2 bounds: (6.40 - 9.60) data (27.00)
-Bin number 3 bounds: (9.60 - 12.80) data (36.00)
-Bin number 4 bounds: (12.80 - 16.00) data (45.00)
-Bin number 5 bounds: (16.00 - 19.20) data (74.00)
-Bin number 6 bounds: (19.20 - 22.40) data (66.00)
-Bin number 7 bounds: (22.40 - 25.60) data (75.00)
-Bin number 8 bounds: (25.60 - 28.80) data (84.00)
-Bin number 9 bounds: (28.80 - 32.00) data (93.00)
-Bin number 10 bounds: (32.00 - 35.20) data (115.00)
-Bin number 11 bounds: (35.20 - 38.40) data (66.00)
-Bin number 12 bounds: (38.40 - 41.60) data (48.00)
-Bin number 13 bounds: (41.60 - 44.80) data (30.00)
-Bin number 14 bounds: (44.80 - 48.00) data (12.00)
-Bin number 15 bounds: (48.00 - 51.20) data (0.00)
-Bin number 16 bounds: (51.20 - 54.40) data (0.00)
-Bin number 17 bounds: (54.40 - 57.60) data (0.00)
-Bin number 18 bounds: (57.60 - 60.80) data (0.00)
-Bin number 19 bounds: (60.80 - 64.00) data (0.00)
-*******************************
-* IMAGE SIZE is (32 by 64)
-*******************************
-Bin number 0 bounds: (0.0 - 4.8) data (15.00)
-Bin number 1 bounds: (4.8 - 9.6) data (40.00)
-Bin number 2 bounds: (9.6 - 14.4) data (65.00)
-Bin number 3 bounds: (14.4 - 19.2) data (90.00)
-Bin number 4 bounds: (19.2 - 24.0) data (90.00)
-Bin number 5 bounds: (24.0 - 28.8) data (135.00)
-Bin number 6 bounds: (28.8 - 33.6) data (157.00)
-Bin number 7 bounds: (33.6 - 38.4) data (160.00)
-Bin number 8 bounds: (38.4 - 43.2) data (160.00)
-Bin number 9 bounds: (43.2 - 48.0) data (128.00)
-Bin number 10 bounds: (48.0 - 52.8) data (160.00)
-Bin number 11 bounds: (52.8 - 57.6) data (160.00)
-Bin number 12 bounds: (57.6 - 62.4) data (160.00)
-Bin number 13 bounds: (62.4 - 67.2) data (150.00)
-Bin number 14 bounds: (67.2 - 72.0) data (102.00)
-Bin number 15 bounds: (72.0 - 76.8) data (105.00)
-Bin number 16 bounds: (76.8 - 81.6) data (80.00)
-Bin number 17 bounds: (81.6 - 86.4) data (55.00)
-Bin number 18 bounds: (86.4 - 91.2) data (30.00)
-Bin number 19 bounds: (91.2 - 96.0) data (6.00)
-Bin number 0 bounds: (0.00 - 4.80) data (15.00)
-Bin number 1 bounds: (4.80 - 9.60) data (40.00)
-Bin number 2 bounds: (9.60 - 14.40) data (65.00)
-Bin number 3 bounds: (14.40 - 19.20) data (90.00)
-Bin number 4 bounds: (19.20 - 24.00) data (90.00)
-Bin number 5 bounds: (24.00 - 28.80) data (135.00)
-Bin number 6 bounds: (28.80 - 33.60) data (157.00)
-Bin number 7 bounds: (33.60 - 38.40) data (160.00)
-Bin number 8 bounds: (38.40 - 43.20) data (160.00)
-Bin number 9 bounds: (43.20 - 48.00) data (128.00)
-Bin number 10 bounds: (48.00 - 52.80) data (154.00)
-Bin number 11 bounds: (52.80 - 57.60) data (130.00)
-Bin number 12 bounds: (57.60 - 62.40) data (105.00)
-Bin number 13 bounds: (62.40 - 67.20) data (76.00)
-Bin number 14 bounds: (67.20 - 72.00) data (42.00)
-Bin number 15 bounds: (72.00 - 76.80) data (30.00)
-Bin number 16 bounds: (76.80 - 81.60) data (6.00)
-Bin number 17 bounds: (81.60 - 86.40) data (0.00)
-Bin number 18 bounds: (86.40 - 91.20) data (0.00)
-Bin number 19 bounds: (91.20 - 96.00) data (0.00)
-*******************************
-* IMAGE SIZE is (64 by 32)
-*******************************
-Bin number 0 bounds: (0.0 - 4.8) data (15.00)
-Bin number 1 bounds: (4.8 - 9.6) data (40.00)
-Bin number 2 bounds: (9.6 - 14.4) data (65.00)
-Bin number 3 bounds: (14.4 - 19.2) data (90.00)
-Bin number 4 bounds: (19.2 - 24.0) data (90.00)
-Bin number 5 bounds: (24.0 - 28.8) data (135.00)
-Bin number 6 bounds: (28.8 - 33.6) data (157.00)
-Bin number 7 bounds: (33.6 - 38.4) data (160.00)
-Bin number 8 bounds: (38.4 - 43.2) data (160.00)
-Bin number 9 bounds: (43.2 - 48.0) data (128.00)
-Bin number 10 bounds: (48.0 - 52.8) data (160.00)
-Bin number 11 bounds: (52.8 - 57.6) data (160.00)
-Bin number 12 bounds: (57.6 - 62.4) data (160.00)
-Bin number 13 bounds: (62.4 - 67.2) data (150.00)
-Bin number 14 bounds: (67.2 - 72.0) data (102.00)
-Bin number 15 bounds: (72.0 - 76.8) data (105.00)
-Bin number 16 bounds: (76.8 - 81.6) data (80.00)
-Bin number 17 bounds: (81.6 - 86.4) data (55.00)
-Bin number 18 bounds: (86.4 - 91.2) data (30.00)
-Bin number 19 bounds: (91.2 - 96.0) data (6.00)
-Bin number 0 bounds: (0.00 - 4.80) data (15.00)
-Bin number 1 bounds: (4.80 - 9.60) data (40.00)
-Bin number 2 bounds: (9.60 - 14.40) data (65.00)
-Bin number 3 bounds: (14.40 - 19.20) data (90.00)
-Bin number 4 bounds: (19.20 - 24.00) data (90.00)
-Bin number 5 bounds: (24.00 - 28.80) data (135.00)
-Bin number 6 bounds: (28.80 - 33.60) data (157.00)
-Bin number 7 bounds: (33.60 - 38.40) data (160.00)
-Bin number 8 bounds: (38.40 - 43.20) data (160.00)
-Bin number 9 bounds: (43.20 - 48.00) data (128.00)
-Bin number 10 bounds: (48.00 - 52.80) data (154.00)
-Bin number 11 bounds: (52.80 - 57.60) data (130.00)
-Bin number 12 bounds: (57.60 - 62.40) data (105.00)
-Bin number 13 bounds: (62.40 - 67.20) data (76.00)
-Bin number 14 bounds: (67.20 - 72.00) data (42.00)
-Bin number 15 bounds: (72.00 - 76.80) data (30.00)
-Bin number 16 bounds: (76.80 - 81.60) data (6.00)
-Bin number 17 bounds: (81.60 - 86.40) data (0.00)
-Bin number 18 bounds: (86.40 - 91.20) data (0.00)
-Bin number 19 bounds: (91.20 - 96.00) data (0.00)
-*******************************
-* IMAGE SUBSET SIZE is (64 by 32)
-*******************************
-Bin number 0 bounds: (0.0 - 4.8) data (15.00)
-Bin number 1 bounds: (4.8 - 9.6) data (40.00)
-Bin number 2 bounds: (9.6 - 14.4) data (65.00)
-Bin number 3 bounds: (14.4 - 19.2) data (90.00)
-Bin number 4 bounds: (19.2 - 24.0) data (90.00)
-Bin number 5 bounds: (24.0 - 28.8) data (135.00)
-Bin number 6 bounds: (28.8 - 33.6) data (157.00)
-Bin number 7 bounds: (33.6 - 38.4) data (160.00)
-Bin number 8 bounds: (38.4 - 43.2) data (160.00)
-Bin number 9 bounds: (43.2 - 48.0) data (128.00)
-Bin number 10 bounds: (48.0 - 52.8) data (160.00)
-Bin number 11 bounds: (52.8 - 57.6) data (160.00)
-Bin number 12 bounds: (57.6 - 62.4) data (160.00)
-Bin number 13 bounds: (62.4 - 67.2) data (150.00)
-Bin number 14 bounds: (67.2 - 72.0) data (102.00)
-Bin number 15 bounds: (72.0 - 76.8) data (105.00)
-Bin number 16 bounds: (76.8 - 81.6) data (80.00)
-Bin number 17 bounds: (81.6 - 86.4) data (55.00)
-Bin number 18 bounds: (86.4 - 91.2) data (30.00)
-Bin number 19 bounds: (91.2 - 96.0) data (6.00)
-Bin number 0 bounds: (0.00 - 4.80) data (15.00)
-Bin number 1 bounds: (4.80 - 9.60) data (40.00)
-Bin number 2 bounds: (9.60 - 14.40) data (65.00)
-Bin number 3 bounds: (14.40 - 19.20) data (90.00)
-Bin number 4 bounds: (19.20 - 24.00) data (90.00)
-Bin number 5 bounds: (24.00 - 28.80) data (135.00)
-Bin number 6 bounds: (28.80 - 33.60) data (157.00)
-Bin number 7 bounds: (33.60 - 38.40) data (160.00)
-Bin number 8 bounds: (38.40 - 43.20) data (160.00)
-Bin number 9 bounds: (43.20 - 48.00) data (128.00)
-Bin number 10 bounds: (48.00 - 52.80) data (154.00)
-Bin number 11 bounds: (52.80 - 57.60) data (130.00)
-Bin number 12 bounds: (57.60 - 62.40) data (105.00)
-Bin number 13 bounds: (62.40 - 67.20) data (76.00)
-Bin number 14 bounds: (67.20 - 72.00) data (42.00)
-Bin number 15 bounds: (72.00 - 76.80) data (30.00)
-Bin number 16 bounds: (76.80 - 81.60) data (6.00)
-Bin number 17 bounds: (81.60 - 86.40) data (0.00)
-Bin number 18 bounds: (86.40 - 91.20) data (0.00)
-Bin number 19 bounds: (91.20 - 96.00) data (0.00)
-<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
-    Unallowable operation: out is NULL.
-<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
-    Unallowable operation: in is NULL.
-<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
-    Unallowable operation: out is NULL.
-<DATE><TIME>|<HOST>|I|testPsImageHistogram
-    Following should be an error for invalid mask type.
-<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
-    Unallowable operation: psImage mask has incorrect type.
-
----> TESTPOINT PASSED (psImage{psImageHistogram} | tst_psImageStats.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStats.c                                         *
-*            TestPoint: psImage{psImageStats}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-*******************************
-* IMAGE SIZE is (1 by 1)
-*******************************
-The sample mean was 0.00
-The sample mean was 0.00
-*******************************
-* IMAGE SIZE is (1 by 32)
-*******************************
-The sample mean was 15.50
-The sample mean was 15.50
-*******************************
-* IMAGE SIZE is (32 by 1)
-*******************************
-The sample mean was 15.50
-The sample mean was 15.50
-*******************************
-* IMAGE SIZE is (32 by 32)
-*******************************
-The sample mean was 31.00
-The sample mean was 26.21
-*******************************
-* IMAGE SIZE is (32 by 64)
-*******************************
-The sample mean was 47.00
-The sample mean was 39.66
-*******************************
-* IMAGE SIZE is (64 by 32)
-*******************************
-The sample mean was 47.00
-The sample mean was 39.66
-*******************************
-* IMAGE SUBSET SIZE is (64 by 32)
-*******************************
-The sample mean was 47.00
-The sample mean was 39.66
-<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
-    Error: stats->options is 0.
-<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
-    Unallowable operation: stats is NULL.
-<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
-    Error: stats->options is 0.
-<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
-    Unallowable operation: psImage mask has incorrect type.
-
----> TESTPOINT PASSED (psImage{psImageStats} | tst_psImageStats.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStats.c                                         *
-*            TestPoint: psImage{psImageFitPolynomial}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-Cheby Polynomial (0, 0) coefficient is 189.00
-Cheby Polynomial (0, 1) coefficient is 25.94
-Cheby Polynomial (0, 2) coefficient is 0.00
-Cheby Polynomial (0, 3) coefficient is 2.88
-Cheby Polynomial (0, 4) coefficient is 0.00
-Cheby Polynomial (0, 5) coefficient is 1.04
-Cheby Polynomial (0, 6) coefficient is 0.00
-Cheby Polynomial (0, 7) coefficient is 0.53
-Cheby Polynomial (1, 0) coefficient is 129.68
-Cheby Polynomial (1, 1) coefficient is 0.00
-Cheby Polynomial (1, 2) coefficient is 0.00
-Cheby Polynomial (1, 3) coefficient is 0.00
-Cheby Polynomial (1, 4) coefficient is 0.00
-Cheby Polynomial (1, 5) coefficient is 0.00
-Cheby Polynomial (1, 6) coefficient is 0.00
-Cheby Polynomial (1, 7) coefficient is 0.00
-Cheby Polynomial (2, 0) coefficient is 0.00
-Cheby Polynomial (2, 1) coefficient is 0.00
-Cheby Polynomial (2, 2) coefficient is 0.00
-Cheby Polynomial (2, 3) coefficient is 0.00
-Cheby Polynomial (2, 4) coefficient is 0.00
-Cheby Polynomial (2, 5) coefficient is 0.00
-Cheby Polynomial (2, 6) coefficient is 0.00
-Cheby Polynomial (2, 7) coefficient is 0.00
-Cheby Polynomial (3, 0) coefficient is 14.40
-Cheby Polynomial (3, 1) coefficient is 0.00
-Cheby Polynomial (3, 2) coefficient is 0.00
-Cheby Polynomial (3, 3) coefficient is 0.00
-Cheby Polynomial (3, 4) coefficient is 0.00
-Cheby Polynomial (3, 5) coefficient is 0.00
-Cheby Polynomial (3, 6) coefficient is 0.00
-Cheby Polynomial (3, 7) coefficient is 0.00
-Cheby Polynomial (4, 0) coefficient is 0.00
-Cheby Polynomial (4, 1) coefficient is 0.00
-Cheby Polynomial (4, 2) coefficient is 0.00
-Cheby Polynomial (4, 3) coefficient is 0.00
-Cheby Polynomial (4, 4) coefficient is 0.00
-Cheby Polynomial (4, 5) coefficient is 0.00
-Cheby Polynomial (4, 6) coefficient is 0.00
-Cheby Polynomial (4, 7) coefficient is 0.00
-Cheby Polynomial (5, 0) coefficient is 5.17
-Cheby Polynomial (5, 1) coefficient is 0.00
-Cheby Polynomial (5, 2) coefficient is 0.00
-Cheby Polynomial (5, 3) coefficient is 0.00
-Cheby Polynomial (5, 4) coefficient is 0.00
-Cheby Polynomial (5, 5) coefficient is 0.00
-Cheby Polynomial (5, 6) coefficient is 0.00
-Cheby Polynomial (5, 7) coefficient is 0.00
-Cheby Polynomial (6, 0) coefficient is 0.00
-Cheby Polynomial (6, 1) coefficient is 0.00
-Cheby Polynomial (6, 2) coefficient is 0.00
-Cheby Polynomial (6, 3) coefficient is 0.00
-Cheby Polynomial (6, 4) coefficient is 0.00
-Cheby Polynomial (6, 5) coefficient is 0.00
-Cheby Polynomial (6, 6) coefficient is 0.00
-Cheby Polynomial (6, 7) coefficient is 0.00
-Cheby Polynomial (7, 0) coefficient is 2.63
-Cheby Polynomial (7, 1) coefficient is 0.00
-Cheby Polynomial (7, 2) coefficient is 0.00
-Cheby Polynomial (7, 3) coefficient is 0.00
-Cheby Polynomial (7, 4) coefficient is 0.00
-Cheby Polynomial (7, 5) coefficient is 0.00
-Cheby Polynomial (7, 6) coefficient is 0.00
-Cheby Polynomial (7, 7) coefficient is 0.00
-<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
-    Following should be an error message for NULL coeffs argument.
-<DATE><TIME>|<HOST>|E|psImageFitPolynomial (FILE:LINENO)
-    Unallowable operation: polynomial coeffs or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
-    Following should be a error message for NULL input argument.
-<DATE><TIME>|<HOST>|E|psImageFitPolynomial (FILE:LINENO)
-    Unallowable operation: psImage input or its data is NULL.
-<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
-    Following should be an error message for NULL coeffs argument.
-<DATE><TIME>|<HOST>|E|psImageEvalPolynomial (FILE:LINENO)
-    Unallowable operation: polynomial coeffs or its coeffs is NULL.
-<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
-    Following should be a error message for NULL input argument.
-<DATE><TIME>|<HOST>|E|psImageEvalPolynomial (FILE:LINENO)
-    Unallowable operation: psImage input or its data is NULL.
-
----> TESTPOINT PASSED (psImage{psImageFitPolynomial} | tst_psImageStats.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStats.c                                         *
-*            TestPoint: psImage{psImagePixelInterpolate}                           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 
-1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 
-2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 
-3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 
-4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 
-5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 
-6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 
-7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 
-8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 
-9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 
-0.0 0.7 1.7 2.7 3.7 4.7 5.7 6.7 7.7 
-0.7 1.4 2.4 3.4 4.4 5.4 6.4 7.4 8.4 
-1.7 2.4 3.4 4.4 5.4 6.4 7.4 8.4 9.4 
-2.7 3.4 4.4 5.4 6.4 7.4 8.4 9.4 10.4 
-3.7 4.4 5.4 6.4 7.4 8.4 9.4 10.4 11.4 
-4.7 5.4 6.4 7.4 8.4 9.4 10.4 11.4 12.4 
-5.7 6.4 7.4 8.4 9.4 10.4 11.4 12.4 13.4 
-6.7 7.4 8.4 9.4 10.4 11.4 12.4 13.4 14.4 
-7.7 8.4 9.4 10.4 11.4 12.4 13.4 14.4 15.4 
-image[0.2][0.2] is interpolated at 0.0
-image[0.2][1.2] is interpolated at 0.7
-image[0.2][2.2] is interpolated at 1.7
-image[0.2][3.2] is interpolated at 2.7
-image[0.2][4.2] is interpolated at 3.7
-image[0.2][5.2] is interpolated at 4.7
-image[0.2][6.2] is interpolated at 5.7
-image[0.2][7.2] is interpolated at 6.7
-image[0.2][8.2] is interpolated at 7.7
-image[1.2][0.2] is interpolated at 0.7
-image[1.2][1.2] is interpolated at 1.4
-image[1.2][2.2] is interpolated at 2.4
-image[1.2][3.2] is interpolated at 3.4
-image[1.2][4.2] is interpolated at 4.4
-image[1.2][5.2] is interpolated at 5.4
-image[1.2][6.2] is interpolated at 6.4
-image[1.2][7.2] is interpolated at 7.4
-image[1.2][8.2] is interpolated at 8.4
-image[2.2][0.2] is interpolated at 1.7
-image[2.2][1.2] is interpolated at 2.4
-image[2.2][2.2] is interpolated at 3.4
-image[2.2][3.2] is interpolated at 4.4
-image[2.2][4.2] is interpolated at 5.4
-image[2.2][5.2] is interpolated at 6.4
-image[2.2][6.2] is interpolated at 7.4
-image[2.2][7.2] is interpolated at 8.4
-image[2.2][8.2] is interpolated at 9.4
-image[3.2][0.2] is interpolated at 2.7
-image[3.2][1.2] is interpolated at 3.4
-image[3.2][2.2] is interpolated at 4.4
-image[3.2][3.2] is interpolated at 5.4
-image[3.2][4.2] is interpolated at 6.4
-image[3.2][5.2] is interpolated at 7.4
-image[3.2][6.2] is interpolated at 8.4
-image[3.2][7.2] is interpolated at 9.4
-image[3.2][8.2] is interpolated at 10.4
-image[4.2][0.2] is interpolated at 3.7
-image[4.2][1.2] is interpolated at 4.4
-image[4.2][2.2] is interpolated at 5.4
-image[4.2][3.2] is interpolated at 6.4
-image[4.2][4.2] is interpolated at 7.4
-image[4.2][5.2] is interpolated at 8.4
-image[4.2][6.2] is interpolated at 9.4
-image[4.2][7.2] is interpolated at 10.4
-image[4.2][8.2] is interpolated at 11.4
-image[5.2][0.2] is interpolated at 4.7
-image[5.2][1.2] is interpolated at 5.4
-image[5.2][2.2] is interpolated at 6.4
-image[5.2][3.2] is interpolated at 7.4
-image[5.2][4.2] is interpolated at 8.4
-image[5.2][5.2] is interpolated at 9.4
-image[5.2][6.2] is interpolated at 10.4
-image[5.2][7.2] is interpolated at 11.4
-image[5.2][8.2] is interpolated at 12.4
-image[6.2][0.2] is interpolated at 5.7
-image[6.2][1.2] is interpolated at 6.4
-image[6.2][2.2] is interpolated at 7.4
-image[6.2][3.2] is interpolated at 8.4
-image[6.2][4.2] is interpolated at 9.4
-image[6.2][5.2] is interpolated at 10.4
-image[6.2][6.2] is interpolated at 11.4
-image[6.2][7.2] is interpolated at 12.4
-image[6.2][8.2] is interpolated at 13.4
-image[7.2][0.2] is interpolated at 6.7
-image[7.2][1.2] is interpolated at 7.4
-image[7.2][2.2] is interpolated at 8.4
-image[7.2][3.2] is interpolated at 9.4
-image[7.2][4.2] is interpolated at 10.4
-image[7.2][5.2] is interpolated at 11.4
-image[7.2][6.2] is interpolated at 12.4
-image[7.2][7.2] is interpolated at 13.4
-image[7.2][8.2] is interpolated at 14.4
-image[8.2][0.2] is interpolated at 7.7
-image[8.2][1.2] is interpolated at 8.4
-image[8.2][2.2] is interpolated at 9.4
-image[8.2][3.2] is interpolated at 10.4
-image[8.2][4.2] is interpolated at 11.4
-image[8.2][5.2] is interpolated at 12.4
-image[8.2][6.2] is interpolated at 13.4
-image[8.2][7.2] is interpolated at 14.4
-image[8.2][8.2] is interpolated at 15.4
-
----> TESTPOINT PASSED (psImage{psImagePixelInterpolate} | tst_psImageStats.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStats.c                                         *
-*            TestPoint: psImage{psImageEvalPolynom()}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-psImageFitPolynomial(), psImageEvalPolynom(): (1 by 1)
-pixel [0][0] is 25.00 should be 1.00
-The chi-squared per pixel is 576.00
-psImageFitPolynomial(), psImageEvalPolynom(): (5 by 1)
-pixel [0][0] is 5.00 should be 1.00
-pixel [1][0] is 40.00 should be 8.00
-pixel [2][0] is 125.00 should be 25.00
-pixel [3][0] is 260.00 should be 52.00
-pixel [4][0] is 445.00 should be 89.00
-The chi-squared per pixel is 36208.00
-psImageFitPolynomial(), psImageEvalPolynom(): (1 by 5)
-pixel [0][0] is 5.00 should be 1.00
-pixel [0][1] is 50.00 should be 10.00
-pixel [0][2] is 155.00 should be 31.00
-pixel [0][3] is 320.00 should be 64.00
-pixel [0][4] is 545.00 should be 109.00
-The chi-squared per pixel is 54524.80
-psImageFitPolynomial(), psImageEvalPolynom(): (5 by 5)
-The chi-squared per pixel is 0.00
-psImageFitPolynomial(), psImageEvalPolynom(): (1 by 1)
-pixel [0][0] is 25.00 should be 1.00
-The chi-squared per pixel is 576.00
-psImageFitPolynomial(), psImageEvalPolynom(): (5 by 1)
-pixel [0][0] is 5.00 should be 1.00
-pixel [1][0] is 40.00 should be 8.00
-pixel [2][0] is 125.00 should be 25.00
-pixel [3][0] is 260.00 should be 52.00
-pixel [4][0] is 445.00 should be 89.00
-The chi-squared per pixel is 36208.00
-psImageFitPolynomial(), psImageEvalPolynom(): (1 by 5)
-pixel [0][0] is 5.00 should be 1.00
-pixel [0][1] is 50.00 should be 10.00
-pixel [0][2] is 155.00 should be 31.00
-pixel [0][3] is 320.00 should be 64.00
-pixel [0][4] is 545.00 should be 109.00
-The chi-squared per pixel is 54524.81
-psImageFitPolynomial(), psImageEvalPolynom(): (5 by 5)
-The chi-squared per pixel is 0.00
-
----> TESTPOINT PASSED (psImage{psImageEvalPolynom()} | tst_psImageStats.c)
-
Index: unk/psLib/test/image/verified/tst_psImageStructManip.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageStructManip.stderr	(revision 4546)
+++ 	(revision )
@@ -1,125 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStructManip.c                                   *
-*            TestPoint: psImage{psImageSubset}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure members nrow and ncol are equal to the input parameter nrow and ncol respectively.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure contains expected values in the row member, if the input psImage structure image contains known values.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure member type is equal to the input psImage structure member type.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure members row0 and col0 are equal to the input parameters row0 and col0 respectively.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure member parent is equal to the input psImage structure pointer image.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure member children is null.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the input psImage structure image only has the following members changed: 1) Nchildren is increased by one. 2) parent contains pointer psImage structure out at parent[Nchildren-1].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameter image is null. Also verified the input psImage structure is not modified.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program  execution doesn't stop, if the input parameters nrow and/or ncol are zero. Also verify input psImage structure is not modified.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,128:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [64:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameters row0 and col0 are not within the range of values of psImage structure image.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,0:511], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:255,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [-1:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,-1:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    Verify the returned psImage structure pointer is null and program execution doesn't stop if the input parameters nrow, ncol, row0 and col0 specify a range of data not within the input psImage structure image.  Also verify the input psImage structure is not modified.
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:63,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:128,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    An error should follow...
-<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
-    Specified subset range, [0:128,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
-<DATE><TIME>|<HOST>|I|testImageSubset
-    psImageFreeChildren shall deallocate any children images of a psImage structure
-
----> TESTPOINT PASSED (psImage{psImageSubset} | tst_psImageStructManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStructManip.c                                   *
-*            TestPoint: psImage{psImageCopy}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psU8
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psU16
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psU32
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psS8
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psS16
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psS32
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psF32
-<DATE><TIME>|<HOST>|I|testImageCopy
-    Image Copy Test for psF64
-<DATE><TIME>|<HOST>|I|testImageCopy
-    An error should follow...
-<DATE><TIME>|<HOST>|E|psImageCopy (FILE:LINENO)
-    Can not operate on a NULL psImage.
-
----> TESTPOINT PASSED (psImage{psImageCopy} | tst_psImageStructManip.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psImageStructManip.c                                   *
-*            TestPoint: psImage{psImageTrim}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Can not operate on a NULL psImage.
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [-1:299,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:299,-1:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:300,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:299,0:200], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:-1,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
-<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
-    Specified subset range, [0:299,0:-1], is invalid or outside input psImage's boundaries, [0:299,0:199].
-
----> TESTPOINT PASSED (psImage{psImageTrim} | tst_psImageStructManip.c)
-
Index: /trunk/psLib/test/imageops/Makefile.am
===================================================================
--- /trunk/psLib/test/imageops/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/imageops/Makefile.am	(revision 4547)
@@ -0,0 +1,34 @@
+#Makefile for imageops tests of psLib
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psImageConvolve \
+	tst_psImageGeomManip \
+	tst_psImageInterpolate \
+	tst_psImagePixelExtract \
+	tst_psImagePixelManip \
+	tst_psImageStats \
+	tst_psImageStructManip
+
+tst_psImageConvolve_SOURCES =  tst_psImageConvolve.c
+tst_psImageGeomManip_SOURCES =  tst_psImageGeomManip.c
+tst_psImageInterpolate_SOURCES =  tst_psImageInterpolate.c
+tst_psImagePixelExtract_SOURCES =  tst_psImagePixelExtract.c
+tst_psImagePixelManip_SOURCES =  tst_psImagePixelManip.c
+tst_psImageStats_SOURCES =  tst_psImageStats.c
+tst_psImageStructManip_SOURCES =  tst_psImageStructManip.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA) temp/*
+
+tests: $(TESTS) $(check_DATA)
+
+test: check
Index: /trunk/psLib/test/imageops/tst_psImageConvolve.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImageConvolve.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImageConvolve.c	(revision 4547)
@@ -0,0 +1,435 @@
+/** @file  tst_psImageConvolve.c
+ *
+ *  @brief Contains the tests for psImageConvolve.[ch]
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+#include "psType.h"
+
+static psS32 testKernelAlloc(void);
+static psS32 testKernelGenerate(void);
+static psS32 testImageConvolve(void);
+
+testDescription tests[] = {
+                              {testKernelAlloc,731,"psKernelAlloc",0,false},
+                              {testKernelGenerate,732,"psKernelGenerate",0,false},
+                              {testImageConvolve,733,"psImageConvolve",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
+}
+
+static psS32 testKernelAlloc(void)
+{
+    psS32 numCases = 4;
+    psS32 xMin[] = { -5,  0,-10,  5};
+    psS32 xMax[] = {  0,  5, -5, 10};
+    psS32 yMin[] = { -4,  0, -8,  4};
+    psS32 yMax[] = {  0,  4, -4,  8};
+    psS32 i;
+    psKernel* k;
+
+    for (i=0;i<numCases;i++) {
+        k = psKernelAlloc(xMin[i],xMax[i],yMin[i],yMax[i]);
+
+        if (k == NULL) {
+            psError(PS_ERR_UNKNOWN, true,"psKernelAlloc returned NULL for [%d:%d,%d:%d].",
+                    xMin[i], xMax[i], yMin[i], yMax[i]);
+            return i*10+1;
+        }
+
+        if (k->xMin != xMin[i] || k->xMax != xMax[i] ||
+                k->yMin != yMin[i] || k->yMax != yMax[i]) {
+            psError(PS_ERR_UNKNOWN, true,"Min/max members, [%d:%d,%d:%d], of psKernel wrong. Should be [%d:%d,%d:%d].",
+                    k->xMin,k->xMax, k->yMin, k->yMax,
+                    xMin[i], xMax[i], yMin[i], yMax[i]);
+            return i*10+2;
+        }
+
+        if (k->image->numCols != xMax[i]-xMin[i]+1 ||
+                k->image->numRows != yMax[i]-yMin[i]+1) {
+            psError(PS_ERR_UNKNOWN, true,"Size of the kernel image is wrong (%dx%d vs %dx%d).",
+                    xMax[i]-xMin[i]+1, yMax[i]-yMin[i]+1,
+                    k->image->numCols, k->image->numRows);
+            return i*10+2;
+        }
+
+        for (psS32 j=yMin[i]; j<yMax[i]; j++) {
+            if (k->kernel[j]+xMin[i] != k->image->data.PS_TYPE_KERNEL_DATA[j-yMin[i]]) {
+                psError(PS_ERR_UNKNOWN, true,"The kernel pointer was set wrong for row %d.",
+                        j);
+                return i*10+4;
+            }
+        }
+
+        psFree(k);
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be a warning (xMin > xMax)");
+    k = psKernelAlloc(5, -5, -2, 2);
+    if (k == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc returned NULL for xMin > xMax.");
+        return i*10+5;
+    }
+
+    if (k->xMin != -5 || k->xMax != 5) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc didn't swap xMin & xMax.");
+        return i*10+6;
+    }
+
+    psFree(k);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be a warning (yMin > yMax)");
+    k = psKernelAlloc(-2, 2, 5, -5);
+    if (k == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc returned NULL for yMin > yMax.");
+        return i*10+7;
+    }
+
+    if (k->yMin != -5 || k->yMax != 5) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelAlloc didn't swap yMin & yMax.");
+        return i*10+8;
+    }
+
+    psFree(k);
+
+    return 0;
+}
+
+static psS32 testKernelGenerate(void)
+{
+    psS32 size = 5;
+    psS32 t[] = { 1, 2, 8, 9, 10 };
+    psS32 x[] = { 0, 1, 0, -1, 0 };
+    psS32 y[] = { 2, 1, -1, -2, 0 };
+    float sum;
+
+    psVector* xVec = psVectorAlloc(size,PS_TYPE_U32);
+    psVector* yVec = psVectorAlloc(size,PS_TYPE_U32);
+    psVector* tVec = psVectorAlloc(size,PS_TYPE_U32);
+
+    for (psS32 i = 0; i < size; i++) {
+        xVec->data.U32[i] = x[i];
+        yVec->data.U32[i] = y[i];
+        tVec->data.U32[i] = t[i];
+    }
+
+    psKernel* result = psKernelGenerate(tVec, xVec, yVec, false);
+
+    if (result == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned NULL.");
+        return 1;
+    }
+
+    if (result->xMin != -1 || result->xMax != 1 ||
+            result->yMin != -2 || result->yMax != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result had a range of [%d:%d,%d:%d].  Suppose to be [-2:2,-1:1].",
+                result->xMin, result->xMax, result->yMin, result->yMax);
+        return 2;
+    }
+
+    sum = 0.0;
+    printf("Resulting kernel:\n");
+    for (psS32 y = result->yMin; y <= result->yMax; y++) {
+        for (psS32 x = result->xMin; x <= result->xMax; x++) {
+            printf(" %6.2f ", result->kernel[y][x]);
+            sum += result->kernel[y][x];
+        }
+        printf("\n");
+    }
+    if (fabsf(1.0 - sum) > FLT_EPSILON) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result is not normalized (sum=%g).",
+                sum);
+
+        return 3;
+
+    }
+
+    if (fabsf(result->kernel[-2][0] - 0.1) > FLT_EPSILON ||
+            fabsf(result->kernel[ -1][ -1] - 0.1) > FLT_EPSILON ||
+            fabsf(result->kernel[ 1][ 0] - 0.6) > FLT_EPSILON ||
+            fabsf(result->kernel[2][1] - 0.1) > FLT_EPSILON) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g,%g,%g, are wrong. Suppose to be 0.1,0.1,0.6,0.1",
+                result->kernel[-2][0], result->kernel[-1][-1],
+                result->kernel[1][0], result->kernel[2][1]);
+
+        return 4;
+    }
+
+    psFree(result);
+    psFree(xVec);
+    psFree(yVec);
+    psFree(tVec);
+
+    xVec = psVectorAlloc(size,PS_TYPE_S16);
+    yVec = psVectorAlloc(size,PS_TYPE_S16);
+    tVec = psVectorAlloc(size,PS_TYPE_S16);
+
+    for (psS32 i = 0; i < size; i++) {
+        xVec->data.S16[i] = x[i];
+        yVec->data.S16[i] = y[i];
+        tVec->data.S16[i] = t[i];
+    }
+
+    result = psKernelGenerate(tVec, xVec, yVec, true);
+
+    if (result == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned NULL.");
+        return 5;
+    }
+
+    if (result->xMin != 0 || result->xMax != 1 ||
+            result->yMin != 0 || result->yMax != 3) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result had a range of [%d:%d,%d:%d].  Suppose to be [0:1,1:2].",
+                result->xMin, result->xMax, result->yMin, result->yMax);
+        return 6;
+    }
+
+    sum = 0.0;
+    printf("Resulting kernel (relative=true):\n");
+    for (psS32 y = result->yMin; y <= result->yMax; y++) {
+        for (psS32 x = result->xMin; x <= result->xMax; x++) {
+            printf(" %6.2f ", result->kernel[y][x]);
+            sum += result->kernel[y][x];
+        }
+        printf("\n");
+    }
+    if (fabsf(1.0 - sum) > FLT_EPSILON) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result is not normalized (sum=%g).",
+                sum);
+
+        return 7;
+
+    }
+
+    if (fabsf(result->kernel[0][0] - 19.0/30.0) > FLT_EPSILON ||
+            fabsf(result->kernel[2][0] - 1.0/30.0) > FLT_EPSILON ||
+            fabsf(result->kernel[2][1] - 8.0/30.0) > FLT_EPSILON ||
+            fabsf(result->kernel[3][1] - 2.0/30.0) > FLT_EPSILON) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g;%g,%g, are wrong. Suppose to be 2,6;1,0.",
+                result->kernel[0][0], result->kernel[2][0],
+                result->kernel[2][1], result->kernel[3][1]);
+
+        return 8;
+    }
+
+    psFree(result);
+    psFree(xVec);
+    psFree(yVec);
+    psFree(tVec);
+
+    xVec = psVectorAlloc(size,PS_TYPE_F32);
+    yVec = psVectorAlloc(size,PS_TYPE_F32);
+    tVec = psVectorAlloc(size,PS_TYPE_F32);
+
+    for (psS32 i = 0; i < size; i++) {
+        xVec->data.F32[i] = x[i]+0.1;
+        yVec->data.F32[i] = y[i]+0.2;
+        tVec->data.F32[i] = t[i]+0.3;
+    }
+
+    tVec->n--; // decrease size by one to make vectors unequal in length.
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    result = psKernelGenerate(tVec, xVec, yVec, false);
+    if (result != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned non-NULL given differing sized vectors.");
+        return 9;
+    }
+
+    psFree(result);
+
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be a error (time vector NULL).");
+    result = psKernelGenerate(NULL, xVec, yVec, true);
+    if (result != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned a kernel with no time vector.");
+        return 11;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be a error (x vector NULL).");
+    result = psKernelGenerate(tVec, NULL, yVec, true);
+    if (result != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned a kernel with no x vector.");
+        return 11;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be a error (y vector NULL).");
+    result = psKernelGenerate(tVec, xVec, NULL, true);
+    if (result != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned a kernel with no y vector.");
+        return 11;
+    }
+
+    psFree(xVec);
+    psFree(yVec);
+    psFree(tVec);
+    psFree(result);
+
+    return 0;
+}
+
+static psS32 testImageConvolve(void)
+{
+    const psS32 r = 200;
+    const psS32 c = 300;
+    psS32 sum;
+
+    // approximate a normalized gaussian kernel.
+    psKernel* g = psKernelAlloc(-1,1,-1,1);
+    g->kernel[-1][-1] =
+        g->kernel[-1][1] =
+            g->kernel[1][-1] =
+                g->kernel[1][1] = 0.0113;
+    g->kernel[1][0] =
+        g->kernel[-1][0] =
+            g->kernel[0][-1] =
+                g->kernel[0][1] = 0.0838;
+    g->kernel[0][0] = 0.6193;
+
+    // create a normalized non-symetric kernel.
+    psKernel* nsk = psKernelAlloc(0,2,0,2);
+    sum = 0.0;
+    for (psS32 i=0;i<2;i++) {
+        for (psS32 j=0;j<2;j++) {
+            nsk->kernel[i][j] = i+j;
+            sum = i+j;
+        }
+    }
+    for (psS32 i=0;i<2;i++) {
+        for (psS32 j=0;j<2;j++) {
+            nsk->kernel[i][j] /= sum;
+        }
+    }
+
+
+    psImage* img = psImageAlloc(c,r,PS_TYPE_F32);
+    memset(img->data.F32[0],0,c*r*PSELEMTYPE_SIZEOF(PS_TYPE_F32));
+    img->data.F32[0][0] = 1.0f;
+    img->data.F32[r/2][c/2] = 1.0f;
+    img->data.F32[r-1][c/2] = 1.0f;
+
+    // test spacial convolution of gaussian
+    psLogMsg(__func__,PS_LOG_INFO,"Testing direct gaussian convolution");
+    psImage* out = psImageConvolve(NULL, img, g, true);
+
+    if (out == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve returned a NULL for direct gaussian case.");
+        return 1;
+    }
+
+    if (out->numCols != c || out->numRows != r) {
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is %dx%d, but expected %dx%d.",
+                out->numCols, out->numRows,
+                c,r);
+        return 2;
+    }
+
+    if (out->type.type != PS_TYPE_F32) {
+        char* typeStr;
+        PS_TYPE_NAME(typeStr,out->type.type);
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is of type %s, not psF32.",
+                typeStr);
+        return 3;
+    }
+
+    // test values
+    for (psS32 i=-1;i<1;i++) {
+        for (psS32 j=-1;j<1;j++) {
+            if (fabsf(out->data.F32[r/2+i][c/2+j] - g->kernel[i][j]) > 0.0001) {
+                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
+                        c/2+j,r/2+i,
+                        out->data.F32[r/2+i][c/2+j], g->kernel[i][j]);
+                return 4;
+            }
+            if (i >= 0 && j >= 0 && fabsf(out->data.F32[i][j] - g->kernel[i][j]) > 0.0001) {
+                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
+                        j,i,
+                        out->data.F32[i][j], g->kernel[i][j]);
+                return 5;
+            }
+            if (i <= 0 && fabsf(out->data.F32[r-1+i][c/2+j] - g->kernel[i][j]) > 0.0001) {
+                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
+                        c/2+j,r-1+i,
+                        out->data.F32[r-1+i][c/2+j], g->kernel[i][j]);
+                return 6;
+            }
+        }
+    }
+
+    // test fourier convolution of gaussian
+    psLogMsg(__func__,PS_LOG_INFO,"Testing fourier gaussian convolution");
+    psImage* out2 = psImageConvolve(out, img, g, false);
+
+    if (out == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve returned a NULL for gaussian case.");
+        return 10;
+    }
+
+    if (out != out2) {
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve didn't recycle the supplied out image struct.");
+        return 11;
+    }
+
+    if (out->numCols != c || out->numRows != r) {
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is %dx%d, but expected %dx%d.",
+                out->numCols, out->numRows,
+                c,r);
+        return 12;
+    }
+
+    if (out->type.type != PS_TYPE_F32) {
+        char* typeStr;
+        PS_TYPE_NAME(typeStr,out->type.type);
+        psError(PS_ERR_UNKNOWN, true, "psImageConvolve result image is of type %s, not psF32.",
+                typeStr);
+        return 13;
+    }
+
+    // test values
+    for (psS32 i=-1;i<1;i++) {
+        for (psS32 j=-1;j<1;j++) {
+            if (fabsf(out->data.F32[r/2+i][c/2+j] - g->kernel[i][j]) > 0.01) {
+                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
+                        c/2+j,r/2+i,
+                        out->data.F32[r/2+i][c/2+j], g->kernel[i][j]);
+                return 14;
+            }
+            if (i >= 0 && j >= 0 && fabsf(out->data.F32[i][j] - g->kernel[i][j]) > 0.01) {
+                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
+                        j,i,
+                        out->data.F32[i][j], g->kernel[i][j]);
+                return 15;
+            }
+            if (i <= 0 && fabsf(out->data.F32[r-1+i][c/2+j] - g->kernel[i][j]) > 0.01) {
+                psError(PS_ERR_UNKNOWN, true,"Convolved image wrong at %d,%d.  Value is %g, expected %g.",
+                        c/2+j,r-1+i,
+                        out->data.F32[r-1+i][c/2+j], g->kernel[i][j]);
+                return 16;
+            }
+        }
+    }
+
+    psFree(g);
+    psFree(img);
+    psFree(nsk);
+    psFree(out);
+    return 0;
+}
+
Index: /trunk/psLib/test/imageops/tst_psImageGeomManip.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImageGeomManip.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImageGeomManip.c	(revision 4547)
@@ -0,0 +1,1204 @@
+/** @file  tst_psImageGeomManip.c
+ *
+ *  @brief Contains the tests for psImageManip.[ch]
+ *
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include <complex.h>
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <stdlib.h>
+#include <string.h>                    // for memset
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+#include "psType.h"
+
+static psS32 testImageRebin(void);
+static psS32 testImageRoll(void);
+static psS32 testImageRotate(void);
+static psS32 testImageShift(void);
+static psS32 testImageShiftCase(psS32 cols, psS32 rows, float colShift,float rowShift);
+static psS32 testImageResample(void);
+static psS32 testImageTransform(void);
+
+testDescription tests[] = {
+                              {testImageRebin,559,"psImageRebin",0,false},
+                              {testImageRoll,562,"psImageRoll",0,false},
+                              {testImageRotate,560,"psImageRotate",0,false},
+                              {testImageShift,561,"psImageShift",0,false},
+                              {testImageResample,743,"psImageResample",0,false},
+                              {testImageTransform,-1,"psImageTransform",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
+}
+
+static psS32 testImageRebin(void)
+{
+
+    /*
+    This function shall generate a rescaled version of a psImage structure
+    derived from a specified statistics method.
+    */
+
+    psImage* in = NULL;
+    psImage* out = NULL;
+    psImage* out2 = NULL;
+    psImage* out3 = NULL;
+    psImage* mask = NULL;
+    psImage* meanTruth = NULL;
+    psImage* meanTruthWMask = NULL;
+    psImage* maxTruth = NULL;
+    psStats stats;
+
+    /*
+    Verify the returned psImage structure contains expected values, if the
+    input parameter input contains known data, the input scale is a known
+    value with a known statistical method specified in stats. Cases should
+    include at least two different scales and statistical methods. Comparison
+    of expected values should include a delta to allow testing on different
+    platforms.
+    */
+
+    #define testRebinType(DATATYPE)  \
+    in = psImageAlloc(16,16,PS_TYPE_##DATATYPE); \
+    mask = psImageAlloc(16,16,PS_TYPE_U8); \
+    meanTruth = psImageAlloc(4,4,PS_TYPE_F32); \
+    meanTruthWMask = psImageAlloc(4,4,PS_TYPE_F32); \
+    maxTruth = psImageAlloc(6,6,PS_TYPE_F32); \
+    memset(meanTruth->data.F32[0],0,sizeof(psF32)*4*4); \
+    memset(meanTruthWMask->data.F32[0],0,sizeof(psF32)*4*4); \
+    memset(maxTruth->data.F32[0],0,sizeof(psF32)*6*6); \
+    for (psS32 row = 0; row<16; row++) { \
+        ps##DATATYPE* inRow = in->data.DATATYPE[row]; \
+        psF32* meanTruthRow = meanTruth->data.F32[row/4]; \
+        psF32* meanTruthWMaskRow = meanTruthWMask->data.F32[row/4]; \
+        psF32* maxTruthRow = maxTruth->data.F32[row/3]; \
+        psU8* maskRow = mask->data.U8[row]; \
+        for (psS32 col = 0; col<16; col++) { \
+            if(col != 15) { \
+                maskRow[col] = 0; \
+            } else { \
+                maskRow[col] = 1; \
+            } \
+            inRow[col] = row + col; \
+            meanTruthRow[col/4] += row + col; \
+            if (maxTruthRow[col/3] < row + col) { \
+                maxTruthRow[col/3] = row+col; \
+            } \
+            if(maskRow[col] == 0 ) { \
+                meanTruthWMaskRow[col/4] += row + col; \
+            } \
+        } \
+    } \
+    for (psS32 row = 0; row<4; row++) { \
+        psF32* meanTruthRow = meanTruth->data.F32[row]; \
+        psF32* meanTruthWMaskRow = meanTruthWMask->data.F32[row]; \
+        for (psS32 col = 0; col<4; col++) { \
+            meanTruthRow[col] /= 16; \
+            if ( col == 3 ) { \
+                meanTruthWMaskRow[col] /= 12; \
+            } else { \
+                meanTruthWMaskRow[col] /= 16; \
+            } \
+        } \
+    } \
+    stats.options = PS_STAT_SAMPLE_MEAN; \
+    out = psImageRebin(NULL,in,NULL,0,4,&stats); \
+    if (out == NULL) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned a NULL pointer!?"); \
+        return 1; \
+    } \
+    if (out->numRows != 4 || out->numCols != 4) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper size image " \
+                "(%d x %d).", \
+                out->numCols, out->numRows); \
+        return 2; \
+    } \
+    for (psS32 row = 0; row<4; row++) { \
+        ps##DATATYPE* outRow = out->data.DATATYPE[row]; \
+        psF32* truthRow = meanTruth->data.F32[row]; \
+        for (psS32 col = 0; col<4; col++) { \
+            if (fabsf((float)outRow[col]-(float)truthRow[col]) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper mean " \
+                        "result at (%d,%d) [%f vs %f].", \
+                        col,row,outRow[col],truthRow[col]); \
+                return 3; \
+            } \
+        } \
+    } \
+    stats.options = PS_STAT_SAMPLE_MEAN; \
+    out3 = psImageRebin(NULL,in,mask,1,4,&stats); \
+    for (psS32 row = 0; row<4; row++) { \
+        ps##DATATYPE* outRow = out3->data.DATATYPE[row]; \
+        psF32* truthRow = meanTruthWMask->data.F32[row]; \
+        for ( psS32 col = 0; col<4; col++) { \
+            if(abs((psS32)outRow[col]-(psS32)truthRow[col]) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"psImageRebin with mask didn't produce the proper mean " \
+                        "result at (%d,%d) [%f vs %f].", \
+                        col,row,outRow[col],truthRow[col]); \
+                return 3; \
+            } \
+        } \
+    } \
+    stats.options = PS_STAT_MAX; \
+    out2 = psImageRebin(out,in,NULL,0,3,&stats); \
+    if (out != out2) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't recycle a psImage properly!?"); \
+        return 7; \
+    } \
+    if (out == NULL) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned a NULL pointer!?"); \
+        return 4; \
+    } \
+    if (out->numRows != 6 || out->numCols != 6) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper size image " \
+                "(%d x %d).", \
+                out->numCols, out->numRows); \
+        return 5; \
+    } \
+    for (psS32 row = 0; row<6; row++) { \
+        ps##DATATYPE* outRow = out->data.DATATYPE[row]; \
+        psF32* truthRow = maxTruth->data.F32[row]; \
+        for (psS32 col = 0; col<6; col++) { \
+            if (fabsf((float)outRow[col]-(float)truthRow[col]) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"psImageRebin didn't produce the proper " \
+                        "max result at (%d,%d) [%f vs %f].", \
+                        col,row,outRow[col],truthRow[col]); \
+                return 6; \
+            } \
+        } \
+    } \
+    psFree(in); \
+    psFree(out); \
+    psFree(out3); \
+    psFree(mask); \
+    psFree(meanTruth); \
+    psFree(meanTruthWMask); \
+    psFree(maxTruth);
+
+    testRebinType(F32);
+    testRebinType(F64);
+    testRebinType(U16);
+    testRebinType(S8);
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the input image type is not supported.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for unsupported type.");
+    in = psImageAlloc(16,16,PS_TYPE_U8);
+    mask = psImageAlloc(16,16,PS_TYPE_F32);
+    stats.options = PS_STAT_SAMPLE_MEAN;
+    out = psImageRebin(NULL,in,NULL,0,4,&stats);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin return an image eventhough the "
+                "type is not handled.");
+        return 14;
+    }
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the mask type is not U8
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invallid mask type.");
+    out = psImageRebin(NULL,in,mask,1,4,&stats);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin return an image eventhough the "
+                "mask is not the correct type.");
+        return 17;
+    }
+    psFree(mask);
+    psFree(in);
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the input parameter input is null.
+
+    out2 = psImageRebin(NULL,NULL,NULL,0,1,&stats);
+
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the input was "
+                "NULL!?");
+        return 8;
+    }
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the input parameter scale is less than or equal to zero.
+    in = psImageAlloc(16, 16, PS_TYPE_F32);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for scale < 0.");
+    out2 = psImageRebin(NULL,in,NULL,0,0,&stats);
+
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the scale was "
+                "zero!?");
+        return 9;
+    }
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the input parameter stats is null.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stats null.");
+    out2 = psImageRebin(NULL,in,NULL,0,1,NULL);
+
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats was "
+                "NULL!?");
+        return 10;
+    }
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the input parameter psStats structure member options
+    // is zero or any value which doesn't correspond to a valid statistical
+    // method.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stats options 0.");
+    stats.options = 0;
+    out2 = psImageRebin(NULL,in,NULL,0,1,&stats);
+
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats "
+                "options was zero!?");
+        return 11;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stat options use range.");
+    stats.options = PS_STAT_USE_RANGE;
+    out2 = psImageRebin(NULL,in,NULL,0,1,&stats);
+
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats "
+                "options was PS_STAT_USE_RANGE!?");
+        return 12;
+    }
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the input parameter psStats structure member options
+    // specifies more than one valid statistical method.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for stats with multiple options.");
+    stats.options = PS_STAT_SAMPLE_MEAN + PS_STAT_MAX;
+    out2 = psImageRebin(NULL,in,NULL,0,1,&stats);
+
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRebin returned an image though the stats "
+                "options was PS_STAT_SAMPLE_MEAN+PS_STAT_MAX!?");
+        return 13;
+    }
+
+    psFree(in);
+
+    return 0;
+}
+
+static psS32 testImageRoll(void)
+{
+
+    psImage* in;
+    psImage* out;
+    psImage* out2;
+    psS32 rows = 64;
+    psS32 cols = 64;
+    psS32 rows1 = 8;
+    psS32 cols1 = 8;
+
+    /*
+     The function psImageRoll shall generate a new psImage structure by
+     rolling the input image the correponding number of pixels in the vertical
+     and/or horizontal direction. The image output image shall be the same size
+     as the input image. Values which roll off the image are wrapped to the
+     other side.
+
+     Verify the returned psImage structure contains expected values, if the
+     input image contains known values and the roll performed is known.
+     Cases should include no roll, vertical roll, horizontal roll and
+     combination vertical/horizontal rolls. Positive and negative rolls
+     should be performed.
+    */
+
+    in = psImageAlloc(cols,rows,PS_TYPE_F32);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            inRow[col] = (psF32)row+(psF32)col/1000.0f;
+        }
+    }
+
+    out = psImageRoll(NULL,in,0,0);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[row];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[col] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=0, dy=0.",
+                        col,row,inRow[col],outRow[col]);
+                return 3;
+            }
+        }
+    }
+
+    out2 = psImageRoll(out,in,cols/4,0);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[row];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[(col+cols/4) % cols] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=cols/4, dy=0.",
+                        col,row,inRow[(col+cols/4) % cols],outRow[col]);
+                return 4;
+            }
+        }
+    }
+
+    // Verify the returned psImage structure pointer is equal to the input
+    // parameter out if provided.
+    if (out2 != out) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't recycle my out psImage!?");
+        return 1;
+    }
+
+    out = psImageRoll(out,in,0,rows/4);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[(row+rows/4)%rows];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[col] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=0, dy=rows/4.",
+                        col,row,inRow[col],outRow[col]);
+                return 5;
+            }
+        }
+    }
+
+    out = psImageRoll(out,in,cols/4,rows/4);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[(row+rows/4)%rows];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[(col+cols/4) % cols] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=cols/4, dy=rows/4.",
+                        col,row,inRow[(col+cols/4) % cols],outRow[col]);
+                return 6;
+            }
+        }
+    }
+
+    out = psImageRoll(out,in,-cols/4,0);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[row];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[(col+(cols-cols/4)) % cols] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=-cols/4, dy=0.",
+                        col,row,inRow[(col+(cols-cols/4)) % cols],outRow[col]);
+                return 7;
+            }
+        }
+    }
+
+    out = psImageRoll(out,in,0,-rows/4);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[(row+rows-rows/4)%rows];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[col] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=0, dy=-rows/4.",
+                        col,row,inRow[col],outRow[col]);
+                return 8;
+            }
+        }
+    }
+
+    out = psImageRoll(out,in,-cols/4,-rows/4);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[(row+rows-rows/4)%rows];
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            if (inRow[(col+cols-cols/4) % cols] != outRow[col]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result "
+                        "at %d,%d (%f vs %f) for dx=cols/4, dy=rows/4.",
+                        col,row,inRow[(col+cols-cols/4) % cols],outRow[col]);
+                return 9;
+            }
+        }
+    }
+
+
+    // Verify the returned psImage structure pointer is null and program
+    // execution doesn't stop, if input parameter input is null.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error.");
+    out2 = psImageRoll(NULL,NULL,0,0);
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageRoll did not return NULL though input image was NULL!?");
+        return 2;
+    }
+
+    psFree(in);
+    psFree(out);
+
+    #define testRollType(DATATYPE) \
+    in = psImageAlloc(rows1,cols1,PS_TYPE_##DATATYPE); \
+    \
+    for (psS32 row=0;row<rows1;row++) { \
+        ps##DATATYPE* inRow = in->data.DATATYPE[row]; \
+        for (psS32 col=0;col<cols1;col++) { \
+            inRow[col] = (ps##DATATYPE)row+(ps##DATATYPE)col; \
+        } \
+    } \
+    \
+    out = psImageRoll(NULL,in,rows1/4,cols1/4); \
+    for (psS32 row=0;row<rows1;row++) { \
+        ps##DATATYPE* inRow = in->data.DATATYPE[(row+rows1/4)%rows1]; \
+        ps##DATATYPE* outRow = out->data.DATATYPE[row]; \
+        for (psS32 col=0;col<cols1;col++) { \
+            if (inRow[(col+cols1/4)%cols1] != outRow[col]) { \
+                psError(PS_ERR_UNKNOWN, true,"psImageRoll didn't produce expected result " \
+                        "at %d,%d (%f vs %f) for dx=0, dy=0.", \
+                        col,row,(float)inRow[col],(float)outRow[col]); \
+                return 3; \
+            } \
+        } \
+    } \
+    psFree(in); \
+    psFree(out);
+
+    testRollType(U8);
+    testRollType(U16);
+    testRollType(S8);
+    testRollType(S16);
+    testRollType(F64);
+    testRollType(C32);
+    testRollType(C64);
+
+    return 0;
+}
+
+psS32 testImageRotate(void)
+{
+    /*
+
+    This function shall calculate a new psImage structure based upon the
+    rotation of a given psImage structure. The center of rotation shall be the
+    center pixel of the input image.
+
+    The following steps of the testpoint are done manually via inspection of
+    temp/fOut.fits & temp/sOut.fits.
+
+        * Verify the returned psImage structure contains expected values, if
+          the input parameter psImage contains known values. Cases should
+          include rotations of 0, 45, 90, 135, 180, 225, 270, 315, 360 and at leat one
+          other arbitrary angle. Cases of the input image should include image
+          with a center pixel and an image without a center pixel.
+        * Verify the returned psImage structure contains pixels set to exposed value, if
+          the rotation and input psImage to not correspond to the output image.
+
+    */
+
+    psImage* fOut = NULL;
+    psImage* sOut = NULL;
+    psImage* fBiOut = NULL;
+    psImage* sBiOut = NULL;
+    psImage* fTruth = NULL;
+    psImage* sTruth = NULL;
+    psImage* fBiTruth = NULL;
+    psImage* sBiTruth = NULL;
+    psS32 rows = 64;
+    psS32 cols = 64;
+    psImage* fImg = psImageAlloc(cols,rows,PS_TYPE_F32);
+    psImage* sImg = psImageAlloc(cols,rows,PS_TYPE_S16);
+
+    for(psS32 row=0;row<rows;row++) {
+        psF32* fRow = fImg->data.F32[row];
+        psS16* sRow = sImg->data.S16[row];
+        for (psS32 col=0;col<cols;col++) {
+            fRow[col] = (psF32)(row)+(psF32)(col)/100.0f;
+            sRow[col] = row-2*col;
+        }
+    }
+
+    // since interpolation is involved, etc., the simplist way to verify things
+    // is to verify the results manually and bless it for automated comparison
+    // thereafter
+
+
+    // write results of various rotates to a file and verify with truth images
+    mkdir("temp",0777);
+    remove
+        ("temp/out.fits");
+    psS32 index = 0;
+    psBool fail = false;
+    psF32 radianRot;
+
+    psFits* fOutFile = psFitsAlloc("temp/fOut.fits");
+    psFits* sOutFile = psFitsAlloc("temp/sOut.fits");
+    psFits* fBiOutFile = psFitsAlloc("temp/fBiOut.fits");
+    psFits* sBiOutFile = psFitsAlloc("temp/sBiOut.fits");
+    if (fOutFile == NULL ||sOutFile == NULL || fBiOutFile == NULL || sBiOutFile == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "Can not create output files, so why continue!?");
+        return 1;
+    }
+
+    psFits* fTruthFile = psFitsAlloc("verified/fOut.fits");
+    psFits* sTruthFile = psFitsAlloc("verified/sOut.fits");
+    psFits* fBiTruthFile = psFitsAlloc("verified/fBiOut.fits");
+    psFits* sBiTruthFile = psFitsAlloc("verified/sBiOut.fits");
+    if (fTruthFile == NULL ||sTruthFile == NULL || fBiTruthFile == NULL || sBiTruthFile == NULL) {
+        psError(PS_ERR_UNKNOWN, true, "Can not open truth files, so why continue!?");
+        return 1;
+    }
+
+    psRegion regionAll = psRegionSet(0,0,0,0);
+    for (psS32 rot=-180;rot<=180;rot+=45) {
+        psImage* oldOut = fOut;
+        psImage* oldBiOut = fBiOut;
+        if (rot == 90) {
+            radianRot = M_PI_2;
+        } else if (rot == -90) {
+            radianRot = M_PI+M_PI_2;
+        } else if (rot == 180 || rot == -180) {
+            radianRot = M_PI;
+        } else {
+            radianRot = ((float)rot)*M_PI/180.0;
+        }
+
+        fOut = psImageRotate(fOut,fImg,radianRot,-1.0,PS_INTERPOLATE_FLAT);
+        fBiOut = psImageRotate(fBiOut,fImg,radianRot,-1.0,PS_INTERPOLATE_BILINEAR);
+        // Verify the returned psImage structure is equal to the input
+        // parameter out if provided.
+        if (oldOut != NULL && oldOut != fOut) {
+            psError(PS_ERR_UNKNOWN, true,"the output recycle functionality failed");
+            return 2;
+        }
+        if (oldBiOut != NULL && oldBiOut != fBiOut) {
+            psError(PS_ERR_UNKNOWN, true,"the output recycle functionality failed");
+            return 4;
+        }
+        sOut = psImageRotate(sOut,sImg,radianRot,-1.0,PS_INTERPOLATE_FLAT);
+        sBiOut = psImageRotate(sBiOut,sImg,radianRot,-1.0,PS_INTERPOLATE_BILINEAR);
+
+        if (! psFitsWriteImage(fOutFile, NULL, fOut, 1) ) {
+            psError(PS_ERR_UNKNOWN, true,"Can not write fOut.");
+            return 20;
+        }
+        if (! psFitsWriteImage(sOutFile, NULL, sOut, 1) ) {
+            psError(PS_ERR_UNKNOWN, true,"Can not write sOut.");
+            return 21;
+        }
+        if (! psFitsWriteImage(fBiOutFile, NULL, fBiOut, 1) ) {
+            psError(PS_ERR_UNKNOWN, true,"Can not write fBiOut.fits.");
+            return 40;
+        }
+        if (! psFitsWriteImage(sBiOutFile, NULL, sBiOut, 1) ) {
+            psError(PS_ERR_UNKNOWN, true,"Can not write sBiOut.fits.");
+            return 41;
+        }
+
+        // now, let's compare this with the verified file
+        psFitsMoveExtNum(fTruthFile, index, false);
+        psFitsMoveExtNum(sTruthFile, index, false);
+        psFitsMoveExtNum(fBiTruthFile, index, false);
+        psFitsMoveExtNum(sBiTruthFile, index, false);
+        fTruth = psFitsReadImage(fTruth, fTruthFile, regionAll, 0);
+        sTruth = psFitsReadImage(sTruth, sTruthFile, regionAll, 0);
+        fBiTruth = psFitsReadImage(fBiTruth, fBiTruthFile, regionAll, 0);
+        sBiTruth = psFitsReadImage(sBiTruth, sBiTruthFile, regionAll, 0);
+        if (fTruth == NULL) {
+            psError(PS_ERR_UNKNOWN, true,"verified psF32 image failed to be read (%d deg. rotation)",
+                    rot);
+            fail = true;
+        } else {
+            if (fTruth->numRows != fOut->numRows || fTruth->numCols != fOut->numCols) {
+                psError(PS_ERR_UNKNOWN, true,"Rotated float image size did not match truth "
+                        "image for %d deg rotation (%dx%d vs %dx%d).",
+                        rot,fOut->numCols,fOut->numRows,fTruth->numCols,fTruth->numRows);
+                fail = true;
+            } else {
+                for (psS32 row=0;row<fTruth->numRows;row++) {
+                    psF32* truthRow = fTruth->data.F32[row];
+                    psF32* outRow = fOut->data.F32[row];
+                    for (psS32 col=0;col<fTruth->numCols;col++) {
+                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
+                            psError(PS_ERR_UNKNOWN, true,"Float Image mismatch (%f vs %f) at %d,%d.",
+                                    outRow[col], truthRow[col],col,row);
+                            fail = true;
+                        }
+                    }
+                }
+            }
+        }
+
+        if (sTruth == NULL) {
+            psError(PS_ERR_UNKNOWN, true,"verified psS16 image failed to be read "
+                    "(%d deg. rotation)",rot);
+            fail = true;
+        } else {
+            if (sTruth->numRows != sOut->numRows ||
+                    sTruth->numCols != sOut->numCols) {
+                psError(PS_ERR_UNKNOWN, true,"Rotated psS16 image size did not match truth "
+                        "image for %d deg rotation.",rot);
+                fail = true;
+            } else {
+                for (psS32 row=0;row<sTruth->numRows;row++) {
+                    psS16* truthRow = sTruth->data.S16[row];
+                    psS16* outRow = sOut->data.S16[row];
+                    for (psS32 col=0;col<sTruth->numCols;col++) {
+                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
+                            psError(PS_ERR_UNKNOWN, true,"Short Image mismatch (%d vs %d) "
+                                    "at %d,%d.",
+                                    outRow[col], truthRow[col],col,row);
+                            fail = true;
+                        }
+                    }
+                }
+            }
+        }
+
+
+        if (fBiTruth == NULL) {
+            psError(PS_ERR_UNKNOWN, true,"verified psF32 Bi image failed to be read (%d deg. rotation)",
+                    rot);
+            fail = true;
+        } else {
+            if (fBiTruth->numRows != fBiOut->numRows || fBiTruth->numCols != fBiOut->numCols) {
+                psError(PS_ERR_UNKNOWN, true,"Rotated float image size did not match truth "
+                        "image for %d deg rotation (%dx%d vs %dx%d). BILINEAR",
+                        rot,fBiOut->numCols,fBiOut->numRows,fBiTruth->numCols,fBiTruth->numRows);
+                fail = true;
+            } else {
+                for (psS32 row=0;row<fBiTruth->numRows;row++) {
+                    psF32* truthRow = fBiTruth->data.F32[row];
+                    psF32* outRow = fBiOut->data.F32[row];
+                    for (psS32 col=0;col<fBiTruth->numCols;col++) {
+                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
+                            psError(PS_ERR_UNKNOWN, true,"Float Image mismatch (%f vs %f) at %d,%d. BILINEAR",
+                                    outRow[col], truthRow[col],col,row);
+                            fail = true;
+                        }
+                    }
+                }
+            }
+        }
+
+        if (sBiTruth == NULL) {
+            psError(PS_ERR_UNKNOWN, true,"verified psS16 image failed to be read "
+                    "(%d deg. rotation) BILINEAR",rot);
+            fail = true;
+        } else {
+            if (sBiTruth->numRows != sBiOut->numRows ||
+                    sBiTruth->numCols != sBiOut->numCols) {
+                psError(PS_ERR_UNKNOWN, true,"Rotated psS16 image size did not match truth "
+                        "image for %d deg rotation. BILINEAR",rot);
+                fail = true;
+            } else {
+                for (psS32 row=0;row<sBiTruth->numRows;row++) {
+                    psS16* truthRow = sBiTruth->data.S16[row];
+                    psS16* outRow = sBiOut->data.S16[row];
+                    for (psS32 col=0;col<sBiTruth->numCols;col++) {
+                        if (fabsf(truthRow[col]-outRow[col]) > 1) {
+                            psError(PS_ERR_UNKNOWN, true,"Short Image mismatch (%d vs %d) "
+                                    "at %d,%d. BILINEAR",
+                                    outRow[col], truthRow[col],col,row);
+                            fail = true;
+                        }
+                    }
+                }
+            }
+        }
+
+        index++;
+    }
+
+    if (fail) {
+        psError(PS_ERR_UNKNOWN, true,"One or more images didn't match truth or truth did "
+                "not exist.");
+        return 10;
+    }
+
+
+    // Verify the returned psImage structure pointer is null and program
+    // execution doesn't stop, if the input parameter input is null.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
+    fOut = psImageRotate(fOut,NULL,0,0,PS_INTERPOLATE_FLAT);
+    if (fOut != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"NULL wasn't returned though the input image was NULL.");
+        return 3;
+    }
+
+    // Verify the returned psImage structure pointer is null and program
+    // execution doesn't stop, if the specified interpolation mode is invalid
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invalid "
+             "interpolation type.");
+    fOut = psImageRotate(fOut, fImg, 33, 0, -1);
+    if (fOut != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"NULL wasn't returned though the interpolation mode "
+                "is invalid.");
+        return 4;
+    }
+
+    psFree(sOut);
+    psFree(fImg);
+    psFree(sImg);
+    psFree(fTruth);
+    psFree(sTruth);
+    psFree(sBiOut);
+    psFree(fBiTruth);
+    psFree(sBiTruth);
+    psFree(fBiOut);
+
+    psFree(fOutFile);
+    psFree(sOutFile);
+    psFree(fBiOutFile);
+    psFree(sBiOutFile);
+
+    psFree(fTruthFile);
+    psFree(sTruthFile);
+    psFree(fBiTruthFile);
+    psFree(sBiTruthFile);
+
+    return 0;
+}
+
+static psS32 testImageShift(void)
+{
+    /* psImageShift:
+
+       This functions shall generate a new psImage structure by shifting the
+       input psImage structure a specified number of pixels in the horizontal
+       and/or vertical directions.
+
+       Verify the returned psImage structure contains expected values, if the
+       input psImage structure contains known values and a know shift in the
+       vertical and/or horizontal directions. Cases should include no shift,
+       vertical only(up,down), horizontal only(right, left), and combination
+       shift. Cases should include fractional shifts. Comparison of expected
+       values should include a delta to allow for testing on different
+       platforms.
+
+       Verify the returned psImage structure contains values for pixels not in
+       the original image set to the input parameter exposed.
+
+    */
+
+    psS32 retVal=0;
+
+    // integer shift
+    retVal |= testImageShiftCase(64,128,0.0f,0.0f);
+    retVal |= testImageShiftCase(64,128,0.0f,16.0f);
+    retVal |= testImageShiftCase(64,128,0.0f,-16.0f);
+    retVal |= testImageShiftCase(64,128,32.0f,0.0f);
+    retVal |= testImageShiftCase(64,128,-32.0f,0.0f);
+    retVal |= testImageShiftCase(64,128,32.0f,16.0f);
+    retVal |= testImageShiftCase(64,128,32.0f,-16.0f);
+    retVal |= testImageShiftCase(64,128,-32.0f,16.0f);
+    retVal |= testImageShiftCase(64,128,-32.0f,-16.0f);
+
+    if (retVal != 0) {
+        return retVal;
+    }
+
+    // fractional shift
+    retVal |= testImageShiftCase(64,128,0.0f,16.4f);
+    retVal |= testImageShiftCase(64,128,0.0f,-16.4f);
+    retVal |= testImageShiftCase(64,128,32.7f,0.0f);
+    retVal |= testImageShiftCase(64,128,-32.7f,0.0f);
+    retVal |= testImageShiftCase(64,128,32.6f,16.2f);
+    retVal |= testImageShiftCase(64,128,32.6f,-16.2f);
+    retVal |= testImageShiftCase(64,128,-32.6f,16.2f);
+    retVal |= testImageShiftCase(64,128,-32.6f,-16.2f);
+
+    if (retVal != 0) {
+        return retVal;
+    }
+
+    /*
+       Verify the returned psImage structure pointer is equal to the input
+       parameter out if provided.
+    */
+    psImage* fImg = psImageAlloc(32,32,PS_TYPE_F32);
+    psImage* fRecycle = psImageAlloc(32,32,PS_TYPE_F32);
+    psImage* fOut = psImageShift(fRecycle, fImg, 8,8, NAN, PS_INTERPOLATE_FLAT);
+
+    if (fRecycle != fOut) {
+        psError(PS_ERR_UNKNOWN, true,"psImageShift didn't recycle my image?");
+        return 10;
+    }
+
+    /*
+       Verify the returned psImage structure pointer is null and program
+       execution doesn't stop, if the input psImage structure pointer is null.
+    */
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error...");
+    fOut = psImageShift(fOut,NULL,8,8,NAN,PS_INTERPOLATE_FLAT);
+    if (fOut != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageShift didn't return NULL given a NULL input image.");
+        return 11;
+    }
+
+    // Verify the returned psImage structure is null and program execution
+    // doesn't stop, if the specified interpolation mode is invalid.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invalid interpolation mode.");
+    fOut = psImageShift(fOut,fImg,8,8,NAN,-1);
+    if (fOut != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psImageShift didn't return NULL given an invalid interpolation mode.");
+        return 12;
+    }
+
+    psFree(fImg);
+
+    return 0;
+}
+
+static psS32 testImageShiftCase(psS32 cols,
+                                psS32 rows,
+                                float colShift,
+                                float rowShift)
+{
+    psImage* fOut = NULL;
+    psImage* sOut = NULL;
+
+    psLogMsg(__func__,PS_LOG_INFO,"Testing psImageShift with a %dx%d image for "
+             "a shift of %g,%g.",cols,rows,colShift,rowShift);
+
+    psImage* fImg = psImageAlloc(cols,rows,PS_TYPE_F32);
+    psImage* sImg = psImageAlloc(cols,rows,PS_TYPE_S16);
+    psImage* fBiOut = psImageAlloc(cols,rows,PS_TYPE_F32);
+    psImage* sBiOut = psImageAlloc(cols,rows,PS_TYPE_S16);
+
+    for(psS32 row=0;row<rows;row++) {
+        psF32* fRow = fImg->data.F32[row];
+        psS16* sRow = sImg->data.S16[row];
+        for (psS32 col=0;col<cols;col++) {
+            fRow[col] = (psF32)(row)+(psF32)(col)/100.0f;
+            sRow[col] = row-2*col;
+        }
+    }
+
+    fOut = psImageShift(fOut, fImg, colShift, rowShift, NAN, PS_INTERPOLATE_FLAT);
+    sOut = psImageShift(sOut, sImg, colShift, rowShift, -1, PS_INTERPOLATE_FLAT);
+    fBiOut = psImageShift(fBiOut, fImg, colShift, rowShift, NAN, PS_INTERPOLATE_BILINEAR);
+    sBiOut = psImageShift(sBiOut, sImg, colShift, rowShift, -1, PS_INTERPOLATE_BILINEAR);
+
+    for(psS32 row=0;row<rows;row++) {
+        psF32* fRow = fOut->data.F32[row];
+        psS16* sRow = sOut->data.S16[row];
+        psF32* fBiRow = fBiOut->data.F32[row];
+        psS16* sBiRow = sBiOut->data.S16[row];
+
+        for (psS32 col=0;col<cols;col++) {
+            psF32 fValue = psImagePixelInterpolate(fImg,col+colShift,
+                                                   row+rowShift,NULL,0,NAN,PS_INTERPOLATE_FLAT);
+            psS16 sValue = (psS16)psImagePixelInterpolate(sImg,col+colShift,
+                           row+rowShift,NULL,0,-1,PS_INTERPOLATE_FLAT);
+
+            psF32 fBiValue = psImagePixelInterpolate(fImg,col+colShift,
+                             row+rowShift,NULL,0,NAN,PS_INTERPOLATE_BILINEAR);
+            psS16 sBiValue = (psS16)psImagePixelInterpolate(sImg,col+colShift,
+                             row+rowShift,NULL,0,-1,PS_INTERPOLATE_BILINEAR);
+
+            if (fabsf(fRow[col] - fValue) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"Float image not shifted correctly at %d,%d (%g vs %g)",
+                        col,row,fRow[col],fValue);
+                return 1;
+            }
+            if (sRow[col] != sValue) {
+                psError(PS_ERR_UNKNOWN, true,"Short image not shifted correctly at %d,%d (%d vs %d)",
+                        col,row,sRow[col],sValue);
+                return 2;
+            }
+            if (fabsf(fBiRow[col] - fBiValue) > FLT_EPSILON) {
+                psError(PS_ERR_UNKNOWN, true,"Float image not shifted correctly at %d,%d (%g vs %g)",
+                        col,row,fBiRow[col],fBiValue);
+                return 1;
+            }
+            if (sBiRow[col] != sBiValue) {
+                psError(PS_ERR_UNKNOWN, true,"Short image not shifted correctly at %d,%d (%d vs %d)",
+                        col,row,sBiRow[col],sBiValue);
+                return 2;
+            }
+        }
+    }
+
+    psFree(fImg);
+    psFree(sImg);
+    psFree(fOut);
+    psFree(sOut);
+    psFree(fBiOut);
+    psFree(sBiOut);
+
+    return 0;
+}
+
+static psS32 testImageResample(void)
+{
+
+    psS32 rows = 60;
+    psS32 cols = 80;
+    psImage* result = NULL;
+    psS32 scale = 4;
+    psErr* err;
+
+    psImage* image = psImageAlloc(cols,rows,PS_TYPE_F32);
+    for(psS32 row=0;row<rows;row++) {
+        psF32* imageRow = image->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            imageRow[col] = row+2*col;
+        }
+    }
+    result = psImageCopy(NULL,image,PS_TYPE_F64);
+    psImage* orig = result;
+    result = psImageResample(result,image,scale,PS_INTERPOLATE_FLAT);
+
+    if (result == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "NULL return unexpected");
+        return 1;
+    }
+
+    if (result != orig) {
+        psLogMsg(__func__,PS_LOG_ERROR,"failure to recycle image.");
+        return 2;
+    }
+
+    if (result->type.type != PS_TYPE_F32) {
+        psLogMsg(__func__,PS_LOG_ERROR,"unexpected type");
+        return 3;
+    }
+
+
+    if (result->numCols != image->numCols*scale ||
+            result->numRows != image->numRows*scale) {
+        psLogMsg(__func__,PS_LOG_ERROR,"The size of the result is %dx%d, but %dx%d was expected.",
+                 result->numCols,result->numRows,
+                 image->numCols*scale, image->numRows*scale);
+        return 4;
+    }
+
+    psF32 truthValue;
+    for(psS32 row=0;row<result->numRows;row++) {
+        for (psS32 col=0;col<result->numCols;col++) {
+            truthValue = psImagePixelInterpolate(image,
+                                                 (float)col/(float)scale,(float)row/(float)scale,
+                                                 NULL,0,-1,PS_INTERPOLATE_FLAT);
+            if (fabs(truthValue - result->data.F32[row][col]) > FLT_EPSILON) {
+                psLogMsg(__func__,PS_LOG_ERROR,"value bad at (%d,%d).  Got %g, expected %g.",
+                         col,row,result->data.F32[row][col], truthValue);
+                return 5;
+            }
+        }
+    }
+
+    // verify that image=null is handled properly.
+    psErrorClear();
+    result = psImageResample(result,NULL,scale,PS_INTERPOLATE_FLAT);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "return was not NULL, as expected.");
+        return 6;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "error message was not appropriate type.");
+        return 7;
+    }
+    psFree(err);
+
+    // verify that scale < 1 is handled properly
+    psErrorClear();
+    result = psImageResample(result,image,0,PS_INTERPOLATE_FLAT);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "return was not NULL, as expected.");
+        return 8;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "error message was not appropriate type.");
+        return 9;
+    }
+    psFree(err);
+
+    // verify that invalid interpolation mode is handled properly
+    psErrorClear();
+    result = psImageResample(result,image,2,-1);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "return was not NULL, as expected.");
+        return 10;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "error message was not appropriate type.");
+        return 11;
+    }
+    psFree(err);
+
+    // Verify that that an invalid image type is handled properly
+    psErrorClear();
+    psImage* invImage = psImageAlloc(cols,rows,PS_TYPE_BOOL);
+    memset(invImage->rawDataBuffer,0,cols*rows*PSELEMTYPE_SIZEOF(PS_TYPE_BOOL)); // make sure the image is of all NULLs
+    result = psImageResample(result,invImage,2,PS_INTERPOLATE_FLAT);
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"return was not NULL, as expected.");
+        return 20;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_TYPE) {
+        psLogMsg(__func__,PS_LOG_ERROR,"error message was not appropriate type.");
+        return 21;
+    }
+    psFree(err);
+
+    psFree(image);
+    psFree(result);
+    psFree(invImage);
+
+    return 0;
+}
+
+static psS32 testImageTransform(void)
+{
+    int cols = 16;
+    int rows = 32;
+
+    psPlaneTransform* trans = psPlaneTransformAlloc(2,2);
+    trans->x->coeff[1][0] = 0.5;
+    trans->y->coeff[0][1] = 1.5;
+
+    psImage* in = psImageAlloc(cols,rows,PS_TYPE_F32);
+    psImage* mask = psImageAlloc(cols,rows,PS_TYPE_MASK);
+    for (psS32 row=0;row<rows;row++) {
+        psF32* inRow = in->data.F32[row];
+        psMaskType* maskRow = mask->data.PS_TYPE_MASK_DATA[row];
+        for (psS32 col=0;col<cols;col++) {
+            inRow[col] = (psF32)row+(psF32)col/1000.0f;
+            maskRow[col] = 0;
+        }
+    }
+
+
+    // ********** check psImageTransform with minimum specified inputs.
+
+    psImage* out = psImageTransform(NULL,
+                                    NULL,
+                                    in,
+                                    NULL,
+                                    0,
+                                    trans,
+                                    psRegionSet(0,cols*2,0,rows*2),
+                                    NULL,
+                                    PS_INTERPOLATE_FLAT,
+                                    -1);
+
+    if (out == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "out == NULL");
+        return 1;
+    }
+    if (out->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN, false,
+                "out->type.type != PS_TYPE_F32, out->type.type == %d",
+                out->type.type);
+        return 2;
+    }
+    if (out->numRows != rows*2 || out->numCols != cols*2) {
+        psError(PS_ERR_UNKNOWN, false,
+                "out size is %dx%d, not %dx%d",
+                out->numCols, out->numRows, cols*2, rows);
+        return 3;
+    }
+
+    for (psS32 row=0;row<out->numRows;row++) {
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            float inValue = p_psImagePixelInterpolateFLAT_F32(in,
+                            col*trans->x->coeff[1][0]+trans->x->coeff[0][0],
+                            row*trans->y->coeff[0][1]+trans->y->coeff[0][0],
+                            NULL, 0,
+                            -1);
+            if (fabsf(outRow[col] - inValue) > FLT_EPSILON*10) {
+                psError(PS_ERR_UNKNOWN, false,
+                        "out at %d,%d was %g, expected %g",
+                        col,row,outRow[col], inValue);
+                return 4;
+            }
+        }
+    }
+
+    // zero out buffer
+    memset(out->rawDataBuffer, 0, sizeof(psF32)*out->numRows*out->numCols);
+
+    psPixels* blanks = psPixelsAlloc(10);
+    psPixels* mask = psPixelsAlloc(10);
+
+    // perform the same transform, but this time, supply a psImage to recycle and a mask
+    out = psImageTransform(out,
+                           blanks,
+                           in,
+                           mask,
+                           1,
+                           trans,
+                           psRegionSet(0,0,0,0),
+                           NULL,
+                           PS_INTERPOLATE_FLAT,
+                           -1);
+
+    if (out == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "out == NULL");
+        return 1;
+    }
+    if (out->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN, false,
+                "out->type.type != PS_TYPE_F32, out->type.type == %d",
+                out->type.type);
+        return 2;
+    }
+    if (out->numRows != rows*2 || out->numCols != cols*2) {
+        psError(PS_ERR_UNKNOWN, false,
+                "out size is %dx%d, not %dx%d",
+                out->numCols, out->numRows, cols*2, rows);
+        return 3;
+    }
+
+    for (psS32 row=0;row<out->numRows;row++) {
+        psF32* outRow = out->data.F32[row];
+        for (psS32 col=0;col<cols;col++) {
+            float inValue = p_psImagePixelInterpolateFLAT_F32(in,
+                            col*trans->x->coeff[1][0]+trans->x->coeff[0][0],
+                            row*trans->y->coeff[0][1]+trans->y->coeff[0][0],
+                            NULL, 0,
+                            -1);
+            if (fabsf(outRow[col] - inValue) > FLT_EPSILON*10) {
+                psError(PS_ERR_UNKNOWN, false,
+                        "out at %d,%d was %g, expected %g",
+                        col,row,outRow[col], inValue);
+                return 4;
+            }
+        }
+    }
+
+
+    psFree(out);
+    psFree(in);
+    psFree(trans);
+    return 0;
+}
Index: /trunk/psLib/test/imageops/tst_psImageInterpolate.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImageInterpolate.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImageInterpolate.c	(revision 4547)
@@ -0,0 +1,282 @@
+/** @file tst_psImageInterpolate.c
+ *
+ * @brief Contains the tests for psImagePixelInterpolate
+ *
+ * @author Eric Van Alst, MHPCC
+ *
+ * @version $Revision: 1.1 $
+ *          $Name: not supported by cvs2svn $
+ * @date $Date: 2005-07-13 02:47:00 $
+ *
+ * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+#define GENIMAGE(img,c,r,TYP,valueFcn) \
+img = psImageAlloc(c,r,PS_TYPE_##TYP); \
+for(psU32 row=0; row<r; row++) { \
+    ps##TYP* imgRow = img->data.TYP[row]; \
+    for(psU32 col=0; col<c; col++) { \
+        imgRow[col] = (ps##TYP)(valueFcn); \
+    } \
+}
+
+#define CHECK_INTERP_VALUE(img,x,y,mask,maskval,exposed,TYPE,expected) \
+val = (psF32)psImagePixelInterpolate(img,x,y,mask,maskval,exposed,PS_INTERPOLATE_##TYPE); \
+printf("returned = %.2f    expected = %.2f\n",val,expected); \
+if(fabsf(val-expected)>FLT_EPSILON) { \
+    psError(PS_ERR_UNKNOWN,true,"Return value is not as expected."); \
+    return 1; \
+}
+
+#define CHECK_INTERP_BY_TYPE(TYPE) \
+GENIMAGE(img1,10,10,TYPE,row+col) \
+CHECK_INTERP_VALUE(img1,1.9,1.6,NULL,0,0,FLAT,2.0) \
+CHECK_INTERP_VALUE(img1,4.0,2.0,NULL,0,0,BILINEAR,5.0) \
+psFree(img1);
+
+static psS32 testInterpolateFlatBilinear(void);
+static psS32 testInterpolateError(void);
+static psS32 testInterpolateMaskFlatBilinear(void);
+static psS32 testInterpolate1D(void);
+
+testDescription tests[] = {
+                              {testInterpolateFlatBilinear,999,"psImagePixelInterpolate",0,false},
+                              {testInterpolateError,999,"psImagePixelInterpolate",0,false},
+                              {testInterpolateMaskFlatBilinear,999,"psImagePixelInterpolate",0,false},
+                              {testInterpolate1D,999,"psImagePixelInterpolate",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if ( !runTestSuite(stderr,"psImagePixelInterpolate",tests,argc,argv) ) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+psS32 testInterpolateFlatBilinear(void)
+{
+    psImage* img1;
+    psF32 val = 0;
+
+    // Perform simple(four neighbor) FLAT interpolation for all types
+    // Perform bilinear interpolation for all types
+    CHECK_INTERP_BY_TYPE(S8)
+    CHECK_INTERP_BY_TYPE(S16)
+    CHECK_INTERP_BY_TYPE(S32)
+    CHECK_INTERP_BY_TYPE(S64)
+    CHECK_INTERP_BY_TYPE(U8)
+    CHECK_INTERP_BY_TYPE(U16)
+    CHECK_INTERP_BY_TYPE(U32)
+    CHECK_INTERP_BY_TYPE(U64)
+    CHECK_INTERP_BY_TYPE(F32)
+    CHECK_INTERP_BY_TYPE(F64)
+    CHECK_INTERP_BY_TYPE(C32)
+    CHECK_INTERP_BY_TYPE(C64)
+
+    return 0;
+}
+
+psS32 testInterpolateError(void)
+{
+    psF32 val = 0;
+    psImage* img1 = NULL;
+
+    // Perform interpolation with NULL input image and verify return and error message
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,5.0,PS_INTERPOLATE_FLAT);
+    if(val != 5.0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
+        return 10;
+    }
+
+    // Perform interpolation with invalid input image type
+    img1 = psImageAlloc(10,10,PS_TYPE_BOOL);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,10.0,PS_INTERPOLATE_FLAT);
+    if(val != 10.0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
+        return 11;
+    }
+
+    // Perform interpolation with invalid method
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,10.0,PS_INTERPOLATE_BILINEAR+1);
+    if(val != 10.0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
+        return 12;
+    }
+
+    psFree(img1);
+
+    return 0;
+}
+
+// The following assumptions about the test image are:
+//
+//                     col
+//             0   1   2   3   4   5   6   7  ...
+//
+// row 0       0   1   2   3   4   5   6   7
+// row 1       1   2   3   4   5   6   7   8
+// row 2       2   3   4   5   6   7   8   9
+// ...
+
+psS32 testInterpolateMaskFlatBilinear(void)
+{
+    psImage* img1 = NULL;
+    psImage* msk1 = NULL;
+    psF32 val = 0;
+
+    // Perform interpolate with mask and mask value set at nearest pixel to verify
+    // the unexposed value is return
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][1] = 1;
+    CHECK_INTERP_VALUE(img1,1.9,1.6,msk1,1,10.0,FLAT,10.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (upper left pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.25)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (upper right pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.75)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (lower left pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[2][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.25)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (lower right pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.75)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (upper pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (lower pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (left pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[2][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (right pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (upper left)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (upper right)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (lower left)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (lower right)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,6.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask no valid pixels
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,0.0)
+    psFree(msk1);
+    psFree(img1);
+    return 0;
+}
+
+// Perform interpolation for a 1D image
+psS32 testInterpolate1D(void)
+{
+    psImage* img1 = NULL;
+    psF32 val = 0;
+
+    GENIMAGE(img1,10,1,F32,row+col)
+    CHECK_INTERP_VALUE(img1,4.0,0.0,NULL,0,100.0,BILINEAR,3.5)
+
+    psFree(img1);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/imageops/tst_psImagePixelExtract.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImagePixelExtract.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImagePixelExtract.c	(revision 4547)
@@ -0,0 +1,743 @@
+/** @file  tst_psImageExtraction.c
+*
+*  @brief Contains the tests for psImageExtraction.[ch]
+*
+*
+*  @author Robert DeSonia, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+#include<stdlib.h>
+#include<string.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+#include "psType.h"
+
+static psS32 testImageSlice(void);
+static psS32 testImageCut(void);
+static psS32 testImageRadialCut(void);
+
+
+testDescription tests[] = {
+                              {testImageSlice, 552, "psImageSlice", 0, false},
+                              {testImageCut, 555, "psImageCut", 0, false},
+                              {testImageRadialCut, 557, "psImageRadialCut", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    return ! runTestSuite( stderr, "psImage", tests, argc, argv );
+}
+
+psS32 testImageSlice(void)
+{
+    const psS32 r = 200;
+    const psS32 c = 300;
+    const psS32 m = r / 2 -1;
+    const psS32 n = r / 4 -1;
+    psVector* out = NULL;
+    psImage* image;
+    psVector* positions = psVectorAlloc( r, PS_TYPE_U32 );
+    psImage* mask = psImageAlloc( c, r, PS_TYPE_MASK );
+    psStats* stat = psStatsAlloc( PS_STAT_SAMPLE_MEDIAN );
+
+    /*
+        This function shall extract pixels from a specified region of a psImage
+        structure into a vector using a specified statistical method.
+
+        Verify the returned psVector structure contains expected data, if the
+        input psImage input has known data and the psStats structure specifies
+        a known statistical method. At least two different statistical methods
+        should be used within a valid range of psImage data. Allow for a delta
+        when comparing results to allow for testing a different platforms. Two
+        cases should be used for each possible direction. Data region cases
+        should include 0x0, 1x1, Nx1, 1xN, NxN, MxN
+
+     */
+
+    for ( psS32 row = 0;row < r;row++ ) {
+        psMaskType* maskRow = mask->data.PS_TYPE_MASK_DATA[row];
+        for ( psS32 col = 0;col < c;col++ ) {
+            maskRow[ col ] = 0;
+        }
+    }
+
+    #define PSIMAGESLICE_TEST1(TYPE,M,N,DIRECTION,TRUTH_SIZE,TRUTHPIX_X,TRUTHPIX_Y,TESTNUM) \
+    image = psImageAlloc( c, r, PS_TYPE_##TYPE ); \
+    for ( psS32 row = 0;row < r;row++ ) { \
+        ps##TYPE *imageRow = image->data.TYPE[ row ]; \
+        ps##TYPE rowOffset = row * 2; \
+        for ( psS32 col = 0;col < c;col++ ) { \
+            imageRow[ col ] = col + rowOffset; \
+        } \
+    } \
+    out = psImageSlice(out,positions,image,mask,1,psRegionSet(c/10,c/10+M,r/10,r/10+N),DIRECTION,stat); \
+    \
+    if (out->n != TRUTH_SIZE) { \
+        psError(PS_ERR_UNKNOWN,true,"Number of results is wrong (%d, not %d)", \
+                out->n,n); \
+        return TESTNUM*4+1; \
+    } \
+    \
+    if (positions->n != TRUTH_SIZE) { \
+        psError(PS_ERR_UNKNOWN,true,"Number of results for positions vector is wrong (%d, not %d)", \
+                out->n,n); \
+        return TESTNUM*4+2; \
+    } \
+    \
+    for (psS32 i=0;i<out->n;i++) { \
+        if (fabs(out->data.F64[i]-image->data.TYPE[r/10+TRUTHPIX_Y][c/10+TRUTHPIX_X]) > 1.0/(psF64)r) { \
+            psError(PS_ERR_UNKNOWN,true,"Improper result at position %d.  Got %g, expected %g",i, \
+                    out->data.F64[i],image->data.TYPE[r/10+TRUTHPIX_Y][c/10+TRUTHPIX_X]); \
+            return TESTNUM*4+3; \
+        } \
+        if (DIRECTION == PS_CUT_X_POS || DIRECTION == PS_CUT_X_NEG) { \
+            if (positions->data.U32[i] != c/10+TRUTHPIX_X) { \
+                psError(PS_ERR_UNKNOWN,true,"Improper positions (%d vs %d) result @ %d.", \
+                        positions->data.U32[i],c/10+TRUTHPIX_X,i); \
+                return TESTNUM*4+4; \
+            } \
+        } else { \
+            if (positions->data.U32[i] != r/10+TRUTHPIX_Y) { \
+                psError(PS_ERR_UNKNOWN,true,"Improper positions (%d vs %d) result @ %d.", \
+                        positions->data.U32[i],r/10+TRUTHPIX_Y,i); \
+                return TESTNUM*4+4; \
+            } \
+        } \
+    } \
+    psFree(image);
+
+    #define PSIMAGESLICE_TEST(TYPE) \
+    /* test MxN case */ \
+    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_X_POS, m, i, n / 2, 0 ); \
+    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_X_NEG, m, m - 1 - i, n / 2, 1 ); \
+    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_Y_POS, n, m / 2, i, 2 ); \
+    PSIMAGESLICE_TEST1(TYPE, m, n, PS_CUT_Y_NEG, n, m / 2, n - 1 - i, 3 ); \
+    \
+    /* test Mx1 case */ \
+    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_X_POS, m, i, 0, 4 ); \
+    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_X_NEG, m, m - 1 - i, 0, 5 ); \
+    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_Y_POS, 1, m / 2, 0, 6 ); \
+    PSIMAGESLICE_TEST1(TYPE, m, 1, PS_CUT_Y_NEG, 1, m / 2, 0, 7 ); \
+    \
+    /* test 1xN case */ \
+    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_X_POS, 1, 0, n / 2, 8 ); \
+    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_X_NEG, 1, 0, n / 2, 9 ); \
+    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_Y_POS, n, 0, i, 10 ); \
+    PSIMAGESLICE_TEST1(TYPE, 1, n, PS_CUT_Y_NEG, n, 0, n - 1 - i, 11 ); \
+    \
+    /* test 1x1 case */ \
+    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_X_POS, 1, 0, 0, 12 ); \
+    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_X_NEG, 1, 0, 0, 13 ); \
+    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_Y_POS, 1, 0, 0, 14 ); \
+    PSIMAGESLICE_TEST1(TYPE, 1, 1, PS_CUT_Y_NEG, 1, 0, 0, 15 ); \
+
+    PSIMAGESLICE_TEST(F32);
+    PSIMAGESLICE_TEST(F64);
+    PSIMAGESLICE_TEST(U16);
+
+    image = psImageAlloc( c, r, PS_TYPE_F32 );
+
+    /*
+       Verify the returned psVector structure pointer is null and program
+       execution doesn't stop, if input psImage input is null.
+
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out,
+                        NULL, NULL,
+                        NULL, 0,
+                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
+                        PS_CUT_X_POS,
+                        stat );
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving a NULL image, psImageSlice didn't return NULL as expected" );
+        return 101;
+    }
+
+
+    /*
+       Verify the returned psVector structure pointer is null and program
+       execution doesn't stop, if input psStats stats is null.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out,
+                        NULL, image,
+                        mask, 1,
+                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
+                        PS_CUT_X_POS,
+                        NULL );
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving a NULL stat struct, psImageSlice didn't return NULL as expected" );
+        return 102;
+    }
+    /*
+
+       Verify the returned psVector structure pointer is null and program
+       executions doesn't stop, if the input direction is not set to one of
+       the two valid values.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out, NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
+                        5,
+                        stat);
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving a bogus direction flag, psImageSlice didn't return NULL as expected" );
+        return 103;
+    }
+
+    /*
+       Verify the returned psVector structure pointer is null and program
+       execution doesn't stop, if the input nrow and/or ncol are zero.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out,
+                        NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c/10, c/10, r/10, r/10),
+                        PS_CUT_X_POS,
+                        stat );
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving a 0x0 region, psImageSlice didn't return NULL as expected" );
+        return 104;
+    }
+
+    /*
+       Verify the returned psVector structure pointer is null and program
+       execution doesn't stop, if the inputs row, col, nrow, ncol specify a
+       regions of data that is not within the input psImage structure.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out, NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c+1, c+2, r/10, r/10 + 10),
+                        PS_CUT_X_POS,
+                        stat );
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving an invalid x position, psImageSlice didn't return NULL as expected" );
+        return 105;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out, NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c/10, c/10 + 1, r+1,r+5),
+                        PS_CUT_X_POS,
+                        stat );
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving an invalid y position, psImageSlice didn't return NULL as expected" );
+        return 106;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out, NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c/10, c+1, r/10, r/10+1),
+                        PS_CUT_X_POS,
+                        stat);
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving an invalid numCols, psImageSlice didn't return NULL as expected" );
+        return 107;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    out = psImageSlice( out, NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c/10, c/10 + 1, r/10, r + 1),
+                        PS_CUT_X_POS,
+                        stat);
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving an invalid numRows, psImageSlice didn't return NULL as expected" );
+        return 108;
+    }
+
+    /*
+       Verify the returned psVector structure pointer is null and program
+       execution doesn't stop, if the input psStat structure member options is
+       zero which indicates no statistic method specified.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error." );
+    stat->options = 0;
+    out = psImageSlice( out, NULL,
+                        image,
+                        mask, 1,
+                        psRegionSet(c/10, c/10 + 1, r/10, r/10+1),
+                        PS_CUT_X_POS,
+                        stat);
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Giving an invalid numRows, psImageSlice didn't return NULL as expected" );
+        return 109;
+    }
+
+    /* Verify that a mask of different size than the input image returns null and program
+       execution doesn't stop.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error mask size != image size.");
+    stat->options = PS_STAT_SAMPLE_MEDIAN;
+    psImage* maskSz = psImageAlloc( r, c, PS_TYPE_MASK );
+    out = psImageSlice( out, NULL,
+                        image,
+                        maskSz, 1,
+                        psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
+                        PS_CUT_X_POS,
+                        stat);
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Mask size different than image size didn't return NULL as expected" );
+        return 110;
+    }
+
+    /* Verify the a invalid type mask returns null and program execution doesn't stop.
+    */
+    psLogMsg( __func__, PS_LOG_INFO, "Following should be an error invalid mask type.");
+    psImage* maskS8 = psImageAlloc( c, r, PS_TYPE_S8 );
+    out =  psImageSlice( out, NULL,
+                         image,
+                         maskS8, 1,
+                         psRegionSet(c/10, c/10 + 1, r/10, r/10 + 1),
+                         PS_CUT_X_POS,
+                         stat);
+    if ( out != NULL ) {
+        psError( PS_ERR_UNKNOWN,true, "Mask invalid type didn't return NULL as expected.");
+        return 111;
+    }
+
+    psFree( image );
+    psFree( positions );
+    psFree( mask );
+    psFree( out );
+    psFree( stat );
+    psFree( maskS8 );
+    psFree( maskSz );
+
+    return 0;
+
+}
+
+static psS32 testImageCut(void)
+{
+    psS32 c = 300;
+    psS32 r = 200;
+    psS32 numPoints = 15;
+    float startCol[] = { 40,150, 40,  0,280, 40,280, -1,300, 20, 20, 20, 20, 20, 20};
+    float endCol[] =   {240,150,240,299, 40,240, 40,240,240, -1,300,240,240,240,240};
+    float startRow[] = { 20, 10,100,  0, 20,180,180, 10, 10, 10, 10, -1,200, 10, 10};
+    float endRow[] =   {160,180,100,199,160, 10, 10,180,180,180,180,180,180, -1,200};
+    psBool success[] = {true,true,true,true,true,true,true,false,false,false,false,false,false,false,false};
+    psU32 length = 100;
+
+    psImage* image = psImageAlloc(c,r,PS_TYPE_F32);
+    psImage* mask = psImageAlloc(c,r,PS_TYPE_MASK);
+    for (psS32 row = 0; row < image->numRows; row++) {
+        for (psS32 col = 0; col < image->numCols; col++) {
+            image->data.F32[row][col] = (psF32)col + (psF32)row/1000.0f;
+            if ((row & 0x0F) == 0) {
+                mask->data.PS_TYPE_MASK_DATA[row][col] = 1;
+            } else {
+                mask->data.PS_TYPE_MASK_DATA[row][col] = 0;
+            }
+        }
+    }
+    psVector* rows = psVectorAlloc(length,PS_TYPE_F32);
+    psVector* cols = psVectorAlloc(length,PS_TYPE_F32);
+
+    psVector* result = NULL;
+    for (psS32 n = 0; n < numPoints; n++) {
+        psVector* orig = result;
+        if (! success[n]) {
+            psLogMsg(__func__,PS_LOG_INFO,"The following should be an error.");
+        }
+        if (n == 1) {
+            result = psImageCut(result,
+                                cols,rows,
+                                image,
+                                NULL,0,
+                                psRegionSet(startCol[n], endCol[n], startRow[n],endRow[n]),
+                                length,
+                                PS_INTERPOLATE_FLAT);
+        } else {
+            result = psImageCut(result,
+                                cols,rows,
+                                image,
+                                mask,1,
+                                psRegionSet(startCol[n], endCol[n], startRow[n], endRow[n]),
+                                length,
+                                PS_INTERPOLATE_FLAT);
+        }
+
+        if (success[n]) {
+            if (result == NULL) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "psImageCut returned NULL instead of a valid result.");
+                return n*10+1;
+            }
+
+            if (orig != NULL && orig != result) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "psImageCut didn't recycle the out parameter properly.");
+                return n*10+2;
+            }
+
+            float deltaRow = (endRow[n]-startRow[n])/(length-1);
+            float deltaCol = (endCol[n]-startCol[n])/(length-1);
+            psF32 truth;
+            for (psS32 i = 0; i < length; i++) {
+                float x = (float)startCol[n]+(float)i*deltaCol;
+                float y = (float)startRow[n]+(float)i*deltaRow;
+                if (n == 1) {
+                    truth = psImagePixelInterpolate( image, x, y,
+                                                     NULL,0,0,PS_INTERPOLATE_FLAT);
+                } else {
+                    truth = psImagePixelInterpolate( image, x, y,
+                                                     mask,1,0,PS_INTERPOLATE_FLAT);
+                }
+                if (fabs(result->data.F32[i]-truth) > FLT_EPSILON) {
+                    psLogMsg(__func__,PS_LOG_ERROR,
+                             "Bad result in position %d; Found %g but expected %g.",
+                             i, result->data.F32[i], truth);
+                    return n*10+5;
+                }
+                if (fabsf(x - cols->data.F32[i]) > FLT_EPSILON ||
+                        fabsf(y - rows->data.F32[i]) > FLT_EPSILON) {
+                    psLogMsg(__func__,PS_LOG_ERROR,
+                             "Bad resulting col/row at index %d; Found (%g,%g) but expected (%g,%g).",
+                             i, cols->data.F32[i], rows->data.F32[i], x, y);
+                    return n*10+6;
+                }
+            }
+        } else {
+            if (result != NULL) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "psImageCut did not return NULL with a cut of (%g,%g)->(%g,%g).",
+                         startCol[n],startRow[n],endCol[n],endRow[n]);
+                return n*10+7;
+            }
+            psErr* err = psErrorLast();
+            if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "psImageCut did not generate proper error message.");
+                return 105;
+            }
+            psFree(err);
+        }
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (NULL image).");
+    result = psImageCut(result,
+                        cols,rows,
+                        NULL,
+                        mask,1,
+                        psRegionSet(startCol[0], endCol[0], startRow[0], endRow[0]),
+                        length,
+                        PS_INTERPOLATE_FLAT);
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageCut did not return NULL given NULL image.");
+        return 100;
+    }
+    psErr* err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageCut did not generate proper error message given NULL image.");
+        return 101;
+    }
+    psFree(err);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (length=0).");
+    result = psImageCut(result,
+                        cols,rows,
+                        image,
+                        mask,1,
+                        psRegionSet(startCol[0], endCol[0], startRow[0], endRow[0]),
+                        0,
+                        PS_INTERPOLATE_FLAT);
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageCut did not return NULL given length=0.");
+        return 102;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageCut did not generate proper error message given length=0.");
+        return 103;
+    }
+    psFree(err);
+
+    psFree(result);
+    psFree(image);
+    psFree(mask);
+    psFree(rows);
+    psFree(cols);
+
+    return 0;
+}
+
+static psS32 testImageRadialCut(void)
+{
+    psS32 c = 300;
+    psS32 r = 200;
+    psS32 centerX = c/2;
+    psS32 centerY = r/2;
+    psErr* err = NULL;
+
+    psImage* image = psImageAlloc(c,r,PS_TYPE_F32);
+    psImage* mask = psImageAlloc(c,r,PS_TYPE_MASK);
+    for (psS32 row = 0; row < image->numRows; row++) {
+        for (psS32 col = 0; col < image->numCols; col++) {
+            image->data.F32[row][col] = sqrtf((col-centerX)*(col-centerX)+(row-centerY)*(row-centerY));
+            if ((row & 0x0F) == 0) {
+                mask->data.PS_TYPE_MASK_DATA[row][col] = 1;
+            } else {
+                mask->data.PS_TYPE_MASK_DATA[row][col] = 0;
+            }
+        }
+    }
+
+    psStats* stat = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+    psVector* radii = psVectorAlloc(10,PS_TYPE_F32);
+    for (psS32 i=0; i < 10; i++) {
+        radii->data.F32[i] = 10+i*10;
+    }
+
+    psVector* result = NULL;
+
+    result = psImageRadialCut(result,image,mask,1,centerX,centerY,radii,stat);
+
+    if (result == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value of NULL unexpected.");
+        return 1;
+    }
+
+    if (result->type.type != PS_TYPE_F64) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return type not psF64, as expected.");
+        return 2;
+    }
+
+    for (psS32 i=0; i < 9; i++) {
+        if (fabs(result->data.F64[i] - (15.0+i*10)) > 1) {
+            psLogMsg(__func__,PS_LOG_ERROR,
+                     "Result was not as expected for radii #%d (%g, expected %d +/- 1)",
+                     result->data.F64[i], (15.0+i*10) );
+            return 3+i;
+        }
+    }
+
+    // again, but without mask
+    psVector* orig = result;
+    result = psImageRadialCut(result,image,NULL,1,centerX,centerY,radii,stat);
+
+    if (result == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value of NULL unexpected.");
+        return 12;
+    }
+
+    if (result != orig) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value of is not same as input parameter 'out'.");
+        return 13;
+    }
+
+    for (psS32 i=0; i < 9; i++) {
+        if (fabs(result->data.F64[i] - (15.0+i*10)) > 1) {
+            psLogMsg(__func__,PS_LOG_ERROR,
+                     "Result was not as expected for radii #%d (%g, expected %d +/- 1)",
+                     result->data.F64[i], (15.0+i*10) );
+            return 14+i;
+        }
+    }
+
+    // NULL input image...
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,NULL,NULL,1,centerX,centerY,radii,stat);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 23;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 24;
+    }
+    psFree(err);
+
+    // NULL input radii...
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image,mask,1,centerX,centerY,NULL,stat);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 23;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 24;
+    }
+    psFree(err);
+
+    // NULL input stat...
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image,mask,1,centerX,centerY,radii,NULL);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 23;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 24;
+    }
+    psFree(err);
+
+    // Bad center X
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image,mask,1,
+                              c+1,centerY,radii,stat);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 25;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 26;
+    }
+    psFree(err);
+
+    // Bad center Y
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image,mask,1,
+                              centerX,r+1,radii,stat);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 27;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 28;
+    }
+    psFree(err);
+
+    // Bad mask type (N.B., swapped image/mask to do this)
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,mask,image,1,
+                              centerX,r+1,radii,stat);
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 29;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_TYPE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 30;
+    }
+    psFree(err);
+
+    // Bad mask size
+    psImage* mask2 = psImageAlloc(c/2,r/2,PS_TYPE_MASK);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image, mask2, 1,
+                              centerX,centerY,radii,stat);
+    psFree(mask2);
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 31;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_SIZE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 32;
+    }
+    psFree(err);
+
+    // Bad radii size
+    psVector* radii2 = psVectorAlloc(1,PS_TYPE_MASK);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image, mask, 1,
+                              centerX,centerY,radii2,stat);
+    psFree(radii2);
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 33;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_SIZE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 34;
+    }
+    psFree(err);
+
+    // bad input stat option...
+    stat->options = 0;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    result = psImageRadialCut(result,image,mask,1,centerX,centerY,radii,stat);
+    stat->options = PS_STAT_SAMPLE_MEAN;
+
+    if (result != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not NULL as expected.");
+        return 35;
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageRadialCut did not generate proper error message.");
+        return 36;
+    }
+    psFree(err);
+
+    psFree(image);
+    psFree(mask);
+    psFree(radii);
+    psFree(stat);
+    psFree(result);
+
+    return 0;
+}
Index: /trunk/psLib/test/imageops/tst_psImagePixelManip.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImagePixelManip.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImagePixelManip.c	(revision 4547)
@@ -0,0 +1,797 @@
+/** @file  tst_psImageManip.c
+ *
+ *  @brief Contains the tests for psImageManip.[ch]
+ *
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include <complex.h>
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <stdlib.h>
+#include <string.h>                    // for memset
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+#include "psType.h"
+
+static psS32 testImageClip(void);
+static psS32 testImageClipNAN(void);
+static psS32 testImageClipComplexRegion(void);
+static psS32 testImageOverlay(void);
+
+testDescription tests[] = {
+                              {testImageClip,571,"psImageClip",0,false},
+                              {testImageClipNAN,572,"psImageClipNAN",0,false},
+                              {testImageClipComplexRegion,673,"psImageClipComplexRegion",0,false},
+                              {testImageOverlay,573,"psImageOverlay",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
+}
+
+
+psS32 testImageClip(void)
+{
+    psImage* img = NULL;
+    psU32 c = 128;
+    psU32 r = 256;
+    psF64 min;
+    psF64 max;
+    psS32 numClipped = 0;
+    psS32 retVal;
+
+    psLogMsg(__func__,PS_LOG_INFO,
+             "psImageClip shall limit the minimum and maximum data value within a psImage structure");
+
+    /*
+
+        psImageClip shall limit the minimum and maximum data value within a
+        psImage structure to a specified min and max value.
+
+        Verify the returned integer is equal to the number of pixels clipped,
+        if the input psImage structure contains known values and input parameters
+        min and max have know values.
+
+        Verify the psImage structure specified by the input parameter input is
+        modified to contain the expected values, if the input psImage structure
+        contains known values, min and max are specified and vmin and vmax
+        parameters are known.
+
+        Verify the retuned integer is zero, psImage structure input is unmodified
+        and program executions doesn't stop, if input parameter psImage structure
+        pointer is null.
+
+        Verify the retuned integer is zero, psImage structure input is unmodified
+        and program executions doesn't stop, if input parameter min is larger than max.
+    */
+
+    // create image
+    #define testImageClipByType(datatype) \
+    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
+    for (psU32 row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (psU32 col=0;col<c;col++) { \
+            imgRow[col] = (ps##datatype)(row+col); \
+        } \
+    } \
+    min = (psF64)r/2.0; \
+    max = (psF64)r; \
+    \
+    retVal = psImageClip(img,min,(double)PS_MIN_##datatype,max,(double)PS_MAX_##datatype); \
+    \
+    numClipped = 0; \
+    for (psU32 row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (psU32 col=0;col<c;col++) { \
+            ps##datatype value = (ps##datatype)(row+col); \
+            if (value < min) { \
+                numClipped++; \
+                value = PS_MIN_##datatype; \
+            } else if (value > max) { \
+                numClipped++; \
+                value = PS_MAX_##datatype; \
+            } \
+            if (fabsf(imgRow[col]-value) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%g vs %g) at %u,%u", \
+                        (psF64)imgRow[col],(psF64)value,col,row); \
+                return 1; \
+            } \
+        } \
+    } \
+    if (retVal != numClipped) { \
+        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
+                numClipped,retVal); \
+        return 2; \
+    } \
+    psFree(img);
+
+    #define testImageClipByComplexType(datatype) \
+    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
+    for (psU32 row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (psU32 col=0;col<c;col++) { \
+            imgRow[col] = (ps##datatype)(row+I*col); \
+        } \
+    } \
+    min = (float)r/2.0f; \
+    max = (float)r; \
+    \
+    retVal = psImageClip(img,min,-1.0f,max,-2.0f); \
+    \
+    numClipped = 0; \
+    for (psU32 row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (psU32 col=0;col<c;col++) { \
+            ps##datatype value = row+I*col; \
+            if (cabs(value) < min) { \
+                numClipped++; \
+                value = -1.0f; \
+            } else if (cabs(value) > max) { \
+                numClipped++; \
+                value = -2.0f; \
+            } \
+            if (fabsf(creal(imgRow[col])-creal(value)) > FLT_EPSILON || \
+                    fabsf(cimag(imgRow[col])-cimag(value)) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%.2f+%.2fi vs %.2f+%.2fi) at %u,%u", \
+                        creal(imgRow[col]),cimag(imgRow[col]),creal(value),cimag(value),col,row); \
+                return 1; \
+            } \
+        } \
+    } \
+    if (retVal != numClipped) { \
+        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
+                numClipped,retVal); \
+        return 2; \
+    } \
+    psFree(img);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of F64 imagery");
+    testImageClipByType(F64);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of F32 imagery");
+    testImageClipByType(F32);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of S32 imagery");
+    testImageClipByType(S32);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of S16 imagery");
+    testImageClipByType(S16);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of S8 imagery");
+    testImageClipByType(S8);
+    //    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of U32 imagery");
+    //    testImageClipByType(U32);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of U16 imagery");
+    testImageClipByType(U16);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of U8 imagery");
+    testImageClipByType(U8);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of C32 imagery");
+    testImageClipByComplexType(C32);
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping of C64 imagery");
+    testImageClipByComplexType(C64);
+
+    // Verify the retuned integer is zero, psImage structure input is unmodified
+    // and program executions doesn't stop, if input parameter psImage structure
+    // pointer is null.
+    retVal = psImageClip(NULL,min,-1.0f,max,-2.0f);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips of a NULL image.");
+        return 3;
+    }
+
+    // Verify the retuned integer is zero, psImage structure input is unmodified
+    // and program executions doesn't stop, if input parameter min is larger than max.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (max<min)");
+    retVal = psImageClip(img,max,-1.0f,min,-2.0f);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips when max < min.");
+        return 4;
+    }
+
+    return 0;
+}
+
+psS32 testImageClipNAN(void)
+{
+    psImage* img = NULL;
+    psU32 c = 128;
+    psU32 r = 256;
+    psS32 numClipped = 0;
+    psS32 retVal;
+
+    psLogMsg(__func__,PS_LOG_INFO,
+             "psImageClipNaN shall modified pixel values of NaN with a specified value");
+
+    /*
+        psImageClipNaN shall modify a psImage structure with pixel values set
+        to NaN to a value specified as an input parameter.
+
+        Verify the returned integer is equal to the number of pixels modified
+        and the psImage is modified at locations where NaN pixels where
+        located to the value specified in the input parameter value.
+
+        Verify the returned integer is zero and program execution doesn't stop,
+        if the input parameter psImage structure pointer is null.
+    */
+
+    // create image
+    #define testImageClipNaNByType(datatype) \
+    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
+    for (unsigned row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            if (row == col) { \
+                imgRow[col] = NAN; \
+            } else if (row+1 == col) { \
+                imgRow[col] = INFINITY; \
+            } else { \
+                imgRow[col] = (ps##datatype)(row+col); \
+            } \
+        } \
+    } \
+    \
+    retVal = psImageClipNaN(img,-1.0f); \
+    \
+    numClipped = 0; \
+    for (unsigned row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            ps##datatype value = (ps##datatype)(row+col); \
+            if ( (row == col) || (row+1 == col) ) { \
+                numClipped++; \
+                value = -1.0; \
+            } \
+            if (fabsf(imgRow[col]-value) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%f vs %f) at %d,%d", \
+                        imgRow[col],value,col,row); \
+                return 1; \
+            } \
+        } \
+    } \
+    if (retVal != numClipped) { \
+        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
+                numClipped,retVal); \
+        return 2; \
+    } \
+    psFree(img);
+
+    testImageClipNaNByType(F32);
+    testImageClipNaNByType(F64);
+    testImageClipNaNByType(C32);
+    testImageClipNaNByType(C64);
+
+    // Verify the retuned integer is zero, psImage structure input is unmodified
+    // and program executions doesn't stop, if input parameter psImage structure
+    // pointer is null.
+    retVal = psImageClipNaN(NULL,-1.0f);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips of a NULL image.");
+        return 3;
+    }
+
+    // Verify program execution doesn't stop if the input image type is something
+    // other than F32, F64, C32, C64.
+    img = psImageAlloc(c,r,PS_TYPE_S32);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (invalid type)");
+    retVal = psImageClipNaN(img,2.0f);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clip of invalid image type.");
+        return 4;
+    }
+    psFree(img);
+
+    return 0;
+}
+
+psS32 testImageClipComplexRegion(void)
+{
+    psImage* img = NULL;
+    psU32 c = 1024;
+    psU32 r = 2048;
+    psS32 numClipped = 0;
+    psS32 retVal;
+
+    psLogMsg(__func__,PS_LOG_INFO,
+             "psImageClipNaN shall modified pixel values of NaN with a specified value");
+
+    /*
+    1. Create a complex image with a wide range of complex values
+
+    2. call psImageClipComplexRegion with min and max where there is at least
+       2 pixels in the image above) that is:
+        a) real(p) < real(min) && complex(p) < complex(min),
+        b) real(p) < real(min) && complex(min) < complex(p) < complex(max)
+        c) real(min) < real(p) < real(max) && complex(p) < complex(min)
+        d) real(min) < real(p) < real(max) && complex(min) < complex(p) < complex(max)
+        e) real(p) > real(max) && complex(min) < complex(p) < complex(max)
+        f) real(pmin) < real(p) < real(max) && complex(p) > complex(max)
+        g) real(p) > real(max) && complex(p) > complex(max)
+        h) real(p) < real(min) && complex(p) > complex(max)
+        i) real(p) > real(max) && complex(p) < complex(min)
+
+    3. verify that All pixels in case (a), (b), and (c) have the value vmin
+
+    4. verify that all pixels in case (d) are unchanged from input
+
+    5. verify that all pixels in case (e), (f), (g), (h), and (i) have the
+       value vmax
+
+    */
+
+    #define testImageClipComplexByType(datatype,MIN,MAX) /* datatype must be complex */ \
+    /* create image */ \
+    img = psImageAlloc(c,r,PS_TYPE_##datatype); \
+    for (unsigned row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            imgRow[col] = row+I*col; \
+        } \
+    } \
+    \
+    retVal = psImageClipComplexRegion(img,MIN,-1.0-1.0*I,MAX,-2.0-2.0*I); \
+    \
+    numClipped = 0; \
+    for (unsigned row=0;row<r;row++) { \
+        ps##datatype* imgRow = img->data.datatype[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            ps##datatype value = (ps##datatype)(row+I*col); \
+            if ( (row > creal(MAX)) || (col > cimag(MAX)) ) { \
+                numClipped++; \
+                value = -2.0-2.0*I; \
+            } else if ((row < creal(MIN)) || (col < cimag(MIN)) ) { \
+                numClipped++; \
+                value = -1.0-1.0*I; \
+            } \
+            if (cabs(imgRow[col]-value) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"Pixel value is not as expected (%g%+gi vs %g%+gi) at %d,%d", \
+                        creal(imgRow[col]),cimag(imgRow[col]),creal(value),cimag(value),col,row); \
+                return 1; \
+            } \
+        } \
+    } \
+    if (retVal != numClipped) { \
+        psError(PS_ERR_UNKNOWN, true,"Expected %d clips, but got %d", \
+                numClipped,retVal); \
+        return 2; \
+    } \
+    psFree(img);
+
+    complex double min = ((double)r)/5.0+I*((double)c)/4.0;
+    complex double max = ((double)r)/3.0+I*((double)c)/2.0;
+
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping at %g%+gi to %g%+gi for psC32",
+             creal(min),cimag(min),creal(max),cimag(max));
+
+    testImageClipComplexByType(C32,min,max);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Testing clipping at %g%+gi to %g%+gi for psC64",
+             creal(min),cimag(min),creal(max),cimag(max));
+    testImageClipComplexByType(C64,min,max);
+
+    //  6. Call psImageClipComplexRegion with NULL input parameter; should error
+    //     but not stop execution.
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(NULL,0,0,0,0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clips of a NULL image.");
+        return 3;
+    }
+
+
+    img = psImageAlloc(c,r,PS_TYPE_C32);
+    for (unsigned row=0;row<r;row++) {
+        psC32* imgRow = img->data.C32[row];
+        for (unsigned col=0;col<c;col++) {
+            imgRow[col] = row+I*col;
+        }
+    }
+
+    //  7. Call psImageClipComplexRegion with min > max; should error and return 0,
+    //     but not stop execution
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,10.0+I*1.0,-1.0,5.0+5.0*I,-2.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for creal(min)>creal(max).");
+        return 3;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,1.0+I*10.0,-1.0,5.0+5.0*I,-2.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for cimag(min)>cimag(max).");
+        return 3;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,10.0+I*10.0,-1.0,5.0+5.0*I,-2.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for min>max.");
+        return 3;
+    }
+
+    //  8. Call psImageClipComplexRegion with the follow vmin/vmax values; each
+    //     should error and return 0, but not stop execution
+    //      a) vmin < datatype region's minimum
+    //      b) vmax < datatype region's minimum
+    //      c) vmin > datatype region's maximum
+    //      d) vmax > datatype region's maximum
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      -2.0*(double)FLT_MAX,
+                                      5.0+5.0*I,
+                                      0.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
+        return 80;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      2.0*(double)FLT_MAX,
+                                      5.0+5.0*I,
+                                      0.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
+        return 81;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      FLT_EPSILON-2.0*(double)FLT_MAX*I,
+                                      5.0+5.0*I,
+                                      0.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
+        return 82;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      FLT_EPSILON+2.0*(double)FLT_MAX*I,
+                                      5.0+5.0*I,
+                                      0.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmin not in datatype range.");
+        return 83;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      0.0,
+                                      5.0+5.0*I,
+                                      -2.0*(double)FLT_MAX);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
+        return 84;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      0.0,
+                                      5.0+5.0*I,
+                                      2.0*(double)FLT_MAX);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
+        return 85;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      0.0,
+                                      5.0+5.0*I,
+                                      FLT_EPSILON-2.0*(double)FLT_MAX*I);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
+        return 87;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error:");
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      0.0,
+                                      5.0+5.0*I,
+                                      FLT_EPSILON+2.0*(double)FLT_MAX*I);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for vmax not in datatype range.");
+        return 88;
+    }
+
+
+    // now check if vmin > vmax is OK
+    for (unsigned row=0;row<r;row++) {
+        psC32* imgRow = img->data.C32[row];
+        for (unsigned col=0;col<c;col++) {
+            imgRow[col] = row+I*col;
+        }
+    }
+    retVal = psImageClipComplexRegion(img,
+                                      1.0+I*1.0,
+                                      10.0,
+                                      5.0+5.0*I,
+                                      0.0);
+    if (retVal == 0) {
+        psError(PS_ERR_UNKNOWN, true,"Didn't expect zero return for vmin > vmax.");
+        return 83;
+    }
+
+
+    psFree(img);
+    img = NULL;
+
+    //  9. Call psImageClipComplexRegion with the max value out of datatype's
+    //     range; should clip as expected (see step 1-5). Repeat with min value
+    //     out of datatype's range.
+
+    testImageClipComplexByType(C32,-(double)FLT_MAX*2.0-I*(double)FLT_MAX*2.0,10.0+I*10.0);
+    testImageClipComplexByType(C32,10.0+I*10.0,(double)FLT_MAX*2.0+I*(double)FLT_MAX*2.0);
+
+    // Verify program execution doesn't stop if the input image type is something
+    // other than C32, C64.
+    img = psImageAlloc(c,r,PS_TYPE_S32);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error (invalid type)");
+    retVal = psImageClipComplexRegion(img,2.0,10.0,5.0,0.0);
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Expected zero return for clip of invalid image type.");
+        return 84;
+    }
+    psFree(img);
+
+    return 0;
+}
+
+psS32 testImageOverlay(void)
+{
+
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* img3 = NULL;
+    psImage* img4 = NULL;
+    psU32 c = 128;
+    psU32 r = 256;
+    psS32 retVal;
+
+    /*
+    psImageSectionOverlay shall modified pixel values in a psImage structure to
+    be equal to the value of the originaldata and an overlay image with a
+    specified operation. Valid operations include =, +, -, *, /.
+
+    Verify the returned integer is zero
+    and the input parameter psImage structure is modified at the specified
+    location and range with the given overlay image and the specified
+    function. Cases should include all the valid operations. Comparison of
+    expected values should include a delta to allow for testing on
+    different platforms.
+
+    */
+
+    #define testOverlayTypeOP(DATATYPE,OP,OPSTRING) \
+    img = psImageAlloc(c,r,PS_TYPE_##DATATYPE); \
+    for (unsigned row=0;row<r;row++) { \
+        ps##DATATYPE* imgRow = img->data.DATATYPE[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            imgRow[col] = 6.0; \
+        } \
+    } \
+    img2 = psImageAlloc(c/2,r/2,PS_TYPE_##DATATYPE); \
+    for (unsigned row=0;row<r/2;row++) { \
+        ps##DATATYPE* img2Row = img2->data.DATATYPE[row]; \
+        for (unsigned col=0;col<c/2;col++) { \
+            img2Row[col] = 2.0; \
+        } \
+    } \
+    retVal = psImageOverlaySection(img,img2,c/4,r/4,OPSTRING); \
+    if (retVal == 0) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned zero with %s op", \
+                OPSTRING); \
+        return 1; \
+    } \
+    for (unsigned row=0;row<r;row++) { \
+        ps##DATATYPE* imgRow = img->data.DATATYPE[row]; \
+        ps##DATATYPE* img2Row = img2->data.DATATYPE[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            ps##DATATYPE val = 6.0; \
+            if ( ! (row < r/4 || row >= r/2+r/4 || col < c/4 || col >= c/2+c/4)) { \
+                val OP 2.0; \
+            } \
+            if (fabsf(imgRow[col] - val) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"Value incorrect at %d,%d (%.2f vs %.2f for %s)", \
+                        col,row,imgRow[col],val,OPSTRING); \
+                return 2; \
+            } \
+            if (row < r/2 && col < c/2 && fabsf(img2Row[col] - 2.0) > FLT_EPSILON) { \
+                psError(PS_ERR_UNKNOWN, true,"Overlay modified at %d,%d (%.2f for %s)", \
+                        col,row,img2Row[col],OPSTRING); \
+                return 2; \
+            } \
+        } \
+    } \
+    psFree(img); \
+    psFree(img2);
+
+    #define testOverlayType(DATATYPE) \
+    testOverlayTypeOP(DATATYPE,+=,"+"); \
+    testOverlayTypeOP(DATATYPE,-=,"-"); \
+    testOverlayTypeOP(DATATYPE,*=,"*");\
+    testOverlayTypeOP(DATATYPE,/=,"/");\
+    testOverlayTypeOP(DATATYPE,=,"=");
+
+    testOverlayType(C64);
+    testOverlayType(C32);
+    testOverlayType(F64);
+    testOverlayType(F32);
+    testOverlayType(S16);
+    testOverlayType(S8);
+    testOverlayType(U16);
+    testOverlayType(U8);
+
+    /*
+    Verify the returned integer is equal to non-zero and the input psImage structure
+    is unmodified, if the overlay specified is not within the data range of the
+    input psImage structure.
+    */
+
+    img = psImageAlloc(c,r,PS_TYPE_F32);
+    for (unsigned row=0;row<r;row++) {
+        psF32* imgRow = img->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            imgRow[col] = 6.0f;
+        }
+    }
+    img2 = psImageAlloc(c,r,PS_TYPE_F32);
+    for (unsigned row=0;row<r;row++) {
+        psF32* img2Row = img2->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            img2Row[col] = 2.0f;
+        }
+    }
+    img3 = psImageAlloc(c,r,PS_TYPE_S64);
+    for (unsigned row=0;row<r;row++) {
+        psS64* img3Row = img3->data.S64[row];
+        for (unsigned col=0;col<c;col++) {
+            img3Row[col] = 6.0f;
+        }
+    }
+    img4 = psImageAlloc(c,r,PS_TYPE_S64);
+    for (unsigned row=0;row<r;row++) {
+        psS64* img4Row = img4->data.S64[row];
+        for (unsigned col=0;col<c;col++) {
+            img4Row[col] = 2.0f;
+        }
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error as overlay isn't "
+             "within image boundaries");
+    retVal = psImageOverlaySection(img,img2,c/4,r/4,"+");
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection did not return "
+                "zero even though overlay too big");
+        return 3;
+    }
+    for (unsigned row=0;row<r;row++) {
+        psF32* imgRow = img->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            if (imgRow[col] != 6.0f) {
+                psError(PS_ERR_UNKNOWN, true,"Input image modified when overlay size too big");
+                return 4;
+            }
+        }
+    }
+
+    /*
+    Verify the returned integer is equal to non-zero, the input psImage
+    structure is unmodified and program execution doesn't stop, if the
+    overlay specified is null.
+    */
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error as overlay is NULL");
+    retVal = psImageOverlaySection(img,NULL,c/4,r/4,"+");
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection did not return "
+                "zero even though overlay too big");
+        return 5;
+    }
+    for (unsigned row=0;row<r;row++) {
+        psF32* imgRow = img->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            if (imgRow[col] != 6.0f) {
+                psError(PS_ERR_UNKNOWN, true,"Input image modified when overlay NULL");
+                return 6;
+            }
+        }
+    }
+
+    /*
+    Verify the returned integer is equal to non-zero and program execution
+    doesn't stop, if the input parameter image is null.
+    */
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error as image input is NULL");
+    retVal = psImageOverlaySection(NULL,img2,c/4,r/4,"+");
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned non-zero even though "
+                "overlay too big");
+        return 7;
+    }
+
+    /*
+    Verify the return integer is equal to non-zero and program execution
+    doesn't stop, if the specified operator is not =,+,-,*,/
+    */
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error as operator is invalid");
+    retVal = psImageOverlaySection(img,img2,0,0,"$");
+    if (retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned non-zero even though "
+                "overlay operator is invalid");
+        return 8;
+    }
+
+    /*
+    Verify the return integer is equal to non-zero and program execution
+    doesn't stop, if the specified operator is NULL
+    */
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error as operator is invalid");
+    retVal = psImageOverlaySection(img,img2,0,0,NULL);
+    if(retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned non-zero even though "
+                "overlay operator is NULL");
+        return 9;
+    }
+
+    /*
+    Verify the return integer is equal to non-zero and program execution
+    doesn't stop, if overlay image is a different type than the input image
+    */
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error as overlay is "
+             "a different type");
+    retVal = psImageOverlaySection(img,img3,0,0,"+");
+    if(retVal != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned nonzero eventhough "
+                " overlay image type is different than input image.");
+        return 10;
+    }
+
+    /*
+    Verify program execution doen't stop, if the overly image contains
+    zero values with division operation is specified.
+    */
+    for (unsigned row=0;row<r;row++) {
+        psF32* img2Row = img2->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            img2Row[col] = 0.0f;
+        }
+    }
+    retVal = psImageOverlaySection(img,img2,0,0,"/");
+    if (retVal == 0) {
+        psError(PS_ERR_UNKNOWN, true,"psImageOverlaySection returned zero when "
+                "checking divide-by-zero.");
+        return 12;
+    }
+
+    psFree(img);
+    psFree(img2);
+    psFree(img3);
+    psFree(img4);
+
+    return 0;
+}
Index: /trunk/psLib/test/imageops/tst_psImageStats.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImageStats.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImageStats.c	(revision 4547)
@@ -0,0 +1,688 @@
+/*
+*  C Implementation: %{MODULE}
+*
+* Description:
+*
+*
+* Author: %{AUTHOR} <%{EMAIL}>, (C) %{YEAR}
+*
+* Copyright: See COPYING file that comes with this distribution
+*
+*/
+
+#include <stdio.h>
+#include <float.h>
+#include <math.h>
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testPsImageHistogram(void);
+static psS32 testPsImageStats(void);
+static psS32 testPsImageFitPolynomial(void);
+static psS32 testPsImagePixelInterpolate(void);
+static psS32 testPsImageEvalPolynom(void);
+
+static bool FitChebyF32(int numCols, int numRows);
+static bool FitChebyF64(int numCols, int numRows);
+
+testDescription tests[] = {
+                              {testPsImageHistogram,0,"psImageHistogram",0,false},
+                              {testPsImageStats,1,"psImageStats",0,false},
+                              {testPsImageFitPolynomial,2,"psImageFitPolynomial",0,false},
+                              {testPsImagePixelInterpolate,3,"psImagePixelInterpolate",0,false},
+                              {testPsImageEvalPolynom,4,"psImageEvalPolynom()",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
+}
+
+
+
+static psS32 testPsImageHistogram(void)
+{
+    const int NUM_BINS = 20;
+    const int N = 32;
+    const int M = 64;
+
+    psHistogram * myHist = NULL;
+    psHistogram *myHist2 = NULL;
+    psImage *tmpImage = NULL;
+    psImage *tmpImage2 = NULL;
+    psImage *tmpMask = NULL;
+    psImage *tmpMask2 = NULL;
+    psS32 testStatus = true;
+    psS32 nb = 0;
+    psS32 i = 0;
+    psS32 j = 0;
+    psS32 IMAGE_X_SIZE = 0;
+    psS32 IMAGE_Y_SIZE = 0;
+    psS32 currentId = 0;
+
+    currentId = psMemGetId();
+    for ( nb = 0;nb < 7;nb++ ) {
+        if ( nb == 0 ) {
+            IMAGE_X_SIZE = 1;
+            IMAGE_Y_SIZE = 1;
+        }
+        if ( nb == 1 ) {
+            IMAGE_X_SIZE = 1;
+            IMAGE_Y_SIZE = N;
+        }
+        if ( nb == 2 ) {
+            IMAGE_X_SIZE = N;
+            IMAGE_Y_SIZE = 1;
+        }
+        if ( nb == 3 ) {
+            IMAGE_X_SIZE = N;
+            IMAGE_Y_SIZE = N;
+        }
+        if ( nb == 4 ) {
+            IMAGE_X_SIZE = N;
+            IMAGE_Y_SIZE = M;
+        }
+        if ( nb == 5 ) {
+            IMAGE_X_SIZE = M;
+            IMAGE_Y_SIZE = N;
+        }
+        if ( nb == 6 ) {
+            IMAGE_X_SIZE = M;
+            IMAGE_Y_SIZE = N;
+        }
+        fprintf(stderr, "*******************************\n" );
+        if (nb != 6) {
+            fprintf(stderr, "* IMAGE SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
+        } else {
+            fprintf(stderr, "* IMAGE SUBSET SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
+        }
+        fprintf(stderr, "*******************************\n" );
+        /*********************************************************************/
+        /*  Allocate and initialize data structures                      */
+        /*********************************************************************/
+        if (nb != 6) {
+            tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
+            tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U8 );
+            tmpImage2 = NULL;
+            tmpMask2 = NULL;
+        } else {
+            tmpImage2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_F32 );
+            tmpMask2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_U8 );
+            tmpImage = psImageSubset(tmpImage2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
+                                     IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
+            tmpMask= psImageSubset(tmpMask2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
+                                   IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
+        }
+
+
+        for ( i = 0;i < tmpImage->numRows;i++ ) {
+            for ( j = 0;j < tmpImage->numCols;j++ ) {
+                tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j + 0.1 );
+            }
+        }
+
+
+        for ( i = 0;i < tmpMask->numRows;i++ ) {
+            for ( j = 0;j < tmpMask->numCols;j++ ) {
+                if ( ( i > ( tmpMask->numRows / 2 ) ) &&
+                        ( j > ( tmpMask->numCols / 2 ) ) ) {
+                    tmpMask->data.U8[ i ][ j ] = 1;
+                } else {
+                    tmpMask->data.U8[ i ][ j ] = 0;
+                }
+            }
+        }
+
+        /*************************************************************************/
+        /*  Calculate Histogram with no mask                             */
+        /*************************************************************************/
+
+        myHist = psHistogramAlloc( 0.0, ( float ) ( IMAGE_X_SIZE + IMAGE_Y_SIZE ),
+                                   NUM_BINS );
+        myHist = psImageHistogram( myHist, tmpImage, NULL, 0 );
+        for ( i = 0;i < NUM_BINS;i++ ) {
+            fprintf(stderr, "Bin number %d bounds: (%.1f - %.1f) data (%.2f)\n", i,
+                    myHist->bounds->data.F32[ i ],
+                    myHist->bounds->data.F32[ i + 1 ],
+                    myHist->nums->data.F32[ i ] );
+        }
+        psFree( myHist );
+
+        /*************************************************************************/
+        /*  Calculate Histogram with mask                                */
+        /*************************************************************************/
+
+        myHist = psHistogramAlloc( 0.0, ( float ) ( IMAGE_X_SIZE + IMAGE_Y_SIZE ),
+                                   NUM_BINS );
+        myHist = psImageHistogram( myHist, tmpImage, tmpMask, 1 );
+        for ( i = 0;i < NUM_BINS;i++ ) {
+            fprintf( stderr, "Bin number %d bounds: (%.2f - %.2f) data (%.2f)\n", i,
+                     myHist->bounds->data.F32[ i ],
+                     myHist->bounds->data.F32[ i + 1 ],
+                     myHist->nums->data.F32[ i ] );
+        }
+
+        /*************************************************************************/
+        /*  Deallocate data structures                                   */
+        /*************************************************************************/
+        psFree( myHist );
+        psFree( tmpImage );
+        psFree( tmpImage2 );
+        psFree( tmpMask );
+        psFree( tmpMask2 );
+    }
+    tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
+    myHist = psHistogramAlloc( 0.0, ( float ) ( IMAGE_X_SIZE + IMAGE_Y_SIZE ),
+                               NUM_BINS );
+    myHist2 = psImageHistogram( NULL, tmpImage, NULL, 0 );
+    if ( myHist2 != NULL ) {
+        fprintf(stderr, "ERROR: myHist2 not equal to NULL\n" );
+    }
+
+    myHist2 = psImageHistogram( myHist, NULL, NULL, 0 );
+    myHist2 = psImageHistogram( NULL, tmpImage, NULL, 0 );
+    if ( myHist2 != NULL ) {
+        fprintf(stderr, "ERROR: myHist2 not equal to NULL\n" );
+    }
+
+
+    tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_S8 );
+    for ( i = 0;i < tmpMask->numRows;i++ ) {
+        for ( j = 0;j < tmpMask->numCols;j++ ) {
+            if ( ( i > ( tmpMask->numRows / 2 ) ) &&
+                    ( j > ( tmpMask->numCols / 2 ) ) ) {
+                tmpMask->data.S8[ i ][ j ] = 1;
+            } else {
+                tmpMask->data.S8[ i ][ j ] = 0;
+            }
+        }
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error for invalid mask type.");
+    myHist2 = psImageHistogram(myHist,tmpImage,tmpMask,1);
+    if (myHist2 != NULL) {
+        fprintf(stderr,"ERROR: myHist2 not equal to NULL\n");
+    }
+
+    psFree( tmpMask );
+    psFree(myHist);
+    psFree(myHist2);
+    psFree( tmpImage );
+
+    return ( !testStatus );
+}
+
+static psS32 testPsImageStats()
+{
+    const int N  = 32;
+    const int M = 64;
+
+    psStats * myStats = NULL;
+    psStats *myStats2 = NULL;
+    psImage *tmpImage = NULL;
+    psImage *tmpImage2 = NULL;
+    psImage *tmpMask = NULL;
+    psImage *tmpMask2 = NULL;
+    psS32 testStatus = true;
+    psS32 nb = 0;
+    psS32 i = 0;
+    psS32 j = 0;
+    psS32 IMAGE_X_SIZE = 0;
+    psS32 IMAGE_Y_SIZE = 0;
+    psS32 currentId = 0;
+
+    currentId = psMemGetId();
+    for ( nb = 0;nb < 7;nb++ ) {
+        if ( nb == 0 ) {
+            IMAGE_X_SIZE = 1;
+            IMAGE_Y_SIZE = 1;
+        }
+        if ( nb == 1 ) {
+            IMAGE_X_SIZE = 1;
+            IMAGE_Y_SIZE = N;
+        }
+        if ( nb == 2 ) {
+            IMAGE_X_SIZE = N;
+            IMAGE_Y_SIZE = 1;
+        }
+        if ( nb == 3 ) {
+            IMAGE_X_SIZE = N;
+            IMAGE_Y_SIZE = N;
+        }
+        if ( nb == 4 ) {
+            IMAGE_X_SIZE = N;
+            IMAGE_Y_SIZE = M;
+        }
+        if ( nb == 5 ) {
+            IMAGE_X_SIZE = M;
+            IMAGE_Y_SIZE = N;
+        }
+        if ( nb == 6 ) {
+            IMAGE_X_SIZE = M;
+            IMAGE_Y_SIZE = N;
+        }
+        fprintf(stderr, "*******************************\n" );
+        if (nb != 6) {
+            fprintf(stderr, "* IMAGE SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
+        } else {
+            fprintf(stderr, "* IMAGE SUBSET SIZE is (%d by %d)\n", IMAGE_X_SIZE, IMAGE_Y_SIZE );
+        }
+        fprintf(stderr, "*******************************\n" );
+
+        /*************************************************************************/
+        /*  Allocate and initialize data structures                      */
+        /*************************************************************************/
+        if (nb != 6) {
+            tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
+            tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U8 );
+            tmpImage2 = NULL;
+            tmpMask2 = NULL;
+        } else {
+            tmpImage2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_F32 );
+            tmpMask2 = psImageAlloc( IMAGE_X_SIZE*2, IMAGE_Y_SIZE*2, PS_TYPE_U8 );
+            tmpImage = psImageSubset(tmpImage2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
+                                     IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
+            tmpMask = psImageSubset(tmpMask2, psRegionSet(IMAGE_X_SIZE/4, IMAGE_X_SIZE/4+IMAGE_X_SIZE,
+                                    IMAGE_Y_SIZE/4, IMAGE_Y_SIZE/4+IMAGE_Y_SIZE));
+        }
+
+        for ( i = 0;i < tmpImage->numRows;i++ ) {
+            for ( j = 0;j < tmpImage->numCols;j++ ) {
+                tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j );
+            }
+        }
+        for ( i = 0;i < tmpMask->numRows;i++ ) {
+            for ( j = 0;j < tmpMask->numCols;j++ ) {
+                if ( ( i > ( tmpMask->numRows / 2 ) ) &&
+                        ( j > ( tmpMask->numCols / 2 ) ) ) {
+                    tmpMask->data.U8[ i ][ j ] = 1;
+                } else {
+                    tmpMask->data.U8[ i ][ j ] = 0;
+                }
+            }
+        }
+
+        myStats = psStatsAlloc( PS_STAT_SAMPLE_MEAN );
+        /*************************************************************************/
+        /*  Calculate Sample Mean with no mask                           */
+        /*************************************************************************/
+        psStats* tmpStats = myStats;
+        myStats = psImageStats( myStats, tmpImage, NULL, 0 );
+        if ( myStats != tmpStats ) {
+            fprintf(stderr,"ERROR: input psStats not equal to return psStats\n");
+            psAbort(__func__,"Failed input psStats equal to returned psStats");
+        }
+        fprintf(stderr, "The sample mean was %.2f\n", myStats->sampleMean );
+
+        /*************************************************************************/
+        /*  Calculate Sample Mean with mask                              */
+        /*************************************************************************/
+
+        myStats = psImageStats( myStats, tmpImage, tmpMask, 1 );
+        fprintf(stderr, "The sample mean was %.2f\n", myStats->sampleMean );
+
+        /*************************************************************************/
+        /*  Deallocate data structures                                   */
+        /*************************************************************************/
+        psFree( myStats );
+        psFree( tmpImage );
+        psFree( tmpMask );
+        psFree( tmpImage2 );
+        psFree( tmpMask2 );
+    }
+
+    /*************************************************************************/
+    /*  Test With Various Null Inputs                                        */
+    /*************************************************************************/
+
+    tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32 );
+    tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U8 );
+    myStats = psStatsAlloc( 0 );
+
+    myStats2 = psImageStats( myStats, NULL, NULL, 0 );
+    if ( myStats2 != NULL ) {
+        fprintf(stderr, "ERROR: myStats2 = psImageStats(myStats, NULL, NULL, 0) != NULL\n" );
+    }
+
+    myStats2 = psImageStats( NULL, tmpImage, NULL, 0 );
+    if ( myStats2 != NULL ) {
+        fprintf(stderr, "ERROR: myStats2 = psImageStats(NULL, tmpImage, NULL, 0) != NULL\n" );
+    }
+
+    myStats2 = psImageStats( myStats, tmpImage, NULL, 0 );
+
+    psFree( myStats );
+    psFree( tmpImage );
+    psFree( tmpMask );
+
+    tmpImage = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_F32);
+    tmpMask = psImageAlloc( IMAGE_X_SIZE, IMAGE_Y_SIZE, PS_TYPE_U32);
+    myStats = psStatsAlloc( PS_STAT_SAMPLE_MEAN );
+    myStats2 = psImageStats( myStats, tmpImage, tmpMask, 0 );
+    if ( myStats2 != NULL ) {
+        fprintf(stderr, "ERROR: psImageStats did not return null when mask is invalid type.\n");
+    }
+    psFree(tmpImage);
+    psFree(tmpMask);
+    psFree(myStats);
+
+    return ( !testStatus );
+}
+
+static psS32 testPsImageFitPolynomial()
+{
+    const int IMAGE_SIZE = 64;
+    const int CHEBY_X_DIM = 8;
+    const int CHEBY_Y_DIM = 8;
+    const int THRESHOLD = 10;
+
+    psStats * myStats = NULL;
+    psImage *tmpImage = NULL;
+    psImage *outImage = NULL;
+    psImage *nullImage = NULL;
+    psPolynomial2D *my2DPoly = NULL;
+    psPolynomial2D *null2DPoly = NULL;
+    psS32 testStatus = true;
+    psS32 i = 0;
+    psS32 j = 0;
+    psS32 currentId = 0;
+
+    currentId = psMemGetId();
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    tmpImage = psImageAlloc( IMAGE_SIZE, IMAGE_SIZE, PS_TYPE_F32 );
+    outImage = psImageAlloc( IMAGE_SIZE, IMAGE_SIZE, PS_TYPE_F32 );
+    for ( i = 0;i < IMAGE_SIZE;i++ ) {
+        for ( j = 0;j < IMAGE_SIZE;j++ ) {
+            tmpImage->data.F32[ i ][ j ] = 4.0;
+            tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j );
+            tmpImage->data.F32[ i ][ j ] = ( float ) ( i + j ) + ( 4.0 * ( float ) i );
+            outImage->data.F32[ i ][ j ] = 0.0;
+        }
+    }
+    my2DPoly = psPolynomial2DAlloc( CHEBY_X_DIM, CHEBY_Y_DIM, PS_POLYNOMIAL_CHEB );
+    /*************************************************************************/
+    /*  Calculate Chebyshev Polynomials, no mask                     */
+    /*************************************************************************/
+    my2DPoly = psImageFitPolynomial( my2DPoly, tmpImage );
+    for ( i = 0;i < CHEBY_X_DIM;i++ ) {
+        for ( j = 0;j < CHEBY_Y_DIM;j++ ) {
+            fprintf(stderr, "Cheby Polynomial (%d, %d) coefficient is %.2f\n", i, j, 0.0001f+my2DPoly->coeff[ i ][ j ] );
+        }
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error message for NULL coeffs argument.");
+    null2DPoly = psImageFitPolynomial( NULL, tmpImage );
+    if ( null2DPoly != NULL ) {
+        fprintf(stderr,"ERROR: psImageFitPolynomial did not return NULL with invalid coeffs argument.");
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be a error message for NULL input argument.");
+    null2DPoly = psImageFitPolynomial( null2DPoly, NULL );
+    if ( null2DPoly != NULL ) {
+        fprintf(stderr,"ERROR: psImageFitPolynomial did not return NULL with null input image.");
+    }
+
+    /*************************************************************************/
+    /*  Evaluate Chebyshev Polynomials, no mask                      */
+    /*************************************************************************/
+    outImage = psImageEvalPolynomial( outImage, my2DPoly );
+    for ( i = 0;i < IMAGE_SIZE;i++ ) {
+        for ( j = 0;j < IMAGE_SIZE;j++ ) {
+
+            //             fprintf(stderr,"pixel[%d][%d] is (%.2f, %.2f)\n", i, j,
+            //                     tmpImage->data.F32[i][j],
+            //                     outImage->data.F32[i][j]);
+            if ( fabs( outImage->data.F32[ i ][ j ] - tmpImage->data.F32[ i ][ j ] ) > THRESHOLD ) {
+                fprintf(stderr, "Pixel (%d, %d) is %.2f, should be %.2f\n", i, j,
+                        outImage->data.F32[ i ][ j ],
+                        tmpImage->data.F32[ i ][ j ] );
+            }
+
+        }
+    }
+
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error message for NULL coeffs argument.");
+    nullImage = psImageEvalPolynomial( outImage, NULL );
+    if ( nullImage != NULL ) {
+        fprintf(stderr,"ERROR: psImageEvalPolynomial did not return NULL with invalid coeffs argument.");
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be a error message for NULL input argument.");
+    nullImage = psImageEvalPolynomial( NULL, my2DPoly );
+    if ( nullImage != NULL ) {
+        fprintf(stderr,"ERROR: psImageEvalPolynomial did not return NULL with null input image.");
+    }
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    psFree( myStats );
+    psFree( tmpImage );
+    psFree( outImage );
+    psFree( my2DPoly );
+
+    return ( !testStatus );
+}
+
+static psS32 testPsImagePixelInterpolate()
+{
+    const int IMAGE_SIZE = 10;
+
+    psImage *tmpImage   = NULL;
+    psS32 testStatus      = true;
+    psS32 i               = 0;
+    psS32 j               = 0;
+    float pixel         = 0.0;
+    float x             = 0.0;
+    float y             = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    tmpImage = psImageAlloc(IMAGE_SIZE, IMAGE_SIZE, PS_TYPE_F32);
+    for (i=0;i<IMAGE_SIZE;i++) {
+        for (j=0;j<IMAGE_SIZE;j++) {
+            tmpImage->data.F32[i][j] = 4.0;
+            tmpImage->data.F32[i][j] = (float) (i + j) + (4.0 * (float) i);
+            tmpImage->data.F32[i][j] = (float) (i + j);
+            fprintf(stderr,"%.1f ", tmpImage->data.F32[i][j]);
+        }
+        fprintf(stderr,"\n");
+    }
+    for (i=0;i<IMAGE_SIZE-1;i++) {
+        for (j=0;j<IMAGE_SIZE-1;j++) {
+            x = 0.2 + (float) i;
+            y = 0.2 + (float) j;
+            pixel = psImagePixelInterpolate(tmpImage,
+                                            x, y,
+                                            NULL, 0,
+                                            0,
+                                            PS_INTERPOLATE_BILINEAR);
+            fprintf(stderr,"%.1f ", pixel);
+        }
+        fprintf(stderr,"\n");
+    }
+
+    for (i=0;i<IMAGE_SIZE-1;i++) {
+        for (j=0;j<IMAGE_SIZE-1;j++) {
+            x = 0.2 + (float) i;
+            y = 0.2 + (float) j;
+            pixel = psImagePixelInterpolate(tmpImage,
+                                            x, y,
+                                            NULL,0,
+                                            0,
+                                            PS_INTERPOLATE_BILINEAR);
+            fprintf(stderr,"image[%.1f][%.1f] is interpolated at %.1f\n", x, y, pixel);
+        }
+    }
+
+    psFree(tmpImage);
+
+    return (!testStatus);
+}
+
+#define I_POLY(X, Y) \
+((A) + (B * X) + (C * Y) + (D * X * Y) + (E * X * X) + (F * Y * Y)) \
+
+static bool FitChebyF32(int numCols, int numRows)
+{
+    const double A = 1.0;
+    const double B = 2.0;
+    const double C = 3.0;
+    const double D = 4.0;
+    const double E = 5.0;
+    const double F = 6.0;
+    const double ERROR_TOL = 0.1;
+
+    psImage *tmpImage     = NULL;
+    psImage *outImage     = NULL;
+    bool testStatus      = true;
+    psS32 i               = 0;
+    psS32 j               = 0;
+    float chi2 = 0.0;
+
+
+    fprintf(stderr,"psImageFitPolynomial(), psImageEvalPolynom(): (%d by %d)\n", numRows, numCols);
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+
+    tmpImage = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    outImage = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+    for (i=0;i<numRows;i++) {
+        for (j=0;j<numCols;j++) {
+            tmpImage->data.F32[i][j] = I_POLY(((float) i), ((float) j));
+        }
+    }
+
+    psPolynomial2D *chebys = psPolynomial2DAlloc(5, 5, PS_POLYNOMIAL_CHEB);
+
+    chebys = psImageFitPolynomial(chebys, tmpImage);
+
+    outImage = psImageEvalPolynomial(outImage, chebys);
+
+    chi2 = 0.0;
+    for (i=0;i<numRows;i++) {
+        for (j=0;j<numCols;j++) {
+            float expect = tmpImage->data.F32[i][j];
+            float actual = outImage->data.F32[i][j];
+            chi2+= (actual-expect) * (actual-expect);
+            if (fabs((actual - expect) / expect) > ERROR_TOL) {
+                fprintf(stderr,"pixel [%d][%d] is %.2f should be %.2f\n", i, j, actual, expect);
+            }
+        }
+    }
+    chi2/= ((float) (numCols * numRows));
+    fprintf(stderr,"The chi-squared per pixel is %.2f\n", chi2);
+
+    psFree(tmpImage);
+    psFree(outImage);
+    psFree(chebys);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+
+    return(testStatus);
+}
+
+static bool FitChebyF64(int numCols, int numRows)
+{
+    const double A = 1.0;
+    const double B = 2.0;
+    const double C = 3.0;
+    const double D = 4.0;
+    const double E = 5.0;
+    const double F = 6.0;
+    const double ERROR_TOL = 0.1;
+
+    psImage *tmpImage     = NULL;
+    psImage *outImage     = NULL;
+    bool testStatus      = true;
+    psS32 i               = 0;
+    psS32 j               = 0;
+    double chi2 = 0.0;
+
+
+    fprintf(stderr,"psImageFitPolynomial(), psImageEvalPolynom(): (%d by %d)\n", numRows, numCols);
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+
+    tmpImage = psImageAlloc(numCols, numRows, PS_TYPE_F64);
+    outImage = psImageAlloc(numCols, numRows, PS_TYPE_F64);
+    for (i=0;i<numRows;i++) {
+        for (j=0;j<numCols;j++) {
+            tmpImage->data.F64[i][j] = I_POLY(((double) i), ((double) j));
+        }
+    }
+
+    psPolynomial2D *chebys = psPolynomial2DAlloc(5, 5, PS_POLYNOMIAL_CHEB);
+
+    chebys = psImageFitPolynomial(chebys, tmpImage);
+
+    outImage = psImageEvalPolynomial(outImage, chebys);
+
+    chi2 = 0.0;
+    for (i=0;i<numRows;i++) {
+        for (j=0;j<numCols;j++) {
+            double expect = tmpImage->data.F64[i][j];
+            double actual = outImage->data.F64[i][j];
+            chi2+= (actual-expect) * (actual-expect);
+            if (fabs((actual - expect) / expect) > ERROR_TOL) {
+                fprintf(stderr,"pixel [%d][%d] is %.2f should be %.2f\n", i, j, actual, expect);
+            }
+        }
+    }
+    chi2/= ((double) (numCols * numRows));
+    fprintf(stderr,"The chi-squared per pixel is %.2f\n", chi2);
+
+    psFree(tmpImage);
+    psFree(outImage);
+    psFree(chebys);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+
+    return(testStatus);
+}
+
+static psS32 testPsImageEvalPolynom()
+{
+    if (!FitChebyF32(1, 1)) {
+        return 1;
+    }
+    if (!FitChebyF32(1, 5)) {
+        return 2;
+    }
+    if (!FitChebyF32(5, 1)) {
+        return 3;
+    }
+    if (!FitChebyF32(5, 5)) {
+        return 4;
+    }
+    if (!FitChebyF64(1, 1)) {
+        return 5;
+    }
+    if (!FitChebyF64(1, 5)) {
+        return 6;
+    }
+    if (!FitChebyF64(5, 1)) {
+        return 7;
+    }
+    if (!FitChebyF64(5, 5)) {
+        return 8;
+    }
+    return 0;
+}
+
Index: /trunk/psLib/test/imageops/tst_psImageStructManip.c
===================================================================
--- /trunk/psLib/test/imageops/tst_psImageStructManip.c	(revision 4547)
+++ /trunk/psLib/test/imageops/tst_psImageStructManip.c	(revision 4547)
@@ -0,0 +1,676 @@
+/** @file  tst_psImageExtraction.c
+*
+*  @brief Contains the tests for psImageExtraction.[ch]
+*
+*
+*  @author Robert DeSonia, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+#include<stdlib.h>
+#include<string.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+#include "psType.h"
+
+static psS32 testImageSubset(void);
+static psS32 testImageCopy(void);
+static psS32 testImageTrim(void);
+
+
+testDescription tests[] = {
+                              {testImageSubset,547,"psImageSubset",0,false},
+                              {testImageSubset,550,"psImageSubset",0,true},
+                              {testImageCopy,551,"psImageCopy",0,false},
+                              {testImageTrim, 744, "psImageTrim", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    return ! runTestSuite( stderr, "psImage", tests, argc, argv );
+}
+
+// #547: psImageSubset shall create child image of a specified size from a parent psImage structure
+psS32 testImageSubset(void)
+{
+    psImage preSubsetStruct;
+    psImage* original;
+    psImage* subset1 = NULL;
+    psImage* subset2 = NULL;
+    psImage* subset3 = NULL;
+    psS32 c = 128;
+    psS32 r = 256;
+    psRegion region1 = psRegionSet(0,c/2,0,r/2);
+    psRegion region2 = psRegionSet(c/4,c/4+c/2,r/4,r/4+r/2);
+
+    original = psImageAlloc(c,r,PS_TYPE_U32);
+    for (psS32 row=0;row<r;row++) {
+        for (psS32 col=0;col<c;col++) {
+            original->data.F32[row][col] = row*1000+col;
+        }
+    }
+
+    memcpy(&preSubsetStruct,original,sizeof(psImage));
+
+    subset2 = psImageSubset(original,region2);
+
+    subset3 = psImageSubset(original,region1);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure members nrow and ncol are equal to "
+             "the input parameter nrow and ncol respectively.");
+
+    if (subset2->numCols != c/2 || subset2->numRows != r/2) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset output size was not proper(%dx%d, should be %dx%d).",
+                subset2->numCols, subset2->numRows, c/2,r/2);
+        return 1;
+    }
+
+    if (subset3->numCols != c/2 || subset3->numRows != r/2) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset output size was not proper(%dx%d, should be %dx%d).",
+                subset3->numCols, subset3->numRows, c/2,r/2);
+        return 2;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure contains expected values in the "
+             "row member, if the input psImage structure image contains known values.");
+
+    for (psS32 row=0;row<r/2;row++) {
+        for (psS32 col=0;col<c/2;col++) {
+            if (subset2->data.U32[row][col] != original->data.U32[row+r/4][col+c/4]) {
+                psError(PS_ERR_UNKNOWN,true,"psImageSubset output #1 was wrong at %dx%d (%d vs %d).",
+                        row,col,subset2->data.U32[row][col], original->data.U32[row+r/4][col+c/4]);
+                return 3;
+            }
+            if (subset3->data.U32[row][col] != original->data.U32[row][col]) {
+                psError(PS_ERR_UNKNOWN,true,"psImageSubset output #1 was wrong at %dx%d (%d vs %d).",
+                        row,col,subset2->data.U32[row][col], original->data.U32[row][col]);
+                return 4;
+            }
+        }
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure member type is equal to the input "
+             "psImage structure member type.");
+
+    if (subset2->type.type != PS_TYPE_U32) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset output type was not proper(%d, should be %d).",
+                subset2->type.type, PS_TYPE_U32);
+        return 6;
+    }
+    if (subset3->type.type != PS_TYPE_U32) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset output type was not proper(%d, should be %d).",
+                subset3->type.type, PS_TYPE_U32);
+        return 7;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure members row0 and col0 are equal to "
+             "the input parameters row0 and col0 respectively.");
+
+    if (subset2->col0 != c/4 || subset2->row0 != r/4) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set col0/row0 for subset2 (%d/%d, should be %d/%d).",
+                subset2->col0,subset2->row0,c/4,r/4);
+        return 8;
+    }
+    if (subset3->col0 != 0 || subset3->row0 != 0) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set col0/row0 for subset3 (%d/%d, should be %d/%d).",
+                subset3->col0,subset3->row0,0,0);
+        return 9;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure member parent is equal to the "
+             "input psImage structure pointer image.");
+
+    if (subset2->parent != original || subset3->parent != original) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set parent.");
+        return 10;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure member children is null.");
+
+    if (subset2->children != NULL || subset3->children != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't set children to NULL.");
+        return 11;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the input psImage structure image only has the following members "
+             "changed: 1) Nchildren is increased by one. 2) parent contains pointer psImage structure "
+             "out at parent[Nchildren-1].");
+
+    if (original->children == NULL || original->children->n != 2) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't increment number of children by one per subset.");
+        return 12;
+    }
+    if (original->children->data[0] != subset2 || original->children->data[1] != subset3) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't properly store the children pointers.");
+        return 13;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
+             "execution doesn't stop, if the input parameter image is null. Also verified the input "
+             "psImage structure is not modified.");
+
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(NULL,region1);
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when input image was NULL.");
+        return 14;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
+             " execution doesn't stop, if the input parameters nrow and/or ncol are zero. Also verify "
+             "input psImage structure is not modified.");
+
+    memcpy(&preSubsetStruct,original,sizeof(psImage));
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original, psRegionSet(0,c/2,r/2,r/2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when numRows=0.");
+        return 15;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original,psRegionSet(c/2,c/2,0,r/2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when numCols=0.");
+        return 16;
+    }
+    if (memcmp(original,&preSubsetStruct,sizeof(psImage)) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset changed the original struct though it failed to subset.");
+        return 17;
+    }
+
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
+             "execution doesn't stop, if the input parameters row0 and col0 are not within the range of "
+             "values of psImage structure image.");
+
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original, psRegionSet(0,c/2, 0,r*2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
+                "image (via cols).");
+        return 18;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original,psRegionSet(0,c*2,0,r/2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
+                "image (via rows).");
+        return 19;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original, psRegionSet(-1,c/2,0,r/2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
+                "image (col0=-1).");
+        return 20;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original, psRegionSet(0,c/2,-1,r/2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset origin was outside of "
+                "image (row0=-1).");
+        return 21;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Verify the returned psImage structure pointer is null and program "
+             "execution doesn't stop if the input parameters nrow, ncol, row0 and col0 specify a range of "
+             "data not within the input psImage structure image.  Also verify the input psImage structure "
+             "is not modified.");
+
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original,psRegionSet(0,c/2,0,r+1));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset was outside of image (via rows).");
+        return 22;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original, psRegionSet(0,c+1,0,r/2));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset was outside of image (via cols).");
+        return 23;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    subset1 = psImageSubset(original,psRegionSet(0,c+1,0,r+1));
+    if (subset1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psImageSubset didn't return NULL when subset was outside of image (via row+cols).");
+        return 24;
+    }
+
+    psLogMsg(__func__, PS_LOG_INFO, "psImageFreeChildren shall deallocate any children images of a "
+             "psImage structure");
+
+    memcpy(&preSubsetStruct,original,sizeof(psImage));
+
+    psImageFreeChildren(original);
+
+    // Verify the returned psImage structure member Nchildren is set to zero.
+    if (original->children != NULL && original->children->n > 0) {
+        psError(PS_ERR_UNKNOWN,true,"psImageFreeChildren didn't set number of children to zero.");
+        return 25;
+    }
+
+    //Verify the returned psImage structure members type, nrow, ncol, row0, col0, rows and parent are not
+    // modified.
+    if (preSubsetStruct.numRows != original->numRows ||
+            preSubsetStruct.numCols != original->numCols ||
+            preSubsetStruct.row0 != original->row0 ||
+            preSubsetStruct.col0 != original->col0) {
+
+        psError(PS_ERR_UNKNOWN,true,"psImageFreeChildren modified parent's non-children elements.");
+        return 27;
+    }
+
+    psFree(original);
+
+    return 0;
+}
+
+psS32 testImageCopy(void)
+{
+    psImage* img = NULL;
+    psImage* img2 = NULL;
+    psImage* img3 = NULL;
+    psImage* img4 = NULL;
+    psU32 c = 128;
+    psU32 r = 256;
+
+    img = psImageAlloc(c,r,PS_TYPE_F32);
+    for (unsigned row=0;row<r;row++) {
+        psF32* imgRow = img->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            imgRow[col] = (psF32)(row+col);
+        }
+    }
+    img2 = psImageAlloc(c,r,PS_TYPE_F32);
+    for (unsigned row=0;row<r;row++) {
+        psF32* img2Row = img2->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            img2Row[col] = 0.0f;
+        }
+    }
+
+    img3 = psImageCopy(img2,img,PS_TYPE_F32);
+
+    // Verify the returned psImage structure pointer is equal to the input parameter output.
+    if (img2 != img3) {
+        psError(PS_ERR_UNKNOWN, true,"the image given for recycled wasn't");
+        return 1;
+    }
+
+    // Verify the returned psImage structure is the same type as the input image structure
+    // if the specified output argument is NULL.
+    img4 = psImageCopy(NULL,img,PS_TYPE_F32);
+    if (img4 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"output image doesn't exist");
+        return 4;
+    }
+    if (img4->type.type != img->type.type) {
+        psError(PS_ERR_UNKNOWN, true,"output image is not the same type as input image");
+        return 4;
+    }
+    for (psU32 row=0;row<r;row++) {
+        psF32* imgInRow = img->data.F32[row];
+        psF32* imgOutRow = img4->data.F32[row];
+        for (unsigned col=0;col<c;col++) {
+            if( imgInRow[col] != imgOutRow[col] ) {
+                psError(PS_ERR_UNKNOWN, true,"Input image not equal to output image at %d,%d!",
+                        col, row);
+                return 4;
+            }
+        }
+    }
+
+    // Verify the returned psImage structure member are equal to the values in
+    // the input psImage structure input.
+
+    #define testImageCopyType(IN,OUT) \
+    img = psImageRecycle(img,c,r,PS_TYPE_##IN); \
+    for (unsigned row=0;row<r;row++) { \
+        ps##IN* imgRow = img->data.IN[row]; \
+        for (unsigned col=0;col<c;col++) { \
+            imgRow[col] = (ps##IN)(row+col); \
+        } \
+    } \
+    img2 = psImageCopy(img2,img,PS_TYPE_##OUT); \
+    if (img2 == NULL) { \
+        psError(PS_ERR_UNKNOWN, true,"psImageCopy failed to copy U8."); \
+        return 2; \
+    } \
+    for (psU32 row=0;row<r;row++) { \
+        ps##IN* imgRow = img->data.IN[row]; \
+        ps##OUT* img2Row = img2->data.OUT[row]; \
+        for (psU32 col=0;col<c;col++) { \
+            if (abs(imgRow[col] - (ps##IN)(row+col)) > 0.5) { \
+                psError(PS_ERR_UNKNOWN, true,"Input image was changed at %d,%d!", \
+                        col,row); \
+                return 2; \
+            } \
+            if (abs(img2Row[col] - (ps##OUT)(imgRow[col])) > 0.5) { \
+                psError(PS_ERR_UNKNOWN, true,"returned psImage values after copy don't match at %d,%d " \
+                        "(%d vs %d)",\
+                        col,row,img2Row[col], (ps##OUT)(imgRow[col])); \
+                return 2; \
+            } \
+        } \
+    }
+
+    #define testImageCopyTypes(IN) \
+    printf("to psF32\n"); \
+    testImageCopyType(IN,F32);\
+    printf("to psF64\n"); \
+    testImageCopyType(IN,F64); \
+    printf("to psU8\n"); \
+    testImageCopyType(IN,U8); \
+    printf("to psU16\n"); \
+    testImageCopyType(IN,U16); \
+    printf("to psU32\n"); \
+    testImageCopyType(IN,U32); \
+    printf("to psS8\n"); \
+    testImageCopyType(IN,S8);\
+    printf("to psS16\n"); \
+    testImageCopyType(IN,S16);\
+    printf("to psS32\n"); \
+    testImageCopyType(IN,S32);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psU8");
+    testImageCopyTypes(U8);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psU16");
+    testImageCopyTypes(U16);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psU32");
+    testImageCopyTypes(U32);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psS8");
+    testImageCopyTypes(S8);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psS16");
+    testImageCopyTypes(S16);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psS32");
+    testImageCopyTypes(S32);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psF32");
+    testImageCopyTypes(F32);
+    psLogMsg(__func__,PS_LOG_INFO,"Image Copy Test for psF64");
+    testImageCopyTypes(F64);
+
+    // Verify the returned psImage structure pointer is null and program
+    // execution doesn't stop, if the input parameter input is null.
+    psLogMsg(__func__,PS_LOG_INFO,"An error should follow...");
+    img3 = psImageCopy(NULL,NULL,PS_TYPE_F32);
+    if (img3 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psImageCopy didn't return NULL when input image was NULL.");
+        return 3;
+    }
+
+    psFree(img);
+    psFree(img2);
+    psFree(img3);
+    psFree(img4);
+
+    return 0;
+}
+
+static psS32 testImageTrim(void)
+{
+    psS32 r = 200;
+    psS32 c = 300;
+    psS32 qtrR = r/4;
+    psS32 qtrC = c/4;
+    psS32 halfR = r/2;
+    psS32 halfC = c/2;
+    psRegion centerHalf = {qtrC,qtrC+halfC,qtrR,qtrR+halfR};
+
+    psImage* image = psImageAlloc(c,r,PS_TYPE_F32);
+    for (psS32 row = 0; row < image->numRows; row++) {
+        for (psS32 col = 0; col < image->numCols; col++) {
+            image->data.F32[row][col] = (psF32)col + (psF32)row/1000.0f;
+        }
+    }
+
+    /*
+        1. invoke psImageTrim with non-NULL image, and a valid region
+           x0,y0->x1,y1 (using only positive values). Verify that:
+            a. the return psImage is the same as the input psImage.
+            b. the size of the psImage is x1-x0 by y1-y0.
+            c. the pixel values coorespond to the region [x0:x1-1,y0:y1-1].
+    */
+    psImage* image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    psImage* image2 = psImageTrim(image1,centerHalf);
+
+    if (image1 != image2) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not same as input value.  Not done in-place?");
+        return 1;
+    }
+
+    if (image2->numCols != halfC ||
+            image2->numRows != halfR) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "The resulting image size was %dx%d, but should be %dx%d.",
+                 image2->numCols, image2->numRows,
+                 halfC, halfR);
+        return 2;
+    }
+
+    for (psS32 row = 0; row < image2->numRows; row++) {
+        for (psS32 col = 0; col < image2->numCols; col++) {
+            if (fabsf(image2->data.F32[row][col] - image->data.F32[row+qtrR][col+qtrC]) > FLT_EPSILON) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "The value at (%d,%d) was %g, but should be %g.",
+                         col,row,
+                         image2->data.F32[row][col],
+                         image->data.F32[row+qtrR][col+qtrC]);
+                return 3;
+            }
+        }
+    }
+
+    /*
+        2. invoke psImageTrim with non-NULL image and valid region where x1=0,
+           y1=0. Verify that:
+            a. the return psImage size is numCols-x0 by numRows-y0
+            b. the pixel values coorespond to the region
+               [x0:numCols-1,y0:numRows-1].
+    */
+    image1 = psImageCopy(image1,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1,psRegionSet(qtrC,0,qtrR,0));
+
+    if (image1 != image2) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not same as input value.  Not done in-place?");
+        return 11;
+    }
+
+    if (image2->numCols != image->numCols-qtrC ||
+            image2->numRows != image->numRows-qtrR) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "The resulting image size was %dx%d, but should be %dx%d.",
+                 image2->numCols, image2->numRows,
+                 image->numCols-qtrC, image->numRows-qtrR);
+        return 12;
+    }
+
+    for (psS32 row = 0; row < image2->numRows; row++) {
+        for (psS32 col = 0; col < image2->numCols; col++) {
+            if (fabsf(image2->data.F32[row][col] -
+                      image->data.F32[row+qtrR][col+qtrC]) > FLT_EPSILON) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "The value at (%d,%d) was %g, but should be %g.",
+                         col,row,
+                         image2->data.F32[row][col],
+                         image->data.F32[row+qtrR][col+qtrC]);
+                return 13;
+            }
+        }
+    }
+
+    /*
+        4. invoke psImageTrim with x1<0, y1<0. Verify:
+            a. the psImage size is (numCols+x1)-x0 by (numRows+y1)-y0.
+            b. the pixel values coorespond to the region
+               [x0:numCols+x1-1,y0:numRows+y1-1].
+
+    */
+    image1 = psImageCopy(image1,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1,psRegionSet(qtrC,-qtrC, qtrR,-qtrR));
+
+    if (image1 != image2) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "Return value not same as input value.  Not done in-place?");
+        return 21;
+    }
+
+    if (image2->numCols != image->numCols-qtrC-qtrC ||
+            image2->numRows != image->numRows-qtrR-qtrR) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "The resulting image size was %dx%d, but should be %dx%d.",
+                 image2->numCols, image2->numRows,
+                 image->numCols-qtrC, image->numRows-qtrR);
+        return 22;
+    }
+
+    for (psS32 row = 0; row < image2->numRows; row++) {
+        for (psS32 col = 0; col < image2->numCols; col++) {
+            if (fabsf(image2->data.F32[row][col] -
+                      image->data.F32[row+qtrR][col+qtrC]) > FLT_EPSILON) {
+                psLogMsg(__func__,PS_LOG_ERROR,
+                         "The value at (%d,%d) was %g, but should be %g.",
+                         col,row,
+                         image2->data.F32[row][col],
+                         image->data.F32[row+qtrR][col+qtrC]);
+                return 23;
+            }
+        }
+    }
+
+    psFree(image2);
+
+    /*
+        6. invoke psImageTrim with image=NULL Verify:
+            a. execution does not cease.
+            b. return value is NULL
+            c. appropriate error is generated.
+    */
+
+    image2 = psImageTrim(NULL, psRegionSet(qtrC,0,qtrR,0));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given a NULL input image.");
+        return 31;
+    }
+    psErr* err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for NULL input image.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 32;
+    }
+    psFree(err);
+
+    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1, psRegionSet(-1,0,0,0));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given x0=-1.");
+        return 33;
+    }
+    err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for x0=-1.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 34;
+    }
+    psFree(err);
+
+    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1, psRegionSet(0,0,-1,0));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given y0=-1.");
+        return 35;
+    }
+    err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for y0=-1.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 36;
+    }
+    psFree(err);
+
+    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1, psRegionSet(0,image->numCols+1,0,0));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given x1=numCols+1.");
+        return 37;
+    }
+    err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for x1=numCols+1.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 38;
+    }
+    psFree(err);
+
+    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1, psRegionSet(0,0,0,image->numRows+1));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given y1=numRows+1.");
+        return 39;
+    }
+    err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for y1=numRows+1.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 40;
+    }
+    psFree(err);
+
+    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1, psRegionSet(0,(((psF32)image->numCols)*-1.0),0,0));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given x1=-numCols.");
+        return 41;
+    }
+    err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for x1=-numCols.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 42;
+    }
+    psFree(err);
+
+    image1 = psImageCopy(NULL,image,PS_TYPE_F32);
+    image2 = psImageTrim(image1, psRegionSet(0,0,0,(((psF32)image->numRows)*-1.0)));
+
+    if (image2 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not return NULL given y1=-numRows.");
+        return 41;
+    }
+    err = psErrorLast();
+    if (err == NULL || err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psImageTrim did not generate an appropriate error for y1=-numRows.");
+        psErrorStackPrint(stderr,"Error Stack:");
+        return 42;
+    }
+    psFree(err);
+
+    psFree(image);
+    return 0;
+}
Index: /trunk/psLib/test/imageops/verified/tst_psImageConvolve.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageConvolve.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageConvolve.stderr	(revision 4547)
@@ -0,0 +1,55 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageConvolve.c                                      *
+*            TestPoint: psImage{psKernelAlloc}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testKernelAlloc
+    Following should be a warning (xMin > xMax)
+<DATE><TIME>|<HOST>|W|psKernelAlloc
+    Specified xMin, 5, was greater than xMax, -5.  Values swapped.
+<DATE><TIME>|<HOST>|I|testKernelAlloc
+    Following should be a warning (yMin > yMax)
+<DATE><TIME>|<HOST>|W|psKernelAlloc
+    Specified yMin, 5, was greater than yMax, -5.  Values swapped.
+
+---> TESTPOINT PASSED (psImage{psKernelAlloc} | tst_psImageConvolve.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageConvolve.c                                      *
+*            TestPoint: psImage{psKernelGenerate}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testKernelGenerate
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
+    Shift vectors can not be of different sizes.
+<DATE><TIME>|<HOST>|I|testKernelGenerate
+    Following should be a error (time vector NULL).
+<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
+    Specified shift vectors can not be NULL.
+<DATE><TIME>|<HOST>|I|testKernelGenerate
+    Following should be a error (x vector NULL).
+<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
+    Specified shift vectors can not be NULL.
+<DATE><TIME>|<HOST>|I|testKernelGenerate
+    Following should be a error (y vector NULL).
+<DATE><TIME>|<HOST>|E|psKernelGenerate (FILE:LINENO)
+    Specified shift vectors can not be NULL.
+
+---> TESTPOINT PASSED (psImage{psKernelGenerate} | tst_psImageConvolve.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageConvolve.c                                      *
+*            TestPoint: psImage{psImageConvolve}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageConvolve
+    Testing direct gaussian convolution
+<DATE><TIME>|<HOST>|I|testImageConvolve
+    Testing fourier gaussian convolution
+
+---> TESTPOINT PASSED (psImage{psImageConvolve} | tst_psImageConvolve.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageExtraction.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageExtraction.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageExtraction.stderr	(revision 4547)
@@ -0,0 +1,296 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageExtraction.c                                    *
+*            TestPoint: psImage{psImageSubset}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure members nrow and ncol are equal to the input parameter nrow and ncol respectively.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure contains expected values in the row member, if the input psImage structure image contains known values.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure member type is equal to the input psImage structure member type.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure members row0 and col0 are equal to the input parameters row0 and col0 respectively.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure member parent is equal to the input psImage structure pointer image.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure member children is null.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the input psImage structure image only has the following members changed: 1) Nchildren is increased by one. 2) parent contains pointer psImage structure out at parent[Nchildren-1].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameter image is null. Also verified the input psImage structure is not modified.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program  execution doesn't stop, if the input parameters nrow and/or ncol are zero. Also verify input psImage structure is not modified.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,128:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [64:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameters row0 and col0 are not within the range of values of psImage structure image.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,0:511], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:255,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [-1:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,-1:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program execution doesn't stop if the input parameters nrow, ncol, row0 and col0 specify a range of data not within the input psImage structure image.  Also verify the input psImage structure is not modified.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:128,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:128,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    psImageFreeChildren shall deallocate any children images of a psImage structure
+
+---> TESTPOINT PASSED (psImage{psImageSubset} | tst_psImageExtraction.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageExtraction.c                                    *
+*            TestPoint: psImage{psImageSubsection}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    Testing subsection [0:32,0:32].
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    Testing subsection [32:64,32:64].
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    Testing subsection [64:127,32:64].
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    Testing subsection [32:64,128:255].
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (x1>x2)
+<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
+    Specified subset range, [64:32,32:64], is invalid.  Ranges must be incremental.
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (y1>y2)
+<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
+    Specified subset range, [32:64,64:32], is invalid.  Ranges must be incremental.
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (x2>nCols)
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [64:256,32:64], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (y2>=nRows)
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [32:64,64:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (malformed string - no brackets)
+<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
+    Specified subsection string, '32:64,32:64', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (malformed string - no colons)
+<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
+    Specified subsection string, '[32-64,32-64]', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (malformed string - not four numbers)
+<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
+    Specified subsection string, '[32:64,32]', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (image is NULL)
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageSubsection
+    An error should follow (subsection string is NULL)
+<DATE><TIME>|<HOST>|E|psImageSubsection (FILE:LINENO)
+    Specified subsection string can not be NULL.
+
+---> TESTPOINT PASSED (psImage{psImageSubsection} | tst_psImageExtraction.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageExtraction.c                                    *
+*            TestPoint: psImage{psImageSlice}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified statistic can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified slice direction, 5, is invalid.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:30,20:20], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [301:302,20:30], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:31,201:205], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:301,20:21], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:31,20:201], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error mask size != image size.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Input psImage mask size, 200x300, does not match psImage input size, 300x200.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error invalid mask type.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Input psImage mask type, psS8, is not the supported mask datatype of psU8.
+
+---> TESTPOINT PASSED (psImage{psImageSlice} | tst_psImageExtraction.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageExtraction.c                                    *
+*            TestPoint: psImage{psImageTrim}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [-1:299,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:299,-1:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:300,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:299,0:200], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:-1,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:299,0:-1], is invalid or outside input psImage's boundaries, [0:299,0:199].
+
+---> TESTPOINT PASSED (psImage{psImageTrim} | tst_psImageExtraction.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageExtraction.c                                    *
+*            TestPoint: psImage{psImageCut}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (-1.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (300.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(-1.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(300.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,-1.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,200.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(240.000000,-1.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(240.000000,200.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    Following should be an error (NULL image).
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageCut
+    Following should be an error (length=0).
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified number of samples, 0, must be greater than 1 to make a line.
+
+---> TESTPOINT PASSED (psImage{psImageCut} | tst_psImageExtraction.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageExtraction.c                                    *
+*            TestPoint: psImage{psImageRadialCut}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified radii vector can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified statistic can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified center, (301,100), is outside of the psImage boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified center, (150,201), is outside of the psImage boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Input psImage mask size, 150x100, does not match psImage input size, 300x200.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Input radii vector size, 1, can not be less than 2.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
+
+---> TESTPOINT PASSED (psImage{psImageRadialCut} | tst_psImageExtraction.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageGeomManip.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageGeomManip.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageGeomManip.stderr	(revision 4547)
@@ -0,0 +1,146 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageGeomManip.c                                     *
+*            TestPoint: psImage{psImageRebin}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for unsupported type.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified psImage type, psU8, is not supported.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for invallid mask type.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for scale < 0.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified scale value, 0, must be a positive value.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stats null.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stats options 0.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stat options use range.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic option, 8192, is not valid.  Must specify one and only one statistic type.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stats with multiple options.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic option, 2049, is not valid.  Must specify one and only one statistic type.
+
+---> TESTPOINT PASSED (psImage{psImageRebin} | tst_psImageGeomManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageGeomManip.c                                     *
+*            TestPoint: psImage{psImageRoll}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRoll
+    Following should generate an error.
+<DATE><TIME>|<HOST>|E|psImageRoll (FILE:LINENO)
+    Can not operate on a NULL psImage.
+
+---> TESTPOINT PASSED (psImage{psImageRoll} | tst_psImageGeomManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageGeomManip.c                                     *
+*            TestPoint: psImage{psImageRotate}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRotate
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageRotate
+    Following should be an error for invalid interpolation type.
+<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
+    Specified interpolation mode, -1, is unsupported.
+
+---> TESTPOINT PASSED (psImage{psImageRotate} | tst_psImageGeomManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageGeomManip.c                                     *
+*            TestPoint: psImage{psImageShift}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,-16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32,16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32,-16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32,16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32,-16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,16.4.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,-16.4.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32.7,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32.7,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32.6,16.2.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32.6,-16.2.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32.6,16.2.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32.6,-16.2.
+<DATE><TIME>|<HOST>|I|testImageShift
+    Following should be an error...
+<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageShift
+    Following should be an error for invalid interpolation mode.
+<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
+    Specified interpolation mode, -1, is unsupported.
+
+---> TESTPOINT PASSED (psImage{psImageShift} | tst_psImageGeomManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageGeomManip.c                                     *
+*            TestPoint: psImage{psImageResample}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Specified scale value, 0, must be a positive value.
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Specified interpolation mode, -1, is unsupported.
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Specified psImage type, psBool, is not supported.
+
+---> TESTPOINT PASSED (psImage{psImageResample} | tst_psImageGeomManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageGeomManip.c                                     *
+*            TestPoint: psImage{psImageTransform}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psImage{psImageTransform} | tst_psImageGeomManip.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageIO.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageIO.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageIO.stderr	(revision 4547)
@@ -0,0 +1,404 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageIO.c                                            *
+*            TestPoint: psImage{psImageReadSection}                                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|I|testImageRead
+    Following should be an error as file doesn't exist.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
+    Could not open file,'foobar.fits'.
+    CFITSIO Error: could not open the named file
+<DATE><TIME>|<HOST>|I|testImageRead
+    Following should be an error as filename is NULL.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
+    Specified filename can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRead
+    Following should be an error as extnum is invalid.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
+    Could not find HDU #4 in file tmpImages/MxN_F32.fits.
+    CFITSIO Error: tried to move past end of file
+<DATE><TIME>|<HOST>|I|testImageRead
+    Following should be an error as extname is invalid.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|E|psImageReadSection (FILE:LINENO)
+    Could not find HDU with extension name 'bogus' in file tmpImages/MxN_F32.fits.
+    CFITSIO Error: illegal HDU number
+
+---> TESTPOINT PASSED (psImage{psImageReadSection} | tst_psImageIO.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageIO.c                                            *
+*            TestPoint: psImage{psImageWriteSection}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|I|testImageWrite
+    Following should generate an error message because input image is null.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageWrite
+    Following should be an error for passing invalid image type.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
+    Could not create file,'panstarrs/writeFits.fits'.
+    CFITSIO Error: couldn't create the named file
+<DATE><TIME>|<HOST>|I|testImageWrite
+    Following should be an error for passing invalid FITS file.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
+    Could not open file,'tmpImages/writeInvalidFile.fits'.
+    CFITSIO Error: tried to move past end of file
+<DATE><TIME>|<HOST>|I|testImageWrite
+    Following should be an error for invalid extension name.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
+    Could not find HDU with extension name 'ext2' in file tmpImages/writeTest.fits.
+    CFITSIO Error: illegal HDU number
+<DATE><TIME>|<HOST>|I|testImageWrite
+    Following should be an error for invalid extension number.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|E|psImageWriteSection (FILE:LINENO)
+    Specified extension number, 99, must not exceed number of HDUs, 1, by more than one.
+
+---> TESTPOINT PASSED (psImage{psImageWriteSection} | tst_psImageIO.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageInterpolate.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageInterpolate.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageInterpolate.stderr	(revision 4547)
@@ -0,0 +1,48 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageInterpolate.c                                   *
+*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageInterpolate.c                                   *
+*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testInterpolateError
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testInterpolateError
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (FILE:LINENO)
+    Specified psImage type, psBool, is not supported.
+<DATE><TIME>|<HOST>|I|testInterpolateError
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (FILE:LINENO)
+    Specified psImage type, psBool, is not supported.
+
+---> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageInterpolate.c                                   *
+*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageInterpolate.c                                   *
+*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageManip.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageManip.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageManip.stderr	(revision 4547)
@@ -0,0 +1,429 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageClip}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageClip
+    psImageClip shall limit the minimum and maximum data value within a psImage structure
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of F64 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of F32 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of S32 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of S16 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of S8 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of U16 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of U8 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of C32 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of C64 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Following should be an error (max<min)
+<DATE><TIME>|<HOST>|E|psImageClip (FILE:LINENO)
+    Specified min value, 256, can not be greater than the specified max value, 128.
+
+---> TESTPOINT PASSED (psImage{psImageClip} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageClipNAN}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageClipNAN
+    psImageClipNaN shall modified pixel values of NaN with a specified value
+<DATE><TIME>|<HOST>|I|testImageClipNAN
+    Following should be an error (invalid type)
+<DATE><TIME>|<HOST>|E|psImageClipNaN (FILE:LINENO)
+    Specified psImage type, psS32, is not supported.
+
+---> TESTPOINT PASSED (psImage{psImageClipNAN} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageClipComplexRegion}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    psImageClipNaN shall modified pixel values of NaN with a specified value
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Testing clipping at 409.6+256i to 682.667+512i for psC32
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Testing clipping at 409.6+256i to 682.667+512i for psC64
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified imaginary-portion of min value, 10, can not be greater than the imaginary-portion of max value, 5.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, -0-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, 0+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, -0-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, 0+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error (invalid type)
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified psImage type, psS32, is not supported.
+
+---> TESTPOINT PASSED (psImage{psImageClipComplexRegion} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageOverlay}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as overlay isn't within image boundaries
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Specified subset range, [32:160,64:320], is invalid or outside input psImage's boundaries, [0:128,0:256].
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as overlay is NULL
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as image input is NULL
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as operator is invalid
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Specified operation, '$', is not supported.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as operator is invalid
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Operation can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as overlay is a different type
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Input overlay psImage type, psS64, must match input psImage type, psF32.
+
+---> TESTPOINT PASSED (psImage{psImageOverlay} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageRebin}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for unsupported type.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified psImage type, psU8, is not supported.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for invallid mask type.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for scale < 0.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified scale value, 0, must be a positive value.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stats null.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stats options 0.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stat options use range.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic option, 8192, is not valid.  Must specify one and only one statistic type.
+<DATE><TIME>|<HOST>|I|testImageRebin
+    Following should be an error for stats with multiple options.
+<DATE><TIME>|<HOST>|E|psImageRebin (FILE:LINENO)
+    Specified statistic option, 2049, is not valid.  Must specify one and only one statistic type.
+
+---> TESTPOINT PASSED (psImage{psImageRebin} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageRoll}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRoll
+    Following should generate an error.
+<DATE><TIME>|<HOST>|E|psImageRoll (FILE:LINENO)
+    Can not operate on a NULL psImage.
+
+---> TESTPOINT PASSED (psImage{psImageRoll} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageRotate}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageWriteSection
+    psImageWriteSection is deprecated.  Consider using psFitsWriteImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|W|psImageReadSection
+    psImageReadSection is deprecated.  Consider using psFitsReadImage instead.
+<DATE><TIME>|<HOST>|I|testImageRotate
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageRotate
+    Following should be an error for invalid interpolation type.
+<DATE><TIME>|<HOST>|E|psImageRotate (FILE:LINENO)
+    Specified interpolation mode, -1, is unsupported.
+
+---> TESTPOINT PASSED (psImage{psImageRotate} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageShift}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,-16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32,16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32,-16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32,16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32,-16.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,16.4.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 0,-16.4.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32.7,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32.7,0.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32.6,16.2.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of 32.6,-16.2.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32.6,16.2.
+<DATE><TIME>|<HOST>|I|testImageShiftCase
+    Testing psImageShift with a 64x128 image for a shift of -32.6,-16.2.
+<DATE><TIME>|<HOST>|I|testImageShift
+    Following should be an error...
+<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageShift
+    Following should be an error for invalid interpolation mode.
+<DATE><TIME>|<HOST>|E|psImageShift (FILE:LINENO)
+    Specified interpolation mode, -1, is unsupported.
+
+---> TESTPOINT PASSED (psImage{psImageShift} | tst_psImageManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageManip.c                                         *
+*            TestPoint: psImage{psImageResample}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Specified scale value, 0, must be a positive value.
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Specified interpolation mode, -1, is unsupported.
+<DATE><TIME>|<HOST>|E|psImageResample (FILE:LINENO)
+    Specified psImage type, psBool, is not supported.
+
+---> TESTPOINT PASSED (psImage{psImageResample} | tst_psImageManip.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImagePixelExtract.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImagePixelExtract.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImagePixelExtract.stderr	(revision 4547)
@@ -0,0 +1,147 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelExtract.c                                  *
+*            TestPoint: psImage{psImageSlice}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified statistic can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified slice direction, 5, is invalid.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:30,20:20], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [301:302,20:30], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:31,201:205], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:301,20:21], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified subset range, [30:31,20:201], is invalid or outside input psImage's boundaries, [0:300,0:200].
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error mask size != image size.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Input psImage mask size, 200x300, does not match psImage input size, 300x200.
+<DATE><TIME>|<HOST>|I|testImageSlice
+    Following should be an error invalid mask type.
+<DATE><TIME>|<HOST>|E|psImageSlice (FILE:LINENO)
+    Input psImage mask type, psS8, is not the supported mask datatype of psU8.
+
+---> TESTPOINT PASSED (psImage{psImageSlice} | tst_psImagePixelExtract.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelExtract.c                                  *
+*            TestPoint: psImage{psImageCut}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (-1.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (300.000000,10.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(-1.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(300.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,-1.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,200.000000)->(240.000000,180.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(240.000000,-1.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    The following should be an error.
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified line, (20.000000,10.000000)->(240.000000,200.000000), does not entirely lie in psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageCut
+    Following should be an error (NULL image).
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageCut
+    Following should be an error (length=0).
+<DATE><TIME>|<HOST>|E|psImageCut (FILE:LINENO)
+    Specified number of samples, 0, must be greater than 1 to make a line.
+
+---> TESTPOINT PASSED (psImage{psImageCut} | tst_psImagePixelExtract.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelExtract.c                                  *
+*            TestPoint: psImage{psImageRadialCut}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified radii vector can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified statistic can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified center, (301,100), is outside of the psImage boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified center, (150,201), is outside of the psImage boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Input psImage mask type, psF32, is not the supported mask datatype of psU8.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Input psImage mask size, 150x100, does not match psImage input size, 300x200.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Input radii vector size, 1, can not be less than 2.
+<DATE><TIME>|<HOST>|I|testImageRadialCut
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageRadialCut (FILE:LINENO)
+    Specified statistic option, 0, is not valid.  Must specify one and only one statistic type.
+
+---> TESTPOINT PASSED (psImage{psImageRadialCut} | tst_psImagePixelExtract.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImagePixelManip.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImagePixelManip.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImagePixelManip.stderr	(revision 4547)
@@ -0,0 +1,146 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelManip.c                                    *
+*            TestPoint: psImage{psImageClip}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageClip
+    psImageClip shall limit the minimum and maximum data value within a psImage structure
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of F64 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of F32 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of S32 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of S16 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of S8 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of U16 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of U8 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of C32 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Testing clipping of C64 imagery
+<DATE><TIME>|<HOST>|I|testImageClip
+    Following should be an error (max<min)
+
+---> TESTPOINT PASSED (psImage{psImageClip} | tst_psImagePixelManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelManip.c                                    *
+*            TestPoint: psImage{psImageClipNAN}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageClipNAN
+    psImageClipNaN shall modified pixel values of NaN with a specified value
+<DATE><TIME>|<HOST>|I|testImageClipNAN
+    Following should be an error (invalid type)
+<DATE><TIME>|<HOST>|E|psImageClipNaN (FILE:LINENO)
+    Specified psImage type, psS32, is not supported.
+
+---> TESTPOINT PASSED (psImage{psImageClipNAN} | tst_psImagePixelManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelManip.c                                    *
+*            TestPoint: psImage{psImageClipComplexRegion}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    psImageClipNaN shall modified pixel values of NaN with a specified value
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Testing clipping at 409.6+256i to 682.667+512i for psC32
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Testing clipping at 409.6+256i to 682.667+512i for psC64
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified imaginary-portion of min value, 10, can not be greater than the imaginary-portion of max value, 5.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified real-portion of min value, 10, can not be greater than the real-portion of max value, 5.
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, 1.19209e-07-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmin value, 1.19209e-07+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, -6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, 6.80565e+38+0i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, 1.19209e-07-6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error:
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified vmax value, 1.19209e-07+6.80565e+38i, is not the the range of input psImage's valid pixel values (psC32), i.e. [-3.40282e+38:3.40282e+38].
+<DATE><TIME>|<HOST>|I|testImageClipComplexRegion
+    Following should be an error (invalid type)
+<DATE><TIME>|<HOST>|E|psImageClipComplexRegion (FILE:LINENO)
+    Specified psImage type, psS32, is not supported.
+
+---> TESTPOINT PASSED (psImage{psImageClipComplexRegion} | tst_psImagePixelManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImagePixelManip.c                                    *
+*            TestPoint: psImage{psImageOverlay}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as overlay isn't within image boundaries
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Specified subset range, [32:160,64:320], is invalid or outside input psImage's boundaries, [0:128,0:256].
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as overlay is NULL
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as image input is NULL
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as operator is invalid
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Specified operation, '$', is not supported.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as operator is invalid
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Operation can not be NULL.
+<DATE><TIME>|<HOST>|I|testImageOverlay
+    Following should error as overlay is a different type
+<DATE><TIME>|<HOST>|E|psImageOverlaySection (FILE:LINENO)
+    Input overlay psImage type, psS64, must match input psImage type, psF32.
+
+---> TESTPOINT PASSED (psImage{psImageOverlay} | tst_psImagePixelManip.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageStats.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageStats.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageStats.stderr	(revision 4547)
@@ -0,0 +1,617 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStats.c                                         *
+*            TestPoint: psImage{psImageHistogram}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+*******************************
+* IMAGE SIZE is (1 by 1)
+*******************************
+Bin number 0 bounds: (0.0 - 0.1) data (1.00)
+Bin number 1 bounds: (0.1 - 0.2) data (0.00)
+Bin number 2 bounds: (0.2 - 0.3) data (0.00)
+Bin number 3 bounds: (0.3 - 0.4) data (0.00)
+Bin number 4 bounds: (0.4 - 0.5) data (0.00)
+Bin number 5 bounds: (0.5 - 0.6) data (0.00)
+Bin number 6 bounds: (0.6 - 0.7) data (0.00)
+Bin number 7 bounds: (0.7 - 0.8) data (0.00)
+Bin number 8 bounds: (0.8 - 0.9) data (0.00)
+Bin number 9 bounds: (0.9 - 1.0) data (0.00)
+Bin number 10 bounds: (1.0 - 1.1) data (0.00)
+Bin number 11 bounds: (1.1 - 1.2) data (0.00)
+Bin number 12 bounds: (1.2 - 1.3) data (0.00)
+Bin number 13 bounds: (1.3 - 1.4) data (0.00)
+Bin number 14 bounds: (1.4 - 1.5) data (0.00)
+Bin number 15 bounds: (1.5 - 1.6) data (0.00)
+Bin number 16 bounds: (1.6 - 1.7) data (0.00)
+Bin number 17 bounds: (1.7 - 1.8) data (0.00)
+Bin number 18 bounds: (1.8 - 1.9) data (0.00)
+Bin number 19 bounds: (1.9 - 2.0) data (0.00)
+Bin number 0 bounds: (0.00 - 0.10) data (1.00)
+Bin number 1 bounds: (0.10 - 0.20) data (0.00)
+Bin number 2 bounds: (0.20 - 0.30) data (0.00)
+Bin number 3 bounds: (0.30 - 0.40) data (0.00)
+Bin number 4 bounds: (0.40 - 0.50) data (0.00)
+Bin number 5 bounds: (0.50 - 0.60) data (0.00)
+Bin number 6 bounds: (0.60 - 0.70) data (0.00)
+Bin number 7 bounds: (0.70 - 0.80) data (0.00)
+Bin number 8 bounds: (0.80 - 0.90) data (0.00)
+Bin number 9 bounds: (0.90 - 1.00) data (0.00)
+Bin number 10 bounds: (1.00 - 1.10) data (0.00)
+Bin number 11 bounds: (1.10 - 1.20) data (0.00)
+Bin number 12 bounds: (1.20 - 1.30) data (0.00)
+Bin number 13 bounds: (1.30 - 1.40) data (0.00)
+Bin number 14 bounds: (1.40 - 1.50) data (0.00)
+Bin number 15 bounds: (1.50 - 1.60) data (0.00)
+Bin number 16 bounds: (1.60 - 1.70) data (0.00)
+Bin number 17 bounds: (1.70 - 1.80) data (0.00)
+Bin number 18 bounds: (1.80 - 1.90) data (0.00)
+Bin number 19 bounds: (1.90 - 2.00) data (0.00)
+*******************************
+* IMAGE SIZE is (1 by 32)
+*******************************
+Bin number 0 bounds: (0.0 - 1.7) data (2.00)
+Bin number 1 bounds: (1.7 - 3.3) data (2.00)
+Bin number 2 bounds: (3.3 - 5.0) data (1.00)
+Bin number 3 bounds: (5.0 - 6.6) data (2.00)
+Bin number 4 bounds: (6.6 - 8.2) data (2.00)
+Bin number 5 bounds: (8.2 - 9.9) data (1.00)
+Bin number 6 bounds: (9.9 - 11.6) data (2.00)
+Bin number 7 bounds: (11.6 - 13.2) data (2.00)
+Bin number 8 bounds: (13.2 - 14.9) data (1.00)
+Bin number 9 bounds: (14.9 - 16.5) data (2.00)
+Bin number 10 bounds: (16.5 - 18.2) data (2.00)
+Bin number 11 bounds: (18.2 - 19.8) data (1.00)
+Bin number 12 bounds: (19.8 - 21.5) data (2.00)
+Bin number 13 bounds: (21.5 - 23.1) data (2.00)
+Bin number 14 bounds: (23.1 - 24.8) data (1.00)
+Bin number 15 bounds: (24.8 - 26.4) data (2.00)
+Bin number 16 bounds: (26.4 - 28.1) data (1.00)
+Bin number 17 bounds: (28.1 - 29.7) data (2.00)
+Bin number 18 bounds: (29.7 - 31.4) data (2.00)
+Bin number 19 bounds: (31.4 - 33.0) data (0.00)
+Bin number 0 bounds: (0.00 - 1.65) data (2.00)
+Bin number 1 bounds: (1.65 - 3.30) data (2.00)
+Bin number 2 bounds: (3.30 - 4.95) data (1.00)
+Bin number 3 bounds: (4.95 - 6.60) data (2.00)
+Bin number 4 bounds: (6.60 - 8.25) data (2.00)
+Bin number 5 bounds: (8.25 - 9.90) data (1.00)
+Bin number 6 bounds: (9.90 - 11.55) data (2.00)
+Bin number 7 bounds: (11.55 - 13.20) data (2.00)
+Bin number 8 bounds: (13.20 - 14.85) data (1.00)
+Bin number 9 bounds: (14.85 - 16.50) data (2.00)
+Bin number 10 bounds: (16.50 - 18.15) data (2.00)
+Bin number 11 bounds: (18.15 - 19.80) data (1.00)
+Bin number 12 bounds: (19.80 - 21.45) data (2.00)
+Bin number 13 bounds: (21.45 - 23.10) data (2.00)
+Bin number 14 bounds: (23.10 - 24.75) data (1.00)
+Bin number 15 bounds: (24.75 - 26.40) data (2.00)
+Bin number 16 bounds: (26.40 - 28.05) data (1.00)
+Bin number 17 bounds: (28.05 - 29.70) data (2.00)
+Bin number 18 bounds: (29.70 - 31.35) data (2.00)
+Bin number 19 bounds: (31.35 - 33.00) data (0.00)
+*******************************
+* IMAGE SIZE is (32 by 1)
+*******************************
+Bin number 0 bounds: (0.0 - 1.7) data (2.00)
+Bin number 1 bounds: (1.7 - 3.3) data (2.00)
+Bin number 2 bounds: (3.3 - 5.0) data (1.00)
+Bin number 3 bounds: (5.0 - 6.6) data (2.00)
+Bin number 4 bounds: (6.6 - 8.2) data (2.00)
+Bin number 5 bounds: (8.2 - 9.9) data (1.00)
+Bin number 6 bounds: (9.9 - 11.6) data (2.00)
+Bin number 7 bounds: (11.6 - 13.2) data (2.00)
+Bin number 8 bounds: (13.2 - 14.9) data (1.00)
+Bin number 9 bounds: (14.9 - 16.5) data (2.00)
+Bin number 10 bounds: (16.5 - 18.2) data (2.00)
+Bin number 11 bounds: (18.2 - 19.8) data (1.00)
+Bin number 12 bounds: (19.8 - 21.5) data (2.00)
+Bin number 13 bounds: (21.5 - 23.1) data (2.00)
+Bin number 14 bounds: (23.1 - 24.8) data (1.00)
+Bin number 15 bounds: (24.8 - 26.4) data (2.00)
+Bin number 16 bounds: (26.4 - 28.1) data (1.00)
+Bin number 17 bounds: (28.1 - 29.7) data (2.00)
+Bin number 18 bounds: (29.7 - 31.4) data (2.00)
+Bin number 19 bounds: (31.4 - 33.0) data (0.00)
+Bin number 0 bounds: (0.00 - 1.65) data (2.00)
+Bin number 1 bounds: (1.65 - 3.30) data (2.00)
+Bin number 2 bounds: (3.30 - 4.95) data (1.00)
+Bin number 3 bounds: (4.95 - 6.60) data (2.00)
+Bin number 4 bounds: (6.60 - 8.25) data (2.00)
+Bin number 5 bounds: (8.25 - 9.90) data (1.00)
+Bin number 6 bounds: (9.90 - 11.55) data (2.00)
+Bin number 7 bounds: (11.55 - 13.20) data (2.00)
+Bin number 8 bounds: (13.20 - 14.85) data (1.00)
+Bin number 9 bounds: (14.85 - 16.50) data (2.00)
+Bin number 10 bounds: (16.50 - 18.15) data (2.00)
+Bin number 11 bounds: (18.15 - 19.80) data (1.00)
+Bin number 12 bounds: (19.80 - 21.45) data (2.00)
+Bin number 13 bounds: (21.45 - 23.10) data (2.00)
+Bin number 14 bounds: (23.10 - 24.75) data (1.00)
+Bin number 15 bounds: (24.75 - 26.40) data (2.00)
+Bin number 16 bounds: (26.40 - 28.05) data (1.00)
+Bin number 17 bounds: (28.05 - 29.70) data (2.00)
+Bin number 18 bounds: (29.70 - 31.35) data (2.00)
+Bin number 19 bounds: (31.35 - 33.00) data (0.00)
+*******************************
+* IMAGE SIZE is (32 by 32)
+*******************************
+Bin number 0 bounds: (0.0 - 3.2) data (10.00)
+Bin number 1 bounds: (3.2 - 6.4) data (18.00)
+Bin number 2 bounds: (6.4 - 9.6) data (27.00)
+Bin number 3 bounds: (9.6 - 12.8) data (36.00)
+Bin number 4 bounds: (12.8 - 16.0) data (45.00)
+Bin number 5 bounds: (16.0 - 19.2) data (74.00)
+Bin number 6 bounds: (19.2 - 22.4) data (66.00)
+Bin number 7 bounds: (22.4 - 25.6) data (75.00)
+Bin number 8 bounds: (25.6 - 28.8) data (84.00)
+Bin number 9 bounds: (28.8 - 32.0) data (93.00)
+Bin number 10 bounds: (32.0 - 35.2) data (118.00)
+Bin number 11 bounds: (35.2 - 38.4) data (78.00)
+Bin number 12 bounds: (38.4 - 41.6) data (69.00)
+Bin number 13 bounds: (41.6 - 44.8) data (60.00)
+Bin number 14 bounds: (44.8 - 48.0) data (51.00)
+Bin number 15 bounds: (48.0 - 51.2) data (54.00)
+Bin number 16 bounds: (51.2 - 54.4) data (30.00)
+Bin number 17 bounds: (54.4 - 57.6) data (21.00)
+Bin number 18 bounds: (57.6 - 60.8) data (12.00)
+Bin number 19 bounds: (60.8 - 64.0) data (3.00)
+Bin number 0 bounds: (0.00 - 3.20) data (10.00)
+Bin number 1 bounds: (3.20 - 6.40) data (18.00)
+Bin number 2 bounds: (6.40 - 9.60) data (27.00)
+Bin number 3 bounds: (9.60 - 12.80) data (36.00)
+Bin number 4 bounds: (12.80 - 16.00) data (45.00)
+Bin number 5 bounds: (16.00 - 19.20) data (74.00)
+Bin number 6 bounds: (19.20 - 22.40) data (66.00)
+Bin number 7 bounds: (22.40 - 25.60) data (75.00)
+Bin number 8 bounds: (25.60 - 28.80) data (84.00)
+Bin number 9 bounds: (28.80 - 32.00) data (93.00)
+Bin number 10 bounds: (32.00 - 35.20) data (115.00)
+Bin number 11 bounds: (35.20 - 38.40) data (66.00)
+Bin number 12 bounds: (38.40 - 41.60) data (48.00)
+Bin number 13 bounds: (41.60 - 44.80) data (30.00)
+Bin number 14 bounds: (44.80 - 48.00) data (12.00)
+Bin number 15 bounds: (48.00 - 51.20) data (0.00)
+Bin number 16 bounds: (51.20 - 54.40) data (0.00)
+Bin number 17 bounds: (54.40 - 57.60) data (0.00)
+Bin number 18 bounds: (57.60 - 60.80) data (0.00)
+Bin number 19 bounds: (60.80 - 64.00) data (0.00)
+*******************************
+* IMAGE SIZE is (32 by 64)
+*******************************
+Bin number 0 bounds: (0.0 - 4.8) data (15.00)
+Bin number 1 bounds: (4.8 - 9.6) data (40.00)
+Bin number 2 bounds: (9.6 - 14.4) data (65.00)
+Bin number 3 bounds: (14.4 - 19.2) data (90.00)
+Bin number 4 bounds: (19.2 - 24.0) data (90.00)
+Bin number 5 bounds: (24.0 - 28.8) data (135.00)
+Bin number 6 bounds: (28.8 - 33.6) data (157.00)
+Bin number 7 bounds: (33.6 - 38.4) data (160.00)
+Bin number 8 bounds: (38.4 - 43.2) data (160.00)
+Bin number 9 bounds: (43.2 - 48.0) data (128.00)
+Bin number 10 bounds: (48.0 - 52.8) data (160.00)
+Bin number 11 bounds: (52.8 - 57.6) data (160.00)
+Bin number 12 bounds: (57.6 - 62.4) data (160.00)
+Bin number 13 bounds: (62.4 - 67.2) data (150.00)
+Bin number 14 bounds: (67.2 - 72.0) data (102.00)
+Bin number 15 bounds: (72.0 - 76.8) data (105.00)
+Bin number 16 bounds: (76.8 - 81.6) data (80.00)
+Bin number 17 bounds: (81.6 - 86.4) data (55.00)
+Bin number 18 bounds: (86.4 - 91.2) data (30.00)
+Bin number 19 bounds: (91.2 - 96.0) data (6.00)
+Bin number 0 bounds: (0.00 - 4.80) data (15.00)
+Bin number 1 bounds: (4.80 - 9.60) data (40.00)
+Bin number 2 bounds: (9.60 - 14.40) data (65.00)
+Bin number 3 bounds: (14.40 - 19.20) data (90.00)
+Bin number 4 bounds: (19.20 - 24.00) data (90.00)
+Bin number 5 bounds: (24.00 - 28.80) data (135.00)
+Bin number 6 bounds: (28.80 - 33.60) data (157.00)
+Bin number 7 bounds: (33.60 - 38.40) data (160.00)
+Bin number 8 bounds: (38.40 - 43.20) data (160.00)
+Bin number 9 bounds: (43.20 - 48.00) data (128.00)
+Bin number 10 bounds: (48.00 - 52.80) data (154.00)
+Bin number 11 bounds: (52.80 - 57.60) data (130.00)
+Bin number 12 bounds: (57.60 - 62.40) data (105.00)
+Bin number 13 bounds: (62.40 - 67.20) data (76.00)
+Bin number 14 bounds: (67.20 - 72.00) data (42.00)
+Bin number 15 bounds: (72.00 - 76.80) data (30.00)
+Bin number 16 bounds: (76.80 - 81.60) data (6.00)
+Bin number 17 bounds: (81.60 - 86.40) data (0.00)
+Bin number 18 bounds: (86.40 - 91.20) data (0.00)
+Bin number 19 bounds: (91.20 - 96.00) data (0.00)
+*******************************
+* IMAGE SIZE is (64 by 32)
+*******************************
+Bin number 0 bounds: (0.0 - 4.8) data (15.00)
+Bin number 1 bounds: (4.8 - 9.6) data (40.00)
+Bin number 2 bounds: (9.6 - 14.4) data (65.00)
+Bin number 3 bounds: (14.4 - 19.2) data (90.00)
+Bin number 4 bounds: (19.2 - 24.0) data (90.00)
+Bin number 5 bounds: (24.0 - 28.8) data (135.00)
+Bin number 6 bounds: (28.8 - 33.6) data (157.00)
+Bin number 7 bounds: (33.6 - 38.4) data (160.00)
+Bin number 8 bounds: (38.4 - 43.2) data (160.00)
+Bin number 9 bounds: (43.2 - 48.0) data (128.00)
+Bin number 10 bounds: (48.0 - 52.8) data (160.00)
+Bin number 11 bounds: (52.8 - 57.6) data (160.00)
+Bin number 12 bounds: (57.6 - 62.4) data (160.00)
+Bin number 13 bounds: (62.4 - 67.2) data (150.00)
+Bin number 14 bounds: (67.2 - 72.0) data (102.00)
+Bin number 15 bounds: (72.0 - 76.8) data (105.00)
+Bin number 16 bounds: (76.8 - 81.6) data (80.00)
+Bin number 17 bounds: (81.6 - 86.4) data (55.00)
+Bin number 18 bounds: (86.4 - 91.2) data (30.00)
+Bin number 19 bounds: (91.2 - 96.0) data (6.00)
+Bin number 0 bounds: (0.00 - 4.80) data (15.00)
+Bin number 1 bounds: (4.80 - 9.60) data (40.00)
+Bin number 2 bounds: (9.60 - 14.40) data (65.00)
+Bin number 3 bounds: (14.40 - 19.20) data (90.00)
+Bin number 4 bounds: (19.20 - 24.00) data (90.00)
+Bin number 5 bounds: (24.00 - 28.80) data (135.00)
+Bin number 6 bounds: (28.80 - 33.60) data (157.00)
+Bin number 7 bounds: (33.60 - 38.40) data (160.00)
+Bin number 8 bounds: (38.40 - 43.20) data (160.00)
+Bin number 9 bounds: (43.20 - 48.00) data (128.00)
+Bin number 10 bounds: (48.00 - 52.80) data (154.00)
+Bin number 11 bounds: (52.80 - 57.60) data (130.00)
+Bin number 12 bounds: (57.60 - 62.40) data (105.00)
+Bin number 13 bounds: (62.40 - 67.20) data (76.00)
+Bin number 14 bounds: (67.20 - 72.00) data (42.00)
+Bin number 15 bounds: (72.00 - 76.80) data (30.00)
+Bin number 16 bounds: (76.80 - 81.60) data (6.00)
+Bin number 17 bounds: (81.60 - 86.40) data (0.00)
+Bin number 18 bounds: (86.40 - 91.20) data (0.00)
+Bin number 19 bounds: (91.20 - 96.00) data (0.00)
+*******************************
+* IMAGE SUBSET SIZE is (64 by 32)
+*******************************
+Bin number 0 bounds: (0.0 - 4.8) data (15.00)
+Bin number 1 bounds: (4.8 - 9.6) data (40.00)
+Bin number 2 bounds: (9.6 - 14.4) data (65.00)
+Bin number 3 bounds: (14.4 - 19.2) data (90.00)
+Bin number 4 bounds: (19.2 - 24.0) data (90.00)
+Bin number 5 bounds: (24.0 - 28.8) data (135.00)
+Bin number 6 bounds: (28.8 - 33.6) data (157.00)
+Bin number 7 bounds: (33.6 - 38.4) data (160.00)
+Bin number 8 bounds: (38.4 - 43.2) data (160.00)
+Bin number 9 bounds: (43.2 - 48.0) data (128.00)
+Bin number 10 bounds: (48.0 - 52.8) data (160.00)
+Bin number 11 bounds: (52.8 - 57.6) data (160.00)
+Bin number 12 bounds: (57.6 - 62.4) data (160.00)
+Bin number 13 bounds: (62.4 - 67.2) data (150.00)
+Bin number 14 bounds: (67.2 - 72.0) data (102.00)
+Bin number 15 bounds: (72.0 - 76.8) data (105.00)
+Bin number 16 bounds: (76.8 - 81.6) data (80.00)
+Bin number 17 bounds: (81.6 - 86.4) data (55.00)
+Bin number 18 bounds: (86.4 - 91.2) data (30.00)
+Bin number 19 bounds: (91.2 - 96.0) data (6.00)
+Bin number 0 bounds: (0.00 - 4.80) data (15.00)
+Bin number 1 bounds: (4.80 - 9.60) data (40.00)
+Bin number 2 bounds: (9.60 - 14.40) data (65.00)
+Bin number 3 bounds: (14.40 - 19.20) data (90.00)
+Bin number 4 bounds: (19.20 - 24.00) data (90.00)
+Bin number 5 bounds: (24.00 - 28.80) data (135.00)
+Bin number 6 bounds: (28.80 - 33.60) data (157.00)
+Bin number 7 bounds: (33.60 - 38.40) data (160.00)
+Bin number 8 bounds: (38.40 - 43.20) data (160.00)
+Bin number 9 bounds: (43.20 - 48.00) data (128.00)
+Bin number 10 bounds: (48.00 - 52.80) data (154.00)
+Bin number 11 bounds: (52.80 - 57.60) data (130.00)
+Bin number 12 bounds: (57.60 - 62.40) data (105.00)
+Bin number 13 bounds: (62.40 - 67.20) data (76.00)
+Bin number 14 bounds: (67.20 - 72.00) data (42.00)
+Bin number 15 bounds: (72.00 - 76.80) data (30.00)
+Bin number 16 bounds: (76.80 - 81.60) data (6.00)
+Bin number 17 bounds: (81.60 - 86.40) data (0.00)
+Bin number 18 bounds: (86.40 - 91.20) data (0.00)
+Bin number 19 bounds: (91.20 - 96.00) data (0.00)
+<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
+    Unallowable operation: out is NULL.
+<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
+    Unallowable operation: in is NULL.
+<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
+    Unallowable operation: out is NULL.
+<DATE><TIME>|<HOST>|I|testPsImageHistogram
+    Following should be an error for invalid mask type.
+<DATE><TIME>|<HOST>|E|psImageHistogram (FILE:LINENO)
+    Unallowable operation: psImage mask has incorrect type.
+
+---> TESTPOINT PASSED (psImage{psImageHistogram} | tst_psImageStats.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStats.c                                         *
+*            TestPoint: psImage{psImageStats}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+*******************************
+* IMAGE SIZE is (1 by 1)
+*******************************
+The sample mean was 0.00
+The sample mean was 0.00
+*******************************
+* IMAGE SIZE is (1 by 32)
+*******************************
+The sample mean was 15.50
+The sample mean was 15.50
+*******************************
+* IMAGE SIZE is (32 by 1)
+*******************************
+The sample mean was 15.50
+The sample mean was 15.50
+*******************************
+* IMAGE SIZE is (32 by 32)
+*******************************
+The sample mean was 31.00
+The sample mean was 26.21
+*******************************
+* IMAGE SIZE is (32 by 64)
+*******************************
+The sample mean was 47.00
+The sample mean was 39.66
+*******************************
+* IMAGE SIZE is (64 by 32)
+*******************************
+The sample mean was 47.00
+The sample mean was 39.66
+*******************************
+* IMAGE SUBSET SIZE is (64 by 32)
+*******************************
+The sample mean was 47.00
+The sample mean was 39.66
+<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
+    Error: stats->options is 0.
+<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
+    Unallowable operation: stats is NULL.
+<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
+    Error: stats->options is 0.
+<DATE><TIME>|<HOST>|E|psImageStats (FILE:LINENO)
+    Unallowable operation: psImage mask has incorrect type.
+
+---> TESTPOINT PASSED (psImage{psImageStats} | tst_psImageStats.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStats.c                                         *
+*            TestPoint: psImage{psImageFitPolynomial}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Cheby Polynomial (0, 0) coefficient is 189.00
+Cheby Polynomial (0, 1) coefficient is 25.94
+Cheby Polynomial (0, 2) coefficient is 0.00
+Cheby Polynomial (0, 3) coefficient is 2.88
+Cheby Polynomial (0, 4) coefficient is 0.00
+Cheby Polynomial (0, 5) coefficient is 1.04
+Cheby Polynomial (0, 6) coefficient is 0.00
+Cheby Polynomial (0, 7) coefficient is 0.53
+Cheby Polynomial (1, 0) coefficient is 129.68
+Cheby Polynomial (1, 1) coefficient is 0.00
+Cheby Polynomial (1, 2) coefficient is 0.00
+Cheby Polynomial (1, 3) coefficient is 0.00
+Cheby Polynomial (1, 4) coefficient is 0.00
+Cheby Polynomial (1, 5) coefficient is 0.00
+Cheby Polynomial (1, 6) coefficient is 0.00
+Cheby Polynomial (1, 7) coefficient is 0.00
+Cheby Polynomial (2, 0) coefficient is 0.00
+Cheby Polynomial (2, 1) coefficient is 0.00
+Cheby Polynomial (2, 2) coefficient is 0.00
+Cheby Polynomial (2, 3) coefficient is 0.00
+Cheby Polynomial (2, 4) coefficient is 0.00
+Cheby Polynomial (2, 5) coefficient is 0.00
+Cheby Polynomial (2, 6) coefficient is 0.00
+Cheby Polynomial (2, 7) coefficient is 0.00
+Cheby Polynomial (3, 0) coefficient is 14.40
+Cheby Polynomial (3, 1) coefficient is 0.00
+Cheby Polynomial (3, 2) coefficient is 0.00
+Cheby Polynomial (3, 3) coefficient is 0.00
+Cheby Polynomial (3, 4) coefficient is 0.00
+Cheby Polynomial (3, 5) coefficient is 0.00
+Cheby Polynomial (3, 6) coefficient is 0.00
+Cheby Polynomial (3, 7) coefficient is 0.00
+Cheby Polynomial (4, 0) coefficient is 0.00
+Cheby Polynomial (4, 1) coefficient is 0.00
+Cheby Polynomial (4, 2) coefficient is 0.00
+Cheby Polynomial (4, 3) coefficient is 0.00
+Cheby Polynomial (4, 4) coefficient is 0.00
+Cheby Polynomial (4, 5) coefficient is 0.00
+Cheby Polynomial (4, 6) coefficient is 0.00
+Cheby Polynomial (4, 7) coefficient is 0.00
+Cheby Polynomial (5, 0) coefficient is 5.17
+Cheby Polynomial (5, 1) coefficient is 0.00
+Cheby Polynomial (5, 2) coefficient is 0.00
+Cheby Polynomial (5, 3) coefficient is 0.00
+Cheby Polynomial (5, 4) coefficient is 0.00
+Cheby Polynomial (5, 5) coefficient is 0.00
+Cheby Polynomial (5, 6) coefficient is 0.00
+Cheby Polynomial (5, 7) coefficient is 0.00
+Cheby Polynomial (6, 0) coefficient is 0.00
+Cheby Polynomial (6, 1) coefficient is 0.00
+Cheby Polynomial (6, 2) coefficient is 0.00
+Cheby Polynomial (6, 3) coefficient is 0.00
+Cheby Polynomial (6, 4) coefficient is 0.00
+Cheby Polynomial (6, 5) coefficient is 0.00
+Cheby Polynomial (6, 6) coefficient is 0.00
+Cheby Polynomial (6, 7) coefficient is 0.00
+Cheby Polynomial (7, 0) coefficient is 2.63
+Cheby Polynomial (7, 1) coefficient is 0.00
+Cheby Polynomial (7, 2) coefficient is 0.00
+Cheby Polynomial (7, 3) coefficient is 0.00
+Cheby Polynomial (7, 4) coefficient is 0.00
+Cheby Polynomial (7, 5) coefficient is 0.00
+Cheby Polynomial (7, 6) coefficient is 0.00
+Cheby Polynomial (7, 7) coefficient is 0.00
+<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
+    Following should be an error message for NULL coeffs argument.
+<DATE><TIME>|<HOST>|E|psImageFitPolynomial (FILE:LINENO)
+    Unallowable operation: polynomial coeffs or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
+    Following should be a error message for NULL input argument.
+<DATE><TIME>|<HOST>|E|psImageFitPolynomial (FILE:LINENO)
+    Unallowable operation: psImage input or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
+    Following should be an error message for NULL coeffs argument.
+<DATE><TIME>|<HOST>|E|psImageEvalPolynomial (FILE:LINENO)
+    Unallowable operation: polynomial coeffs or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testPsImageFitPolynomial
+    Following should be a error message for NULL input argument.
+<DATE><TIME>|<HOST>|E|psImageEvalPolynomial (FILE:LINENO)
+    Unallowable operation: psImage input or its data is NULL.
+
+---> TESTPOINT PASSED (psImage{psImageFitPolynomial} | tst_psImageStats.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStats.c                                         *
+*            TestPoint: psImage{psImagePixelInterpolate}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 
+1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 
+2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 
+3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 
+4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 
+5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 
+6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 
+7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 
+8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 
+9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 
+0.0 0.7 1.7 2.7 3.7 4.7 5.7 6.7 7.7 
+0.7 1.4 2.4 3.4 4.4 5.4 6.4 7.4 8.4 
+1.7 2.4 3.4 4.4 5.4 6.4 7.4 8.4 9.4 
+2.7 3.4 4.4 5.4 6.4 7.4 8.4 9.4 10.4 
+3.7 4.4 5.4 6.4 7.4 8.4 9.4 10.4 11.4 
+4.7 5.4 6.4 7.4 8.4 9.4 10.4 11.4 12.4 
+5.7 6.4 7.4 8.4 9.4 10.4 11.4 12.4 13.4 
+6.7 7.4 8.4 9.4 10.4 11.4 12.4 13.4 14.4 
+7.7 8.4 9.4 10.4 11.4 12.4 13.4 14.4 15.4 
+image[0.2][0.2] is interpolated at 0.0
+image[0.2][1.2] is interpolated at 0.7
+image[0.2][2.2] is interpolated at 1.7
+image[0.2][3.2] is interpolated at 2.7
+image[0.2][4.2] is interpolated at 3.7
+image[0.2][5.2] is interpolated at 4.7
+image[0.2][6.2] is interpolated at 5.7
+image[0.2][7.2] is interpolated at 6.7
+image[0.2][8.2] is interpolated at 7.7
+image[1.2][0.2] is interpolated at 0.7
+image[1.2][1.2] is interpolated at 1.4
+image[1.2][2.2] is interpolated at 2.4
+image[1.2][3.2] is interpolated at 3.4
+image[1.2][4.2] is interpolated at 4.4
+image[1.2][5.2] is interpolated at 5.4
+image[1.2][6.2] is interpolated at 6.4
+image[1.2][7.2] is interpolated at 7.4
+image[1.2][8.2] is interpolated at 8.4
+image[2.2][0.2] is interpolated at 1.7
+image[2.2][1.2] is interpolated at 2.4
+image[2.2][2.2] is interpolated at 3.4
+image[2.2][3.2] is interpolated at 4.4
+image[2.2][4.2] is interpolated at 5.4
+image[2.2][5.2] is interpolated at 6.4
+image[2.2][6.2] is interpolated at 7.4
+image[2.2][7.2] is interpolated at 8.4
+image[2.2][8.2] is interpolated at 9.4
+image[3.2][0.2] is interpolated at 2.7
+image[3.2][1.2] is interpolated at 3.4
+image[3.2][2.2] is interpolated at 4.4
+image[3.2][3.2] is interpolated at 5.4
+image[3.2][4.2] is interpolated at 6.4
+image[3.2][5.2] is interpolated at 7.4
+image[3.2][6.2] is interpolated at 8.4
+image[3.2][7.2] is interpolated at 9.4
+image[3.2][8.2] is interpolated at 10.4
+image[4.2][0.2] is interpolated at 3.7
+image[4.2][1.2] is interpolated at 4.4
+image[4.2][2.2] is interpolated at 5.4
+image[4.2][3.2] is interpolated at 6.4
+image[4.2][4.2] is interpolated at 7.4
+image[4.2][5.2] is interpolated at 8.4
+image[4.2][6.2] is interpolated at 9.4
+image[4.2][7.2] is interpolated at 10.4
+image[4.2][8.2] is interpolated at 11.4
+image[5.2][0.2] is interpolated at 4.7
+image[5.2][1.2] is interpolated at 5.4
+image[5.2][2.2] is interpolated at 6.4
+image[5.2][3.2] is interpolated at 7.4
+image[5.2][4.2] is interpolated at 8.4
+image[5.2][5.2] is interpolated at 9.4
+image[5.2][6.2] is interpolated at 10.4
+image[5.2][7.2] is interpolated at 11.4
+image[5.2][8.2] is interpolated at 12.4
+image[6.2][0.2] is interpolated at 5.7
+image[6.2][1.2] is interpolated at 6.4
+image[6.2][2.2] is interpolated at 7.4
+image[6.2][3.2] is interpolated at 8.4
+image[6.2][4.2] is interpolated at 9.4
+image[6.2][5.2] is interpolated at 10.4
+image[6.2][6.2] is interpolated at 11.4
+image[6.2][7.2] is interpolated at 12.4
+image[6.2][8.2] is interpolated at 13.4
+image[7.2][0.2] is interpolated at 6.7
+image[7.2][1.2] is interpolated at 7.4
+image[7.2][2.2] is interpolated at 8.4
+image[7.2][3.2] is interpolated at 9.4
+image[7.2][4.2] is interpolated at 10.4
+image[7.2][5.2] is interpolated at 11.4
+image[7.2][6.2] is interpolated at 12.4
+image[7.2][7.2] is interpolated at 13.4
+image[7.2][8.2] is interpolated at 14.4
+image[8.2][0.2] is interpolated at 7.7
+image[8.2][1.2] is interpolated at 8.4
+image[8.2][2.2] is interpolated at 9.4
+image[8.2][3.2] is interpolated at 10.4
+image[8.2][4.2] is interpolated at 11.4
+image[8.2][5.2] is interpolated at 12.4
+image[8.2][6.2] is interpolated at 13.4
+image[8.2][7.2] is interpolated at 14.4
+image[8.2][8.2] is interpolated at 15.4
+
+---> TESTPOINT PASSED (psImage{psImagePixelInterpolate} | tst_psImageStats.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStats.c                                         *
+*            TestPoint: psImage{psImageEvalPolynom()}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psImageFitPolynomial(), psImageEvalPolynom(): (1 by 1)
+pixel [0][0] is 25.00 should be 1.00
+The chi-squared per pixel is 576.00
+psImageFitPolynomial(), psImageEvalPolynom(): (5 by 1)
+pixel [0][0] is 5.00 should be 1.00
+pixel [1][0] is 40.00 should be 8.00
+pixel [2][0] is 125.00 should be 25.00
+pixel [3][0] is 260.00 should be 52.00
+pixel [4][0] is 445.00 should be 89.00
+The chi-squared per pixel is 36208.00
+psImageFitPolynomial(), psImageEvalPolynom(): (1 by 5)
+pixel [0][0] is 5.00 should be 1.00
+pixel [0][1] is 50.00 should be 10.00
+pixel [0][2] is 155.00 should be 31.00
+pixel [0][3] is 320.00 should be 64.00
+pixel [0][4] is 545.00 should be 109.00
+The chi-squared per pixel is 54524.80
+psImageFitPolynomial(), psImageEvalPolynom(): (5 by 5)
+The chi-squared per pixel is 0.00
+psImageFitPolynomial(), psImageEvalPolynom(): (1 by 1)
+pixel [0][0] is 25.00 should be 1.00
+The chi-squared per pixel is 576.00
+psImageFitPolynomial(), psImageEvalPolynom(): (5 by 1)
+pixel [0][0] is 5.00 should be 1.00
+pixel [1][0] is 40.00 should be 8.00
+pixel [2][0] is 125.00 should be 25.00
+pixel [3][0] is 260.00 should be 52.00
+pixel [4][0] is 445.00 should be 89.00
+The chi-squared per pixel is 36208.00
+psImageFitPolynomial(), psImageEvalPolynom(): (1 by 5)
+pixel [0][0] is 5.00 should be 1.00
+pixel [0][1] is 50.00 should be 10.00
+pixel [0][2] is 155.00 should be 31.00
+pixel [0][3] is 320.00 should be 64.00
+pixel [0][4] is 545.00 should be 109.00
+The chi-squared per pixel is 54524.81
+psImageFitPolynomial(), psImageEvalPolynom(): (5 by 5)
+The chi-squared per pixel is 0.00
+
+---> TESTPOINT PASSED (psImage{psImageEvalPolynom()} | tst_psImageStats.c)
+
Index: /trunk/psLib/test/imageops/verified/tst_psImageStructManip.stderr
===================================================================
--- /trunk/psLib/test/imageops/verified/tst_psImageStructManip.stderr	(revision 4547)
+++ /trunk/psLib/test/imageops/verified/tst_psImageStructManip.stderr	(revision 4547)
@@ -0,0 +1,125 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStructManip.c                                   *
+*            TestPoint: psImage{psImageSubset}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure members nrow and ncol are equal to the input parameter nrow and ncol respectively.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure contains expected values in the row member, if the input psImage structure image contains known values.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure member type is equal to the input psImage structure member type.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure members row0 and col0 are equal to the input parameters row0 and col0 respectively.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure member parent is equal to the input psImage structure pointer image.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure member children is null.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the input psImage structure image only has the following members changed: 1) Nchildren is increased by one. 2) parent contains pointer psImage structure out at parent[Nchildren-1].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameter image is null. Also verified the input psImage structure is not modified.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program  execution doesn't stop, if the input parameters nrow and/or ncol are zero. Also verify input psImage structure is not modified.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,128:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [64:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program execution doesn't stop, if the input parameters row0 and col0 are not within the range of values of psImage structure image.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,0:511], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:255,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [-1:63,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,-1:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    Verify the returned psImage structure pointer is null and program execution doesn't stop if the input parameters nrow, ncol, row0 and col0 specify a range of data not within the input psImage structure image.  Also verify the input psImage structure is not modified.
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:63,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:128,0:127], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    An error should follow...
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [0:128,0:256], is invalid or outside input psImage's boundaries, [0:127,0:255].
+<DATE><TIME>|<HOST>|I|testImageSubset
+    psImageFreeChildren shall deallocate any children images of a psImage structure
+
+---> TESTPOINT PASSED (psImage{psImageSubset} | tst_psImageStructManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStructManip.c                                   *
+*            TestPoint: psImage{psImageCopy}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psU8
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psU16
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psU32
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psS8
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psS16
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psS32
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psF32
+<DATE><TIME>|<HOST>|I|testImageCopy
+    Image Copy Test for psF64
+<DATE><TIME>|<HOST>|I|testImageCopy
+    An error should follow...
+<DATE><TIME>|<HOST>|E|psImageCopy (FILE:LINENO)
+    Can not operate on a NULL psImage.
+
+---> TESTPOINT PASSED (psImage{psImageCopy} | tst_psImageStructManip.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageStructManip.c                                   *
+*            TestPoint: psImage{psImageTrim}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Can not operate on a NULL psImage.
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [-1:299,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:299,-1:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:300,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:299,0:200], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:-1,0:199], is invalid or outside input psImage's boundaries, [0:299,0:199].
+<DATE><TIME>|<HOST>|E|psImageTrim (FILE:LINENO)
+    Specified subset range, [0:299,0:-1], is invalid or outside input psImage's boundaries, [0:299,0:199].
+
+---> TESTPOINT PASSED (psImage{psImageTrim} | tst_psImageStructManip.c)
+
Index: /trunk/psLib/test/math/Makefile.am
===================================================================
--- /trunk/psLib/test/math/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/math/Makefile.am	(revision 4547)
@@ -0,0 +1,116 @@
+#Makefile for math tests of psLib
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psFunc00 \
+	tst_psFunc01 \
+	tst_psFunc02 \
+	tst_psFunc03 \
+	tst_psFunc04 \
+	tst_psFunc05 \
+	tst_psFunc07 \
+	tst_psFunc08 \
+	tst_psFunc09 \
+	tst_psFunc10 \
+	tst_psFunc11 \
+	tst_psHist00 \
+	tst_psHist01 \
+	tst_psHist02 \
+	tst_psHist03 \
+	tst_psMatrix01 \
+	tst_psMatrix02 \
+	tst_psMatrix03 \
+	tst_psMatrix04 \
+	tst_psMatrix05 \
+	tst_psMatrix06 \
+	tst_psMatrix07 \
+	tst_psMatrixVectorArithmetic01 \
+	tst_psMatrixVectorArithmetic02 \
+	tst_psMatrixVectorArithmetic03 \
+	tst_psMatrixVectorArithmetic04 \
+	tst_psMinimize00 \
+	tst_psMinimize01 \
+	tst_psMinimize02 \
+	tst_psMinimize03 \
+	tst_psMinimize04 \
+	tst_psMinimize04_F32 \
+	tst_psMinimize04b \
+	tst_psMinimize04b_F32 \
+	tst_psMinimize05 \
+	tst_psMinimize06 \
+	tst_psMinimize07 \
+	tst_psStats00 \
+	tst_psStats01 \
+	tst_psStats02 \
+	tst_psStats03 \
+	tst_psStats04 \
+	tst_psStats05 \
+	tst_psStats06 \
+	tst_psStats07 \
+	tst_psStats08 \
+	tst_psStats09 \
+	tst_psRandom
+
+tst_psFunc00_SOURCES =  tst_psFunc00.c
+tst_psFunc01_SOURCES =  tst_psFunc01.c
+tst_psFunc02_SOURCES =  tst_psFunc02.c
+tst_psFunc03_SOURCES =  tst_psFunc03.c
+tst_psFunc04_SOURCES =  tst_psFunc04.c
+tst_psFunc05_SOURCES =  tst_psFunc05.c
+tst_psFunc07_SOURCES =  tst_psFunc07.c
+tst_psFunc08_SOURCES =  tst_psFunc08.c
+tst_psFunc09_SOURCES =  tst_psFunc09.c
+tst_psFunc10_SOURCES =  tst_psFunc10.c
+tst_psFunc11_SOURCES =  tst_psFunc11.c
+tst_psHist00_SOURCES =  tst_psHist00.c
+tst_psHist01_SOURCES =  tst_psHist01.c
+tst_psHist02_SOURCES =  tst_psHist02.c
+tst_psHist03_SOURCES =  tst_psHist03.c
+tst_psMatrix01_SOURCES =  tst_psMatrix01.c
+tst_psMatrix02_SOURCES =  tst_psMatrix02.c
+tst_psMatrix03_SOURCES =  tst_psMatrix03.c
+tst_psMatrix04_SOURCES =  tst_psMatrix04.c
+tst_psMatrix05_SOURCES =  tst_psMatrix05.c
+tst_psMatrix06_SOURCES =  tst_psMatrix06.c
+tst_psMatrix07_SOURCES =  tst_psMatrix07.c
+tst_psMatrixVectorArithmetic01_SOURCES =  tst_psMatrixVectorArithmetic01.c
+tst_psMatrixVectorArithmetic02_SOURCES =  tst_psMatrixVectorArithmetic02.c
+tst_psMatrixVectorArithmetic03_SOURCES =  tst_psMatrixVectorArithmetic03.c
+tst_psMatrixVectorArithmetic04_SOURCES =  tst_psMatrixVectorArithmetic04.c
+tst_psMinimize00_SOURCES =  tst_psMinimize00.c
+tst_psMinimize01_SOURCES =  tst_psMinimize01.c
+tst_psMinimize02_SOURCES =  tst_psMinimize02.c
+tst_psMinimize03_SOURCES =  tst_psMinimize03.c
+tst_psMinimize04_SOURCES =  tst_psMinimize04.c
+tst_psMinimize04_F32_SOURCES =  tst_psMinimize04.c
+tst_psMinimize04b_SOURCES =  tst_psMinimize04b.c
+tst_psMinimize04b_F32_SOURCES =  tst_psMinimize04b.c
+tst_psMinimize05_SOURCES =  tst_psMinimize05.c
+tst_psMinimize06_SOURCES =  tst_psMinimize06.c
+tst_psMinimize07_SOURCES =  tst_psMinimize07.c
+tst_psStats00_SOURCES =  tst_psStats00.c
+tst_psStats01_SOURCES =  tst_psStats01.c
+tst_psStats02_SOURCES =  tst_psStats02.c
+tst_psStats03_SOURCES =  tst_psStats03.c
+tst_psStats04_SOURCES =  tst_psStats04.c
+tst_psStats05_SOURCES =  tst_psStats05.c
+tst_psStats06_SOURCES =  tst_psStats06.c
+tst_psStats07_SOURCES =  tst_psStats07.c
+tst_psStats08_SOURCES =  tst_psStats08.c
+tst_psStats09_SOURCES =  tst_psStats09.c
+tst_psRandom_SOURCES =  tst_psRandom.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA)
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
Index: /trunk/psLib/test/math/tst_psFunc00.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc00.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc00.c	(revision 4547)
@@ -0,0 +1,642 @@
+/** tst_Func00.c
+*
+*    This routine must ensure that the psPolynomial structures are
+*    allocated and deallocated by the psPolynomialXXXlloc() procedures.
+*    It also calls the various psPolynomialXXXEval() procedures.
+* 
+*    The F32 and F64 polynomials are tested for all orders (1 - 4) and for
+*    both ordinary and chebyshev polynomials.
+* 
+*    NOTE: This test code requries the stdout file to verify that the results
+*    are good.
+* 
+*    XXX: Modify these tests so that polynomials with a variety of different
+*    orders are created.
+* 
+*    @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*    @date $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*   
+*****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+// Defines
+#define ORDER    3
+
+static psS32 testPolynomial1DAlloc(void);
+static psS32 testPolynomial2DAlloc(void);
+static psS32 testPolynomial3DAlloc(void);
+static psS32 testPolynomial4DAlloc(void);
+static psS32 testDPolynomial1DAlloc(void);
+static psS32 testDPolynomial2DAlloc(void);
+static psS32 testDPolynomial3DAlloc(void);
+static psS32 testDPolynomial4DAlloc(void);
+
+testDescription tests[] = {
+                              {testPolynomial1DAlloc,578,"psPolynomial1DAlloc",0,false},
+                              {testPolynomial2DAlloc,578,"psPolynomial2DAlloc",0,false},
+                              {testPolynomial3DAlloc,578,"psPolynomial3DAlloc",0,false},
+                              {testPolynomial4DAlloc,578,"psPolynomial4DAlloc",0,false},
+                              {testDPolynomial1DAlloc,579,"psDPolynomial1DAlloc",0,false},
+                              {testDPolynomial2DAlloc,579,"psDPolynomial2DAlloc",0,false},
+                              {testDPolynomial3DAlloc,579,"psDPolynomial3DAlloc",0,false},
+                              {testDPolynomial4DAlloc,579,"psDPolynomial4DAlloc",0,false},
+                              {NULL}
+                          };
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return !runTestSuite(stderr,"psPolynomialXD", tests, argc, argv);
+}
+
+
+// This test will allocate a 1D polynomial and verify the structure allocated
+psS32 testPolynomial1DAlloc(void)
+{
+    psPolynomial1D*  my1DPoly  = NULL;
+
+    // Allocate polynomial
+    my1DPoly = psPolynomial1DAlloc(ORDER,PS_POLYNOMIAL_ORD);
+    // Verify structure allocated
+    if(my1DPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my1DPoly->n != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my1DPoly->n, ORDER);
+        return 2;
+    }
+    if(my1DPoly->type != PS_POLYNOMIAL_ORD) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my1DPoly->type, PS_POLYNOMIAL_ORD);
+        return 3;
+    }
+    for(psS32 i = 0; i < ORDER; i++) {
+        if(my1DPoly->coeff[i] != 0.0) {
+            psError(PS_ERR_UNKNOWN,true,"Coeff[%d] %lg not as expected %lg",
+                    i, my1DPoly->coeff[i], 0.0);
+            return 4;
+        }
+        if(my1DPoly->coeffErr[i] != 0.0) {
+            psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d] %lg not as expected %lg",
+                    i, my1DPoly->coeffErr[i], 0.0);
+            return 5;
+        }
+        if(my1DPoly->mask[i] != 0) {
+            psError(PS_ERR_UNKNOWN,true,"Mask[%d] %d not as expected %d",
+                    i, my1DPoly->mask[i], 0);
+            return 6;
+        }
+    }
+    psFree(my1DPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial1DAlloc(-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 7;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 1D polynomial and verify the structure allocated
+psS32 testDPolynomial1DAlloc(void)
+{
+    psDPolynomial1D*  my1DDPoly  = NULL;
+
+    // Allocate polynomial
+    my1DDPoly = psDPolynomial1DAlloc(ORDER,PS_POLYNOMIAL_CHEB);
+    // Verify structure allocated
+    if(my1DDPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my1DDPoly->n != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my1DDPoly->n, ORDER);
+        return 2;
+    }
+    if(my1DDPoly->type != PS_POLYNOMIAL_CHEB) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my1DDPoly->type, PS_POLYNOMIAL_CHEB);
+        return 3;
+    }
+    for(psS32 i = 0; i < ORDER; i++) {
+        if(my1DDPoly->coeff[i] != 0.0) {
+            psError(PS_ERR_UNKNOWN,true,"Coeff[%d] %lg not as expected %lg",
+                    i, my1DDPoly->coeff[i], 0.0);
+            return 4;
+        }
+        if(my1DDPoly->coeffErr[i] != 0.0) {
+            psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d] %lg not as expected %lg",
+                    i, my1DDPoly->coeffErr[i], 0.0);
+            return 5;
+        }
+        if(my1DDPoly->mask[i] != 0) {
+            psError(PS_ERR_UNKNOWN,true,"Mask[%d] %d not as expected %d",
+                    i, my1DDPoly->mask[i], 0);
+            return 6;
+        }
+    }
+    psFree(my1DDPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial1DAlloc(-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 7;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 2D polynomial and verify the structure allocated
+psS32 testPolynomial2DAlloc(void)
+{
+    psPolynomial2D* my2DPoly = NULL;
+
+    // Allocate polynomial
+    my2DPoly = psPolynomial2DAlloc(ORDER,ORDER+1,PS_POLYNOMIAL_ORD);
+    // Verify structure allocated
+    if(my2DPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my2DPoly->nX != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my2DPoly->nX, ORDER);
+        return 2;
+    }
+    // Verify polynomial structure members set properly
+    if(my2DPoly->nY != ORDER+1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my2DPoly->nY, ORDER+1);
+        return 3;
+    }
+    if(my2DPoly->type != PS_POLYNOMIAL_ORD) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my2DPoly->type, PS_POLYNOMIAL_ORD);
+        return 4;
+    }
+    for(psS32 i = 0; i < ORDER; i++) {
+        for(psS32 j = 0; j < ORDER+1; j++) {
+            if(my2DPoly->coeff[i][j] != 0.0) {
+                psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d] %lg not as expected %lg",
+                        i, j, my2DPoly->coeff[i][j], 0.0);
+                return 5;
+            }
+            if(my2DPoly->coeffErr[i][j] != 0.0) {
+                psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d] %lg not as expected %lg",
+                        i, j, my2DPoly->coeffErr[i][j], 0.0);
+                return 6;
+            }
+            if(my2DPoly->mask[i][j] != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
+                        i, j, my2DPoly->mask[i][j], 0);
+                return 7;
+            }
+        }
+    }
+    psFree(my2DPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial2DAlloc(-1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 8;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial2DAlloc(1,-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 9;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 2D polynomial and verify the structure allocated
+psS32 testDPolynomial2DAlloc(void)
+{
+    psDPolynomial2D* my2DDPoly = NULL;
+
+    // Allocate polynomial
+    my2DDPoly = psDPolynomial2DAlloc(ORDER,ORDER+1,PS_POLYNOMIAL_CHEB);
+    // Verify structure allocated
+    if(my2DDPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my2DDPoly->nX != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my2DDPoly->nX, ORDER);
+        return 2;
+    }
+    // Verify polynomial structure members set properly
+    if(my2DDPoly->nY != ORDER+1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my2DDPoly->nY, ORDER+1);
+        return 3;
+    }
+    if(my2DDPoly->type != PS_POLYNOMIAL_CHEB) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my2DDPoly->type, PS_POLYNOMIAL_ORD);
+        return 4;
+    }
+    for(psS32 i = 0; i < ORDER; i++) {
+        for(psS32 j = 0; j < ORDER+1; j++) {
+            if(my2DDPoly->coeff[i][j] != 0.0) {
+                psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d] %lg not as expected %lg",
+                        i, j, my2DDPoly->coeff[i][j], 0.0);
+                return 5;
+            }
+            if(my2DDPoly->coeffErr[i][j] != 0.0) {
+                psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d] %lg not as expected %lg",
+                        i, j, my2DDPoly->coeffErr[i][j], 0.0);
+                return 6;
+            }
+            if(my2DDPoly->mask[i][j] != 0) {
+                psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
+                        i, j, my2DDPoly->mask[i][j], 0);
+                return 7;
+            }
+        }
+    }
+    psFree(my2DDPoly);
+    /*
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial2DAlloc(-1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 8;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial2DAlloc(1,-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 9;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 3D polynomial and verify the structure allocated
+psS32 testPolynomial3DAlloc(void)
+{
+    psPolynomial3D* my3DPoly = NULL;
+
+    // Allocate polynomial
+    my3DPoly = psPolynomial3DAlloc(ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_ORD);
+    // Verify structure allocated
+    if(my3DPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my3DPoly->nX != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my3DPoly->nX, ORDER);
+        return 2;
+    }
+    // Verify polynomial structure members set properly
+    if(my3DPoly->nY != ORDER+1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my3DPoly->nY, ORDER+1);
+        return 3;
+    }
+    // Verify polynomial structure members set properly
+    if(my3DPoly->nZ != ORDER+2) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my3DPoly->nZ, ORDER+2);
+        return 4;
+    }
+    if(my3DPoly->type != PS_POLYNOMIAL_ORD) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my3DPoly->type, PS_POLYNOMIAL_ORD);
+        return 5;
+    }
+    for(psS32 i = 0; i < ORDER; i++) {
+        for(psS32 j = 0; j < ORDER+1; j++) {
+            for(psS32 k = 0; k < ORDER+2; k++) {
+                if(my3DPoly->coeff[i][j][k] != 0.0) {
+                    psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d] %lg not as expected %lg",
+                            i, j, k, my3DPoly->coeff[i][j][k], 0.0);
+                    return 6;
+                }
+                if(my3DPoly->coeffErr[i][j][k] != 0.0) {
+                    psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d] %lg not as expected %lg",
+                            i, j, k, my3DPoly->coeffErr[i][j][k], 0.0);
+                    return 7;
+                }
+                if(my3DPoly->mask[i][j][k] != 0) {
+                    psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
+                            i, j, k, my3DPoly->mask[i][j][k], 0);
+                    return 8;
+                }
+            }
+        }
+    }
+    psFree(my3DPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial3DAlloc(-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 9;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial3DAlloc(1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 10;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial3DAlloc(1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 11;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 3D polynomial and verify the structure allocated
+psS32 testDPolynomial3DAlloc(void)
+{
+    psDPolynomial3D* my3DDPoly = NULL;
+
+    // Allocate polynomial
+    my3DDPoly = psDPolynomial3DAlloc(ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_CHEB);
+    // Verify structure allocated
+    if(my3DDPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my3DDPoly->nX != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my3DDPoly->nX, ORDER);
+        return 2;
+    }
+    // Verify polynomial structure members set properly
+    if(my3DDPoly->nY != ORDER+1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my3DDPoly->nY, ORDER+1);
+        return 3;
+    }
+    // Verify polynomial structure members set properly
+    if(my3DDPoly->nZ != ORDER+2) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my3DDPoly->nZ, ORDER+2);
+        return 4;
+    }
+    if(my3DDPoly->type != PS_POLYNOMIAL_CHEB) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my3DDPoly->type, PS_POLYNOMIAL_ORD);
+        return 5;
+    }
+    for(psS32 i = 0; i < ORDER; i++) {
+        for(psS32 j = 0; j < ORDER+1; j++) {
+            for(psS32 k = 0; k < ORDER+2; k++) {
+                if(my3DDPoly->coeff[i][j][k] != 0.0) {
+                    psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d] %lg not as expected %lg",
+                            i, j, k, my3DDPoly->coeff[i][j][k], 0.0);
+                    return 6;
+                }
+                if(my3DDPoly->coeffErr[i][j][k] != 0.0) {
+                    psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d] %lg not as expected %lg",
+                            i, j, k, my3DDPoly->coeffErr[i][j][k], 0.0);
+                    return 7;
+                }
+                if(my3DDPoly->mask[i][j][k] != 0) {
+                    psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d] %d not as expected %d",
+                            i, j, k, my3DDPoly->mask[i][j][k], 0);
+                    return 8;
+                }
+            }
+        }
+    }
+    psFree(my3DDPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial3DAlloc(-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 9;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial3DAlloc(1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 10;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial3DAlloc(1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 11;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 4D polynomial and verify the structure allocated
+psS32 testPolynomial4DAlloc(void)
+{
+    psPolynomial4D* my4DPoly = NULL;
+
+    // Allocate polynomial
+    my4DPoly = psPolynomial4DAlloc(ORDER+3,ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_ORD);
+    // Verify structure allocated
+    if(my4DPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DPoly->nY != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DPoly->nY, ORDER);
+        return 2;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DPoly->nZ != ORDER+1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DPoly->nZ, ORDER+1);
+        return 3;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DPoly->nT != ORDER+2) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DPoly->nT, ORDER+2);
+        return 4;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DPoly->nX != ORDER+3) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DPoly->nX, ORDER+3);
+        return 5;
+    }
+    if(my4DPoly->type != PS_POLYNOMIAL_ORD) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my4DPoly->type, PS_POLYNOMIAL_ORD);
+        return 6;
+    }
+    for(psS32 i = 0; i < ORDER+3; i++) {
+        for(psS32 j = 0; j < ORDER; j++) {
+            for(psS32 k = 0; k < ORDER+1; k++) {
+                for(psS32 l = 0; l < ORDER+2; l++) {
+                    if(my4DPoly->coeff[i][j][k][l] != 0.0) {
+                        psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d][%d] %lg not as expected %lg",
+                                i, j, k, l, my4DPoly->coeff[i][j][k][l], 0.0);
+                        return 7;
+                    }
+                    if(my4DPoly->coeffErr[i][j][k][l] != 0.0) {
+                        psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d][l] %lg not as expected %lg",
+                                i, j, k, l, my4DPoly->coeffErr[i][j][k][l], 0.0);
+                        return 8;
+                    }
+                    if(my4DPoly->mask[i][j][k][l] != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d][%d][%d] %d not as expected %d",
+                                i, j, k, l, my4DPoly->mask[i][j][k][l], 0);
+                        return 9;
+                    }
+                }
+            }
+        }
+    }
+    psFree(my4DPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial4DAlloc(-1,1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 10;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial4DAlloc(1,-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 11;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial4DAlloc(1,1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 12;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psPolynomial4DAlloc(1,1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 13;
+        }
+    */
+    return 0;
+}
+
+// This test will allocate a 4D polynomial and verify the structure allocated
+psS32 testDPolynomial4DAlloc(void)
+{
+    psDPolynomial4D* my4DDPoly = NULL;
+
+    // Allocate polynomial
+    my4DDPoly = psDPolynomial4DAlloc(ORDER+3,ORDER,ORDER+1,ORDER+2,PS_POLYNOMIAL_ORD);
+    // Verify structure allocated
+    if(my4DDPoly == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned NULL not expected");
+        return 1;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DDPoly->nY != ORDER) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DDPoly->nY, ORDER);
+        return 2;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DDPoly->nZ != ORDER+1) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DDPoly->nZ, ORDER+1);
+        return 3;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DDPoly->nT != ORDER+2) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DDPoly->nT, ORDER+2);
+        return 4;
+    }
+    // Verify polynomial structure members set properly
+    if(my4DDPoly->nX != ORDER+3) {
+        psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d",
+                my4DDPoly->nX, ORDER+3);
+        return 5;
+    }
+    if(my4DDPoly->type != PS_POLYNOMIAL_ORD) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",
+                my4DDPoly->type, PS_POLYNOMIAL_ORD);
+        return 6;
+    }
+    for(psS32 i = 0; i < ORDER+3; i++) {
+        for(psS32 j = 0; j < ORDER; j++) {
+            for(psS32 k = 0; k < ORDER+1; k++) {
+                for(psS32 l = 0; l < ORDER+2; l++) {
+                    if(my4DDPoly->coeff[i][j][k][l] != 0.0) {
+                        psError(PS_ERR_UNKNOWN,true,"Coeff[%d][%d][%d][%d] %lg not as expected %lg",
+                                i, j, k, l, my4DDPoly->coeff[i][j][k][l], 0.0);
+                        return 7;
+                    }
+                    if(my4DDPoly->coeffErr[i][j][k][l] != 0.0) {
+                        psError(PS_ERR_UNKNOWN,true,"CoeffErr[%d][%d][%d][l] %lg not as expected %lg",
+                                i, j, k, l, my4DDPoly->coeffErr[i][j][k][l], 0.0);
+                        return 8;
+                    }
+                    if(my4DDPoly->mask[i][j][k][l] != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"Mask[%d][%d][%d][%d] %d not as expected %d",
+                                i, j, k, l, my4DDPoly->mask[i][j][k][l], 0);
+                        return 9;
+                    }
+                }
+            }
+        }
+    }
+    psFree(my4DDPoly);
+
+    /*    // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial4DAlloc(-1,1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 10;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial4DAlloc(1,-1,1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 11;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial4DAlloc(1,1,-1,1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 12;
+        }
+        // Attempt to allocate with negative order
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate error msg for negative terms");
+        if(psDPolynomial4DAlloc(1,1,1,-1,PS_POLYNOMIAL_ORD) != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Returned structure but expected NULL");
+            return 13;
+        }
+    */
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psFunc01.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc01.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc01.c	(revision 4547)
@@ -0,0 +1,76 @@
+/*****************************************************************************
+    This routine must ensure that the psGaussian() shall evaluate a
+    specified Gaussian at some X.
+ 
+    It also tests the p_psGaussianDev() procedure.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psFunctions.h"
+#define MY_MEAN 30.0
+#define MY_STDEV 2.0
+#define N 30
+psS32 main()
+{
+    psS32 testStatus = true;
+    float x = 0.0;
+    psS32  memLeaks;
+    psS32  currentId = psMemGetId();
+    psVector *myGaussData = NULL;
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "psGaussian()");
+
+
+    for (x = 0.0 ; x < (MY_MEAN * 2.0) ; x+= 1.0) {
+        printf("normal psGaussian(%f) is %f\n", x, psGaussian(x, MY_MEAN, MY_STDEV, true));
+        x = x + 1.0;
+    }
+
+    for (x = 0.0 ; x < (MY_MEAN * 2.0) ; x+= 1.0) {
+        printf("NON-normal psGaussian(%f) is %f\n", x, psGaussian(x, MY_MEAN, MY_STDEV, false));
+        x = x + 1.0;
+    }
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psGaussian()",
+                testStatus);
+
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "p_psGaussianDev()");
+
+    myGaussData = p_psGaussianDev(MY_MEAN, MY_STDEV, N);
+    for (psS32 i = 0; i < N ; i++) {
+        printf("Gaussian Deviate [%d] is %f\n", i, myGaussData->data.F32[i]);
+    }
+
+    if ( myGaussData->type.type != PS_TYPE_F32) {
+        psAbort(__func__,"p_psGaussianDev did not return a vector of type F32");
+    }
+
+    psFree(myGaussData);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "p_psGaussianDev()",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psFunc02.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc02.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc02.c	(revision 4547)
@@ -0,0 +1,446 @@
+/*****************************************************************************
+    This routine must ensure that the psSpline1DAlloc() function properly
+    allocates the spline data structure.  It allocates both linear and cubic
+    splines with a variety of min/max ranges.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psFunctions.h"
+
+#define N 4
+#define LINEAR 1
+#define CUBIC 3
+
+psS32 main()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32 i;
+    psS32  currentId = psMemGetId();
+    psSpline1D *tmpSpline;
+    psVector* bounds;
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(): linear, normal");
+
+    tmpSpline = psSpline1DAlloc(N, LINEAR, 1.0, 10.0);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != LINEAR+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
+               tmpSpline->knots->data.F32[i]);
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(): linear, normal",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(): linear, min/max are equal");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    tmpSpline = psSpline1DAlloc(N, LINEAR, 1.0, 1.0);
+
+    if (tmpSpline != NULL) {
+        printf("ERROR: allocated psSpline1D data structure when min==max\n");
+        testStatus = false;
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(): linear, min/max are equal",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(): linear, min > max.");
+
+    tmpSpline = psSpline1DAlloc(N, LINEAR, 1.0, -1.0);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != LINEAR+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
+               tmpSpline->knots->data.F32[i]);
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(): linear, min > max.",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(), cubic, normal");
+
+    tmpSpline = psSpline1DAlloc(N, CUBIC, 1.0, 10.0);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != CUBIC+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        printf("psSpline1D->data.F32[%d] is %f\n", i,
+               tmpSpline->knots->data.F32[i]);
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(): cubic, normal",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(): cubic, min/max are equal");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    tmpSpline = psSpline1DAlloc(N, CUBIC, 1.0, 1.0);
+
+    if (tmpSpline != NULL) {
+        printf("ERROR: allocated psSpline1D data structure when min==max\n");
+        testStatus = false;
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(): cubic, min/max are equal",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(): cubic, min > max.");
+
+    tmpSpline = psSpline1DAlloc(N, CUBIC, 1.0, -1.0);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != CUBIC+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
+               tmpSpline->knots->data.F32[i]);
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(): cubic, min > max.",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAllocGeneric(): linear, normal");
+
+    bounds = psVectorAlloc(5,PS_TYPE_F32);
+    bounds->n = bounds->nalloc;
+    for(psU32 n = 0; n < 5; n++ ) {
+        bounds->data.F32[n] = (n+1) * 2;
+    }
+    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != LINEAR+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        printf("psSpline1D->knots->data.F32[%d] is %f\n", i,
+               tmpSpline->knots->data.F32[i]);
+    }
+    psFree(bounds);
+    psFree(tmpSpline);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
+        testStatus = false;
+    }
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAllocGeneric(): linear, normal",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    ///XXX: REMOVED FOLLOWING TEST AFTER CHANGING TO UNSIGNED INT///
+    /*    testStatus = true;
+        printPositiveTestHeader(stdout,
+                                "psFunction functions",
+                                "psSpline1DAllocGeneric(): negative order");
+     
+        bounds = psVectorAlloc(5,PS_TYPE_F32);
+        bounds->n = bounds->nalloc;
+        for(psU32 n = 0; n < 5; n++ ) {
+            bounds->data.F32[n] = (n+1) * 2;
+        }
+        psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+        tmpSpline = psSpline1DAllocGeneric(bounds, -1);
+        if (tmpSpline != NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Did not return null for negative order");
+            return 10;
+        }
+        psFree(bounds);
+        psMemCheckCorruption(1);
+        memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+        if (0 != memLeaks) {
+            psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
+            testStatus = false;
+        }
+        printFooter(stdout,
+                    "psFunctions functions",
+                    "psSpline1DAllocGeneric(): negative order",
+                    testStatus);
+    */
+    psFree(bounds);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAllocGeneric(): bound equal to NULL");
+
+    bounds = NULL;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
+    if (tmpSpline != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null for bounds equal to NULL");
+        return 20;
+    }
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
+        testStatus = false;
+    }
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAllocGeneric(): bound equal to NULL",
+                testStatus);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAllocGeneric(): bounds with zero elements");
+
+    bounds = psVectorAlloc(5,PS_TYPE_F32);
+    bounds->n = 0;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
+    if (tmpSpline != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return null for negative order");
+        return 30;
+    }
+    psFree(bounds);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psError(PS_ERR_UNKNOWN,true,"Memory Leaks! (%d leaks)", memLeaks);
+        testStatus = false;
+    }
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAllocGeneric(): bounds with zero elements",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psFunc03.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc03.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc03.c	(revision 4547)
@@ -0,0 +1,150 @@
+/*****************************************************************************
+    This routine must ensure that the psSpline1DAllocGeneric() function properly
+    allocates the spline data structure.
+ 
+    XXX: test bounds?
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psFunctions.h"
+
+#define N 10
+#define LINEAR 1
+#define CUBIC 3
+
+psS32 main()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32 i;
+    psS32  currentId = psMemGetId();
+    psSpline1D *tmpSpline;
+    psVector *bounds;
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAllocGeneric(): linear");
+    bounds = psVectorAlloc(N+1, PS_TYPE_F32);
+    for (i=0;i<N+1;i++) {
+        bounds->data.F32[i] = (float) (3 * i);
+    }
+
+    tmpSpline = psSpline1DAllocGeneric(bounds, LINEAR);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != LINEAR+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        if (tmpSpline->knots->data.F32[i] != bounds->data.F32[i]) {
+            printf("ERROR: psSpline1D->knots->data.F32[%d] is %f\n", i,
+                   tmpSpline->knots->data.F32[i]);
+        }
+    }
+
+    psFree(tmpSpline);
+    psFree(bounds);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAllocGeneric(): linear",
+                testStatus);
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAllocGeneric(): cubic");
+    bounds = psVectorAlloc(N+1, PS_TYPE_F32);
+    for (i=0;i<N+1;i++) {
+        bounds->data.F32[i] = (float) (3 * i);
+    }
+
+    tmpSpline = psSpline1DAllocGeneric(bounds, CUBIC);
+    if (tmpSpline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D data structure\n");
+        testStatus = false;
+    }
+    if (tmpSpline->spline == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->spline data structure\n");
+        testStatus = false;
+    }
+
+    if (tmpSpline->n != N) {
+        printf("ERROR: spline->n set incorrectly (%d)\n", tmpSpline->n);
+        testStatus = false;
+    }
+
+    for (i=0;i<N;i++) {
+        if (tmpSpline->spline[i] == NULL) {
+            printf("ERROR: Could not allocate spline %d\n", i);
+            testStatus = false;
+        }
+        if ((tmpSpline->spline[i])->n != CUBIC+1) {
+            printf("ERROR: Spline created with order %d\n", (tmpSpline->spline[i])->n);
+            testStatus = false;
+        }
+    }
+
+    if (tmpSpline->knots == NULL) {
+        printf("ERROR: Could not allocate psSpline1D->knots data structure\n");
+        testStatus = false;
+    }
+
+    for (i=0;i<N+1;i++) {
+        if (tmpSpline->knots->data.F32[i] != bounds->data.F32[i]) {
+            printf("ERROR: psSpline1D->knots->data.F32[%d] is %f\n", i,
+                   tmpSpline->knots->data.F32[i]);
+        }
+    }
+
+    psFree(tmpSpline);
+    psFree(bounds);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAllocGeneric(): cubic",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psFunc04.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc04.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc04.c	(revision 4547)
@@ -0,0 +1,133 @@
+/*****************************************************************************
+    This routine must ensure that the psSpline1DEval() function works
+    properly.  It creates a spline with psSpline1DAlloc(), creates a set of
+    data values, sets the spline polynomials with psVectorFitSpline1D(), then
+    calls psSpline1DEval() on new data values and ensures that the results
+    are correct.
+ 
+    XXX: figure out the memory deallocator
+ *****************************************************************************/
+#include <stdio.h>
+#include <math.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psFunctions.h"
+
+#define N 8
+
+psS32 t00()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32 i;
+    float x;
+    float y;
+    psS32  currentId = psMemGetId();
+    psSpline1D *tmpSpline;
+    psVector *data;
+
+    psTraceSetLevel(".", 0);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc()");
+    data = psVectorAlloc(N+1, PS_TYPE_F32);
+    tmpSpline = psSpline1DAlloc(N, 1, 1.0, 10.0);
+
+    for (i=0;i<N+1;i++) {
+        data->data.F32[i] = tmpSpline->knots->data.F32[i];
+    }
+    psVectorFitSpline1D(tmpSpline, data, data, NULL);
+
+    for (i=0;i<N+1;i++) {
+        x = 0.5 + (float) i+1;
+        y = psSpline1DEval(
+                tmpSpline,
+                x
+            );
+        if (fabs(x-y) > FLT_EPSILON) {
+            printf("ERROR: f(%f) is %f\n", x, y);
+            testStatus = true;
+        }
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    psFree(data);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc()",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t01()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32 i;
+    float x;
+    float y;
+    psS32  currentId = psMemGetId();
+    psSpline1D *tmpSpline;
+    psVector *data;
+
+    psTraceSetLevel(".", 0);
+
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc()");
+    data = psVectorAlloc(N+1, PS_TYPE_F32);
+    tmpSpline = psSpline1DAlloc(N, 1, 1.0, 10.0);
+
+    for (i=0;i<N+1;i++) {
+        data->data.F32[i] = tmpSpline->knots->data.F32[i];
+    }
+    psVectorFitSpline1D(tmpSpline, data, data, NULL);
+
+    for (i=0;i<N+1;i++) {
+        x = 0.5 + (float) i+1;
+        y = psSpline1DEval(
+                tmpSpline,
+                x
+            );
+        if (fabs(x-y) > FLT_EPSILON) {
+            printf("ERROR: f(%f) is %f\n", x, y);
+            testStatus = true;
+        }
+    }
+
+    psFree(tmpSpline);
+    psMemCheckCorruption(1);
+    psFree(data);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc()",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    t00();
+    //    t01();
+}
Index: /trunk/psLib/test/math/tst_psFunc05.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc05.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc05.c	(revision 4547)
@@ -0,0 +1,82 @@
+/*****************************************************************************
+    This routine must ensure that the psSpline1DEvalVector() function works
+    properly.  It creates a spline with psSpline1DAlloc(), (1-D functions
+    are used for the spline polynomials) creates a set of data values, sets
+    the spline polynomials with psVectorFitSpline1D(), then calls
+    psSpline1DEvalVector() on new data values and ensures that the results
+    are correct.
+ 
+    XXX: Only F32 types are tested here.  F64 types are tested elsewhere.
+ *****************************************************************************/
+#include <stdio.h>
+#include <math.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psFunctions.h"
+#define N 8
+#define SPLINE_ORDER 1
+
+psS32 main()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32 i;
+    psS32  currentId = psMemGetId();
+    psSpline1D *tmpSpline;
+    psVector *data;
+    psVector *x;
+    psVector *y;
+
+    psTraceSetLevel(".", 0);
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc()");
+    data = psVectorAlloc(N+1, PS_TYPE_F32);
+    x = psVectorAlloc(N+1, PS_TYPE_F32);
+    tmpSpline = psSpline1DAlloc(N, SPLINE_ORDER, 1.0, 10.0);
+
+    for (i=0;i<N+1;i++) {
+        data->data.F32[i] = tmpSpline->knots->data.F32[i];
+    }
+
+    psVectorFitSpline1D(tmpSpline, data, data, NULL);
+
+    for (i=0;i<N+1;i++) {
+        x->data.F32[i] = 0.5 + (float) i+1;
+    }
+
+    y = psSpline1DEvalVector(
+            tmpSpline,
+            x
+        );
+
+    for (i=0;i<N+1;i++) {
+        if (fabs(x->data.F32[i]-y->data.F32[i]) > FLT_EPSILON) {
+            printf("ERROR: f(%f) is %f\n", x->data.F32[i], y->data.F32[i]);
+            testStatus = true;
+        }
+    }
+
+    psFree(tmpSpline);
+
+    psFree(x);
+    psFree(y);
+    psFree(data);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc()",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psFunc07.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc07.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc07.c	(revision 4547)
@@ -0,0 +1,181 @@
+/*****************************************************************************
+This routine must ensure that the psVectorFitSpline1D() function works
+properly.  It creates a spline with psSpline1DAlloc(), creates a set of data
+values, sets the spline polynomials with psVectorFitSpline1D(), then calls
+psSpline1DEval() on new data values and ensures that the results are correct.
+ 
+F32 and F64 versions are used here.
+ 
+XXX: The spline eval functions are F32 only, while the spline fit functions
+are F32 and F64.
+ *****************************************************************************/
+#include <stdio.h>
+#include <math.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psFunctions.h"
+
+#define NUM_SPLINES 50
+#define A 4.0
+#define B -3.0
+#define C 0.2
+#define D 0.1
+#define MIN 1.0
+#define MAX 30
+#define ERROR_TOLERANCE 0.10
+#define OFFSET (NUM_SPLINES * ERROR_TOLERANCE)
+
+float myFunc(float x)
+{
+    return(A + x * (B + x * (C + x * (D))));
+}
+
+psS32 t00()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32  currentId = psMemGetId();
+    psS32 i;
+    psSpline1D *tmpSpline = NULL;
+    psVector *x = NULL;
+    psVector *newX = NULL;
+    psVector *y = NULL;
+    psVector *newY = NULL;
+
+    psTraceSetLevel(".", 0);
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    x = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F32);
+    newX = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F32);
+    y = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F32);
+    tmpSpline = psSpline1DAlloc(NUM_SPLINES, 3, MIN, MAX);
+
+    for (i=0;i<NUM_SPLINES+1;i++) {
+        x->data.F32[i] = tmpSpline->knots->data.F32[i];
+        y->data.F32[i] = myFunc(x->data.F32[i]);
+    }
+
+    for (i=0;i<NUM_SPLINES;i++) {
+        newX->data.F32[i]= ((x->data.F32[i] + x->data.F32[i+1])/2.0);
+    }
+    newX->data.F32[NUM_SPLINES] = x->data.F32[NUM_SPLINES];
+    /****************************************************************************/
+    /*   psLib Code      */
+    /****************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F32 versions");
+
+    psVectorFitSpline1D(tmpSpline, x, y, NULL);
+    newY = psSpline1DEvalVector(
+               tmpSpline,
+               newX
+           );
+
+    for (i=OFFSET;i<NUM_SPLINES-OFFSET+1;i++) {
+        if ( fabs( newY->data.F32[i] - myFunc(newX->data.F32[i]) ) > fabs( ERROR_TOLERANCE * myFunc(newX->data.F32[i]) ) ) {
+            printf("ERROR[%d]: f(%f) is %f.  Should be %f\n", i,
+                   newX->data.F32[i], newY->data.F32[i], myFunc(newX->data.F32[i]));
+            testStatus = false;
+        }
+    }
+
+    psFree(x);
+    psFree(newX);
+    psFree(y);
+    psFree(tmpSpline);
+    psFree(newY);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F32 versions",
+                testStatus);
+
+    return (!testStatus);
+}
+
+// This is the F64 version of the above test code.
+psS32 t01()
+{
+    psS32 testStatus = true;
+    psS32 memLeaks=0;
+    psS32  currentId = psMemGetId();
+    psS32 i;
+    psSpline1D *tmpSpline = NULL;
+    psVector *x = NULL;
+    psVector *newX = NULL;
+    psVector *y = NULL;
+    psVector *newY = NULL;
+
+    psTraceSetLevel(".", 0);
+    /****************************************************************************/
+    /****************************************************************************/
+    testStatus = true;
+    x = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F64);
+    newX = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F64);
+    y = psVectorAlloc(NUM_SPLINES+1, PS_TYPE_F64);
+    tmpSpline = psSpline1DAlloc(NUM_SPLINES, 3, MIN, MAX);
+
+    for (i=0;i<NUM_SPLINES+1;i++) {
+        x->data.F64[i] = tmpSpline->knots->data.F32[i];
+        y->data.F64[i] = myFunc(x->data.F64[i]);
+    }
+
+    for (i=0;i<NUM_SPLINES;i++) {
+        newX->data.F64[i]= ((x->data.F64[i] + x->data.F64[i+1])/2.0);
+    }
+    newX->data.F64[NUM_SPLINES] = x->data.F64[NUM_SPLINES];
+    /****************************************************************************/
+    /*   psLib Code      */
+    /****************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psFunction functions",
+                            "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F64 versions");
+
+    psVectorFitSpline1D(tmpSpline, x, y, NULL);
+    newY = psSpline1DEvalVector(
+               tmpSpline,
+               newX
+           );
+
+    for (i=OFFSET;i<NUM_SPLINES-OFFSET+1;i++) {
+        if ( fabs( newY->data.F32[i] - myFunc(newX->data.F64[i]) ) > fabs( ERROR_TOLERANCE * myFunc((float)newX->data.F64[i]) ) ) {
+            printf("ERROR[%d]: f(%f) is %f.  Should be %f\n", i,
+                   newX->data.F64[i], newY->data.F32[i], myFunc((float)newX->data.F64[i]));
+            testStatus = false;
+        }
+    }
+
+    psFree(x);
+    psFree(newX);
+    psFree(y);
+    psFree(tmpSpline);
+    psFree(newY);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psFunctions functions",
+                "psSpline1DAlloc(), psVectorFitSpline1D, psSpline1DEvalVector: F64 versions",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    //    t00();
+    t01();
+}
Index: /trunk/psLib/test/math/tst_psFunc08.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc08.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc08.c	(revision 4547)
@@ -0,0 +1,334 @@
+/** tst_psFunc08.c
+*
+*  This test driver will exercise the psPolynomialXDEval functions for both
+*  ORD and CHEB type polynomials.
+*
+*  @version  $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+*  XXX: Probably should test single- and multi-dimensional polynomials in
+*  which one diminsion is constant (n == 1).
+*
+* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*
+***************************************************************************/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define  TERMS        4
+#define  TESTPOINTS   5
+#define  ERROR_TOL    0.001
+
+static psS32 testPoly1DEval(void);
+static psS32 testDPoly1DEval(void);
+static psS32 testPoly1DEvalVector(void);
+static psS32 testDPoly1DEvalVector(void);
+
+testDescription tests[] = {
+                              {testPoly1DEval,000,"psPolynomial1DEval",0,false},
+                              {testDPoly1DEval,000,"psDPolynomial1DEval",0,false},
+                              {testPoly1DEvalVector,000,"psPolynomial1DEvalVector",0,false},
+                              {testDPoly1DEvalVector,000,"psDPolynomial1DEvalVector",0,false},
+                              {NULL}
+                          };
+
+psF32 poly1DCoeff[TERMS]        = { -4.3, 2.3, -3.2, 1.9};
+psF64 Dpoly1DCoeff[TERMS]        = { -4.3, 2.3, -3.2, 1.9};
+psF32 poly1DMask[TERMS]         = {    0,   0,    1,   0  };
+
+psF32 poly1DXValue[TESTPOINTS]   = { 2.550000,    -9.8000,   0.00134,   -12.2500,   0.000};
+psF64 Dpoly1DXValue[TESTPOINTS]  = { 2.550000,    -9.8000,   0.00134,   -12.2500,   0.000};
+psF32 poly1DXResult[TESTPOINTS]  = {33.069613, -1815.1048, -4.296918, -3525.1797, -4.3000};
+psF64 Dpoly1DXResult[TESTPOINTS] = {33.069613, -1815.1048, -4.296918, -3525.1797, -4.3000};
+
+psF32 poly1DXChebValue[TESTPOINTS]   = { -0.99,    -0.33,     0.125,    0.564,    0.875};
+psF64 Dpoly1DXChebValue[TESTPOINTS]  = { -0.99,    -0.33,     0.125,    0.564,    0.875};
+psF32 poly1DXChebResult[TESTPOINTS]  = { -1.401196, 1.016252, 0.257813, 0.089625, 1.429688};
+psF64 Dpoly1DXChebResult[TESTPOINTS] = { -1.401196, 1.016252, 0.257813, 0.089625, 1.429688};
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testPoly1DEval(void)
+{
+    psF32  result;
+    psF32  resultCheb;
+
+    // Allocate polynomial structure
+    psPolynomial1D*  polyOrd = psPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_ORD);
+    psPolynomial1D*  polyCheb = psPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        polyOrd->coeff[i] = poly1DCoeff[i];
+        polyOrd->mask[i]  = poly1DMask[i];
+        polyCheb->coeff[i] = 1.0;
+        polyCheb->mask[i]  = poly1DMask[i];
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psPolynomial1DEval(polyOrd,poly1DXValue[i]);
+        if(fabs(poly1DXResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
+                    result, poly1DXResult[i]);
+            return i;
+        }
+        resultCheb = psPolynomial1DEval(polyCheb,poly1DXChebValue[i]);
+        if(fabs(poly1DXChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, poly1DXChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psPolynomial1DAlloc(TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psPolynomial1DEval(polyOrd,0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testDPoly1DEval(void)
+{
+    psF64  result;
+    psF64  resultCheb;
+
+    // Allocate polynomial structure
+    psDPolynomial1D*  polyOrd = psDPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_ORD);
+    psDPolynomial1D*  polyCheb = psDPolynomial1DAlloc(TERMS, PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        polyOrd->coeff[i] = Dpoly1DCoeff[i];
+        polyOrd->mask[i]  = poly1DMask[i];
+        polyCheb->coeff[i] = 1.0;
+        polyCheb->mask[i]  = poly1DMask[i];
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psDPolynomial1DEval(polyOrd,Dpoly1DXValue[i]);
+        if(fabs(Dpoly1DXResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
+                    result, Dpoly1DXResult[i]);
+            return i;
+        }
+        resultCheb = psDPolynomial1DEval(polyCheb,Dpoly1DXChebValue[i]);
+        if(fabs(Dpoly1DXChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, Dpoly1DXChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psDPolynomial1DAlloc(TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psDPolynomial1DEval(polyOrd,0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+psS32 testPoly1DEvalVector(void)
+{
+    // Allocate polynomial
+    psPolynomial1D* polyOrd = psPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_ORD);
+    psPolynomial1D* polyCheb = psPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        polyOrd->coeff[i] = poly1DCoeff[i];
+        polyOrd->mask[i]  = poly1DMask[i];
+        polyCheb->coeff[i] = 1.0;
+        polyCheb->mask[i]  = poly1DMask[i];
+    }
+
+    // Create input vectors
+    psVector* inputOrd = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputCheb = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrd->data.F32[i] = poly1DXValue[i];
+        inputCheb->data.F32[i] = poly1DXChebValue[i];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psPolynomial1DEvalVector(polyOrd, inputOrd);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F32);
+        return 2;
+    }
+    psVector* outputCheb = psPolynomial1DEvalVector(polyCheb, inputCheb);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F32);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(poly1DXResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
+                    i, outputOrd->data.F32[i], poly1DXResult[i]);
+            return i*5;
+        }
+        if(fabs(poly1DXChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
+                    i, outputCheb->data.F32[i], poly1DXChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psPolynomial1DEvalVector(NULL, inputOrd) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial1DEvalVector(polyOrd,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrd->type.type = PS_TYPE_U8;
+    if(psPolynomial1DEvalVector(polyOrd,inputOrd) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 62;
+    }
+    inputOrd->type.type = PS_TYPE_F32;
+
+    psFree(inputOrd);
+    psFree(inputCheb);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
+psS32 testDPoly1DEvalVector(void)
+{
+    // Allocate polynomial
+    psDPolynomial1D* polyOrd = psDPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_ORD);
+    psDPolynomial1D* polyCheb = psDPolynomial1DAlloc(TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        polyOrd->coeff[i] = poly1DCoeff[i];
+        polyOrd->mask[i]  = poly1DMask[i];
+        polyCheb->coeff[i] = 1.0;
+        polyCheb->mask[i]  = poly1DMask[i];
+    }
+
+    // Create input vectors
+    psVector* inputOrd = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputCheb = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrd->data.F64[i] = poly1DXValue[i];
+        inputCheb->data.F64[i] = poly1DXChebValue[i];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psDPolynomial1DEvalVector(polyOrd, inputOrd);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F64);
+        return 2;
+    }
+    psVector* outputCheb = psDPolynomial1DEvalVector(polyCheb, inputCheb);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F64);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(poly1DXResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
+                    i, outputOrd->data.F64[i], poly1DXResult[i]);
+            return i*5;
+        }
+        if(fabs(poly1DXChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
+                    i, outputCheb->data.F64[i], poly1DXChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psDPolynomial1DEvalVector(NULL, inputOrd) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial1DEvalVector(polyOrd,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrd->type.type = PS_TYPE_U8;
+    if(psDPolynomial1DEvalVector(polyOrd,inputOrd) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 62;
+    }
+    inputOrd->type.type = PS_TYPE_F64;
+
+    psFree(inputOrd);
+    psFree(inputCheb);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psFunc09.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc09.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc09.c	(revision 4547)
@@ -0,0 +1,411 @@
+/** tst_psFunc09.c
+*
+*  This test driver will exercise the psPolynomialXDEval functions for both
+*  ORD and CHEB type polynomials.
+*
+*  @version  $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*
+***************************************************************************/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define  TERMS        4
+#define  TESTPOINTS   5
+#define  ERROR_TOL    0.001
+
+static psS32 testPoly2DEval(void);
+static psS32 testDPoly2DEval(void);
+static psS32 testPoly2DEvalVector(void);
+static psS32 testDPoly2DEvalVector(void);
+
+testDescription tests[] = {
+                              {testPoly2DEval,583,"psPolynomial2DEval",0,false},
+                              {testDPoly2DEval,582,"psDPolynomial2DEval",0,false},
+                              {testPoly2DEvalVector,000,"psPolynomial2DEvalVector",0,false},
+                              {testDPoly2DEvalVector,000,"psDPolynomial2DEvalVector",0,false},
+                              {NULL}
+                          };
+
+psF32 poly2DCoeff[TERMS][TERMS]   = {  { -4.3,  2.3, -3.2,  1.9},
+                                       {  1.2,  0.7, -0.3,  1.3},
+                                       {  0.4, -2.9,  0.8, -3.1},
+                                       { -1.1,  2.1,  1.9,  0.6}
+                                    };
+psF64 Dpoly2DCoeff[TERMS][TERMS]  = {  { -4.3,  2.3, -3.2,  1.9},
+                                       {  1.2,  0.7, -0.3,  1.3},
+                                       {  0.4, -2.9,  0.8, -3.1},
+                                       { -1.1,  2.1,  1.9,  0.6}
+                                    };
+psF32 poly2DMask[TERMS][TERMS]    = {  {  0,    0,    0,    1},
+                                       {  0,    0,    1,    0},
+                                       {  1,    0,    0,    0},
+                                       {  0,    0,    0,    1}
+                                    };
+
+psF32 poly2DXYValue[TESTPOINTS][2] = {  {  1.40,  0.55},
+                                        { -0.55,  1.40},
+                                        {  0.00,  2.34},
+                                        { -0.88,  0.00},
+                                        {  3.45, -0.78}
+                                     };
+psF32 Dpoly2DXYValue[TESTPOINTS][2] = {  {  1.40,  0.55},
+                                      { -0.55,  1.40},
+                                      {  0.00,  2.34},
+                                      { -0.88,  0.00},
+                                      {  3.45, -0.78}
+                                      };
+psF32 poly2DResult[TESTPOINTS] = {  -3.415938, -14.765687, -16.43992, -4.606381, -22.650702 };
+psF64 Dpoly2DResult[TESTPOINTS] = {  -3.415938, -14.765687, -16.43992, -4.606381, -22.650702 };
+
+psF32 poly2DXYChebValue[TESTPOINTS][2] = {  {  0.500,  0.500},
+        {  0.000,  0.250},
+        { -0.250,  0.000},
+        {  0.990,  0.150},
+        {  0.333, -0.666}
+                                         };
+psF32 Dpoly2DXYChebValue[TESTPOINTS][2] = {  {  0.500,  0.500},
+        {  0.000,  0.250},
+        { -0.250,  0.000},
+        {  0.990,  0.150},
+        {  0.333, -0.666}
+                                          };
+psF32 poly2DChebResult[TESTPOINTS] = {  0.750000, 1.687500, 0.625000, -0.113040, 0.386786 };
+psF32 Dpoly2DChebResult[TESTPOINTS] = {  0.750000, 1.687500, 0.625000, -0.113040, 0.386786 };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testPoly2DEval(void)
+{
+    psF32  result;
+    psF32  resultCheb;
+
+    // Allocate polynomial structure
+    psPolynomial2D*  polyOrd = psPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_ORD);
+    psPolynomial2D*  polyCheb = psPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
+            polyOrd->mask[i][j]  = poly2DMask[i][j];
+            polyCheb->coeff[i][j] = 1.0;
+            polyCheb->mask[i][j]  = poly2DMask[i][j];
+        }
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psPolynomial2DEval(polyOrd,poly2DXYValue[i][0],poly2DXYValue[i][1]);
+        if(fabs(poly2DResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
+                    result, poly2DResult[i]);
+            return i;
+        }
+        resultCheb = psPolynomial2DEval(polyCheb,poly2DXYChebValue[i][0], poly2DXYChebValue[i][1]);
+        if(fabs(poly2DChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, poly2DChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psPolynomial2DAlloc(TERMS, TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psPolynomial2DEval(polyOrd,0.0, 0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testDPoly2DEval(void)
+{
+    psF64  result;
+    psF64  resultCheb;
+
+    // Allocate polynomial structure
+    psDPolynomial2D*  polyOrd = psDPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_ORD);
+    psDPolynomial2D*  polyCheb = psDPolynomial2DAlloc(TERMS, TERMS, PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
+            polyOrd->mask[i][j]  = poly2DMask[i][j];
+            polyCheb->coeff[i][j] = 1.0;
+            polyCheb->mask[i][j]  = poly2DMask[i][j];
+        }
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psDPolynomial2DEval(polyOrd,Dpoly2DXYValue[i][0],Dpoly2DXYValue[i][1]);
+        if(fabs(Dpoly2DResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
+                    result, Dpoly2DResult[i]);
+            return i;
+        }
+        resultCheb = psDPolynomial2DEval(polyCheb,Dpoly2DXYChebValue[i][0],Dpoly2DXYChebValue[i][1]);
+        if(fabs(Dpoly2DChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, Dpoly2DChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psDPolynomial2DAlloc(TERMS, TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psDPolynomial2DEval(polyOrd,0.0, 0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+psS32 testPoly2DEvalVector(void)
+{
+    // Allocate polynomial
+    psPolynomial2D* polyOrd = psPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psPolynomial2D* polyCheb = psPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
+            polyOrd->mask[i][j]  = poly2DMask[i][j];
+            polyCheb->coeff[i][j] = 1.0;
+            polyCheb->mask[i][j]  = poly2DMask[i][j];
+        }
+    }
+
+    // Create input vectors
+    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrdX->data.F32[i] = poly2DXYValue[i][0];
+        inputOrdY->data.F32[i] = poly2DXYValue[i][1];
+        inputChebX->data.F32[i] = poly2DXYChebValue[i][0];
+        inputChebY->data.F32[i] = poly2DXYChebValue[i][1];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psPolynomial2DEvalVector(polyOrd, inputOrdX, inputOrdY);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F32);
+        return 2;
+    }
+    psVector* outputCheb = psPolynomial2DEvalVector(polyCheb, inputChebX, inputChebY);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F32);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(poly2DResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
+                    i, outputOrd->data.F32[i], poly2DResult[i]);
+            return i*5;
+        }
+        if(fabs(poly2DChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
+                    i, outputCheb->data.F32[i], poly2DChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psPolynomial2DEvalVector(NULL, inputOrdX, inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial2DEvalVector(polyOrd,NULL, inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial2DEvalVector(polyOrd, inputOrdX, NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 62;
+    }
+
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdX->type.type = PS_TYPE_U8;
+    if(psPolynomial2DEvalVector(polyOrd,inputOrdX,inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 63;
+    }
+    inputOrdX->type.type = PS_TYPE_F32;
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdY->type.type = PS_TYPE_U8;
+    if(psPolynomial2DEvalVector(polyOrd,inputOrdX,inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 64;
+    }
+    inputOrdY->type.type = PS_TYPE_F32;
+
+    psFree(inputOrdX);
+    psFree(inputOrdY);
+    psFree(inputChebX);
+    psFree(inputChebY);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
+psS32 testDPoly2DEvalVector(void)
+{
+    // Allocate polynomial
+    psDPolynomial2D* polyOrd = psDPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psDPolynomial2D* polyCheb = psDPolynomial2DAlloc(TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            polyOrd->coeff[i][j] = poly2DCoeff[i][j];
+            polyOrd->mask[i][j]  = poly2DMask[i][j];
+            polyCheb->coeff[i][j] = 1.0;
+            polyCheb->mask[i][j]  = poly2DMask[i][j];
+        }
+    }
+
+    // Create input vectors
+    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrdX->data.F64[i]  = poly2DXYValue[i][0];
+        inputOrdY->data.F64[i]  = poly2DXYValue[i][1];
+        inputChebX->data.F64[i] = poly2DXYChebValue[i][0];
+        inputChebY->data.F64[i] = poly2DXYChebValue[i][1];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psDPolynomial2DEvalVector(polyOrd, inputOrdX, inputOrdY);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F64);
+        return 2;
+    }
+    psVector* outputCheb = psDPolynomial2DEvalVector(polyCheb, inputChebX, inputChebY);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F64);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(poly2DResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
+                    i, outputOrd->data.F64[i], poly2DResult[i]);
+            return i*5;
+        }
+        if(fabs(poly2DChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
+                    i, outputCheb->data.F64[i], poly2DChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psDPolynomial2DEvalVector(NULL, inputOrdX, inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial2DEvalVector(polyOrd,NULL,inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial2DEvalVector(polyOrd,inputOrdX,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 62;
+    }
+
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdX->type.type = PS_TYPE_U8;
+    if(psDPolynomial2DEvalVector(polyOrd,inputOrdX, inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 63;
+    }
+    inputOrdX->type.type = PS_TYPE_F64;
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdY->type.type = PS_TYPE_U8;
+    if(psDPolynomial2DEvalVector(polyOrd,inputOrdX, inputOrdY) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 64;
+    }
+    inputOrdY->type.type = PS_TYPE_F64;
+
+    psFree(inputOrdX);
+    psFree(inputOrdY);
+    psFree(inputChebX);
+    psFree(inputChebY);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psFunc10.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc10.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc10.c	(revision 4547)
@@ -0,0 +1,514 @@
+/** tst_psFunc10.c
+*
+*  This test driver will exercise the psPolynomialXDEval functions for both
+*  ORD and CHEB type polynomials.
+*
+*  @version  $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*
+***************************************************************************/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define  TERMS        4
+#define  TESTPOINTS   5
+#define  ERROR_TOL    0.001
+
+static psS32 testPoly3DEval(void);
+static psS32 testDPoly3DEval(void);
+static psS32 testPoly3DEvalVector(void);
+static psS32 testDPoly3DEvalVector(void);
+
+testDescription tests[] = {
+                              {testPoly3DEval,583,"psPolynomial3DEval",0,false},
+                              {testDPoly3DEval,582,"psDPolynomial3DEval",0,false},
+                              {testPoly3DEvalVector,000,"psPolynomial3DEvalVector",0,false},
+                              {testDPoly3DEvalVector,000,"psDPolynomial3DEvalVector",0,false},
+                              {NULL}
+                          };
+
+psF32 poly3DCoeff[TERMS][TERMS][TERMS] = {  { { -1.1,  1.2, -1.3,  1.4},
+        {  1.5, -1.6,  1.7, -1.8},
+        {  0.1, -0.2,  0.3, -0.4},
+        { -0.5,  0.6, -0.7,  0.8}
+                                            },
+        { { -2.1,  2.2, -2.3,  2.4},
+          {  2.5, -2.6,  2.7, -2.8},
+          {  3.1, -3.2,  3.3, -3.4},
+          { -3.5,  3.6, -3.7,  3.8}
+        },
+        { { -4.1,  4.2, -4.3,  4.4},
+          {  4.5, -4.6,  4.7, -4.8},
+          {  5.1, -5.2,  5.3, -5.4},
+          { -5.5,  5.6, -5.7,  5.8}
+        },
+        { { -6.1,  6.2, -6.3,  6.4},
+          {  6.5, -6.6,  6.7, -6.8},
+          {  7.1, -7.2,  7.3, -7.4},
+          { -7.5,  7.6, -7.7,  7.8}
+        }
+                                         };
+psF64 Dpoly3DCoeff[TERMS][TERMS][TERMS] = {  { { -1.1,  1.2, -1.3,  1.4},
+        {  1.5, -1.6,  1.7, -1.8},
+        {  0.1, -0.2,  0.3, -0.4},
+        { -0.5,  0.6, -0.7,  0.8}
+                                             },
+        { { -2.1,  2.2, -2.3,  2.4},
+          {  2.5, -2.6,  2.7, -2.8},
+          {  3.1, -3.2,  3.3, -3.4},
+          { -3.5,  3.6, -3.7,  3.8}
+        },
+        { { -4.1,  4.2, -4.3,  4.4},
+          {  4.5, -4.6,  4.7, -4.8},
+          {  5.1, -5.2,  5.3, -5.4},
+          { -5.5,  5.6, -5.7,  5.8}
+        },
+        { { -6.1,  6.2, -6.3,  6.4},
+          {  6.5, -6.6,  6.7, -6.8},
+          {  7.1, -7.2,  7.3, -7.4},
+          { -7.5,  7.6, -7.7,  7.8}
+        }
+                                          };
+
+
+psF32 poly3DMask[TERMS][TERMS][TERMS]    = { {  {  0,    0,    0,    1},
+        {  0,    0,    1,    0},
+        {  1,    0,    0,    0},
+        {  0,    0,    0,    1}
+                                             },
+        {  {  1,    0,    0,    0},
+           {  1,    0,    0,    0},
+           {  1,    0,    0,    0},
+           {  1,    0,    0,    0}
+        },
+        {  {  0,    1,    0,    0},
+           {  0,    0,    1,    0},
+           {  0,    1,    0,    0},
+           {  0,    0,    1,    0}
+        },
+        {  {  1,    0,    0,    0},
+           {  0,    0,    0,    1},
+           {  1,    0,    0,    0},
+           {  0,    0,    0,    1}
+        },
+                                           };
+
+psF32 poly3DXYZValue[TESTPOINTS][3] = {  {  0.450, -0.780,  0.500},
+                                      {  0.297,  0.153, -0.354},
+                                      {  0.000,  0.153, -0.354},
+                                      {  0.297,  0.000, -0.354},
+                                      {  0.297,  0.153,  0.000}
+                                      };
+psF64 Dpoly3DXYZValue[TESTPOINTS][3] = {  {  0.450, -0.780,  0.500},
+                                       {  0.297,  0.153, -0.354},
+                                       {  0.000,  0.153, -0.354},
+                                       {  0.297,  0.000, -0.354},
+                                       {  0.297,  0.153,  0.000}
+                                       };
+psF32 poly3DResult[TESTPOINTS]  = { -1.298691, -2.011591, -1.359247, -2.548266, -1.139072};
+psF64 Dpoly3DResult[TESTPOINTS] = { -1.298691, -2.011591, -1.359247, -2.548266, -1.139072};
+
+
+psF32 poly3DXYZChebValue[TESTPOINTS][3] = {  {  0.000,  0.250, -0.250},
+        { -0.250,  0.000,  0.250},
+        {  0.250, -0.250,  0.000},
+        {  0.100, -0.300, -0.400},
+        {  0.990, -0.010,  0.500}
+                                          };
+psF64 Dpoly3DXYZChebValue[TESTPOINTS][3] = {  {  0.000,  0.250, -0.250},
+        { -0.250,  0.000,  0.250},
+        {  0.250, -0.250,  0.000},
+        {  0.100, -0.300, -0.400},
+        {  0.990, -0.010,  0.500}
+                                           };
+psF32 poly3DChebResult[TESTPOINTS]  = {  1.230469, 1.687500, 0.187500, -1.452707, 2.032344 };
+psF64 Dpoly3DChebResult[TESTPOINTS] = {  1.230469, 1.687500, 0.187500, -1.452707, 2.032344 };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testPoly3DEval(void)
+{
+    psF32  result;
+    psF32  resultCheb;
+
+    // Allocate polynomial structure
+    psPolynomial3D*  polyOrd = psPolynomial3DAlloc(TERMS, TERMS, TERMS, PS_POLYNOMIAL_ORD);
+    psPolynomial3D*  polyCheb = psPolynomial3DAlloc(TERMS, TERMS, TERMS, PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                polyOrd->coeff[i][j][k] = poly3DCoeff[i][j][k];
+                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
+                polyCheb->coeff[i][j][k] = 1.0;
+                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
+            }
+        }
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psPolynomial3DEval(polyOrd,poly3DXYZValue[i][0],poly3DXYZValue[i][1],
+                                    poly3DXYZValue[i][2]);
+        if(fabs(poly3DResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
+                    result, poly3DResult[i]);
+            return i;
+        }
+        resultCheb = psPolynomial3DEval(polyCheb,poly3DXYZChebValue[i][0], poly3DXYZChebValue[i][1],
+                                        poly3DXYZChebValue[i][2]);
+        if(fabs(poly3DChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, poly3DChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psPolynomial3DAlloc(TERMS, TERMS, TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psPolynomial3DEval(polyOrd,0.0, 0.0, 0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testDPoly3DEval(void)
+{
+    psF64  result;
+    psF64  resultCheb;
+
+    // Allocate polynomial structure
+    psDPolynomial3D*  polyOrd = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psDPolynomial3D*  polyCheb = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                polyOrd->coeff[i][j][k] = Dpoly3DCoeff[i][j][k];
+                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
+                polyCheb->coeff[i][j][k] = 1.0;
+                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
+            }
+        }
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psDPolynomial3DEval(polyOrd,Dpoly3DXYZValue[i][0],Dpoly3DXYZValue[i][1],
+                                     Dpoly3DXYZValue[i][2]);
+        if(fabs(Dpoly3DResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
+                    result, Dpoly3DResult[i]);
+            return i;
+        }
+        resultCheb = psDPolynomial3DEval(polyCheb,Dpoly3DXYZChebValue[i][0],Dpoly3DXYZChebValue[i][1],
+                                         Dpoly3DXYZChebValue[i][2]);
+        if(fabs(Dpoly3DChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, Dpoly3DChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psDPolynomial3DAlloc(TERMS, TERMS, TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psDPolynomial3DEval(polyOrd,0.0, 0.0, 0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+psS32 testPoly3DEvalVector(void)
+{
+    // Allocate polynomial
+    psPolynomial3D* polyOrd  = psPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psPolynomial3D* polyCheb = psPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                polyOrd->coeff[i][j][k] = poly3DCoeff[i][j][k];
+                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
+                polyCheb->coeff[i][j][k] = 1.0;
+                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
+            }
+        }
+    }
+
+    // Create input vectors
+    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrdX->data.F32[i] = poly3DXYZValue[i][0];
+        inputOrdY->data.F32[i] = poly3DXYZValue[i][1];
+        inputOrdZ->data.F32[i] = poly3DXYZValue[i][2];
+        inputChebX->data.F32[i] = poly3DXYZChebValue[i][0];
+        inputChebY->data.F32[i] = poly3DXYZChebValue[i][1];
+        inputChebZ->data.F32[i] = poly3DXYZChebValue[i][2];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F32);
+        return 2;
+    }
+    psVector* outputCheb = psPolynomial3DEvalVector(polyCheb,inputChebX,inputChebY,inputChebZ);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F32);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(poly3DResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
+                    i, outputOrd->data.F32[i], poly3DResult[i]);
+            return i*5;
+        }
+        if(fabs(poly3DChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
+                    i, outputCheb->data.F32[i], poly3DChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psPolynomial3DEvalVector(NULL, inputOrdX, inputOrdY, inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial3DEvalVector(polyOrd,NULL, inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial3DEvalVector(polyOrd, inputOrdX, NULL,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 62;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial3DEvalVector(polyOrd, inputOrdX,inputOrdY,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 63;
+    }
+
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdX->type.type = PS_TYPE_U8;
+    if(psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 65;
+    }
+    inputOrdX->type.type = PS_TYPE_F32;
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdY->type.type = PS_TYPE_U8;
+    if(psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 66;
+    }
+    inputOrdY->type.type = PS_TYPE_F32;
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdZ->type.type = PS_TYPE_U8;
+    if(psPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 67;
+    }
+    inputOrdZ->type.type = PS_TYPE_F32;
+
+    psFree(inputOrdX);
+    psFree(inputOrdY);
+    psFree(inputOrdZ);
+    psFree(inputChebX);
+    psFree(inputChebY);
+    psFree(inputChebZ);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
+psS32 testDPoly3DEvalVector(void)
+{
+    // Allocate polynomial
+    psDPolynomial3D* polyOrd = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psDPolynomial3D* polyCheb = psDPolynomial3DAlloc(TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                polyOrd->coeff[i][j][k] = Dpoly3DCoeff[i][j][k];
+                polyOrd->mask[i][j][k]  = poly3DMask[i][j][k];
+                polyCheb->coeff[i][j][k] = 1.0;
+                polyCheb->mask[i][j][k]  = poly3DMask[i][j][k];
+            }
+        }
+    }
+
+    // Create input vectors
+    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrdX->data.F64[i]  = Dpoly3DXYZValue[i][0];
+        inputOrdY->data.F64[i]  = Dpoly3DXYZValue[i][1];
+        inputOrdZ->data.F64[i]  = Dpoly3DXYZValue[i][2];
+        inputChebX->data.F64[i] = Dpoly3DXYZChebValue[i][0];
+        inputChebY->data.F64[i] = Dpoly3DXYZChebValue[i][1];
+        inputChebZ->data.F64[i] = Dpoly3DXYZChebValue[i][2];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F64);
+        return 2;
+    }
+    psVector* outputCheb = psDPolynomial3DEvalVector(polyCheb,inputChebX,inputChebY,inputChebZ);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F64);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(Dpoly3DResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
+                    i, outputOrd->data.F64[i], Dpoly3DResult[i]);
+            return i*5;
+        }
+        if(fabs(Dpoly3DChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
+                    i, outputCheb->data.F64[i], Dpoly3DChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psDPolynomial3DEvalVector(NULL,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial3DEvalVector(polyOrd,NULL,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,NULL,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 62;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 63;
+    }
+
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdX->type.type = PS_TYPE_U8;
+    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 64;
+    }
+    inputOrdX->type.type = PS_TYPE_F64;
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdY->type.type = PS_TYPE_U8;
+    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 65;
+    }
+    inputOrdY->type.type = PS_TYPE_F64;
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdZ->type.type = PS_TYPE_U8;
+    if(psDPolynomial3DEvalVector(polyOrd,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 66;
+    }
+    inputOrdZ->type.type = PS_TYPE_F64;
+
+    psFree(inputOrdX);
+    psFree(inputOrdY);
+    psFree(inputOrdZ);
+    psFree(inputChebX);
+    psFree(inputChebY);
+    psFree(inputChebZ);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psFunc11.c
===================================================================
--- /trunk/psLib/test/math/tst_psFunc11.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psFunc11.c	(revision 4547)
@@ -0,0 +1,804 @@
+/** tst_psFunc11.c
+*
+*  This test driver will exercise the psPolynomialXDEval functions for both
+*  ORD and CHEB type polynomials.
+*
+*  @version  $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*
+***************************************************************************/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define  TERMS        4
+#define  TESTPOINTS   5
+#define  ERROR_TOL    0.001
+
+static psS32 testPoly4DEval(void);
+static psS32 testDPoly4DEval(void);
+static psS32 testPoly4DEvalVector(void);
+static psS32 testDPoly4DEvalVector(void);
+
+testDescription tests[] = {
+                              {testPoly4DEval,583,"psPolynomial4DEval",0,false},
+                              {testDPoly4DEval,582,"psDPolynomial4DEval",0,false},
+                              {testPoly4DEvalVector,000,"psPolynomial4DEvalVector",0,false},
+                              {testDPoly4DEvalVector,000,"psDPolynomial4DEvalVector",0,false},
+                              {NULL}
+                          };
+
+psF32 poly4DCoeff[TERMS][TERMS][TERMS][TERMS] = {
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            },
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            },
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            },
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            }
+        };
+psF64 Dpoly4DCoeff[TERMS][TERMS][TERMS][TERMS] = {
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            },
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            },
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            },
+            {
+                {
+                    { -1.1,  1.2, -1.3,  1.4},
+                    {  1.5, -1.6,  1.7, -1.8},
+                    {  0.1, -0.2,  0.3, -0.4},
+                    { -0.5,  0.6, -0.7,  0.8}
+                },
+                {
+                    { -2.1,  2.2, -2.3,  2.4},
+                    {  2.5, -2.6,  2.7, -2.8},
+                    {  3.1, -3.2,  3.3, -3.4},
+                    { -3.5,  3.6, -3.7,  3.8}
+                },
+                { { -4.1,  4.2, -4.3,  4.4},
+                  {  4.5, -4.6,  4.7, -4.8},
+                  {  5.1, -5.2,  5.3, -5.4},
+                  { -5.5,  5.6, -5.7,  5.8}
+                },
+                { { -6.1,  6.2, -6.3,  6.4},
+                  {  6.5, -6.6,  6.7, -6.8},
+                  {  7.1, -7.2,  7.3, -7.4},
+                  { -7.5,  7.6, -7.7,  7.8}
+                }
+            }
+        };
+
+psF32 poly4DMask[TERMS][TERMS][TERMS][TERMS]    = {
+            {
+                {
+                    {  0,    0,    0,    1},
+                    {  0,    0,    1,    0},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0}
+                },
+                {
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0},
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                }
+            },
+            {
+                {
+                    {  0,    0,    0,    1},
+                    {  0,    0,    1,    0},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0}
+                },
+                {
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0},
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                }
+            },
+            {
+                {
+                    {  0,    0,    0,    1},
+                    {  0,    0,    1,    0},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0}
+                },
+                {
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0},
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                }
+            },
+            {
+                {
+                    {  0,    0,    0,    1},
+                    {  0,    0,    1,    0},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0},
+                    {  1,    0,    0,    0}
+                },
+                {
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0},
+                    {  0,    1,    0,    0},
+                    {  0,    0,    1,    0}
+                },
+                {
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1},
+                    {  1,    0,    0,    0},
+                    {  0,    0,    0,    1}
+                }
+            }
+        };
+
+psF32 poly4DWXYZValue[TESTPOINTS][4] = {
+                                           {  0.450, -0.780,  0.500, -0.123},
+                                           {  0.297,  0.153, -0.354,  0.000},
+                                           {  0.000,  0.153, -0.354,  0.321},
+                                           {  0.297,  0.000, -0.354,  0.321},
+                                           {  0.297,  0.153,  0.000,  0.321}
+                                       };
+psF64 Dpoly4DWXYZValue[TESTPOINTS][4] = {
+                                            {  0.450, -0.780,  0.500, -0.123},
+                                            {  0.297,  0.153, -0.354,  0.000},
+                                            {  0.000,  0.153, -0.354,  0.321},
+                                            {  0.297,  0.000, -0.354,  0.321},
+                                            {  0.297,  0.153,  0.000,  0.321}
+                                        };
+
+psF32 poly4DResult[TESTPOINTS]  = { -3.588753, -2.439566, -1.175955, -1.645497, -1.216915};
+psF64 Dpoly4DResult[TESTPOINTS]  = { -3.588753, -2.439566, -1.175955, -1.645497, -1.216915};
+
+psF32 poly4DWXYZChebValue[TESTPOINTS][4] = {
+            {  0.100,  0.000,  0.250, -0.250},
+            {  0.100, -0.250,  0.000,  0.250},
+            {  0.100,  0.250, -0.250,  0.000},
+            {  0.300,  0.200, -0.300, -0.400},
+            { -0.780,  0.990, -0.010,  0.500}
+        };
+psF64 Dpoly4DWXYZChebValue[TESTPOINTS][4] = {
+            {  0.100,  0.000,  0.250, -0.250},
+            {  0.100, -0.250,  0.000,  0.250},
+            {  0.100,  0.250, -0.250,  0.000},
+            {  0.300,  0.200, -0.300, -0.400},
+            { -0.780,  0.990, -0.010,  0.500}
+        };
+psF32 poly4DChebResult[TESTPOINTS]   = { -0.216563, -0.297000, -0.033000, 0.432198, 1.785601 };
+psF64 Dpoly4DChebResult[TESTPOINTS]  = { -0.216563, -0.297000, -0.033000, 0.432198, 1.785601 };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return !runTestSuite(stderr,"psPolynomialXDEval", tests, argc, argv);
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testPoly4DEval(void)
+{
+    psF32  result;
+    psF32  resultCheb;
+
+    // Allocate polynomial structure
+    psPolynomial4D*  polyOrd  = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psPolynomial4D*  polyCheb = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                for(psS32 l = 0; l < TERMS; l++) {
+                    polyOrd->coeff[i][j][k][l] = poly4DCoeff[i][j][k][l];
+                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                    polyCheb->coeff[i][j][k][l] = 1.0;
+                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                }
+            }
+        }
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psPolynomial4DEval(polyOrd,poly4DWXYZValue[i][0],poly4DWXYZValue[i][1],
+                                    poly4DWXYZValue[i][2], poly4DWXYZValue[i][3]);
+        if(fabs(poly4DResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %g not as expected %g",
+                    result, poly4DResult[i]);
+            return i;
+        }
+        resultCheb = psPolynomial4DEval(polyCheb,poly4DWXYZChebValue[i][0], poly4DWXYZChebValue[i][1],
+                                        poly4DWXYZChebValue[i][2], poly4DWXYZChebValue[i][3]);
+        if(fabs(poly4DChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, poly4DChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psPolynomial4DAlloc(TERMS, TERMS, TERMS, TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psPolynomial4DEval(polyOrd,0.0, 0.0, 0.0, 0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+// This test will verify operation of 1D polynomial evaluation
+psS32 testDPoly4DEval(void)
+{
+    psF64  result;
+    psF64  resultCheb;
+
+    // Allocate polynomial structure
+    psDPolynomial4D*  polyOrd = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psDPolynomial4D*  polyCheb = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                for(psS32 l = 0; l < TERMS; l++) {
+                    polyOrd->coeff[i][j][k][l] = Dpoly4DCoeff[i][j][k][l];
+                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                    polyCheb->coeff[i][j][k][l] = 1.0;
+                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                }
+            }
+        }
+    }
+    // Evaluate test points and verify results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        result = psDPolynomial4DEval(polyOrd,Dpoly4DWXYZValue[i][0],Dpoly4DWXYZValue[i][1],
+                                     Dpoly4DWXYZValue[i][2],Dpoly4DWXYZValue[i][3]);
+        if(fabs(Dpoly4DResult[i]-result) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated value %lg not as expected %lg",
+                    result, Dpoly4DResult[i]);
+            return i;
+        }
+        resultCheb = psDPolynomial4DEval(polyCheb,Dpoly4DWXYZChebValue[i][0],Dpoly4DWXYZChebValue[i][1],
+                                         Dpoly4DWXYZChebValue[i][2],Dpoly4DWXYZChebValue[i][3]);
+        if(fabs(Dpoly4DChebResult[i]-resultCheb) > ERROR_TOL ) {
+            psError(PS_ERR_UNKNOWN,true,"Evaluated Chebyshev value %lg not as expected %lg",
+                    resultCheb, Dpoly4DChebResult[i]);
+            return 5*i;
+        }
+    }
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    // Allocate polynomial with invalid type
+    polyOrd = psDPolynomial4DAlloc(TERMS, TERMS, TERMS, TERMS, 99);
+    // Attempt to evaluation invalid polynomial type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid type");
+    result = psDPolynomial4DEval(polyOrd,0.0, 0.0, 0.0, 0.0);
+    if ( !isnan(result) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN for invalid polynomial type");
+        return 20;
+    }
+    psFree(polyOrd);
+
+    return 0;
+}
+
+psS32 testPoly4DEvalVector(void)
+{
+    // Allocate polynomial
+    psPolynomial4D* polyOrd  = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psPolynomial4D* polyCheb = psPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                for(psS32 l = 0; l < TERMS; l++) {
+                    polyOrd->coeff[i][j][k][l] = poly4DCoeff[i][j][k][l];
+                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                    polyCheb->coeff[i][j][k][l] = 1.0;
+                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                }
+            }
+        }
+    }
+
+    // Create input vectors
+    psVector* inputOrdW  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebW = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F32);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrdW->data.F32[i] = poly4DWXYZValue[i][0];
+        inputOrdX->data.F32[i] = poly4DWXYZValue[i][1];
+        inputOrdY->data.F32[i] = poly4DWXYZValue[i][2];
+        inputOrdZ->data.F32[i] = poly4DWXYZValue[i][3];
+        inputChebW->data.F32[i] = poly4DWXYZChebValue[i][0];
+        inputChebX->data.F32[i] = poly4DWXYZChebValue[i][1];
+        inputChebY->data.F32[i] = poly4DWXYZChebValue[i][2];
+        inputChebZ->data.F32[i] = poly4DWXYZChebValue[i][3];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F32);
+        return 2;
+    }
+    psVector* outputCheb = psPolynomial4DEvalVector(polyCheb,inputChebW,inputChebX,inputChebY,inputChebZ);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F32) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F32);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(poly4DResult[i]-outputOrd->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %g not equal to expected %g",
+                    i, outputOrd->data.F32[i], poly4DResult[i]);
+            return i*5;
+        }
+        if(fabs(poly4DChebResult[i]-outputCheb->data.F32[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %g not equal to expected %g",
+                    i, outputCheb->data.F32[i], poly4DChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psPolynomial4DEvalVector(NULL, inputOrdW, inputOrdX, inputOrdY, inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial4DEvalVector(polyOrd,NULL,inputOrdX, inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial4DEvalVector(polyOrd, inputOrdW, NULL, inputOrdY, inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 62;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial4DEvalVector(polyOrd, inputOrdW, inputOrdX,NULL,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 63;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psPolynomial4DEvalVector(polyOrd, inputOrdW, inputOrdX,inputOrdY,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 64;
+    }
+
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdX->type.type = PS_TYPE_U8;
+    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 65;
+    }
+    inputOrdX->type.type = PS_TYPE_F32;
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdY->type.type = PS_TYPE_U8;
+    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 66;
+    }
+    inputOrdY->type.type = PS_TYPE_F32;
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdZ->type.type = PS_TYPE_U8;
+    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 67;
+    }
+    inputOrdZ->type.type = PS_TYPE_F32;
+    // Attempt to invoke function with a non F32 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdW->type.type = PS_TYPE_U8;
+    if(psPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F32 input vector");
+        return 68;
+    }
+    inputOrdW->type.type = PS_TYPE_F32;
+
+    psFree(inputOrdW);
+    psFree(inputOrdX);
+    psFree(inputOrdY);
+    psFree(inputOrdZ);
+    psFree(inputChebW);
+    psFree(inputChebX);
+    psFree(inputChebY);
+    psFree(inputChebZ);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
+psS32 testDPoly4DEvalVector(void)
+{
+    // Allocate polynomial
+    psDPolynomial4D* polyOrd = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_ORD);
+    psDPolynomial4D* polyCheb = psDPolynomial4DAlloc(TERMS,TERMS,TERMS,TERMS,PS_POLYNOMIAL_CHEB);
+
+    // Set polynomial members
+    for(psS32 i = 0; i < TERMS; i++) {
+        for(psS32 j = 0; j < TERMS; j++) {
+            for(psS32 k = 0; k < TERMS; k++) {
+                for(psS32 l = 0; l < TERMS; l++) {
+                    polyOrd->coeff[i][j][k][l] = Dpoly4DCoeff[i][j][k][l];
+                    polyOrd->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                    polyCheb->coeff[i][j][k][l] = 1.0;
+                    polyCheb->mask[i][j][k][l]  = poly4DMask[i][j][k][l];
+                }
+            }
+        }
+    }
+
+    // Create input vectors
+    psVector* inputOrdW  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputOrdX  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputOrdY  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputOrdZ  = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebW = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebX = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebY = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    psVector* inputChebZ = psVectorAlloc(TESTPOINTS, PS_TYPE_F64);
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        inputOrdW->data.F64[i]  = Dpoly4DWXYZValue[i][0];
+        inputOrdX->data.F64[i]  = Dpoly4DWXYZValue[i][1];
+        inputOrdY->data.F64[i]  = Dpoly4DWXYZValue[i][2];
+        inputOrdZ->data.F64[i]  = Dpoly4DWXYZValue[i][3];
+        inputChebW->data.F64[i] = Dpoly4DWXYZChebValue[i][0];
+        inputChebX->data.F64[i] = Dpoly4DWXYZChebValue[i][1];
+        inputChebY->data.F64[i] = Dpoly4DWXYZChebValue[i][2];
+        inputChebZ->data.F64[i] = Dpoly4DWXYZChebValue[i][3];
+    }
+
+    // Evaluate the vectors
+    psVector* outputOrd = psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ);
+    if(outputOrd == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputOrd->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputOrd->type.type, PS_TYPE_F64);
+        return 2;
+    }
+    psVector* outputCheb = psDPolynomial4DEvalVector(polyCheb,inputChebW,inputChebX,inputChebY,inputChebZ);
+    if(outputCheb == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected return of NULL.");
+        return 1;
+    }
+    if(outputCheb->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN,true,"Output vector of type %d expected %d",
+                outputCheb->type.type, PS_TYPE_F64);
+        return 2;
+    }
+
+    // Verify the results
+    for(psS32 i = 0; i < TESTPOINTS; i++) {
+        if(fabs(Dpoly4DResult[i]-outputOrd->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"Result[%d] %lg not equal to expected %lg",
+                    i, outputOrd->data.F64[i], Dpoly4DResult[i]);
+            return i*5;
+        }
+        if(fabs(Dpoly4DChebResult[i]-outputCheb->data.F64[i]) > ERROR_TOL) {
+            psError(PS_ERR_UNKNOWN,true,"ResultCheb[%d] %lg not equal to expected %lg",
+                    i, outputCheb->data.F64[i], Dpoly4DChebResult[i]);
+            return i*10;
+        }
+    }
+
+    // Attempt to invoke function with null polynomial
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL polynomial");
+    if(psDPolynomial4DEvalVector(NULL,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL polynomial");
+        return 60;
+    }
+
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial4DEvalVector(polyOrd,NULL,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 61;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,NULL,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 62;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,NULL,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 63;
+    }
+    // Attempt to invoke function with null input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input vector");
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return of NULL expected for NULL input vector");
+        return 64;
+    }
+
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdX->type.type = PS_TYPE_U8;
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 65;
+    }
+    inputOrdX->type.type = PS_TYPE_F64;
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdY->type.type = PS_TYPE_U8;
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 66;
+    }
+    inputOrdY->type.type = PS_TYPE_F64;
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdZ->type.type = PS_TYPE_U8;
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 67;
+    }
+    inputOrdZ->type.type = PS_TYPE_F64;
+    // Attempt to invoke function with a non F64 type input vector
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid input type");
+    inputOrdW->type.type = PS_TYPE_U8;
+    if(psDPolynomial4DEvalVector(polyOrd,inputOrdW,inputOrdX,inputOrdY,inputOrdZ) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Return NULL expected for non-F64 input vector");
+        return 68;
+    }
+    inputOrdW->type.type = PS_TYPE_F64;
+
+    psFree(inputOrdX);
+    psFree(inputOrdY);
+    psFree(inputOrdZ);
+    psFree(inputOrdW);
+    psFree(inputChebW);
+    psFree(inputChebX);
+    psFree(inputChebY);
+    psFree(inputChebZ);
+    psFree(outputOrd);
+    psFree(outputCheb);
+    psFree(polyOrd);
+    psFree(polyCheb);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psHist00.c
===================================================================
--- /trunk/psLib/test/math/tst_psHist00.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psHist00.c	(revision 4547)
@@ -0,0 +1,125 @@
+/*****************************************************************************
+    This routine must ensure that the psHistogram structure is correctly
+    allocated and deallocated by the procedure psHistogramAlloc().
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#define LOWER 20.0
+#define UPPER 30.0
+
+psS32 main()
+{
+    psHistogram *myHist = NULL;
+    psS32 testStatus      = true;
+    psS32 memLeaks        = 0;
+    psS32 i               = 0;
+    psS32 nb              = 0;
+    psS32 numBins         = 0;
+    psS32 currentId       = 0;
+
+    currentId       = psMemGetId();
+    for (nb=0;nb<4;nb++) {
+        if (nb == 0)
+            numBins = 1;
+        if (nb == 1)
+            numBins = 2;
+        if (nb == 2)
+            numBins = 10;
+        if (nb == 3)
+            numBins = 20;
+        /*********************************************************************/
+        /*  Allocate and initialize data structures                          */
+        /*********************************************************************/
+        printPositiveTestHeader(stdout,
+                                "psStats functions",
+                                "Allocate the psHistogram structure.");
+
+        myHist = psHistogramAlloc(LOWER, UPPER, numBins);
+
+        if (myHist->nums->n != numBins) {
+            printf("ERROR: myHist->nums->n is wrong size (%ld)\n", myHist->nums->n);
+            testStatus = false;
+        }
+
+        if (myHist->bounds->n != numBins+1) {
+            printf("ERROR: myHist->bounds->n is wrong size (%ld)\n", myHist->bounds->n);
+            testStatus = false;
+        }
+
+        for (i=0;i<numBins;i++) {
+            if (myHist->nums->data.F32[i] != 0.0) {
+                printf("ERROR: myHist->nums->data.U32[%d] not initialized to 0.\n", i);
+                testStatus = false;
+            }
+            myHist->nums->data.F32[i] = 0.0;
+        }
+
+        if (myHist->minNum != 0) {
+            printf("ERROR: myHist->minNum is %d\n", myHist->minNum);
+            testStatus = false;
+        }
+
+        if (myHist->maxNum != 0) {
+            printf("myHist->maxNum is %d\n", myHist->maxNum);
+            testStatus = false;
+        }
+
+        if (myHist->uniform != true) {
+            printf("ERROR: myHist->uniform is %d\n", myHist->uniform);
+            testStatus = false;
+        }
+
+        for (i=0;i<numBins;i++) {
+            printf("Bin number %d bounds: (%6.3f - %6.3f)\n", i,
+                   myHist->bounds->data.F32[i],
+                   myHist->bounds->data.F32[i+1]);
+        }
+
+        psMemCheckCorruption(1);
+        psFree(myHist);
+        psMemCheckCorruption(1);
+
+        printFooter(stdout,
+                    "psStats functions",
+                    "Allocate the psHistogram structure.",
+                    testStatus);
+    }
+
+
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "Allocate the psHistogram structure. (UPPER<LOWER)");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    myHist = psHistogramAlloc(UPPER, LOWER, numBins);
+    if (myHist != NULL) {
+        printf("ERROR: myHist != NULL\n");
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate the psHistogram structure. (UPPER<LOWER)",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "Deallocate the psHistogram structure.");
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    printFooter(stdout,
+                "psStats functions",
+                "Deallocate the psHistogram structure.",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psHist01.c
===================================================================
--- /trunk/psLib/test/math/tst_psHist01.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psHist01.c	(revision 4547)
@@ -0,0 +1,114 @@
+/*****************************************************************************
+    This routine must ensure that the psHistogram structure is correctly
+    allocated and deallocated by the procedure psHistogramAllocGeneric().
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#define LOWER 20.0
+#define UPPER 30.0
+
+psS32 main()
+{
+    psHistogram *myHist = NULL;
+    psVector *myBounds  = NULL;
+    psS32 testStatus      = true;
+    psS32 memLeaks        = 0;
+    psS32 i               = 0;
+    psS32 nb              = 0;
+    psS32 numBins         = 0;
+    psS32 currentId       = 0;
+
+    currentId       = psMemGetId();
+    for (nb=0;nb<4;nb++) {
+        if (nb == 0)
+            numBins = 1;
+        if (nb == 1)
+            numBins = 2;
+        if (nb == 2)
+            numBins = 10;
+        if (nb == 3)
+            numBins = 20;
+        /*********************************************************************/
+        /*  Allocate and initialize data structures                          */
+        /*********************************************************************/
+        printPositiveTestHeader(stdout,
+                                "psStats functions",
+                                "Allocate the psHistogram structure.");
+        myBounds = psVectorAlloc(numBins+1, PS_TYPE_F32);
+        myBounds->n = myBounds->nalloc;
+        for (i=0;i<numBins+1;i++) {
+            myBounds->data.F32[i] = LOWER + ((UPPER - LOWER) / (float) numBins) *
+                                    (float) i;
+        }
+        myHist = psHistogramAllocGeneric(myBounds);
+
+        if (myHist->nums->n != numBins) {
+            printf("ERROR: myHist->nums->n is wrong size (%ld)\n", myHist->nums->n);
+            testStatus = false;
+        }
+
+        if (myHist->bounds->n != numBins+1) {
+            printf("ERROR: myHist->bounds->n is wrong size (%ld)\n", myHist->bounds->n);
+            testStatus = false;
+        }
+
+        for (i=0;i<numBins;i++) {
+            if (myHist->nums->data.F32[i] != 0.0) {
+                printf("ERROR: myHist->nums->data.F32[%d] not initialized to 0.\n", i);
+                testStatus = false;
+            }
+            myHist->nums->data.F32[i] = 0.0;
+        }
+
+        if (myHist->minNum != 0) {
+            printf("ERROR: myHist->minNum is %d\n", myHist->minNum);
+            testStatus = false;
+        }
+
+        if (myHist->maxNum != 0) {
+            printf("myHist->maxNum is %d\n", myHist->maxNum);
+            testStatus = false;
+        }
+
+        if (myHist->uniform != false) {
+            printf("ERROR: myHist->uniform is %d\n", myHist->uniform);
+            testStatus = false;
+        }
+
+        for (i=0;i<numBins;i++) {
+            printf("Bin number %d bounds: (%6.3f - %6.3f)\n", i,
+                   myHist->bounds->data.F32[i],
+                   myHist->bounds->data.F32[i+1]);
+        }
+        psMemCheckCorruption(1);
+        psFree(myHist);
+        psMemCheckCorruption(1);
+        psFree(myBounds);
+
+        printFooter(stdout,
+                    "psStats functions",
+                    "Allocate the psHistogram structure.",
+                    testStatus);
+    }
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "Deallocate the psHistogram structure.");
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    printFooter(stdout,
+                "psStats functions",
+                "Deallocate the psHistogram structure.",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psHist02.c
===================================================================
--- /trunk/psLib/test/math/tst_psHist02.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psHist02.c	(revision 4547)
@@ -0,0 +1,190 @@
+/*****************************************************************************
+   This routine must ensure that the psHistogram structure is correctly
+   populated by the procedure psGetArrayHistogram().
+ 
+*****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#define MISC_FLOAT_NUMBER 345.0
+#define MISC_INT_NUMBER 345
+#define LOWER 20.0
+#define UPPER 30.0
+#define NUM_DATA 10000
+
+psS32 main()
+{
+    psHistogram * myHist = NULL;
+    psHistogram *myHist2 = NULL;
+    psVector *myData = NULL;
+    psVector *myMask = NULL;
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    psS32 nb = 0;
+    psS32 numBins = 0;
+    psS32 i = 0;
+    psS32 currentId = 0;
+
+    currentId = psMemGetId();
+
+    /*********************************************************************/
+    /*  Allocate and initialize data structures                          */
+    /*********************************************************************/
+    myData = psVectorAlloc( NUM_DATA, PS_TYPE_F32 );
+    myData->n = myData->nalloc;
+    for ( i = 0;i < NUM_DATA;i++ ) {
+        myData->data.F32[ i ] = LOWER + ( ( UPPER - LOWER ) / ( float ) NUM_DATA ) * ( float ) i;
+    }
+
+    myMask = psVectorAlloc( NUM_DATA, PS_TYPE_U8 );
+    myMask->n = myMask->nalloc;
+    for ( i = 0;i < NUM_DATA;i++ ) {
+        if ( i >= ( NUM_DATA / 2 ) ) {
+            myMask->data.U8[ i ] = 1;
+        } else {
+            myMask->data.U8[ i ] = 0;
+        }
+    }
+
+    for ( nb = 0;nb < 4;nb++ ) {
+        if ( nb == 0 )
+            numBins = 1;
+        if ( nb == 1 )
+            numBins = 2;
+        if ( nb == 2 )
+            numBins = 10;
+        if ( nb == 3 )
+            numBins = 20;
+
+        /*********************************************************************/
+        /*  Allocate and Perform Histogram, no mask                          */
+        /*********************************************************************/
+        printPositiveTestHeader( stdout,
+                                 "psStats functions",
+                                 "Allocate and Perform Histogram, no mask" );
+
+        myHist = psHistogramAlloc( LOWER, UPPER, numBins );
+        myHist = psVectorHistogram( myHist, myData, NULL, NULL, 0 );
+
+        for ( i = 0;i < numBins;i++ ) {
+            printf( "Bin number %d bounds: (%.2f - %.2f) data (%f)\n", i,
+                    myHist->bounds->data.F32[ i ],
+                    myHist->bounds->data.F32[ i + 1 ],
+                    myHist->nums->data.F32[ i ] );
+        }
+        psMemCheckCorruption( 1 );
+        psFree( myHist );
+        psMemCheckCorruption( 1 );
+
+        printFooter( stdout,
+                     "psStats functions",
+                     "Allocate and Perform Histogram, no mask",
+                     testStatus );
+
+        /*********************************************************************/
+        /*  Allocate and Perform Histogram with mask                         */
+        /*********************************************************************/
+        printPositiveTestHeader( stdout,
+                                 "psStats functions",
+                                 "Allocate and Perform Histogram with mask" );
+
+        myHist = psHistogramAlloc( LOWER, UPPER, numBins );
+        myHist = psVectorHistogram( myHist, myData, NULL, myMask, 1 );
+
+        for ( i = 0;i < numBins;i++ ) {
+            printf( "Bin number %d bounds: (%6.3f - %6.3f) data (%f)\n", i,
+                    myHist->bounds->data.F32[ i ],
+                    myHist->bounds->data.F32[ i + 1 ],
+                    myHist->nums->data.F32[ i ] );
+        }
+        psMemCheckCorruption( 1 );
+        psFree( myHist );
+        psMemCheckCorruption( 1 );
+
+        printFooter( stdout,
+                     "psStats functions",
+                     "Allocate and Perform Histogram with mask",
+                     testStatus );
+    }
+    psFree( myMask );
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "Calling psVectorHistogram() with various NULL inputs." );
+
+
+
+    // ********************************************************************
+    // Verify the return value is null and program execution doesn't stop,
+    // if input parameter myHist is null.
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    myHist2 = psVectorHistogram( NULL, myData, NULL, NULL, 0 );
+    if ( myHist2 != NULL ) {
+        printf( "ERROR: myHist2!=NULL\n" );
+        testStatus = false;
+    }
+    psFree( myData );
+
+
+    // ********************************************************************
+    // Verify the return value is the same as the input parameter myHist and
+    // program execution doesn't stop, if the input parameter myArray is
+    // null.
+
+    myHist = psHistogramAlloc( LOWER, UPPER, numBins );
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    myHist = psVectorHistogram( myHist, NULL, NULL, NULL, 0 );
+    if ( myHist == NULL ) {
+        printf( "ERROR: myHist==NULL\n" );
+        testStatus = false;
+    }
+    psFree( myHist );
+
+
+    //    exit(0);
+    // ********************************************************************
+    // Verify the return value is the same as the input parameter myHist and
+    // program execution doesn't stop, if the input parameter myArray has no
+    // elements.
+    // NOTE: This code segment is commented out because psVectorAlloc returns
+    // NULL if called with an N element data.
+    /*
+    myData = psVectorAlloc(0, PS_TYPE_F32);
+    myData->n = myData->nalloc;
+    myHist = psHistogramAlloc(LOWER, UPPER, numBins);
+    myHist = psVectorHistogram(myHist, NULL, NULL, NULL, 0);
+    if (myHist == NULL) {
+        printf("ERROR: myHist==NULL\n");
+        testStatus = false;
+    }
+    psFree(myHist);
+    psFree(myData);
+    */
+    printFooter( stdout,
+                 "psStats functions",
+                 "Calling psVectorHistogram() with various NULL inputs.",
+                 testStatus );
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "Deallocate the psHistogram structure." );
+
+    psMemCheckCorruption( 1 );
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if ( 0 != memLeaks ) {
+        psAbort( __func__, "Memory Leaks! (%d leaks)", memLeaks );
+    }
+    psMemCheckCorruption( 1 );
+
+    printFooter( stdout,
+                 "psStats functions",
+                 "Deallocate the psHistogram structure.",
+                 testStatus );
+
+    return ( !testStatus );
+}
Index: /trunk/psLib/test/math/tst_psHist03.c
===================================================================
--- /trunk/psLib/test/math/tst_psHist03.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psHist03.c	(revision 4547)
@@ -0,0 +1,128 @@
+/*****************************************************************************
+    This routine must ensure that the psHistogram structure is correctly
+    allocated and deallocated by the procedure psHistogramAllocGeneric() and
+    that it can be populated correctly by psVectorHistogram().
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#define LOWER 20.0
+#define UPPER 30.0
+#define NUM_DATA 20
+
+psS32 main()
+{
+    psHistogram *myHist = NULL;
+    psVector *myBounds  = NULL;
+    psVector *myData = psVectorAlloc( NUM_DATA, PS_TYPE_F32 );
+    psS32 testStatus      = true;
+    psS32 memLeaks        = 0;
+    psS32 i               = 0;
+    psS32 nb              = 0;
+    psS32 numBins         = 0;
+    psS32 currentId       = 0;
+
+    currentId       = psMemGetId();
+
+    psTraceSetLevel(".psLib", 0);
+
+    myData->n = myData->nalloc;
+    for ( i = 0;i < NUM_DATA;i++ ) {
+        myData->data.F32[ i ] = LOWER + ( ( UPPER - LOWER ) / ( float ) NUM_DATA ) * ( float ) i;
+    }
+
+    for (nb=0;nb<4;nb++) {
+        if (nb == 0)
+            numBins = 1;
+        if (nb == 1)
+            numBins = 2;
+        if (nb == 2)
+            numBins = 10;
+        if (nb == 3)
+            numBins = 20;
+        /*********************************************************************/
+        /*  Allocate and initialize data structures                          */
+        /*********************************************************************/
+        printPositiveTestHeader(stdout,
+                                "psStats functions",
+                                "Allocate the psHistogram structure.");
+        myBounds = psVectorAlloc(numBins+1, PS_TYPE_F32);
+        myBounds->n = myBounds->nalloc;
+        for (i=0;i<numBins+1;i++) {
+            myBounds->data.F32[i] = LOWER + ((UPPER - LOWER) / (float) numBins) *
+                                    (float) i;
+        }
+        myHist = psHistogramAllocGeneric(myBounds);
+
+        if (myHist->nums->n != numBins) {
+            printf("ERROR: myHist->nums->n is wrong size (%ld)\n", myHist->nums->n);
+            testStatus = false;
+        }
+
+        if (myHist->bounds->n != numBins+1) {
+            printf("ERROR: myHist->bounds->n is wrong size (%ld)\n", myHist->bounds->n);
+            testStatus = false;
+        }
+
+        for (i=0;i<numBins;i++) {
+            if (myHist->nums->data.F32[i] != 0.0) {
+                printf("ERROR: myHist->nums->data.F32[%d] not initialized to 0.\n", i);
+                testStatus = false;
+            }
+            myHist->nums->data.F32[i] = 0.0;
+        }
+
+        if (myHist->minNum != 0) {
+            printf("ERROR: myHist->minNum is %d\n", myHist->minNum);
+            testStatus = false;
+        }
+
+        if (myHist->maxNum != 0) {
+            printf("myHist->maxNum is %d\n", myHist->maxNum);
+            testStatus = false;
+        }
+
+        if (myHist->uniform != false) {
+            printf("ERROR: myHist->uniform is %d\n", myHist->uniform);
+            testStatus = false;
+        }
+
+        myHist = psVectorHistogram( myHist, myData, NULL, NULL, 0 );
+        for (i=0;i<numBins;i++) {
+            printf("Bin number %d bounds: (%6.3f - %6.3f): data: (%f)\n", i,
+                   myHist->bounds->data.F32[i],
+                   myHist->bounds->data.F32[i+1],
+                   myHist->nums->data.F32[i]);
+        }
+
+        psMemCheckCorruption(1);
+        psFree(myHist);
+        psMemCheckCorruption(1);
+        psFree(myBounds);
+
+        printFooter(stdout,
+                    "psStats functions",
+                    "Allocate the psHistogram structure.",
+                    testStatus);
+    }
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "Deallocate the psHistogram structure.");
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    printFooter(stdout,
+                "psStats functions",
+                "Deallocate the psHistogram structure.",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psMatrix01.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix01.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix01.c	(revision 4547)
@@ -0,0 +1,131 @@
+/** @file  tst_psMatrix_01.c
+*
+*  @brief Test driver for psMatrix transpose function
+*
+*  This test driver contains the following tests for psMatrix test point 1:
+*     A)  Create input and output images
+*     B)  Transpose input image into output image
+*     C)  Transpose input image into auto allocated NULL output image
+*     D)  Free images and check for leaks
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define TOLERANCE 0.000001
+
+#define CHECK_MATRIX(IMAGE)                                                                                  \
+for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
+    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
+        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
+            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
+                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
+            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
+                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psImage * tempImage = NULL;
+
+    double truthMatrix[3][3] = {{1, 4, 7},
+                                {2, 5, 8},
+                                {3, 6, 9}};
+
+    // Test A - Create input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
+    psImage *inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psImage *outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    inImage->data.F64[0][0] = 1;
+    inImage->data.F64[0][1] = 2;
+    inImage->data.F64[0][2] = 3;
+    inImage->data.F64[1][0] = 4;
+    inImage->data.F64[1][1] = 5;
+    inImage->data.F64[1][2] = 6;
+    inImage->data.F64[2][0] = 7;
+    inImage->data.F64[2][1] = 8;
+    inImage->data.F64[2][2] = 9;
+    psImage *inImageF32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
+    psImage *outImageF32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
+    inImageF32->data.F32[0][0] = 1;
+    inImageF32->data.F32[0][1] = 2;
+    inImageF32->data.F32[0][2] = 3;
+    inImageF32->data.F32[1][0] = 4;
+    inImageF32->data.F32[1][1] = 5;
+    inImageF32->data.F32[1][2] = 6;
+    inImageF32->data.F32[2][0] = 7;
+    inImageF32->data.F32[2][1] = 8;
+    inImageF32->data.F32[2][2] = 9;
+    printFooter(stdout, "psMatrix", "Create input and output images", true);
+
+
+    // Test B - Transpose input image into output image
+    printPositiveTestHeader(stdout, "psMatrix", "Transpose input image into output image");
+    tempImage = outImage;
+    outImage = psMatrixTranspose(outImage, inImage);
+    CHECK_MATRIX(outImage);
+    if (outImage->type.dimen != PS_DIMEN_IMAGE) {
+        printf( "Error: Resulting image is not PS_DIMEN_IMAGE\n");
+    } else if (outImage != tempImage) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+
+    tempImage = outImageF32;
+    outImageF32 = psMatrixTranspose(outImageF32, inImageF32);
+    CHECK_MATRIX(outImageF32);
+    if (outImageF32->type.dimen != PS_DIMEN_IMAGE) {
+        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
+    } else if (outImageF32 != tempImage) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+    printFooter(stdout, "psMatrix", "Transpose input image into output image", true);
+
+
+    // Test C - Transpose input image into auto allocated NULL output image
+    printPositiveTestHeader(stdout, "psMatrix", "Transpose input image into auto allocated NULL output image");
+    psImage *outImageNull = NULL;
+    outImageNull = psMatrixTranspose(outImageNull, inImage);
+    CHECK_MATRIX(outImageNull);
+
+    psImage *outImageNullF32 = NULL;
+    outImageNullF32 = psMatrixTranspose(outImageNullF32, inImageF32);
+    CHECK_MATRIX(outImageNullF32);
+    printFooter(stdout, "psMatrix", "Transpose input image into auto allocated NULL output image", true);
+
+
+    // Test D - Free images and check for leaks
+    printPositiveTestHeader(stdout, "psMatrix", "Free images and check for leaks");
+    psFree(inImage);
+    psFree(outImage);
+    psFree(outImageNull);
+    psFree(inImageF32);
+    psFree(outImageF32);
+    psFree(outImageNullF32);
+    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
+    if (nLeaks != 0) {
+        printf("ERROR: Found %d memory leaks\n", nLeaks);
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if (nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMatrix" , "Free images and check for leaks", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrix02.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix02.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix02.c	(revision 4547)
@@ -0,0 +1,100 @@
+/** @file  tst_psMatrix_02.c
+ *
+ *  @brief Test driver for negative tests for psMatrix transpose function
+ *
+ *  This test driver contains the following tests for psMatrix test point 2:
+ *     A)  Input pointer same as output pointer
+ *     B)  Null input psImage
+ *     C)  Incorrect type for input pointer
+ *     D)  Incorrect type for output pointer
+ *     E)  Matrix not square for output pointer
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+psS32 main(psS32 argc,
+           char* argv[])
+{
+    psImage *nullImage = NULL;
+    psImage *inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psImage *outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psImage *badImage1 = (psImage*)psImageAlloc(3, 3, PS_TYPE_C32);
+    psImage *badImage2 = (psImage*)psImageAlloc(3, 2, PS_TYPE_F64);
+
+    // Test A - Input pointer same as output pointer
+    printPositiveTestHeader(stdout,"psMatrix", "Input pointer same as output pointer");
+    psMemIncrRefCounter(inImage);
+    if (psMatrixTranspose(inImage, inImage) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "inImage = outImage didn't results in NULL return");
+        return 1;
+    }
+    if (psMemGetRefCounter(inImage) != 1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "the output image was not freed on an error.");
+        return 2;
+    }
+    printFooter(stdout, "psMatrix", "Input pointer same as output pointer", true);
+
+    // Test B - Null input psImage
+    printPositiveTestHeader(stdout,"psMatrix", "Null input psImage");
+    psMemIncrRefCounter(outImage);
+    if (psMatrixTranspose(outImage, nullImage) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "inImage = outImage didn't results in NULL return");
+        return 3;
+    }
+    if (psMemGetRefCounter(outImage) != 1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "the output image was not freed on an error.");
+        return 4;
+    }
+    printFooter(stdout, "psMatrix", "Null input psImage", true);
+
+    // Test C - Incorrect type for input pointer
+    printPositiveTestHeader(stdout,"psMatrix", "Incorrect type for input pointer");
+    psMemIncrRefCounter(outImage);
+    if (psMatrixTranspose(outImage, badImage1) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "inImage = outImage didn't results in NULL return");
+        return 5;
+    }
+    if (psMemGetRefCounter(outImage) != 1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "the output image was not freed on an error.");
+        return 6;
+    }
+    printFooter(stdout, "psMatrix", "Incorrect type for input pointer", true);
+
+    // Test D - Incorrect type for output pointer
+    printPositiveTestHeader(stdout,"psMatrix", "Incorrect type for output pointer");
+    badImage1 = psMatrixTranspose(badImage1, inImage);
+    if (badImage1 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "inImage = outImage didn't results in NULL return");
+        return 7;
+    }
+    // check that the type was changed.
+    if (badImage1->type.type != PS_TYPE_F64) {
+        psError(PS_ERR_UNKNOWN, true,
+                "the output image was not freed on an error.");
+        return 8;
+    }
+    printFooter(stdout, "psMatrix", "Incorrect type for output pointer", true);
+
+    // Test E - Matrix not square for output pointer
+    printPositiveTestHeader(stdout,"psMatrix", "Matrix not square for output pointer");
+    psMatrixTranspose(badImage2, inImage);
+    printFooter(stdout, "psMatrix", "Matrix not square for output pointer", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrix03.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix03.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix03.c	(revision 4547)
@@ -0,0 +1,234 @@
+/** @file  tst_psMatrix_03.c
+ *
+ *  @brief Test driver for psMatrix LU functions
+ *
+ *  This test driver contains the following tests for psMatrix test point 3:
+ *     A)  Create input and output images and vectors
+ *     B)  Calculate LU matrix
+ *     C)  Determine solution to matrix equation
+ *     D)  Free input and output images and vectors
+ *     E)  Attempt to use null image input argument
+ *     F)  Attempt to use null input vector argument
+ *     G)  ttempt to use null LU image argument
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define TOLERANCE 0.000001
+
+#define CHECK_MATRIX(IMAGE)                                                                                  \
+for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
+    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
+        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
+            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
+                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
+            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
+                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+#define CHECK_VECTOR(VECTOR)                                                                                 \
+for(psU32 i=0; i<VECTOR->n; i++) {                                                                       \
+    if(VECTOR->type.type == PS_TYPE_F64) {                                                               \
+        if(fabs(VECTOR->data.F64[i]-truthVector[i]) > TOLERANCE) {                                       \
+            printf("Vector values at element %d don't agree %lf vs %lf\n", i,                            \
+                   VECTOR->data.F64[i], truthVector[i]);                                                 \
+        }                                                                                                \
+    } else if(VECTOR->type.type == PS_TYPE_F32){                                                         \
+        if(fabs(VECTOR->data.F32[i]-truthVector[i]) > TOLERANCE) {                                       \
+            printf("Vector values at element %d don't agree %f vs %lf\n", i,                             \
+                   VECTOR->data.F32[i], truthVector[i]);                                                 \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psImage *luImage = NULL;
+    psImage *inImage = NULL;
+    psImage *tempImage = NULL;
+    psVector *tempVector = NULL;
+    psVector *perm = NULL;
+    psVector *outVector = NULL;
+    psVector *inVector = NULL;
+    psImage *luImage32 = NULL;
+    psImage *inImage32 = NULL;
+    psImage *tempImage32 = NULL;
+    psVector *tempVector32 = NULL;
+    psVector *perm32 = NULL;
+    psVector *outVector32 = NULL;
+    psVector *inVector32 = NULL;
+
+    double truthVector[3] = {
+                                4.000000,
+                                -2.000000,
+                                3.000000
+                            };
+
+    double truthMatrix[3][3] = {{4.000000,  5.000000,  6.000000},
+                                {0.750000, -2.750000, -6.500000},
+                                {0.500000, -0.545455, -0.545455}};
+
+
+    // Test A - Create input and output images and vectors
+    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images and vectors");
+    luImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    perm = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    outVector = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    inVector = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    inImage->data.F64[0][0] =  2;
+    inImage->data.F64[0][1] =  4;
+    inImage->data.F64[0][2] =  6;
+    inImage->data.F64[1][0] =  4;
+    inImage->data.F64[1][1] =  5;
+    inImage->data.F64[1][2] =  6;
+    inImage->data.F64[2][0] =  3;
+    inImage->data.F64[2][1] =  1;
+    inImage->data.F64[2][2] = -2;
+    inVector->data.F64[0] = 18.0;
+    inVector->data.F64[1] = 24.0;
+    inVector->data.F64[2] =  4.0;
+    inVector->n = 3;
+    luImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
+    outVector32 = (psVector*)psVectorAlloc(3, PS_TYPE_F32);
+    inVector32 = (psVector*)psVectorAlloc(3, PS_TYPE_F32);
+    inImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
+    inImage32->data.F32[0][0] =  2;
+    inImage32->data.F32[0][1] =  4;
+    inImage32->data.F32[0][2] =  6;
+    inImage32->data.F32[1][0] =  4;
+    inImage32->data.F32[1][1] =  5;
+    inImage32->data.F32[1][2] =  6;
+    inImage32->data.F32[2][0] =  3;
+    inImage32->data.F32[2][1] =  1;
+    inImage32->data.F32[2][2] = -2;
+    inVector32->data.F32[0] = 18.0;
+    inVector32->data.F32[1] = 24.0;
+    inVector32->data.F32[2] =  4.0;
+    inVector32->n = 3;
+    printFooter(stdout, "psMatrix", "Create input and output images and vectors", true);
+
+
+    // Test B - Calculate LU matrix
+    printPositiveTestHeader(stdout, "psMatrix", "Calculate LU matrix");
+    tempImage = luImage;
+    luImage = psMatrixLUD(luImage, &perm, inImage);
+    CHECK_MATRIX(luImage);
+    if(luImage->type.dimen != PS_DIMEN_IMAGE) {
+        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
+    } else if(luImage != tempImage) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+
+    tempImage32 = luImage32;
+    luImage32 = psMatrixLUD(luImage32, &perm32, inImage32);
+    CHECK_MATRIX(luImage32);
+    if(luImage32->type.dimen != PS_DIMEN_IMAGE) {
+        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
+    } else if(luImage32 != tempImage32) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+    printFooter(stdout, "psMatrix", "Calculate LU matrix", true);
+
+    // Test C - Determine solution to matrix equation
+    printPositiveTestHeader(stdout, "psMatrix", "Determine solution to matrix equation");
+    tempVector = outVector;
+    outVector = psMatrixLUSolve(outVector, luImage, inVector, perm);
+    CHECK_VECTOR(outVector);
+    if(outVector->type.dimen != PS_DIMEN_VECTOR) {
+        printf("Error: Resulting image is not PS_DIMEN_VECTOR\n");
+    } else if(outVector != tempVector) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+
+    tempVector32 = outVector32;
+    outVector32 = psMatrixLUSolve(outVector32, luImage32, inVector32, perm32);
+    CHECK_VECTOR(outVector32);
+    if(outVector32->type.dimen != PS_DIMEN_VECTOR) {
+        printf("Error: Resulting image is not PS_DIMEN_VECTOR\n");
+    } else if(outVector32 != tempVector32) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+    printFooter(stdout, "psMatrix", "Determine solution to matrix equation", true);
+
+
+    // Test D - Free input and output images and vectors
+    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images and vectors");
+    psFree(inImage);
+    psFree(luImage);
+    psFree(perm);
+    psFree(outVector);
+    psFree(inVector);
+    psFree(inImage32);
+    psFree(luImage32);
+    psFree(perm32);
+    psFree(outVector32);
+    psFree(inVector32);
+    if( psMemCheckLeaks(0, NULL, stdout, false) ) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected");
+        return 10;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMatrix" ,"Free input and output images and vectors", true);
+
+
+    // Test E - Attempt to use null image input argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null image input argument",
+                            "Invalid operation: inImage or its data is NULL.", 0);
+    psImage *imageTest = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psMatrixLUD(imageTest, NULL, NULL);
+    printFooter(stdout, "psMatrix", "Attempt to use null image input argument", true);
+
+
+    // Test F - Attempt to use null input vector argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input vector argument",
+                            "Invalid operation: inVector or its data is NULL.", 0);
+    psVector *vectorBad = NULL;
+    psVector *vectorBadOut = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    psVector *permBad = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    imageTest = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psMatrixLUSolve(vectorBadOut, imageTest, vectorBad, permBad);
+    printFooter(stdout, "psMatrix", "Attempt to use null input vector argument", true);
+
+
+    // Test G - Attempt to use null LU image argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null LU image argument",
+                            "Invalid operation: inImage or its data is NULL.", 0);
+    vectorBadOut = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    psMatrixLUSolve(vectorBadOut, NULL, vectorBad, permBad);
+    printFooter(stdout, "psMatrix", "Attempt to use null LU image argument", true);
+
+    psFree(permBad);
+    psFree(imageTest);
+
+    if( psMemCheckLeaks(0, NULL, stdout, false) ) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected");
+        return 10;
+    }
+    nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrix04.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix04.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix04.c	(revision 4547)
@@ -0,0 +1,163 @@
+/** @file  tst_psMatrix_04.c
+ *
+ *  @brief Test driver for psMatrix invert function
+ *
+ *  This test driver contains the following tests for psMatrix test point 4:
+ *     A)  Create input and output images
+ *     B)  Invert matrix and calculate determinant
+ *     C)  Calculate determinant only
+ *     D)  Free input and output images
+ *     E)  Attempt to use null input image argument
+ *     F)  Attempt to use null input float argument
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+
+#define TOLERANCE 0.000001
+
+#define CHECK_MATRIX(IMAGE)                                                                                  \
+for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
+    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
+        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
+            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
+                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
+            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
+                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+#define CHECK_VALUE(VALUE)                                                                                   \
+if(fabs(VALUE-truthValue) > TOLERANCE) {                                                                     \
+    printf("Values don't agree %lf vs %lf\n", VALUE, truthValue);                                            \
+}
+
+psS32 main(psS32 argc, char* argv[])
+{
+    float det = 0.0f;
+    float *det2 = NULL;
+    psImage *outImage = NULL;
+    psImage *inImage = NULL;
+    psImage *tempImage = NULL;
+    psImage *outImage32 = NULL;
+    psImage *inImage32 = NULL;
+    psImage *tempImage32 = NULL;
+
+    double truthMatrix[3][3] = {{4.0000000, -4.333333, -2.333333},
+                                {-1.000000,  1.666667,  0.666667},
+                                {-1.000000,  0.666667,  0.666667}};
+    double truthValue = 3.0;
+
+
+    // Test A - Create input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
+    outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    inImage->data.F64[0][0] =  2;
+    inImage->data.F64[0][1] =  4;
+    inImage->data.F64[0][2] =  3;
+    inImage->data.F64[1][0] =  0;
+    inImage->data.F64[1][1] =  1;
+    inImage->data.F64[1][2] = -1;
+    inImage->data.F64[2][0] =  3;
+    inImage->data.F64[2][1] =  5;
+    inImage->data.F64[2][2] =  7;
+
+    outImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
+    inImage32 = (psImage*)psImageAlloc(3, 3, PS_TYPE_F32);
+    inImage32->data.F32[0][0] =  2;
+    inImage32->data.F32[0][1] =  4;
+    inImage32->data.F32[0][2] =  3;
+    inImage32->data.F32[1][0] =  0;
+    inImage32->data.F32[1][1] =  1;
+    inImage32->data.F32[1][2] = -1;
+    inImage32->data.F32[2][0] =  3;
+    inImage32->data.F32[2][1] =  5;
+    inImage32->data.F32[2][2] =  7;
+    printFooter(stdout, "psMatrix", "Create input and output images", true);
+
+
+    // Test B - Invert matrix and calculate determinant
+    printPositiveTestHeader(stdout, "psMatrix", "Invert matrix and calculate determinant");
+    tempImage = outImage;
+    outImage = psMatrixInvert(outImage, inImage, &det);
+    CHECK_MATRIX(outImage);
+    CHECK_VALUE(det);
+    if(outImage->type.dimen != PS_DIMEN_IMAGE) {
+        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
+    } else if(outImage != tempImage) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+    det = 0.0f;
+    tempImage32 = outImage32;
+    outImage32 = psMatrixInvert(outImage32, inImage32, &det);
+    CHECK_MATRIX(outImage32);
+    CHECK_VALUE(det);
+    if(outImage32->type.dimen != PS_DIMEN_IMAGE) {
+        printf("Error: Resulting image is not PS_DIMEN_IMAGE\n");
+    } else if(outImage32 != tempImage32) {
+        printf("Error: Return pointer not equal to output argument pointer\n");
+    }
+    printFooter(stdout, "psMatrix", "Invert matrix and calculate determinant", true);
+
+
+    // Test C - Calculate determinant only
+    printPositiveTestHeader(stdout, "psMatrix", "Calculate determinant only");
+    det2 = psMatrixDeterminant(inImage);
+    CHECK_VALUE(*det2);
+    psFree(det2);
+    det2 = psMatrixDeterminant(inImage32);
+    CHECK_VALUE(*det2);
+    psFree(det2);
+    printFooter(stdout, "psMatrix", "Calculate determinant only", true);
+
+
+    // Test D - Free input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images");
+    psFree(outImage);
+    psFree(inImage);
+    psFree(outImage32);
+    psFree(inImage32);
+    if(psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
+        return 10;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMatrix" ,"Free input and output images", true);
+
+
+    // Test E - Attempt to use null input image argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input image argument",
+                            "Invalid operation: inImage or its data is NULL.", 0);
+    psImage *badOutImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psMatrixInvert(badOutImage, NULL, &det);
+    printFooter(stdout, "psMatrix", "Attempt to use null input image argument", true);
+
+
+    // Test F - Attempt to use null input float argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input float argument",
+                            "Invalid operation: determinant argument is NULL.", 0);
+    psImage *badInImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
+    psMatrixInvert(badOutImage, badInImage, NULL);
+    printFooter(stdout, "psMatrix", "Attempt to use null input float argument", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrix05.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix05.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix05.c	(revision 4547)
@@ -0,0 +1,118 @@
+/** @file  tst_psMatrix_05.c
+*
+*  @brief Test driver for psMatrix multiplication function
+*
+*  This test driver contains the following tests for psMatrix test point 5:
+*     A)  Create input and output images
+*     B)  Multiply images
+*     C)  Free input and output images
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define TOLERANCE 0.000001
+
+#define CHECK_MATRIX(IMAGE)                                                                                  \
+for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
+    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
+        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
+            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
+                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
+            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
+                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+
+psS32 main( psS32 argc,
+            char* argv[] )
+{
+    psImage * outImage = NULL;
+    psImage *inImage1 = NULL;
+    psImage *inImage2 = NULL;
+    psImage * outImage32 = NULL;
+    psImage *inImage132 = NULL;
+    psImage *inImage232 = NULL;
+
+    double truthMatrix[3][3] = {{  0.0, 52.0},
+                                {-14.0, 51.0}};
+
+    // Test A - Create input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
+    outImage = (psImage*) psImageAlloc(2, 2, PS_TYPE_F64);
+    inImage1 = (psImage*) psImageAlloc(3, 2, PS_TYPE_F64);
+    inImage2 = (psImage*) psImageAlloc(2, 3, PS_TYPE_F64);
+    inImage1->data.F64[0][0] = 2;
+    inImage1->data.F64[0][1] = 3;
+    inImage1->data.F64[0][2] = 4;
+    inImage1->data.F64[1][0] = -1;
+    inImage1->data.F64[1][1] = 2;
+    inImage1->data.F64[1][2] = 5;
+    inImage2->data.F64[0][0] = 4;
+    inImage2->data.F64[0][1] = 1;
+    inImage2->data.F64[1][0] = 0;
+    inImage2->data.F64[1][1] = 6;
+    inImage2->data.F64[2][0] = -2;
+    inImage2->data.F64[2][1] = 8;
+    outImage32 = (psImage*)psImageAlloc(2, 2, PS_TYPE_F32);
+    inImage132 = (psImage*)psImageAlloc(3, 2, PS_TYPE_F32);
+    inImage232 = (psImage*)psImageAlloc(2, 3, PS_TYPE_F32);
+    inImage132->data.F32[0][0] = 2;
+    inImage132->data.F32[0][1] = 3;
+    inImage132->data.F32[0][2] = 4;
+    inImage132->data.F32[1][0] = -1;
+    inImage132->data.F32[1][1] = 2;
+    inImage132->data.F32[1][2] = 5;
+    inImage232->data.F32[0][0] = 4;
+    inImage232->data.F32[0][1] = 1;
+    inImage232->data.F32[1][0] = 0;
+    inImage232->data.F32[1][1] = 6;
+    inImage232->data.F32[2][0] = -2;
+    inImage232->data.F32[2][1] = 8;
+    printFooter( stdout, "psMatrix", "Create input and output images", true );
+
+
+    // Test B - Multiply images
+    printPositiveTestHeader(stdout, "psMatrix", "Multiply images");
+    psMatrixMultiply(outImage, inImage1, inImage2);
+    CHECK_MATRIX(outImage);
+    psMatrixMultiply(outImage32, inImage132, inImage232);
+    CHECK_MATRIX(outImage32);
+    printFooter(stdout, "psMatrix", "Multiply images", true);
+
+
+    // Test C - Free input and output images
+    printPositiveTestHeader( stdout, "psMatrix", "Free input and output images" );
+    psFree(outImage);
+    psFree(inImage1);
+    psFree(inImage2);
+    psFree(outImage32);
+    psFree(inImage132);
+    psFree(inImage232);
+    psS32 nLeaks = psMemCheckLeaks( 0, NULL, stdout, false );
+    if ( nLeaks != 0 ) {
+        printf( "ERROR: Found %d memory leaks\n", nLeaks );
+    }
+    psS32 nBad = psMemCheckCorruption( 0 );
+    if ( nBad ) {
+        printf( "ERROR: Found %d bad memory blocks\n", nBad );
+    }
+    printFooter( stdout, "psMatrix" , "Free input and output images", true );
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrix06.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix06.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix06.c	(revision 4547)
@@ -0,0 +1,124 @@
+/** @file  tst_psMatrix_06.c
+*
+*  @brief Test driver for psMatrix Eigenvectors function
+*
+*  This test driver contains the following tests for psMatrix test point 6:
+*     A)  Create input and output images
+*     B)  Calculate Eigenvectors
+*     C)  Free input and output images
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define TOLERANCE 0.000001
+
+#define CHECK_MATRIX(IMAGE)                                                                                  \
+for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
+    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
+        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
+            if(fabs(IMAGE->data.F64[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
+                       IMAGE->data.F64[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
+            if(fabs(IMAGE->data.F32[i][j]-truthMatrix[i][j]) > TOLERANCE) {                              \
+                printf("Matrix values at element %d, %d don't agree %f vs %lf\n", i, j,                  \
+                       IMAGE->data.F32[i][j], truthMatrix[i][j]);                                        \
+            }                                                                                            \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psImage * outImage = NULL;
+    psImage *inImage = NULL;
+    psImage * outImage32 = NULL;
+    psImage *inImage32 = NULL;
+
+    double truthMatrix[4][4] = {{0.792608,  0.582076, -0.179186, -0.029193},
+                                {0.451923, -0.370502,  0.741918,  0.328712},
+                                {0.322416, -0.509579, -0.100228, -0.791411},
+                                {0.252161, -0.514048, -0.638283,  0.514553}};
+
+
+    // Test A - Create input and output images
+    printPositiveTestHeader( stdout, "psMatrix", "Create input and output images" );
+    outImage = (psImage*) psImageAlloc(4, 4, PS_TYPE_F64);
+    inImage = (psImage*)  psImageAlloc(4, 4, PS_TYPE_F64);
+
+    inImage->data.F64[0][0] = 1./1.;
+    inImage->data.F64[0][1] = 1./2.;
+    inImage->data.F64[0][2] = 1./3.;
+    inImage->data.F64[0][3] = 1./4.;
+    inImage->data.F64[1][0] = 1./2.;
+    inImage->data.F64[1][1] = 1./3.;
+    inImage->data.F64[1][2] = 1./4.;
+    inImage->data.F64[1][3] = 1./5.;
+    inImage->data.F64[2][0] = 1./3.;
+    inImage->data.F64[2][1] = 1./4.;
+    inImage->data.F64[2][2] = 1./5.;
+    inImage->data.F64[2][3] = 1./6.;
+    inImage->data.F64[3][0] = 1./4.;
+    inImage->data.F64[3][1] = 1./5.;
+    inImage->data.F64[3][2] = 1./6.;
+    inImage->data.F64[3][3] = 1./7.;
+
+    outImage32 = (psImage*) psImageAlloc(4, 4, PS_TYPE_F32);
+    inImage32 = (psImage*)  psImageAlloc(4, 4, PS_TYPE_F32);
+    inImage32->data.F32[0][0] = 1./1.;
+    inImage32->data.F32[0][1] = 1./2.;
+    inImage32->data.F32[0][2] = 1./3.;
+    inImage32->data.F32[0][3] = 1./4.;
+    inImage32->data.F32[1][0] = 1./2.;
+    inImage32->data.F32[1][1] = 1./3.;
+    inImage32->data.F32[1][2] = 1./4.;
+    inImage32->data.F32[1][3] = 1./5.;
+    inImage32->data.F32[2][0] = 1./3.;
+    inImage32->data.F32[2][1] = 1./4.;
+    inImage32->data.F32[2][2] = 1./5.;
+    inImage32->data.F32[2][3] = 1./6.;
+    inImage32->data.F32[3][0] = 1./4.;
+    inImage32->data.F32[3][1] = 1./5.;
+    inImage32->data.F32[3][2] = 1./6.;
+    inImage32->data.F32[3][3] = 1./7.;
+    printFooter(stdout, "psMatrix", "Create input and output images", true);
+
+
+    // Test B - Calculate Eigenvectors
+    printPositiveTestHeader(stdout, "psMatrix", "Calculate Eigenvectors");
+    psMatrixEigenvectors(outImage, inImage);
+    CHECK_MATRIX(outImage);
+    psMatrixEigenvectors(outImage32, inImage32);
+    CHECK_MATRIX(outImage32);
+    printFooter(stdout, "psMatrix", "Calculate Eigenvectors", true);
+
+
+    // Test C - Free input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images");
+    psFree(outImage);
+    psFree(inImage);
+    psFree(outImage32);
+    psFree(inImage32);
+    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
+    if (nLeaks != 0) {
+        printf("ERROR: Found %d memory leaks\n", nLeaks);
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if (nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMatrix" , "Free input and output images", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrix07.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrix07.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrix07.c	(revision 4547)
@@ -0,0 +1,313 @@
+/** @file  tst_psMatrix_07.c
+ *
+ *  @brief Test driver for psMatrix vector conversion functions
+ *
+ *  This test driver contains the following tests for psMatrix test point 7:
+ *     A)  Create input and output images and vectors
+ *     B)  Convert matrix to PS_DIMEN_VECTOR vector
+ *     C)  Attempt to use null image input argument
+ *     D)  Convert matrix to PS_DIMEN_TRANSV vector
+ *     E)  Improper image size
+ *     F)  Convert PS_DIMEN_VECTOR vector to matrix
+ *     G)  Attempt to use null input vector argument
+ *     H)  Convert PS_DIMEN_TRANSV vector to matrix
+ *     I)  Free input and output images and vectors
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+
+#define TOLERANCE 0.000001
+
+#define CHECK_MATRIX(IMAGE,TRUTH)                                                                        \
+for(psU32 i=0; i<IMAGE->numRows; i++) {                                                                  \
+    for(psU32 j=0; j<IMAGE->numCols; j++) {                                                              \
+        if(IMAGE->type.type == PS_TYPE_F64) {                                                            \
+            if(fabs(IMAGE->data.F64[i][j]-TRUTH[i][j]) > TOLERANCE) {                                    \
+                printf("Matrix values at element %d, %d don't agree %lf vs %lf\n", i, j,                 \
+                       IMAGE->data.F64[i][j], TRUTH[i][j]);                                              \
+            }                                                                                            \
+        } else if(IMAGE->type.type == PS_TYPE_F32){                                                      \
+            if(fabs(IMAGE->data.F32[i][j]-TRUTH[i][j]) > TOLERANCE) {                                    \
+                printf("Matrix values at element %d, %d don't agree %f vs %f\n", i, j,                  \
+                       IMAGE->data.F32[i][j], TRUTH[i][j]);                                              \
+            }                                                                                            \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+#define CHECK_VECTOR(VECTOR)                                                                                 \
+for(psU32 i=0; i<VECTOR->n; i++) {                                                                       \
+    if(VECTOR->type.type == PS_TYPE_F64) {                                                               \
+        if(fabs(VECTOR->data.F64[i]-truthVector[i]) > TOLERANCE) {                                       \
+            printf("Vector values at element %d don't agree %lf vs %lf\n", i,                            \
+                   VECTOR->data.F64[i], truthVector[i]);                                                 \
+        }                                                                                                \
+    } else if(VECTOR->type.type == PS_TYPE_F32){                                                         \
+        if(fabs(VECTOR->data.F32[i]-truthVector_32[i]) > TOLERANCE) {                                       \
+            printf("Vector values at element %d don't agree %f vs %lf\n", i,                             \
+                   VECTOR->data.F32[i], truthVector[i]);                                                 \
+        }                                                                                                \
+    }                                                                                                    \
+}
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psVector *v1 = NULL;
+    psVector *v1_32 = NULL;
+    psVector *tempVector = NULL;
+    psVector *tempVector_32 = NULL;
+    psImage *tempImage = NULL;
+    psImage *tempImage_32 = NULL;
+    psImage *m1 = NULL;
+    psImage *m1_32 = NULL;
+    psVector *v2 = NULL;
+    psVector *v2_32 = NULL;
+    psVector *v3 = NULL;
+    psVector *v3_32 = NULL;
+    psImage *m2 = NULL;
+    psImage *m2_32 = NULL;
+    psImage *m3 = NULL;
+    psImage *m3_32 = NULL;
+    psImage *m4 = NULL;
+    psImage *m4_32 = NULL;
+    psImage *badImage = NULL;
+    psImage *badImage_32 = NULL;
+
+    psF64 truthVector[3] = {0.0, 1.0, 2.0};
+    psF32 truthVector_32[3] = {0.0, 1.0, 2.0};
+    psF64 truthMatrix[3][1] = {{0.0}, {1.0}, {2.0}};
+    psF32 truthMatrix_32[3][1] = {{0.0}, {1.0}, {2.0}};
+
+    // Test A - Create input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images and vectors");
+    v1 = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    v1_32 = (psVector*)psVectorAlloc(3, PS_TYPE_F32);
+    m1 = (psImage*)psImageAlloc(1, 3, PS_TYPE_F64);
+    m1_32 = (psImage*)psImageAlloc(1,3,PS_TYPE_F32);
+    v2 = (psVector*)psVectorAlloc(3, PS_TYPE_F64);
+    v2_32 = (psVector*)psVectorAlloc(3,PS_TYPE_F32);
+    m2 = (psImage*)psImageAlloc(1, 3, PS_TYPE_F64);
+    m2_32 = (psImage*)psImageAlloc(1,3,PS_TYPE_F32);
+    m3 = (psImage*)psImageAlloc(3, 1, PS_TYPE_F64);
+    m3_32 = (psImage*)psImageAlloc(3,1,PS_TYPE_F32);
+    m4 = (psImage*)psImageAlloc(3, 1, PS_TYPE_F64);
+    m4_32 = (psImage*)psImageAlloc(3,1,PS_TYPE_F32);
+    badImage = (psImage*)psImageAlloc(2, 2, PS_TYPE_F64);
+    badImage_32 = (psImage*)psImageAlloc(2,2,PS_TYPE_F32);
+    m1->data.F64[0][0] = 0.0;
+    m1->data.F64[1][0] = 1.0;
+    m1->data.F64[2][0] = 2.0;
+    m1_32->data.F32[0][0] = 0.0;
+    m1_32->data.F32[1][0] = 1.0;
+    m1_32->data.F32[2][0] = 2.0;
+    v2->data.F64[0] = 0.0;
+    v2->data.F64[1] = 1.0;
+    v2->data.F64[2] = 2.0;
+    v2->n = 3;
+    v2_32->data.F32[0] = 0.0;
+    v2_32->data.F32[1] = 1.0;
+    v2_32->data.F32[2] = 2.0;
+    v2_32->n = 3;
+    m4->data.F64[0][0] = 0.0;
+    m4->data.F64[0][1] = 1.0;
+    m4->data.F64[0][2] = 2.0;
+    m4_32->data.F32[0][0] = 0.0;
+    m4_32->data.F32[0][1] = 1.0;
+    m4_32->data.F32[0][2] = 2.0;
+    printFooter(stdout, "psMatrix", "Create input and output images and vectors", true);
+
+    // Test B - Convert matrix to PS_DIMEN_VECTOR vector
+    printPositiveTestHeader(stdout, "psMatrix", "Convert matrix to PS_DIMEN_VECTOR vector");
+    tempVector = v1;
+    v1 = psMatrixToVector(v1, m1);
+    CHECK_VECTOR(v1);
+    if(v1->type.dimen != PS_DIMEN_VECTOR) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_VECTOR");
+        return 1;
+    } else if(v1 != tempVector) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 2;
+    }
+    tempVector_32 = v1_32;
+    v1_32 = psMatrixToVector(v1_32, m1_32);
+    CHECK_VECTOR(v1_32);
+    if(v1_32->type.dimen != PS_DIMEN_VECTOR) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_VECTOR");
+        return 1;
+    } else if(v1_32 != tempVector_32) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 2;
+    }
+    printFooter(stdout, "psMatrix", "Convert matrix to PS_DIMEN_VECTOR vector", true);
+
+
+    // Test C - Attempt to use null image input argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null image input argument",
+                            "Invalid operation: inImage or its data is NULL.", 0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error.");
+    v1 = psMatrixToVector(v1, NULL);
+    if(v1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input");
+        return 3;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error.");
+    v1_32 = psMatrixToVector(v1_32, NULL);
+    if(v1_32 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input");
+        return 3;
+    }
+    printFooter(stdout, "psMatrix", "Attempt to use null image input argument", true);
+
+
+    // Test D - Convert matrix to PS_DIMEN_TRANSV vector
+    printPositiveTestHeader(stdout, "psMatrix", "Convert matrix to PS_DIMEN_TRANSV vector");
+    v3 = psVectorAlloc(3, PS_TYPE_F64);
+    tempVector = v3;
+    v3->type.dimen = PS_DIMEN_TRANSV;
+    psMatrixToVector(v3, m4);
+    CHECK_VECTOR(v3);
+    if(v3->type.dimen != PS_DIMEN_TRANSV) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_TRANSV");
+        return 4;
+    } else if(v3 != tempVector) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 5;
+    }
+    v3_32 = psVectorAlloc(3, PS_TYPE_F32);
+    tempVector_32 = v3_32;
+    v3_32->type.dimen = PS_DIMEN_TRANSV;
+    psMatrixToVector(v3_32, m4_32);
+    CHECK_VECTOR(v3_32);
+    if(v3_32->type.dimen != PS_DIMEN_TRANSV) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_TRANSV");
+        return 6;
+    } else if(v3_32 != tempVector_32) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 7;
+    }
+    printFooter(stdout, "psMatrix", "Convert matrix to PS_DIMEN_TRANSV vector", true);
+
+
+    // Test E - Improper image size
+    printNegativeTestHeader(stdout,"psMatrix", "Improper image size",
+                            "Image does not have dim with 1 col or 1 row: (2 x 2).", 0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    if(psMatrixToVector(v1, badImage) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with improper sizes");
+        return 8;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    if(psMatrixToVector(v1_32, badImage_32) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with improper sizes");
+        return 9;
+    }
+    printFooter(stdout, "psMatrix", "Improper image size", true);
+
+
+    // Test F - Convert PS_DIMEN_VECTOR vector to matrix
+    printPositiveTestHeader(stdout, "psMatrix", "Convert PS_DIMEN_VECTOR vector to matrix");
+    tempImage = m2;
+    m2 = psVectorToMatrix(m2, v2);
+    CHECK_MATRIX(m2,truthMatrix);
+    if(m2->type.dimen != PS_DIMEN_IMAGE) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
+        return 10;
+    } else if(m2 != tempImage) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 11;
+    }
+    tempImage_32 = m2_32;
+    m2_32 = psVectorToMatrix(m2_32, v2_32);
+    CHECK_MATRIX(m2_32,truthMatrix_32);
+    if(m2_32->type.dimen != PS_DIMEN_IMAGE) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
+        return 10;
+    } else if(m2_32 != tempImage_32) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 11;
+    }
+    printFooter(stdout, "psMatrix", "Convert PS_DIMEN_VECTOR vector to matrix", true);
+
+
+    // Test G - Attempt to use null input vector argument
+    printNegativeTestHeader(stdout,"psMatrix", "Attempt to use null input vector argument",
+                            "Invalid operation: inVector or its data is NULL.", 0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    if(psVectorToMatrix(m2, NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return output image");
+        return 12;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    if(psVectorToMatrix(m2_32, NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return output image");
+        return 13;
+    }
+    printFooter(stdout, "psMatrix", "Attempt to use null input vector argument", true);
+
+
+    // Test H - Convert PS_DIMEN_TRANSV vector to matrix
+    printPositiveTestHeader(stdout, "psMatrix", "Convert PS_DIMEN_TRANSV vector to matrix");
+    v2->type.dimen = PS_DIMEN_TRANSV;
+    tempImage = m3;
+    psVectorToMatrix(m3, v2);
+    CHECK_MATRIX(m3, truthMatrix);
+    if(m3->type.dimen != PS_DIMEN_IMAGE) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
+        return 14;
+    } else if(m3 != tempImage) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 15;
+    }
+    v2_32->type.dimen = PS_DIMEN_TRANSV;
+    tempImage_32 = m3_32;
+    psVectorToMatrix(m3_32, v2_32);
+    CHECK_MATRIX(m3_32, truthMatrix_32);
+    if(m3_32->type.dimen != PS_DIMEN_IMAGE) {
+        psError(PS_ERR_UNKNOWN,true,"Resulting image is not PS_DIMEN_IMAGE");
+        return 16;
+    } else if(m3_32 != tempImage_32) {
+        psError(PS_ERR_UNKNOWN,true,"Return pointer not equal to output argument pointer");
+        return 17;
+    }
+    printFooter(stdout, "psMatrix", "Convert PS_DIMEN_TRANSV vector to matrix", true);
+
+
+    // Test I - Free input and output images
+    printPositiveTestHeader(stdout, "psMatrix", "Free input and output images and vectors");
+    psFree(m1);
+    psFree(v1);
+    psFree(v2);
+    psFree(v3);
+    psFree(m3);
+    psFree(m4);
+    psFree(m1_32);
+    psFree(v1_32);
+    psFree(v2_32);
+    psFree(v3_32);
+    psFree(m3_32);
+    psFree(m4_32);
+    psFree(badImage);
+    psFree(badImage_32);
+    if( psMemCheckLeaks(0, NULL, stdout, false) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
+        return 10;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMatrix" ,"Free input and output images and vectors", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/math/tst_psMatrixVectorArithmetic01.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrixVectorArithmetic01.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrixVectorArithmetic01.c	(revision 4547)
@@ -0,0 +1,205 @@
+/** @file  tst_psMatrixVectorArithmetic01.c
+ *
+ *  @brief Test driver for psMatrixVector arithmetic functions
+ *
+ *  This test driver tests combinations of matrix, vector, and scalar binary operations including:
+ *     Matrix-matrix with +,-,*,/ with S32, F32, F64, C32
+ *     Matrix-vector with +,-,*,/ with S32, F32, F64, C32
+ *     Matrix-scalar with +,-,*,/ with S32, F32, F64, C32
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define PRINT_SCALAR(SCALAR,TYPE)                                                                            \
+if(PS_IS_PSELEMTYPE_COMPLEX(SCALAR->type.type)) {                                                        \
+    printf("%f+%fi ", creal(SCALAR->data.TYPE), cimag(SCALAR->data.TYPE));                               \
+} else if(PS_IS_PSELEMTYPE_INT(SCALAR->type.type)) {                                                     \
+    printf("%d ", (psS32)SCALAR->data.TYPE);                                                               \
+} else {                                                                                                 \
+    printf("%f ", (double)SCALAR->data.TYPE);                                                            \
+}                                                                                                        \
+printf("\n\n");
+
+#define PRINT_VECTOR(VECTOR,TYPE)                                                                            \
+for(psS32 i=0; i<VECTOR->n; i++) {                                                                         \
+    if(PS_IS_PSELEMTYPE_COMPLEX(VECTOR->type.type)) {                                                    \
+        printf("%f+%fi ", creal(VECTOR->data.TYPE[i]), cimag(VECTOR->data.TYPE[i]));                     \
+    } else if(PS_IS_PSELEMTYPE_INT(VECTOR->type.type)) {                                                 \
+        printf("%d ", (psS32)VECTOR->data.TYPE[i]);                                                        \
+    } else {                                                                                             \
+        printf("%f ", (double)VECTOR->data.TYPE[i]);                                                     \
+    }                                                                                                    \
+}                                                                                                        \
+printf("\n\n");
+
+
+#define PRINT_MATRIX(IMAGE,TYPE)                                                                             \
+for(psS32 i=IMAGE->numRows-1; i>-1; i--) {                                                                 \
+    for(psS32 j=0; j<IMAGE->numCols; j++) {                                                                \
+        if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                 \
+            printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j]));             \
+        } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                              \
+            printf("%d ", (psS32)IMAGE->data.TYPE[i][j]);                                                  \
+        } else {                                                                                         \
+            printf("%f ", (double)IMAGE->data.TYPE[i][j]);                                               \
+        }                                                                                                \
+    }                                                                                                    \
+    printf("\n");                                                                                        \
+}                                                                                                        \
+printf("\n");
+
+
+#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE)                                                          \
+psVector *NAME = (psVector*)psVectorAlloc(SIZE, PS_TYPE_##TYPE);                                         \
+for(psS32 i=0; i<SIZE; i++) {                                                                              \
+    NAME->data.TYPE[i] = VALUE;                                                                          \
+}                                                                                                        \
+NAME->n = SIZE;
+
+
+#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS)                                                    \
+psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE);                                      \
+for(psS32 i=0; i<NAME->numRows; i++) {                                                                     \
+    for(psS32 j=0; j<NAME->numCols; j++) {                                                                 \
+        NAME->data.TYPE[i][j] = VALUE;                                                                   \
+    }                                                                                                    \
+}
+
+
+#define CHECK_MEMORY                                                                                     \
+if(psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {                                                             \
+    psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");                                                \
+    return 10;                                                                                            \
+}                                                                                                        \
+psS32 nBad = psMemCheckCorruption(0);                                                                    \
+if(nBad) {                                                                                               \
+    printf("ERROR: Found %d bad memory blocks\n", nBad);                                                 \
+}
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+
+    // Test matrix-matrix binary operations
+    #define testBinaryOpMM(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS)                                                \
+    {                                                                                                        \
+        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix-matrix psBinaryOp");        \
+        printf("Operation: %s\n", #OP);                                                                      \
+        CREATE_AND_SET_IMAGE(inImage,TYPE,VALUE1,NROWS,NCOLS);                                               \
+        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE2,NROWS,NCOLS);                                              \
+        printf("Input:\n");                                                                                  \
+        PRINT_MATRIX(inImage,TYPE);                                                                          \
+        PRINT_MATRIX(outImage,TYPE);                                                                         \
+        outImage = (psImage*)psBinaryOp(outImage, inImage, #OP, outImage);                                   \
+        printf("Output:\n");                                                                                 \
+        PRINT_MATRIX(outImage,TYPE);                                                                         \
+        psFree(inImage);                                                                                     \
+        psFree(outImage);                                                                                    \
+        CHECK_MEMORY;                                                                                        \
+        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix-matrix psBinaryOp", true);              \
+    }
+
+    testBinaryOpMM(+,S32,10,10,3,2);
+    testBinaryOpMM(+,F32,10.0,10.0,3,2);
+    testBinaryOpMM(+,F64,10.0,10.0,3,2);
+    testBinaryOpMM(+,C32,10.0+10.0i,10.0+10.0i,3,2);
+    testBinaryOpMM(-,S32,20,10,3,2);
+    testBinaryOpMM(-,F32,20.0,10.0,3,2);
+    testBinaryOpMM(-,F64,20.0,10.0,3,2);
+    testBinaryOpMM(*,C32,20.0+20.0i,10.0+10.0i,3,2);
+    testBinaryOpMM(*,S32,20,10,3,2);
+    testBinaryOpMM(*,F32,20.0,10.0,3,2);
+    testBinaryOpMM(*,F64,20.0,10.0,3,2);
+    testBinaryOpMM(*,C32,20.0+20.0i,10.0+10.0i,3,2);
+    testBinaryOpMM(/,C32,20.0+20.0i,10.0+10.0i,3,2);
+    testBinaryOpMM(/,S32,20,10,3,2);
+    testBinaryOpMM(/,F32,20.0,10.0,3,2);
+    testBinaryOpMM(/,F64,20.0,10.0,3,2);
+    testBinaryOpMM(/,C32,20.0+20.0i,10.0+10.0i,3,2);
+
+    // Test Matrix-Vector binary operations
+    #define testBinaryOpMV(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS)                                                \
+    {                                                                                                        \
+        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix-vector psBinaryOp");        \
+        printf("Operation: %s\n", #OP);                                                                      \
+        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE1,NROWS,NCOLS);                                              \
+        CREATE_AND_SET_VECTOR(inVector,TYPE,VALUE2,NROWS);                                                   \
+        printf("Input:\n");                                                                                  \
+        PRINT_MATRIX(outImage,TYPE);                                                                         \
+        PRINT_VECTOR(inVector,TYPE);                                                                         \
+        outImage = (psImage*)psBinaryOp(outImage, outImage, #OP, inVector);                                  \
+        printf("Output:\n");                                                                                 \
+        PRINT_MATRIX(outImage,TYPE);                                                                         \
+        psFree(inVector);                                                                                    \
+        psFree(outImage);                                                                                    \
+        CHECK_MEMORY;                                                                                        \
+        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix-vector psBinaryOp", true);              \
+    }
+
+    testBinaryOpMV(+,S32,10,5,3,2);
+    testBinaryOpMV(+,F32,10.0,5.0,3,2);
+    testBinaryOpMV(+,F64,10.0,5.0,3,2);
+    testBinaryOpMV(+,C32,10.0+10.0i,5.0+5.0i,3,2);
+    testBinaryOpMV(-,S32,20,5,3,2);
+    testBinaryOpMV(-,F32,20.0,5.0,3,2);
+    testBinaryOpMV(-,F64,20.0,5.0,3,2);
+    testBinaryOpMV(*,C32,20.0+20.0i,5.0+5.0i,3,2);
+    testBinaryOpMV(*,S32,20,5,3,2);
+    testBinaryOpMV(*,F32,20.0,5.0,3,2);
+    testBinaryOpMV(*,F64,20.0,5.0,3,2);
+    testBinaryOpMV(*,C32,20.0+20.0i,5.0+5.0i,3,2);
+    testBinaryOpMV(/,C32,20.0+20.0i,5.0+5.0i,3,2);
+    testBinaryOpMV(/,S32,20,5,3,2);
+    testBinaryOpMV(/,F32,20.0,5.0,3,2);
+    testBinaryOpMV(/,F64,20.0,5.0,3,2);
+    testBinaryOpMV(/,C32,20.0+20.0i,5.0+5.0i,3,2);
+
+    // Test Matrix-Scalar binary operations
+    #define testBinaryOpMS(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS)                                                \
+    {                                                                                                        \
+        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix-scalar psBinaryOp");        \
+        printf("Operation: %s\n", #OP);                                                                      \
+        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE1,NROWS,NCOLS);                                              \
+        psScalar *inScalar = (psScalar*)psScalarAlloc(VALUE2,PS_TYPE_##TYPE);                                \
+        printf("Input:\n");                                                                                  \
+        PRINT_MATRIX(outImage,TYPE);                                                                         \
+        PRINT_SCALAR(inScalar,TYPE);                                                                         \
+        outImage = (psImage*)psBinaryOp(outImage, outImage, #OP, psScalarCopy(inScalar));                    \
+        printf("Output:\n");                                                                                 \
+        PRINT_MATRIX(outImage,TYPE);                                                                         \
+        psFree(inScalar);                                                                                    \
+        psFree(outImage);                                                                                    \
+        CHECK_MEMORY;                                                                                        \
+        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix-scalar psBinaryOp", true);              \
+    }
+
+    testBinaryOpMS(+,S32,10,5,3,2);
+    testBinaryOpMS(+,F32,10.0,5.0,3,2);
+    testBinaryOpMS(+,F64,10.0,5.0,3,2);
+    testBinaryOpMS(+,C32,10.0+10.0i,5.0+5.0i,3,2);
+    testBinaryOpMS(-,S32,20,5,3,2);
+    testBinaryOpMS(-,F32,20.0,5.0,3,2);
+    testBinaryOpMS(-,F64,20.0,5.0,3,2);
+    testBinaryOpMS(*,C32,20.0+20.0i,5.0+5.0i,3,2);
+    testBinaryOpMS(*,S32,20,5,3,2);
+    testBinaryOpMS(*,F32,20.0,5.0,3,2);
+    testBinaryOpMS(*,F64,20.0,5.0,3,2);
+    testBinaryOpMS(*,C32,20.0+20.0i,5.0+5.0i,3,2);
+    testBinaryOpMS(/,C32,20.0+20.0i,5.0+5.0i,3,2);
+    testBinaryOpMS(/,S32,20,5,3,2);
+    testBinaryOpMS(/,F32,20.0,5.0,3,2);
+    testBinaryOpMS(/,F64,20.0,5.0,3,2);
+    testBinaryOpMS(/,C32,20.0+20.0i,5.0+5.0i,3,2);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psMatrixVectorArithmetic02.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrixVectorArithmetic02.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrixVectorArithmetic02.c	(revision 4547)
@@ -0,0 +1,269 @@
+
+/** @file  tst_psMatrixVectorArithmetic02.c
+ *
+ *  @brief Test driver for psMatrixVector arithmetic functions
+ *
+ *  This test driver tests combinations of matrix, vector, and scalar unary operations including:
+ *     Matrix with all math operators with S32, F32, F64, C32
+ *     Vector with all math operators with S32, F32, F64, C32
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#include <math.h>
+
+
+#define CHECK_VECTOR(VECTOR,TYPE,TRUTH)                                                                      \
+for(psS32 i=0; i<VECTOR->n; i++) {                                                                             \
+    if(cabs(VECTOR->data.TYPE[i])-cabs(TRUTH) > FLT_EPSILON){                                                \
+        printf("ERROR:Truth and calculated values don't match for vector operation:\n");                     \
+        if(PS_IS_PSELEMTYPE_COMPLEX(VECTOR->type.type)) {                                                    \
+            printf("Truth: %.2f%+.2fi\n", creal(VECTOR->data.TYPE[i]), cimag(VECTOR->data.TYPE[i]));         \
+            printf("Calculated: %.2f%+.2fi\n", creal(TRUTH), cimag(TRUTH));                                  \
+        } else if(PS_IS_PSELEMTYPE_INT(VECTOR->type.type)) {                                                 \
+            printf("Truth: %d\n", (psS32)(VECTOR->data.TYPE[i]));                                              \
+            printf("Calculated: %d\n", (psS32)(TRUTH));                                                        \
+        } else {                                                                                             \
+            printf("Truth: %.2f\n", (double)(VECTOR->data.TYPE[i]));                                         \
+            printf("Calculated: %.2f\n", (double)(TRUTH));                                                   \
+        }                                                                                                    \
+    }                                                                                                        \
+}                                                                                                            \
+printf("\n");
+
+
+#define CHECK_MATRIX(IMAGE,TYPE,TRUTH)                                                                       \
+for(psS32 i=IMAGE->numRows-1; i>-1; i--) {                                                                     \
+    for(psS32 j=0; j<IMAGE->numCols; j++) {                                                                    \
+        if(cabs(IMAGE->data.TYPE[i][j])-cabs(TRUTH) > FLT_EPSILON){                                          \
+            printf("ERROR:Truth and calculated values don't match for matrix operation:\n");                 \
+            if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                 \
+                printf("Truth: %.2f%+.2fi\n", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j])); \
+                printf("Calculated: %.2f%+.2fi\n", creal(TRUTH), cimag(TRUTH));                              \
+            } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                              \
+                printf("Truth: %d\n", (psS32)(IMAGE->data.TYPE[i][j]));                                        \
+                printf("Calculated: %d\n", (psS32)(TRUTH));                                                    \
+            } else {                                                                                         \
+                printf("Truth: %.2f\n", (double)(IMAGE->data.TYPE[i][j]));                                   \
+                printf("Calculated: %.2f\n", (double)(TRUTH));                                               \
+            }                                                                                                \
+        }                                                                                                    \
+    }                                                                                                        \
+    printf("\n");                                                                                            \
+}                                                                                                            \
+printf("\n");
+
+
+#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE)                                                          \
+psVector *NAME = (psVector*)psVectorAlloc(SIZE, PS_TYPE_##TYPE);                                             \
+for(psS32 i=0; i<SIZE; i++) {                                                                                  \
+    NAME->data.TYPE[i] = VALUE;                                                                              \
+}                                                                                                            \
+NAME->n = SIZE;
+
+
+#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS)                                                    \
+psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE);                                          \
+for(psS32 i=0; i<NAME->numRows; i++) {                                                                         \
+    for(psS32 j=0; j<NAME->numCols; j++) {                                                                     \
+        NAME->data.TYPE[i][j] = VALUE;                                                                       \
+    }                                                                                                        \
+}
+
+
+#define CHECK_MEMORY \
+if( psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {  \
+    psError(PS_ERR_UNKNOWN, true,"Memory leaks detected."); \
+    return 50; \
+} \
+psS32 nBad = psMemCheckCorruption(0); \
+if(nBad) { \
+    psError(PS_ERR_UNKNOWN, true,"ERROR: Found %d bad memory blocks\n", nBad); \
+    return 51; \
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+
+    // Test matrix unary operations
+    #define testUnaryOpM(OP,TYPE,VALUE1,VALUE2,NROWS,NCOLS,TRUTH)                                            \
+    {                                                                                                        \
+        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test matrix psUnaryOp");                \
+        printf("Operation: %s\n", #OP);                                                                      \
+        CREATE_AND_SET_IMAGE(inImage,TYPE,VALUE1,NROWS,NCOLS);                                               \
+        CREATE_AND_SET_IMAGE(outImage,TYPE,VALUE2,NROWS,NCOLS);                                              \
+        outImage = (psImage*)psUnaryOp(outImage, inImage, #OP);                                              \
+        CHECK_MATRIX(outImage,TYPE,TRUTH);                                                                   \
+        psFree(inImage);                                                                                     \
+        psFree(outImage);                                                                                    \
+        CHECK_MEMORY;                                                                                        \
+        printFooter(stdout, "psMatrixVectorArithmetic", "Test matrix psUnaryOp", true);                      \
+    }
+
+    testUnaryOpM( abs, S32, -10, 0, 3, 2, 10 );
+    testUnaryOpM( abs, F32, -10.0, 0.0, 3, 2, 10.0 );
+    testUnaryOpM( abs, F64, -10.0, 0.0, 3, 2, 10.0 );
+    testUnaryOpM( abs, C32, -10.0 - 10.0i, 0.0 + 0.0i, 3, 2,10+10i );
+    testUnaryOpM( exp, S32, 10, 0, 3, 2, cexp(10));
+    testUnaryOpM( exp, F32, 10.0, 0.0, 3, 2, cexp(10.0) );
+    testUnaryOpM( exp, F64, 10.0, 0.0, 3, 2, cexp(10.0) );
+    testUnaryOpM( exp, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 2, cexp(1.0+1.0i) );
+    testUnaryOpM( ln, S32, 10, 0, 3, 2, clog(10) );
+    testUnaryOpM( ln, F32, 10.0, 0.0, 3, 2, clog(10.0) );
+    testUnaryOpM( ln, F64, 10.0, 0.0, 3, 2, clog(10.0) );
+    testUnaryOpM( ln, C32, 10.0 + 10.0i, 0.0 + 0.0i, 3, 2, clog(10.0+10.0i) );
+    testUnaryOpM( ten, S32, 3, 0, 3, 2, 1000 );
+    testUnaryOpM( ten, F32, 3.0, 0.0, 3, 2, 1000 );
+    testUnaryOpM( ten, F64, 3.0, 0.0, 3, 2, 1000 );
+    testUnaryOpM( ten, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 2, 10.0 );
+    testUnaryOpM( log, S32, 1000, 0, 3, 2, 3 );
+    testUnaryOpM( log, F32, 1000.0, 0.0, 3, 2, 3 );
+    testUnaryOpM( log, F64, 1000.0, 0.0, 3, 2, 3 );
+    testUnaryOpM( log, C32, 1000.0 + 0.0i, 0.0 + 0.0i, 3, 2, 3 );
+    testUnaryOpM( sin, S32, M_PI_2, 0, 3, 2, 1 );
+    testUnaryOpM( sin, F32, M_PI_2, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( sin, F64, M_PI_2, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( sin, C32, M_PI_2 + 0.0i, 0.0 + 0.0i, 3, 2, 1.0 );
+    testUnaryOpM( dsin, S32, 90, 0, 3, 2 , 1);
+    testUnaryOpM( dsin, F32, 90.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( dsin, F64, 90.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( dsin, C32, 90.0 + 00.0i, 0.0 + 0.0i, 3, 2, 1.0 );
+    testUnaryOpM( cos, S32, 0, 0, 3, 2, 1 );
+    testUnaryOpM( cos, F32, 0.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( cos, F64, 0.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( cos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, 1.0 );
+    testUnaryOpM( dcos, S32, 0, 0, 3, 2, 1 );
+    testUnaryOpM( dcos, F32, 0.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( dcos, F64, 0.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( dcos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, 1.0 );
+    testUnaryOpM( tan, S32, M_PI_4, 0, 3, 2, 1);
+    testUnaryOpM( tan, F32, M_PI_4, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( tan, F64, M_PI_4, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( tan, C32, M_PI_4 + 0.0i, 0.0 + 0.0i, 3, 2, 1 );
+    testUnaryOpM( dtan, S32, 45, 0, 3, 2, 1 );
+    testUnaryOpM( dtan, F32, 45.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( dtan, F64, 45.0, 0.0, 3, 2, 1.0 );
+    testUnaryOpM( dtan, C32, 45.0 + 45.0i, 0.0 + 0.0i, 3, 2, 1.0 );
+    testUnaryOpM( asin, S32, 1, 0, 3, 2, M_PI_2);
+    testUnaryOpM( asin, F32, 1.0, 0.0, 3, 2, M_PI_2  );
+    testUnaryOpM( asin, F64, 1.0, 0.0, 3, 2, M_PI_2);
+    testUnaryOpM( asin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 2, M_PI_2);
+    testUnaryOpM( dasin, S32, 1.0, 0, 3, 2, 90 );
+    testUnaryOpM( dasin, F32, 1.0, 0.0, 3, 2, 90.0 );
+    testUnaryOpM( dasin, F64, 1.0, 0.0, 3, 2, 90.0 );
+    testUnaryOpM( dasin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 2, 90.0 );
+    testUnaryOpM( acos, S32, 0, 0, 3, 2, M_PI_2);
+    testUnaryOpM( acos, F32, 0.0, 0.0, 3, 2, M_PI_2 );
+    testUnaryOpM( acos, F64, 0.0, 0.0, 3, 2, M_PI_2 );
+    testUnaryOpM( acos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, M_PI_2 );
+    testUnaryOpM( dacos, S32, 0, 0, 3, 2, 90 );
+    testUnaryOpM( dacos, F32, 0.0, 0.0, 3, 2, 90.0 );
+    testUnaryOpM( dacos, F64, 0.0, 0.0, 3, 2, 90.0 );
+    testUnaryOpM( dacos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 2, 90.0 );
+    testUnaryOpM( atan, S32, 1, 0, 3, 2, M_PI_4);
+    testUnaryOpM( atan, F32, 1.0, 0.0, 3, 2, M_PI_4 );
+    testUnaryOpM( atan, F64, 1.0, 0.0, 3, 2, M_PI_4);
+    testUnaryOpM( atan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 2, M_PI_4);
+    testUnaryOpM( datan, S32, 1, 0, 3, 2, 45 );
+    testUnaryOpM( datan, F32, 1.0, 0.0, 3, 2, 45.0 );
+    testUnaryOpM( datan, F64, 1.0, 0.0, 3, 2, 45.0 );
+    testUnaryOpM( datan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 2, 45.0 );
+
+
+    // Test vector unary operations
+    #define testUnaryOpV(OP,TYPE,VALUE1,VALUE2,SIZE,TRUTH)                                                   \
+    {                                                                                                        \
+        printPositiveTestHeader(stdout, "psMatrixVectorArithmetic", "Test vector psUnaryOp");                \
+        printf("Operation: %s\n", #OP);                                                                      \
+        CREATE_AND_SET_VECTOR(inVector,TYPE,VALUE1,SIZE);                                                    \
+        CREATE_AND_SET_VECTOR(outVector,TYPE,VALUE2,SIZE);                                                   \
+        outVector = (psVector*)psUnaryOp(outVector, inVector, #OP);                                          \
+        CHECK_VECTOR(outVector,TYPE,TRUTH);                                                                  \
+        psFree(inVector);                                                                                    \
+        psFree(outVector);                                                                                   \
+        CHECK_MEMORY;                                                                                        \
+        printFooter(stdout, "psMatrixVectorArithmetic", "Test vector psUnaryOp", true);                      \
+    }
+
+    testUnaryOpV( abs, S32, -10, 0, 3, 10 );
+    testUnaryOpV( abs, F32, -10.0, 0.0, 3, 10.0 );
+    testUnaryOpV( abs, F64, -10.0, 0.0, 3, 10.0 );
+    testUnaryOpV( abs, C32, -10.0 - 10.0i, 0.0 + 0.0i, 3, 10+10i );
+    testUnaryOpV( exp, S32, 10, 0, 3, cexp(10));
+    testUnaryOpV( exp, F32, 10.0, 0.0, 3, cexp(10.0) );
+    testUnaryOpV( exp, F64, 10.0, 0.0, 3, cexp(10.0) );
+    testUnaryOpV( exp, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, cexp(1.0+1.0i) );
+    testUnaryOpV( ln, S32, 10, 0, 3, clog(10) );
+    testUnaryOpV( ln, F32, 10.0, 0.0, 3, clog(10.0) );
+    testUnaryOpV( ln, F64, 10.0, 0.0, 3, clog(10.0) );
+    testUnaryOpV( ln, C32, 10.0 + 10.0i, 0.0 + 0.0i, 3, clog(10.0+10.0i) );
+    testUnaryOpV( ten, S32, 3, 0, 3, 1000 );
+    testUnaryOpV( ten, F32, 3.0, 0.0, 3, 1000 );
+    testUnaryOpV( ten, F64, 3.0, 0.0, 3, 1000 );
+    testUnaryOpV( ten, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 10.0 );
+    testUnaryOpV( log, S32, 1000, 0, 3,  3 );
+    testUnaryOpV( log, F32, 1000.0, 0.0, 3, 3 );
+    testUnaryOpV( log, F64, 1000.0, 0.0, 3, 3 );
+    testUnaryOpV( log, C32, 1000.0 + 0.0i, 0.0 + 0.0i, 3, 3 );
+    testUnaryOpV( sin, S32, M_PI_2, 0, 3, 1 );
+    testUnaryOpV( sin, F32, M_PI_2, 0.0, 3, 1.0 );
+    testUnaryOpV( sin, F64, M_PI_2, 0.0, 3, 1.0 );
+    testUnaryOpV( sin, C32, M_PI_2 + 0.0i, 0.0 + 0.0i, 3, 1.0 );
+    testUnaryOpV( dsin, S32, 90, 0, 3, 1);
+    testUnaryOpV( dsin, F32, 90.0, 0.0, 3, 1.0 );
+    testUnaryOpV( dsin, F64, 90.0, 0.0, 3, 1.0 );
+    testUnaryOpV( dsin, C32, 90.0 + 00.0i, 0.0 + 0.0i, 3, 1.0 );
+    testUnaryOpV( cos, S32, 0, 0, 3, 1 );
+    testUnaryOpV( cos, F32, 0.0, 0.0, 3, 1.0 );
+    testUnaryOpV( cos, F64, 0.0, 0.0, 3, 1.0 );
+    testUnaryOpV( cos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 1.0 );
+    testUnaryOpV( dcos, S32, 0, 0, 3, 1 );
+    testUnaryOpV( dcos, F32, 0.0, 0.0, 3, 1.0 );
+    testUnaryOpV( dcos, F64, 0.0, 0.0, 3, 1.0 );
+    testUnaryOpV( dcos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 1.0 );
+    testUnaryOpV( tan, S32, M_PI_4, 0, 3, 1);
+    testUnaryOpV( tan, F32, M_PI_4, 0.0, 3, 1.0 );
+    testUnaryOpV( tan, F64, M_PI_4, 0.0, 3, 1.0 );
+    testUnaryOpV( tan, C32, M_PI_4 + 0.0i, 0.0 + 0.0i, 3, 1 );
+    testUnaryOpV( dtan, S32, 45, 0, 3, 1 );
+    testUnaryOpV( dtan, F32, 45.0, 0.0, 3, 1.0 );
+    testUnaryOpV( dtan, F64, 45.0, 0.0, 3, 1.0 );
+    testUnaryOpV( dtan, C32, 45.0 + 45.0i, 0.0 + 0.0i, 3, 1.0 );
+    testUnaryOpV( asin, S32, 1, 0, 3, M_PI_2);
+    testUnaryOpV( asin, F32, 1.0, 0.0, 3, M_PI_2  );
+    testUnaryOpV( asin, F64, 1.0, 0.0, 3, M_PI_2);
+    testUnaryOpV( asin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, M_PI_2);
+    testUnaryOpV( dasin, S32, 1.0, 0, 3, 90 );
+    testUnaryOpV( dasin, F32, 1.0, 0.0, 3, 90.0 );
+    testUnaryOpV( dasin, F64, 1.0, 0.0, 3, 90.0 );
+    testUnaryOpV( dasin, C32, 1.0 + 1.0i, 0.0 + 0.0i, 3, 90.0 );
+    testUnaryOpV( acos, S32, 0, 0, 3, M_PI_2);
+    testUnaryOpV( acos, F32, 0.0, 0.0, 3, M_PI_2 );
+    testUnaryOpV( acos, F64, 0.0, 0.0, 3, M_PI_2 );
+    testUnaryOpV( acos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, M_PI_2 );
+    testUnaryOpV( dacos, S32, 0, 0, 3, 90 );
+    testUnaryOpV( dacos, F32, 0.0, 0.0, 3, 90.0 );
+    testUnaryOpV( dacos, F64, 0.0, 0.0, 3, 90.0 );
+    testUnaryOpV( dacos, C32, 0.0 + 0.0i, 0.0 + 0.0i, 3, 90.0 );
+    testUnaryOpV( atan, S32, 1, 0, 3, M_PI_4);
+    testUnaryOpV( atan, F32, 1.0, 0.0, 3, M_PI_4 );
+    testUnaryOpV( atan, F64, 1.0, 0.0, 3, M_PI_4);
+    testUnaryOpV( atan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, M_PI_4);
+    testUnaryOpV( datan, S32, 1, 0, 3, 45 );
+    testUnaryOpV( datan, F32, 1.0, 0.0, 3, 45.0 );
+    testUnaryOpV( datan, F64, 1.0, 0.0, 3, 45.0 );
+    testUnaryOpV( datan, C32, 1.0 + 0.0i, 0.0 + 0.0i, 3, 45.0 );
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psMatrixVectorArithmetic03.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrixVectorArithmetic03.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrixVectorArithmetic03.c	(revision 4547)
@@ -0,0 +1,314 @@
+/** @file  tst_psMatrixVectorArithmetic03.c
+ *
+ *  @brief Test driver for psMatrixVector arithmetic functions
+ *
+ *  This test driver contains negative tests for psBinaryOp and psUanryOp:
+ *     Check for NULL arguments
+ *     Inconsistent element types
+ *     Inconsistent element count
+ *     Inconsistent dimensionality
+ *     Division by zero
+ *     Attempt to use min with complex numbers
+ *     Attempt to use max with complex numbers
+ *     Invalid operation
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define PRINT_VECTOR(VECTOR,TYPE) \
+for(psS32 i=0; i<VECTOR->n; i++) { \
+    if(PS_IS_PSELEMTYPE_COMPLEX(VECTOR->type.type)) { \
+        printf("%f+%fi ", creal(VECTOR->data.TYPE[i]), cimag(VECTOR->data.TYPE[i])); \
+    } else if(PS_IS_PSELEMTYPE_INT(VECTOR->type.type)) { \
+        printf("%d ", (psS32)VECTOR->data.TYPE[i]); \
+    } else { \
+        printf("%f ", (double)VECTOR->data.TYPE[i]); \
+    } \
+} \
+printf("\n\n");
+
+#define PRINT_MATRIX(IMAGE,TYPE) \
+for(psS32 i=IMAGE->numRows-1; i>-1; i--) { \
+    for(psS32 j=0; j<IMAGE->numCols; j++) { \
+        if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) { \
+            printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j])); \
+        } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) { \
+            printf("%d ", (psS32)IMAGE->data.TYPE[i][j]); \
+        } else { \
+            printf("%f ", (double)IMAGE->data.TYPE[i][j]); \
+        } \
+    } \
+    printf("\n"); \
+} \
+printf("\n");
+
+
+#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE) \
+psVector *NAME = (psVector*)psVectorAlloc(SIZE, PS_TYPE_##TYPE); \
+for(psS32 i=0; i<SIZE; i++) { \
+    NAME->data.TYPE[i] = VALUE; \
+} \
+NAME->n = SIZE;
+
+
+#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS) \
+psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE); \
+for(psS32 i=0; i<NAME->numRows; i++) { \
+    for(psS32 j=0; j<NAME->numCols; j++) { \
+        NAME->data.TYPE[i][j] = VALUE; \
+    } \
+}
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    CREATE_AND_SET_IMAGE(image1,F64,0,3,3);
+    CREATE_AND_SET_IMAGE(image2,F64,0,3,3);
+    CREATE_AND_SET_IMAGE(image3,F32,0,3,3);
+    CREATE_AND_SET_IMAGE(image4,F64,0,2,2);
+    CREATE_AND_SET_IMAGE(image5,C32,1+1i,3,3);
+    CREATE_AND_SET_VECTOR(vector1,F64,0,2);
+    CREATE_AND_SET_VECTOR(vector2,F64,0,3);
+
+    // Check for NULL output argument
+    printPositiveTestHeader(stdout,"psBinaryOp", "Check for output generated");
+    psImage* image6 = (psImage*)psBinaryOp(NULL, image1, "+", image2);
+    if (image6 == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp failed to make an image given no output to recycle.");
+        return 1;
+    }
+    printFooter(stdout,"psBinaryOp","Check for output generated",true);
+
+    // Check for NULL input argument #1
+    printPositiveTestHeader(stdout,"psBinaryOp","Check for null input arg 1");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, NULL, "+", image2);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given a NULL first operand.");
+        return 2;
+    }
+    printFooter(stdout,"psBinaryOp","Check for null input arg 1",true);
+
+    // Check for NULL input argument #2
+    printPositiveTestHeader(stdout,"psBinaryOp","Check for null input arg 2");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, image1, "+", NULL);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given a NULL second operand.");
+        return 3;
+    }
+    printFooter(stdout,"psBinaryOp","Check for null input arg 2",true);
+
+    // Check for NULL operand
+    printPositiveTestHeader(stdout,"psBinaryOp","Check for null operand");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, image1, NULL, image2);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given a NULL operator.");
+        return 4;
+    }
+    printFooter(stdout,"psBinaryOp","Check for null operand",true);
+
+    // Check for null output
+    printPositiveTestHeader(stdout,"psUnaryOp","Check for null output");
+    image6 = (psImage*)psUnaryOp(NULL, image1, "sin");
+    if (image6 == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp failed to make an image given no output to recycle.");
+        return 5;
+    }
+    printFooter(stdout,"psUnaryOp","Check for null output",true);
+
+    // Check for NULL input arg
+    printPositiveTestHeader(stdout,"psUnaryOp","Check for null input");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psUnaryOp(image6, NULL, "sin");
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned a result given a NULL operand.");
+        return 6;
+    }
+    printFooter(stdout,"psUnaryOp","Check for null input",true);
+
+    // Check for NULL operand
+    printPositiveTestHeader(stdout,"psUnaryOp","Check for null operator");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psUnaryOp(image6, image1, NULL);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned a result given a NULL operator.");
+        return 7;
+    }
+    printFooter(stdout,"psUnaryOp","Check for null operator",true);
+
+    // Inconsistent element types
+    printPositiveTestHeader(stdout,"psBinaryOp", "Inconsistent element types");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, image3, "+", image2);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different types.");
+        return 8;
+    }
+    printFooter(stdout,"psBinaryOp","Inconsistent element types",true);
+
+    // Check unary op to convert to correct type
+    printPositiveTestHeader(stdout,"psUnaryOp","Check output type conversion");
+    image6 = psImageCopy(image6,image2,PS_TYPE_F64);
+    image6 = (psImage*)psUnaryOp(image6, image3, "sin");
+    if (image6 == NULL || image6->type.type != PS_TYPE_F32) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp failed to convert the type of the output.");
+        return 9;
+    }
+    printFooter(stdout,"psUnaryOp","Check output type conversion",true);
+
+    // Inconsistent element count
+    printPositiveTestHeader(stdout,"psBinaryOp","Check for inconsistent elements");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, image4, "+", image2);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different sizes.");
+        return 10;
+    }
+    printFooter(stdout,"psBinaryOp","Check for inconsistent elements",true);
+
+    // Inconsistent element in input and output
+    printPositiveTestHeader(stdout,"psUnaryOp","Check inconsistent elements in input and output");
+    image6 = psImageCopy(image6,image2,PS_TYPE_F64);
+    image6 = (psImage*)psUnaryOp(image6, image4, "sin");
+    if (image6 == NULL ||
+            image6->numCols != image6->numCols ||
+            image6->numRows != image6->numRows) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp failed to resize the output.");
+        return 11;
+    }
+    printFooter(stdout,"psUnaryOp","Check inconsistent elements in input and output",true);
+
+    // Inconsistent size of input 1 and input 2
+    printPositiveTestHeader(stdout,"psBinaryOp","Check inconsistent size");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, vector1, "+", image2);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different sizes.");
+        return 12;
+    }
+    printFooter(stdout,"psBinaryOp","Check inconsistent size",true);
+
+    // Inconsistent size of input 1 and input 2
+    printPositiveTestHeader(stdout,"psBinaryOp","Check inconsistent size");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    vector1->type.dimen = PS_DIMEN_TRANSV;
+    image6 = (psImage*)psBinaryOp(image6, vector1, "+", image2);
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned a result given operands of different sizes.");
+        return 13;
+    }
+    printFooter(stdout, "psBinaryOp", "Check inconsistent size", true);
+
+
+    // Inconsistent dimensionality
+    printPositiveTestHeader(stdout,"psUnaryOp","Check inconsistent dimensionality");
+    image6 = psImageCopy(image6,image2,PS_TYPE_F64);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an two error messages");
+    image6 = (psImage*)psUnaryOp(image6, vector2, "sin");
+    if (image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result given wrong type out parameter.");
+        return 14;
+    }
+    printFooter(stdout,"psUnaryOp","Check inconsistent dimensionality",true);
+
+    // Attempt to use min with complex numbers
+    printPositiveTestHeader(stdout,"psBinaryOp","Attempt to use min with complex numbers");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    image6 = (psImage*)psBinaryOp(image6, image5, "min", image5);
+    if(image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result with min of complex numbers");
+        return 15;
+    }
+    printFooter(stdout, "psBinaryOp", "Attempt to use  min with complex numbers", true);
+
+
+    // Attempt to use max with complex numbers
+    printPositiveTestHeader(stdout,"psBinaryOp","Attempt to use max with complex numbers");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psBinaryOp(image6, image5, "max", image5);
+    if(image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result with max of complex numbers");
+        return 16;
+    }
+    printFooter(stdout, "psBinaryOp", "Attempt to use max with complex numbers", true);
+
+
+    // Invalid operation
+    printPositiveTestHeader(stdout,"psBinary","Attempt to use invalid operator");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error messgae");
+    image6 = (psImage*)psBinaryOp(image6, image1, "yarg", image2);
+    if(image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psBinaryOp returned result with invalid operator");
+        return 17;
+    }
+    printFooter(stdout,"psBinaryOp","Attempt to use invalid operator",true);
+
+    printPositiveTestHeader(stdout,"psUnaryOp","Attempt to use invalid operator");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    image6 = (psImage*)psUnaryOp(image6, image1, "yarg");
+    if(image6 != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,"psUnaryOp returned result with invalid operator");
+        return 18;
+    }
+    printFooter(stdout, "psUnaryOp", "Attempt to use invalid operator", true);
+
+    CREATE_AND_SET_VECTOR(vector4,F64,0,3);
+    CREATE_AND_SET_VECTOR(vector5,F64,0,3);
+
+    // Input parameter with dimension of PS_DIMEN_OTHER
+    printPositiveTestHeader(stdout,"psBinaryOp","Attempt to use input with PS_DIMEN_OTHER");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    vector4->type.dimen = PS_DIMEN_OTHER;
+    if ( psBinaryOp(NULL,vector4,"+",vector5) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psBinaryOp should return null when input dimen PS_DIMEN_OTHER.");
+        return 19;
+    }
+    vector4->type.dimen = PS_DIMEN_VECTOR;
+    printFooter(stdout,"psBinaryOp","Attempt to use input with PS_DIMEN_OTHER",true);
+
+    // Input parameter with dimension of PS_DIMEN_OTHER
+    printPositiveTestHeader(stdout,"psUnaryOp","Attempt to use input with PS_DIMEN_OTHER");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    vector4->type.dimen = PS_DIMEN_OTHER;
+    if ( psUnaryOp(NULL,vector4,"sin") != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psUnaryOp should return null when input dimen PS_DIMEN_OTHER");
+        return 20;
+    }
+    vector4->type.dimen = PS_DIMEN_VECTOR;
+    printFooter(stdout,"psUnaryOp","Attempt to use input with PS_DIMEN_OTHER",true);
+
+    psFree(vector4);
+    psFree(vector5);
+    psFree(image1);
+    psFree(image2);
+    psFree(image3);
+    psFree(image4);
+    psFree(image5);
+    psFree(vector1);
+    psFree(vector2);
+
+    psS32 nLeaks = psMemCheckLeaks(0,NULL,stdout,false);
+    if(nLeaks != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected");
+        return 50;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        psError(PS_ERR_UNKNOWN,true,"Memory corruption detected");
+        return 51;
+    }
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psMatrixVectorArithmetic04.c
===================================================================
--- /trunk/psLib/test/math/tst_psMatrixVectorArithmetic04.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMatrixVectorArithmetic04.c	(revision 4547)
@@ -0,0 +1,212 @@
+/** @file  tst_psMatrixVectorArithmetic04.c
+ *
+ *  @brief Test driver for psBinary arithmetic operations with scalars
+ *
+ *  This test driver will test the following binary operation with scalar inputs
+ *        vector addition with scalar in first argument
+ *        image addition with scalar in second argument
+ *
+ * @author  Eric Van Alst, MHPCC
+ *
+ * @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ * @date  $Date: 2005-07-13 02:47:00 $
+ *
+ * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testBinOpScalarFirst(void);
+static psS32 testBinOpScalarSecond(void);
+static psS32 testBinOpScalarBoth(void);
+static psS32 testUnaryOpScalar(void);
+
+testDescription testsBinary[] = {
+                                    {testBinOpScalarFirst,737,"psBinaryOp",0,false},
+                                    {testBinOpScalarSecond,737,"psBinaryOp",0,false},
+                                    {testBinOpScalarBoth,737,"psBinaryOp",0,false},
+                                    {NULL}
+                                };
+
+testDescription testUnary[] = {
+                                  {testUnaryOpScalar,737,"psUnaryOp",0,false},
+                                  {NULL}
+                              };
+
+// Create vector
+#define CREATE_AND_SET_VECTOR(NAME,TYPE,VALUE,SIZE) \
+psVector *NAME = psVectorAlloc(SIZE,PS_TYPE_##TYPE); \
+for(psS32 i=0; i<SIZE; i++) { \
+    NAME->data.TYPE[i] = VALUE; \
+} \
+NAME->n = SIZE;
+
+// Create image
+#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS) \
+psImage *NAME = psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE); \
+for(psS32 i=0; i<NAME->numRows; i++) { \
+    for(psS32 j=0; j<NAME->numCols; j++) { \
+        NAME->data.TYPE[i][j] = VALUE; \
+    } \
+}
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    runTestSuite(stderr,"psBinaryOp",testsBinary,argc,argv);
+    runTestSuite(stderr,"psUnaryOp",testUnary,argc,argv);
+
+    return 0;
+}
+
+psS32 testBinOpScalarFirst(void)
+{
+    CREATE_AND_SET_VECTOR(vector1,S8,1,5)
+    CREATE_AND_SET_VECTOR(vector2,S8,0,5)
+
+    psScalar* inScalar1 = psScalarAlloc(2,PS_TYPE_S8);
+
+    // Add vector and scalar
+    vector2 = (psVector*)psBinaryOp(vector2,inScalar1,"+",vector1);
+    // Verify the result vector
+    for(psS32 i=0; i<vector2->n; i++) {
+        if(vector2->data.S8[i] != 3 ) {
+            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
+            return 1;
+        }
+    }
+    psFree(vector1);
+    psFree(vector2);
+
+    CREATE_AND_SET_VECTOR(vector3,S8,1,5);
+    CREATE_AND_SET_VECTOR(vector4,S8,0,3);
+
+    psScalar* inScalar2 = psScalarAlloc(2,PS_TYPE_S8);
+    vector4->type.dimen = PS_DIMEN_TRANSV;
+    vector4 = (psVector*)psBinaryOp(vector4,inScalar2,"+",vector3);
+    for(psS32 i=0; i<vector4->n; i++) {
+        if(vector4->data.S8[i] != 3 ) {
+            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
+            return 2;
+        }
+    }
+    psFree(vector3);
+    psFree(vector4);
+
+    CREATE_AND_SET_IMAGE(image1,S8,1,5,5)
+    psImage* image2 = NULL;
+
+    psScalar* inScalar3 = psScalarAlloc(2,PS_TYPE_S8);
+
+    image2 = (psImage*)psBinaryOp(image2,inScalar3,"+",image1);
+    for(psS32 i=0; i<image2->numRows; i++) {
+        for(psS32 j=0; j<image2->numCols; j++) {
+            if(image2->data.S8[i][j] != 3 ) {
+                psError(PS_ERR_UNKNOWN,true,"Unexpected value in return image[%d][%d]",i,j);
+                return 10;
+            }
+        }
+    }
+    psFree(image1);
+    psFree(image2);
+
+    return 0;
+}
+
+psS32 testBinOpScalarSecond(void)
+{
+    CREATE_AND_SET_VECTOR(vector1,S8,1,5)
+    CREATE_AND_SET_VECTOR(vector2,S8,0,5)
+
+    psScalar* inScalar1 = psScalarAlloc(2,PS_TYPE_S8);
+
+    vector2 = (psVector*)psBinaryOp(vector2,vector1,"+",inScalar1);
+    for(psS32 i=0; i<vector2->n; i++) {
+        if(vector2->data.S8[i] != 3 ) {
+            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
+            return 1;
+        }
+    }
+    psFree(vector1);
+    psFree(vector2);
+
+    CREATE_AND_SET_VECTOR(vector3,S8,1,5);
+    CREATE_AND_SET_VECTOR(vector4,S8,0,3);
+
+    psScalar* inScalar2 = psScalarAlloc(2,PS_TYPE_S8);
+    vector4->type.dimen = PS_DIMEN_TRANSV;
+    vector4 = (psVector*)psBinaryOp(vector4,vector3,"+",inScalar2);
+    for(psS32 i=0; i<vector4->n; i++) {
+        if(vector4->data.S8[i] != 3 ) {
+            psError(PS_ERR_UNKNOWN,true,"Unexpected value in return vector[%d]",i);
+            return 2;
+        }
+    }
+    psFree(vector3);
+    psFree(vector4);
+
+    CREATE_AND_SET_IMAGE(image1,S8,1,5,5);
+    psImage* image2 = NULL;
+
+    psScalar* inScalar3 = psScalarAlloc(2,PS_TYPE_S8);
+
+    image2 = (psImage*)psBinaryOp(image2,image1,"+",inScalar3);
+    for(psS32 i=0; i<image2->numRows; i++) {
+        for(psS32 j=0; j<image2->numCols; j++) {
+            if(image2->data.S8[i][j] != 3 ) {
+                psError(PS_ERR_UNKNOWN,true,"Unexpected value in return image[%d][%d]",i,j);
+                return 10;
+            }
+        }
+    }
+    psFree(image1);
+    psFree(image2);
+
+    return 0;
+}
+
+psS32 testBinOpScalarBoth(void)
+{
+    psScalar* inScalar1 = psScalarAlloc(1,PS_TYPE_S8);
+    psScalar* inScalar2 = psScalarAlloc(2,PS_TYPE_S8);
+    psScalar* outScalar = psScalarAlloc(4,PS_TYPE_S8);
+
+    outScalar = (psScalar*)psBinaryOp(outScalar,inScalar1,"+",inScalar2);
+    if(outScalar->data.S8 != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected value in return scalar");
+        return 3;
+    }
+    psFree(outScalar);
+
+    psScalar* inScalar3 = psScalarAlloc(10,PS_TYPE_S8);
+    psScalar* inScalar4 = psScalarAlloc(20,PS_TYPE_S8);
+    psScalar* outScalar1 = NULL;
+
+    outScalar1 = (psScalar*)psBinaryOp(outScalar1,inScalar3,"+",inScalar4);
+    if(outScalar1->data.S8 != 30 ) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected value in return scalar");
+        return 4;
+    }
+    psFree(outScalar1);
+
+    return 0;
+}
+
+psS32 testUnaryOpScalar(void)
+{
+    psScalar* inScalar = psScalarAlloc(-1,PS_TYPE_F32);
+    psScalar* outScalar = NULL;
+
+    outScalar = (psScalar*)psUnaryOp(outScalar,inScalar,"abs");
+    if(outScalar->data.F32 != 1) {
+        psError(PS_ERR_UNKNOWN,true,"Unexpected value in return scalar = %d  in = %d",outScalar->data.F32,inScalar->data.F32);
+        return 5;
+    }
+    psFree(outScalar);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psMinimize00.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize00.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize00.c	(revision 4547)
@@ -0,0 +1,166 @@
+/*****************************************************************************
+    This routine must ensure that the psMinimizeChi2 function correctly
+    minimizes an arbitrary function.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define NUM_DATA 10
+#define DATA_WIDTH 2
+#define NUM_PARAMS 4
+
+float myFunc(const psVector *restrict myData,
+             const psVector *restrict myParams)
+{
+    float x = myData->data.F32[0];
+    float y = myData->data.F32[1];
+    float A = myParams->data.F32[0];
+    float B = myParams->data.F32[1];
+    float C = myParams->data.F32[2];
+    float D = myParams->data.F32[3];
+    float tmp = 0.0;
+
+    tmp = (A * x) + (B*x*x) + (C*y*y) + (D*x*x*y);
+    //    printf("--------- myFunc((%.1f %.1f) %.1f %.1f %.1f %.1f) is %.1f ---------\n",
+    //           x, y, A, B, C, D, tmp);
+
+    return(tmp);
+}
+
+float myFuncDeriv(const psVector *restrict myData,
+                  const psVector *restrict myParams,
+                  psS32 whichParamDeriv)
+{
+    float x = myData->data.F32[0];
+    float y = myData->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = 1.0;
+        tmp = x;
+    } else
+        if (whichParamDeriv == 1) {
+            tmp = x;
+            tmp = x*x;
+        } else
+            if (whichParamDeriv == 2) {
+                tmp = y;
+                tmp = y*y;
+            } else
+                if (whichParamDeriv == 3) {
+                    tmp = x * x * y;
+                }
+
+    //    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
+    //            x, y, myParams->data.F32[0], myParams->data.F32[1],
+    //            myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
+    return(tmp);
+}
+
+
+psS32 main()
+{
+    psImage *domain = NULL;
+    psVector *data = NULL;
+    psVector *errors = NULL;
+    psVector *initialGuess = NULL;
+    psVector *paramMask = NULL;
+    psVector *tmpVecPtr = NULL;
+    float chiSq = 0.0;
+    psS32 i = 0;
+    psS32 j = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    psVector *theParams = NULL;
+
+    domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32);
+    data = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    errors = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
+
+
+    //--------- myFunc((0.0 1.0) -8.6 -7.6 14.6 5.0) is 6.0 ---------
+
+    initialGuess->data.F32[0] = -8.6;
+    initialGuess->data.F32[1] = -7.6;
+    initialGuess->data.F32[2] = 14.6;
+    initialGuess->data.F32[3] = 5.0;
+
+    // Build the data.
+    initialGuess->data.F32[0] = 2.0;
+    initialGuess->data.F32[1] = 3.0;
+    initialGuess->data.F32[2] = 4.0;
+    initialGuess->data.F32[3] = 5.0;
+
+
+    for (i = 0; i<NUM_DATA; i++) {
+        for (j=0; j<DATA_WIDTH; j++) {
+            domain->data.F32[i][j] = (float) (i + j);
+        }
+    }
+    for (i = 0; i<NUM_DATA; i++) {
+        errors->data.F32[i] = 0.1;
+    }
+
+    //    printf("========== Setting Data Values ==========\n");
+    for (i = 0; i<NUM_DATA; i++) {
+        for (j=0; j<DATA_WIDTH; j++) {
+            tmpVecPtr->data.F32[j] = domain->data.F32[i][j];
+        }
+        data->data.F32[i] = myFunc(tmpVecPtr, initialGuess);
+    }
+    //    printf("=========================================\n");
+
+    for (i=0;i<NUM_PARAMS;i++) {
+        initialGuess->data.F32[i]+= 1.0;
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimizeChi2(): no masks");
+
+    theParams = psMinimizeChi2(myFunc,
+                               myFuncDeriv,
+                               domain,
+                               data,
+                               errors,
+                               initialGuess,
+                               NULL,
+                               &chiSq);
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("theParams[%d] is %.1f\n", i, theParams->data.F32[i]);
+    }
+
+    printf("chiSq is %f\n", chiSq);
+    psMemCheckCorruption(1);
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimizeChi2(): no masks",
+                testStatus);
+
+
+    psMemCheckCorruption(1);
+    psFree(domain);
+    psFree(data);
+    psFree(errors);
+    psFree(initialGuess);
+    psFree(paramMask);
+    psFree(tmpVecPtr);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psMinimize01.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize01.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize01.c	(revision 4547)
@@ -0,0 +1,172 @@
+/*****************************************************************************
+    This routine must ensure that the psMinimizeChi2 function correctly
+    minimizes an arbitrary function.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define NUM_DATA 40
+#define DATA_WIDTH 1
+#define NUM_PARAMS 3
+
+// The function is f(x) = (A * e^(lambda x)) + b
+
+float myFunc(const psVector *restrict myData,
+             const psVector *restrict myParams)
+{
+    float x = myData->data.F32[0];
+    float A = myParams->data.F32[0];
+    float lambda = myParams->data.F32[1];
+    float b = myParams->data.F32[2];
+    float tmp = A * exp(-lambda * x) + b;
+
+    //    printf("--------- myFunc((%.1f) %.1f %.1f %.1f) is %.1f ---------\n",
+    //           x, A, lambda, b, tmp);
+
+    return(tmp);
+}
+
+float myFuncDeriv(const psVector *restrict myData,
+                  const psVector *restrict myParams,
+                  psS32 whichParamDeriv)
+{
+    float x = myData->data.F32[0];
+    float A = myParams->data.F32[0];
+    float lambda = myParams->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = exp(-lambda * x);
+    } else
+        if (whichParamDeriv == 1) {
+            tmp = -x * A * exp(-lambda * x);
+        } else
+            if (whichParamDeriv == 2) {
+                tmp = 1.0;
+            }
+
+    //    printf("--------- myFuncDeriv((%.1f) %.1f %.1f %.1f, %d) is %.1f ---------\n",
+    //           x, A, lambda, myParams->data.F32[2], whichParamDeriv, tmp);
+
+    return(tmp);
+}
+
+psS32 main()
+{
+    psImage *domain = NULL;
+    psVector *data = NULL;
+    psVector *errors = NULL;
+    psVector *initialGuess = NULL;
+    psVector *paramMask = NULL;
+    psVector *tmpVecPtr = NULL;
+    float chiSq = 0.0;
+    psS32 i = 0;
+    psVector *theParams = NULL;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32);
+    data = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    errors = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
+
+    // Build the data.
+    initialGuess->data.F32[0] = 1.0;
+    initialGuess->data.F32[1] = 0.0;
+    initialGuess->data.F32[2] = 0.0;
+
+    for (i = 0; i<NUM_DATA; i++) {
+        errors->data.F32[i] = 0.1;
+        domain->data.F32[i][0] = (float) i;
+    }
+
+    printf("========== Setting Data Values ==========\n");
+    data->data.F32[0] = 6.013392;
+    data->data.F32[1] = 5.515377;
+    data->data.F32[2] = 5.261095;
+    data->data.F32[3] = 4.777455;
+    data->data.F32[4] = 4.451353;
+    data->data.F32[5] = 3.904903;
+    data->data.F32[6] = 3.504387;
+    data->data.F32[7] = 3.414999;
+    data->data.F32[8] = 3.242736;
+    data->data.F32[9] = 3.122204;
+    data->data.F32[10] = 2.837632;
+    data->data.F32[11] = 2.534700;
+    data->data.F32[12] = 2.439173;
+    data->data.F32[13] = 2.380830;
+    data->data.F32[14] = 2.316090;
+    data->data.F32[15] = 2.060826;
+    data->data.F32[16] = 1.945679;
+    data->data.F32[17] = 1.914126;
+    data->data.F32[18] = 1.759509;
+    data->data.F32[19] = 1.665067;
+    data->data.F32[20] = 1.737926;
+    data->data.F32[21] = 1.575523;
+    data->data.F32[22] = 1.525066;
+    data->data.F32[23] = 1.409607;
+    data->data.F32[24] = 1.395209;
+    data->data.F32[25] = 1.416887;
+    data->data.F32[26] = 1.376042;
+    data->data.F32[27] = 1.260955;
+    data->data.F32[28] = 1.289627;
+    data->data.F32[29] = 1.422672;
+    data->data.F32[30] = 1.228287;
+    data->data.F32[31] = 1.199176;
+    data->data.F32[32] = 1.189989;
+    data->data.F32[33] = 0.930076;
+    data->data.F32[34] = 1.224608;
+    data->data.F32[35] = 1.147376;
+    data->data.F32[36] = 1.114001;
+    data->data.F32[37] = 1.195118;
+    data->data.F32[38] = 1.269581;
+    data->data.F32[39] = 1.061982;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimizeChi2(): no masks");
+
+    theParams = psMinimizeChi2(myFunc,
+                               myFuncDeriv,
+                               domain,
+                               data,
+                               errors,
+                               initialGuess,
+                               NULL,
+                               &chiSq);
+
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("theParams[%d] is %.1f\n", i, theParams->data.F32[i]);
+    }
+    printf("chiSq is %f\n", chiSq);
+
+    psMemCheckCorruption(1);
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimizeChi2(): no masks",
+                testStatus);
+    psMemCheckCorruption(1);
+    psFree(domain);
+    psFree(data);
+    psFree(errors);
+    psFree(initialGuess);
+    psFree(paramMask);
+    psFree(tmpVecPtr);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psMinimize02.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize02.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize02.c	(revision 4547)
@@ -0,0 +1,168 @@
+/*****************************************************************************
+    This routine must ensure that the psMinimize function correctly
+    minimizes an arbitrary function.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define DATA_WIDTH 2
+#define NUM_PARAMS 2
+
+float myFunc0(const psVector *restrict myParams,
+              const psVector *restrict myCoords)
+{
+    float P0 = myCoords->data.F32[0];
+    float P1 = myCoords->data.F32[1];
+    float x = myParams->data.F32[0];
+    float y = myParams->data.F32[1];
+    float tmp = 0.0;
+
+    tmp = 10.0 * (x - P0) * (x - P0) + 20.0 * (y - P1) * (y - P1) + 30.0;
+    //    printf("--------- myFunc((%.1f %.1f) %.1f %.1f) is %.1f ---------\n",
+    //    printf("--------- myFunc() params: (%.1f %.1f) coords: (%.1f %.1f) is %.1f ---------\n",
+    //           x, y, P0, P1, tmp);
+
+    return(tmp);
+}
+
+float myFuncDeriv0(const psVector *restrict myParams,
+                   const psVector *restrict myCoords,
+                   psS32 whichParamDeriv)
+{
+    float P0 = myCoords->data.F32[0];
+    float P1 = myCoords->data.F32[1];
+    float x = myParams->data.F32[0];
+    float y = myParams->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = 20.0 * (x - P0);
+    } else
+        if (whichParamDeriv == 1) {
+            tmp = 40.0 * (y - P1);
+        }
+
+    //    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f (%d)) is %.1f ---------\n",
+    //            x, y, myParams->data.F32[0], myParams->data.F32[1], whichParamDeriv, tmp);
+    return(tmp);
+}
+
+
+float myFunc(const psVector *restrict myParams,
+             const psVector *restrict myCoords)
+{
+    float x = myCoords->data.F32[0];
+    float y = myCoords->data.F32[1];
+    float A = myParams->data.F32[0];
+    float B = myParams->data.F32[1];
+    float C = myParams->data.F32[2];
+    float D = myParams->data.F32[3];
+    float tmp = 0.0;
+
+    tmp = (A * x) + (B*x*x) + (C*y*y) + (D*x*x*y);
+    printf("--------- myFunc((%.1f %.1f) %.1f %.1f %.1f %.1f) is %.1f ---------\n",
+           x, y, A, B, C, D, tmp);
+
+    return(tmp);
+}
+
+float myFuncDeriv(const psVector *restrict myParams,
+                  const psVector *restrict myCoords,
+                  psS32 whichParamDeriv)
+{
+    float x = myCoords->data.F32[0];
+    float y = myCoords->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = 1.0;
+        tmp = x;
+    } else
+        if (whichParamDeriv == 1) {
+            tmp = x;
+            tmp = x*x;
+        } else
+            if (whichParamDeriv == 2) {
+                tmp = y;
+                tmp = y*y;
+            } else
+                if (whichParamDeriv == 3) {
+                    tmp = x * x * y;
+                }
+
+    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
+           x, y, myParams->data.F32[0], myParams->data.F32[1],
+           myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
+    return(tmp);
+}
+
+
+psS32 main()
+{
+    psVector *initialGuess = NULL;
+    psVector *paramMask = NULL;
+    psVector *coord = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    psVector *theParams = NULL;
+
+    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    coord = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
+
+
+    //--------- myFunc((0.0 1.0) -8.6 -7.6 14.6 5.0) is 6.0 ---------
+
+    // Build the data.
+    initialGuess->data.F32[0] = 5.0;
+    initialGuess->data.F32[1] = 7.0;
+
+    for (i=0;i<DATA_WIDTH;i++) {
+        coord->data.F32[i] = (float) i;
+    }
+    coord->data.F32[0] = 1.0;
+    coord->data.F32[1] = 2.0;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimize(): no masks");
+
+    for (i=0;i<NUM_PARAMS;i++)
+        printf("Initial parameter %d is: %.1f\n", i, initialGuess->data.F32[i]);
+
+    theParams = psMinimize(initialGuess,
+                           myFunc0,
+                           myFuncDeriv0,
+                           coord,
+                           NULL);
+
+    for (i=0;i<NUM_PARAMS;i++)
+        printf("Parameter %d is: %.1f\n", i, theParams->data.F32[i]);
+
+    psMemCheckCorruption(1);
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimize(): no masks",
+                testStatus);
+
+    psMemCheckCorruption(1);
+    psFree(initialGuess);
+    psFree(paramMask);
+    psFree(coord);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psMinimize03.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize03.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize03.c	(revision 4547)
@@ -0,0 +1,172 @@
+/*****************************************************************************
+    This routine must ensure that the psMinimize function correctly
+    minimizes an arbitrary function.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define DATA_WIDTH 2
+#define NUM_PARAMS 4
+
+float myFunc0(const psVector *restrict myParams,
+              const psVector *restrict myCoords)
+{
+    float P0 = myCoords->data.F32[0];
+    float P1 = myCoords->data.F32[1];
+    float x = myParams->data.F32[0];
+    float y = myParams->data.F32[1];
+    float tmp = 0.0;
+
+    tmp = 10.0 * (x - P0) * (x - P0) + 20.0 * (y - P1) * (y - P1) + 30.0;
+    //    printf("--------- myFunc((%.1f %.1f) %.1f %.1f) is %.1f ---------\n",
+    //    printf("--------- myFunc() params: (%.1f %.1f) coords: (%.1f %.1f) is %.1f ---------\n",
+    //           x, y, P0, P1, tmp);
+
+    return(tmp);
+}
+
+float myFuncDeriv0(const psVector *restrict myParams,
+                   const psVector *restrict myCoords,
+                   psS32 whichParamDeriv)
+{
+    float P0 = myCoords->data.F32[0];
+    float P1 = myCoords->data.F32[1];
+    float x = myParams->data.F32[0];
+    float y = myParams->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = 20.0 * (x - P0);
+    } else
+        if (whichParamDeriv == 1) {
+            tmp = 40.0 * (y - P1);
+        }
+
+    //    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f (%d)) is %.1f ---------\n",
+    //            x, y, myParams->data.F32[0], myParams->data.F32[1], whichParamDeriv, tmp);
+    return(tmp);
+}
+
+
+float myFunc(const psVector *restrict myParams,
+             const psVector *restrict myCoords)
+{
+    float x = myCoords->data.F32[0];
+    float y = myCoords->data.F32[1];
+    float A = myParams->data.F32[0];
+    float B = myParams->data.F32[1];
+    float C = myParams->data.F32[2];
+    float D = myParams->data.F32[3];
+    float tmp = 0.0;
+
+    tmp = (A * x) + (B*x*x) + (C*y*y) + (D*x*x*y);
+    printf("-- myFunc() params: (%.1f %.1f %.1f %.1f) coords: (%.1f %.1f) is %.1f ---------\n",
+           A, B, C, D, x, y, tmp);
+
+    return(tmp);
+}
+
+float myFuncDeriv(const psVector *restrict myParams,
+                  const psVector *restrict myCoords,
+                  psS32 whichParamDeriv)
+{
+    float x = myCoords->data.F32[0];
+    float y = myCoords->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = 1.0;
+        tmp = x;
+    } else
+        if (whichParamDeriv == 1) {
+            tmp = x;
+            tmp = x*x;
+        } else
+            if (whichParamDeriv == 2) {
+                tmp = y;
+                tmp = y*y;
+            } else
+                if (whichParamDeriv == 3) {
+                    tmp = x * x * y;
+                }
+
+    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
+           x, y, myParams->data.F32[0], myParams->data.F32[1],
+           myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
+    return(tmp);
+}
+
+
+psS32 main()
+{
+    psVector *initialGuess = NULL;
+    psVector *paramMask = NULL;
+    psVector *coord = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    psVector *theParams = NULL;
+
+    initialGuess = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    paramMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    coord = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
+
+
+    //--------- myFunc((0.0 1.0) -8.6 -7.6 14.6 5.0) is 6.0 ---------
+
+    // Build the data.
+    initialGuess->data.F32[0] = 2.0;
+    initialGuess->data.F32[1] = 3.0;
+    initialGuess->data.F32[2] = 4.0;
+    initialGuess->data.F32[3] = 5.0;
+
+    for (i=0;i<DATA_WIDTH;i++) {
+        coord->data.F32[i] = (float) i;
+    }
+    coord->data.F32[0] = 1.0;
+    coord->data.F32[1] = 2.0;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimize(): no masks");
+
+    for (i=0;i<NUM_PARAMS;i++)
+        printf("Initial parameter %d is: %.1f\n", i, initialGuess->data.F32[i]);
+
+    theParams = psMinimize(initialGuess,
+                           myFunc,
+                           myFuncDeriv,
+                           coord,
+                           NULL);
+
+    for (i=0;i<NUM_PARAMS;i++)
+        printf("Parameter %d is: %.1f\n", i, theParams->data.F32[i]);
+
+    printf("Function is %.1f\n", myFunc(theParams, coord));
+
+    psMemCheckCorruption(1);
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimize(): no masks",
+                testStatus);
+
+    psMemCheckCorruption(1);
+    psFree(initialGuess);
+    psFree(paramMask);
+    psFree(coord);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psMinimize04.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize04.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize04.c	(revision 4547)
@@ -0,0 +1,274 @@
+/*****************************************************************************
+This routine must ensure that the psVectorFitPolynomial1D works correctly.
+We create a vectors of data points (x and y), and populate them with the
+values from an arbitrary function setData().  We then call
+psVectorFitPolynomial1D() with a regular polynomial data structure.  We then
+evaluate the polynomial with the coefficients generated above and determine
+if they are within an error tolerance of the expected values.
+ 
+    t00(): all input vectors are non-NULL.
+    t01(): yErr is NULL.
+    t02(): x, yErr is NULL.
+    t03(): x, y, yErr is NULL.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define NUM_DATA 10
+#define POLY_ORDER 5
+#define A 3.0
+#define B 2.0
+#define C 3.0
+#define ERROR_TOLERANCE 0.10
+#define YERR 1.0
+double setData(double x)
+{
+    return(A + (B * x) + (C * x * x));
+}
+
+psS32 t00()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psVector *yErr = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    double expectData;
+    double actualData;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F64[i] = (double) i;
+        y->data.F64[i] = setData(x->data.F64[i]);
+        yErr->data.F64[i] = YERR;
+        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F64[i], y->data.F64[i]);
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): equal difference in variable yErr");
+
+    psVectorFitPolynomial1D(myPoly, x, y, yErr);
+
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    for (i=0;i<NUM_DATA;i++) {
+        expectData = setData(x->data.F64[i]);
+        actualData = psPolynomial1DEval(
+                         myPoly,
+                         x->data.F64[i]
+                     );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F64[i], actualData, expectData);
+            testStatus = false;
+        }
+        //        } else {
+        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+        //                   i, x->data.F64[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psFree(yErr);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): equal differences in variable yErr",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t01()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    double expectData;
+    double actualData;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F64[i] = (double) i;
+        y->data.F64[i] = setData(x->data.F64[i]);
+        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F64[i], y->data.F64[i]);
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, x, y, NULL);
+
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    for (i=0;i<NUM_DATA;i++) {
+        expectData = setData(x->data.F64[i]);
+        actualData = psPolynomial1DEval(
+                         myPoly,
+                         x->data.F64[i]
+                     );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F64[i], actualData, expectData);
+            testStatus = false;
+            //        } else {
+            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+            //                   i, x->data.F64[i], actualData, expectData);
+        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): yErr is NULL",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t02()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    double expectData;
+    double actualData;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    for (i=0;i<NUM_DATA;i++) {
+        y->data.F64[i] = setData((double) i);
+        //        printf("Original data %d: (%.1f)\n", i, y->data.F64[i]);
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): x, yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
+
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    for (i=0;i<NUM_DATA;i++) {
+        expectData = setData((double) i);
+        actualData = psPolynomial1DEval(
+                         myPoly,
+                         (double) i
+                     );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, (double) i, actualData, expectData);
+            testStatus = false;
+            //        } else {
+            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+            //                   i, (double) i, actualData, expectData);
+        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): x, yErr is NULL",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t03()
+{
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    psPolynomial1D *myPoly = NULL;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): all inputs are NULL");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for null input polynomial.");
+    myPoly = psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
+    if ( myPoly != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"A null polynomial should have returned a null pointer.");
+        testStatus = false;
+    }
+
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): all inputs are NULL",
+                testStatus);
+
+    return (!testStatus);
+}
+
+
+psS32 main()
+{
+    t00();
+    t01();
+    t02();
+    t03();
+}
Index: /trunk/psLib/test/math/tst_psMinimize04_F32.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize04_F32.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize04_F32.c	(revision 4547)
@@ -0,0 +1,268 @@
+/*****************************************************************************
+This routine must ensure that the psVectorFitPolynomial1D works correctly.
+We create a vectors of data points (x and y), and populate them with the
+values from an arbitrary function setData().  We then call
+psVectorFitPolynomial1D() with a regular polynomial data structure.  We then
+evaluate the polynomial with the coefficients generated above and determine
+if they are within an error tolerance of the expected values.
+ 
+    t00(): all input vectors are non-NULL.
+    t01(): yErr is NULL.
+    t02(): x, yErr is NULL.
+    t03(): x, y, yErr is NULL.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define NUM_DATA 10
+#define POLY_ORDER 5
+#define A 3.0
+#define B 2.0
+#define C 3.0
+#define ERROR_TOLERANCE 0.10
+#define YERR 10.0
+float setData(float x)
+{
+    return(A + (B * x) + (C * x * x));
+}
+
+psS32 t00()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psVector *yErr = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    float expectData;
+    float actualData;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F32[i] = (float) i;
+        y->data.F32[i] = setData(x->data.F32[i]);
+        yErr->data.F32[i] = YERR;
+        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F32[i], y->data.F32[i]);
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): equal errors in yErr");
+
+    psVectorFitPolynomial1D(myPoly, x, y, yErr);
+
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    for (i=0;i<NUM_DATA;i++) {
+        expectData = setData(x->data.F32[i]);
+        actualData = psPolynomial1DEval(
+                         myPoly,
+                         x->data.F32[i]
+                     );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F32[i], actualData, expectData);
+            testStatus = false;
+            //        } else {
+            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+            //                   i, x->data.F32[i], actualData, expectData);
+        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psFree(yErr);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): equal errors in yErr",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t01()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    float expectData;
+    float actualData;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F32[i] = (float) i;
+        y->data.F32[i] = setData(x->data.F32[i]);
+        //        printf("Original data %d: (%.1f %.1f)\n", i, x->data.F32[i], y->data.F32[i]);
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, x, y, NULL);
+
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    for (i=0;i<NUM_DATA;i++) {
+        expectData = setData(x->data.F32[i]);
+        actualData = psPolynomial1DEval(
+                         myPoly,
+                         x->data.F32[i]
+                     );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F32[i], actualData, expectData);
+            testStatus = false;
+            //        } else {
+            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+            //                   i, x->data.F32[i], actualData, expectData);
+        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): yErr is NULL",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t02()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+    float expectData;
+    float actualData;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_ORD);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+
+    for (i=0;i<NUM_DATA;i++) {
+        y->data.F32[i] = setData((float) i);
+        //        printf("Original data %d: (%.1f)\n", i, y->data.F32[i]);
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): x, yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
+
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    for (i=0;i<NUM_DATA;i++) {
+        expectData = setData((float) i);
+        actualData = psPolynomial1DEval(
+                         myPoly,
+                         (float) i
+                     );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, (float) i, actualData, expectData);
+            testStatus = false;
+            //        } else {
+            //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+            //                   i, (float) i, actualData, expectData);
+        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): x, yErr is NULL",
+                testStatus);
+
+    return (!testStatus);
+}
+
+psS32 t03()
+{
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): all inputs are NULL");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null arguments.");
+    psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
+
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): all inputs are NULL",
+                testStatus);
+
+    return (!testStatus);
+}
+
+
+psS32 main()
+{
+    t00();
+    t01();
+    t02();
+    t03();
+}
Index: /trunk/psLib/test/math/tst_psMinimize04b.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize04b.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize04b.c	(revision 4547)
@@ -0,0 +1,259 @@
+/*****************************************************************************
+    This routine must ensure that the psVectorFitPolynomial1D works correctly.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define NUM_DATA 21
+#define POLY_ORDER 10
+#define A 2.0
+#define B 3.0
+#define C 2.0
+#define D 4.0
+#define E 5.0
+#define ERROR_TOLERANCE 0.10
+#define IGNORE (ERROR_TOLERANCE * NUM_DATA)
+
+double setData(double x)
+{
+    return(A + (B * x) + (C * x * x) + (D * x * x * x) + (E * x * x * x * x));
+}
+
+psS32 t00()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psVector *yErr = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F64[i] = (double) i;
+        y->data.F64[i] = setData(x->data.F64[i]);
+        yErr->data.F64[i] = 1.0;
+    }
+    p_psNormalizeVectorRangeF64(x, -1.0, 1.0);
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, equal errors in yErr");
+
+    psVectorFitPolynomial1D(myPoly, x, y, yErr);
+
+    //  Remove for testing since print out differs from platforms
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    // We don't test the first or last few data items.
+    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
+        double expectData = y->data.F64[i];
+        double actualData = psPolynomial1DEval(
+                                myPoly,
+                                x->data.F64[i]
+                            );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F64[i], actualData, expectData);
+            testStatus = false;
+        }
+        //      Remove for testing since print out differs from platforms
+        //        } else {
+        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+        //                   i, x->data.F64[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psFree(yErr);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, equal errors in yErr",
+                testStatus);
+    return (!testStatus);
+}
+
+
+psS32 t01()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F64[i] = (double) i;
+        y->data.F64[i] = setData(x->data.F64[i]);
+    }
+    p_psNormalizeVectorRangeF64(x, -1.0, 1.0);
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, x, y, NULL);
+
+    // We don't test the first or last few data items.
+    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
+        double expectData = y->data.F64[i];
+        double actualData = psPolynomial1DEval(
+                                myPoly,
+                                x->data.F64[i]
+                            );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F64[i], actualData, expectData);
+            testStatus = false;
+        }
+        //      Remove for testing since print out differs from platforms
+        //        } else {
+        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+        //                   i, x->data.F64[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
+                testStatus);
+    return (!testStatus);
+}
+
+
+psS32 t02()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F64[i] = (double) i;
+        y->data.F64[i] = setData(x->data.F64[i]);
+    }
+    p_psNormalizeVectorRangeF64(x, -1.0, 1.0);
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
+    //    psVectorFitPolynomial1D(myPoly, x, y, NULL);
+
+    // We don't test the first or last few data items.
+    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
+        double expectData = y->data.F64[i];
+        double actualData = psPolynomial1DEval(myPoly, x->data.F64[i]);
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.2f %.2f), expected was (%.2f)\n",
+                   i, x->data.F64[i], actualData, expectData);
+            testStatus = false;
+        }
+        //      Remove for testing since print out differs from platforms
+        //        } else {
+        //            printf("Fitted data %d: (%.2f %.2f), expected was (%.2f)\n",
+        //                   i, x->data.F64[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL",
+                testStatus);
+    return (!testStatus);
+}
+
+psS32 t03()
+{
+    psPolynomial1D *myPoly = NULL;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for null arguments.");
+    myPoly = psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
+    if (myPoly != NULL) {
+        printf("ERROR: psVectorFitPolynomial1D() returned a non-NULL polynomial.\n");
+        testStatus = false;
+    }
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
+                testStatus);
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    t00();
+    t01();
+    t02();
+    t03();
+}
Index: /trunk/psLib/test/math/tst_psMinimize04b_F32.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize04b_F32.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize04b_F32.c	(revision 4547)
@@ -0,0 +1,261 @@
+/*****************************************************************************
+    This routine must ensure that the psVectorFitPolynomial1D works correctly.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psMemory.h"
+#include "psVector.h"
+#include "psImage.h"
+#include "psFunctions.h"
+#include "psMinimize.h"
+#include <math.h>
+#define NUM_DATA 20
+#define POLY_ORDER 10
+#define A 2.0
+#define B 3.0
+#define C 2.0
+#define D 4.0
+#define E 5.0
+#define ERROR_TOLERANCE 0.10
+#define IGNORE (ERROR_TOLERANCE * NUM_DATA)
+
+float setData(float x)
+{
+    return(A + (B * x) + (C * x * x) + (D * x * x * x) + (E * x * x * x * x));
+}
+
+psS32 t00()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psVector *yErr = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    yErr = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F32[i] = (float) i;
+        y->data.F32[i] = setData(x->data.F32[i]);
+        yErr->data.F32[i] = 1.0;
+    }
+    p_psNormalizeVectorRangeF32(x, -1.0f, 1.0f);
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, equal errors in yErr");
+
+    psVectorFitPolynomial1D(myPoly, x, y, yErr);
+
+    //  Remove for testing since printout differs between platforms
+    //    for (i=0;i<POLY_ORDER+1;i++) {
+    //        printf("Polynomial coefficient %d is %0.1f\n", i, myPoly->coeff[i]);
+    //    }
+
+    // We don't test the first or last few data items.
+    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
+        float expectData = y->data.F32[i];
+        float actualData = psPolynomial1DEval(
+                               myPoly,
+                               x->data.F32[i]
+                           );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F32[i], actualData, expectData);
+            testStatus = false;
+        }
+        //       REMOVE for testing since printout is different for different platforms
+        //        } else {
+        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+        //                   i, x->data.F32[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psFree(yErr);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, equal errors in yErr",
+                testStatus);
+    return (!testStatus);
+}
+
+
+psS32 t01()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F32[i] = (float) i;
+        y->data.F32[i] = setData(x->data.F32[i]);
+    }
+    p_psNormalizeVectorRangeF32(x, -1.0f, 1.0f);
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, x, y, NULL);
+
+    // We don't test the first or last few data items.
+    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
+        float expectData = y->data.F32[i];
+        float actualData = psPolynomial1DEval(
+                               myPoly,
+                               x->data.F32[i]
+                           );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F32[i], actualData, expectData);
+            testStatus = false;
+        }
+        //      Removed for testing since printout different on different platforms
+        //        } else {
+        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+        //                   i, x->data.F32[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
+                testStatus);
+    return (!testStatus);
+}
+
+
+psS32 t02()
+{
+    psPolynomial1D *myPoly = NULL;
+    psVector *x = NULL;
+    psVector *y = NULL;
+    psS32 i = 0;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    myPoly = psPolynomial1DAlloc(POLY_ORDER+1, PS_POLYNOMIAL_CHEB);
+    x = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+    y = psVectorAlloc(NUM_DATA, PS_TYPE_F32);
+
+    for (i=0;i<NUM_DATA;i++) {
+        x->data.F32[i] = (float) i;
+        y->data.F32[i] = setData(x->data.F32[i]);
+    }
+    p_psNormalizeVectorRangeF32(x, -1.0, 1.0);
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL");
+
+    psVectorFitPolynomial1D(myPoly, NULL, y, NULL);
+
+    // We don't test the first or last few data items.
+    for (i=IGNORE;i<NUM_DATA-IGNORE;i++) {
+        float expectData = y->data.F32[i];
+        float  actualData = psPolynomial1DEval(
+                                myPoly,
+                                x->data.F32[i]
+                            );
+        if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
+            printf("ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+                   i, x->data.F32[i], actualData, expectData);
+            testStatus = false;
+        }
+        //      Remove for testing since printout different for different platforms
+        //        } else {
+        //            printf("Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
+        //                   i, x->data.F32[i], actualData, expectData);
+        //        }
+    }
+
+    psMemCheckCorruption(1);
+    psFree(myPoly);
+    psFree(x);
+    psFree(y);
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, x, yErr is NULL",
+                testStatus);
+    return (!testStatus);
+}
+
+psS32 t03()
+{
+    psPolynomial1D *myPoly = NULL;
+    psS32 currentId = psMemGetId();
+    psS32 testStatus = true;
+    psS32 memLeaks = 0;
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psVectorFitPolynomial1D(): CHEB, yErr is NULL");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null arguments.");
+    myPoly = psVectorFitPolynomial1D(NULL, NULL, NULL, NULL);
+    if (myPoly != NULL) {
+        printf("ERROR: psVectorFitPolynomial1D() returned a non-NULL polynomial.\n");
+        testStatus = false;
+    }
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psMinimize functions",
+                "psVectorFitPolynomial1D(): CHEB, yErr is NULL",
+                testStatus);
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    t00();
+    t01();
+    t02();
+    t03();
+}
Index: /trunk/psLib/test/math/tst_psMinimize05.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize05.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize05.c	(revision 4547)
@@ -0,0 +1,279 @@
+/*****************************************************************************
+    This routine must ensure that psMinimizePowell() works correctly.
+ 
+    We test with a NULL and non-NULL paramMask.
+ 
+    XXX: Must verify the stderr for the NULL parameter tests.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include <math.h>
+#define N 5
+#define MIN_VALUE 20.0
+#define NUM_PARAMS 10
+#define ERROR_TOLERANCE 0.10
+float expectedParm[NUM_PARAMS];
+psS32 testStatus = true;
+
+/*****************************************************************************
+myFunc(): This routine subtracts the associate value in expectedParm[] from
+each parameter and then squares it, then sums that for all parameters, then
+adds MIN_VALUE to it.  The minimum for this function will be MIN_VALUE, and
+will occur when each parameter equals the associated value in expectedParm[].
+ 
+This procedure ignores the coordinates, other than to ensure that they were
+passed correctly from psMinimizePowell().
+ *****************************************************************************/
+float myFunc(psVector *myParams,
+             psArray *myCoords)
+{
+    float sum = 0.0;
+    float coordData = 0.0;
+    float expData = 0.0;
+    psS32 i;
+
+    for (i=0;i<N;i++) {
+        coordData = ((psVector *) (myCoords->data[i]))->data.F32[0];
+        expData = (float) (i+10);
+        if (fabs(coordData - expData) > FLT_EPSILON) {
+            printf("ERROR(1): coordinate data was incorrectly passed to myFunc()\n");
+            printf("ERROR(1): was (%f) should be (%f)\n", coordData, expData);
+            testStatus = false;
+        }
+        coordData = ((psVector *) (myCoords->data[i]))->data.F32[1];
+        expData = (float) (i+3);
+        if (fabs(coordData - expData) > FLT_EPSILON) {
+            printf("ERROR(2): coordinate data was incorrectly passed to myFunc()\n");
+            printf("ERROR(2): was (%f) should be (%f)\n", coordData, expData);
+            testStatus = false;
+        }
+    }
+
+
+    sum = 0.0;
+    for (i=0;i<NUM_PARAMS;i++) {
+        sum+= (myParams->data.F32[i] - expectedParm[i]) * (myParams->data.F32[i] - expectedParm[i]);
+    }
+    sum = MIN_VALUE + (sum * sum);
+
+    return(sum);
+}
+
+
+psS32 t00()
+{
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    psS32 i = 0;
+    psArray *myCoords;
+    psVector *myParams;
+    psVector *myParamMask;
+    psMinimization *min;
+
+    psTraceSetLevel(".psLib", 0);
+    /**************************************************************************
+     *************************************************************************/
+    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    myParamMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_U8);
+    min = psMinimizationAlloc(100, 0.01);
+
+    myCoords = psArrayAlloc(N);
+    for (i=0;i<N;i++) {
+        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
+        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
+        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
+    }
+    for (i=0;i<NUM_PARAMS;i++) {
+        expectedParm[i] = 2.32 + (float) (2 * i);
+        myParams->data.F32[i] = 0.0;
+        myParams->data.F32[i] = (float) i;
+        myParamMask->data.U8[i] = 0;
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimizePowell()");
+
+    psMinimizePowell(min,
+                     myParams,
+                     myParamMask,
+                     myCoords,
+                     (psMinimizePowellFunc) myFunc);
+
+    printf("\nThe minimum is %f (expected: %f)\n", min->value, MIN_VALUE);
+
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
+               myParams->data.F32[i], expectedParm[i]);
+
+        if (fabs(myParams->data.F32[i] - expectedParm[i]) > fabs(ERROR_TOLERANCE * expectedParm[i])) {
+            printf("ERROR: Parameter %d: (%.1f), expected was (%.1f)\n",
+                   i, myParams->data.F32[i], expectedParm[i]);
+            testStatus = false;
+        } else {
+            printf("Parameter %d: (%.1f), expected was (%.1f)\n",
+                   i, myParams->data.F32[i], expectedParm[i]);
+        }
+    }
+
+
+    psFree(myCoords);
+    psFree(myParams);
+    psFree(myParamMask);
+    psFree(min);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimizePowell()",
+                testStatus);
+
+
+    return (!testStatus);
+}
+
+psS32 t01()
+{
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    psS32 i = 0;
+    psArray *myCoords;
+    psVector *myParams;
+    psMinimization *min;
+
+    psTraceSetLevel(".psLib", 0);
+    /**************************************************************************
+     *************************************************************************/
+    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    min = psMinimizationAlloc(100, 0.01);
+
+    myCoords = psArrayAlloc(N);
+    for (i=0;i<N;i++) {
+        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
+        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
+        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
+    }
+    for (i=0;i<NUM_PARAMS;i++) {
+        expectedParm[i] = 2.32 + (float) (2 * i);
+        myParams->data.F32[i] = 0.0;
+        myParams->data.F32[i] = (float) i;
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimizePowell()");
+
+    psMinimizePowell(min,
+                     myParams,
+                     NULL,
+                     myCoords,
+                     (psMinimizePowellFunc) myFunc);
+
+    printf("\nThe minimum is %f (expected: %f)\n", min->value, MIN_VALUE);
+
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
+               myParams->data.F32[i], expectedParm[i]);
+
+        if (fabs(myParams->data.F32[i] - expectedParm[i]) > fabs(ERROR_TOLERANCE * expectedParm[i])) {
+            printf("ERROR: Parameter %d: (%.1f), expected was (%.1f)\n",
+                   i, myParams->data.F32[i], expectedParm[i]);
+            testStatus = false;
+        } else {
+            printf("Parameter %d: (%.1f), expected was (%.1f)\n",
+                   i, myParams->data.F32[i], expectedParm[i]);
+        }
+    }
+
+
+    psFree(myCoords);
+    psFree(myParams);
+    psFree(min);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimizePowell()",
+                testStatus);
+
+
+    return (!testStatus);
+}
+
+psS32 t02()
+{
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    psS32 i = 0;
+    psArray *myCoords;
+    psVector *myParams;
+    psVector *myParamMask;
+    psMinimization *min;
+
+    psTraceSetLevel(".psLib", 0);
+    /**************************************************************************
+     *************************************************************************/
+    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    myParamMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_U8);
+    min = psMinimizationAlloc(100, 0.01);
+
+    myCoords = psArrayAlloc(N);
+    for (i=0;i<N;i++) {
+        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
+        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
+        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
+    }
+    for (i=0;i<NUM_PARAMS;i++) {
+        expectedParm[i] = 2.32 + (float) (2 * i);
+        myParams->data.F32[i] = 0.0;
+        myParams->data.F32[i] = (float) i;
+        myParamMask->data.U8[i] = 0;
+    }
+
+    printPositiveTestHeader(stdout,
+                            "psMinimize functions",
+                            "psMinimizePowell(): various NULL inputs");
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null minimize.");
+    psMinimizePowell(NULL, myParams, myParamMask, myCoords, (psMinimizePowellFunc) myFunc);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null parameter vector");
+    psMinimizePowell(min, NULL, myParamMask, myCoords,(psMinimizePowellFunc) myFunc);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null coords.");
+    psMinimizePowell(min, myParams, myParamMask, NULL, (psMinimizePowellFunc) myFunc);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for null function");
+    psMinimizePowell(min, myParams, myParamMask, myCoords, NULL);
+
+    psFree(myCoords);
+    psFree(myParams);
+    psFree(myParamMask);
+    psFree(min);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psMinimize functions",
+                "psMinimizePowell(): various NULL inputs",
+                testStatus);
+
+
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    t00();
+    t01();
+    t02();
+}
Index: /trunk/psLib/test/math/tst_psMinimize06.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize06.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize06.c	(revision 4547)
@@ -0,0 +1,107 @@
+/*****************************************************************************
+    This routine must ensure that psMinimizeLM() works correctly.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include <math.h>
+#define NUM_ITERATIONS 10000
+#define ERR_TOL 0.0
+#define N 20
+#define MIN_VALUE 5.0
+#define NUM_PARAMS 3
+float expectedParm[NUM_PARAMS];
+psS32 testStatus = true;
+
+/*****************************************************************************
+myFunc():
+    sum = (param[0] * x[0]) + 
+          (param[1] * x[1]) +
+          ...
+ *****************************************************************************/
+psF64 myFunc(psVector *deriv,
+             psVector *params,
+             psVector *x)
+{
+    if ((deriv == NULL) ||
+            (params == NULL)) {
+        psError(PS_ERR_UNKNOWN, true, "deriv or params is NULL.\n");
+    }
+
+    psF64 sum = 0.0;
+    for (psS32 i=0 ; i < params->n ; i++) {
+        sum += (params->data.F32[i] * x->data.F32[i]);
+        deriv->data.F32[i] = params->data.F32[i];
+    }
+
+    return(sum);
+}
+
+
+psS32 t01()
+{
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    psS32 i = 0;
+    psArray *myCoords;
+    psVector *myParams;
+    psImage *myCovar;
+    psMinimization *min;
+    psVector *y;
+
+    psTraceSetLevel(".psLib", 0);
+    /**************************************************************************
+     *************************************************************************/
+    min = psMinimizationAlloc(NUM_ITERATIONS, ERR_TOL);
+    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
+    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    myCoords = psArrayAlloc(N);
+    y = psVectorAlloc(N, PS_TYPE_F32);
+
+    for (i=0;i<N;i++) {
+        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
+        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10);
+        ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3);
+        y->data.F32[i] = (float) i;
+    }
+    for (i=0;i<NUM_PARAMS;i++) {
+        expectedParm[i] = 2.42 + (float) (2 * i);
+        myParams->data.F32[i] = (float) i;
+        myParams->data.F32[i] = expectedParm[i] * 1.3;
+        myParams->data.F32[i] = 0.0;
+        myParams->data.F32[i] = (float) (5 + i);
+    }
+
+    psMinimizeLMChi2(min,
+                     myCovar,
+                     myParams,
+                     NULL,
+                     myCoords,
+                     y,
+                     NULL,
+                     (psMinimizeLMChi2Func) myFunc);
+
+    printf("\nThe chi-squared is %f\n", min->value);
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
+               myParams->data.F32[i], expectedParm[i]);
+    }
+
+    psFree(min);
+    psFree(myCovar);
+    psFree(myParams);
+    psFree(myCoords);
+    psFree(y);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    t01();
+}
Index: /trunk/psLib/test/math/tst_psMinimize07.c
===================================================================
--- /trunk/psLib/test/math/tst_psMinimize07.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psMinimize07.c	(revision 4547)
@@ -0,0 +1,164 @@
+/*****************************************************************************
+    This routine must ensure that psMinimizeLMChi2Gauss1D() works correctly.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include <math.h>
+#define NUM_ITERATIONS 100
+#define ERR_TOL 0.0
+#define N 24
+#define NUM_PARAMS 2
+#define MEAN 14.5
+#define STDEV 1.2
+
+float expectedParm[NUM_PARAMS];
+psS32 testStatus = true;
+
+// This routine generates a vector of length "n" with the specified mean and
+// stdev.
+psVector *genGaussianVector(int n, float mean, float stdev)
+{
+    psVector *y = psVectorAlloc(n, PS_TYPE_F32);
+
+    for (psS32 i=0;i<n;i++) {
+        y->data.F32[i] = psGaussian((float) i, mean, stdev, false);
+    }
+    return(y);
+}
+
+// This routine tries to fit a Gaussian to a set of data points via the
+// psMinimizeLMChi2() and psMinimizeLMChi2Gauss1D() functions.
+psS32 t00()
+{
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    psS32 i = 0;
+    psArray *myCoords;
+    psVector *myParams;
+    psImage *myCovar;
+    psMinimization *min;
+
+    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
+    /**************************************************************************
+     *************************************************************************/
+    min = psMinimizationAlloc(NUM_ITERATIONS, ERR_TOL);
+    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
+    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    myParams->data.F32[0] = MEAN * 0.7;
+    myParams->data.F32[1] = STDEV * 0.7;
+    myCoords = psArrayAlloc(N);
+    psVector *y = genGaussianVector(N, MEAN, STDEV);
+
+    for (i=0;i<N;i++) {
+        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
+        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i;
+        printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]);
+    }
+
+    psMinimizeLMChi2(min,
+                     myCovar,
+                     myParams,
+                     NULL,
+                     myCoords,
+                     y,
+                     NULL,
+                     (psMinimizeLMChi2Func) psMinimizeLMChi2Gauss1D);
+
+    printf("\nThe chi-squared is %f\n", min->value);
+
+    expectedParm[0] = MEAN;
+    expectedParm[1] = STDEV;
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
+               myParams->data.F32[i], expectedParm[i]);
+    }
+
+    psFree(min);
+    psFree(myCovar);
+    psFree(myParams);
+    psFree(myCoords);
+    psFree(y);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    return (!testStatus);
+}
+
+// This routine tries to fit a Gaussian to a set of data points via the
+// psMinimizeChi2Powell() function.
+psS32 t01()
+{
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    psS32 i = 0;
+    psArray *myCoords;
+    psVector *myParams;
+    psImage *myCovar;
+    psMinimization *min;
+
+    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
+    psTraceSetLevel(".psLib.dataManip.psMinimizeLMChi2Gauss1D", 0);
+
+    psTraceSetLevel(".psLib.dataManip.psMinimizePowell", 0);
+    psTraceSetLevel(".psLib.dataManip.myPowellChi2Func", 0);
+    psTraceSetLevel(".psLib.dataManip.p_psLineMin", 0);
+    psTraceSetLevel(".psLib.dataManip.p_psDetermineBracket", 0);
+    psTraceSetLevel(".psLib.dataManip.psFunctions.psGaussian", 0);
+    psTraceSetLevel(".psLib.dataManip.psFunctions", 0);
+    psTraceSetLevel(".", 0);
+    //    psTracePrintLevels();
+    /**************************************************************************
+     *************************************************************************/
+    min = psMinimizationAlloc(NUM_ITERATIONS, ERR_TOL);
+    myCovar = psImageAlloc(NUM_PARAMS, NUM_PARAMS, PS_TYPE_F32);
+    myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32);
+    myParams->data.F32[0] = MEAN * 0.7;
+    myParams->data.F32[1] = STDEV * 0.7;
+    myCoords = psArrayAlloc(N);
+    psVector *y = genGaussianVector(N, MEAN, STDEV);
+
+    for (i=0;i<N;i++) {
+        myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32);
+        ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) i;
+        printf("Initial data %d: (%f, %f)\n", i, ((psVector *) (myCoords->data[i]))->data.F32[0], y->data.F32[i]);
+    }
+
+    //    psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL,
+    //                         (psMinimizeChi2PowellFunc) myFunc);
+    psMinimizeChi2Powell(min, myParams, NULL, myCoords, y, NULL,
+                         (psMinimizeChi2PowellFunc) psMinimizePowellChi2Gauss1D);
+
+    printf("\nThe chi-squared is %f\n", min->value);
+
+    expectedParm[0] = MEAN;
+    expectedParm[1] = STDEV;
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("Parameter %d at the minimum is %f (expected: %f)\n", i,
+               myParams->data.F32[i], expectedParm[i]);
+    }
+
+    psFree(min);
+    psFree(myCovar);
+    psFree(myParams);
+    psFree(myCoords);
+    psFree(y);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    return (!testStatus);
+}
+
+psS32 main()
+{
+    t00();
+    t01();
+}
+//This code is
+
Index: /trunk/psLib/test/math/tst_psRandom.c
===================================================================
--- /trunk/psLib/test/math/tst_psRandom.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psRandom.c	(revision 4547)
@@ -0,0 +1,388 @@
+/*****************************************************************************
+This routine must ensure that the various random number generator functions
+work properly.
+ 
+    t00(): ensure that psRandom structs are properly allocated by psRandomAlloc().
+    t01(): ensure that psRandomUniform() produces a sequence of numbers with
+    proper mean and stdev.
+    t02(): ensure that psRandomGaussian() produces a sequence of numbers with
+    proper mean and stdev.
+    t03(): ensure that psRandomPoisson() produces a sequence of numbers with
+    proper mean and stdev.
+    t04(): ensure that psRandomReset() properly seeds the random number
+    generator for psRandomUniform().
+    t05(): ensure that psRandomReset() properly seeds the random number
+    generator for psRandomGaussian().
+    t06(): ensure that psRandomReset() properly seeds the random number
+    generator for psRandomPoisson().
+ *****************************************************************************/
+#include <stdio.h>
+#include <math.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define NUM_DATA 10000
+#define SEED 54321
+#define SEED2 345
+#define UNIFORM_MEAN 0.5
+#define UNIFORM_STDEV 0.3
+#define GAUSSIAN_MEAN 0.0
+#define GAUSSIAN_STDEV 1.0
+#define POISSON_MEAN 15.0
+#define POISSON_STDEV (POISSON_MEAN / 4)
+#define ERROR_TOLERANCE 0.1
+psS32 testStatus = true;
+
+static psS32 testRandomAlloc(void);
+static psS32 testRandomUniform(void);
+static psS32 testRandomGaussian(void);
+static psS32 testRandomPoisson(void);
+static psS32 testRandomResetUniform(void);
+static psS32 testRandomResetGaussian(void);
+static psS32 testRandomResetPoisson(void);
+
+testDescription tests[] = {
+                              {testRandomAlloc,000,"psRandomAlloc",0,false},
+                              {testRandomUniform,000,"psRandomUniform",0,false},
+                              {testRandomGaussian,000,"psRandomGaussian",0,false},
+                              {testRandomPoisson,000,"psRandomPoisson",0,false},
+                              {testRandomResetUniform,000,"psRandomReset",0,false},
+                              {testRandomResetGaussian,000,"psRandomReset",0,false},
+                              {testRandomResetPoisson,000,"psRandomReset",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    if(!runTestSuite(stderr,"psRandom",tests,argc,argv)) {
+        return 1;
+    }
+
+    return 0;
+}
+
+psS32 testRandomAlloc(void)
+{
+    psRandom *myRNG = NULL;
+
+    // Valid type allocation
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+    if (myRNG->type != PS_RANDOM_TAUS) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",myRNG->type,PS_RANDOM_TAUS);
+        return 2;
+    }
+    psFree(myRNG);
+
+    // Valid type allocation with seed equal to zero
+    psLogSetDestination("file:seed_msglog1.txt");
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, 0);
+    psLogSetDestination("dest:stderr");
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 3;
+    }
+    if (myRNG->type != PS_RANDOM_TAUS) {
+        psError(PS_ERR_UNKNOWN,true,"Type %d not as expected %d",myRNG->type,PS_RANDOM_TAUS);
+        return 4;
+    }
+    psFree(myRNG);
+
+    // Invalid type allocation
+    psLogMsg(__func__,PS_LOG_INFO,"Invalid type, should generate error message");
+    myRNG = psRandomAlloc(100,SEED);
+    if (myRNG != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid type");
+        return 5;
+    }
+
+    // Negative seed value
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS,-5);
+    if(myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return allocated psRandom");
+        return 6;
+    }
+    psFree(myRNG);
+
+    return 0;
+}
+
+psS32 testRandomUniform(void)
+{
+    psRandom *myRNG = NULL;
+    psVector *rans = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+
+    // Initialize vector data with random number
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans->data.F64[i] = psRandomUniform(myRNG);
+    }
+    // Perform vector stats on random data (mean, stdev)
+    stats = psVectorStats(stats, rans, NULL, NULL, 0);
+    stats->options = PS_STAT_SAMPLE_STDEV;
+    stats = psVectorStats(stats, rans, NULL, NULL, 0);
+    // Verify mean and stdev
+    if ((fabs(stats->sampleMean - UNIFORM_MEAN) / UNIFORM_MEAN) > ERROR_TOLERANCE) {
+        psError(PS_ERR_UNKNOWN,true,"psRandomUniform mean is %.2f, should be %.2f",
+                stats->sampleMean, UNIFORM_MEAN);
+        return 2;
+    }
+    if ((fabs(stats->sampleStdev - UNIFORM_STDEV) / UNIFORM_STDEV) > ERROR_TOLERANCE) {
+        psError(PS_ERR_UNKNOWN,true,"psRandomUniform stdev is %.2f, should be %.2f",
+                stats->sampleStdev, UNIFORM_STDEV);
+        return 3;
+    }
+
+    psFree(myRNG);
+    psFree(rans);
+    psFree(stats);
+
+    psLogMsg(__func__,PS_LOG_INFO,"NULL psRandom variable, should generate error message");
+    if(psRandomUniform(NULL) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return zero for null psRandom");
+        return 4;
+    }
+
+    return 0;
+}
+
+psS32 testRandomGaussian(void)
+{
+    psRandom *myRNG = NULL;
+    psVector *rans = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+
+    // Initialize vector with random data
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans->data.F64[i] = psRandomGaussian(myRNG);
+    }
+
+    // Perform vector stats on data (mean, stdev)
+    stats = psVectorStats(stats, rans, NULL, NULL, 0);
+    stats->options = PS_STAT_SAMPLE_STDEV;
+    stats = psVectorStats(stats, rans, NULL, NULL, 0);
+
+    // Verify statistics
+    if ((fabs(stats->sampleMean - GAUSSIAN_MEAN) / 1.0) > ERROR_TOLERANCE) {
+        psError(PS_ERR_UNKNOWN,true,"psRandomGaussian mean is %.2f, should be %.2f",
+                stats->sampleMean, GAUSSIAN_MEAN);
+        return 2;
+    }
+    if ((fabs(stats->sampleStdev - GAUSSIAN_STDEV) / GAUSSIAN_STDEV) > ERROR_TOLERANCE) {
+        psError(PS_ERR_UNKNOWN,true,"psRandomGaussian stdev is %.2f, should be %.2f",
+                stats->sampleStdev, GAUSSIAN_STDEV);
+        return 3;
+    }
+
+    psFree(myRNG);
+    psFree(rans);
+    psFree(stats);
+
+    psLogMsg(__func__,PS_LOG_INFO,"NULL psRandom variable, should generate error message");
+    if(psRandomGaussian(NULL) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return zero for null psRandom");
+        return 4;
+    }
+
+    return 0;
+}
+
+psS32 testRandomPoisson(void)
+{
+    psRandom *myRNG = NULL;
+    psVector *rans = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+
+    // Initialize vector with random data
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
+    }
+
+    // Perform statistics on data
+    stats = psVectorStats(stats, rans, NULL, NULL, 0);
+    stats->options = PS_STAT_SAMPLE_STDEV;
+    stats = psVectorStats(stats, rans, NULL, NULL, 0);
+    if ((fabs(stats->sampleMean - POISSON_MEAN) / POISSON_MEAN) > ERROR_TOLERANCE) {
+        psError(PS_ERR_UNKNOWN,true,"psRandomPoisson mean is %.2f, should be %.2f",
+                stats->sampleMean, POISSON_MEAN);
+        return 2;
+    }
+    if ((fabs(stats->sampleStdev - POISSON_STDEV) / POISSON_STDEV) > ERROR_TOLERANCE) {
+        psError(PS_ERR_UNKNOWN,true,"psRandomPoisson stdev is %.2f, should be %.2f",
+                stats->sampleStdev, POISSON_STDEV);
+        return 3;
+    }
+
+    psFree(myRNG);
+    psFree(rans);
+    psFree(stats);
+
+    psLogMsg(__func__,PS_LOG_INFO,"NULL psRandom variable, should generate error message");
+    if(psRandomPoisson(NULL, POISSON_MEAN) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return zero for null psRandom");
+        return 4;
+    }
+
+    return 0;
+}
+
+psS32 testRandomResetUniform(void)
+{
+    psRandom *myRNG = NULL;
+    psVector *rans00 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psVector *rans01 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psVector *rans02 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+
+    // Random reset
+    psRandomReset(myRNG, SEED);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans00->data.F64[i] = psRandomUniform(myRNG);
+    }
+    psRandomReset(myRNG, SEED2);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans01->data.F64[i] = psRandomUniform(myRNG);
+    }
+    psRandomReset(myRNG, SEED);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans02->data.F64[i] = psRandomUniform(myRNG);
+    }
+
+    // Verify reset to original seed produces same results
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        if (rans00->data.F64[i] != rans02->data.F64[i]) {
+            psError(PS_ERR_UNKNOWN,true,"psRandomUniform did not produce the same results with the same seed");
+            return i+1;
+        }
+    }
+
+    psFree(myRNG);
+    psFree(rans00);
+    psFree(rans01);
+    psFree(rans02);
+
+    psRandom *myRNG1 = NULL;
+    myRNG1 = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    psLogSetDestination("file:seed_msglog2.txt");
+    psRandomReset(myRNG1,0);
+    psLogSetDestination("dest:stderr");
+    psFree(myRNG1);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Reset a NULL psRandom variable, should generate an error message");
+    psRandomReset(NULL,SEED);
+
+    return 0;
+}
+
+psS32 testRandomResetGaussian(void)
+{
+    psRandom *myRNG = NULL;
+    psVector *rans00 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psVector *rans01 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psVector *rans02 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+
+    // Initialize random data in vectors
+    psRandomReset(myRNG, SEED);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans00->data.F64[i] = psRandomGaussian(myRNG);
+    }
+    psRandomReset(myRNG, SEED2);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans01->data.F64[i] = psRandomGaussian(myRNG);
+    }
+    psRandomReset(myRNG, SEED);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans02->data.F64[i] = psRandomGaussian(myRNG);
+    }
+
+    // Verify data from original seed produces same data after reset
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        if (rans00->data.F64[i] != rans02->data.F64[i]) {
+            psError(PS_ERR_UNKNOWN,true,"psRandomGaussian did not produce the same results with the same seed");
+            return 2;
+        }
+    }
+
+    psFree(myRNG);
+    psFree(rans00);
+    psFree(rans01);
+    psFree(rans02);
+
+    return 0;
+}
+
+psS32 testRandomResetPoisson(void)
+{
+    psRandom *myRNG = NULL;
+    psVector *rans00 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psVector *rans01 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+    psVector *rans02 = psVectorAlloc(NUM_DATA, PS_TYPE_F64);
+
+    myRNG = psRandomAlloc(PS_RANDOM_TAUS, SEED);
+    if (myRNG == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Could not allocate psRandom structure");
+        return 1;
+    }
+
+    // Initialize vectors with random data
+    psRandomReset(myRNG, SEED);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans00->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
+    }
+    psRandomReset(myRNG, SEED2);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans01->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
+    }
+    psRandomReset(myRNG, SEED);
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        rans02->data.F64[i] = psRandomPoisson(myRNG, POISSON_MEAN);
+    }
+
+    // Verify the original seed produces same data after reset
+    for (psS32 i = 0 ; i < NUM_DATA ; i++) {
+        if (rans00->data.F64[i] != rans02->data.F64[i]) {
+            psError(PS_ERR_UNKNOWN,true,"psRandomPoisson did not produce the same results with the same seed");
+            return 2;
+        }
+    }
+
+    psFree(myRNG);
+    psFree(rans00);
+    psFree(rans01);
+    psFree(rans02);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psStats00.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats00.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats00.c	(revision 4547)
@@ -0,0 +1,389 @@
+/** @file  tst_psStats00.c
+*
+*  @brief Contains tests for psVectorStats with sample mean calculations
+*
+*  We extensively test the code with data type PS_TYPE_F32.  If these pass, we 
+*  do a much simpler test with data types PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_F64.
+*
+*  If the psStats,c code every changes such that vectors of different type
+*  are handled by different routines, then these tests must be extended.
+*
+*  @author GLG, MHPCC
+* 
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:00 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define ERROR_TOL  0.0001
+#define N 15
+
+static psS32 testStatsSampleMeanF32(void);
+static psS32 testStatsSampleMeanS8(void);
+static psS32 testStatsSampleMeanU16(void);
+static psS32 testStatsSampleMeanF64(void);
+
+testDescription tests[] = {
+                              {testStatsSampleMeanF32, 512, "psVectorStats",0,false},
+                              {testStatsSampleMeanS8, 512, "psVectorStats",0,false},
+                              {testStatsSampleMeanU16, 512, "psVectorStats",0,false},
+                              {testStatsSampleMeanF64, 512, "psVectorStats",0,false},
+                              {NULL}
+                          };
+
+static psF32 samplesF32[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
+                               11.01, -12.02, 13.03, 14.04, -15.05 };
+static psS8  samplesS8[N]  = {1, 2, -3, 4, 5, -6, 7, 8, -9, 10, 11, -12, 13, 14, -15};
+static psU16 samplesU16[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+static psF64 samplesF64[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
+                               11.01, -12.02, 13.03, 14.04, -15.05 };
+static psF32 errorsF32[N] = { -0.10,  0.11, -0.12,  0.13, -0.14,  0.15, -0.16,  0.17,
+                              -0.18,  0.19, -0.20,  0.21, -0.22,  0.23, -0.24 };
+
+static psF64 expectedMeanNoMaskF32              =  2.060667;
+static psF64 expectedMeanWithMaskF32            =  2.123846;
+static psF64 expectedMeanNoMaskS8               =  2.000000;
+static psF64 expectedMeanNoMaskU16              =  8.000000;
+static psF64 expectedMeanNoMaskF64              =  2.060667;
+static psF64 expectedMeanRangeNoMaskF32         =  0.137500;
+static psF64 expectedMeanRangeWithMaskF32       = -0.366667;
+static psF64 expectedWeightMeanNoMaskF32        =  1.807210;
+static psF64 expectedWeightMeanWithMaskF32      =  1.890217;
+static psF64 expectedWeightMeanNoMaskRangeF32   =  0.640952;
+static psF64 expectedWeightMeanWithMaskRangeF32 =  0.046574;
+
+psF64 rtc(void);
+psF64 sT, eT;
+psF64 diff;
+
+#include <unistd.h>
+psS32 main(psS32 argc, char* argv[] )
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ( ! runTestSuite(stderr, "psVectorStats",tests,argc,argv) );
+}
+
+psS32 testStatsSampleMeanF32(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psVector* maskVector = NULL;
+    psVector* myErrors   = NULL;
+    psF64     mean       = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    myErrors = psVectorAlloc(N, PS_TYPE_F32);
+    myErrors->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    mean = 0.0;
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.F32[i] =  samplesF32[i];
+        myErrors->data.F32[i] =  errorsF32[i];
+    }
+
+    // Set the mask vector and calculate the expected maximum.
+    for (psS32 i = 0; i < N; i++) {
+
+        if (i > 1) {
+            maskVector->data.U8[i] = 0;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedMeanNoMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedMeanNoMaskF32);
+        return 1;
+    }
+
+    // Invoke psVectorStats with no vector mask and error vector
+    myStats = psVectorStats(myStats, myVector, myErrors, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedWeightMeanNoMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedWeightMeanNoMaskF32);
+        return 10;
+    }
+
+    // Invoke psVectorStats with no vector mask and data range
+    myStats->min = -10.0;
+    myStats->max =   8.0;
+    myStats->options = PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE;
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedMeanRangeNoMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
+                mean, expectedMeanRangeNoMaskF32);
+        return 2;
+    }
+
+    // Invoke psVectorStats with no vector mask, errors and data range
+    myStats = psVectorStats(myStats, myVector, myErrors, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedWeightMeanNoMaskRangeF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
+                mean, expectedWeightMeanNoMaskRangeF32);
+        return 20;
+    }
+    myStats->options = PS_STAT_SAMPLE_MEAN;
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask=1.                             */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    mean = myStats->sampleMean;
+    if ( fabs(mean - expectedMeanWithMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedMeanWithMaskF32);
+        return 3;
+    }
+
+    // Invoke psVectorStats with vector mask and error vector
+    myStats = psVectorStats(myStats, myVector, myErrors, maskVector, 1);
+    mean = myStats->sampleMean;
+    if ( fabs(mean - expectedWeightMeanWithMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedWeightMeanWithMaskF32);
+        return 30;
+    }
+
+    // Invoke psVectorStats with vector mask and data range
+    myStats->options = PS_STAT_SAMPLE_MEAN | PS_STAT_USE_RANGE;
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedMeanRangeWithMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
+                mean, expectedMeanRangeWithMaskF32);
+        return 4;
+    }
+
+    // Invoke psVectorStats with vector mask, errors, and data range
+    myStats = psVectorStats(myStats, myVector, myErrors, maskVector, 1);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedWeightMeanWithMaskRangeF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
+                mean, expectedWeightMeanWithMaskRangeF32);
+        return 40;
+    }
+    myStats->options = PS_STAT_SAMPLE_MEAN;
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask=2.                             */
+    /*************************************************************************/
+    // Set the mask vector and calculate the expected maximum.
+    // Set the mask vector.
+    for (psS32 i = 0; i < N; i++) {
+        if (maskVector->data.U8[i] == 1) {
+            maskVector->data.U8[i] = 2;
+        }
+    }
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 2);
+    mean = myStats->sampleMean;
+    if (fabs(mean - expectedMeanWithMaskF32) > ERROR_TOL )  {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean,expectedMeanWithMaskF32);
+        return 5;
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask=3.                             */
+    /*************************************************************************/
+    // Set the mask vector and calculate the expected maximum.
+    // Set the mask vector.
+    for (psS32 i = 0; i < N; i++) {
+        if (maskVector->data.U8[i] == 2) {
+            maskVector->data.U8[i] = 3;
+        }
+    }
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 4);
+    mean = myStats->sampleMean;
+    if (fabs(mean - expectedMeanNoMaskF32) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Return value %f not as expected %f",
+                mean,expectedMeanNoMaskF32);
+        return 6;
+    }
+
+    // Mask all values and verify return is NAN
+    for(psS32 i = 0; i < N; i++) {
+        maskVector->data.U8[i] = 1;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate warning message");
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    mean = myStats->sampleMean;
+    if( !isnan(mean) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN with all values masked");
+        return 7;
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with NULL inputs.                               */
+    /*************************************************************************/
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    if( psVectorStats(myStats, NULL, NULL, NULL, 0) != myStats ) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorStats did not return stats when input NULL");
+        return 8;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    psStats *myStats2 = psVectorStats(NULL, myVector, NULL, NULL, 0);
+    if ( myStats2 != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psVectorStats did not return NULL");
+        return 9;
+    }
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    psFree(myStats);
+    psFree(myVector);
+    psFree(myErrors);
+    psFree(maskVector);
+    psFree(myStats2);
+
+    return 0;
+}
+
+psS32 testStatsSampleMeanS8(void)
+{
+    psStats*  myStats  = NULL;
+    psVector* myVector = NULL;
+    psF64     mean     = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+    myVector = psVectorAlloc(N, PS_TYPE_S8);
+    myVector->n = N;
+
+    mean = 0.0;
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.S8[i] =  samplesS8[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedMeanNoMaskS8) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedMeanNoMaskS8);
+        return 1;
+    }
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
+psS32 testStatsSampleMeanU16(void)
+{
+    psStats*  myStats  = NULL;
+    psVector* myVector = NULL;
+    psF64     mean     = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+    myVector = psVectorAlloc(N, PS_TYPE_U16);
+    myVector->n = N;
+
+    mean = 0.0;
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.U16[i] =  samplesU16[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedMeanNoMaskU16) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedMeanNoMaskU16);
+        return 1;
+    }
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
+psS32 testStatsSampleMeanF64(void)
+{
+    psStats*  myStats  = NULL;
+    psVector* myVector = NULL;
+    psF64     mean     = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+    myVector = psVectorAlloc(N, PS_TYPE_F64);
+    myVector->n = N;
+
+    mean = 0.0;
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.F64[i] =  samplesF64[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    mean = myStats->sampleMean;
+    // Verify return value is as expected
+    if ( fabs(mean - expectedMeanNoMaskF64) > ERROR_TOL ) {
+        psError(PS_ERR_UNKNOWN,true,"Returned value %f not as expected %f",
+                mean, expectedMeanNoMaskF64);
+        return 1;
+    }
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psStats01.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats01.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats01.c	(revision 4547)
@@ -0,0 +1,264 @@
+/** @file  tst_psStats01.c
+*
+*  @brief Contains tests for psVectorStats with max calculations.
+*
+*  We extensively test the code with data type PS_TYPE_F32.  If these pass, we 
+*  do a much simpler test with data types PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_F64.
+*
+*  If the psStats,c code every changes such that vectors of different type
+*  are handled by different routines, then these tests must be extended.
+*
+*  @author GLG, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:00 $
+*
+* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define N 15
+#define ERROR_TOL  0.0001
+
+static psS32 testStatsMaxF32(void);
+static psS32 testStatsMaxS8(void);
+static psS32 testStatsMaxU16(void);
+static psS32 testStatsMaxF64(void);
+
+testDescription tests[] = {
+                              {testStatsMaxF32, 518, "psVectorStats", 0, false},
+                              {testStatsMaxS8, 518, "psVectorStats", 0, false},
+                              {testStatsMaxU16, 518, "psVectorStats", 0, false},
+                              {testStatsMaxF64, 518, "psVectorStats", 0, false},
+                              {NULL}
+                          };
+
+static psF32 samplesF32[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
+                               11.01, -12.02, 13.03, 14.04, -15.05 };
+static psS8  samplesS8[N]  = {1, 2, -3, 4, 5, -6, 7, 8, -9, 10, 11, -12, 13, 14, -15};
+static psU16 samplesU16[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+static psF64 samplesF64[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
+                               11.01, -12.02, 13.03, 14.04, -15.05 };
+
+static psF64 expectedMaxNoMaskF32                = 14.04;
+static psF64 expectedMaxNoMaskS8                 = 14.00;
+static psF64 expectedMaxNoMaskU16                = 15.00;
+static psF64 expectedMaxNoMaskF64                = 14.04;
+
+static psF64 expectedMaxWithMaskF32              = 13.03;
+static psF64 expectedMaxRangeNoMaskF32           = 10.00;
+static psF64 expectedMaxRangeWithMaskF32         = 13.03;
+
+psS32 main(psS32 argc, char* argv[] )
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ( ! runTestSuite(stderr, "psVectorStats", tests, argc, argv) );
+}
+
+psS32 testStatsMaxF32(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psVector* maskVector = NULL;
+    psF64     max        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MAX);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.F32[i] = samplesF32[i];
+    }
+
+    // Set the mask vector and calculate the expected maximum.
+    for (psS32 i = 0; i < N; i++) {
+        if (i < 13) {
+            maskVector->data.U8[i] = 0;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    max = myStats->max;
+
+    if (fabs(max - expectedMaxNoMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
+                max, expectedMaxNoMaskF32);
+        return 1;
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    max = myStats->max;
+    if (fabs(max - expectedMaxWithMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max with mask return value %lf not as expected %lf",
+                max, expectedMaxWithMaskF32);
+        return 2;
+    }
+
+    // Invoke function with data range with no mask
+    myStats->options = PS_STAT_MAX | PS_STAT_USE_RANGE;
+    myStats->max = 10.1;
+    myStats->min = 0.0;
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    max = myStats->max;
+
+    if(fabs(max - expectedMaxRangeNoMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max with range no mask %lf not as expected %lf",
+                max, expectedMaxRangeNoMaskF32);
+        return 3;
+    }
+
+    // Invoke function with data range and mask
+    myStats->max = 14.0;
+    myStats->min = 0.0;
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    max = myStats->max;
+    if(fabs(max - expectedMaxRangeWithMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max with range with mask %lf not as expected %lf",
+                max, expectedMaxRangeWithMaskF32);
+        return 3;
+    }
+
+    // Invoke function with data range with no valid data
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    myStats->max = 100.00;
+    myStats->min = 90.00;
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    max = myStats->max;
+
+    if(!isnan(max)) {
+        psError(PS_ERR_UNKNOWN,true,"Max with range with no valid elemenets did not return NAN");
+        return 4;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+    psFree(maskVector);
+
+    return 0;
+}
+
+psS32 testStatsMaxS8(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psF64     max        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MAX);
+    myVector = psVectorAlloc(N, PS_TYPE_S8);
+    myVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.S8[i] = samplesS8[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    max = myStats->max;
+
+    if (fabs(max - expectedMaxNoMaskS8) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
+                max, expectedMaxNoMaskS8);
+        return 1;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
+psS32 testStatsMaxU16(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psF64     max        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MAX);
+    myVector = psVectorAlloc(N, PS_TYPE_U16);
+    myVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.U16[i] = samplesU16[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    max = myStats->max;
+
+    if (fabs(max - expectedMaxNoMaskU16) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
+                max, expectedMaxNoMaskU16);
+        return 1;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
+psS32 testStatsMaxF64(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psF64     max        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MAX);
+    myVector = psVectorAlloc(N, PS_TYPE_F64);
+    myVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.F64[i] = samplesF64[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    max = myStats->max;
+
+    if (fabs(max - expectedMaxNoMaskF64) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Max no mask return value %lf not as expected %lf",
+                max, expectedMaxNoMaskF64);
+        return 1;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psStats02.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats02.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats02.c	(revision 4547)
@@ -0,0 +1,264 @@
+/** @file  tst_psStats02.c
+*
+*  @brief Contains tests for psVectorStats with min calculations
+*
+*  We extensively test the code with data type PS_TYPE_F32.  If these pass, we 
+*  do a much simpler test with data types PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_F64.
+*
+*  If the psStats,c code every changes such that vectors of different type
+*  are handled by different routines, then these tests must be extended.
+*
+*  @author GLG, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:00 $
+*
+* Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define N 15
+#define ERROR_TOL  0.0001
+
+static psS32 testStatsMinF32(void);
+static psS32 testStatsMinS8(void);
+static psS32 testStatsMinU16(void);
+static psS32 testStatsMinF64(void);
+
+testDescription tests[] = {
+                              {testStatsMinF32, 518, "psVectorStats", 0, false},
+                              {testStatsMinS8, 518, "psVectorStats", 0, false},
+                              {testStatsMinU16, 518, "psVectorStats", 0, false},
+                              {testStatsMinF64, 518, "psVectorStats", 0, false},
+                              {NULL}
+                          };
+
+static psF32 samplesF32[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
+                               11.01, -12.02, 13.03, 14.04, -15.05 };
+static psS8  samplesS8[N]  = {1, 2, -3, 4, 5, -6, 7, 8, -9, 10, 11, -12, 13, 14, -15};
+static psU16 samplesU16[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+static psF64 samplesF64[N] = { 1.1, 2.2, -3.3, 4.4, 5.5, -6.6, 7.7, 8.8, -9.9, 10.0,
+                               11.01, -12.02, 13.03, 14.04, -15.05 };
+
+static psF64 expectedMinNoMaskF32                = -15.05;
+static psF64 expectedMinNoMaskS8                 = -15.00;
+static psF64 expectedMinNoMaskU16                = 1.00;
+static psF64 expectedMinNoMaskF64                = -15.05;
+
+static psF64 expectedMinWithMaskF32              = -12.02;
+static psF64 expectedMinRangeNoMaskF32           =   1.10;
+static psF64 expectedMinRangeWithMaskF32         = -12.02;
+
+psS32 main(psS32 argc, char* argv[] )
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ( ! runTestSuite(stderr, "psVectorStats", tests, argc, argv) );
+}
+
+psS32 testStatsMinF32(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psVector* maskVector = NULL;
+    psF64     min        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MIN);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.F32[i] = samplesF32[i];
+    }
+
+    // Set the mask vector and calculate the expected maximum.
+    for (psS32 i = 0; i < N; i++) {
+        if (i < 13) {
+            maskVector->data.U8[i] = 0;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    min = myStats->min;
+
+    if (fabs(min - expectedMinNoMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
+                min, expectedMinNoMaskF32);
+        return 1;
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    min = myStats->min;
+    if (fabs(min - expectedMinWithMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min with mask return value %lf not as expected %lf",
+                min, expectedMinWithMaskF32);
+        return 2;
+    }
+
+    // Invoke function with data range with no mask
+    myStats->options = PS_STAT_MIN | PS_STAT_USE_RANGE;
+    myStats->max = 10.1;
+    myStats->min = 0.0;
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    min = myStats->min;
+
+    if(fabs(min - expectedMinRangeNoMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min with range no mask %lf not as expected %lf",
+                min, expectedMinRangeNoMaskF32);
+        return 3;
+    }
+
+    // Invoke function with data range and mask
+    myStats->max = 10.1;
+    myStats->min = -15.00;
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    min = myStats->min;
+    if(fabs(min - expectedMinRangeWithMaskF32) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min with range with mask %lf not as expected %lf",
+                min, expectedMinRangeWithMaskF32);
+        return 3;
+    }
+
+    // Invoke function with data range with no valid data
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    myStats->max = 100.00;
+    myStats->min = 90.00;
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    min = myStats->min;
+
+    if(!isnan(min)) {
+        psError(PS_ERR_UNKNOWN,true,"Min with range with no valid elemenets did not return NAN");
+        return 4;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+    psFree(maskVector);
+
+    return 0;
+}
+
+psS32 testStatsMinS8(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psF64     min        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MIN);
+    myVector = psVectorAlloc(N, PS_TYPE_S8);
+    myVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.S8[i] = samplesS8[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    min = myStats->min;
+
+    if (fabs(min - expectedMinNoMaskS8) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
+                min, expectedMinNoMaskS8);
+        return 1;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
+psS32 testStatsMinU16(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psF64     min        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MAX);
+    myVector = psVectorAlloc(N, PS_TYPE_U16);
+    myVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.U16[i] = samplesU16[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    min = myStats->min;
+
+    if (fabs(min - expectedMinNoMaskU16) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
+                min, expectedMinNoMaskU16);
+        return 1;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
+psS32 testStatsMinF64(void)
+{
+    psStats*  myStats    = NULL;
+    psVector* myVector   = NULL;
+    psF64     min        = 0.0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_MIN);
+    myVector = psVectorAlloc(N, PS_TYPE_F64);
+    myVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (psS32 i = 0; i < N; i++) {
+        myVector->data.F64[i] = samplesF64[i];
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    min = myStats->min;
+
+    if (fabs(min - expectedMinNoMaskF64) > ERROR_TOL) {
+        psError(PS_ERR_UNKNOWN,true,"Min no mask return value %lf not as expected %lf",
+                min, expectedMinNoMaskF64);
+        return 1;
+    }
+
+    psFree(myStats);
+    psFree(myVector);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/math/tst_psStats03.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats03.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats03.c	(revision 4547)
@@ -0,0 +1,123 @@
+/*****************************************************************************
+    This routine must ensure that PS_STAT_SAMPLE_MEDIAN is correctly computed
+    by the procedure psVectorStats().
+ 
+    XXX: Must add tests for various data types, other than psF32.  Copy code
+    from tst_psStats00.c-tst_psStats02.c.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#define N1 1029   // This should be an odd number.
+#define N ((4 * N1) + 1)
+
+psS32 main()
+{
+    psStats *myStats    = NULL;
+    psS32 testStatus      = true;
+    psS32 globalTestStatus = true;
+    psS32 i               = 0;
+    psVector *myVector  = NULL;
+    psVector *maskVector= NULL;
+    float median        = 1e99;
+    float realMedianWithMask = (float) (N-3)/4;
+    float realMedianNoMask = (float) (N-1)/2;
+    psS32 currentId       = psMemGetId();
+    psS32 memLeaks        = 0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (i=0;i<N;i++) {
+        myVector->data.F32[i] = (float) i;
+    }
+
+    // Set the mask vector and calculate the expected median.
+    for (i=0;i<N;i++) {
+        if (i < (N/2)) {
+            maskVector->data.U8[i] = 0;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_MEDIAN: no vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    median = myStats->sampleMedian;
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The expected median was %f.  The calculated median was %f.\n",
+           realMedianNoMask, median);
+    if (median == realMedianNoMask) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+
+    printFooter(stdout,
+                "psStats functions",
+                "PS_STAT_SAMPLE_MEDIAN: no vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_MEDIAN: with vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    median = myStats->sampleMedian;
+    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
+    printf("The expected median was %f.  The calculated median was %f.\n",
+           realMedianWithMask, median);
+    if (median == realMedianWithMask) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+
+    printFooter(stdout,
+                "psStats functions",
+                "PS_STAT_SAMPLE_MEDIAN: with vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "psStats(): deallocating memory");
+
+    psFree(myStats);
+    psFree(myVector);
+    psFree(maskVector);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psStats functions",
+                "psStats(): deallocating memory",
+                testStatus);
+
+    return (!globalTestStatus);
+}
Index: /trunk/psLib/test/math/tst_psStats04.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats04.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats04.c	(revision 4547)
@@ -0,0 +1,85 @@
+/*****************************************************************************
+    This routine must ensure that PS_STAT_NVALUES is correctly computed
+    by the procedure psVectorStats().
+ 
+    Note: The NVALUES stat was removed from the IfA requirements spec.  So,
+    this test is no longer in use.
+ 
+    XXX: Must add tests for various data types, other than psF32.  Copy code
+    from tst_psStats00.c-tst_psStats02.c.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#define N1 1029
+#define N ((4 * N1) + 1)
+
+psS32 main()
+{
+    psStats *myStats    = NULL;
+    psS32 testStatus      = true;
+    psS32 i               = 0;
+    psVector *myVector  = NULL;
+    psVector *maskVector= NULL;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_NVALUES);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (i=0;i<N;i++) {
+        myVector->data.F32[i] = (float) i;
+    }
+
+    // Set the mask vector and calculate the expected maximum.
+    for (i=0;i<N;i++) {
+        if (i < (N/2)) {
+            maskVector->data.U8[i] = 0;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_NVALUES");
+
+    myStats = psVectorStats(myStats, myVector, NULL, 0);
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The expected nvalues was %d.  The calculated nvalues was %d.\n",
+           N, myStats->nValues);
+    if (myStats->nValues == N) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    myStats = psVectorStats(myStats, myVector, maskVector, 1);
+    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
+    printf("The expected nvalues was %d.  The calculated nvalues was %d.\n",
+           N/2, myStats->nValues);
+    if (myStats->nValues == N/2) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+    }
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashAlloc()",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psStats05.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats05.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats05.c	(revision 4547)
@@ -0,0 +1,75 @@
+/*****************************************************************************
+    This routine must ensure that the psStats structure is correctly
+    allocated and deallocated by the procedure psArrayStats().
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#define MISC_FLOAT_NUMBER 345.0
+
+psS32 main()
+{
+    psStats *myStats    = NULL;
+    psS32 testStatus      = true;
+    psS32 currentId       = psMemGetId();
+    psS32 memLeaks        = 0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "Allocate the psStats structure.");
+
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEAN);
+    myStats->sampleMean = MISC_FLOAT_NUMBER;
+    myStats->sampleMedian = MISC_FLOAT_NUMBER;
+    myStats->sampleStdev = MISC_FLOAT_NUMBER;
+    myStats->sampleUQ = MISC_FLOAT_NUMBER;
+    myStats->sampleLQ = MISC_FLOAT_NUMBER;
+    myStats->robustMean = MISC_FLOAT_NUMBER;
+    myStats->robustMedian = MISC_FLOAT_NUMBER;
+    myStats->robustMode = MISC_FLOAT_NUMBER;
+    myStats->robustStdev = MISC_FLOAT_NUMBER;
+    myStats->robustUQ = MISC_FLOAT_NUMBER;
+    myStats->robustLQ = MISC_FLOAT_NUMBER;
+    myStats->robustN50 = MISC_FLOAT_NUMBER;
+    myStats->robustNfit = MISC_FLOAT_NUMBER;
+    myStats->clippedMean = MISC_FLOAT_NUMBER;
+    myStats->clippedStdev = MISC_FLOAT_NUMBER;
+    myStats->clipSigma = MISC_FLOAT_NUMBER;
+    myStats->clipIter = MISC_FLOAT_NUMBER;
+    myStats->min = MISC_FLOAT_NUMBER;
+    myStats->max = MISC_FLOAT_NUMBER;
+    myStats->binsize = MISC_FLOAT_NUMBER;
+    myStats->options = 0x0;
+
+    psMemCheckCorruption(1);
+
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate the psStats structure.",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "Deallocate the psStats structure.");
+    psFree(myStats);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    printFooter(stdout,
+                "psStats functions",
+                "Deallocate the psStats structure.",
+                testStatus);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/math/tst_psStats06.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats06.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats06.c	(revision 4547)
@@ -0,0 +1,131 @@
+/*****************************************************************************
+    This routine must ensure that PS_STAT_SAMPLE_STDEV is correctly computed
+    by the procedure psArrayStats().
+ 
+    XXX: Must add tests for various data types, other than psF32.  Copy code
+    from tst_psStats00.c-tst_psStats02.c.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psTest.h"
+#include "float.h"
+#include <math.h>
+
+#define N 15
+
+psS32 main()
+{
+    psStats *myStats    = NULL;
+    psS32 testStatus      = true;
+    psS32 globalTestStatus = true;
+    psS32 i               = 0;
+    psVector *myVector  = NULL;
+    psVector *maskVector= NULL;
+    float stdev         = 0.0;
+    // NOTE: These values were calculated by running the function on the data.
+    // A: They must be changed if we adjust the number of data points.
+    // B: We don't really know that they are correct.
+    float realStdevNoMask   = 4.472136;
+    float realStdevWithMask = 2.160247;
+    psS32 count           = 0;
+    psS32 currentId       = psMemGetId();
+    psS32 memLeaks        = 0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_STDEV);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    stdev = 0.0;
+    // Set the appropriate values for the vector data.
+    for (i=0;i<N;i++) {
+        myVector->data.F32[i] = (float) i;
+    }
+
+    // Set the mask vector and calculate the expected maximum.
+    for (i=0;i<N;i++) {
+        if (i < (N/2)) {
+            maskVector->data.U8[i] = 0;
+            count++;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_STDEV: no vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+    stdev = myStats->sampleStdev;
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The expected stdev was %f; the calculated stdev was %f\n",
+           realStdevNoMask, stdev);
+    if (fabs(stdev - realStdevNoMask) <= 2.0 * FLT_EPSILON) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_SAMPLE_STDEV: no vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_STDEV: with vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+    stdev = myStats->sampleStdev;
+    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
+    printf("The expected stdev was %f; the calculated stdev was %f\n",
+           realStdevWithMask, stdev);
+    if (fabs(stdev - realStdevWithMask) <= 2.0 * FLT_EPSILON) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_SAMPLE_STDEV: with vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "psStats(): deallocating memory");
+
+    psFree(myStats);
+    psFree(myVector);
+    psFree(maskVector);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psVector functions",
+                "psStats(): deallocating memory",
+                testStatus);
+
+    return (!globalTestStatus);
+}
Index: /trunk/psLib/test/math/tst_psStats07.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats07.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats07.c	(revision 4547)
@@ -0,0 +1,498 @@
+/*****************************************************************************
+   This routine must ensure that PS_STAT_ROBUST_QUARTILE is correctly computed
+   by the procedure psArrayStats().
+ 
+   XXX: Must add tests for various data types, other than psF32.  Copy code
+   from tst_psStats00.c-tst_psStats02.c.
+*****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psTest.h"
+#include "float.h"
+#include <math.h>
+
+#define N 90
+#define MEAN 32.0
+#define STDEV 2.0
+#define ERROR_TOLERANCE 0.15
+
+psS32 t00()
+{
+    psStats * myStats = NULL;
+    psS32 testStatus = true;
+    psS32 globalTestStatus = true;
+    psS32 i = 0;
+    psVector *myVector = NULL;
+    psVector *maskVector = NULL;
+    // NOTE: These values were calculated by running the function on the data.
+    // They must be changed if we adjust the number of data points.
+    // We don't really know that they are correct.
+    psS32 count = 0;
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    float realMeanNoMask = MEAN;
+    float realMedianNoMask = MEAN;
+    float realModeNoMask = MEAN;
+    float realStdevNoMask = STDEV * 0.20;
+    float realLQNoMask = MEAN - ( 0.6 * STDEV );
+    float realUQNoMask = MEAN + ( 0.6 * STDEV );
+    psS32 realN50NoMask = N / 4;
+    psS32 realNfitNoMask = N / 4;
+
+    psTraceSetLevel(".psLib.dataManip", 0);
+    psTraceSetLevel(".psLib.dataManip.psMinimize", 0);
+    psTraceSetLevel(".psLib.dataManip.psMinimizeLMChi2Gauss1D", 0);
+    psTraceSetLevel(".psLib.dataManip.psFunctions.psGaussian", 0);
+    psTraceSetLevel(".psLib.dataManip.psFunctions", 0);
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                              */
+    /*************************************************************************/
+    myStats = psStatsAlloc( PS_STAT_ROBUST_MEAN |
+                            PS_STAT_ROBUST_MEDIAN |
+                            PS_STAT_ROBUST_MODE |
+                            PS_STAT_ROBUST_STDEV |
+                            PS_STAT_ROBUST_QUARTILE );
+
+    maskVector = psVectorAlloc( N, PS_TYPE_U8 );
+    maskVector->n = N;
+    myVector = p_psGaussianDev( MEAN, STDEV, N );
+    // Set the mask vector and calculate the expected maximum.
+    for ( i = 0;i < N;i++ ) {
+        if ( i < ( N / 2 ) ) {
+            maskVector->data.U8[ i ] = 0;
+            count++;
+        } else {
+            maskVector->data.U8[ i ] = 1;
+        }
+    }
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                            */
+    /*************************************************************************/
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust mean: no vector mask" );
+
+    myStats = psVectorStats( myStats, myVector, NULL, NULL, 0 );
+
+    printf( "The expected Mean was %.2f; the calculated Mean was %.2f\n",
+            realMeanNoMask, myStats->robustMean );
+
+    if ( fabs( myStats->robustMean - realMeanNoMask ) < ( ERROR_TOLERANCE * realMeanNoMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust mean: no vector mask",
+                 testStatus );
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Median: no vector mask" );
+
+    printf( "The expected Median was %.2f; the calculated Median was %.2f\n",
+            realMedianNoMask, myStats->robustMedian );
+    if ( fabs( myStats->robustMedian - realMedianNoMask ) < ( ERROR_TOLERANCE * realMedianNoMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Median: no vector mask",
+                 testStatus );
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Mode: no vector mask" );
+
+
+    printf( "The expected Mode was %.2f; the calculated Mode was %.2f\n",
+            realModeNoMask, myStats->robustMode );
+    if ( fabs( myStats->robustMode - realModeNoMask ) < ( ERROR_TOLERANCE * realModeNoMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Mode: no vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Stdev: no vector mask" );
+
+    printf( "The expected Stdev was %.2f; the calculated Stdev was %.2f\n",
+            realStdevNoMask, myStats->robustStdev );
+    if ( fabs( myStats->robustStdev - realStdevNoMask ) < ( ERROR_TOLERANCE * realStdevNoMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Stdev: no vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: lower quartile: no vector mask" );
+
+    printf( "The expected LQ was %.2f; the calculated LQ was %.2f\n",
+            realLQNoMask, myStats->robustLQ );
+
+    if ( fabs( myStats->robustLQ - realLQNoMask ) < ( ERROR_TOLERANCE * realLQNoMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: lower quartile: no vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: upper quartile: no vector mask" );
+
+    printf( "The expected UQ was %.2f; the calculated UQ was %.2f\n",
+            realUQNoMask, myStats->robustUQ );
+    if ( fabs( myStats->robustUQ - realUQNoMask ) < ( ERROR_TOLERANCE * realUQNoMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: lower quartile: no vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust N50: no vector mask" );
+
+    // XXX:
+    realN50NoMask = myStats->robustN50;
+
+    printf( "The expected N50 was %d; the calculated N50 was %d\n",
+            realN50NoMask, myStats->robustN50 );
+    /* XXX: fix
+        if ( fabs( myStats->robustN50 - realN50NoMask ) < ( ERROR_TOLERANCE * realN50NoMask ) ) {
+            testStatus = true;
+        } else {
+            testStatus = false;
+            globalTestStatus = false;
+        }
+    */
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust N50: no vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Nfit: no vector mask" );
+
+    // XXX:
+    realNfitNoMask = myStats->robustNfit;
+
+    printf( "The expected Nfit was %d; the calculated Nfit was %d\n",
+            realNfitNoMask, myStats->robustNfit );
+    /* XXX: fix
+        if ( fabs( myStats->robustNfit - realNfitNoMask ) < ( ERROR_TOLERANCE * realNfitNoMask ) ) {
+            testStatus = true;
+        } else {
+            testStatus = false;
+            globalTestStatus = false;
+        }
+    */
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Nfit: no vector mask",
+                 testStatus );
+    return(testStatus);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "psStats(): deallocating memory" );
+
+    psFree( myStats );
+    psFree( myVector );
+    psFree( maskVector );
+
+    psMemCheckCorruption( 1 );
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if ( 0 != memLeaks ) {
+        psAbort( __func__, "Memory Leaks! (%d leaks)", memLeaks );
+    }
+
+    printFooter( stdout,
+                 "psVector functions",
+                 "psStats(): deallocating memory",
+                 testStatus );
+
+    return ( !globalTestStatus );
+}
+
+
+psS32 t01()
+{
+    psStats * myStats = NULL;
+    psS32 testStatus = true;
+    psS32 globalTestStatus = true;
+    psS32 i = 0;
+    psVector *myVector = NULL;
+    psVector *maskVector = NULL;
+    // NOTE: These values were calculated by running the function on the data.
+    // A: They must be changed if we adjust the number of data points.
+    // B: We don't really know that they are correct.
+    psS32 count = 0;
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks = 0;
+    float realMeanWithMask = MEAN;
+    float realMedianWithMask = MEAN;
+    float realModeWithMask = MEAN;
+    float realStdevWithMask = STDEV * 0.20;
+    float realLQWithMask = MEAN;
+    float realUQWithMask = MEAN;
+    psS32 realN50WithMask = N / 4;
+    psS32 realNfitWithMask = N / 4;
+
+    psTraceSetLevel(".psLib.dataManip.psStats", 0);
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                              */
+    /*************************************************************************/
+    myStats = psStatsAlloc( PS_STAT_ROBUST_MEAN |
+                            PS_STAT_ROBUST_MEDIAN |
+                            PS_STAT_ROBUST_MODE |
+                            PS_STAT_ROBUST_STDEV |
+                            PS_STAT_ROBUST_QUARTILE );
+
+    maskVector = psVectorAlloc( N, PS_TYPE_U8 );
+    maskVector->n = N;
+    myVector = p_psGaussianDev( MEAN, STDEV, N );
+    // Set the mask vector and calculate the expected maximum.
+    for ( i = 0;i < N;i++ ) {
+        if ( i < ( N / 2 ) ) {
+            maskVector->data.U8[ i ] = 0;
+            count++;
+        } else {
+            maskVector->data.U8[ i ] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                               */
+    /*************************************************************************/
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust mean: with vector mask" );
+
+    printf( "Calling psVectorStats() on a vector with elements masked.\n" );
+    myStats = psVectorStats( myStats, myVector, NULL, maskVector, 1 );
+    printf( "Called psVectorStats() on a vector with elements masked.\n" );
+    printf( "The expected Mean was %.2f; the calculated Mean was %.2f\n",
+            realMeanWithMask, myStats->robustMean );
+    if ( fabs( myStats->robustMean - realMeanWithMask ) < ( ERROR_TOLERANCE * realMeanWithMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust mean: with vector mask",
+                 testStatus );
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Median: with vector mask" );
+
+    printf( "The expected Median was %.2f; the calculated Median was %.2f\n",
+            realMedianWithMask, myStats->robustMedian );
+    if ( fabs( myStats->robustMedian - realMedianWithMask ) < ( ERROR_TOLERANCE * realMedianWithMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Median: with vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Mode: with vector mask" );
+
+    printf( "The expected Mode was %.2f; the calculated Mode was %.2f\n",
+            realModeWithMask, myStats->robustMode );
+    if ( fabs( myStats->robustMode - realModeWithMask ) < ( ERROR_TOLERANCE * realModeWithMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Mode: with vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Stdev: with vector mask" );
+
+    printf( "The expected Stdev was %.2f; the calculated Stdev was %.2f\n",
+            realStdevWithMask, myStats->robustStdev );
+    if ( fabs( myStats->robustStdev - realStdevWithMask ) < ( ERROR_TOLERANCE * realStdevWithMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Stdev: with vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: lower quartile: with vector mask" );
+
+    printf( "The expected LQ was %.2f; the calculated LQ was %.2f\n",
+            realLQWithMask, myStats->robustLQ );
+    if ( fabs( myStats->robustLQ - realLQWithMask ) < ( ERROR_TOLERANCE * realLQWithMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: lower quartile: with vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: upper quartile: with vector mask" );
+
+    printf( "The expected UQ was %.2f; the calculated UQ was %.2f\n",
+            realUQWithMask, myStats->robustUQ );
+    if ( fabs( myStats->robustUQ - realUQWithMask ) < ( ERROR_TOLERANCE * realUQWithMask ) ) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: lower quartile: with vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust N50: with vector mask" );
+
+    printf( "The expected N50 was %d; the calculated N50 was %d\n",
+            realN50WithMask, myStats->robustN50 );
+    /* XXX: fix
+        if ( fabs( myStats->robustN50 - realN50WithMask ) < ( ERROR_TOLERANCE * realN50WithMask ) ) {
+            testStatus = true;
+        } else {
+            testStatus = false;
+            globalTestStatus = false;
+        }
+    */
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust N50: with vector mask",
+                 testStatus );
+
+
+
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "PS_STAT_ROBUST_STATS: robust Nfit: with vector mask" );
+
+    printf( "The expected Nfit was %d; the calculated Nfit was %d\n",
+            realNfitWithMask, myStats->robustNfit );
+    /* XXX: fix
+        if ( fabs( myStats->robustNfit - realNfitWithMask ) < ( ERROR_TOLERANCE * realNfitWithMask ) ) {
+            testStatus = true;
+        } else {
+            testStatus = false;
+            globalTestStatus = false;
+        }
+    */
+    printFooter( stdout,
+                 "psVector functions",
+                 "PS_STAT_ROBUST_STATS: robust Nfit: with vector mask",
+                 testStatus );
+
+
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                           */
+    /*************************************************************************/
+    printPositiveTestHeader( stdout,
+                             "psStats functions",
+                             "psStats(): deallocating memory" );
+
+    psFree( myStats );
+    psFree( myVector );
+    psFree( maskVector );
+
+    psMemCheckCorruption( 1 );
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if ( 0 != memLeaks ) {
+        psAbort( __func__, "Memory Leaks! (%d leaks)", memLeaks );
+    }
+
+    printFooter( stdout,
+                 "psVector functions",
+                 "psStats(): deallocating memory",
+                 testStatus );
+
+    return ( !globalTestStatus );
+}
+
+psS32 main()
+{
+    t00();
+    t01();
+}
Index: /trunk/psLib/test/math/tst_psStats08.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats08.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats08.c	(revision 4547)
@@ -0,0 +1,175 @@
+/*****************************************************************************
+    This routine must ensure that PS_STAT_SAMPLE_QUARTILE is correctly computed
+    by the procedure psArrayStats().
+ 
+    XXX: Must add tests for various data types, other than psF32.  Copy code
+    from tst_psStats00.c-tst_psStats02.c.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psTest.h"
+#include "float.h"
+#include <math.h>
+
+#define N1 25  //
+#define N (8 * N1) // Don't change this (N must be a multiple of 8)
+
+psS32 main()
+{
+    psStats *myStats    = NULL;
+    psS32 testStatus      = true;
+    psS32 globalTestStatus = true;
+    psS32 i               = 0;
+    psVector *myVector  = NULL;
+    psVector *maskVector= NULL;
+    // NOTE: These values were calculated by running the function on the data.
+    // A: They must be changed if we adjust the number of data points.
+    // B: We don't really know that they are correct.
+    float realLQNoMask   = N/4.0;
+    float realUQNoMask   = 3.0 * (N/4.0);
+    float realLQWithMask   = N/8.0;
+    float realUQWithMask   = 3.0 * (N/8.0);
+    psS32 count           = 0;
+    psS32 currentId       = psMemGetId();
+    psS32 memLeaks        = 0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_SAMPLE_QUARTILE);
+    myVector = psVectorAlloc(N, PS_TYPE_F32);
+    myVector->n = N;
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    // Set the appropriate values for the vector data.
+    for (i=0;i<N;i++) {
+        myVector->data.F32[i] = (float) i;
+    }
+
+    // Set the mask vector and calculate the expected maximum.
+    for (i=0;i<N;i++) {
+        if (i < (N/2)) {
+            maskVector->data.U8[i] = 0;
+            count++;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_LQ: no vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The expected sampleLQ was %f; the calculated sampleLQ was %f\n",
+           realLQNoMask, myStats->sampleLQ);
+    if (fabs(realLQNoMask - myStats->sampleLQ) <= 2.0 * FLT_EPSILON) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_SAMPLE_LQ: no vector mask",
+                testStatus);
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_UQ: no vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, NULL, 0);
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The expected sampleUQ was %f; the calculated sampleUQ was %f\n",
+           realUQNoMask, myStats->sampleUQ);
+    if (fabs(realUQNoMask - myStats->sampleUQ) <= 2.0 * FLT_EPSILON) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_SAMPLE_UQ: no vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_LQ: with vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+
+    printf("Called psVectorStats() on a vector with elements masked.\n");
+    printf("The expected sampleLQ was %f; the calculated sampleLQ was %f\n",
+           realLQWithMask, myStats->sampleLQ);
+    if (fabs(realLQWithMask - myStats->sampleLQ) <= 2.0 * FLT_EPSILON) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_SAMPLE_LQ: with vector mask",
+                testStatus);
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_SAMPLE_UQ: with vector mask");
+
+    myStats = psVectorStats(myStats, myVector, NULL, maskVector, 1);
+
+    printf("Called psVectorStats() on a vector with elements masked.\n");
+    printf("The expected sampleUQ was %f; the calculated sampleUQ was %f\n",
+           realUQWithMask, myStats->sampleUQ);
+    if (fabs(realUQWithMask - myStats->sampleUQ) <= 2.0 * FLT_EPSILON) {
+        testStatus = true;
+    } else {
+        testStatus = false;
+        globalTestStatus = false;
+    }
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_SAMPLE_UQ: with vector mask",
+                testStatus);
+
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "psStats(): deallocating memory");
+
+    psFree(myStats);
+    psFree(myVector);
+    psFree(maskVector);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psVector functions",
+                "psStats(): deallocating memory",
+                testStatus);
+
+    return (!globalTestStatus);
+}
Index: /trunk/psLib/test/math/tst_psStats09.c
===================================================================
--- /trunk/psLib/test/math/tst_psStats09.c	(revision 4547)
+++ /trunk/psLib/test/math/tst_psStats09.c	(revision 4547)
@@ -0,0 +1,149 @@
+/*****************************************************************************
+    This routine must ensure that PS_STAT_CLIPPED_MEAN and
+    PS_STAT_CLIPPED_STDEV is calculate correctly by the procedure
+    psVectorStats().
+ 
+    XXX: Must add tests for various data types, other than psF32.  Copy code
+    from tst_psStats00.c-tst_psStats02.c.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psTest.h"
+#include "psImageStats.h"
+#include "float.h"
+#include <math.h>
+
+#define N 500
+#define MY_MEAN  30.0
+#define MY_RANGE 2.0
+
+psS32 main()
+{
+    psStats *myStats    = NULL;
+    psS32 testStatus      = true;
+    psS32 globalTestStatus = true;
+    psS32 i               = 0;
+    psVector *maskVector= NULL;
+    psVector *myGaussData  = NULL;
+    // NOTE: These values were calculated by running the function on the data.
+    // A: They must be changed if we adjust the number of data points.
+    // B: We don't really know that they are correct.
+    //    float realclippedMeanNoMask  = 0.0;
+    //    float realclippedStdevNoMask = 0.0;
+    //    float realclippedMeanWithMask  = 0.0;
+    //    float realclippedStdevWithMask = 0.0;
+    psS32 count           = 0;
+    psS32 currentId       = psMemGetId();
+    psS32 memLeaks        = 0;
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    myStats = psStatsAlloc(PS_STAT_CLIPPED_MEAN |
+                           PS_STAT_CLIPPED_STDEV);
+
+    myGaussData = psVectorAlloc(N, PS_TYPE_F32);
+    myGaussData->n = myGaussData->nalloc;
+    for (i=0;i<N;i++) {
+        myGaussData->data.F32[i] = MY_MEAN - (MY_RANGE/1.9) +
+                                   (MY_RANGE) * ((float) i) / ((float) N);
+    }
+
+    maskVector = psVectorAlloc(N, PS_TYPE_U8);
+    maskVector->n = N;
+
+    // Set the mask vector and calculate the expected maximum.
+    for (i=0;i<N;i++) {
+        if (i < (N/2)) {
+            maskVector->data.U8[i] = 0;
+            count++;
+        } else {
+            maskVector->data.U8[i] = 1;
+        }
+    }
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with no vector mask.                    */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_CLIPPED_MEAN: no vector mask");
+
+    myStats = psVectorStats(myStats, myGaussData, NULL, NULL, 0);
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The calculated clippedMean was %.2f\n", myStats->clippedMean);
+
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_CLIPPED_MEAN/STDEV: no vector mask",
+                testStatus);
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_CLIPPED_STDEV: no vector mask");
+
+    printf("Called psVectorStats() on a vector with no elements masked.\n");
+    printf("The calculated clippedStdev was %.2f\n", myStats->clippedStdev);
+
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_CLIPPED_MEAN/STDEV: no vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Call psVectorStats() with vector mask.                       */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_CLIPPED_MEAN: vector mask");
+
+    myStats = psVectorStats(myStats, myGaussData, NULL, maskVector, 1);
+
+    printf("Called psVectorStats() on a vector with elements masked.\n");
+    printf("The calculated clippedMean was %.2f\n", myStats->clippedMean);
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_CLIPPED_MEAN/STDEV: vector mask",
+                testStatus);
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "PS_STAT_CLIPPED_STDEV: vector mask");
+
+    printf("Called psVectorStats() on a vector with elements masked.\n");
+    printf("The calculated clippedStdev was %.2f\n", myStats->clippedStdev);
+    printFooter(stdout,
+                "psVector functions",
+                "PS_STAT_CLIPPED_MEAN/STDEV: vector mask",
+                testStatus);
+
+    /*************************************************************************/
+    /*  Deallocate data structures                                   */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psStats functions",
+                            "psStats(): deallocating memory");
+
+    psFree(myStats);
+    psFree(myGaussData);
+    psFree(maskVector);
+
+    psMemCheckCorruption(1);
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+
+    printFooter(stdout,
+                "psVector functions",
+                "psStats(): deallocating memory",
+                testStatus);
+
+    return (!globalTestStatus);
+}
Index: /trunk/psLib/test/math/verified/tst_psFunc00.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc00.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc00.stderr	(revision 4547)
@@ -0,0 +1,72 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psPolynomial1DAlloc}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psPolynomial1DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psPolynomial2DAlloc}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psPolynomial2DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psPolynomial3DAlloc}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psPolynomial3DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psPolynomial4DAlloc}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psPolynomial4DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psDPolynomial1DAlloc}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psDPolynomial1DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psDPolynomial2DAlloc}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psDPolynomial2DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psDPolynomial3DAlloc}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psDPolynomial3DAlloc} | tst_psFunc00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc00.c                                             *
+*            TestPoint: psPolynomialXD{psDPolynomial4DAlloc}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPolynomialXD{psDPolynomial4DAlloc} | tst_psFunc00.c)
+
Index: /trunk/psLib/test/math/verified/tst_psFunc01.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc01.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc01.stdout	(revision 4547)
@@ -0,0 +1,108 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc01.c                                             *
+*            TestPoint: psFunctions functions{psGaussian()}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+normal psGaussian(0.000000) is 0.000000
+normal psGaussian(2.000000) is 0.000000
+normal psGaussian(4.000000) is 0.000000
+normal psGaussian(6.000000) is 0.000000
+normal psGaussian(8.000000) is 0.000000
+normal psGaussian(10.000000) is 0.000000
+normal psGaussian(12.000000) is 0.000000
+normal psGaussian(14.000000) is 0.000000
+normal psGaussian(16.000000) is 0.000000
+normal psGaussian(18.000000) is 0.000000
+normal psGaussian(20.000000) is 0.000001
+normal psGaussian(22.000000) is 0.000067
+normal psGaussian(24.000000) is 0.002216
+normal psGaussian(26.000000) is 0.026995
+normal psGaussian(28.000000) is 0.120985
+normal psGaussian(30.000000) is 0.199471
+normal psGaussian(32.000000) is 0.120985
+normal psGaussian(34.000000) is 0.026995
+normal psGaussian(36.000000) is 0.002216
+normal psGaussian(38.000000) is 0.000067
+normal psGaussian(40.000000) is 0.000001
+normal psGaussian(42.000000) is 0.000000
+normal psGaussian(44.000000) is 0.000000
+normal psGaussian(46.000000) is 0.000000
+normal psGaussian(48.000000) is 0.000000
+normal psGaussian(50.000000) is 0.000000
+normal psGaussian(52.000000) is 0.000000
+normal psGaussian(54.000000) is 0.000000
+normal psGaussian(56.000000) is 0.000000
+normal psGaussian(58.000000) is 0.000000
+NON-normal psGaussian(0.000000) is 0.000000
+NON-normal psGaussian(2.000000) is 0.000000
+NON-normal psGaussian(4.000000) is 0.000000
+NON-normal psGaussian(6.000000) is 0.000000
+NON-normal psGaussian(8.000000) is 0.000000
+NON-normal psGaussian(10.000000) is 0.000000
+NON-normal psGaussian(12.000000) is 0.000000
+NON-normal psGaussian(14.000000) is 0.000000
+NON-normal psGaussian(16.000000) is 0.000000
+NON-normal psGaussian(18.000000) is 0.000000
+NON-normal psGaussian(20.000000) is 0.000004
+NON-normal psGaussian(22.000000) is 0.000335
+NON-normal psGaussian(24.000000) is 0.011109
+NON-normal psGaussian(26.000000) is 0.135335
+NON-normal psGaussian(28.000000) is 0.606531
+NON-normal psGaussian(30.000000) is 1.000000
+NON-normal psGaussian(32.000000) is 0.606531
+NON-normal psGaussian(34.000000) is 0.135335
+NON-normal psGaussian(36.000000) is 0.011109
+NON-normal psGaussian(38.000000) is 0.000335
+NON-normal psGaussian(40.000000) is 0.000004
+NON-normal psGaussian(42.000000) is 0.000000
+NON-normal psGaussian(44.000000) is 0.000000
+NON-normal psGaussian(46.000000) is 0.000000
+NON-normal psGaussian(48.000000) is 0.000000
+NON-normal psGaussian(50.000000) is 0.000000
+NON-normal psGaussian(52.000000) is 0.000000
+NON-normal psGaussian(54.000000) is 0.000000
+NON-normal psGaussian(56.000000) is 0.000000
+NON-normal psGaussian(58.000000) is 0.000000
+
+---> TESTPOINT PASSED (psFunctions functions{psGaussian()} | tst_psFunc01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc01.c                                             *
+*            TestPoint: psFunctions functions{p_psGaussianDev()}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Gaussian Deviate [0] is 30.267838
+Gaussian Deviate [1] is 29.823797
+Gaussian Deviate [2] is 33.348816
+Gaussian Deviate [3] is 31.467281
+Gaussian Deviate [4] is 31.995049
+Gaussian Deviate [5] is 27.444996
+Gaussian Deviate [6] is 25.206570
+Gaussian Deviate [7] is 28.641439
+Gaussian Deviate [8] is 29.921818
+Gaussian Deviate [9] is 31.787111
+Gaussian Deviate [10] is 29.964705
+Gaussian Deviate [11] is 27.406887
+Gaussian Deviate [12] is 28.664040
+Gaussian Deviate [13] is 30.363417
+Gaussian Deviate [14] is 31.662102
+Gaussian Deviate [15] is 28.903503
+Gaussian Deviate [16] is 28.723936
+Gaussian Deviate [17] is 30.014177
+Gaussian Deviate [18] is 28.660292
+Gaussian Deviate [19] is 28.344475
+Gaussian Deviate [20] is 31.225000
+Gaussian Deviate [21] is 29.264824
+Gaussian Deviate [22] is 29.421013
+Gaussian Deviate [23] is 28.166250
+Gaussian Deviate [24] is 28.832390
+Gaussian Deviate [25] is 30.129230
+Gaussian Deviate [26] is 30.093487
+Gaussian Deviate [27] is 28.498547
+Gaussian Deviate [28] is 29.711535
+Gaussian Deviate [29] is 32.951122
+
+---> TESTPOINT PASSED (psFunctions functions{p_psGaussianDev()} | tst_psFunc01.c)
+
Index: /trunk/psLib/test/math/verified/tst_psFunc02.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc02.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc02.stderr	(revision 4547)
@@ -0,0 +1,16 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psSpline1DAlloc (FILE:LINENO)
+    Error: max and min are equal.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psSpline1DAlloc (FILE:LINENO)
+    Error: max and min are equal.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psSpline1DAllocGeneric (FILE:LINENO)
+    Unallowable operation: psVector bounds or its data is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psSpline1DAllocGeneric (FILE:LINENO)
+    Unallowable operation: psVector bounds has no elements.
Index: /trunk/psLib/test/math/verified/tst_psFunc02.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc02.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc02.stdout	(revision 4547)
@@ -0,0 +1,106 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAlloc(): linear, normal}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psSpline1D->knots->data.F32[0] is 1.000000
+psSpline1D->knots->data.F32[1] is 3.250000
+psSpline1D->knots->data.F32[2] is 5.500000
+psSpline1D->knots->data.F32[3] is 7.750000
+psSpline1D->knots->data.F32[4] is 10.000000
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): linear, normal} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAlloc(): linear, min/max are equal} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): linear, min/max are equal} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAlloc(): linear, min > max.} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psSpline1D->knots->data.F32[0] is 1.000000
+psSpline1D->knots->data.F32[1] is 0.500000
+psSpline1D->knots->data.F32[2] is 0.000000
+psSpline1D->knots->data.F32[3] is -0.500000
+psSpline1D->knots->data.F32[4] is -1.000000
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): linear, min > max.} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAlloc(), cubic, normal}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psSpline1D->data.F32[0] is 1.000000
+psSpline1D->data.F32[1] is 3.250000
+psSpline1D->data.F32[2] is 5.500000
+psSpline1D->data.F32[3] is 7.750000
+psSpline1D->data.F32[4] is 10.000000
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): cubic, normal} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAlloc(): cubic, min/max are equal} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): cubic, min/max are equal} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAlloc(): cubic, min > max.} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psSpline1D->knots->data.F32[0] is 1.000000
+psSpline1D->knots->data.F32[1] is 0.500000
+psSpline1D->knots->data.F32[2] is 0.000000
+psSpline1D->knots->data.F32[3] is -0.500000
+psSpline1D->knots->data.F32[4] is -1.000000
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAlloc(): cubic, min > max.} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAllocGeneric(): linear, normal} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psSpline1D->knots->data.F32[0] is 2.000000
+psSpline1D->knots->data.F32[1] is 4.000000
+psSpline1D->knots->data.F32[2] is 6.000000
+psSpline1D->knots->data.F32[3] is 8.000000
+psSpline1D->knots->data.F32[4] is 10.000000
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAllocGeneric(): linear, normal} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAllocGeneric(): bound equal to NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAllocGeneric(): bound equal to NULL} | tst_psFunc02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc02.c                                             *
+*            TestPoint: psFunction functions{psSpline1DAllocGeneric(): bounds with zero elements} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psFunctions functions{psSpline1DAllocGeneric(): bounds with zero elements} | tst_psFunc02.c)
+
Index: /trunk/psLib/test/math/verified/tst_psFunc08.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc08.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc08.stderr	(revision 4547)
@@ -0,0 +1,68 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc08.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial1DEval}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly1DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psPolynomial1DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial1DEval} | tst_psFunc08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc08.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial1DEval}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly1DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psDPolynomial1DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial1DEval} | tst_psFunc08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc08.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial1DEvalVector}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly1DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psPolynomial1DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testPoly1DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial1DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly1DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial1DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial1DEvalVector} | tst_psFunc08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc08.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial1DEvalVector}              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly1DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly1DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly1DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial1DEvalVector} | tst_psFunc08.c)
+
Index: /trunk/psLib/test/math/verified/tst_psFunc09.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc09.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc09.stderr	(revision 4547)
@@ -0,0 +1,84 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc09.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial2DEval}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly2DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psPolynomial2DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial2DEval} | tst_psFunc09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc09.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial2DEval}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly2DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psDPolynomial2DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial2DEval} | tst_psFunc09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc09.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial2DEvalVector}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+<DATE><TIME>|<HOST>|I|testPoly2DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial2DEvalVector} | tst_psFunc09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc09.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial2DEvalVector}              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+<DATE><TIME>|<HOST>|I|testDPoly2DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial2DEvalVector} | tst_psFunc09.c)
+
Index: /trunk/psLib/test/math/verified/tst_psFunc10.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc10.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc10.stderr	(revision 4547)
@@ -0,0 +1,100 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc10.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial3DEval}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly3DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psPolynomial3DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial3DEval} | tst_psFunc10.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc10.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial3DEval}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly3DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial3DEval} | tst_psFunc10.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc10.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial3DEvalVector}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y has incorrect type.
+<DATE><TIME>|<HOST>|I|testPoly3DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial3DEvalVector} | tst_psFunc10.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc10.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial3DEvalVector}              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y has incorrect type.
+<DATE><TIME>|<HOST>|I|testDPoly3DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial3DEvalVector} | tst_psFunc10.c)
+
Index: /trunk/psLib/test/math/verified/tst_psFunc11.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psFunc11.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psFunc11.stderr	(revision 4547)
@@ -0,0 +1,116 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc11.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial4DEval}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly4DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psPolynomial4DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial4DEval} | tst_psFunc11.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc11.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial4DEval}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly4DEval
+    Following should generate error message invalid type
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEval (FILE:LINENO)
+    Unknown polynomial type 0x63 found.  Evaluation failed.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial4DEval} | tst_psFunc11.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc11.c                                             *
+*            TestPoint: psPolynomialXDEval{psPolynomial4DEvalVector}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector t or its data is NULL.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y has incorrect type.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z has incorrect type.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector t has incorrect type.
+<DATE><TIME>|<HOST>|I|testPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psPolynomial4DEvalVector} | tst_psFunc11.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psFunc11.c                                             *
+*            TestPoint: psPolynomialXDEval{psDPolynomial4DEvalVector}              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for NULL polynomial
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for NULL input vector
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector t or its data is NULL.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector y has incorrect type.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector z has incorrect type.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector t has incorrect type.
+<DATE><TIME>|<HOST>|I|testDPoly4DEvalVector
+    Following should generate an error message for invalid input type
+<DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO)
+    Unallowable operation: psVector x has incorrect type.
+
+---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial4DEvalVector} | tst_psFunc11.c)
+
Index: /trunk/psLib/test/math/verified/tst_psHist00.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psHist00.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psHist00.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psHistogramAlloc (FILE:LINENO)
+    Error: (lower > upper) (30.000000 20.000000)
Index: /trunk/psLib/test/math/verified/tst_psHist00.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psHist00.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psHist00.stdout	(revision 4547)
@@ -0,0 +1,87 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist00.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist00.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 25.000)
+Bin number 1 bounds: (25.000 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist00.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 21.000)
+Bin number 1 bounds: (21.000 - 22.000)
+Bin number 2 bounds: (22.000 - 23.000)
+Bin number 3 bounds: (23.000 - 24.000)
+Bin number 4 bounds: (24.000 - 25.000)
+Bin number 5 bounds: (25.000 - 26.000)
+Bin number 6 bounds: (26.000 - 27.000)
+Bin number 7 bounds: (27.000 - 28.000)
+Bin number 8 bounds: (28.000 - 29.000)
+Bin number 9 bounds: (29.000 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist00.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 20.500)
+Bin number 1 bounds: (20.500 - 21.000)
+Bin number 2 bounds: (21.000 - 21.500)
+Bin number 3 bounds: (21.500 - 22.000)
+Bin number 4 bounds: (22.000 - 22.500)
+Bin number 5 bounds: (22.500 - 23.000)
+Bin number 6 bounds: (23.000 - 23.500)
+Bin number 7 bounds: (23.500 - 24.000)
+Bin number 8 bounds: (24.000 - 24.500)
+Bin number 9 bounds: (24.500 - 25.000)
+Bin number 10 bounds: (25.000 - 25.500)
+Bin number 11 bounds: (25.500 - 26.000)
+Bin number 12 bounds: (26.000 - 26.500)
+Bin number 13 bounds: (26.500 - 27.000)
+Bin number 14 bounds: (27.000 - 27.500)
+Bin number 15 bounds: (27.500 - 28.000)
+Bin number 16 bounds: (28.000 - 28.500)
+Bin number 17 bounds: (28.500 - 29.000)
+Bin number 18 bounds: (29.000 - 29.500)
+Bin number 19 bounds: (29.500 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist00.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure. (UPPER<LOWER)} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure. (UPPER<LOWER)} | tst_psHist00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist00.c                                             *
+*            TestPoint: psStats functions{Deallocate the psHistogram structure.}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Deallocate the psHistogram structure.} | tst_psHist00.c)
+
Index: /trunk/psLib/test/math/verified/tst_psHist01.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psHist01.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psHist01.stdout	(revision 4547)
@@ -0,0 +1,78 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist01.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist01.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 25.000)
+Bin number 1 bounds: (25.000 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist01.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 21.000)
+Bin number 1 bounds: (21.000 - 22.000)
+Bin number 2 bounds: (22.000 - 23.000)
+Bin number 3 bounds: (23.000 - 24.000)
+Bin number 4 bounds: (24.000 - 25.000)
+Bin number 5 bounds: (25.000 - 26.000)
+Bin number 6 bounds: (26.000 - 27.000)
+Bin number 7 bounds: (27.000 - 28.000)
+Bin number 8 bounds: (28.000 - 29.000)
+Bin number 9 bounds: (29.000 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist01.c                                             *
+*            TestPoint: psStats functions{Allocate the psHistogram structure.}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 20.500)
+Bin number 1 bounds: (20.500 - 21.000)
+Bin number 2 bounds: (21.000 - 21.500)
+Bin number 3 bounds: (21.500 - 22.000)
+Bin number 4 bounds: (22.000 - 22.500)
+Bin number 5 bounds: (22.500 - 23.000)
+Bin number 6 bounds: (23.000 - 23.500)
+Bin number 7 bounds: (23.500 - 24.000)
+Bin number 8 bounds: (24.000 - 24.500)
+Bin number 9 bounds: (24.500 - 25.000)
+Bin number 10 bounds: (25.000 - 25.500)
+Bin number 11 bounds: (25.500 - 26.000)
+Bin number 12 bounds: (26.000 - 26.500)
+Bin number 13 bounds: (26.500 - 27.000)
+Bin number 14 bounds: (27.000 - 27.500)
+Bin number 15 bounds: (27.500 - 28.000)
+Bin number 16 bounds: (28.000 - 28.500)
+Bin number 17 bounds: (28.500 - 29.000)
+Bin number 18 bounds: (29.000 - 29.500)
+Bin number 19 bounds: (29.500 - 30.000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psHistogram structure.} | tst_psHist01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist01.c                                             *
+*            TestPoint: psStats functions{Deallocate the psHistogram structure.}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Deallocate the psHistogram structure.} | tst_psHist01.c)
+
Index: /trunk/psLib/test/math/verified/tst_psHist02.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psHist02.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psHist02.stderr	(revision 4547)
@@ -0,0 +1,8 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorHistogram (FILE:LINENO)
+    Unallowable operation: out is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorHistogram (FILE:LINENO)
+    Unallowable operation: psVector values or its data is NULL.
Index: /trunk/psLib/test/math/verified/tst_psHist02.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psHist02.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psHist02.stdout	(revision 4547)
@@ -0,0 +1,156 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.00 - 30.00) data (10000.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 30.000) data (5000.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.00 - 25.00) data (5000.000000)
+Bin number 1 bounds: (25.00 - 30.00) data (5000.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 25.000) data (5000.000000)
+Bin number 1 bounds: (25.000 - 30.000) data (0.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.00 - 21.00) data (1000.000000)
+Bin number 1 bounds: (21.00 - 22.00) data (1000.000000)
+Bin number 2 bounds: (22.00 - 23.00) data (1000.000000)
+Bin number 3 bounds: (23.00 - 24.00) data (1000.000000)
+Bin number 4 bounds: (24.00 - 25.00) data (1000.000000)
+Bin number 5 bounds: (25.00 - 26.00) data (1000.000000)
+Bin number 6 bounds: (26.00 - 27.00) data (1000.000000)
+Bin number 7 bounds: (27.00 - 28.00) data (1000.000000)
+Bin number 8 bounds: (28.00 - 29.00) data (1000.000000)
+Bin number 9 bounds: (29.00 - 30.00) data (1000.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 21.000) data (1000.000000)
+Bin number 1 bounds: (21.000 - 22.000) data (1000.000000)
+Bin number 2 bounds: (22.000 - 23.000) data (1000.000000)
+Bin number 3 bounds: (23.000 - 24.000) data (1000.000000)
+Bin number 4 bounds: (24.000 - 25.000) data (1000.000000)
+Bin number 5 bounds: (25.000 - 26.000) data (0.000000)
+Bin number 6 bounds: (26.000 - 27.000) data (0.000000)
+Bin number 7 bounds: (27.000 - 28.000) data (0.000000)
+Bin number 8 bounds: (28.000 - 29.000) data (0.000000)
+Bin number 9 bounds: (29.000 - 30.000) data (0.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram, no mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.00 - 20.50) data (500.000000)
+Bin number 1 bounds: (20.50 - 21.00) data (500.000000)
+Bin number 2 bounds: (21.00 - 21.50) data (500.000000)
+Bin number 3 bounds: (21.50 - 22.00) data (500.000000)
+Bin number 4 bounds: (22.00 - 22.50) data (500.000000)
+Bin number 5 bounds: (22.50 - 23.00) data (500.000000)
+Bin number 6 bounds: (23.00 - 23.50) data (500.000000)
+Bin number 7 bounds: (23.50 - 24.00) data (500.000000)
+Bin number 8 bounds: (24.00 - 24.50) data (500.000000)
+Bin number 9 bounds: (24.50 - 25.00) data (500.000000)
+Bin number 10 bounds: (25.00 - 25.50) data (500.000000)
+Bin number 11 bounds: (25.50 - 26.00) data (500.000000)
+Bin number 12 bounds: (26.00 - 26.50) data (500.000000)
+Bin number 13 bounds: (26.50 - 27.00) data (500.000000)
+Bin number 14 bounds: (27.00 - 27.50) data (500.000000)
+Bin number 15 bounds: (27.50 - 28.00) data (500.000000)
+Bin number 16 bounds: (28.00 - 28.50) data (500.000000)
+Bin number 17 bounds: (28.50 - 29.00) data (500.000000)
+Bin number 18 bounds: (29.00 - 29.50) data (500.000000)
+Bin number 19 bounds: (29.50 - 30.00) data (500.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram, no mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Allocate and Perform Histogram with mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Bin number 0 bounds: (20.000 - 20.500) data (500.000000)
+Bin number 1 bounds: (20.500 - 21.000) data (500.000000)
+Bin number 2 bounds: (21.000 - 21.500) data (500.000000)
+Bin number 3 bounds: (21.500 - 22.000) data (500.000000)
+Bin number 4 bounds: (22.000 - 22.500) data (500.000000)
+Bin number 5 bounds: (22.500 - 23.000) data (500.000000)
+Bin number 6 bounds: (23.000 - 23.500) data (500.000000)
+Bin number 7 bounds: (23.500 - 24.000) data (500.000000)
+Bin number 8 bounds: (24.000 - 24.500) data (500.000000)
+Bin number 9 bounds: (24.500 - 25.000) data (500.000000)
+Bin number 10 bounds: (25.000 - 25.500) data (0.000000)
+Bin number 11 bounds: (25.500 - 26.000) data (0.000000)
+Bin number 12 bounds: (26.000 - 26.500) data (0.000000)
+Bin number 13 bounds: (26.500 - 27.000) data (0.000000)
+Bin number 14 bounds: (27.000 - 27.500) data (0.000000)
+Bin number 15 bounds: (27.500 - 28.000) data (0.000000)
+Bin number 16 bounds: (28.000 - 28.500) data (0.000000)
+Bin number 17 bounds: (28.500 - 29.000) data (0.000000)
+Bin number 18 bounds: (29.000 - 29.500) data (0.000000)
+Bin number 19 bounds: (29.500 - 30.000) data (0.000000)
+
+---> TESTPOINT PASSED (psStats functions{Allocate and Perform Histogram with mask} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Calling psVectorHistogram() with various NULL inputs.} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Calling psVectorHistogram() with various NULL inputs.} | tst_psHist02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHist02.c                                             *
+*            TestPoint: psStats functions{Deallocate the psHistogram structure.}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Deallocate the psHistogram structure.} | tst_psHist02.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix01.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix01.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix01.stdout	(revision 4547)
@@ -0,0 +1,36 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix01.c                                           *
+*            TestPoint: psMatrix{Create input and output images}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix01.c                                           *
+*            TestPoint: psMatrix{Transpose input image into output image}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Transpose input image into output image} | tst_psMatrix01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix01.c                                           *
+*            TestPoint: psMatrix{Transpose input image into auto allocated NULL output image} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Transpose input image into auto allocated NULL output image} | tst_psMatrix01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix01.c                                           *
+*            TestPoint: psMatrix{Free images and check for leaks}                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Free images and check for leaks} | tst_psMatrix01.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix02.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix02.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix02.stderr	(revision 4547)
@@ -0,0 +1,6 @@
+<DATE><TIME>|<HOST>|E|psMatrixTranspose (FILE:LINENO)
+    Invalid operation: Pointer to in is same as out.
+<DATE><TIME>|<HOST>|E|psMatrixTranspose (FILE:LINENO)
+    Unallowable operation: psImage in or its data is NULL.
+<DATE><TIME>|<HOST>|E|psMatrixTranspose (FILE:LINENO)
+    Invalid operation. in not PS_TYPE_F64.
Index: /trunk/psLib/test/math/verified/tst_psMatrix02.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix02.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix02.stdout	(revision 4547)
@@ -0,0 +1,45 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix02.c                                           *
+*            TestPoint: psMatrix{Input pointer same as output pointer}             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Input pointer same as output pointer} | tst_psMatrix02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix02.c                                           *
+*            TestPoint: psMatrix{Null input psImage}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Null input psImage} | tst_psMatrix02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix02.c                                           *
+*            TestPoint: psMatrix{Incorrect type for input pointer}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Incorrect type for input pointer} | tst_psMatrix02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix02.c                                           *
+*            TestPoint: psMatrix{Incorrect type for output pointer}                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Incorrect type for output pointer} | tst_psMatrix02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix02.c                                           *
+*            TestPoint: psMatrix{Matrix not square for output pointer}             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Matrix not square for output pointer} | tst_psMatrix02.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix03.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix03.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix03.stderr	(revision 4547)
@@ -0,0 +1,6 @@
+<DATE><TIME>|<HOST>|E|psMatrixLUD (FILE:LINENO)
+    Unallowable operation: psImage in or its data is NULL.
+<DATE><TIME>|<HOST>|E|psMatrixLUSolve (FILE:LINENO)
+    Unallowable operation: psVector RHS or its data is NULL.
+<DATE><TIME>|<HOST>|E|psMatrixLUSolve (FILE:LINENO)
+    Unallowable operation: psImage LU or its data is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMatrix03.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix03.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix03.stdout	(revision 4547)
@@ -0,0 +1,69 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Create input and output images and vectors}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Create input and output images and vectors} | tst_psMatrix03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Calculate LU matrix}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Calculate LU matrix} | tst_psMatrix03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Determine solution to matrix equation}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Determine solution to matrix equation} | tst_psMatrix03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Free input and output images and vectors}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Free input and output images and vectors} | tst_psMatrix03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Attempt to use null image input argument}         *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null image input argument} | tst_psMatrix03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Attempt to use null input vector argument}        *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: inVector or its data is NULL.           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null input vector argument} | tst_psMatrix03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix03.c                                           *
+*            TestPoint: psMatrix{Attempt to use null LU image argument}            *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null LU image argument} | tst_psMatrix03.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix04.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix04.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix04.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|E|psMatrixInvert (FILE:LINENO)
+    Unallowable operation: psImage in or its data is NULL.
+<DATE><TIME>|<HOST>|E|psMatrixInvert (FILE:LINENO)
+    Unallowable operation: determinant is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMatrix04.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix04.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix04.stdout	(revision 4547)
@@ -0,0 +1,58 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix04.c                                           *
+*            TestPoint: psMatrix{Create input and output images}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix04.c                                           *
+*            TestPoint: psMatrix{Invert matrix and calculate determinant}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Invert matrix and calculate determinant} | tst_psMatrix04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix04.c                                           *
+*            TestPoint: psMatrix{Calculate determinant only}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Calculate determinant only} | tst_psMatrix04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix04.c                                           *
+*            TestPoint: psMatrix{Free input and output images}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Free input and output images} | tst_psMatrix04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix04.c                                           *
+*            TestPoint: psMatrix{Attempt to use null input image argument}         *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null input image argument} | tst_psMatrix04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix04.c                                           *
+*            TestPoint: psMatrix{Attempt to use null input float argument}         *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: determinant argument is NULL.           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null input float argument} | tst_psMatrix04.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix05.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix05.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix05.stdout	(revision 4547)
@@ -0,0 +1,27 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix05.c                                           *
+*            TestPoint: psMatrix{Create input and output images}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix05.c                                           *
+*            TestPoint: psMatrix{Multiply images}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Multiply images} | tst_psMatrix05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix05.c                                           *
+*            TestPoint: psMatrix{Free input and output images}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Free input and output images} | tst_psMatrix05.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix06.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix06.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix06.stdout	(revision 4547)
@@ -0,0 +1,27 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix06.c                                           *
+*            TestPoint: psMatrix{Create input and output images}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Create input and output images} | tst_psMatrix06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix06.c                                           *
+*            TestPoint: psMatrix{Calculate Eigenvectors}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Calculate Eigenvectors} | tst_psMatrix06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix06.c                                           *
+*            TestPoint: psMatrix{Free input and output images}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Free input and output images} | tst_psMatrix06.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrix07.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix07.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix07.stderr	(revision 4547)
@@ -0,0 +1,24 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error.
+<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
+    Unallowable operation: psImage inImage or its data is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error.
+<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
+    Unallowable operation: psImage inImage or its data is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
+    Image does not have dim with 1 col or 1 row: (2 x 2).
+<DATE><TIME>|<HOST>|I|main
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psMatrixToVector (FILE:LINENO)
+    Image does not have dim with 1 col or 1 row: (2 x 2).
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psVectorToMatrix (FILE:LINENO)
+    Unallowable operation: psVector inVector or its data is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psVectorToMatrix (FILE:LINENO)
+    Unallowable operation: psVector inVector or its data is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMatrix07.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrix07.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrix07.stdout	(revision 4547)
@@ -0,0 +1,87 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Create input and output images and vectors}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Create input and output images and vectors} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Convert matrix to PS_DIMEN_VECTOR vector}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Convert matrix to PS_DIMEN_VECTOR vector} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Attempt to use null image input argument}         *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: inImage or its data is NULL.            *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null image input argument} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Convert matrix to PS_DIMEN_TRANSV vector}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Convert matrix to PS_DIMEN_TRANSV vector} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Improper image size}                              *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Image does not have dim with 1 col or 1 row: (2 x 2).      *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Improper image size} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Convert PS_DIMEN_VECTOR vector to matrix}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Convert PS_DIMEN_VECTOR vector to matrix} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Attempt to use null input vector argument}        *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid operation: inVector or its data is NULL.           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Attempt to use null input vector argument} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Convert PS_DIMEN_TRANSV vector to matrix}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Convert PS_DIMEN_TRANSV vector to matrix} | tst_psMatrix07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrix07.c                                           *
+*            TestPoint: psMatrix{Free input and output images and vectors}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMatrix{Free input and output images and vectors} | tst_psMatrix07.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic01.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic01.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic01.stdout	(revision 4547)
@@ -0,0 +1,1156 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10 10 
+10 10 
+10 10 
+
+10 10 
+10 10 
+10 10 
+
+Output:
+20 20 
+20 20 
+20 20 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+Output:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20 20 
+20 20 
+20 20 
+
+10 10 
+10 10 
+10 10 
+
+Output:
+10 10 
+10 10 
+10 10 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+Output:
+0.000000+400.000000i 0.000000+400.000000i 
+0.000000+400.000000i 0.000000+400.000000i 
+0.000000+400.000000i 0.000000+400.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20 20 
+20 20 
+20 20 
+
+10 10 
+10 10 
+10 10 
+
+Output:
+200 200 
+200 200 
+200 200 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+200.000000 200.000000 
+200.000000 200.000000 
+200.000000 200.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+200.000000 200.000000 
+200.000000 200.000000 
+200.000000 200.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+Output:
+0.000000+400.000000i 0.000000+400.000000i 
+0.000000+400.000000i 0.000000+400.000000i 
+0.000000+400.000000i 0.000000+400.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+Output:
+2.000000+0.000000i 2.000000+0.000000i 
+2.000000+0.000000i 2.000000+0.000000i 
+2.000000+0.000000i 2.000000+0.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20 20 
+20 20 
+20 20 
+
+10 10 
+10 10 
+10 10 
+
+Output:
+2 2 
+2 2 
+2 2 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+2.000000 2.000000 
+2.000000 2.000000 
+2.000000 2.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+Output:
+2.000000 2.000000 
+2.000000 2.000000 
+2.000000 2.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+Output:
+2.000000+0.000000i 2.000000+0.000000i 
+2.000000+0.000000i 2.000000+0.000000i 
+2.000000+0.000000i 2.000000+0.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-matrix psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10 10 
+10 10 
+10 10 
+
+5 5 5 
+
+Output:
+15 15 
+15 15 
+15 15 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
+
+Output:
+15.000000+15.000000i 15.000000+15.000000i 
+15.000000+15.000000i 15.000000+15.000000i 
+15.000000+15.000000i 15.000000+15.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20 20 
+20 20 
+20 20 
+
+5 5 5 
+
+Output:
+15 15 
+15 15 
+15 15 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
+
+Output:
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20 20 
+20 20 
+20 20 
+
+5 5 5 
+
+Output:
+100 100 
+100 100 
+100 100 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+100.000000 100.000000 
+100.000000 100.000000 
+100.000000 100.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+100.000000 100.000000 
+100.000000 100.000000 
+100.000000 100.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
+
+Output:
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
+
+Output:
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20 20 
+20 20 
+20 20 
+
+5 5 5 
+
+Output:
+4 4 
+4 4 
+4 4 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+4.000000 4.000000 
+4.000000 4.000000 
+4.000000 4.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 5.000000 5.000000 
+
+Output:
+4.000000 4.000000 
+4.000000 4.000000 
+4.000000 4.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-vector psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 5.000000+5.000000i 5.000000+5.000000i 
+
+Output:
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-vector psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10 10 
+10 10 
+10 10 
+
+5 
+
+Output:
+15 15 
+15 15 
+15 15 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000 10.000000 
+10.000000 10.000000 
+10.000000 10.000000 
+
+5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: +
+Input:
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+10.000000+10.000000i 10.000000+10.000000i 
+
+5.000000+5.000000i 
+
+Output:
+15.000000+15.000000i 15.000000+15.000000i 
+15.000000+15.000000i 15.000000+15.000000i 
+15.000000+15.000000i 15.000000+15.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20 20 
+20 20 
+20 20 
+
+5 
+
+Output:
+15 15 
+15 15 
+15 15 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: -
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 
+
+Output:
+15.000000 15.000000 
+15.000000 15.000000 
+15.000000 15.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 
+
+Output:
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20 20 
+20 20 
+20 20 
+
+5 
+
+Output:
+100 100 
+100 100 
+100 100 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 
+
+Output:
+100.000000 100.000000 
+100.000000 100.000000 
+100.000000 100.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 
+
+Output:
+100.000000 100.000000 
+100.000000 100.000000 
+100.000000 100.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: *
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 
+
+Output:
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+0.000000+200.000000i 0.000000+200.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 
+
+Output:
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20 20 
+20 20 
+20 20 
+
+5 
+
+Output:
+4 4 
+4 4 
+4 4 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 
+
+Output:
+4.000000 4.000000 
+4.000000 4.000000 
+4.000000 4.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000 20.000000 
+20.000000 20.000000 
+20.000000 20.000000 
+
+5.000000 
+
+Output:
+4.000000 4.000000 
+4.000000 4.000000 
+4.000000 4.000000 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic01.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: /
+Input:
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+20.000000+20.000000i 20.000000+20.000000i 
+
+5.000000+5.000000i 
+
+Output:
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+4.000000+0.000000i 4.000000+0.000000i 
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix-scalar psBinaryOp} | tst_psMatrixVectorArithmetic01.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic02.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic02.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic02.stdout	(revision 4547)
@@ -0,0 +1,1700 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test matrix psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test matrix psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: abs
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: exp
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ln
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: ten
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: log
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: sin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dsin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: cos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dcos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: tan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dtan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: asin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dasin
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: acos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: dacos
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: atan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic02.c                           *
+*            TestPoint: psMatrixVectorArithmetic{Test vector psUnaryOp}            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Operation: datan
+
+
+---> TESTPOINT PASSED (psMatrixVectorArithmetic{Test vector psUnaryOp} | tst_psMatrixVectorArithmetic02.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic03.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic03.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic03.stderr	(revision 4547)
@@ -0,0 +1,66 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Unallowable operation: input1 is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Unallowable operation: input2 is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Unallowable operation: op is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
+    Unallowable operation: in is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
+    Unallowable operation: op is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    ptr input1 has type 1028, ptr input2 has type 1032.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Specified psImage dimensions differed, 2x2 vs 3x3.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Number of elements inconsistent, 2 vs 3.  Number of elements must match.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Number of elements inconsistent, 2 vs 3.  Number of elements must match.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an two error messages
+<DATE><TIME>|<HOST>|E|psVectorRecycle (FILE:LINENO)
+    The input psVector must have a vector dimension type.
+<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
+    Couldn't create a proper output psVector.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    The minimum operation is not supported with complex data.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    The maximum operation is not supported with complex data.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error messgae
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Specified operation, yarg, is not supported.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
+    Specified operation, yarg, is not supported.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psBinaryOp (FILE:LINENO)
+    Unallowable operation: input1 has incorrect dimensionality.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psUnaryOp (FILE:LINENO)
+    Specified parameter, in, has invalid dimensionality, 4.
Index: /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic03.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic03.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic03.stdout	(revision 4547)
@@ -0,0 +1,180 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check for output generated}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check for output generated} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check for null input arg 1}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check for null input arg 1} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check for null input arg 2}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check for null input arg 2} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check for null operand}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check for null operand} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Check for null output}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Check for null output} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Check for null input}                            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Check for null input} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Check for null operator}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Check for null operator} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Inconsistent element types}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Inconsistent element types} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Check output type conversion}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Check output type conversion} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check for inconsistent elements}                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check for inconsistent elements} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Check inconsistent elements in input and output} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Check inconsistent elements in input and output} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check inconsistent size}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check inconsistent size} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Check inconsistent size}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Check inconsistent size} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Check inconsistent dimensionality}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Check inconsistent dimensionality} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Attempt to use min with complex numbers}        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Attempt to use  min with complex numbers} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Attempt to use max with complex numbers}        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Attempt to use max with complex numbers} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinary{Attempt to use invalid operator}                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Attempt to use invalid operator} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Attempt to use invalid operator}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Attempt to use invalid operator} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psBinaryOp{Attempt to use input with PS_DIMEN_OTHER}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{Attempt to use input with PS_DIMEN_OTHER} | tst_psMatrixVectorArithmetic03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic03.c                           *
+*            TestPoint: psUnaryOp{Attempt to use input with PS_DIMEN_OTHER}        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{Attempt to use input with PS_DIMEN_OTHER} | tst_psMatrixVectorArithmetic03.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic04.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic04.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMatrixVectorArithmetic04.stderr	(revision 4547)
@@ -0,0 +1,36 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
+*            TestPoint: psBinaryOp{psBinaryOp}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{psBinaryOp} | tst_psMatrixVectorArithmetic04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
+*            TestPoint: psBinaryOp{psBinaryOp}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{psBinaryOp} | tst_psMatrixVectorArithmetic04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
+*            TestPoint: psBinaryOp{psBinaryOp}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psBinaryOp{psBinaryOp} | tst_psMatrixVectorArithmetic04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMatrixVectorArithmetic04.c                           *
+*            TestPoint: psUnaryOp{psUnaryOp}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psUnaryOp{psUnaryOp} | tst_psMatrixVectorArithmetic04.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMinimize04.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|I|t03
+    Following should generate an error for null input polynomial.
+<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMinimize04.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04.stdout	(revision 4547)
@@ -0,0 +1,36 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): equal difference in variable yE *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): equal differences in variable yErr} | tst_psMinimize04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} | tst_psMinimize04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} | tst_psMinimize04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} | tst_psMinimize04.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMinimize04_F32.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04_F32.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04_F32.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|I|t03
+    Following should generate an error for null input polynomial.
+<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMinimize04_F32.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04_F32.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04_F32.stdout	(revision 4547)
@@ -0,0 +1,36 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): equal difference in variable yE *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): equal differences in variable yErr} | tst_psMinimize04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): yErr is NULL} | tst_psMinimize04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): x, yErr is NULL} | tst_psMinimize04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04.c                                         *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): all inputs are NULL} | tst_psMinimize04.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMinimize04b.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04b.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04b.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|I|t03
+    Following should generate an error for null arguments.
+<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMinimize04b.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04b.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04b.stdout	(revision 4547)
@@ -0,0 +1,36 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} | tst_psMinimize04b.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} | tst_psMinimize04b.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMinimize04b_F32.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04b_F32.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04b_F32.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|I|t03
+    Following should generate an error for null arguments.
+<DATE><TIME>|<HOST>|E|psVectorFitPolynomial1D (FILE:LINENO)
+    Unallowable operation: polynomial poly or its coeffs is NULL.
Index: /trunk/psLib/test/math/verified/tst_psMinimize04b_F32.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize04b_F32.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize04b_F32.stdout	(revision 4547)
@@ -0,0 +1,36 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, equal errors in yErr} | tst_psMinimize04b.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, x, yErr is NULL} | tst_psMinimize04b.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMinimize04b.c                                        *
+*            TestPoint: psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMinimize functions{psVectorFitPolynomial1D(): CHEB, yErr is NULL} | tst_psMinimize04b.c)
+
Index: /trunk/psLib/test/math/verified/tst_psMinimize05.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psMinimize05.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psMinimize05.stderr	(revision 4547)
@@ -0,0 +1,16 @@
+<DATE><TIME>|<HOST>|I|t02
+    Following should generate error for null minimize.
+<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
+    Unallowable operation: min is NULL.
+<DATE><TIME>|<HOST>|I|t02
+    Following should generate error for null parameter vector
+<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
+    Unallowable operation: psVector params or its data is NULL.
+<DATE><TIME>|<HOST>|I|t02
+    Following should generate error for null coords.
+<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
+    Unallowable operation: coords is NULL.
+<DATE><TIME>|<HOST>|I|t02
+    Following should generate error for null function
+<DATE><TIME>|<HOST>|E|psMinimizePowell (FILE:LINENO)
+    Unallowable operation: func is NULL.
Index: /trunk/psLib/test/math/verified/tst_psRandom.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psRandom.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psRandom.stderr	(revision 4547)
@@ -0,0 +1,83 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomAlloc}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testRandomAlloc
+    Invalid type, should generate error message
+<DATE><TIME>|<HOST>|E|psRandomAlloc (FILE:LINENO)
+    Unknown Random Number Generator Type
+
+---> TESTPOINT PASSED (psRandom{psRandomAlloc} | tst_psRandom.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomUniform}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testRandomUniform
+    NULL psRandom variable, should generate error message
+<DATE><TIME>|<HOST>|E|psRandomUniform (FILE:LINENO)
+    Random variable is NULL.
+
+---> TESTPOINT PASSED (psRandom{psRandomUniform} | tst_psRandom.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomGaussian}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testRandomGaussian
+    NULL psRandom variable, should generate error message
+<DATE><TIME>|<HOST>|E|psRandomGaussian (FILE:LINENO)
+    Random variable is NULL.
+
+---> TESTPOINT PASSED (psRandom{psRandomGaussian} | tst_psRandom.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomPoisson}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testRandomPoisson
+    NULL psRandom variable, should generate error message
+<DATE><TIME>|<HOST>|E|psRandomPoisson (FILE:LINENO)
+    Random variable is NULL.
+
+---> TESTPOINT PASSED (psRandom{psRandomPoisson} | tst_psRandom.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomReset}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testRandomResetUniform
+    Reset a NULL psRandom variable, should generate an error message
+<DATE><TIME>|<HOST>|E|psRandomReset (FILE:LINENO)
+    Random variable is NULL.
+
+---> TESTPOINT PASSED (psRandom{psRandomReset} | tst_psRandom.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomReset}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psRandom{psRandomReset} | tst_psRandom.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psRandom.c                                             *
+*            TestPoint: psRandom{psRandomReset}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psRandom{psRandomReset} | tst_psRandom.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats00.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats00.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats00.stderr	(revision 4547)
@@ -0,0 +1,48 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats00.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testStatsSampleMeanF32
+    Following should generate warning message
+<DATE><TIME>|<HOST>|W|psVectorStats
+    WARNING: psVectorStats(): p_psVectorSampleMean() returned an error.
+<DATE><TIME>|<HOST>|I|testStatsSampleMeanF32
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
+    Unallowable operation: psVector in or its data is NULL.
+<DATE><TIME>|<HOST>|I|testStatsSampleMeanF32
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
+    Unallowable operation: stats is NULL.
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats00.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats00.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats00.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats00.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats01.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats01.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats01.stderr	(revision 4547)
@@ -0,0 +1,40 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats01.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testStatsMaxF32
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
+    Failed to calculate vector maximum
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats01.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats01.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats01.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats01.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats02.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats02.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats02.stderr	(revision 4547)
@@ -0,0 +1,40 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats02.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testStatsMinF32
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psVectorStats (FILE:LINENO)
+    Failed to calculate vector minimum
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats02.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats02.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats02.c                                            *
+*            TestPoint: psVectorStats{psVectorStats}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorStats{psVectorStats} | tst_psStats02.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats03.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats03.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats03.stdout	(revision 4547)
@@ -0,0 +1,31 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats03.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_MEDIAN: no vector mask}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with no elements masked.
+The expected median was 2058.000000.  The calculated median was 2058.000000.
+
+---> TESTPOINT PASSED (psStats functions{PS_STAT_SAMPLE_MEDIAN: no vector mask} | tst_psStats03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats03.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_MEDIAN: with vector mask} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with last N/2 elements masked.
+The expected median was 1028.500000.  The calculated median was 1028.500000.
+
+---> TESTPOINT PASSED (psStats functions{PS_STAT_SAMPLE_MEDIAN: with vector mask} | tst_psStats03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats03.c                                            *
+*            TestPoint: psStats functions{psStats(): deallocating memory}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{psStats(): deallocating memory} | tst_psStats03.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats05.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats05.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats05.stdout	(revision 4547)
@@ -0,0 +1,18 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats05.c                                            *
+*            TestPoint: psStats functions{Allocate the psStats structure.}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Allocate the psStats structure.} | tst_psStats05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats05.c                                            *
+*            TestPoint: psStats functions{Deallocate the psStats structure.}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psStats functions{Deallocate the psStats structure.} | tst_psStats05.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats06.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats06.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats06.stdout	(revision 4547)
@@ -0,0 +1,31 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats06.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_STDEV: no vector mask}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with no elements masked.
+The expected stdev was 4.472136; the calculated stdev was 4.472136
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_STDEV: no vector mask} | tst_psStats06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats06.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_STDEV: with vector mask}  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with last N/2 elements masked.
+The expected stdev was 2.160247; the calculated stdev was 2.160247
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_STDEV: with vector mask} | tst_psStats06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats06.c                                            *
+*            TestPoint: psStats functions{psStats(): deallocating memory}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVector functions{psStats(): deallocating memory} | tst_psStats06.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats07.stderr
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats07.stderr	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats07.stderr	(revision 4547)
@@ -0,0 +1,8 @@
+<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
+    WARNING: the fitted Gaussian has more than 10% error for the stdev.
+<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
+    WARNING: Using the calculated stdev instead of Gaussian-fitted stdev.
+<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
+    WARNING: the fitted Gaussian has more than 10% error for the stdev.
+<DATE><TIME>|<HOST>|W|p_psVectorRobustStats
+    WARNING: Using the calculated stdev instead of Gaussian-fitted stdev.
Index: /trunk/psLib/test/math/verified/tst_psStats08.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats08.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats08.stdout	(revision 4547)
@@ -0,0 +1,53 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats08.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_LQ: no vector mask}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with no elements masked.
+The expected sampleLQ was 50.000000; the calculated sampleLQ was 50.000000
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_LQ: no vector mask} | tst_psStats08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats08.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_UQ: no vector mask}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with no elements masked.
+The expected sampleUQ was 150.000000; the calculated sampleUQ was 150.000000
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_UQ: no vector mask} | tst_psStats08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats08.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_LQ: with vector mask}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with elements masked.
+The expected sampleLQ was 25.000000; the calculated sampleLQ was 25.000000
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_LQ: with vector mask} | tst_psStats08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats08.c                                            *
+*            TestPoint: psStats functions{PS_STAT_SAMPLE_UQ: with vector mask}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with elements masked.
+The expected sampleUQ was 75.000000; the calculated sampleUQ was 75.000000
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_SAMPLE_UQ: with vector mask} | tst_psStats08.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats08.c                                            *
+*            TestPoint: psStats functions{psStats(): deallocating memory}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVector functions{psStats(): deallocating memory} | tst_psStats08.c)
+
Index: /trunk/psLib/test/math/verified/tst_psStats09.stdout
===================================================================
--- /trunk/psLib/test/math/verified/tst_psStats09.stdout	(revision 4547)
+++ /trunk/psLib/test/math/verified/tst_psStats09.stdout	(revision 4547)
@@ -0,0 +1,53 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats09.c                                            *
+*            TestPoint: psStats functions{PS_STAT_CLIPPED_MEAN: no vector mask}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with no elements masked.
+The calculated clippedMean was 29.95
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: no vector mask} | tst_psStats09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats09.c                                            *
+*            TestPoint: psStats functions{PS_STAT_CLIPPED_STDEV: no vector mask}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with no elements masked.
+The calculated clippedStdev was 0.58
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: no vector mask} | tst_psStats09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats09.c                                            *
+*            TestPoint: psStats functions{PS_STAT_CLIPPED_MEAN: vector mask}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with elements masked.
+The calculated clippedMean was 29.45
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: vector mask} | tst_psStats09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats09.c                                            *
+*            TestPoint: psStats functions{PS_STAT_CLIPPED_STDEV: vector mask}      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Called psVectorStats() on a vector with elements masked.
+The calculated clippedStdev was 0.29
+
+---> TESTPOINT PASSED (psVector functions{PS_STAT_CLIPPED_MEAN/STDEV: vector mask} | tst_psStats09.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psStats09.c                                            *
+*            TestPoint: psStats functions{psStats(): deallocating memory}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVector functions{psStats(): deallocating memory} | tst_psStats09.c)
+
Index: /trunk/psLib/test/mathtypes/Makefile.am
===================================================================
--- /trunk/psLib/test/mathtypes/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/mathtypes/Makefile.am	(revision 4547)
@@ -0,0 +1,34 @@
+#Makefile for mathtypes tests
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psImage \
+	tst_psScalar \
+	tst_psVector \
+	tst_psVectorSort_01 \
+	tst_psVectorSort_02 \
+	tst_psVectorSort_03 \
+	tst_psVectorSort_04
+
+tst_psImage_SOURCES =  tst_psImage.c
+tst_psScalar_SOURCES =  tst_psScalar.c
+tst_psVector_SOURCES =  tst_psVector.c
+tst_psVectorSort_01_SOURCES =  tst_psVectorSort_01.c
+tst_psVectorSort_02_SOURCES =  tst_psVectorSort_02.c
+tst_psVectorSort_03_SOURCES =  tst_psVectorSort_03.c
+tst_psVectorSort_04_SOURCES =  tst_psVectorSort_04.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA)
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
Index: /trunk/psLib/test/mathtypes/tst_psImage.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psImage.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psImage.c	(revision 4547)
@@ -0,0 +1,276 @@
+/** @file  tst_psImage.c
+ *
+ *  @brief Contains the tests for psImage.[ch]
+ *
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "psTest.h"
+#include "pslib_strict.h"
+#include "psType.h"
+
+static psS32 testImageAlloc(void);
+static psS32 testRegion(void);
+
+testDescription tests[] = {
+                              {testImageAlloc,546,"psImageAlloc",0,false},
+                              {testImageAlloc,548,"psImageFree",0,true},
+                              {testRegion,790,"psRegionSet",0,false},
+                              {testRegion,791,"psRegionFromString",0,true},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return ! runTestSuite(stderr,"psImage",tests,argc,argv);
+}
+
+psS32 testImageAlloc(void)
+{
+    psImage* image = NULL;
+    psU32 sizes = 6;
+    psU32 numCols[] = {
+                          0,1,1,100,100,150
+                      };
+    psU32 numRows[] = {
+                          0,1,100,1,150,100
+                      };
+    psU32 types = 12;
+    psElemType type[] = { PS_TYPE_S8, PS_TYPE_S16, PS_TYPE_S32, PS_TYPE_S64,
+                          PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_U32, PS_TYPE_U64,
+                          PS_TYPE_F32, PS_TYPE_F64, PS_TYPE_C32, PS_TYPE_C64};
+
+    psLogMsg(__func__,PS_LOG_INFO,"#546 - psImageAlloc shall allocate memory for a psImage structure");
+
+    for (psU32 t=0;t<types;t++) {
+        psLogMsg(__func__,PS_LOG_INFO,"Testing psImage with type %xh",type[t]);
+
+        for (psU32 i=0;i<sizes;i++) {
+
+            if (numRows[i] == 0 || numCols[i] == 0) {
+                psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+            }
+
+            image = psImageAlloc(numCols[i],numRows[i],type[t]);
+
+            if (image == NULL) {
+                if (numRows[i] == 0 || numCols[i] == 0) {
+                    continue;
+                }
+                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned NULL for type %x, size %dx%d.",
+                        type[t], numCols[i], numRows[i]);
+                psFree(image);
+                return 1;
+            }
+
+            if (image->type.dimen != PS_DIMEN_IMAGE || image->type.type != type[t]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageAlloc allocated wrong dimen/type (%d/%d), should be "
+                        "PS_IMAGE_DIMEN/%d", image->type.dimen, image->type.type, type[t]);
+                psFree(image);
+                return 2;
+            }
+
+            if (image->numCols != numCols[i] || image->numRows != numRows[i]) {
+                psError(PS_ERR_UNKNOWN, true,"psImageAlloc allocated wrong size %dx%d, should be %dx%d (type = %d)",
+                        image->numCols, image->numRows, numCols[i], numRows[i],type[t]);
+                psFree(image);
+                return 3;
+            }
+
+            if (image->col0 != 0 || image->row0 != 0) {
+                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned row0/col0 of %d/%d.  Should be 0/0.",
+                        image->row0, image->row0);
+                psFree(image);
+                return 4;
+            }
+
+            if (image->parent != NULL) {
+                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned non-NULL parent");
+                psFree(image);
+                return 5;
+            }
+
+            if (image->children != NULL) {
+                psError(PS_ERR_UNKNOWN, true,"psImageAlloc returned non-NULL children array");
+                psFree(image);
+                return 7;
+            }
+
+            switch (type[t]) {
+            case PS_TYPE_U16: {
+                    psU32 rows = numRows[i];
+                    psU32 cols = numCols[i];
+
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            image->data.U16[r][c] = 2*c+r;
+                        }
+                    }
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            if (image->data.U16[r][c] != 2*c+r) {
+                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in uint16 image at (%d,%d)",c,r);
+                                psFree(image);
+                                return 8;
+                            }
+                        }
+                    }
+                }
+                break;
+            case PS_TYPE_F32: {
+                    psU32 rows = numRows[i];
+                    psU32 cols = numCols[i];
+
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            image->data.F32[r][c] = 2.0f*c+r;
+                        }
+                    }
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            if (fabsf(image->data.F32[r][c] - (2.0f*c+r)) > FLT_EPSILON) {
+                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in float image at (%d,%d)",c,r);
+                                psFree(image);
+                                return 8;
+                            }
+                        }
+                    }
+                }
+                break;
+            case PS_TYPE_F64: {
+                    psU32 rows = numRows[i];
+                    psU32 cols = numCols[i];
+
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            image->data.F64[r][c] = 2.0f*c+r;
+                        }
+                    }
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            if (fabs(image->data.F64[r][c] - (2.0f*c+r)) > DBL_EPSILON) {
+                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in double image at (%d,%d)",c,r);
+                                psFree(image);
+                                return 8;
+                            }
+                        }
+                    }
+                }
+                break;
+            case PS_TYPE_C32: {
+                    psU32 rows = numRows[i];
+                    psU32 cols = numCols[i];
+
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            image->data.C32[r][c] = r + I * c;
+                        }
+                    }
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            if (fabsf(crealf(image->data.C32[r][c]) - r) > FLT_EPSILON ||
+                                    fabsf(cimagf(image->data.C32[r][c]) - c) > FLT_EPSILON ) {
+                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in complex image at (%d,%d)",c,r);
+                                psFree(image);
+                                return 8;
+                            }
+                        }
+                    }
+                }
+                break;
+            default: {
+                    // ignore type and just use as byte bucket.
+                    psU32 rows = numRows[i];
+                    psU32 cols = numCols[i]*PSELEMTYPE_SIZEOF(type[t]);
+
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            image->data.U8[r][c] = (uint8_t)(r + c);
+                        }
+                    }
+                    for (psS32 r=0;r<rows;r++) {
+                        for (psS32 c=0;c<cols;c++) {
+                            if (image->data.U8[r][c] != (uint8_t)(r + c)) {
+                                psError(PS_ERR_UNKNOWN, true,"Could not set all pixels in image (type=%d) at (%d,%d)",
+                                        type[t],c,r);
+                                psFree(image);
+                                return 8;
+                            }
+                        }
+                    }
+                }
+            }
+            psFree(image);
+        }
+    }
+
+    // #548: Verify no memory leaks or corruption are detected after a valid psImage structure with multiple
+    // children is freed.
+    image = psImageAlloc(100,100,PS_TYPE_F32);
+    psImageSubset(image,(psRegion) {
+                      50,0,70,20
+                  }
+                 );
+    psImageSubset(image,(psRegion) {
+                      70,20,90,40
+                  }
+                 );
+
+    psFree(image);
+
+    return 0;
+}
+
+static psS32 testRegion(void)
+{
+    int testNum = 0;
+
+
+    // Testpoint #790
+
+    psRegion region = psRegionSet(1,2,3,4);
+
+    testNum++;
+    if (region.x0 != 1 || region.x1 != 2 || region.y0 != 3 || region.y1 != 4) {
+        psError(PS_ERR_UNKNOWN, false,
+                "The region attributes are not set properly (%s)",
+                psRegionToString(region));
+        return testNum;
+    }
+
+    // Testpoint #791
+
+    region = psRegionFromString("[1:2,3:4]");
+
+    testNum++;
+    if (region.x0 != 1 || region.x1 != 2 || region.y0 != 3 || region.y1 != 4) {
+        psError(PS_ERR_UNKNOWN, false,
+                "The region attributes are not set properly (%s)",
+                psRegionToString(region));
+        return testNum;
+    }
+
+    region = psRegionFromString("[1:2,3:]");
+
+    testNum++;
+    if (! isnan(region.x0)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "psRegionFromString returned a non-NULL pointer given a malformed string.");
+        return testNum;
+    }
+
+    return 0;
+}
Index: /trunk/psLib/test/mathtypes/tst_psScalar.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psScalar.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psScalar.c	(revision 4547)
@@ -0,0 +1,138 @@
+/** @file  tst_psScalar.c
+ *
+ *  @brief Contains the tests for psScalar.[ch]
+ *
+ *  @author Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $
+ *           $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+static psS32 testScalarAlloc(void);
+static psS32 testScalarCopy(void);
+
+#define tstScalarAllocByType(datatype,value)                                                                    \
+scalar = psScalarAlloc(value,PS_TYPE_##datatype);                                                               \
+if(scalar == NULL) {                                                                                            \
+    psError(PS_ERR_UNKNOWN,true,"psScalarAlloc returned NULL.");                                                \
+    return 1+value;                                                                                             \
+} else {                                                                                                        \
+    if( (scalar->type.type != PS_TYPE_##datatype) && (scalar->data.datatype != value) ) {                       \
+        psError(PS_ERR_UNKNOWN,true,"psScalarAlloc created object with unexpected type and/or value");          \
+        return 2+value;                                                                                         \
+    }                                                                                                           \
+}                                                                                                               \
+psFree(scalar);
+
+#define tstScalarCopyByType(datatype,value)                                                                               \
+scalarOrig = psScalarAlloc(value,PS_TYPE_##datatype);                                                                     \
+scalarCopy = psScalarCopy(scalarOrig);                                                                                    \
+if(scalarCopy == NULL) {                                                                                                  \
+    psError(PS_ERR_UNKNOWN,true,"psScalarCopy returned NULL.");                                                           \
+    return 3+value;                                                                                                       \
+} else {                                                                                                                  \
+    if( (scalarCopy->type.type != scalarOrig->type.type) || (scalarCopy->data.datatype != scalarOrig->data.datatype) ) {  \
+        psError(PS_ERR_UNKNOWN,true,"psScalarCopy did not copy the original scalar by type and/or value");                \
+        return 4+value;                                                                                                   \
+    }                                                                                                                     \
+}                                                                                                                         \
+psFree(scalarCopy);                                                                                                       \
+psFree(scalarOrig);
+
+testDescription tests[] = {
+                              {testScalarAlloc,783,"psScalarAlloc",0,false},
+                              {testScalarCopy,784,"psScalarCopy",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if ( ! runTestSuite(stderr,"psScalar",tests,argc,argv) ) {
+        psError(PS_ERR_UNKNOWN,true,"One or more tests failed");
+        return 1;
+    }
+    return 0;
+}
+
+psS32 testScalarAlloc(void)
+{
+    psScalar* scalar;
+
+    psLogMsg(__func__,PS_LOG_INFO,"psScalarAlloc shall create scalar data objects");
+
+    // Verify the proper allocation/deallocation of scalar objects of valid types
+    tstScalarAllocByType(S8,10);
+    tstScalarAllocByType(U8,12);
+    tstScalarAllocByType(S16,14);
+    tstScalarAllocByType(U16,16);
+    tstScalarAllocByType(S32,18);
+    tstScalarAllocByType(U32,20);
+    tstScalarAllocByType(S64,22);
+    tstScalarAllocByType(U64,24);
+    tstScalarAllocByType(F32,26);
+    tstScalarAllocByType(F64,28);
+    tstScalarAllocByType(C32,30);
+    tstScalarAllocByType(C64,32);
+
+    // Verify return is null for invalid scalar type
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    scalar = psScalarAlloc(true,PS_TYPE_BOOL);
+    if(scalar != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psScalarAlloc did not return null for invalid type");
+        return 5;
+    }
+
+    return 0;
+}
+
+psS32 testScalarCopy(void)
+{
+    psScalar*  scalarOrig;
+    psScalar*  scalarCopy;
+
+    psLogMsg(__func__,PS_LOG_INFO,"psScalarCopy shall copy scalar objects");
+
+    // Verify the proper copying of scalar objects for all valid types
+    tstScalarCopyByType(S8,100);
+    tstScalarCopyByType(U8,110);
+    tstScalarCopyByType(S16,120);
+    tstScalarCopyByType(U16,130);
+    tstScalarCopyByType(S32,140);
+    tstScalarCopyByType(U32,150);
+    tstScalarCopyByType(S64,160);
+    tstScalarCopyByType(U64,170);
+    tstScalarCopyByType(F32,180);
+    tstScalarCopyByType(F64,190);
+    tstScalarCopyByType(C32,200);
+    tstScalarCopyByType(C64,210);
+
+    // Verify the return is null for invalid scalar type in the original
+    scalarOrig = psScalarAlloc(0,PS_TYPE_S8);
+    scalarOrig->type.type = PS_TYPE_BOOL;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    scalarCopy = psScalarCopy(scalarOrig);
+    if(scalarCopy != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"psScalarCopy did not return NULL for invalid type");
+        return 6;
+    }
+    psFree(scalarOrig);
+
+    // Verify the return is null for null original scalar value
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    scalarCopy = psScalarCopy(NULL);
+    if(scalarCopy != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psScalarCopy did not return NULL for NULL argument");
+        return 7;
+    }
+
+    return 0;
+}
+
Index: /trunk/psLib/test/mathtypes/tst_psVector.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psVector.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psVector.c	(revision 4547)
@@ -0,0 +1,271 @@
+/** @file  tst_psVector.c
+ *
+ *  @brief Test driver for psVector integer functions
+ *
+ *  This test driver contains the following tests for psVector test point 1:
+ *     A)  Create S32 vector
+ *     B)  Add data to S32 vector
+ *     C)  Reallocate S32 vector bigger
+ *     D)  Reallocate S32 vector smaller
+ *     E)  Free S32 vector
+ *     F)  Attempt to create a S32 vector with zero size
+ *     G)  Attempt to realloc a null S32 vector
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+static psS32 testVectorAlloc(void);
+static psS32 testVectorRealloc(void);
+static psS32 testVectorExtend(void);
+
+testDescription tests[] = {
+                              {testVectorAlloc,-1,"psVectorAlloc",0,false},
+                              {testVectorRealloc,-2,"psVectorRealloc",0,false},
+                              {testVectorExtend,-3,"psVectorExtend",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if ( ! runTestSuite(stderr,"psVector",tests,argc,argv) ) {
+        return 1;
+    }
+    return 0;
+}
+
+psS32 testVectorAlloc(void)
+{
+    psVector *psVec = psVectorAlloc(5, PS_TYPE_S32);
+
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 1;
+    }
+    if (psVec->nalloc != 5) {
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 1;
+    }
+    if (psVec->n != psVec->nalloc) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 2;
+    }
+
+    if (psVec->type.type != PS_TYPE_S32) {
+        fprintf(stderr,"Vector type = %d\n", psVec->type.type);
+        return 3;
+    }
+    if (psVec->type.dimen != PS_DIMEN_VECTOR) {
+        fprintf(stderr,"Vector dimen = %d\n", psVec->type.dimen);
+        return 4;
+    }
+
+    // Test B - Add data to integer vector
+    for(psS32 i = 0; i < 5; i++) {
+        psVec->data.S32[i] = i*10;
+    }
+
+    psVector* vecZero = psVectorAlloc(0, PS_TYPE_S32);
+    if(vecZero == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 5;
+    }
+    if (vecZero->nalloc != 0) {
+        fprintf(stderr,"Vector size = %ld\n", vecZero->nalloc);
+        return 6;
+    }
+    if (vecZero->n != vecZero->nalloc) {
+        fprintf(stderr,"Vector population = %ld\n", vecZero->n);
+        return 7;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
+    psVector* vecBogus = psVectorAlloc(10, 0);
+    if (vecBogus != NULL) {
+        fprintf(stderr,"Huh!  bogus type generated a psVector?");
+        return 20;
+    }
+
+    psFree(psVec);
+    psFree(vecZero);
+
+    return 0;
+}
+
+psS32 testVectorRealloc(void)
+{
+    // create new psVector
+    psVector *psVec = psVectorAlloc(5, PS_TYPE_S32);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 30;
+    }
+    for(psS32 i = 0; i < 5; i++) {
+        psVec->data.S32[i] = i*10;
+    }
+
+    // Test C - Reallocate S32 vector bigger
+    psVec = psVectorRealloc(psVec,10);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 1;
+    }
+    if (psVec->nalloc != 10) {
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 1;
+    }
+    if (psVec->n != 5) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 2;
+    }
+
+    if (psVec->type.type != PS_TYPE_S32) {
+        fprintf(stderr,"Vector type = %d\n", psVec->type.type);
+        return 3;
+    }
+    if (psVec->type.dimen != PS_DIMEN_VECTOR) {
+        fprintf(stderr,"Vector dimen = %d\n", psVec->type.dimen);
+        return 4;
+    }
+
+    for(psS32 i = 5; i < 10; i++) {
+        psVec->data.S32[i] = i*10;
+        psVec->n++;
+    }
+
+    for(psS32 i = 0; i < 10; i++) {
+        if (psVec->data.S32[i] != i*10) {
+            fprintf(stderr,"Elem %d = %d, expected %d\n", i, psVec->data.S32[i], i*10);
+            return 5;
+        }
+    }
+
+    // Test D - Reallocate S32 vector smaller
+    psVec = psVectorRealloc(psVec,3);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 9;
+    }
+    if (psVec->nalloc != 3) {
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 10;
+    }
+    if (psVec->n != 3) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 11;
+    }
+
+    for(psS32 i = 0; i < 3; i++) {
+        if (psVec->data.S32[i] != i*10) {
+            fprintf(stderr,"Elem %d = %d, expected %d\n", i, psVec->data.S32[i], i*10);
+            return 12;
+        }
+    }
+
+    psVec = psVectorRealloc(psVec,0);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 20;
+    }
+    if (psVec->nalloc != 0) {
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 21;
+    }
+    if (psVec->n != 0) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 22;
+    }
+
+    psVector* vecBogus = psVectorRealloc(NULL, 6);
+    if (vecBogus != NULL) {
+        fprintf(stderr,"Huh!  bogus type generated a psVector?");
+        return 25;
+    }
+
+    // Test E - Free S32 vector
+    psFree(psVec);
+
+    return 0;
+}
+
+psS32 testVectorExtend(void)
+{
+    // create new psVector
+    psVector *psVec = psVectorAlloc(5, PS_TYPE_S32);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 1;
+    }
+
+    psVec->n = 0;
+
+    psVec = psVectorExtend(psVec, 0, 2);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 2;
+    }
+    if (psVec->nalloc != 5) { // no growth should occur
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 3;
+    }
+    if (psVec->n != 2) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 4;
+    }
+
+    psVec = psVectorExtend(psVec, 0, 2);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 10;
+    }
+    if (psVec->nalloc != 15) { // growth should occur
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 11;
+    }
+    if (psVec->n != 4) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 12;
+    }
+
+    psVec = psVectorExtend(psVec, 0, -2);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 20;
+    }
+    if (psVec->nalloc != 15) { // no growth
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 21;
+    }
+    if (psVec->n != 2) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 22;
+    }
+
+    psVec = psVectorExtend(psVec, 0, -20);
+    if (psVec == NULL) {
+        fprintf(stderr,"ERROR: Return is NULL\n");
+        return 30;
+    }
+    if (psVec->nalloc != 15) { // no growth
+        fprintf(stderr,"Vector size = %ld\n", psVec->nalloc);
+        return 31;
+    }
+    if (psVec->n != 0) {
+        fprintf(stderr,"Vector population = %ld\n", psVec->n);
+        return 32;
+    }
+
+    psFree(psVec);
+
+    return 0;
+}
Index: /trunk/psLib/test/mathtypes/tst_psVectorSort_01.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psVectorSort_01.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psVectorSort_01.c	(revision 4547)
@@ -0,0 +1,182 @@
+/** @file  tst_psVectorSort_01.c
+ *
+ *  @brief Test driver for psVectorSort functions
+ *
+ *  This test driver contains the following tests for psVectorSort test point 1:
+ *     A)  Sort input vector to output vector for all types
+ *     B)  Sort input float vector into itself
+ *     C)  Attempt to sort vector with invalid type (i.e. PS_TYPE_BOOL)
+ *     D)  Sort input vector with zero items
+ *     C)  Free float vectors
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define tstVectorSortByType(datatype,value)   \
+in = psVectorAlloc(7,PS_TYPE_##datatype); \
+in->n = 7;  \
+out = psVectorAlloc(7,PS_TYPE_##datatype); \
+out->n = 7;  \
+in->data.datatype[0] = 7+value; \
+in->data.datatype[1] = 9+value; \
+in->data.datatype[2] = 3+value; \
+in->data.datatype[3] = 1+value; \
+in->data.datatype[4] = 5+value; \
+in->data.datatype[5] = 5+value; \
+in->data.datatype[6] = 0+value; \
+tempVec = out; \
+out = psVectorSort(out, in); \
+if(tempVec != out) {  \
+    psError(PS_ERR_UNKNOWN,true,"Return value not equal to orignal output argument passed to function"); \
+    return 5; \
+} \
+if(out->data.datatype[0] != in->data.datatype[6]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[0] type %s",#datatype); \
+    return 10; \
+} \
+if(out->data.datatype[1] != in->data.datatype[3]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[1] type %s",#datatype); \
+    return 20; \
+} \
+if(out->data.datatype[2] != in->data.datatype[2]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[2] type %s",#datatype); \
+    return 30; \
+} \
+if(out->data.datatype[3] != in->data.datatype[4]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[3] type %s",#datatype); \
+    return 40; \
+} \
+if(out->data.datatype[4] != in->data.datatype[5]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[4] %s",#datatype); \
+    return 50; \
+} \
+if(out->data.datatype[5] != in->data.datatype[0]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[5] %s",#datatype); \
+    return 60; \
+} \
+if(out->data.datatype[6] != in->data.datatype[1]) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper sort out[6] %s",#datatype); \
+    return 70; \
+} \
+psFree(in); \
+psFree(out);
+
+
+
+psS32 main(psS32 argc,
+           char* argv[])
+{
+    psVector *in = NULL;
+    psVector *out = NULL;
+    psVector *tempVec = NULL;
+
+    // Test A - Verify the sort for all supported types
+    printPositiveTestHeader(stdout,"psVectorSort","Sort all types");
+    tstVectorSortByType(S8,0);
+    tstVectorSortByType(S16,1);
+    tstVectorSortByType(S32,2);
+    tstVectorSortByType(S64,3);
+    tstVectorSortByType(U8,4);
+    tstVectorSortByType(U16,5);
+    tstVectorSortByType(U32,6);
+    tstVectorSortByType(U64,7);
+    tstVectorSortByType(F32,8);
+    tstVectorSortByType(F64,9);
+    printFooter(stdout,"psVectorSort","Sort all types",true);
+
+    // Test B - Sort input vector into itself
+    printPositiveTestHeader(stdout,"psVectorSort", "Sort input float vector into itself");
+    in = psVectorAlloc(7, PS_TYPE_F32);
+    in->n = 7;
+    in->data.F32[0] = 0.7f;
+    in->data.F32[1] = 0.9f;
+    in->data.F32[2] = 0.3f;
+    in->data.F32[3] = 0.1f;
+    in->data.F32[4] = 0.5f;
+    in->data.F32[5] = 0.5f;
+    in->data.F32[6] = -2.0f;
+    in = psVectorSort(in, in);
+    if(in->data.F32[0] != -2.0f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[0]");
+        return 100;
+    }
+    if(in->data.F32[1] != 0.1f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[1]");
+        return 200;
+    }
+    if(in->data.F32[2] != 0.3f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[2]");
+        return 300;
+    }
+    if(in->data.F32[3] != 0.5f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[3]");
+        return 400;
+    }
+    if(in->data.F32[4] != 0.5f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[4]");
+        return 500;
+    }
+    if(in->data.F32[5] != 0.7f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[5]");
+        return 600;
+    }
+    if(in->data.F32[6] != 0.9f) {
+        psError(PS_ERR_UNKNOWN,true,"Improper self sort in[6]");
+        return 700;
+    }
+    printFooter(stdout, "psVectorSort", "Sort input float vector into itself", true);
+
+    // Test C - Attempt to sort vector with invalid type
+    printPositiveTestHeader(stdout,"psVectorSort","Invalid vector type");
+    in->type.type = PS_TYPE_BOOL;
+    out = psVectorAlloc(7,PS_TYPE_F32);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error messgae");
+    tempVec = psVectorSort(out,in);
+    if(tempVec != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL on error or didn't error?");
+        return 33;
+    }
+    printFooter(stdout,"psVectorSort","Invalid vector type",true);
+
+    // Test D - Sort vector with zero elements
+    printPositiveTestHeader(stdout,"psVectorSort","Sort zero element vector");
+    out = psVectorAlloc(7,PS_TYPE_F32);
+    tempVec = out;
+    in->n = 0;
+    out = psVectorSort(out,in);
+    if(tempVec != out) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return the specified output vector");
+        return 44;
+    }
+    if(out->n != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not proper set the number of elements to zero");
+        return 55;
+    }
+    printFooter(stdout,"psVectorSort","Sort zero element vector",true);
+
+
+    // Test D - Free float vectors
+    printPositiveTestHeader(stdout,"psVectorSort", "Free float vectors");
+    psFree(in);
+    psFree(out);
+    if ( psMemCheckLeaks(0, NULL, stdout, false)) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
+        return 10;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psVectorSort", "Free float vectors", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/mathtypes/tst_psVectorSort_02.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psVectorSort_02.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psVectorSort_02.c	(revision 4547)
@@ -0,0 +1,179 @@
+/** @file  tst_psVectorSort_02.c
+ *
+ *  @brief Test driver for psVectorSort functions
+ *
+ *  This test driver contains the following tests for psVectorSort test point 2:
+ *     A)  Create vectors
+ *     B)  Sort integer vector of indices based on pre-sort order of floating point vector
+ *     C)  Attempt to sort with null input vector
+ *     D)  Sort with output vector which needs to be resized
+ *     E)  Sort input vector with zero elements
+ *     F)  Attempt to sort input vector with invalid type
+ *     G)  Free vectors
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define tstVectorSortIndexByType(datatype,value) \
+in = psVectorAlloc( 5, PS_TYPE_##datatype ); \
+in->n = 5; \
+in->data.datatype[0] = 7+value; \
+in->data.datatype[1] = 9+value; \
+in->data.datatype[2] = 5+value; \
+in->data.datatype[3] = 1+value; \
+in->data.datatype[4] = 5+value; \
+out = psVectorSortIndex(out,in); \
+if(out->type.type != PS_TYPE_U32) { \
+    psError(PS_ERR_UNKNOWN,true,"Output vector is not of type PS_TYPE_U32"); \
+    return 10; \
+} \
+if(out->data.U32[0] != 3 ) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[0] = %ld",out->data.U32[0]); \
+    return 20; \
+} \
+if(out->data.U32[1] != 2 ) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[1] = %ld",out->data.U32[1]); \
+    return 30; \
+} \
+if(out->data.U32[2] != 4 ) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[2] = %ld",out->data.U32[2]); \
+    return 40; \
+} \
+if(out->data.U32[3] != 0 ) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[3] = %ld",out->data.U32[3]); \
+    return 50; \
+} \
+if(out->data.U32[4] != 1 ) { \
+    psError(PS_ERR_UNKNOWN,true,"Improper index sort out[4] = %ld",out->data.U32[4]); \
+    return 60; \
+} \
+psFree(in);
+
+psS32 main(psS32 argc,
+           char* argv[])
+{
+    psVector *in = NULL;
+    psVector *out = NULL;
+    psVector *tempVect = NULL;
+
+    // Test A - Sort vectors by index for all types
+    printPositiveTestHeader(stdout,"psVectorSortIndex","Sort by index for all types");
+    tstVectorSortIndexByType(S8,0)
+    tstVectorSortIndexByType(U8,1)
+    tstVectorSortIndexByType(S16,2)
+    tstVectorSortIndexByType(U16,3)
+    tstVectorSortIndexByType(S32,4)
+    tstVectorSortIndexByType(U32,5)
+    tstVectorSortIndexByType(S64,6)
+    tstVectorSortIndexByType(U64,7)
+    tstVectorSortIndexByType(F32,8)
+    tstVectorSortIndexByType(F64,9)
+    psFree(out);
+    printFooter(stdout,"psVectorSortIndex","Sort by index for all types",true);
+
+    // Test  C  Attempt to sort with null input vector
+    printPositiveTestHeader(stdout,"psVectorSortIndex","Attempt to sort with NULL input");
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    in = NULL;
+    out = psVectorAlloc(5,PS_TYPE_U32);
+    out = psVectorSortIndex(out,in);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input specified");
+        return 111;
+    }
+    printFooter(stdout,"psVectorSortIndex","Attempt to sort with NULL input",true);
+
+    // Test  D  Sort with output vector which needs to be resized
+    printPositiveTestHeader(stdout,"psVectorSortIndex","Sort with resize output vector");
+    in = psVectorAlloc(5,PS_TYPE_U8);
+    for(psS32 m=0; m<5; m++) {
+        in->data.U8[m]= 20-m;
+    }
+    out = psVectorAlloc(3,PS_TYPE_U32);
+    out = psVectorSortIndex(out,in);
+    if(out->n != 5) {
+        psError(PS_ERR_UNKNOWN,true,"Did not properly resize output vector");
+        return 112;
+    }
+    if(out->data.U32[0] != 4) {
+        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[0] = %d",out->data.U32[0]);
+        return 113;
+    }
+    if(out->data.U32[1] != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[1] = %d",out->data.U32[1]);
+        return 114;
+    }
+    if(out->data.U32[2] != 2) {
+        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[2] = %d",out->data.U32[2]);
+        return 115;
+    }
+    if(out->data.U32[3] != 1) {
+        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[3] = %d",out->data.U32[3]);
+        return 116;
+    }
+    if(out->data.U32[4] != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not properly sort index out[4] = %d",out->data.U32[4]);
+        return 117;
+    }
+    psFree(in);
+    psFree(out);
+    printFooter(stdout,"psVectorSortIndex","Sort with resize output vector",true);
+
+    // Test E - Sort input vector with zero elements
+    printPositiveTestHeader(stdout,"psVectorSortIndex","Sort with input vector with zero elements");
+    in = psVectorAlloc(5,PS_TYPE_U8);
+    out = psVectorAlloc(5,PS_TYPE_U32);
+    in->n = 0;
+    out->n = 0;
+    tempVect = out;
+    out = psVectorSortIndex(out,in);
+    if ( out != tempVect ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return the same output vector");
+        return 118;
+    }
+    in->n=5;
+    out->n=5;
+    psFree(out);
+    psFree(in);
+    printFooter(stdout,"psVectorSortIndex","Sort with input vector with zero elements",true);
+
+    // Test F - Attempt to sort input vector with invalid type
+    printPositiveTestHeader(stdout,"psVectorSortIndex","Attempt to sort with invalid type");
+    in = psVectorAlloc(5,PS_TYPE_U8);
+    out = psVectorAlloc(5,PS_TYPE_U32);
+    tempVect = out;
+    in->type.type = PS_TYPE_BOOL;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate two error messages(psVectorSort,psVectorSortIndex)");
+    out = psVectorSortIndex(out,in);
+    if( out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL on error or didn't error?");
+        return 119;
+    }
+    in->type.type = PS_TYPE_U8;
+    psFree(in);
+    printFooter(stdout,"psVectorSortIndex","Attempt to sort with invalid type",true);
+
+    // Test G - Free vectors
+    printPositiveTestHeader(stdout,"psVectorSortIndex", "Free vectors");
+    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
+    if(nLeaks) {
+        printf("ERROR: Found %d memory leaks\n", nLeaks);
+        return 222;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+        return 333;
+    }
+    printFooter(stdout, "psVectorSort", "Free vectors", true);
+
+}
Index: /trunk/psLib/test/mathtypes/tst_psVectorSort_03.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psVectorSort_03.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psVectorSort_03.c	(revision 4547)
@@ -0,0 +1,84 @@
+/** @file  tst_psVectorSort_03.c
+ *
+ *  @brief Test driver for psVectorSort functions
+ *
+ *  This test driver contains the following tests for psVectorSort test point 3:
+ *     A)  Create float vectors of different sizes
+ *     B)  Attempt to sort vectors...should get errors
+ *     C)  Create float vector and double vector
+ *     D)  Attempt to sort vectors...should get errors
+ *     E)  Free float, double vectors
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+psS32 main(psS32 argc,
+           char* argv[])
+{
+    psVector *in = NULL;
+    psVector *out = NULL;
+    psVector *in2 = NULL;
+    psVector *out2 = NULL;
+
+    // Test A - Create float vectors
+    printPositiveTestHeader(stdout,"psVectorSort", "Create float vectors of different sizes");
+    in = psVectorAlloc(5, PS_TYPE_F32);
+    in->n = 5;
+    out = psVectorAlloc(6, PS_TYPE_F32);
+    out->n = 6;
+    in->n = 5;
+    for(psS32 i=0; i<5; i++) {
+        printf("arr[%d] = %f\n", i, in->data.F32[i]);
+    }
+    printFooter(stdout, "psVectorSort", "Create float vectors of different sizes", true);
+
+
+    // Test B - Sort input float vector and put results into output float vector
+    printNegativeTestHeader(stdout,"psVectorSort", "Sort float vector",
+                            "Input and output vector sizes are not equal", 0);
+    out = psVectorSort(out, in);
+    printFooter(stdout, "psVectorSort", "Sort float vector", true);
+
+    // Test C - Create float vector and double vector
+    printPositiveTestHeader(stdout,"psVectorSort","Create float & double vectors of same size");
+    in2 = psVectorAlloc(5, PS_TYPE_F32);
+    in2->n = 5;
+    out2 = psVectorAlloc(5, PS_TYPE_F64);
+    out2->n = 5;
+    for(psS32 j=0; j<5; j++) {
+        printf("vec[%d] = %f\n", j, in2->data.F32[j]);
+    }
+    printFooter(stdout, "psVectorSort", "Create float and double vectors same size", true);
+
+    // Test D - Attempt to sort vectors with output of different type should create error
+    printNegativeTestHeader(stdout,"psVectorSort", "Sort F32/F64 vector",
+                            "Input and output vector different types", 0);
+    out2 = psVectorSort(out2, in2);
+    printFooter(stdout, "psVectorSort", "Sort float vector", true);
+
+    // Test C - Free float vectors
+    printPositiveTestHeader(stdout,"psVectorSort", "Free float vectors");
+    psFree(in);
+    psFree(in2);
+    psFree(out);
+    psFree(out2);
+    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
+    if(nLeaks) {
+        printf("ERROR: Found %d memory leaks\n", nLeaks);
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psVectorSort", "Free float vectors", true);
+
+}
Index: /trunk/psLib/test/mathtypes/tst_psVectorSort_04.c
===================================================================
--- /trunk/psLib/test/mathtypes/tst_psVectorSort_04.c	(revision 4547)
+++ /trunk/psLib/test/mathtypes/tst_psVectorSort_04.c	(revision 4547)
@@ -0,0 +1,47 @@
+/** @file  tst_psVectorSort_04.c
+ *
+ *  @brief Test driver for psVectorSort functions
+ *
+ *  This test driver contains the following tests for psVectorSort test point 4:
+ *     A)  Attempt to sort with null input vector
+ *     B)  Free vectors
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:00 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+psS32 main(psS32 argc,
+           char* argv[])
+{
+    psVector *badIn = NULL;
+    psVector *goodOut = psVectorAlloc(5, PS_TYPE_F32);
+
+    // Test A - Attempt to sort with null input vector
+    printNegativeTestHeader(stdout,"psVectorSort", "Attempt to sort with null input vector",
+                            "Null input vector", 0);
+    goodOut = psVectorSort(goodOut, badIn);
+    printFooter(stdout, "psVectorSort", "Attempt to sort with null input vector", true);
+
+    // Test B - Free vectors
+    printPositiveTestHeader(stdout, "psVectorSort", "Free vectors");
+    psFree(goodOut);
+    psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);
+    if(nLeaks) {
+        printf("ERROR: Found %d memory blocks\n", nLeaks);
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psVectorSort", "Free arays", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/mathtypes/verified/tst_psImage.stderr
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psImage.stderr	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psImage.stderr	(revision 4547)
@@ -0,0 +1,98 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImage.c                                              *
+*            TestPoint: psImage{psImageAlloc}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    #546 - psImageAlloc shall allocate memory for a psImage structure
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 101h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 102h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 104h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 108h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 301h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 302h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 304h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 308h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 404h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 408h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 808h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Testing psImage with type 810h
+<DATE><TIME>|<HOST>|I|testImageAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psImageAlloc (FILE:LINENO)
+    Specified number of rows (0) or columns (0) is invalid.
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [50:99,70:19], is invalid or outside input psImage's boundaries, [0:99,0:99].
+<DATE><TIME>|<HOST>|E|imageSubset (FILE:LINENO)
+    Specified subset range, [70:19,90:39], is invalid or outside input psImage's boundaries, [0:99,0:99].
+
+---> TESTPOINT PASSED (psImage{psImageAlloc} | tst_psImage.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImage.c                                              *
+*            TestPoint: psImage{psRegionSet}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psRegionFromString (FILE:LINENO)
+    Specified subsection string, '[1:2,3:]', can not be parsed.  Must be in the form '[x1:x2,y1:y2]'.
+
+---> TESTPOINT PASSED (psImage{psRegionSet} | tst_psImage.c)
+
Index: /trunk/psLib/test/mathtypes/verified/tst_psScalar.stderr
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psScalar.stderr	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psScalar.stderr	(revision 4547)
@@ -0,0 +1,34 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psScalar.c                                             *
+*            TestPoint: psScalar{psScalarAlloc}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testScalarAlloc
+    psScalarAlloc shall create scalar data objects
+<DATE><TIME>|<HOST>|I|testScalarAlloc
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psScalarAlloc (FILE:LINENO)
+    Specified datatype (4865) is unsupported by psScalar.
+
+---> TESTPOINT PASSED (psScalar{psScalarAlloc} | tst_psScalar.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psScalar.c                                             *
+*            TestPoint: psScalar{psScalarCopy}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testScalarCopy
+    psScalarCopy shall copy scalar objects
+<DATE><TIME>|<HOST>|I|testScalarCopy
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psScalarCopy (FILE:LINENO)
+    Specified datatype (4865) is unsupported by psScalar.
+<DATE><TIME>|<HOST>|I|testScalarCopy
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psScalarCopy (FILE:LINENO)
+    Can not copy a NULL psScalar.
+
+---> TESTPOINT PASSED (psScalar{psScalarCopy} | tst_psScalar.c)
+
Index: /trunk/psLib/test/mathtypes/verified/tst_psVector.stderr
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVector.stderr	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVector.stderr	(revision 4547)
@@ -0,0 +1,33 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVector.c                                             *
+*            TestPoint: psVector{psVectorAlloc}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorAlloc
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psVectorAlloc (FILE:LINENO)
+    Input psVector is an unsupported type (0x0).
+
+---> TESTPOINT PASSED (psVector{psVectorAlloc} | tst_psVector.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVector.c                                             *
+*            TestPoint: psVector{psVectorRealloc}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psVectorRealloc (FILE:LINENO)
+    psVectorRealloc must a given a non-NULL psVector to resize.  Desired datatype unknown.
+
+---> TESTPOINT PASSED (psVector{psVectorRealloc} | tst_psVector.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVector.c                                             *
+*            TestPoint: psVector{psVectorExtend}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVector{psVectorExtend} | tst_psVector.c)
+
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_01.stderr
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_01.stderr	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_01.stderr	(revision 4547)
@@ -0,0 +1,4 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error messgae
+<DATE><TIME>|<HOST>|E|psVectorSort (FILE:LINENO)
+    Input psVector is an unsupported type (0x1301).
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_01.stdout
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_01.stdout	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_01.stdout	(revision 4547)
@@ -0,0 +1,45 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_01.c                                      *
+*            TestPoint: psVectorSort{Sort all types}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Sort all types} | tst_psVectorSort_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_01.c                                      *
+*            TestPoint: psVectorSort{Sort input float vector into itself}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Sort input float vector into itself} | tst_psVectorSort_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_01.c                                      *
+*            TestPoint: psVectorSort{Invalid vector type}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Invalid vector type} | tst_psVectorSort_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_01.c                                      *
+*            TestPoint: psVectorSort{Sort zero element vector}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Sort zero element vector} | tst_psVectorSort_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_01.c                                      *
+*            TestPoint: psVectorSort{Free float vectors}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Free float vectors} | tst_psVectorSort_01.c)
+
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_02.stderr
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_02.stderr	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_02.stderr	(revision 4547)
@@ -0,0 +1,8 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psVectorSortIndex (FILE:LINENO)
+    psVectorSort can not sort a NULL psVector.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate two error messages(psVectorSort,psVectorSortIndex)
+<DATE><TIME>|<HOST>|E|psVectorSortIndex (FILE:LINENO)
+    Input psVector is an unsupported type (0x1301).
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_02.stdout
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_02.stdout	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_02.stdout	(revision 4547)
@@ -0,0 +1,54 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_02.c                                      *
+*            TestPoint: psVectorSortIndex{Sort by index for all types}             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSortIndex{Sort by index for all types} | tst_psVectorSort_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_02.c                                      *
+*            TestPoint: psVectorSortIndex{Attempt to sort with NULL input}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSortIndex{Attempt to sort with NULL input} | tst_psVectorSort_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_02.c                                      *
+*            TestPoint: psVectorSortIndex{Sort with resize output vector}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSortIndex{Sort with resize output vector} | tst_psVectorSort_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_02.c                                      *
+*            TestPoint: psVectorSortIndex{Sort with input vector with zero elements} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSortIndex{Sort with input vector with zero elements} | tst_psVectorSort_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_02.c                                      *
+*            TestPoint: psVectorSortIndex{Attempt to sort with invalid type}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSortIndex{Attempt to sort with invalid type} | tst_psVectorSort_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_02.c                                      *
+*            TestPoint: psVectorSortIndex{Free vectors}                            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Free vectors} | tst_psVectorSort_02.c)
+
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_03.stdout
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_03.stdout	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_03.stdout	(revision 4547)
@@ -0,0 +1,59 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_03.c                                      *
+*            TestPoint: psVectorSort{Create float vectors of different sizes}      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+arr[0] = 0.000000
+arr[1] = 0.000000
+arr[2] = 0.000000
+arr[3] = 0.000000
+arr[4] = 0.000000
+
+---> TESTPOINT PASSED (psVectorSort{Create float vectors of different sizes} | tst_psVectorSort_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_03.c                                      *
+*            TestPoint: psVectorSort{Sort float vector}                            *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Input and output vector sizes are not equal                *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Sort float vector} | tst_psVectorSort_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_03.c                                      *
+*            TestPoint: psVectorSort{Create float & double vectors of same size}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+vec[0] = 0.000000
+vec[1] = 0.000000
+vec[2] = 0.000000
+vec[3] = 0.000000
+vec[4] = 0.000000
+
+---> TESTPOINT PASSED (psVectorSort{Create float and double vectors same size} | tst_psVectorSort_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_03.c                                      *
+*            TestPoint: psVectorSort{Sort F32/F64 vector}                          *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Input and output vector different types                    *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Sort float vector} | tst_psVectorSort_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_03.c                                      *
+*            TestPoint: psVectorSort{Free float vectors}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Free float vectors} | tst_psVectorSort_03.c)
+
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_04.stderr
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_04.stderr	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_04.stderr	(revision 4547)
@@ -0,0 +1,2 @@
+<DATE><TIME>|<HOST>|E|psVectorSort (FILE:LINENO)
+    psVectorSort can not sort a NULL psVector.
Index: /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_04.stdout
===================================================================
--- /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_04.stdout	(revision 4547)
+++ /trunk/psLib/test/mathtypes/verified/tst_psVectorSort_04.stdout	(revision 4547)
@@ -0,0 +1,20 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_04.c                                      *
+*            TestPoint: psVectorSort{Attempt to sort with null input vector}       *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null input vector                                          *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Attempt to sort with null input vector} | tst_psVectorSort_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psVectorSort_04.c                                      *
+*            TestPoint: psVectorSort{Free vectors}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psVectorSort{Free arays} | tst_psVectorSort_04.c)
+
Index: /trunk/psLib/test/sys/Makefile.am
===================================================================
--- /trunk/psLib/test/sys/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/sys/Makefile.am	(revision 4547)
@@ -0,0 +1,34 @@
+#Makefile for mathtypes tests
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psAbort \
+	tst_psConfigure \
+	tst_psError \
+	tst_psLogMsg \
+	tst_psMemory \
+	tst_psString \
+	tst_psTrace
+
+tst_psImage_SOURCES =  tst_psImage.c
+tst_psScalar_SOURCES =  tst_psScalar.c
+tst_psVector_SOURCES =  tst_psVector.c
+tst_psVectorSort_01_SOURCES =  tst_psVectorSort_01.c
+tst_psVectorSort_02_SOURCES =  tst_psVectorSort_02.c
+tst_psVectorSort_03_SOURCES =  tst_psVectorSort_03.c
+tst_psVectorSort_04_SOURCES =  tst_psVectorSort_04.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA)
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
Index: /trunk/psLib/test/sys/tst_psAbort.c
===================================================================
--- /trunk/psLib/test/sys/tst_psAbort.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psAbort.c	(revision 4547)
@@ -0,0 +1,76 @@
+/** @file  atst_psAbort_01.c
+ *
+ *  @brief Test driver for psAbort function
+ *
+ *  This test drivers contains the following test points for psAbort
+ *     1) Multiple type values in abort message
+ *
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testAbort00(void);
+static psS32 testAbort01(void);
+static psS32 testAbort02(void);
+
+testDescription tests[] = {
+                              {testAbort00, 0, "Multiple type values in abort message", -6, false},
+                              {testAbort01, 1, "String values in abort message", -6, false},
+                              {testAbort02, 2, "Empty strings in abort message", -6, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psAbort", tests, argc, argv ) );
+}
+
+static psS32 testAbort00(void)
+{
+    psS32   intval = 1;
+    psS64  longval = 2;
+    float floatval = 3.01;
+    char  charval = 'E';
+    char  *stringval = "E R R O R";
+
+    // Test point #1 Multiple type values placed in the error string
+    psAbort(__func__,
+            "ALL TYPES intval = %d longval = %lld floatval = %f charval = %c strval = %s",
+            intval, longval, floatval, charval, stringval );
+
+    // Program execution should have ended before this statement but if it
+    // does not return a zero since the expected return value of this test
+    // is a non-zero value
+    return 0;
+}
+
+static psS32 testAbort01(void)
+{
+    // Test point #2 String values in abort message
+    psAbort(PS_STRING(__LINE__), "NO_VALUES");
+
+    // Program execution should have ended before this statement but if it
+    // does not return a zero since the expected return value of this test
+    // is a non-zero value
+    return 0;
+}
+
+static psS32 testAbort02(void)
+{
+    // Test point #2 String values in abort message
+    psAbort("","");
+
+    // Program execution should have ended before this statement but if it
+    // does not return a zero since the expected return value of this test
+    // is a non-zero value
+    return 0;
+}
Index: /trunk/psLib/test/sys/tst_psConfigure.c
===================================================================
--- /trunk/psLib/test/sys/tst_psConfigure.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psConfigure.c	(revision 4547)
@@ -0,0 +1,52 @@
+/** @file  tst_psConfigure.c
+ *
+ *  @brief Test driver for psconfigure functions
+ *
+ *  This test driver contains the following test points for psConfigure
+ *  functions.
+ *    1) Return current psLib version
+ *
+ *  Return:   Number of test points which failed
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+
+static psS32 psLibVersion00(void);
+
+
+testDescription tests[] = {
+                              {psLibVersion00, 0, "Return current psLib version", 0, false},
+                              {NULL}
+                          };
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    return(!runTestSuite( stderr, "psConfigure", tests, argc, argv));
+}
+
+
+static psS32 psLibVersion00(void)
+{
+    char *stringVal = NULL;
+
+    stringVal = psLibVersion();
+    psLogMsg(__func__,PS_LOG_INFO,"Current psLib version is: %s", stringVal);
+    psFree(stringVal);
+
+
+    return 0;
+}
+
Index: /trunk/psLib/test/sys/tst_psError.c
===================================================================
--- /trunk/psLib/test/sys/tst_psError.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psError.c	(revision 4547)
@@ -0,0 +1,393 @@
+/** @file  tst_psError.c
+ *
+ *  @brief Test driver for psError function
+ *
+ *  This test driver contains the following test points for psError
+ *     testError00 - psError()                          (Testpoint #486)
+ *     testError01 - psErrorMsg(), psErrorStackPrint()  (Testpoint #725)
+ *     testError02 - psErrorStackPrintV()               (Testpoint #726)
+ *     testError03 - psErrorGet(), psErrorLast()        (Testpoint #727)
+ *     testError04 - psErrorClear()                     (Testpoint #728)
+ *     testError05 - psErrorCodeString()                (Testpoint #729)
+ *
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testError00(void);
+static psS32 testError01(void);
+static psS32 testError02(void);
+static psS32 testError03(void);
+static psS32 testError04(void);
+static psS32 testError05(void);
+static psS32 testErrorRegister(void);
+
+// Function used in testError02 to verify the psErrorStackPrintV function
+static void myErrorStackPrint(FILE *fd,
+                              const char *fmt,
+                              ...)
+{
+    va_list ap;
+
+    // Test whether psErrorStackPrintV() accept a va_list for output variables
+    va_start(ap, fmt);
+    psErrorStackPrintV(fd, fmt, ap);
+    va_end(ap);
+}
+
+testDescription tests[] = {
+                              {testError00, 486, "psError()", 0, false},
+                              {testError01, 725, "psErrorMsg(),psErrorStackPrint()", 0, false},
+                              {testError02, 726, "psErrorStackPrintV()", 0, false},
+                              {testError03, 727, "psErrorGet(),psErrorLast()", 0, false},
+                              {testError04, 728, "psErrorClear()", 0, false},
+                              {testError05, 729, "psErrorCodeString()", 0, false},
+                              {testErrorRegister, 751, "psErrorRegister()", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( !runTestSuite(stderr, "psError", tests, argc, argv) );
+}
+
+static psS32 testError05(void)
+{
+    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
+
+    // Verify the return value of psErrorCodeString
+    psLogMsg("tst_psError05", PS_LOG_INFO, psErrorCodeString(code));
+
+    // Verify the return value of psErrorCodeString if code is negative
+    if( psErrorCodeString(-1) != NULL) {
+        psLogMsg("tst_psError05", PS_LOG_INFO, "Failed error string with neg. code");
+        return 40;
+    }
+
+    return 0;
+}
+
+static psS32 testError04(void)
+{
+    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
+    psErr *last = NULL;
+    psErr *lastAfterClear = NULL;
+
+    // With an attemp error stack call psErrorClear
+    psErrorClear();
+
+    // Get the last error message and verify PS_ERR_NONE (empty stack)
+    lastAfterClear = psErrorLast();
+    if(lastAfterClear->code != PS_ERR_NONE) {
+        psLogMsg("tst_psError05", PS_LOG_ERROR, "psErrorLast did not return expected.");
+        return 30;
+    }
+    psFree(lastAfterClear);
+
+    // Generate three error messages to have messages on error stack
+    if (psError(code, true, "Error code = %d", code) !=  code) {
+        psLogMsg("tst_psError04", PS_LOG_ERROR, "Failed return value verify.");
+        return 31;
+    }
+    if (psError((code+1), false, "Error code = %d", (code+1)) != (code+1)) {
+        psLogMsg("tst_psError04", PS_LOG_ERROR, "Failed return value verify.");
+        return 32;
+    }
+    if (psError((code+2), false, "Error code = %d", (code+2)) != (code+2)) {
+        psLogMsg("tst_psError04", PS_LOG_ERROR, "Failed return value verify.");
+        return 33;
+    }
+
+    // Get the last error message and verify it has the expected code
+    last = psErrorLast();
+    if(last->code != (code+2)) {
+        psLogMsg("tst_psError04", PS_LOG_ERROR, "psErrorLast did not return expected.");
+        return 34;
+    }
+    psFree(last);
+
+    // Clear the error stack
+    psErrorClear();
+
+    // Get the last error message after clear and verify is has PS_ERR_NONE code
+    lastAfterClear = psErrorLast();
+    if(lastAfterClear->code != PS_ERR_NONE) {
+        psLogMsg("tst_psError05", PS_LOG_ERROR, "psErrorLast did not return expected.");
+        return 35;
+    }
+    psFree(lastAfterClear);
+
+    return 0;
+}
+
+static psS32 testError03(void)
+{
+    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
+    psErr *last = NULL;
+    psErr *getErr = NULL;
+
+    // Attempt to get last error message with an empty stack verify psErr with code PS_ERR_NONE
+    last = psErrorLast();
+    if(last->code != PS_ERR_NONE) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorLast did return PS_ERR_NONE for empty stack");
+        return 20;
+    }
+    psFree(last);
+
+    // Attempt to get specific error message with empty stack verify psErr with code PS_ERR_NONE
+    getErr= psErrorGet(2);
+    if(getErr->code != PS_ERR_NONE) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet did not return PS_ERR_NONE  for empty stack");
+        return 21;
+    }
+    psFree(getErr);
+
+    // Attempt to get error message with invalid index and an empty stack
+    getErr= psErrorGet(-1);
+    if(getErr->code != PS_ERR_NONE) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet with invalid index/empty stack");
+        return 22;
+    }
+    psFree(getErr);
+
+    // Generate three error messages
+    if (psError(code, true, "Error code = %d", code) !=  code) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "Failed return value verify.");
+        return 23;
+    }
+    if (psError((code+1), false, "Error code = %d", (code+1)) != (code+1)) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "Failed return value verify.");
+        return 24;
+    }
+    if (psError((code+2), false, "Error code = %d", (code+2)) != (code+2)) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "Failed return value verify.");
+        return 25;
+    }
+
+    last = psErrorLast();
+    getErr= psErrorGet(0);
+
+    // Check that last and get with 0 index are equal
+    if(last != getErr) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet(0) not equal to psErrorLast");
+        return 26;
+    }
+    psFree(last);
+
+    // Verify the last error message was returned
+    if ( getErr->code != (code+2) ) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorLast() did not retrieve last error");
+        return 27;
+    }
+    psFree(getErr);
+
+    // Verify the middle error message can be retrieved
+    getErr= psErrorGet(1);
+    if ( getErr->code != (code+1)) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet() did not retrieve proper error");
+        return 28;
+    }
+    psFree(getErr);
+
+    // Verify the psErrorGet returns NULL if an invalid index is given
+    getErr= psErrorGet(-1);
+    if ( getErr->code != PS_ERR_NONE ) {
+        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet() did not return PS_ERR_NONE w/ invalid arg");
+        return 29;
+    }
+    psFree(getErr);
+
+    return 0;
+}
+
+static psS32 testError02(void)
+{
+    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
+
+    // Generate error message and verify return value
+    if (psError(code, true, "Error code = %d", code) != code ) {
+        psLogMsg("tst_psError02", PS_LOG_ERROR, "Failed return value verify.");
+        return 10;
+    }
+    myErrorStackPrint(stderr,"ERROR STACK PRINT Test%dA",2);
+
+    return 0;
+}
+
+static psS32 testError01(void)
+{
+    psErrorCode code=PS_ERR_BAD_PARAMETER_VALUE;
+
+    // Verify the return value of psErrorMsg is the psErrorCode passed
+    if ( psError(code, true, "Error code = %d", code) != code) {
+        psLogMsg("tst_psError01", PS_LOG_ERROR, "Failed return value verify.");
+        return 1;
+    }
+    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1A");
+
+    // test1B empty string in for name argument
+    if ( psError(code+1, true, "Error code = %d", code+1) != code+1) {
+        psLogMsg("tst_psError01", PS_LOG_ERROR, "Failed return with empty string.");
+        return 2;
+    }
+    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1B");
+
+    // test1D undefined code
+    if ( psError(-1, true, "Error code = %d", -1) != -1) {
+        psLogMsg("test_psError01", PS_LOG_ERROR, "Failed return with undefined code.");
+        return 4;
+    }
+    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1D");
+
+    // test1E set psErrorMsg argument to false
+    if( psError(code, false, "Error code = %d", code) != code) {
+        psLogMsg("test_psError01", PS_LOG_ERROR, "Failed return with false new arg.");
+        return 5;
+    }
+    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1E");
+
+    // test1F psErrorMsg with a error code less then PS_ERR_BASE(256)
+    if( psError(9, true, "Errno code = %d", 9) != 9) {
+        psLogMsg("test_psError01", PS_LOG_ERROR, "Failed return with errno code.");
+        return 6;
+    }
+    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1F");
+
+    return 0;
+}
+
+static psS32 testError00(void)
+{
+
+    psS32  intval=1;
+    psS64 longval = 2;
+    float floatval = 3.01;
+    char  charval = 'E';
+    char *stringval = "E R R O R";
+
+    // Test point #1 Multiple type values placed in the error string
+    psError(PS_ERR_UNKNOWN, true,
+            "ALL TYPES intval = %d longval = %lld floatval = %f charval = %c strval = %s",
+            intval,longval,floatval,charval,stringval);
+
+    // Test point #2 String values in error message
+    psError(PS_ERR_UNKNOWN, true, "NO VALUES");
+
+    // Test point #3 Empty strings in error message
+    psError(PS_ERR_UNKNOWN, true, "");
+
+    return 0;
+}
+
+static psS32 testErrorRegister(void)
+{
+
+    psS32 numErr = 4;
+    psErrorDescription errDesc[] = { {PS_ERR_N_ERR_CLASSES+1,"first"},
+                                     {PS_ERR_N_ERR_CLASSES+2,"second"},
+                                     {PS_ERR_N_ERR_CLASSES+3,"third"},
+                                     {PS_ERR_N_ERR_CLASSES+4,"fourth"} };
+    /*
+        1. invoke psErrorRegister with a n>1 array of psErrorDescriptions. Verify that:
+            a. Each error description given is retrievable with psErrorCodeString.
+    */
+    psErrorRegister(errDesc,numErr);
+
+    for (psS32 i = 0; i < numErr; i++) {
+        const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+1+i);
+        if (desc == NULL) {
+            psLogMsg(__func__,PS_LOG_ERROR,
+                     "psErrorCode didn't find registered error code.");
+            return 1+i*10;
+        }
+        if (strcmp(desc,errDesc[i].description) != 0) {
+            psLogMsg(__func__,PS_LOG_ERROR,
+                     "psErrorCode didn't return the proper description.  Got '%s', expected '%s'.",
+                     desc,errDesc[i].description);
+            return 2+i*10;
+        }
+    }
+
+    /*
+        2. invoke psErrorCodeString with a static/builtin psLib error code. Verify:
+            a. the result is correct.
+    */
+    const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES);
+    if (desc == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode didn't find static error code.");
+        return 40;
+    }
+    if (strcmp(desc,"error classes end marker") != 0) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode didn't return the proper description.  Got '%s', expected '%s'.",
+                 desc,"error classes end marker");
+        return 41;
+    }
+
+    desc = psErrorCodeString(PS_ERR_NONE);
+    if (desc == NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode didn't find static error code.");
+        return 42;
+    }
+    if (strcmp(desc,"not an error") != 0) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode didn't return the proper description.  Got '%s', expected '%s'.",
+                 desc,"not an error");
+        return 43;
+    }
+
+    /*
+        3. invoke psErrorCodeString with an invalid code. Verify a NULL is returned.
+    */
+    desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+numErr+1);
+    if (desc != NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode didn't return a NULL with a bogus input code.");
+        return 44;
+    }
+
+    /*
+        4. invoke psErrorRegister with a NULL psErrorDescription. Verify that:
+            a. the execution does not cease.
+            b. an appropriate error is generated.
+    */
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    psErrorClear();
+    psErrorRegister(NULL,1);
+    psErr* err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode didn't generate proper error code for NULL input.");
+        return 45;
+    }
+    psFree(err);
+
+    /*
+        5. invoke psErrorRegister with nerror=0. Verify that no error occurs.
+    */
+    psErrorClear();
+    psErrorRegister(errDesc,0);
+    err = psErrorLast();
+    if (err->code != PS_ERR_NONE) {
+        psLogMsg(__func__,PS_LOG_ERROR,
+                 "psErrorCode generated an error for nErrors = 0.");
+        return 46;
+    }
+    psFree(err);
+    return 0;
+}
Index: /trunk/psLib/test/sys/tst_psLogMsg.c
===================================================================
--- /trunk/psLib/test/sys/tst_psLogMsg.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psLogMsg.c	(revision 4547)
@@ -0,0 +1,219 @@
+/*****************************************************************************
+    This code will test whether trace levels can be set successfully.
+    This code will test whether trace messages can be displayed with printf
+    style string.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testLogMsg00();
+static psS32 testLogMsg01();
+static psS32 testLogMsg02();
+static psS32 testLogMsg03();
+static psS32 testLogMsg04();
+static psS32 testLogMsg05();
+
+testDescription tests[] = {
+                              {
+                                  testLogMsg00, 0, "default log levels, printf-style strings", 0, false
+                              },
+                              {
+                                  testLogMsg01, 1, "default log levels, psVLogMsg()", 0, false
+                              },
+                              {
+                                  testLogMsg02, 2, "psLogSetLevel()", 0, false
+                              },
+                              {
+                                  testLogMsg03, 3, "psLogSetFormat()", 0, false
+                              },
+                              {
+                                  testLogMsg04, 4, "Output Format", 0, false
+                              },
+                              {
+                                  testLogMsg05, 5, "psLogSetDestination()", 0, false
+                              },
+                              {
+                                  NULL
+                              }
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psLogMsg", tests, argc, argv ) );
+}
+
+
+static void myLogMsg(const char *name,
+                     psS32 level,
+                     const char *fmt,
+                     ...)
+{
+    va_list ap;
+
+    // Test whether psLogMsgV() accept a va_list for output variables.
+    va_start(ap, fmt);
+    psLogMsgV(name, level, fmt, ap);
+    va_end(ap);
+}
+
+static psS32 testLogMsg00()
+{
+    psS32 i = 0;
+
+    // Send a log messages for levels 0:9.  Only the first four messages
+    // should actually be displayed.
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d %f %s\n", i,
+                 (float) i, "beep beep");
+    }
+
+    return 0;
+}
+
+static psS32 testLogMsg01()
+{
+    psS32 i = 0;
+
+    // Send a log messages for levels 0:9.  Only the first four messages
+    // should actually be displayed.
+    for (i=0;i<10;i++) {
+        myLogMsg(__func__, i, "Hello World!  My level is %d %f %s\n", i,
+                 (float) i, "beep beep");
+    }
+
+    return 0;
+}
+
+static psS32 testLogMsg02()
+{
+
+    psLogSetLevel(9);
+    // Send a log messages for levels 0:9.
+    for (psS32 i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    psLogSetLevel(5);
+    psLogMsg(__func__, 6, "This should not be displayed (level %d)\n", 6);
+    psLogSetLevel(4);
+    psLogMsg(__func__, 4, "This should  be displayed (level %d)\n", 4);
+
+    return 0;
+}
+
+static psS32 testLogMsg03()
+{
+    psS32 i;
+
+    fprintf(stderr,"------------- psLogSetFormat() -------------\n");
+    psLogSetFormat("");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(NULL) -------------\n");
+    psLogSetFormat(NULL);
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(T) -------------\n");
+    psLogSetFormat("T");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(H) -------------\n");
+    psLogSetFormat("H");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(L) -------------\n");
+    psLogSetFormat("L");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(N) -------------\n");
+    psLogSetFormat("N");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(M) -------------\n");
+    psLogSetFormat("M");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    fprintf(stderr,"------------- psLogSetFormat(THLNM) -------------\n");
+    psLogSetFormat("THLNM");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    return 0;
+}
+
+
+psS32 testLogMsg04()
+{
+    psLogMsg("Under 15 chars", 0, "Hello World!\n");
+    psLogMsg("This string is more than 15 chars", 0, "Hello World!\n");
+    psLogMsg(__func__, 0, "Line #1\n");
+    psLogMsg(__func__, 0, "Line #2\n");
+    psLogMsg(__func__, 0, "Line #3");
+    psLogMsg(__func__, 0, "Line #4");
+
+    return 0;
+}
+
+psS32 testLogMsg05()
+{
+    psS32 i = 0;
+    FILE* file;
+    char line[256];
+
+    printf("--------------- psLogSetDestination(PS_LOG_NONE) ----------------\n");
+    psLogSetDestination("none");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psLogSetDestination(PS_LOG_TO_STDERR) -------------\n");
+    psLogSetDestination("dest:stderr");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    printf("------------- psLogSetDestination(PS_LOG_TO_STDOUT) -------------\n");
+    psLogSetDestination("dest:stdout");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+    printf("--------------- psLogSetDestination(""file:log.txt"") ---------------\n");
+    psLogSetDestination("file:log.txt");
+    for (i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
+    }
+
+    psLogSetDestination("none");
+    printf("--------------------- The Contents of log.txt -------------------\n");
+    file = fopen("log.txt","r");
+    while ( fgets(line,256,file) != NULL ) {
+        printf("%s",line);
+    }
+    fclose(file);
+
+    printf("--------------- psLogSetDestination(""file:/eva/log.txt"") ----------\n");
+    psLogSetDestination("file:/eva/log.txt");
+    for ( i=0;i<10;i++) {
+        psLogMsg(__func__, i, "Hello World! My level is %d\n", i);
+    }
+
+    return 0;
+}
Index: /trunk/psLib/test/sys/tst_psMemory.c
===================================================================
--- /trunk/psLib/test/sys/tst_psMemory.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psMemory.c	(revision 4547)
@@ -0,0 +1,535 @@
+/** @file  tst_psMemory.c
+*
+*  @brief Contains the tests for psMemory.[ch]
+*
+*
+*  @author Robert DeSonia, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <stdlib.h>
+
+
+#include "psTest.h"
+#include "pslib.h" // need to allow malloc for callback use
+
+static psS32 TPFreeReferencedMemory( void );
+static psS32 TPOutOfMemory( void );
+static psS32 TPReallocOutOfMemory( void );
+static psPtr TPOutOfMemoryExhaustedCallback( size_t size );
+static psS32 TPCheckBufferPositive( void );
+static psS32 TPrealloc( void );
+static psS32 TPallocCallback( void );
+static psMemId memAllocCallback( const psMemBlock *ptr );
+static psMemId memFreeCallback( const psMemBlock *ptr );
+static psS32 TPcheckLeaks( void );
+static psS32 TPmemCorruption( void );
+static psS32 TPmultipleFree( void );
+void memProblemCallback( psMemBlock *ptr, const char *filename, unsigned int lineno );
+
+static psS32 problemCallbackCalled = 0;
+static psS32 allocCallbackCalled = 0;
+static psS32 freeCallbackCalled = 0;
+static psS32 exhaustedCallbackCalled = 0;
+
+testDescription tests[] = {
+                              {TPCheckBufferPositive, 449, "checkBufferPositive", 0, false},
+                              {TPOutOfMemory, 450, "outOfMemory", -6, false},
+                              {TPReallocOutOfMemory, 562, "reallocOutOfMemory", -6, false},
+                              {TPrealloc, 451, "psRealloc", 0, false},
+                              {TPallocCallback, 452, "allocCallback", 0, false},
+                              {TPallocCallback, 453, "allocCallback2", 0, true},
+                              {TPcheckLeaks, 454, "checkLeaks", 0, false},
+                              {TPmemCorruption, 455, "psMemCorruption", 0, false},
+                              {TPFreeReferencedMemory, 456, "freeReferencedMemory", 0, false},
+                              {TPmultipleFree, 699, "multipleFree", -6, false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psMemory", tests, argc, argv ) );
+}
+
+// Testpoint #449, psAlloc shall allocate memory blocks writeable by caller.
+psS32 TPCheckBufferPositive( void )
+{
+    psS32 * mem;
+    const psS32 size = 100;
+    psS32 failed = 0;
+
+    psLogMsg( __func__, PS_LOG_INFO, "psAlloc shall allocate memory blocks writeable by caller.\n" );
+
+    mem = ( psS32* ) psAlloc( size * sizeof( psS32 ) );
+    if ( mem == NULL ) {
+        psError(PS_ERR_UNKNOWN, true, "psAlloc returned a NULL value in %s!", __func__ );
+        return 1;
+    }
+
+    for ( psS32 index = 0;index < size;index++ ) {
+        mem[ index ] = index;
+    }
+
+    for ( psS32 index = 0;index < size;index++ ) {
+        if ( mem[ index ] != index ) {
+            failed++;
+        }
+    }
+
+    psFree( mem );
+
+    return failed;
+}
+
+psS32 TPFreeReferencedMemory( void )
+{
+    // create memory
+    psS32 * mem;
+    psS32 ref = 0;
+
+    psLogMsg( __func__, PS_LOG_INFO, "memory reference count shall be incrementable/decrementable" );
+
+    mem = ( psS32* ) psAlloc( 100 * sizeof( psS32 ) );
+
+    ref = psMemGetRefCounter( mem );
+    if ( ref != 1 ) {
+        psError(PS_ERR_UNKNOWN, true, "Expected to buffer reference count to be initially 1, but it was %d.", ref );
+        return 1;
+    }
+
+    psMemIncrRefCounter( mem );
+    psMemIncrRefCounter( mem );
+    psMemIncrRefCounter( mem );
+
+    ref = psMemGetRefCounter( mem );
+    if ( ref != 4 ) {
+        psError(PS_ERR_UNKNOWN, true, "Expected to find buffer reference count to be 4, but it was %d.", ref );
+        return 1;
+    }
+
+    psMemDecrRefCounter( mem );
+    psMemDecrRefCounter( mem );
+
+    ref = psMemGetRefCounter( mem );
+    if ( ref != 2 ) {
+        psError(PS_ERR_UNKNOWN, true, "Expected to find buffer reference count to be 2, but it was %d.", ref );
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psFree shall be just decrement a multiple refererenced pointer." );
+
+    psMemDecrRefCounter( mem );
+
+    ref = psMemGetRefCounter( mem );
+    if ( ref != 1 ) {
+        psError(PS_ERR_UNKNOWN, true, "Expected to find buffer reference count to be 1, but it was %d.", ref );
+        return 1;
+    }
+
+    psFree( mem );
+
+    return 0;
+}
+
+// Bug/Task #562 regression test.  Upon requesting more memory than is available, psRealloc shall call
+// the psMemExhaustedCallback.
+psS32 TPReallocOutOfMemory( void )
+{
+    psS32 * mem[ 100 ];
+    psMemExhaustedCallback cb;
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        mem[ lcv ] = NULL;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "Upon requesting more memory than is available, psRealloc shall call "
+              "the psMemExhaustedCallback.\n" );
+
+    exhaustedCallbackCalled = 0;
+
+    cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback );
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        mem[ lcv ] = ( psS32* ) psAlloc( 10 );
+    }
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        mem[ lcv ] = ( psS32* ) psRealloc( mem[ lcv ], SIZE_MAX/2 - 1000 );
+    }
+
+    psMemExhaustedCallbackSet( cb );
+
+    if ( exhaustedCallbackCalled == 0 ) {
+        psError(PS_ERR_UNKNOWN,true, "Called psRealloc with HUGE memory requirement and survived in %s!", __func__ );
+        return 1;
+    }
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        psFree( mem[ lcv ] );
+    }
+
+    return 0;
+}
+// Testpoint #450,  Upon requesting more memory than is available, psalloc shall call
+// the psMemExhaustedCallback.
+psS32 TPOutOfMemory( void )
+{
+    psS32 * mem[ 100 ];
+    psMemExhaustedCallback cb;
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        mem[ lcv ] = NULL;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "Upon requesting more memory than is available, psalloc shall call "
+              "the psMemExhaustedCallback.\n" );
+
+    exhaustedCallbackCalled = 0;
+
+    cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback );
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        mem[ lcv ] = ( psS32* ) psAlloc( SIZE_MAX/2 - 1000 );
+    }
+
+    psMemExhaustedCallbackSet( cb );
+
+    if ( exhaustedCallbackCalled == 0 ) {
+        psError(PS_ERR_UNKNOWN,true, "Called psAlloc with HUGE memory requirement and survived in %s!", __func__ );
+        return 1;
+    }
+
+    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
+        psFree( mem[ lcv ] );
+    }
+
+    return 0;
+}
+
+// Testpoint #451,  psRealloc shall increase/decrease memory buffer while preserving contents
+psS32 TPrealloc( void )
+{
+    psS32 * mem1;
+    psS32* mem2;
+    psS32* mem3;
+    const psS32 initialSize = 100;
+
+    psLogMsg( __func__, PS_LOG_INFO, "psRealloc shall increase/decrease memory buffer while "
+              "preserving contents" );
+
+    // allocate buffer with known values.
+    mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+    mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+    mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+    for ( psS32 lcv = 0;lcv < initialSize;lcv++ ) {
+        mem1[ lcv ] = mem2[ lcv ] = mem3[ lcv ] = lcv;
+    }
+
+    psMemCheckCorruption( 1 );
+    psLogMsg( __func__, PS_LOG_INFO, "Expanding memory buffer." );
+
+    // realloc to 2x
+    mem1 = ( psS32* ) psRealloc( mem1, 2 * initialSize * sizeof( psS32 ) );
+    mem2 = ( psS32* ) psRealloc( mem2, 2 * initialSize * sizeof( psS32 ) );
+    mem3 = ( psS32* ) psRealloc( mem3, 2 * initialSize * sizeof( psS32 ) );
+
+    // check values of initial block
+    for ( psS32 i = 0;i < initialSize;i++ ) {
+        if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) {
+            psError(PS_ERR_UNKNOWN,true, "Realloc didn't preserve the contents with expanding buffer in %s.",
+                    __func__ );
+            break;
+        }
+    }
+
+    psMemCheckCorruption( 1 );
+    psLogMsg( __func__, PS_LOG_INFO, "Shrinking memory buffer." );
+
+    // realloc to 1/2 initial value.
+    mem1 = ( psS32* ) psRealloc( mem1, ( initialSize / 2 ) * sizeof( psS32 ) );
+    mem2 = ( psS32* ) psRealloc( mem2, ( initialSize / 2 ) * sizeof( psS32 ) );
+    mem3 = ( psS32* ) psRealloc( mem3, ( initialSize / 2 ) * sizeof( psS32 ) );
+
+    // check values of initial block
+    for ( psS32 i = 0;i < initialSize / 2;i++ ) {
+        if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) {
+            psError(PS_ERR_UNKNOWN,true, "Realloc didn't preserve the contents with shrinking buffer in %s.",
+                    __func__ );
+            break;
+        }
+    }
+
+    psFree( mem1 );
+    psFree( mem2 );
+    psFree( mem3 );
+
+    return 0;
+}
+
+psS32 TPallocCallback( void )
+{
+    psS32 * mem1;
+    psS32* mem2;
+    psS32* mem3;
+    psS32 currentId = psMemGetId();
+    const psS32 initialSize = 100;
+    psS32 mark;
+
+    allocCallbackCalled = 0;
+    freeCallbackCalled = 0;
+    psMemAllocCallbackSet( memAllocCallback );
+    psMemFreeCallbackSet( memFreeCallback );
+
+    psMemAllocCallbackSetID( currentId + 1 );
+    psMemFreeCallbackSetID( currentId + 1 );
+
+    psLogMsg( __func__, PS_LOG_INFO, "call to psAlloc/psRealloc shall generate a callback if specified "
+              "memory ID is allocated." );
+
+    // allocate buffer with known values.
+    mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+    mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+    mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+
+    psFree( mem1 );
+    psFree( mem2 );
+    psFree( mem3 );
+
+    if ( allocCallbackCalled != 2 || freeCallbackCalled != 2 ) {
+        psError(PS_ERR_UNKNOWN,true, "alloc/free callbacks were not called the proper number of times in %s",
+                __func__ );
+        return 1;
+    }
+
+    allocCallbackCalled = 0;
+    freeCallbackCalled = 0;
+
+    mark = psMemGetId();
+
+    mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
+
+    psMemAllocCallbackSetID( mark );
+
+    mem1 = ( psS32* ) psRealloc( mem1, initialSize * 2 * sizeof( psS32 ) );
+
+    psFree( mem1 );
+
+    if ( allocCallbackCalled != 2 ) {
+        psError(PS_ERR_UNKNOWN,true, "realloc callbacks were not called the proper number of times in %s",
+                __func__ );
+        return 1;
+    }
+
+    return 0;
+
+}
+
+psS32 TPcheckLeaks( void )
+{
+    const psS32 numBuffers = 5;
+    psS32* buffers[ 5 ];
+    psS32 lcv;
+    psS32 currentId = psMemGetId();
+    psMemBlock** blks;
+    psS32 nLeaks = 0;
+    psS32 lineMark = 0;
+
+    psLogMsg( __func__, PS_LOG_INFO, "psMemCheckLeaks shall return the number of blocks above an ID "
+              "that are still allocated" );
+
+    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
+        lineMark = __LINE__ + 1;
+        buffers[ lcv ] = psAlloc( sizeof( psS32 ) );
+    }
+
+    for ( lcv = 1;lcv < numBuffers;lcv++ ) {
+        psFree( buffers[ lcv ] );
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "following psMemCheckLeaks call should produce one instance." );
+
+    nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false );
+
+    if ( nLeaks != 1 ) {
+        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks should have found 1 leak, but found %d in %s.", nLeaks, __func__ );
+        return 1;
+    }
+
+    if ( blks[ 0 ] ->lineno != lineMark ) {
+        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks found a leak other than the expected one (line %d vs %d) in %s.",
+                lineMark, blks[ 0 ] ->lineno, __func__ );
+        return 1;
+    }
+
+    psFree( buffers[ 0 ] );
+    psFree( blks );
+
+    psLogMsg( __func__, PS_LOG_INFO, "Testing psMemCheckLeaks again with a different leak location" );
+    psMemCheckLeaks(currentId,NULL,stderr, false);
+
+    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
+        lineMark = __LINE__ + 1;
+        buffers[ lcv ] = psAlloc( sizeof( psS32 ) );
+    }
+
+    for ( lcv = 0;lcv < numBuffers - 1;lcv++ ) {
+        psFree( buffers[ lcv ] );
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "following psMemCheckLeaks call should produce one error." );
+
+    nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false );
+
+    if ( nLeaks != 1 ) {
+        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks should have found 1 leak, but found %d in %s.", nLeaks, __func__ );
+        return 1;
+    }
+
+    if ( blks[ 0 ] ->lineno != lineMark ) {
+        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks found a leak other than the expected one in %s.", __func__ );
+        return 1;
+    }
+
+    psFree( buffers[ 4 ] );
+    psFree( blks );
+
+    psLogMsg( __func__, PS_LOG_INFO, "Testing psMemCheckLeaks again with multiple leak locations." );
+
+    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
+        lineMark = __LINE__ + 1;
+        buffers[ lcv ] = psAlloc( sizeof( psS32 ) );
+    }
+
+    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
+        if ( lcv % 2 == 0 ) {
+            psFree( buffers[ lcv ] );
+        }
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "following psMemCheckLeaks call should produce two errors." );
+
+    nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false );
+
+    if ( nLeaks != 2 ) {
+        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks should have found 1 leak, but found %d in %s.", nLeaks, __func__ );
+        return 1;
+    }
+
+    if ( blks[ 0 ] ->lineno != lineMark ) {
+        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks found a leak other than the expected one in %s.", __func__ );
+        return 1;
+    }
+
+    psFree( blks );
+    psFree( buffers[ 1 ] );
+    psFree( buffers[ 3 ] );
+
+    return 0;
+}
+
+psS32 TPmemCorruption( void )
+{
+    psS32 * buffer = NULL;
+    psS32 oldValue = 0;
+    psS32 corruptions = 0;
+    psMemProblemCallback cb;
+
+    psLogMsg( __func__, PS_LOG_INFO, "psMemCheckCorruption shall detect memory corruptions" );
+
+    buffer = psAlloc( sizeof( psS32 ) );
+
+    // cause memory corruption via buffer underflow
+    *buffer = 1;
+    buffer--;
+    oldValue = *buffer;
+    *buffer = 2;
+
+    problemCallbackCalled = 0;
+    cb = psMemProblemCallbackSet( memProblemCallback );
+
+    psLogMsg( __func__, PS_LOG_INFO, "psMemCheckCorruption should output an error message and "
+              "memProblemCallback callback should be called." );
+
+    corruptions = psMemCheckCorruption( 0 );
+
+    // restore the memory problem callback
+    psMemProblemCallbackSet( cb );
+
+    // restore the value, 'uncorrupting' the buffer
+    *buffer = oldValue;
+    buffer++;
+
+    psFree( buffer );
+
+    if ( corruptions != 1 ) {
+        psError(PS_ERR_UNKNOWN,true, "Expected one memory corruption but found %d in %s.",
+                corruptions, __func__ );
+        return 1;
+    }
+
+    if ( problemCallbackCalled != 1 ) {
+        psError(PS_ERR_UNKNOWN,true, "The memProblemCallback was not invoked but should have been in %s",
+                __func__ );
+        return 1;
+    }
+
+    return 0;
+
+}
+
+void memProblemCallback( psMemBlock *ptr, const char *file, unsigned int lineno )
+{
+    psLogMsg( __func__, PS_LOG_INFO, "memory callback called for id %lld (%s:%d).",
+              ptr->id, file, lineno );
+    problemCallbackCalled++;
+    return ;
+}
+
+psMemId memAllocCallback( const psMemBlock *ptr )
+{
+    psLogMsg( __func__, PS_LOG_INFO, "block %lld was (re)allocated", ptr->id );
+    allocCallbackCalled++;
+    return 1;
+}
+
+psMemId memFreeCallback( const psMemBlock *ptr )
+{
+    psLogMsg( __func__, PS_LOG_INFO, "block %lld was freed", ptr->id );
+    freeCallbackCalled++;
+    return 1;
+}
+
+psPtr TPOutOfMemoryExhaustedCallback( size_t size )
+{
+    psLogMsg( __func__, PS_LOG_INFO, "Custom MemExhaustedCallback was invoked." );
+    exhaustedCallbackCalled++;
+    return NULL;
+}
+
+psS32 TPmultipleFree( void )
+{
+
+    psPtr buffer = psAlloc( 1024 );
+    psPtr buffer2 = buffer;
+
+    psFree( buffer );
+
+    psLogMsg( __func__, PS_LOG_INFO, "Next should abort due to multiple freeing." );
+    psFree( buffer2 );
+
+    psError(PS_ERR_UNKNOWN,true,
+            "Multiple psFree call survived");
+
+    return 0;
+}
Index: /trunk/psLib/test/sys/tst_psString.c
===================================================================
--- /trunk/psLib/test/sys/tst_psString.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psString.c	(revision 4547)
@@ -0,0 +1,436 @@
+/** @file  tst_psString.c
+ *
+ * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
+ * vim: set cindent ts=8 sw=4 expandtab:
+ *
+ *  @brief Test driver for psString functions
+ *
+ *  This test driver contains the following test points for psStringCopy
+ *  and psStringNCopy, and related string functions.
+ *    1) Verify string copy - psStringCopy
+ *    2) Verify empty string copy - psStringCopy
+ *    3) Verify string copy with length - psStringNCopy
+ *    4) Verify empty string copy with length - psStringNCopy
+ *    5) Copy string to larger string - psStringNCopy
+ *    6) Copy string with negative size - psStringNCopy
+ *    7) Verifiy creation of string literal - PS_STRING
+ *
+ *  Return:   Number of test points which failed
+ *
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+#define STR_0 "binky had a leeeetle lamb"
+
+static psS32 testStringCopy00(void);
+static psS32 testStringCopy01(void);
+static psS32 testStringCopy02(void);
+static psS32 testStringCopy03(void);
+static psS32 testStringCopy04(void);
+//static psS32 testStringCopy05(void);
+static psS32 testStringCopy06(void);
+
+static psS32 testStrAppend00(void);
+static psS32 testStrAppend01(void);
+static psS32 testStrAppend02(void);
+static psS32 testStrAppend03(void);
+
+static psS32 testStrPrepend00(void);
+static psS32 testStrPrepend01(void);
+static psS32 testStrPrepend02(void);
+static psS32 testStrPrepend03(void);
+
+testDescription tests[] = {
+                              {testStringCopy00, 0, "Verify string copy", 0, false},
+                              {testStringCopy01, 1, "Verify empty string copy", 0, false},
+                              {testStringCopy02, 2, "Verify string copy with length", 0, false},
+                              {testStringCopy03, 3, "Verify empty string copy with length", 0, false},
+                              {testStringCopy04, 4, "Copy string to larger string", 0, false},
+                              //                              {testStringCopy05, 5, "Copy string with negative size", 0, false},
+                              {testStringCopy06, 6, "Verify creation of string literal", 0, false},
+
+                              {testStrAppend00,  7, "Verify generic string append", 0, false},
+                              {testStrAppend01,  8, "Test append NULL handling", 0, false},
+                              {testStrAppend02,  9, "Verify append string creation", 0, false},
+                              {testStrAppend03, 10, "Test append null-op", 0, false},
+
+                              {testStrPrepend00,11, "Verify generic string prepend", 0, false},
+                              {testStrPrepend01,12, "Test prepend NULL handling", 0, false},
+                              {testStrPrepend02,13, "Verify prepend string creation", 0, false},
+                              {testStrPrepend03,14, "Test prepend null-op", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psString", tests, argc, argv ) );
+}
+
+/*
+psS32 main( psS32 argc,
+          char * argv[] )
+{
+    psBool  tpResult = false;
+    char  stringval[20] = "E R R O R";
+    char  stringval1[20] = "e r r o r";
+    char  *stringvalnocopy = "F A I L";
+    char  *substringval = "e r r";
+    psS32   substringlen = 6;
+    char  *emptyval = "";
+    psS32   tpFails = 0;
+    char  *strResult;
+    psS32   increaseSize = 5;
+    psS32   negativeSize = -5;
+    psS32   result = 0;
+    psS32   result1 = 0;
+    psS32   memBlockAllocated = 0;
+    psMemBlock ***memBlockPtr = NULL;
+ 
+*/
+
+static psS32 testStringCopy00(void)
+{
+    char  stringval[20] = "E R R O R";
+    psS32   result = 0;
+    psS32   result1 = 0;
+    char  *strResult;
+
+    // Test point #1 Verify string copy - psStringCopy
+    strResult = psStringCopy(stringval);
+    // Perform string compare
+    result = strcmp(strResult, stringval);
+    // Modify original string
+    stringval[0]='G';
+    result1 = strcmp(strResult, stringval);
+    stringval[0]='E';
+    if ( ( result != 0 ) || ( result1 == 0) ) {
+        fprintf(stderr, "Failed test point #1 strcmp result = %d expected 0\n",result);
+        fprintf(stderr, "                               src = %s expected %s\n",
+                strResult, stringval);
+        fprintf(stderr, "             changed strcmp result = %d expected 1\n",result1);
+        fprintf(stderr, "             changed           src = %s expected %s\n",strResult,
+                stringval);
+        return 1;
+    }
+
+    // Free memory allocated
+    psFree(strResult);
+
+    return 0;
+}
+
+static psS32 testStringCopy01(void)
+{
+    char  *emptyval = "";
+    psS32   result = 0;
+    char  *strResult;
+
+    // Test point #2 Verify empty string copy - psStringCopy
+    strResult = psStringCopy(emptyval);
+    // Perform string compare
+    result = strcmp(strResult, emptyval);
+    if ( result != 0 ) {
+        fprintf(stderr,"Failed test point #2 strcmp result = %d expected 0\n",result);
+        fprintf(stderr,"                               src = %s expected %s\n",
+                strResult, emptyval);
+        return 1;
+    }
+
+    // Free memory allocated
+    psFree(strResult);
+
+    return 0;
+}
+
+static psS32 testStringCopy02(void)
+{
+    psS32   result = 0;
+    psS32   result1 = 0;
+    char  *strResult;
+    char  stringval1[20] = "e r r o r";
+    psS32   substringlen = 5;
+    char  *substringval = "e r r";
+
+    // Test point #3 Verify string copy with length - psStringNCopy
+    strResult = psStringNCopy(stringval1, substringlen);
+    // Perform string compare and get string length
+    result = strncmp(strResult, substringval, substringlen);
+    // Change original string
+    stringval1[0] = 'g';
+    result1 = strncmp(strResult, substringval, substringlen);
+    if ( ( result != 0 ) || ( result1 != 0 ) ) {
+        fprintf(stderr,"Failed test point #3 strcmp result = %d expected 0\n",result);
+        fprintf(stderr,"                               src = %s expected %s\n",
+                strResult, substringval);
+        fprintf(stderr,"             changed strcmp result = %d expected 0\n",result1);
+        fprintf(stderr,"                               src = %s expected %s\n",
+                strResult, substringval);
+        return 1;
+    }
+    // Free memory allocated
+    psFree(strResult);
+
+    return 0;
+}
+
+static psS32 testStringCopy03(void)
+{
+    psS32   result = 0;
+    psS32   result1 = 0;
+    char  *strResult;
+    char  *stringvalnocopy = "F A I L";
+
+    // Test point #4 Verify empty string copy with length - psStringNCopy
+    strResult = psStringNCopy(stringvalnocopy, 0);
+    // Perform string compare and get sting length
+    result = strcmp(strResult, stringvalnocopy);
+    result1 = strlen(strResult);
+    if ( result == 0 ) {
+        fprintf(stderr,"Failed test point #4 strcmp result = %d didn't expected %d\n",result,0);
+        fprintf(stderr,"                               src = %s didn't expected %s\n",
+                strResult, stringvalnocopy);
+        return 1;
+    }
+    // Free memory
+    psFree(strResult);
+
+    return 0;
+}
+
+static psS32 testStringCopy04(void)
+{
+    psS32   result = 0;
+    psS32   result1 = 0;
+    char  *strResult;
+    char  stringval[20] = "E R R O R";
+    psS32   increaseSize = 5;
+
+    // Test point #5 Copy string to larger string - psStringNCopy
+    strResult = psStringNCopy(stringval, (strlen(stringval) + increaseSize));
+    // Perform string compare and get string length
+    result = strcmp(strResult, stringval);
+    result1 = strlen(strResult);
+    // The strings should still compare
+    if ( ( result != 0 ) ||
+            ( result1 != strlen(stringval) ) ) {
+        fprintf(stderr,"Failed test point #5 strcmp result = %d expected %d\n",result,0);
+        fprintf(stderr,"                               src = %s expected %s\n",
+                strResult, stringval);
+        fprintf(stderr,"                     strlne result = %d expected %d\n",result1,
+                (psS32)strlen(stringval));
+        return 1;
+    }
+    // Free memory
+    psFree(strResult);
+
+    return 0;
+}
+
+// XXX This test needs to be modified to check for maximum size
+//     This will require a mod to psStringNCopy source to check for maximum size
+//
+//static psS32 testStringCopy05(void)
+//{
+//    char  *strResult;
+//    char  stringval[20] = "E R R O R";
+//    psS32   negativeSize = -5;
+//
+//    // Test point #6 Copy string with negative size - psStringNCopy
+//    strResult = psStringNCopy(stringval, negativeSize);
+//    if ( strResult != NULL ) {
+//        fprintf(stderr,"Failed test point #6 return value = %p expected NULL\n",
+//                strResult);
+//        return 1;
+//    }
+//    // Memory should not have been allocated
+//
+//    return 0;
+//}
+
+static psS32 testStringCopy06(void)
+{
+    char  *strResult;
+    char  stringval[20] = "E R R O R";
+    psS32   result = 0;
+
+    // Test point #7 Verify creation of string literal - PS_STRING
+    strResult = PS_STRING(E R R O R);
+    result = strcmp(strResult, stringval);
+    if ( result != 0 ) {
+        fprintf(stderr,"Failed test point #7 strcmp result = %d expected %d",result,0);
+        return 1;
+    }
+    // Memory should not have been allocated
+
+    return 0;
+}
+
+static psS32 testStrAppend00(void)
+{
+    char *str=NULL;
+    int result = 0;
+
+    str = psStringCopy("3.14159");
+
+    psStringAppend(&str, "%d%s", 2653589, "79323846");
+
+    // Test point: Verify string append
+    result = strcmp(str, "3.14159265358979323846");
+    if ( result != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+
+    psFree(str);
+
+    return 0;
+}
+
+static psS32 testStrAppend01(void)
+{
+    ssize_t sz;
+    char *str=NULL;
+
+    // test nonsensical invocations ...
+    sz = psStringAppend(NULL, NULL);
+    if ( sz != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+    sz = psStringAppend(&str, NULL);
+    if ( sz != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+
+    return 0;
+}
+
+static psS32 testStrAppend02(void)
+{
+    char *str=NULL;
+    int result;
+
+    // test string creation
+    psStringAppend(&str, "%s", "fubar");
+    result = strcmp(str, "fubar");
+    if ( result != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+
+    psFree(str);
+
+    return 0;
+}
+
+static psS32 testStrAppend03(void)
+{
+    char *str=NULL;
+    int result;
+
+    str = psStringCopy(STR_0);
+
+    // test null-op
+    psStringAppend(&str, "");
+    result = strcmp(str, STR_0);
+    if ( result != 0 ) {
+        fprintf(stderr,"Failed test point str=[%s]\n", str);
+        return 1;
+    }
+
+    psFree(str);
+
+    return 0;
+}
+
+static psS32 testStrPrepend00(void)
+{
+    char *str=NULL;
+    int result = 0;
+
+    str = psStringCopy("79323846");
+
+    psStringPrepend(&str, "%s%d","3.14159", 2653589 );
+
+    // Test point: Verify string append
+    result = strcmp(str, "3.14159265358979323846");
+    if ( result != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+
+    psFree(str);
+
+    return 0;
+}
+
+static psS32 testStrPrepend01(void)
+{
+    ssize_t sz;
+    char *str=NULL;
+
+    // test nonsensical invocations ...
+    sz = psStringPrepend(NULL, NULL);
+    if ( sz != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+    sz = psStringPrepend(&str, NULL);
+    if ( sz != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+
+    return 0;
+}
+
+static psS32 testStrPrepend02(void)
+{
+    char *str=NULL;
+    int result;
+
+    // test string creation
+    psStringPrepend(&str, "%s", "fubar");
+    result = strcmp(str, "fubar");
+    if ( result != 0 ) {
+        fprintf(stderr,"%s","Failed test point\n");
+        return 1;
+    }
+
+    psFree(str);
+
+    return 0;
+}
+
+static psS32 testStrPrepend03(void)
+{
+    char *str=NULL;
+    int result;
+
+    str = psStringCopy(STR_0);
+
+    // test null-op
+    psStringPrepend(&str, "");
+    result = strcmp(str, STR_0);
+    if ( result != 0 ) {
+        fprintf(stderr,"Failed test point str=[%s]\n", str);
+        return 1;
+    }
+
+    psFree(str);
+
+    return 0;
+}
Index: /trunk/psLib/test/sys/tst_psTrace.c
===================================================================
--- /trunk/psLib/test/sys/tst_psTrace.c	(revision 4547)
+++ /trunk/psLib/test/sys/tst_psTrace.c	(revision 4547)
@@ -0,0 +1,365 @@
+/*****************************************************************************
+    This code will test whether trace levels can be set successfully.
+ 
+    XXX: For the last two testpoints, must verify that the results are
+    correct, and put that verification in the test as well.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+
+static psS32 testTrace00(void);
+static psS32 testTrace01(void);
+static psS32 testTrace02(void);
+static psS32 testTrace03(void);
+static psS32 testTrace04(void);
+static psS32 testTrace05(void);
+static psS32 testTrace05a(void);
+static psS32 testTrace06(void);
+static psS32 testTrace08(void);
+
+testDescription tests[] = {
+                              {testTrace00, 0, "psTraceSetLevel() and psTraceGetLevel()", 0, false},
+                              {testTrace01, 1, "psTraceSetLevel(): set multiple components in one call", 0, false},
+                              {testTrace02, 2, "psTraceSetLevel(): test static/dynamic inheritance", 0, false},
+                              {testTrace03, 3, "psTraceReset()", 0, false},
+                              {testTrace04, 4, "psTrace()", 0, false},
+                              {testTrace05, 5, "psTracePrintLevels()", 0, false},
+                              {testTrace05a, 5, "optional leading dot and psTracePrintLevels()", 0, false},
+                              {testTrace06, 6, "Testing psTraceReset", 0, false},
+                              {testTrace08, 8, "Testing ", 0, false},
+                              {NULL}
+                          };
+
+testDescription tests2[] = {
+                               {testTrace08, 8, "Testing ", 0, false},
+                           };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psTrace", tests, argc, argv ) );
+}
+
+static psS32 testTrace00(void)
+{
+    psS32 i;
+    psS32 lev = 0;
+
+    psTraceSetDestination(stderr);
+
+    for (i=0;i<10;i++) {
+        (void)psTraceSetLevel(".", i);
+        lev = psTraceGetLevel(".");
+        if (lev != i) {
+            fprintf(stderr,"ERROR: (.) expected trace level was %d, actual was %d\n",
+                    i, lev);
+            return 1;
+        }
+    }
+    (void)psTraceSetLevel(".", 3);
+
+    for (i=5;i<10;i++) {
+        (void)psTraceSetLevel(".NODE00", i);
+        lev = psTraceGetLevel(".NODE00");
+        if (lev != i) {
+            fprintf(stderr,"ERROR: (.NODE00) expected trace level was %d, actual was %d\n",
+                    i, lev);
+            return 2;
+        }
+
+        lev = psTraceGetLevel(".");
+        if (lev != 3) {
+            fprintf(stderr,"ERROR: (.) expected trace level was %d, actual was %d\n",
+                    i, 3);
+            return 3;
+        }
+    }
+
+
+    (void)psTraceSetLevel(".NODE00.NODE01", 4);
+    for (i=0;i<10;i++) {
+        (void)psTraceSetLevel(".NODE00.NODE01", i);
+        lev = psTraceGetLevel(".NODE00.NODE01");
+        if (lev != i) {
+            fprintf(stderr,"ERROR: (.NODE00.NODE01) expected trace level was %d, actual was %d\n",
+                    i, lev);
+            return 4;
+        }
+    }
+
+    return 0;
+}
+
+static psS32 testTrace01(void)
+{
+    psTraceSetDestination(stderr);
+    (void)psTraceSetLevel(".A.B.C.D.E", 5);
+
+    psTrace(".A.C.D.C",1,"You should not see this.\n");
+    psTrace(".A.B.C.D.E",2,"You should see this.\n");
+    psTrace(".A.B.C.D.E.F",3,"You should see this too.\n");
+
+    psTracePrintLevels();
+
+    return 0;
+}
+
+static psS32 testTrace02(void)
+{
+    psTraceReset();
+    psTraceSetDestination(stderr);
+    psTraceSetLevel(".A.B", 2);
+    psTraceSetLevel(".A.B.C.D.E", 5);
+    psTracePrintLevels();
+    psTraceSetLevel(".A.B", 10);
+    psTracePrintLevels();
+
+    if (10 != psTraceGetLevel(".A.B.C")) {
+        fprintf(stderr,"ERROR: .A.B.C did not dynamically inherit a trace level (%d)\n",
+                psTraceGetLevel(".A.B.C"));
+        return 2;
+    }
+
+    if (10 != psTraceGetLevel(".A.B.C.D")) {
+        fprintf(stderr,"ERROR: .A.B.C.D did not dynamically inherit a trace level (%d)\n", psTraceGetLevel(".A.B.C.D"));
+        return 2;
+    }
+
+    if (5 != psTraceGetLevel(".A.B.C.D.E")) {
+        fprintf(stderr,"ERROR: .A.B.C.D.E did dynamically inherit a trace level (%d)\n", psTraceGetLevel(".A.B.C.D.E"));
+        return 2;
+    }
+
+    return 0;
+}
+
+static psS32 testTrace03(void)
+{
+    psS32 i = 0;
+    psS32 lev = 0;
+
+    psTraceSetDestination(stderr);
+
+    for (i=0;i<10;i++) {
+        (void)psTraceSetLevel(".", i);
+        psTraceReset();
+
+        lev = psTraceGetLevel(".");
+        if (lev != PS_UNKNOWN_TRACE_LEVEL) {
+            fprintf(stderr,"ERROR: expected trace level was %d, actual was %d\n",
+                    PS_UNKNOWN_TRACE_LEVEL, lev);
+            return 1;
+        }
+    }
+    (void)psTraceSetLevel(".", 5);
+    (void)psTraceSetLevel(".a", 4);
+    (void)psTraceSetLevel(".a.b", 3);
+    (void)psTraceSetLevel(".a.b.c", 2);
+    if ((5 != psTraceGetLevel(".")) ||
+            (4 != psTraceGetLevel(".a")) ||
+            (3 != psTraceGetLevel(".a.b")) ||
+            (2 != psTraceGetLevel(".a.b.c"))) {
+        fprintf(stderr,"ERROR: trace successFlag = false;levels were not settable?\n");
+        return 2;
+    }
+
+    psTraceReset();
+    if ((PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".")) ||
+            (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a")) ||
+            (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b")) ||
+            (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b.c"))) {
+        fprintf(stderr,"ERROR: trace levels were not reset properly\n");
+        return 3;
+    }
+
+    return 0;
+}
+
+
+static psS32 testTrace04(void)
+{
+    FILE *fp;
+    psS32 nb = 0;
+
+    fp = fopen("tst_psTrace02_OUT", "w");
+    for (nb = 0 ; nb<4;nb++) {
+        if (nb == 0)
+            psTraceSetDestination(stdout);
+        if (nb == 1)
+            psTraceSetDestination(stderr);
+        if (nb == 2)
+            psTraceSetDestination(NULL);
+        if (nb == 3)
+            psTraceSetDestination(fp);
+
+        (void)psTraceSetLevel(".", 4);
+        psTrace(".", 5, "(0) This message should not be displayed (%x)\n",
+                0xbeefface);
+        (void)psTraceSetLevel(".", 7);
+        psTrace(".", 5, "(0) This message should be displayed (%x)\n",
+                0xbeefface);
+
+        (void)psTraceSetLevel(".a", 4);
+        psTrace(".a", 5, "(1) This message should not be displayed (%x)\n",
+                0xbeefface);
+        (void)psTraceSetLevel(".a", 7);
+        psTrace(".a", 5, "(1) This message should be displayed (%x)\n",
+                0xbeefface);
+
+
+        (void)psTraceSetLevel(".a.b", 4);
+        psTrace(".a.b", 5, "(2) This message should not be displayed (%x)\n",
+                0xbeefface);
+        (void)psTraceSetLevel(".a.b", 7);
+        psTrace(".a.b", 5, "(2) This message should be displayed (%x)\n",
+                0xbeefface);
+
+    }
+
+    fclose(fp);
+
+    return(0);
+}
+
+static psS32 testTrace05(void)
+{
+    psTraceSetDestination(stderr);
+
+    (void)psTraceSetLevel(".", 9);
+
+    (void)psTraceSetLevel(".a", 8);
+    (void)psTraceSetLevel(".b", 7);
+    (void)psTraceSetLevel(".c", 5);
+
+    (void)psTraceSetLevel(".a.a", 4);
+    (void)psTraceSetLevel(".a.b", 3);
+
+    (void)psTraceSetLevel(".b.a", 2);
+    (void)psTraceSetLevel(".b.b", 1);
+
+    (void)psTraceSetLevel(".c.a", 0);
+    (void)psTraceSetLevel(".c.b", 3);
+    (void)psTraceSetLevel(".c.c", 5);
+
+    psTracePrintLevels();
+
+    return 0;
+
+}
+
+static psS32 testTrace05a(void)
+{
+    (void)psTraceSetLevel(".", 9);
+
+    (void)psTraceSetLevel("a", 8);
+    (void)psTraceSetLevel("b", 7);
+    (void)psTraceSetLevel("c", 5);
+
+    (void)psTraceSetLevel("a.a", 4);
+    (void)psTraceSetLevel("a.b", 3);
+
+    (void)psTraceSetLevel("b.a", 2);
+    (void)psTraceSetLevel("b.b", 1);
+
+    (void)psTraceSetLevel("c.a", 0);
+    (void)psTraceSetLevel("c.b", 3);
+    (void)psTraceSetLevel("c.c", 5);
+
+    psTracePrintLevels();
+
+    return 0;
+
+}
+
+static psS32 testTrace06(void)
+{
+    psTraceSetDestination(stderr);
+
+    (void)psTraceSetLevel(".", 9);
+
+    (void)psTraceSetLevel(".a", 8);
+    (void)psTraceSetLevel(".b", 7);
+    (void)psTraceSetLevel(".c", 5);
+
+    (void)psTraceSetLevel(".a.a", 4);
+    (void)psTraceSetLevel(".a.b", 3);
+
+    (void)psTraceSetLevel(".b.a", 2);
+    (void)psTraceSetLevel(".b.b", 1);
+
+    (void)psTraceSetLevel(".c.a", 0);
+    (void)psTraceSetLevel(".c.b", 3);
+    (void)psTraceSetLevel(".c.c", 5);
+
+    psTraceReset();
+
+    if ((psTraceGetLevel(".")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".a")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".b")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".c")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".a.a")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".a.b")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".b.a")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".b.b")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".c.a")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".c.b")!=PS_UNKNOWN_TRACE_LEVEL) ||
+            (psTraceGetLevel(".c.c")!=PS_UNKNOWN_TRACE_LEVEL)) {
+        return 1;
+    }
+
+    return 0;
+}
+
+// Ensure that the leading dot in the component names are optional.
+static psS32 testTrace08(void)
+{
+    psTraceReset();
+    (void)psTraceSetLevel(".", 9);
+
+    (void)psTraceSetLevel(".a", 8);
+    (void)psTraceSetLevel(".b", 7);
+    (void)psTraceSetLevel(".c", 5);
+
+    (void)psTraceSetLevel(".a.a", 4);
+    (void)psTraceSetLevel(".a.b", 3);
+
+    (void)psTraceSetLevel(".b.a", 2);
+    (void)psTraceSetLevel(".b.b", 1);
+
+    (void)psTraceSetLevel(".c.a", 0);
+    (void)psTraceSetLevel(".c.b", 3);
+    (void)psTraceSetLevel(".c.c", 5);
+
+    psTracePrintLevels();
+
+    if ((psTraceGetLevel(".")!=9) ||
+            (psTraceGetLevel("a")!=8) ||
+            (psTraceGetLevel("b")!=7) ||
+            (psTraceGetLevel("c")!=5) ||
+            (psTraceGetLevel("a.a")!=4) ||
+            (psTraceGetLevel("a.b")!=3) ||
+            (psTraceGetLevel("b.a")!=2) ||
+            (psTraceGetLevel("b.b")!=1) ||
+            (psTraceGetLevel("c.a")!=0) ||
+            (psTraceGetLevel("c.b")!=3) ||
+            (psTraceGetLevel("c.c")!=5)) {
+        printf("psTraceGetLevel(.) is %d\n", psTraceGetLevel("."));
+        printf("psTraceGetLevel(a) is %d\n", psTraceGetLevel("a"));
+        printf("psTraceGetLevel(b) is %d\n", psTraceGetLevel("b"));
+        printf("psTraceGetLevel(c) is %d\n", psTraceGetLevel("c"));
+        printf("psTraceGetLevel(a.a) is %d\n", psTraceGetLevel("a.a"));
+        printf("psTraceGetLevel(a.b) is %d\n", psTraceGetLevel("a.b"));
+        printf("psTraceGetLevel(b.a) is %d\n", psTraceGetLevel("b.a"));
+        printf("psTraceGetLevel(b.b) is %d\n", psTraceGetLevel("b.b"));
+        printf("psTraceGetLevel(c.a) is %d\n", psTraceGetLevel("c.a"));
+        printf("psTraceGetLevel(c.b) is %d\n", psTraceGetLevel("c.b"));
+        printf("psTraceGetLevel(c.c) is %d\n", psTraceGetLevel("c.c"));
+
+        return 1;
+    }
+
+    return 0;
+}
Index: /trunk/psLib/test/sys/verified/tst_psAbort.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psAbort.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psAbort.stderr	(revision 4547)
@@ -0,0 +1,32 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psAbort.c                                              *
+*            TestPoint: psAbort{Multiple type values in abort message}             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|testAbort00
+    ALL TYPES intval = 1 longval = 2 floatval = 3.010000 charval = E strval = E R R O R
+
+---> TESTPOINT PASSED (psAbort{Multiple type values in abort message} | tst_psAbort.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psAbort.c                                              *
+*            TestPoint: psAbort{String values in abort message}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|__LINE__
+    NO_VALUES
+
+---> TESTPOINT PASSED (psAbort{String values in abort message} | tst_psAbort.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psAbort.c                                              *
+*            TestPoint: psAbort{Empty strings in abort message}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|
+
+---> TESTPOINT PASSED (psAbort{Empty strings in abort message} | tst_psAbort.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psConfigure.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psConfigure.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psConfigure.stderr	(revision 4547)
@@ -0,0 +1,11 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psConfigure.c                                          *
+*            TestPoint: psConfigure{Return current psLib version}                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|psLibVersion00
+    Current psLib version is: pslib-vX.X.X
+
+---> TESTPOINT PASSED (psConfigure{Return current psLib version} | tst_psConfigure.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psError.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psError.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psError.stderr	(revision 4547)
@@ -0,0 +1,112 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psError()}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|testError00 (FILE:LINENO)
+    ALL TYPES intval = 1 longval = 2 floatval = 3.010000 charval = E strval = E R R O R
+<DATE><TIME>|<HOST>|E|testError00 (FILE:LINENO)
+    NO VALUES
+<DATE><TIME>|<HOST>|E|testError00 (FILE:LINENO)
+
+---> TESTPOINT PASSED (psError{psError()} | tst_psError.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psErrorMsg(),psErrorStackPrint()}                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
+    Error code = 262
+ERROR STACK PRINT Test1A -> testError01 (FILE:LINENO): parameter is out-of-range
+     Error code = 262
+<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
+    Error code = 263
+ERROR STACK PRINT Test1B -> testError01 (FILE:LINENO): parameter is of unsupported type
+     Error code = 263
+<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
+    Error code = -1
+ERROR STACK PRINT Test1D -> testError01 (FILE:LINENO): (null)
+     Error code = -1
+<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
+    Error code = 262
+ERROR STACK PRINT Test1E -> testError01 (FILE:LINENO): (null)
+     Error code = -1
+ -> testError01 (FILE:LINENO): parameter is out-of-range
+     Error code = 262
+<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
+    Errno code = 9
+ERROR STACK PRINT Test1F -> testError01 (FILE:LINENO): Bad file descriptor
+     Errno code = 9
+
+---> TESTPOINT PASSED (psError{psErrorMsg(),psErrorStackPrint()} | tst_psError.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psErrorStackPrintV()}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|testError02 (FILE:LINENO)
+    Error code = 262
+ERROR STACK PRINT Test2A -> testError02 (FILE:LINENO): parameter is out-of-range
+     Error code = 262
+
+---> TESTPOINT PASSED (psError{psErrorStackPrintV()} | tst_psError.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psErrorGet(),psErrorLast()}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|testError03 (FILE:LINENO)
+    Error code = 262
+<DATE><TIME>|<HOST>|E|testError03 (FILE:LINENO)
+    Error code = 263
+<DATE><TIME>|<HOST>|E|testError03 (FILE:LINENO)
+    Error code = 264
+
+---> TESTPOINT PASSED (psError{psErrorGet(),psErrorLast()} | tst_psError.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psErrorClear()}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|testError04 (FILE:LINENO)
+    Error code = 262
+<DATE><TIME>|<HOST>|E|testError04 (FILE:LINENO)
+    Error code = 263
+<DATE><TIME>|<HOST>|E|testError04 (FILE:LINENO)
+    Error code = 264
+
+---> TESTPOINT PASSED (psError{psErrorClear()} | tst_psError.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psErrorCodeString()}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|tst_psError05
+    parameter is out-of-range
+
+---> TESTPOINT PASSED (psError{psErrorCodeString()} | tst_psError.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psError.c                                              *
+*            TestPoint: psError{psErrorRegister()}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testErrorRegister
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psErrorRegister (FILE:LINENO)
+    Specified psErrorDescription pointer can not be NULL.
+
+---> TESTPOINT PASSED (psError{psErrorRegister()} | tst_psError.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psLogMsg.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psLogMsg.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psLogMsg.stderr	(revision 4547)
@@ -0,0 +1,168 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLogMsg.c                                             *
+*            TestPoint: psLogMsg{default log levels, printf-style strings}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|testLogMsg00
+    Hello World!  My level is 0 0.000000 beep beep
+<DATE><TIME>|<HOST>|E|testLogMsg00
+    Hello World!  My level is 1 1.000000 beep beep
+<DATE><TIME>|<HOST>|W|testLogMsg00
+    Hello World!  My level is 2 2.000000 beep beep
+<DATE><TIME>|<HOST>|I|testLogMsg00
+    Hello World!  My level is 3 3.000000 beep beep
+
+---> TESTPOINT PASSED (psLogMsg{default log levels, printf-style strings} | tst_psLogMsg.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLogMsg.c                                             *
+*            TestPoint: psLogMsg{default log levels, psVLogMsg()}                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|testLogMsg01
+    Hello World!  My level is 0 0.000000 beep beep
+<DATE><TIME>|<HOST>|E|testLogMsg01
+    Hello World!  My level is 1 1.000000 beep beep
+<DATE><TIME>|<HOST>|W|testLogMsg01
+    Hello World!  My level is 2 2.000000 beep beep
+<DATE><TIME>|<HOST>|I|testLogMsg01
+    Hello World!  My level is 3 3.000000 beep beep
+
+---> TESTPOINT PASSED (psLogMsg{default log levels, psVLogMsg()} | tst_psLogMsg.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLogMsg.c                                             *
+*            TestPoint: psLogMsg{psLogSetLevel()}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|testLogMsg02
+    Hello World!  My level is 0
+<DATE><TIME>|<HOST>|E|testLogMsg02
+    Hello World!  My level is 1
+<DATE><TIME>|<HOST>|W|testLogMsg02
+    Hello World!  My level is 2
+<DATE><TIME>|<HOST>|I|testLogMsg02
+    Hello World!  My level is 3
+<DATE><TIME>|<HOST>|4|testLogMsg02
+    Hello World!  My level is 4
+<DATE><TIME>|<HOST>|5|testLogMsg02
+    Hello World!  My level is 5
+<DATE><TIME>|<HOST>|6|testLogMsg02
+    Hello World!  My level is 6
+<DATE><TIME>|<HOST>|7|testLogMsg02
+    Hello World!  My level is 7
+<DATE><TIME>|<HOST>|8|testLogMsg02
+    Hello World!  My level is 8
+<DATE><TIME>|<HOST>|9|testLogMsg02
+    Hello World!  My level is 9
+<DATE><TIME>|<HOST>|4|testLogMsg02
+    This should  be displayed (level 4)
+
+---> TESTPOINT PASSED (psLogMsg{psLogSetLevel()} | tst_psLogMsg.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLogMsg.c                                             *
+*            TestPoint: psLogMsg{psLogSetFormat()}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+------------- psLogSetFormat() -------------
+<DATE><TIME>|<HOST>|A|testLogMsg03
+    Hello World!  My level is 0
+<DATE><TIME>|<HOST>|E|testLogMsg03
+    Hello World!  My level is 1
+<DATE><TIME>|<HOST>|W|testLogMsg03
+    Hello World!  My level is 2
+<DATE><TIME>|<HOST>|I|testLogMsg03
+    Hello World!  My level is 3
+------------- psLogSetFormat(NULL) -------------
+------------- psLogSetFormat(T) -------------
+<DATE><TIME>
+
+<DATE><TIME>
+
+<DATE><TIME>
+
+<DATE><TIME>
+
+------------- psLogSetFormat(H) -------------
+<HOST>
+<HOST>
+<HOST>
+<HOST>
+------------- psLogSetFormat(L) -------------
+A
+
+E
+
+W
+
+I
+
+------------- psLogSetFormat(N) -------------
+testLogMsg03
+
+testLogMsg03
+
+testLogMsg03
+
+testLogMsg03
+
+------------- psLogSetFormat(M) -------------
+    Hello World!  My level is 0
+    Hello World!  My level is 1
+    Hello World!  My level is 2
+    Hello World!  My level is 3
+------------- psLogSetFormat(THLNM) -------------
+<DATE><TIME>|<HOST>|A|testLogMsg03
+    Hello World!  My level is 0
+<DATE><TIME>|<HOST>|E|testLogMsg03
+    Hello World!  My level is 1
+<DATE><TIME>|<HOST>|W|testLogMsg03
+    Hello World!  My level is 2
+<DATE><TIME>|<HOST>|I|testLogMsg03
+    Hello World!  My level is 3
+
+---> TESTPOINT PASSED (psLogMsg{psLogSetFormat()} | tst_psLogMsg.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLogMsg.c                                             *
+*            TestPoint: psLogMsg{Output Format}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|Under 15 chars
+    Hello World!
+<DATE><TIME>|<HOST>|A|This string is more than 15 chars
+    Hello World!
+<DATE><TIME>|<HOST>|A|testLogMsg04
+    Line #1
+<DATE><TIME>|<HOST>|A|testLogMsg04
+    Line #2
+<DATE><TIME>|<HOST>|A|testLogMsg04
+    Line #3
+<DATE><TIME>|<HOST>|A|testLogMsg04
+    Line #4
+
+---> TESTPOINT PASSED (psLogMsg{Output Format} | tst_psLogMsg.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLogMsg.c                                             *
+*            TestPoint: psLogMsg{psLogSetDestination()}                            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|A|testLogMsg05
+    Hello World!  My level is 0
+<DATE><TIME>|<HOST>|E|testLogMsg05
+    Hello World!  My level is 1
+<DATE><TIME>|<HOST>|W|testLogMsg05
+    Hello World!  My level is 2
+<DATE><TIME>|<HOST>|I|testLogMsg05
+    Hello World!  My level is 3
+
+---> TESTPOINT PASSED (psLogMsg{psLogSetDestination()} | tst_psLogMsg.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psLogMsg.stdout
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psLogMsg.stdout	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psLogMsg.stdout	(revision 4547)
@@ -0,0 +1,22 @@
+--------------- psLogSetDestination(PS_LOG_NONE) ----------------
+------------- psLogSetDestination(PS_LOG_TO_STDERR) -------------
+------------- psLogSetDestination(PS_LOG_TO_STDOUT) -------------
+<DATE><TIME>|<HOST>|A|testLogMsg05
+    Hello World!  My level is 0
+<DATE><TIME>|<HOST>|E|testLogMsg05
+    Hello World!  My level is 1
+<DATE><TIME>|<HOST>|W|testLogMsg05
+    Hello World!  My level is 2
+<DATE><TIME>|<HOST>|I|testLogMsg05
+    Hello World!  My level is 3
+--------------- psLogSetDestination(file:log.txt) ---------------
+--------------------- The Contents of log.txt -------------------
+<DATE><TIME>|<HOST>|A|testLogMsg05
+    Hello World!  My level is 0
+<DATE><TIME>|<HOST>|E|testLogMsg05
+    Hello World!  My level is 1
+<DATE><TIME>|<HOST>|W|testLogMsg05
+    Hello World!  My level is 2
+<DATE><TIME>|<HOST>|I|testLogMsg05
+    Hello World!  My level is 3
+--------------- psLogSetDestination(file:/eva/log.txt) ----------
Index: /trunk/psLib/test/sys/verified/tst_psMemory.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psMemory.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psMemory.stderr	(revision 4547)
@@ -0,0 +1,152 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{checkBufferPositive}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPCheckBufferPositive
+    psAlloc shall allocate memory blocks writeable by caller.
+
+---> TESTPOINT PASSED (psMemory{checkBufferPositive} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{outOfMemory}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPOutOfMemory
+    Upon requesting more memory than is available, psalloc shall call the psMemExhaustedCallback.
+<DATE><TIME>|<HOST>|I|TPOutOfMemoryExhaustedCallback
+    Custom MemExhaustedCallback was invoked.
+<DATE><TIME>|<HOST>|A|p_psAlloc
+    Failed to allocate <N> bytes at FILE:LINENO
+
+---> TESTPOINT PASSED (psMemory{outOfMemory} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{reallocOutOfMemory}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPReallocOutOfMemory
+    Upon requesting more memory than is available, psRealloc shall call the psMemExhaustedCallback.
+<DATE><TIME>|<HOST>|I|TPOutOfMemoryExhaustedCallback
+    Custom MemExhaustedCallback was invoked.
+<DATE><TIME>|<HOST>|A|p_psRealloc
+    Failed to reallocate <N> bytes at FILE:LINENO
+
+---> TESTPOINT PASSED (psMemory{reallocOutOfMemory} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{psRealloc}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPrealloc
+    psRealloc shall increase/decrease memory buffer while preserving contents
+<DATE><TIME>|<HOST>|I|TPrealloc
+    Expanding memory buffer.
+<DATE><TIME>|<HOST>|I|TPrealloc
+    Shrinking memory buffer.
+
+---> TESTPOINT PASSED (psMemory{psRealloc} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{allocCallback}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPallocCallback
+    call to psAlloc/psRealloc shall generate a callback if specified memory ID is allocated.
+<DATE><TIME>|<HOST>|I|memAllocCallback
+    block 2 was (re)allocated
+<DATE><TIME>|<HOST>|I|memAllocCallback
+    block 3 was (re)allocated
+<DATE><TIME>|<HOST>|I|memFreeCallback
+    block 2 was freed
+<DATE><TIME>|<HOST>|I|memFreeCallback
+    block 3 was freed
+<DATE><TIME>|<HOST>|I|memAllocCallback
+    block 4 was (re)allocated
+<DATE><TIME>|<HOST>|I|memAllocCallback
+    block 4 was (re)allocated
+<DATE><TIME>|<HOST>|I|memFreeCallback
+    block 4 was freed
+
+---> TESTPOINT PASSED (psMemory{allocCallback} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{checkLeaks}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPcheckLeaks
+    psMemCheckLeaks shall return the number of blocks above an ID that are still allocated
+<DATE><TIME>|<HOST>|I|TPcheckLeaks
+    following psMemCheckLeaks call should produce one instance.
+                   file:line ID
+ FILE:LINENO  1
+<DATE><TIME>|<HOST>|I|TPcheckLeaks
+    Testing psMemCheckLeaks again with a different leak location
+<DATE><TIME>|<HOST>|I|TPcheckLeaks
+    following psMemCheckLeaks call should produce one error.
+                   file:line ID
+ FILE:LINENO  11
+<DATE><TIME>|<HOST>|I|TPcheckLeaks
+    Testing psMemCheckLeaks again with multiple leak locations.
+<DATE><TIME>|<HOST>|I|TPcheckLeaks
+    following psMemCheckLeaks call should produce two errors.
+                   file:line ID
+ FILE:LINENO  16
+ FILE:LINENO  14
+
+---> TESTPOINT PASSED (psMemory{checkLeaks} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{psMemCorruption}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPmemCorruption
+    psMemCheckCorruption shall detect memory corruptions
+<DATE><TIME>|<HOST>|I|TPmemCorruption
+    psMemCheckCorruption should output an error message and memProblemCallback callback should be called.
+<DATE><TIME>|<HOST>|E|checkMemBlock (FILE:LINENO)
+    Memory block 1 is corrupted; buffer underflow detected.
+<DATE><TIME>|<HOST>|I|memProblemCallback
+    memory callback called for id 1 (FILE:LINENO).
+
+---> TESTPOINT PASSED (psMemory{psMemCorruption} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{freeReferencedMemory}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPFreeReferencedMemory
+    memory reference count shall be incrementable/decrementable
+<DATE><TIME>|<HOST>|I|TPFreeReferencedMemory
+    psFree shall be just decrement a multiple refererenced pointer.
+
+---> TESTPOINT PASSED (psMemory{freeReferencedMemory} | tst_psMemory.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMemory.c                                             *
+*            TestPoint: psMemory{multipleFree}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|TPmultipleFree
+    Next should abort due to multiple freeing.
+<DATE><TIME>|<HOST>|A|p_psFree
+    Block 1, allocated at FILE:LINENO, freed multiple times at FILE:LINENO.
+
+---> TESTPOINT PASSED (psMemory{multipleFree} | tst_psMemory.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psString.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psString.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psString.stderr	(revision 4547)
@@ -0,0 +1,126 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify string copy}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify string copy} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify empty string copy}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify empty string copy} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify string copy with length}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify string copy with length} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify empty string copy with length}             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify empty string copy with length} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Copy string to larger string}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Copy string to larger string} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify creation of string literal}                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify creation of string literal} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify generic string append}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify generic string append} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Test append NULL handling}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Test append NULL handling} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify append string creation}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify append string creation} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Test append null-op}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Test append null-op} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify generic string prepend}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify generic string prepend} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Test prepend NULL handling}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Test prepend NULL handling} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Verify prepend string creation}                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Verify prepend string creation} | tst_psString.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psString.c                                             *
+*            TestPoint: psString{Test prepend null-op}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psString{Test prepend null-op} | tst_psString.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psTrace.stderr
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psTrace.stderr	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psTrace.stderr	(revision 4547)
@@ -0,0 +1,118 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{psTraceSetLevel() and psTraceGetLevel()}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTrace{psTraceSetLevel() and psTraceGetLevel()} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{psTraceSetLevel(): set multiple components in one call} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+  You should see this.
+   You should see this too.
+.                    0
+ A                   0
+  B                  0
+   C                 0
+    D                0
+     E               5
+
+---> TESTPOINT PASSED (psTrace{psTraceSetLevel(): set multiple components in one call} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{psTraceSetLevel(): test static/dynamic inheritance} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+.                    0
+ A                   0
+  B                  2
+   C                 2
+    D                2
+     E               5
+.                    0
+ A                   0
+  B                  10
+   C                 10
+    D                10
+     E               5
+
+---> TESTPOINT PASSED (psTrace{psTraceSetLevel(): test static/dynamic inheritance} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{psTraceReset()}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTrace{psTraceReset()} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{psTrace()}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+     (0) This message should be displayed (beefface)
+     (1) This message should be displayed (beefface)
+     (2) This message should be displayed (beefface)
+     (0) This message should be displayed (beefface)
+     (1) This message should be displayed (beefface)
+     (2) This message should be displayed (beefface)
+
+---> TESTPOINT PASSED (psTrace{psTrace()} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{psTracePrintLevels()}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+.                    9
+ a                   8
+  a                  4
+  b                  3
+ b                   7
+  a                  2
+  b                  1
+ c                   5
+  a                  0
+  b                  3
+  c                  5
+
+---> TESTPOINT PASSED (psTrace{psTracePrintLevels()} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{optional leading dot and psTracePrintLevels()}     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTrace{optional leading dot and psTracePrintLevels()} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{Testing psTraceReset}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTrace{Testing psTraceReset} | tst_psTrace.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psTrace.c                                              *
+*            TestPoint: psTrace{Testing }                                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psTrace{Testing } | tst_psTrace.c)
+
Index: /trunk/psLib/test/sys/verified/tst_psTrace.stdout
===================================================================
--- /trunk/psLib/test/sys/verified/tst_psTrace.stdout	(revision 4547)
+++ /trunk/psLib/test/sys/verified/tst_psTrace.stdout	(revision 4547)
@@ -0,0 +1,25 @@
+     (0) This message should be displayed (beefface)
+     (1) This message should be displayed (beefface)
+     (2) This message should be displayed (beefface)
+.                    9
+ a                   8
+  a                  4
+  b                  3
+ b                   7
+  a                  2
+  b                  1
+ c                   5
+  a                  0
+  b                  3
+  c                  5
+.                    9
+ a                   8
+  a                  4
+  b                  3
+ b                   7
+  a                  2
+  b                  1
+ c                   5
+  a                  0
+  b                  3
+  c                  5
Index: unk/psLib/test/sysUtils/tst_psAbort.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psAbort.c	(revision 4546)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/** @file  atst_psAbort_01.c
- *
- *  @brief Test driver for psAbort function
- *
- *  This test drivers contains the following test points for psAbort
- *     1) Multiple type values in abort message
- *
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testAbort00(void);
-static psS32 testAbort01(void);
-static psS32 testAbort02(void);
-
-testDescription tests[] = {
-                              {testAbort00, 0, "Multiple type values in abort message", -6, false},
-                              {testAbort01, 1, "String values in abort message", -6, false},
-                              {testAbort02, 2, "Empty strings in abort message", -6, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psAbort", tests, argc, argv ) );
-}
-
-static psS32 testAbort00(void)
-{
-    psS32   intval = 1;
-    psS64  longval = 2;
-    float floatval = 3.01;
-    char  charval = 'E';
-    char  *stringval = "E R R O R";
-
-    // Test point #1 Multiple type values placed in the error string
-    psAbort(__func__,
-            "ALL TYPES intval = %d longval = %lld floatval = %f charval = %c strval = %s",
-            intval, longval, floatval, charval, stringval );
-
-    // Program execution should have ended before this statement but if it
-    // does not return a zero since the expected return value of this test
-    // is a non-zero value
-    return 0;
-}
-
-static psS32 testAbort01(void)
-{
-    // Test point #2 String values in abort message
-    psAbort(PS_STRING(__LINE__), "NO_VALUES");
-
-    // Program execution should have ended before this statement but if it
-    // does not return a zero since the expected return value of this test
-    // is a non-zero value
-    return 0;
-}
-
-static psS32 testAbort02(void)
-{
-    // Test point #2 String values in abort message
-    psAbort("","");
-
-    // Program execution should have ended before this statement but if it
-    // does not return a zero since the expected return value of this test
-    // is a non-zero value
-    return 0;
-}
Index: unk/psLib/test/sysUtils/tst_psConfigure.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psConfigure.c	(revision 4546)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/** @file  tst_psConfigure.c
- *
- *  @brief Test driver for psconfigure functions
- *
- *  This test driver contains the following test points for psConfigure
- *  functions.
- *    1) Return current psLib version
- *
- *  Return:   Number of test points which failed
- *
- *  @author  Ross Harman, MHPCC
- *
- *  @version $Revision: 1.3 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include "pslib_strict.h"
-#include "psTest.h"
-
-
-static psS32 psLibVersion00(void);
-
-
-testDescription tests[] = {
-                              {psLibVersion00, 0, "Return current psLib version", 0, false},
-                              {NULL}
-                          };
-
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel(PS_LOG_INFO);
-
-    return(!runTestSuite( stderr, "psConfigure", tests, argc, argv));
-}
-
-
-static psS32 psLibVersion00(void)
-{
-    char *stringVal = NULL;
-
-    stringVal = psLibVersion();
-    psLogMsg(__func__,PS_LOG_INFO,"Current psLib version is: %s", stringVal);
-    psFree(stringVal);
-
-
-    return 0;
-}
-
Index: unk/psLib/test/sysUtils/tst_psError.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psError.c	(revision 4546)
+++ 	(revision )
@@ -1,393 +1,0 @@
-/** @file  tst_psError.c
- *
- *  @brief Test driver for psError function
- *
- *  This test driver contains the following test points for psError
- *     testError00 - psError()                          (Testpoint #486)
- *     testError01 - psErrorMsg(), psErrorStackPrint()  (Testpoint #725)
- *     testError02 - psErrorStackPrintV()               (Testpoint #726)
- *     testError03 - psErrorGet(), psErrorLast()        (Testpoint #727)
- *     testError04 - psErrorClear()                     (Testpoint #728)
- *     testError05 - psErrorCodeString()                (Testpoint #729)
- *
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.18 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-04-07 20:27:42 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testError00(void);
-static psS32 testError01(void);
-static psS32 testError02(void);
-static psS32 testError03(void);
-static psS32 testError04(void);
-static psS32 testError05(void);
-static psS32 testErrorRegister(void);
-
-// Function used in testError02 to verify the psErrorStackPrintV function
-static void myErrorStackPrint(FILE *fd,
-                              const char *fmt,
-                              ...)
-{
-    va_list ap;
-
-    // Test whether psErrorStackPrintV() accept a va_list for output variables
-    va_start(ap, fmt);
-    psErrorStackPrintV(fd, fmt, ap);
-    va_end(ap);
-}
-
-testDescription tests[] = {
-                              {testError00, 486, "psError()", 0, false},
-                              {testError01, 725, "psErrorMsg(),psErrorStackPrint()", 0, false},
-                              {testError02, 726, "psErrorStackPrintV()", 0, false},
-                              {testError03, 727, "psErrorGet(),psErrorLast()", 0, false},
-                              {testError04, 728, "psErrorClear()", 0, false},
-                              {testError05, 729, "psErrorCodeString()", 0, false},
-                              {testErrorRegister, 751, "psErrorRegister()", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( !runTestSuite(stderr, "psError", tests, argc, argv) );
-}
-
-static psS32 testError05(void)
-{
-    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
-
-    // Verify the return value of psErrorCodeString
-    psLogMsg("tst_psError05", PS_LOG_INFO, psErrorCodeString(code));
-
-    // Verify the return value of psErrorCodeString if code is negative
-    if( psErrorCodeString(-1) != NULL) {
-        psLogMsg("tst_psError05", PS_LOG_INFO, "Failed error string with neg. code");
-        return 40;
-    }
-
-    return 0;
-}
-
-static psS32 testError04(void)
-{
-    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
-    psErr *last = NULL;
-    psErr *lastAfterClear = NULL;
-
-    // With an attemp error stack call psErrorClear
-    psErrorClear();
-
-    // Get the last error message and verify PS_ERR_NONE (empty stack)
-    lastAfterClear = psErrorLast();
-    if(lastAfterClear->code != PS_ERR_NONE) {
-        psLogMsg("tst_psError05", PS_LOG_ERROR, "psErrorLast did not return expected.");
-        return 30;
-    }
-    psFree(lastAfterClear);
-
-    // Generate three error messages to have messages on error stack
-    if (psError(code, true, "Error code = %d", code) !=  code) {
-        psLogMsg("tst_psError04", PS_LOG_ERROR, "Failed return value verify.");
-        return 31;
-    }
-    if (psError((code+1), false, "Error code = %d", (code+1)) != (code+1)) {
-        psLogMsg("tst_psError04", PS_LOG_ERROR, "Failed return value verify.");
-        return 32;
-    }
-    if (psError((code+2), false, "Error code = %d", (code+2)) != (code+2)) {
-        psLogMsg("tst_psError04", PS_LOG_ERROR, "Failed return value verify.");
-        return 33;
-    }
-
-    // Get the last error message and verify it has the expected code
-    last = psErrorLast();
-    if(last->code != (code+2)) {
-        psLogMsg("tst_psError04", PS_LOG_ERROR, "psErrorLast did not return expected.");
-        return 34;
-    }
-    psFree(last);
-
-    // Clear the error stack
-    psErrorClear();
-
-    // Get the last error message after clear and verify is has PS_ERR_NONE code
-    lastAfterClear = psErrorLast();
-    if(lastAfterClear->code != PS_ERR_NONE) {
-        psLogMsg("tst_psError05", PS_LOG_ERROR, "psErrorLast did not return expected.");
-        return 35;
-    }
-    psFree(lastAfterClear);
-
-    return 0;
-}
-
-static psS32 testError03(void)
-{
-    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
-    psErr *last = NULL;
-    psErr *getErr = NULL;
-
-    // Attempt to get last error message with an empty stack verify psErr with code PS_ERR_NONE
-    last = psErrorLast();
-    if(last->code != PS_ERR_NONE) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorLast did return PS_ERR_NONE for empty stack");
-        return 20;
-    }
-    psFree(last);
-
-    // Attempt to get specific error message with empty stack verify psErr with code PS_ERR_NONE
-    getErr= psErrorGet(2);
-    if(getErr->code != PS_ERR_NONE) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet did not return PS_ERR_NONE  for empty stack");
-        return 21;
-    }
-    psFree(getErr);
-
-    // Attempt to get error message with invalid index and an empty stack
-    getErr= psErrorGet(-1);
-    if(getErr->code != PS_ERR_NONE) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet with invalid index/empty stack");
-        return 22;
-    }
-    psFree(getErr);
-
-    // Generate three error messages
-    if (psError(code, true, "Error code = %d", code) !=  code) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "Failed return value verify.");
-        return 23;
-    }
-    if (psError((code+1), false, "Error code = %d", (code+1)) != (code+1)) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "Failed return value verify.");
-        return 24;
-    }
-    if (psError((code+2), false, "Error code = %d", (code+2)) != (code+2)) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "Failed return value verify.");
-        return 25;
-    }
-
-    last = psErrorLast();
-    getErr= psErrorGet(0);
-
-    // Check that last and get with 0 index are equal
-    if(last != getErr) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet(0) not equal to psErrorLast");
-        return 26;
-    }
-    psFree(last);
-
-    // Verify the last error message was returned
-    if ( getErr->code != (code+2) ) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorLast() did not retrieve last error");
-        return 27;
-    }
-    psFree(getErr);
-
-    // Verify the middle error message can be retrieved
-    getErr= psErrorGet(1);
-    if ( getErr->code != (code+1)) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet() did not retrieve proper error");
-        return 28;
-    }
-    psFree(getErr);
-
-    // Verify the psErrorGet returns NULL if an invalid index is given
-    getErr= psErrorGet(-1);
-    if ( getErr->code != PS_ERR_NONE ) {
-        psLogMsg("tst_psError03", PS_LOG_ERROR, "psErrorGet() did not return PS_ERR_NONE w/ invalid arg");
-        return 29;
-    }
-    psFree(getErr);
-
-    return 0;
-}
-
-static psS32 testError02(void)
-{
-    psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;
-
-    // Generate error message and verify return value
-    if (psError(code, true, "Error code = %d", code) != code ) {
-        psLogMsg("tst_psError02", PS_LOG_ERROR, "Failed return value verify.");
-        return 10;
-    }
-    myErrorStackPrint(stderr,"ERROR STACK PRINT Test%dA",2);
-
-    return 0;
-}
-
-static psS32 testError01(void)
-{
-    psErrorCode code=PS_ERR_BAD_PARAMETER_VALUE;
-
-    // Verify the return value of psErrorMsg is the psErrorCode passed
-    if ( psError(code, true, "Error code = %d", code) != code) {
-        psLogMsg("tst_psError01", PS_LOG_ERROR, "Failed return value verify.");
-        return 1;
-    }
-    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1A");
-
-    // test1B empty string in for name argument
-    if ( psError(code+1, true, "Error code = %d", code+1) != code+1) {
-        psLogMsg("tst_psError01", PS_LOG_ERROR, "Failed return with empty string.");
-        return 2;
-    }
-    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1B");
-
-    // test1D undefined code
-    if ( psError(-1, true, "Error code = %d", -1) != -1) {
-        psLogMsg("test_psError01", PS_LOG_ERROR, "Failed return with undefined code.");
-        return 4;
-    }
-    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1D");
-
-    // test1E set psErrorMsg argument to false
-    if( psError(code, false, "Error code = %d", code) != code) {
-        psLogMsg("test_psError01", PS_LOG_ERROR, "Failed return with false new arg.");
-        return 5;
-    }
-    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1E");
-
-    // test1F psErrorMsg with a error code less then PS_ERR_BASE(256)
-    if( psError(9, true, "Errno code = %d", 9) != 9) {
-        psLogMsg("test_psError01", PS_LOG_ERROR, "Failed return with errno code.");
-        return 6;
-    }
-    psErrorStackPrint(stderr,"ERROR STACK PRINT Test1F");
-
-    return 0;
-}
-
-static psS32 testError00(void)
-{
-
-    psS32  intval=1;
-    psS64 longval = 2;
-    float floatval = 3.01;
-    char  charval = 'E';
-    char *stringval = "E R R O R";
-
-    // Test point #1 Multiple type values placed in the error string
-    psError(PS_ERR_UNKNOWN, true,
-            "ALL TYPES intval = %d longval = %lld floatval = %f charval = %c strval = %s",
-            intval,longval,floatval,charval,stringval);
-
-    // Test point #2 String values in error message
-    psError(PS_ERR_UNKNOWN, true, "NO VALUES");
-
-    // Test point #3 Empty strings in error message
-    psError(PS_ERR_UNKNOWN, true, "");
-
-    return 0;
-}
-
-static psS32 testErrorRegister(void)
-{
-
-    psS32 numErr = 4;
-    psErrorDescription errDesc[] = { {PS_ERR_N_ERR_CLASSES+1,"first"},
-                                     {PS_ERR_N_ERR_CLASSES+2,"second"},
-                                     {PS_ERR_N_ERR_CLASSES+3,"third"},
-                                     {PS_ERR_N_ERR_CLASSES+4,"fourth"} };
-    /*
-        1. invoke psErrorRegister with a n>1 array of psErrorDescriptions. Verify that:
-            a. Each error description given is retrievable with psErrorCodeString.
-    */
-    psErrorRegister(errDesc,numErr);
-
-    for (psS32 i = 0; i < numErr; i++) {
-        const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+1+i);
-        if (desc == NULL) {
-            psLogMsg(__func__,PS_LOG_ERROR,
-                     "psErrorCode didn't find registered error code.");
-            return 1+i*10;
-        }
-        if (strcmp(desc,errDesc[i].description) != 0) {
-            psLogMsg(__func__,PS_LOG_ERROR,
-                     "psErrorCode didn't return the proper description.  Got '%s', expected '%s'.",
-                     desc,errDesc[i].description);
-            return 2+i*10;
-        }
-    }
-
-    /*
-        2. invoke psErrorCodeString with a static/builtin psLib error code. Verify:
-            a. the result is correct.
-    */
-    const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES);
-    if (desc == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode didn't find static error code.");
-        return 40;
-    }
-    if (strcmp(desc,"error classes end marker") != 0) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode didn't return the proper description.  Got '%s', expected '%s'.",
-                 desc,"error classes end marker");
-        return 41;
-    }
-
-    desc = psErrorCodeString(PS_ERR_NONE);
-    if (desc == NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode didn't find static error code.");
-        return 42;
-    }
-    if (strcmp(desc,"not an error") != 0) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode didn't return the proper description.  Got '%s', expected '%s'.",
-                 desc,"not an error");
-        return 43;
-    }
-
-    /*
-        3. invoke psErrorCodeString with an invalid code. Verify a NULL is returned.
-    */
-    desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+numErr+1);
-    if (desc != NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode didn't return a NULL with a bogus input code.");
-        return 44;
-    }
-
-    /*
-        4. invoke psErrorRegister with a NULL psErrorDescription. Verify that:
-            a. the execution does not cease.
-            b. an appropriate error is generated.
-    */
-    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
-    psErrorClear();
-    psErrorRegister(NULL,1);
-    psErr* err = psErrorLast();
-    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode didn't generate proper error code for NULL input.");
-        return 45;
-    }
-    psFree(err);
-
-    /*
-        5. invoke psErrorRegister with nerror=0. Verify that no error occurs.
-    */
-    psErrorClear();
-    psErrorRegister(errDesc,0);
-    err = psErrorLast();
-    if (err->code != PS_ERR_NONE) {
-        psLogMsg(__func__,PS_LOG_ERROR,
-                 "psErrorCode generated an error for nErrors = 0.");
-        return 46;
-    }
-    psFree(err);
-    return 0;
-}
Index: unk/psLib/test/sysUtils/tst_psLogMsg.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psLogMsg.c	(revision 4546)
+++ 	(revision )
@@ -1,219 +1,0 @@
-/*****************************************************************************
-    This code will test whether trace levels can be set successfully.
-    This code will test whether trace messages can be displayed with printf
-    style string.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-static psS32 testLogMsg00();
-static psS32 testLogMsg01();
-static psS32 testLogMsg02();
-static psS32 testLogMsg03();
-static psS32 testLogMsg04();
-static psS32 testLogMsg05();
-
-testDescription tests[] = {
-                              {
-                                  testLogMsg00, 0, "default log levels, printf-style strings", 0, false
-                              },
-                              {
-                                  testLogMsg01, 1, "default log levels, psVLogMsg()", 0, false
-                              },
-                              {
-                                  testLogMsg02, 2, "psLogSetLevel()", 0, false
-                              },
-                              {
-                                  testLogMsg03, 3, "psLogSetFormat()", 0, false
-                              },
-                              {
-                                  testLogMsg04, 4, "Output Format", 0, false
-                              },
-                              {
-                                  testLogMsg05, 5, "psLogSetDestination()", 0, false
-                              },
-                              {
-                                  NULL
-                              }
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psLogMsg", tests, argc, argv ) );
-}
-
-
-static void myLogMsg(const char *name,
-                     psS32 level,
-                     const char *fmt,
-                     ...)
-{
-    va_list ap;
-
-    // Test whether psLogMsgV() accept a va_list for output variables.
-    va_start(ap, fmt);
-    psLogMsgV(name, level, fmt, ap);
-    va_end(ap);
-}
-
-static psS32 testLogMsg00()
-{
-    psS32 i = 0;
-
-    // Send a log messages for levels 0:9.  Only the first four messages
-    // should actually be displayed.
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d %f %s\n", i,
-                 (float) i, "beep beep");
-    }
-
-    return 0;
-}
-
-static psS32 testLogMsg01()
-{
-    psS32 i = 0;
-
-    // Send a log messages for levels 0:9.  Only the first four messages
-    // should actually be displayed.
-    for (i=0;i<10;i++) {
-        myLogMsg(__func__, i, "Hello World!  My level is %d %f %s\n", i,
-                 (float) i, "beep beep");
-    }
-
-    return 0;
-}
-
-static psS32 testLogMsg02()
-{
-
-    psLogSetLevel(9);
-    // Send a log messages for levels 0:9.
-    for (psS32 i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    psLogSetLevel(5);
-    psLogMsg(__func__, 6, "This should not be displayed (level %d)\n", 6);
-    psLogSetLevel(4);
-    psLogMsg(__func__, 4, "This should  be displayed (level %d)\n", 4);
-
-    return 0;
-}
-
-static psS32 testLogMsg03()
-{
-    psS32 i;
-
-    fprintf(stderr,"------------- psLogSetFormat() -------------\n");
-    psLogSetFormat("");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(NULL) -------------\n");
-    psLogSetFormat(NULL);
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(T) -------------\n");
-    psLogSetFormat("T");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(H) -------------\n");
-    psLogSetFormat("H");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(L) -------------\n");
-    psLogSetFormat("L");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(N) -------------\n");
-    psLogSetFormat("N");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(M) -------------\n");
-    psLogSetFormat("M");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    fprintf(stderr,"------------- psLogSetFormat(THLNM) -------------\n");
-    psLogSetFormat("THLNM");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    return 0;
-}
-
-
-psS32 testLogMsg04()
-{
-    psLogMsg("Under 15 chars", 0, "Hello World!\n");
-    psLogMsg("This string is more than 15 chars", 0, "Hello World!\n");
-    psLogMsg(__func__, 0, "Line #1\n");
-    psLogMsg(__func__, 0, "Line #2\n");
-    psLogMsg(__func__, 0, "Line #3");
-    psLogMsg(__func__, 0, "Line #4");
-
-    return 0;
-}
-
-psS32 testLogMsg05()
-{
-    psS32 i = 0;
-    FILE* file;
-    char line[256];
-
-    printf("--------------- psLogSetDestination(PS_LOG_NONE) ----------------\n");
-    psLogSetDestination("none");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    printf("------------- psLogSetDestination(PS_LOG_TO_STDERR) -------------\n");
-    psLogSetDestination("dest:stderr");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    printf("------------- psLogSetDestination(PS_LOG_TO_STDOUT) -------------\n");
-    psLogSetDestination("dest:stdout");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-    printf("--------------- psLogSetDestination(""file:log.txt"") ---------------\n");
-    psLogSetDestination("file:log.txt");
-    for (i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World!  My level is %d\n", i);
-    }
-
-    psLogSetDestination("none");
-    printf("--------------------- The Contents of log.txt -------------------\n");
-    file = fopen("log.txt","r");
-    while ( fgets(line,256,file) != NULL ) {
-        printf("%s",line);
-    }
-    fclose(file);
-
-    printf("--------------- psLogSetDestination(""file:/eva/log.txt"") ----------\n");
-    psLogSetDestination("file:/eva/log.txt");
-    for ( i=0;i<10;i++) {
-        psLogMsg(__func__, i, "Hello World! My level is %d\n", i);
-    }
-
-    return 0;
-}
Index: unk/psLib/test/sysUtils/tst_psMemory.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psMemory.c	(revision 4546)
+++ 	(revision )
@@ -1,535 +1,0 @@
-/** @file  tst_psMemory.c
-*
-*  @brief Contains the tests for psMemory.[ch]
-*
-*
-*  @author Robert DeSonia, MHPCC
-*
-*  @version $Revision: 1.35 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-07-01 03:57:42 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*/
-
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <limits.h>
-#include <stdlib.h>
-
-
-#include "psTest.h"
-#include "pslib.h" // need to allow malloc for callback use
-
-static psS32 TPFreeReferencedMemory( void );
-static psS32 TPOutOfMemory( void );
-static psS32 TPReallocOutOfMemory( void );
-static psPtr TPOutOfMemoryExhaustedCallback( size_t size );
-static psS32 TPCheckBufferPositive( void );
-static psS32 TPrealloc( void );
-static psS32 TPallocCallback( void );
-static psMemId memAllocCallback( const psMemBlock *ptr );
-static psMemId memFreeCallback( const psMemBlock *ptr );
-static psS32 TPcheckLeaks( void );
-static psS32 TPmemCorruption( void );
-static psS32 TPmultipleFree( void );
-void memProblemCallback( psMemBlock *ptr, const char *filename, unsigned int lineno );
-
-static psS32 problemCallbackCalled = 0;
-static psS32 allocCallbackCalled = 0;
-static psS32 freeCallbackCalled = 0;
-static psS32 exhaustedCallbackCalled = 0;
-
-testDescription tests[] = {
-                              {TPCheckBufferPositive, 449, "checkBufferPositive", 0, false},
-                              {TPOutOfMemory, 450, "outOfMemory", -6, false},
-                              {TPReallocOutOfMemory, 562, "reallocOutOfMemory", -6, false},
-                              {TPrealloc, 451, "psRealloc", 0, false},
-                              {TPallocCallback, 452, "allocCallback", 0, false},
-                              {TPallocCallback, 453, "allocCallback2", 0, true},
-                              {TPcheckLeaks, 454, "checkLeaks", 0, false},
-                              {TPmemCorruption, 455, "psMemCorruption", 0, false},
-                              {TPFreeReferencedMemory, 456, "freeReferencedMemory", 0, false},
-                              {TPmultipleFree, 699, "multipleFree", -6, false},
-                              {NULL}
-                          };
-
-psS32 main(psS32 argc, char* argv[])
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psMemory", tests, argc, argv ) );
-}
-
-// Testpoint #449, psAlloc shall allocate memory blocks writeable by caller.
-psS32 TPCheckBufferPositive( void )
-{
-    psS32 * mem;
-    const psS32 size = 100;
-    psS32 failed = 0;
-
-    psLogMsg( __func__, PS_LOG_INFO, "psAlloc shall allocate memory blocks writeable by caller.\n" );
-
-    mem = ( psS32* ) psAlloc( size * sizeof( psS32 ) );
-    if ( mem == NULL ) {
-        psError(PS_ERR_UNKNOWN, true, "psAlloc returned a NULL value in %s!", __func__ );
-        return 1;
-    }
-
-    for ( psS32 index = 0;index < size;index++ ) {
-        mem[ index ] = index;
-    }
-
-    for ( psS32 index = 0;index < size;index++ ) {
-        if ( mem[ index ] != index ) {
-            failed++;
-        }
-    }
-
-    psFree( mem );
-
-    return failed;
-}
-
-psS32 TPFreeReferencedMemory( void )
-{
-    // create memory
-    psS32 * mem;
-    psS32 ref = 0;
-
-    psLogMsg( __func__, PS_LOG_INFO, "memory reference count shall be incrementable/decrementable" );
-
-    mem = ( psS32* ) psAlloc( 100 * sizeof( psS32 ) );
-
-    ref = psMemGetRefCounter( mem );
-    if ( ref != 1 ) {
-        psError(PS_ERR_UNKNOWN, true, "Expected to buffer reference count to be initially 1, but it was %d.", ref );
-        return 1;
-    }
-
-    psMemIncrRefCounter( mem );
-    psMemIncrRefCounter( mem );
-    psMemIncrRefCounter( mem );
-
-    ref = psMemGetRefCounter( mem );
-    if ( ref != 4 ) {
-        psError(PS_ERR_UNKNOWN, true, "Expected to find buffer reference count to be 4, but it was %d.", ref );
-        return 1;
-    }
-
-    psMemDecrRefCounter( mem );
-    psMemDecrRefCounter( mem );
-
-    ref = psMemGetRefCounter( mem );
-    if ( ref != 2 ) {
-        psError(PS_ERR_UNKNOWN, true, "Expected to find buffer reference count to be 2, but it was %d.", ref );
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psFree shall be just decrement a multiple refererenced pointer." );
-
-    psMemDecrRefCounter( mem );
-
-    ref = psMemGetRefCounter( mem );
-    if ( ref != 1 ) {
-        psError(PS_ERR_UNKNOWN, true, "Expected to find buffer reference count to be 1, but it was %d.", ref );
-        return 1;
-    }
-
-    psFree( mem );
-
-    return 0;
-}
-
-// Bug/Task #562 regression test.  Upon requesting more memory than is available, psRealloc shall call
-// the psMemExhaustedCallback.
-psS32 TPReallocOutOfMemory( void )
-{
-    psS32 * mem[ 100 ];
-    psMemExhaustedCallback cb;
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        mem[ lcv ] = NULL;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "Upon requesting more memory than is available, psRealloc shall call "
-              "the psMemExhaustedCallback.\n" );
-
-    exhaustedCallbackCalled = 0;
-
-    cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback );
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        mem[ lcv ] = ( psS32* ) psAlloc( 10 );
-    }
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        mem[ lcv ] = ( psS32* ) psRealloc( mem[ lcv ], SIZE_MAX/2 - 1000 );
-    }
-
-    psMemExhaustedCallbackSet( cb );
-
-    if ( exhaustedCallbackCalled == 0 ) {
-        psError(PS_ERR_UNKNOWN,true, "Called psRealloc with HUGE memory requirement and survived in %s!", __func__ );
-        return 1;
-    }
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        psFree( mem[ lcv ] );
-    }
-
-    return 0;
-}
-// Testpoint #450,  Upon requesting more memory than is available, psalloc shall call
-// the psMemExhaustedCallback.
-psS32 TPOutOfMemory( void )
-{
-    psS32 * mem[ 100 ];
-    psMemExhaustedCallback cb;
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        mem[ lcv ] = NULL;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "Upon requesting more memory than is available, psalloc shall call "
-              "the psMemExhaustedCallback.\n" );
-
-    exhaustedCallbackCalled = 0;
-
-    cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback );
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        mem[ lcv ] = ( psS32* ) psAlloc( SIZE_MAX/2 - 1000 );
-    }
-
-    psMemExhaustedCallbackSet( cb );
-
-    if ( exhaustedCallbackCalled == 0 ) {
-        psError(PS_ERR_UNKNOWN,true, "Called psAlloc with HUGE memory requirement and survived in %s!", __func__ );
-        return 1;
-    }
-
-    for ( psS32 lcv = 0; lcv < 100; lcv++ ) {
-        psFree( mem[ lcv ] );
-    }
-
-    return 0;
-}
-
-// Testpoint #451,  psRealloc shall increase/decrease memory buffer while preserving contents
-psS32 TPrealloc( void )
-{
-    psS32 * mem1;
-    psS32* mem2;
-    psS32* mem3;
-    const psS32 initialSize = 100;
-
-    psLogMsg( __func__, PS_LOG_INFO, "psRealloc shall increase/decrease memory buffer while "
-              "preserving contents" );
-
-    // allocate buffer with known values.
-    mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-    mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-    mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-    for ( psS32 lcv = 0;lcv < initialSize;lcv++ ) {
-        mem1[ lcv ] = mem2[ lcv ] = mem3[ lcv ] = lcv;
-    }
-
-    psMemCheckCorruption( 1 );
-    psLogMsg( __func__, PS_LOG_INFO, "Expanding memory buffer." );
-
-    // realloc to 2x
-    mem1 = ( psS32* ) psRealloc( mem1, 2 * initialSize * sizeof( psS32 ) );
-    mem2 = ( psS32* ) psRealloc( mem2, 2 * initialSize * sizeof( psS32 ) );
-    mem3 = ( psS32* ) psRealloc( mem3, 2 * initialSize * sizeof( psS32 ) );
-
-    // check values of initial block
-    for ( psS32 i = 0;i < initialSize;i++ ) {
-        if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) {
-            psError(PS_ERR_UNKNOWN,true, "Realloc didn't preserve the contents with expanding buffer in %s.",
-                    __func__ );
-            break;
-        }
-    }
-
-    psMemCheckCorruption( 1 );
-    psLogMsg( __func__, PS_LOG_INFO, "Shrinking memory buffer." );
-
-    // realloc to 1/2 initial value.
-    mem1 = ( psS32* ) psRealloc( mem1, ( initialSize / 2 ) * sizeof( psS32 ) );
-    mem2 = ( psS32* ) psRealloc( mem2, ( initialSize / 2 ) * sizeof( psS32 ) );
-    mem3 = ( psS32* ) psRealloc( mem3, ( initialSize / 2 ) * sizeof( psS32 ) );
-
-    // check values of initial block
-    for ( psS32 i = 0;i < initialSize / 2;i++ ) {
-        if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) {
-            psError(PS_ERR_UNKNOWN,true, "Realloc didn't preserve the contents with shrinking buffer in %s.",
-                    __func__ );
-            break;
-        }
-    }
-
-    psFree( mem1 );
-    psFree( mem2 );
-    psFree( mem3 );
-
-    return 0;
-}
-
-psS32 TPallocCallback( void )
-{
-    psS32 * mem1;
-    psS32* mem2;
-    psS32* mem3;
-    psS32 currentId = psMemGetId();
-    const psS32 initialSize = 100;
-    psS32 mark;
-
-    allocCallbackCalled = 0;
-    freeCallbackCalled = 0;
-    psMemAllocCallbackSet( memAllocCallback );
-    psMemFreeCallbackSet( memFreeCallback );
-
-    psMemAllocCallbackSetID( currentId + 1 );
-    psMemFreeCallbackSetID( currentId + 1 );
-
-    psLogMsg( __func__, PS_LOG_INFO, "call to psAlloc/psRealloc shall generate a callback if specified "
-              "memory ID is allocated." );
-
-    // allocate buffer with known values.
-    mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-    mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-    mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-
-    psFree( mem1 );
-    psFree( mem2 );
-    psFree( mem3 );
-
-    if ( allocCallbackCalled != 2 || freeCallbackCalled != 2 ) {
-        psError(PS_ERR_UNKNOWN,true, "alloc/free callbacks were not called the proper number of times in %s",
-                __func__ );
-        return 1;
-    }
-
-    allocCallbackCalled = 0;
-    freeCallbackCalled = 0;
-
-    mark = psMemGetId();
-
-    mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) );
-
-    psMemAllocCallbackSetID( mark );
-
-    mem1 = ( psS32* ) psRealloc( mem1, initialSize * 2 * sizeof( psS32 ) );
-
-    psFree( mem1 );
-
-    if ( allocCallbackCalled != 2 ) {
-        psError(PS_ERR_UNKNOWN,true, "realloc callbacks were not called the proper number of times in %s",
-                __func__ );
-        return 1;
-    }
-
-    return 0;
-
-}
-
-psS32 TPcheckLeaks( void )
-{
-    const psS32 numBuffers = 5;
-    psS32* buffers[ 5 ];
-    psS32 lcv;
-    psS32 currentId = psMemGetId();
-    psMemBlock** blks;
-    psS32 nLeaks = 0;
-    psS32 lineMark = 0;
-
-    psLogMsg( __func__, PS_LOG_INFO, "psMemCheckLeaks shall return the number of blocks above an ID "
-              "that are still allocated" );
-
-    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
-        lineMark = __LINE__ + 1;
-        buffers[ lcv ] = psAlloc( sizeof( psS32 ) );
-    }
-
-    for ( lcv = 1;lcv < numBuffers;lcv++ ) {
-        psFree( buffers[ lcv ] );
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "following psMemCheckLeaks call should produce one instance." );
-
-    nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false );
-
-    if ( nLeaks != 1 ) {
-        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks should have found 1 leak, but found %d in %s.", nLeaks, __func__ );
-        return 1;
-    }
-
-    if ( blks[ 0 ] ->lineno != lineMark ) {
-        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks found a leak other than the expected one (line %d vs %d) in %s.",
-                lineMark, blks[ 0 ] ->lineno, __func__ );
-        return 1;
-    }
-
-    psFree( buffers[ 0 ] );
-    psFree( blks );
-
-    psLogMsg( __func__, PS_LOG_INFO, "Testing psMemCheckLeaks again with a different leak location" );
-    psMemCheckLeaks(currentId,NULL,stderr, false);
-
-    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
-        lineMark = __LINE__ + 1;
-        buffers[ lcv ] = psAlloc( sizeof( psS32 ) );
-    }
-
-    for ( lcv = 0;lcv < numBuffers - 1;lcv++ ) {
-        psFree( buffers[ lcv ] );
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "following psMemCheckLeaks call should produce one error." );
-
-    nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false );
-
-    if ( nLeaks != 1 ) {
-        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks should have found 1 leak, but found %d in %s.", nLeaks, __func__ );
-        return 1;
-    }
-
-    if ( blks[ 0 ] ->lineno != lineMark ) {
-        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks found a leak other than the expected one in %s.", __func__ );
-        return 1;
-    }
-
-    psFree( buffers[ 4 ] );
-    psFree( blks );
-
-    psLogMsg( __func__, PS_LOG_INFO, "Testing psMemCheckLeaks again with multiple leak locations." );
-
-    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
-        lineMark = __LINE__ + 1;
-        buffers[ lcv ] = psAlloc( sizeof( psS32 ) );
-    }
-
-    for ( lcv = 0;lcv < numBuffers;lcv++ ) {
-        if ( lcv % 2 == 0 ) {
-            psFree( buffers[ lcv ] );
-        }
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "following psMemCheckLeaks call should produce two errors." );
-
-    nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false );
-
-    if ( nLeaks != 2 ) {
-        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks should have found 1 leak, but found %d in %s.", nLeaks, __func__ );
-        return 1;
-    }
-
-    if ( blks[ 0 ] ->lineno != lineMark ) {
-        psError(PS_ERR_UNKNOWN,true, "psMemCheckLeaks found a leak other than the expected one in %s.", __func__ );
-        return 1;
-    }
-
-    psFree( blks );
-    psFree( buffers[ 1 ] );
-    psFree( buffers[ 3 ] );
-
-    return 0;
-}
-
-psS32 TPmemCorruption( void )
-{
-    psS32 * buffer = NULL;
-    psS32 oldValue = 0;
-    psS32 corruptions = 0;
-    psMemProblemCallback cb;
-
-    psLogMsg( __func__, PS_LOG_INFO, "psMemCheckCorruption shall detect memory corruptions" );
-
-    buffer = psAlloc( sizeof( psS32 ) );
-
-    // cause memory corruption via buffer underflow
-    *buffer = 1;
-    buffer--;
-    oldValue = *buffer;
-    *buffer = 2;
-
-    problemCallbackCalled = 0;
-    cb = psMemProblemCallbackSet( memProblemCallback );
-
-    psLogMsg( __func__, PS_LOG_INFO, "psMemCheckCorruption should output an error message and "
-              "memProblemCallback callback should be called." );
-
-    corruptions = psMemCheckCorruption( 0 );
-
-    // restore the memory problem callback
-    psMemProblemCallbackSet( cb );
-
-    // restore the value, 'uncorrupting' the buffer
-    *buffer = oldValue;
-    buffer++;
-
-    psFree( buffer );
-
-    if ( corruptions != 1 ) {
-        psError(PS_ERR_UNKNOWN,true, "Expected one memory corruption but found %d in %s.",
-                corruptions, __func__ );
-        return 1;
-    }
-
-    if ( problemCallbackCalled != 1 ) {
-        psError(PS_ERR_UNKNOWN,true, "The memProblemCallback was not invoked but should have been in %s",
-                __func__ );
-        return 1;
-    }
-
-    return 0;
-
-}
-
-void memProblemCallback( psMemBlock *ptr, const char *file, unsigned int lineno )
-{
-    psLogMsg( __func__, PS_LOG_INFO, "memory callback called for id %lld (%s:%d).",
-              ptr->id, file, lineno );
-    problemCallbackCalled++;
-    return ;
-}
-
-psMemId memAllocCallback( const psMemBlock *ptr )
-{
-    psLogMsg( __func__, PS_LOG_INFO, "block %lld was (re)allocated", ptr->id );
-    allocCallbackCalled++;
-    return 1;
-}
-
-psMemId memFreeCallback( const psMemBlock *ptr )
-{
-    psLogMsg( __func__, PS_LOG_INFO, "block %lld was freed", ptr->id );
-    freeCallbackCalled++;
-    return 1;
-}
-
-psPtr TPOutOfMemoryExhaustedCallback( size_t size )
-{
-    psLogMsg( __func__, PS_LOG_INFO, "Custom MemExhaustedCallback was invoked." );
-    exhaustedCallbackCalled++;
-    return NULL;
-}
-
-psS32 TPmultipleFree( void )
-{
-
-    psPtr buffer = psAlloc( 1024 );
-    psPtr buffer2 = buffer;
-
-    psFree( buffer );
-
-    psLogMsg( __func__, PS_LOG_INFO, "Next should abort due to multiple freeing." );
-    psFree( buffer2 );
-
-    psError(PS_ERR_UNKNOWN,true,
-            "Multiple psFree call survived");
-
-    return 0;
-}
Index: unk/psLib/test/sysUtils/tst_psString.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psString.c	(revision 4546)
+++ 	(revision )
@@ -1,436 +1,0 @@
-/** @file  tst_psString.c
- *
- * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
- * vim: set cindent ts=8 sw=4 expandtab:
- *
- *  @brief Test driver for psString functions
- *
- *  This test driver contains the following test points for psStringCopy
- *  and psStringNCopy, and related string functions.
- *    1) Verify string copy - psStringCopy
- *    2) Verify empty string copy - psStringCopy
- *    3) Verify string copy with length - psStringNCopy
- *    4) Verify empty string copy with length - psStringNCopy
- *    5) Copy string to larger string - psStringNCopy
- *    6) Copy string with negative size - psStringNCopy
- *    7) Verifiy creation of string literal - PS_STRING
- *
- *  Return:   Number of test points which failed
- *
- *  @author  Eric Van Alst, MHPCC
- *
- *  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-06-30 00:33:03 $
- *
- *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
- *
- */
-
-#include <string.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-#define STR_0 "binky had a leeeetle lamb"
-
-static psS32 testStringCopy00(void);
-static psS32 testStringCopy01(void);
-static psS32 testStringCopy02(void);
-static psS32 testStringCopy03(void);
-static psS32 testStringCopy04(void);
-//static psS32 testStringCopy05(void);
-static psS32 testStringCopy06(void);
-
-static psS32 testStrAppend00(void);
-static psS32 testStrAppend01(void);
-static psS32 testStrAppend02(void);
-static psS32 testStrAppend03(void);
-
-static psS32 testStrPrepend00(void);
-static psS32 testStrPrepend01(void);
-static psS32 testStrPrepend02(void);
-static psS32 testStrPrepend03(void);
-
-testDescription tests[] = {
-                              {testStringCopy00, 0, "Verify string copy", 0, false},
-                              {testStringCopy01, 1, "Verify empty string copy", 0, false},
-                              {testStringCopy02, 2, "Verify string copy with length", 0, false},
-                              {testStringCopy03, 3, "Verify empty string copy with length", 0, false},
-                              {testStringCopy04, 4, "Copy string to larger string", 0, false},
-                              //                              {testStringCopy05, 5, "Copy string with negative size", 0, false},
-                              {testStringCopy06, 6, "Verify creation of string literal", 0, false},
-
-                              {testStrAppend00,  7, "Verify generic string append", 0, false},
-                              {testStrAppend01,  8, "Test append NULL handling", 0, false},
-                              {testStrAppend02,  9, "Verify append string creation", 0, false},
-                              {testStrAppend03, 10, "Test append null-op", 0, false},
-
-                              {testStrPrepend00,11, "Verify generic string prepend", 0, false},
-                              {testStrPrepend01,12, "Test prepend NULL handling", 0, false},
-                              {testStrPrepend02,13, "Verify prepend string creation", 0, false},
-                              {testStrPrepend03,14, "Test prepend null-op", 0, false},
-                              {NULL}
-                          };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psString", tests, argc, argv ) );
-}
-
-/*
-psS32 main( psS32 argc,
-          char * argv[] )
-{
-    psBool  tpResult = false;
-    char  stringval[20] = "E R R O R";
-    char  stringval1[20] = "e r r o r";
-    char  *stringvalnocopy = "F A I L";
-    char  *substringval = "e r r";
-    psS32   substringlen = 6;
-    char  *emptyval = "";
-    psS32   tpFails = 0;
-    char  *strResult;
-    psS32   increaseSize = 5;
-    psS32   negativeSize = -5;
-    psS32   result = 0;
-    psS32   result1 = 0;
-    psS32   memBlockAllocated = 0;
-    psMemBlock ***memBlockPtr = NULL;
- 
-*/
-
-static psS32 testStringCopy00(void)
-{
-    char  stringval[20] = "E R R O R";
-    psS32   result = 0;
-    psS32   result1 = 0;
-    char  *strResult;
-
-    // Test point #1 Verify string copy - psStringCopy
-    strResult = psStringCopy(stringval);
-    // Perform string compare
-    result = strcmp(strResult, stringval);
-    // Modify original string
-    stringval[0]='G';
-    result1 = strcmp(strResult, stringval);
-    stringval[0]='E';
-    if ( ( result != 0 ) || ( result1 == 0) ) {
-        fprintf(stderr, "Failed test point #1 strcmp result = %d expected 0\n",result);
-        fprintf(stderr, "                               src = %s expected %s\n",
-                strResult, stringval);
-        fprintf(stderr, "             changed strcmp result = %d expected 1\n",result1);
-        fprintf(stderr, "             changed           src = %s expected %s\n",strResult,
-                stringval);
-        return 1;
-    }
-
-    // Free memory allocated
-    psFree(strResult);
-
-    return 0;
-}
-
-static psS32 testStringCopy01(void)
-{
-    char  *emptyval = "";
-    psS32   result = 0;
-    char  *strResult;
-
-    // Test point #2 Verify empty string copy - psStringCopy
-    strResult = psStringCopy(emptyval);
-    // Perform string compare
-    result = strcmp(strResult, emptyval);
-    if ( result != 0 ) {
-        fprintf(stderr,"Failed test point #2 strcmp result = %d expected 0\n",result);
-        fprintf(stderr,"                               src = %s expected %s\n",
-                strResult, emptyval);
-        return 1;
-    }
-
-    // Free memory allocated
-    psFree(strResult);
-
-    return 0;
-}
-
-static psS32 testStringCopy02(void)
-{
-    psS32   result = 0;
-    psS32   result1 = 0;
-    char  *strResult;
-    char  stringval1[20] = "e r r o r";
-    psS32   substringlen = 5;
-    char  *substringval = "e r r";
-
-    // Test point #3 Verify string copy with length - psStringNCopy
-    strResult = psStringNCopy(stringval1, substringlen);
-    // Perform string compare and get string length
-    result = strncmp(strResult, substringval, substringlen);
-    // Change original string
-    stringval1[0] = 'g';
-    result1 = strncmp(strResult, substringval, substringlen);
-    if ( ( result != 0 ) || ( result1 != 0 ) ) {
-        fprintf(stderr,"Failed test point #3 strcmp result = %d expected 0\n",result);
-        fprintf(stderr,"                               src = %s expected %s\n",
-                strResult, substringval);
-        fprintf(stderr,"             changed strcmp result = %d expected 0\n",result1);
-        fprintf(stderr,"                               src = %s expected %s\n",
-                strResult, substringval);
-        return 1;
-    }
-    // Free memory allocated
-    psFree(strResult);
-
-    return 0;
-}
-
-static psS32 testStringCopy03(void)
-{
-    psS32   result = 0;
-    psS32   result1 = 0;
-    char  *strResult;
-    char  *stringvalnocopy = "F A I L";
-
-    // Test point #4 Verify empty string copy with length - psStringNCopy
-    strResult = psStringNCopy(stringvalnocopy, 0);
-    // Perform string compare and get sting length
-    result = strcmp(strResult, stringvalnocopy);
-    result1 = strlen(strResult);
-    if ( result == 0 ) {
-        fprintf(stderr,"Failed test point #4 strcmp result = %d didn't expected %d\n",result,0);
-        fprintf(stderr,"                               src = %s didn't expected %s\n",
-                strResult, stringvalnocopy);
-        return 1;
-    }
-    // Free memory
-    psFree(strResult);
-
-    return 0;
-}
-
-static psS32 testStringCopy04(void)
-{
-    psS32   result = 0;
-    psS32   result1 = 0;
-    char  *strResult;
-    char  stringval[20] = "E R R O R";
-    psS32   increaseSize = 5;
-
-    // Test point #5 Copy string to larger string - psStringNCopy
-    strResult = psStringNCopy(stringval, (strlen(stringval) + increaseSize));
-    // Perform string compare and get string length
-    result = strcmp(strResult, stringval);
-    result1 = strlen(strResult);
-    // The strings should still compare
-    if ( ( result != 0 ) ||
-            ( result1 != strlen(stringval) ) ) {
-        fprintf(stderr,"Failed test point #5 strcmp result = %d expected %d\n",result,0);
-        fprintf(stderr,"                               src = %s expected %s\n",
-                strResult, stringval);
-        fprintf(stderr,"                     strlne result = %d expected %d\n",result1,
-                (psS32)strlen(stringval));
-        return 1;
-    }
-    // Free memory
-    psFree(strResult);
-
-    return 0;
-}
-
-// XXX This test needs to be modified to check for maximum size
-//     This will require a mod to psStringNCopy source to check for maximum size
-//
-//static psS32 testStringCopy05(void)
-//{
-//    char  *strResult;
-//    char  stringval[20] = "E R R O R";
-//    psS32   negativeSize = -5;
-//
-//    // Test point #6 Copy string with negative size - psStringNCopy
-//    strResult = psStringNCopy(stringval, negativeSize);
-//    if ( strResult != NULL ) {
-//        fprintf(stderr,"Failed test point #6 return value = %p expected NULL\n",
-//                strResult);
-//        return 1;
-//    }
-//    // Memory should not have been allocated
-//
-//    return 0;
-//}
-
-static psS32 testStringCopy06(void)
-{
-    char  *strResult;
-    char  stringval[20] = "E R R O R";
-    psS32   result = 0;
-
-    // Test point #7 Verify creation of string literal - PS_STRING
-    strResult = PS_STRING(E R R O R);
-    result = strcmp(strResult, stringval);
-    if ( result != 0 ) {
-        fprintf(stderr,"Failed test point #7 strcmp result = %d expected %d",result,0);
-        return 1;
-    }
-    // Memory should not have been allocated
-
-    return 0;
-}
-
-static psS32 testStrAppend00(void)
-{
-    char *str=NULL;
-    int result = 0;
-
-    str = psStringCopy("3.14159");
-
-    psStringAppend(&str, "%d%s", 2653589, "79323846");
-
-    // Test point: Verify string append
-    result = strcmp(str, "3.14159265358979323846");
-    if ( result != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-
-    psFree(str);
-
-    return 0;
-}
-
-static psS32 testStrAppend01(void)
-{
-    ssize_t sz;
-    char *str=NULL;
-
-    // test nonsensical invocations ...
-    sz = psStringAppend(NULL, NULL);
-    if ( sz != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-    sz = psStringAppend(&str, NULL);
-    if ( sz != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-
-    return 0;
-}
-
-static psS32 testStrAppend02(void)
-{
-    char *str=NULL;
-    int result;
-
-    // test string creation
-    psStringAppend(&str, "%s", "fubar");
-    result = strcmp(str, "fubar");
-    if ( result != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-
-    psFree(str);
-
-    return 0;
-}
-
-static psS32 testStrAppend03(void)
-{
-    char *str=NULL;
-    int result;
-
-    str = psStringCopy(STR_0);
-
-    // test null-op
-    psStringAppend(&str, "");
-    result = strcmp(str, STR_0);
-    if ( result != 0 ) {
-        fprintf(stderr,"Failed test point str=[%s]\n", str);
-        return 1;
-    }
-
-    psFree(str);
-
-    return 0;
-}
-
-static psS32 testStrPrepend00(void)
-{
-    char *str=NULL;
-    int result = 0;
-
-    str = psStringCopy("79323846");
-
-    psStringPrepend(&str, "%s%d","3.14159", 2653589 );
-
-    // Test point: Verify string append
-    result = strcmp(str, "3.14159265358979323846");
-    if ( result != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-
-    psFree(str);
-
-    return 0;
-}
-
-static psS32 testStrPrepend01(void)
-{
-    ssize_t sz;
-    char *str=NULL;
-
-    // test nonsensical invocations ...
-    sz = psStringPrepend(NULL, NULL);
-    if ( sz != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-    sz = psStringPrepend(&str, NULL);
-    if ( sz != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-
-    return 0;
-}
-
-static psS32 testStrPrepend02(void)
-{
-    char *str=NULL;
-    int result;
-
-    // test string creation
-    psStringPrepend(&str, "%s", "fubar");
-    result = strcmp(str, "fubar");
-    if ( result != 0 ) {
-        fprintf(stderr,"%s","Failed test point\n");
-        return 1;
-    }
-
-    psFree(str);
-
-    return 0;
-}
-
-static psS32 testStrPrepend03(void)
-{
-    char *str=NULL;
-    int result;
-
-    str = psStringCopy(STR_0);
-
-    // test null-op
-    psStringPrepend(&str, "");
-    result = strcmp(str, STR_0);
-    if ( result != 0 ) {
-        fprintf(stderr,"Failed test point str=[%s]\n", str);
-        return 1;
-    }
-
-    psFree(str);
-
-    return 0;
-}
Index: unk/psLib/test/sysUtils/tst_psTrace.c
===================================================================
--- /trunk/psLib/test/sysUtils/tst_psTrace.c	(revision 4546)
+++ 	(revision )
@@ -1,365 +1,0 @@
-/*****************************************************************************
-    This code will test whether trace levels can be set successfully.
- 
-    XXX: For the last two testpoints, must verify that the results are
-    correct, and put that verification in the test as well.
- *****************************************************************************/
-#include <stdio.h>
-#include "pslib_strict.h"
-#include "psTest.h"
-
-
-static psS32 testTrace00(void);
-static psS32 testTrace01(void);
-static psS32 testTrace02(void);
-static psS32 testTrace03(void);
-static psS32 testTrace04(void);
-static psS32 testTrace05(void);
-static psS32 testTrace05a(void);
-static psS32 testTrace06(void);
-static psS32 testTrace08(void);
-
-testDescription tests[] = {
-                              {testTrace00, 0, "psTraceSetLevel() and psTraceGetLevel()", 0, false},
-                              {testTrace01, 1, "psTraceSetLevel(): set multiple components in one call", 0, false},
-                              {testTrace02, 2, "psTraceSetLevel(): test static/dynamic inheritance", 0, false},
-                              {testTrace03, 3, "psTraceReset()", 0, false},
-                              {testTrace04, 4, "psTrace()", 0, false},
-                              {testTrace05, 5, "psTracePrintLevels()", 0, false},
-                              {testTrace05a, 5, "optional leading dot and psTracePrintLevels()", 0, false},
-                              {testTrace06, 6, "Testing psTraceReset", 0, false},
-                              {testTrace08, 8, "Testing ", 0, false},
-                              {NULL}
-                          };
-
-testDescription tests2[] = {
-                               {testTrace08, 8, "Testing ", 0, false},
-                           };
-
-psS32 main( psS32 argc, char* argv[] )
-{
-    psLogSetLevel( PS_LOG_INFO );
-
-    return ( ! runTestSuite( stderr, "psTrace", tests, argc, argv ) );
-}
-
-static psS32 testTrace00(void)
-{
-    psS32 i;
-    psS32 lev = 0;
-
-    psTraceSetDestination(stderr);
-
-    for (i=0;i<10;i++) {
-        (void)psTraceSetLevel(".", i);
-        lev = psTraceGetLevel(".");
-        if (lev != i) {
-            fprintf(stderr,"ERROR: (.) expected trace level was %d, actual was %d\n",
-                    i, lev);
-            return 1;
-        }
-    }
-    (void)psTraceSetLevel(".", 3);
-
-    for (i=5;i<10;i++) {
-        (void)psTraceSetLevel(".NODE00", i);
-        lev = psTraceGetLevel(".NODE00");
-        if (lev != i) {
-            fprintf(stderr,"ERROR: (.NODE00) expected trace level was %d, actual was %d\n",
-                    i, lev);
-            return 2;
-        }
-
-        lev = psTraceGetLevel(".");
-        if (lev != 3) {
-            fprintf(stderr,"ERROR: (.) expected trace level was %d, actual was %d\n",
-                    i, 3);
-            return 3;
-        }
-    }
-
-
-    (void)psTraceSetLevel(".NODE00.NODE01", 4);
-    for (i=0;i<10;i++) {
-        (void)psTraceSetLevel(".NODE00.NODE01", i);
-        lev = psTraceGetLevel(".NODE00.NODE01");
-        if (lev != i) {
-            fprintf(stderr,"ERROR: (.NODE00.NODE01) expected trace level was %d, actual was %d\n",
-                    i, lev);
-            return 4;
-        }
-    }
-
-    return 0;
-}
-
-static psS32 testTrace01(void)
-{
-    psTraceSetDestination(stderr);
-    (void)psTraceSetLevel(".A.B.C.D.E", 5);
-
-    psTrace(".A.C.D.C",1,"You should not see this.\n");
-    psTrace(".A.B.C.D.E",2,"You should see this.\n");
-    psTrace(".A.B.C.D.E.F",3,"You should see this too.\n");
-
-    psTracePrintLevels();
-
-    return 0;
-}
-
-static psS32 testTrace02(void)
-{
-    psTraceReset();
-    psTraceSetDestination(stderr);
-    psTraceSetLevel(".A.B", 2);
-    psTraceSetLevel(".A.B.C.D.E", 5);
-    psTracePrintLevels();
-    psTraceSetLevel(".A.B", 10);
-    psTracePrintLevels();
-
-    if (10 != psTraceGetLevel(".A.B.C")) {
-        fprintf(stderr,"ERROR: .A.B.C did not dynamically inherit a trace level (%d)\n",
-                psTraceGetLevel(".A.B.C"));
-        return 2;
-    }
-
-    if (10 != psTraceGetLevel(".A.B.C.D")) {
-        fprintf(stderr,"ERROR: .A.B.C.D did not dynamically inherit a trace level (%d)\n", psTraceGetLevel(".A.B.C.D"));
-        return 2;
-    }
-
-    if (5 != psTraceGetLevel(".A.B.C.D.E")) {
-        fprintf(stderr,"ERROR: .A.B.C.D.E did dynamically inherit a trace level (%d)\n", psTraceGetLevel(".A.B.C.D.E"));
-        return 2;
-    }
-
-    return 0;
-}
-
-static psS32 testTrace03(void)
-{
-    psS32 i = 0;
-    psS32 lev = 0;
-
-    psTraceSetDestination(stderr);
-
-    for (i=0;i<10;i++) {
-        (void)psTraceSetLevel(".", i);
-        psTraceReset();
-
-        lev = psTraceGetLevel(".");
-        if (lev != PS_UNKNOWN_TRACE_LEVEL) {
-            fprintf(stderr,"ERROR: expected trace level was %d, actual was %d\n",
-                    PS_UNKNOWN_TRACE_LEVEL, lev);
-            return 1;
-        }
-    }
-    (void)psTraceSetLevel(".", 5);
-    (void)psTraceSetLevel(".a", 4);
-    (void)psTraceSetLevel(".a.b", 3);
-    (void)psTraceSetLevel(".a.b.c", 2);
-    if ((5 != psTraceGetLevel(".")) ||
-            (4 != psTraceGetLevel(".a")) ||
-            (3 != psTraceGetLevel(".a.b")) ||
-            (2 != psTraceGetLevel(".a.b.c"))) {
-        fprintf(stderr,"ERROR: trace successFlag = false;levels were not settable?\n");
-        return 2;
-    }
-
-    psTraceReset();
-    if ((PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".")) ||
-            (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a")) ||
-            (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b")) ||
-            (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b.c"))) {
-        fprintf(stderr,"ERROR: trace levels were not reset properly\n");
-        return 3;
-    }
-
-    return 0;
-}
-
-
-static psS32 testTrace04(void)
-{
-    FILE *fp;
-    psS32 nb = 0;
-
-    fp = fopen("tst_psTrace02_OUT", "w");
-    for (nb = 0 ; nb<4;nb++) {
-        if (nb == 0)
-            psTraceSetDestination(stdout);
-        if (nb == 1)
-            psTraceSetDestination(stderr);
-        if (nb == 2)
-            psTraceSetDestination(NULL);
-        if (nb == 3)
-            psTraceSetDestination(fp);
-
-        (void)psTraceSetLevel(".", 4);
-        psTrace(".", 5, "(0) This message should not be displayed (%x)\n",
-                0xbeefface);
-        (void)psTraceSetLevel(".", 7);
-        psTrace(".", 5, "(0) This message should be displayed (%x)\n",
-                0xbeefface);
-
-        (void)psTraceSetLevel(".a", 4);
-        psTrace(".a", 5, "(1) This message should not be displayed (%x)\n",
-                0xbeefface);
-        (void)psTraceSetLevel(".a", 7);
-        psTrace(".a", 5, "(1) This message should be displayed (%x)\n",
-                0xbeefface);
-
-
-        (void)psTraceSetLevel(".a.b", 4);
-        psTrace(".a.b", 5, "(2) This message should not be displayed (%x)\n",
-                0xbeefface);
-        (void)psTraceSetLevel(".a.b", 7);
-        psTrace(".a.b", 5, "(2) This message should be displayed (%x)\n",
-                0xbeefface);
-
-    }
-
-    fclose(fp);
-
-    return(0);
-}
-
-static psS32 testTrace05(void)
-{
-    psTraceSetDestination(stderr);
-
-    (void)psTraceSetLevel(".", 9);
-
-    (void)psTraceSetLevel(".a", 8);
-    (void)psTraceSetLevel(".b", 7);
-    (void)psTraceSetLevel(".c", 5);
-
-    (void)psTraceSetLevel(".a.a", 4);
-    (void)psTraceSetLevel(".a.b", 3);
-
-    (void)psTraceSetLevel(".b.a", 2);
-    (void)psTraceSetLevel(".b.b", 1);
-
-    (void)psTraceSetLevel(".c.a", 0);
-    (void)psTraceSetLevel(".c.b", 3);
-    (void)psTraceSetLevel(".c.c", 5);
-
-    psTracePrintLevels();
-
-    return 0;
-
-}
-
-static psS32 testTrace05a(void)
-{
-    (void)psTraceSetLevel(".", 9);
-
-    (void)psTraceSetLevel("a", 8);
-    (void)psTraceSetLevel("b", 7);
-    (void)psTraceSetLevel("c", 5);
-
-    (void)psTraceSetLevel("a.a", 4);
-    (void)psTraceSetLevel("a.b", 3);
-
-    (void)psTraceSetLevel("b.a", 2);
-    (void)psTraceSetLevel("b.b", 1);
-
-    (void)psTraceSetLevel("c.a", 0);
-    (void)psTraceSetLevel("c.b", 3);
-    (void)psTraceSetLevel("c.c", 5);
-
-    psTracePrintLevels();
-
-    return 0;
-
-}
-
-static psS32 testTrace06(void)
-{
-    psTraceSetDestination(stderr);
-
-    (void)psTraceSetLevel(".", 9);
-
-    (void)psTraceSetLevel(".a", 8);
-    (void)psTraceSetLevel(".b", 7);
-    (void)psTraceSetLevel(".c", 5);
-
-    (void)psTraceSetLevel(".a.a", 4);
-    (void)psTraceSetLevel(".a.b", 3);
-
-    (void)psTraceSetLevel(".b.a", 2);
-    (void)psTraceSetLevel(".b.b", 1);
-
-    (void)psTraceSetLevel(".c.a", 0);
-    (void)psTraceSetLevel(".c.b", 3);
-    (void)psTraceSetLevel(".c.c", 5);
-
-    psTraceReset();
-
-    if ((psTraceGetLevel(".")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".a")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".b")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".c")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".a.a")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".a.b")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".b.a")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".b.b")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".c.a")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".c.b")!=PS_UNKNOWN_TRACE_LEVEL) ||
-            (psTraceGetLevel(".c.c")!=PS_UNKNOWN_TRACE_LEVEL)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-// Ensure that the leading dot in the component names are optional.
-static psS32 testTrace08(void)
-{
-    psTraceReset();
-    (void)psTraceSetLevel(".", 9);
-
-    (void)psTraceSetLevel(".a", 8);
-    (void)psTraceSetLevel(".b", 7);
-    (void)psTraceSetLevel(".c", 5);
-
-    (void)psTraceSetLevel(".a.a", 4);
-    (void)psTraceSetLevel(".a.b", 3);
-
-    (void)psTraceSetLevel(".b.a", 2);
-    (void)psTraceSetLevel(".b.b", 1);
-
-    (void)psTraceSetLevel(".c.a", 0);
-    (void)psTraceSetLevel(".c.b", 3);
-    (void)psTraceSetLevel(".c.c", 5);
-
-    psTracePrintLevels();
-
-    if ((psTraceGetLevel(".")!=9) ||
-            (psTraceGetLevel("a")!=8) ||
-            (psTraceGetLevel("b")!=7) ||
-            (psTraceGetLevel("c")!=5) ||
-            (psTraceGetLevel("a.a")!=4) ||
-            (psTraceGetLevel("a.b")!=3) ||
-            (psTraceGetLevel("b.a")!=2) ||
-            (psTraceGetLevel("b.b")!=1) ||
-            (psTraceGetLevel("c.a")!=0) ||
-            (psTraceGetLevel("c.b")!=3) ||
-            (psTraceGetLevel("c.c")!=5)) {
-        printf("psTraceGetLevel(.) is %d\n", psTraceGetLevel("."));
-        printf("psTraceGetLevel(a) is %d\n", psTraceGetLevel("a"));
-        printf("psTraceGetLevel(b) is %d\n", psTraceGetLevel("b"));
-        printf("psTraceGetLevel(c) is %d\n", psTraceGetLevel("c"));
-        printf("psTraceGetLevel(a.a) is %d\n", psTraceGetLevel("a.a"));
-        printf("psTraceGetLevel(a.b) is %d\n", psTraceGetLevel("a.b"));
-        printf("psTraceGetLevel(b.a) is %d\n", psTraceGetLevel("b.a"));
-        printf("psTraceGetLevel(b.b) is %d\n", psTraceGetLevel("b.b"));
-        printf("psTraceGetLevel(c.a) is %d\n", psTraceGetLevel("c.a"));
-        printf("psTraceGetLevel(c.b) is %d\n", psTraceGetLevel("c.b"));
-        printf("psTraceGetLevel(c.c) is %d\n", psTraceGetLevel("c.c"));
-
-        return 1;
-    }
-
-    return 0;
-}
Index: unk/psLib/test/sysUtils/verified/tst_psAbort.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psAbort.stderr	(revision 4546)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psAbort.c                                              *
-*            TestPoint: psAbort{Multiple type values in abort message}             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|testAbort00
-    ALL TYPES intval = 1 longval = 2 floatval = 3.010000 charval = E strval = E R R O R
-
----> TESTPOINT PASSED (psAbort{Multiple type values in abort message} | tst_psAbort.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psAbort.c                                              *
-*            TestPoint: psAbort{String values in abort message}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|__LINE__
-    NO_VALUES
-
----> TESTPOINT PASSED (psAbort{String values in abort message} | tst_psAbort.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psAbort.c                                              *
-*            TestPoint: psAbort{Empty strings in abort message}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|
-
----> TESTPOINT PASSED (psAbort{Empty strings in abort message} | tst_psAbort.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psConfigure.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psConfigure.stderr	(revision 4546)
+++ 	(revision )
@@ -1,11 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psConfigure.c                                          *
-*            TestPoint: psConfigure{Return current psLib version}                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|psLibVersion00
-    Current psLib version is: pslib-vX.X.X
-
----> TESTPOINT PASSED (psConfigure{Return current psLib version} | tst_psConfigure.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psError.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psError.stderr	(revision 4546)
+++ 	(revision )
@@ -1,112 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psError()}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|testError00 (FILE:LINENO)
-    ALL TYPES intval = 1 longval = 2 floatval = 3.010000 charval = E strval = E R R O R
-<DATE><TIME>|<HOST>|E|testError00 (FILE:LINENO)
-    NO VALUES
-<DATE><TIME>|<HOST>|E|testError00 (FILE:LINENO)
-
----> TESTPOINT PASSED (psError{psError()} | tst_psError.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psErrorMsg(),psErrorStackPrint()}                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
-    Error code = 262
-ERROR STACK PRINT Test1A -> testError01 (FILE:LINENO): parameter is out-of-range
-     Error code = 262
-<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
-    Error code = 263
-ERROR STACK PRINT Test1B -> testError01 (FILE:LINENO): parameter is of unsupported type
-     Error code = 263
-<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
-    Error code = -1
-ERROR STACK PRINT Test1D -> testError01 (FILE:LINENO): (null)
-     Error code = -1
-<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
-    Error code = 262
-ERROR STACK PRINT Test1E -> testError01 (FILE:LINENO): (null)
-     Error code = -1
- -> testError01 (FILE:LINENO): parameter is out-of-range
-     Error code = 262
-<DATE><TIME>|<HOST>|E|testError01 (FILE:LINENO)
-    Errno code = 9
-ERROR STACK PRINT Test1F -> testError01 (FILE:LINENO): Bad file descriptor
-     Errno code = 9
-
----> TESTPOINT PASSED (psError{psErrorMsg(),psErrorStackPrint()} | tst_psError.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psErrorStackPrintV()}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|testError02 (FILE:LINENO)
-    Error code = 262
-ERROR STACK PRINT Test2A -> testError02 (FILE:LINENO): parameter is out-of-range
-     Error code = 262
-
----> TESTPOINT PASSED (psError{psErrorStackPrintV()} | tst_psError.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psErrorGet(),psErrorLast()}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|testError03 (FILE:LINENO)
-    Error code = 262
-<DATE><TIME>|<HOST>|E|testError03 (FILE:LINENO)
-    Error code = 263
-<DATE><TIME>|<HOST>|E|testError03 (FILE:LINENO)
-    Error code = 264
-
----> TESTPOINT PASSED (psError{psErrorGet(),psErrorLast()} | tst_psError.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psErrorClear()}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|E|testError04 (FILE:LINENO)
-    Error code = 262
-<DATE><TIME>|<HOST>|E|testError04 (FILE:LINENO)
-    Error code = 263
-<DATE><TIME>|<HOST>|E|testError04 (FILE:LINENO)
-    Error code = 264
-
----> TESTPOINT PASSED (psError{psErrorClear()} | tst_psError.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psErrorCodeString()}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|tst_psError05
-    parameter is out-of-range
-
----> TESTPOINT PASSED (psError{psErrorCodeString()} | tst_psError.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psError.c                                              *
-*            TestPoint: psError{psErrorRegister()}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|testErrorRegister
-    Following should be an error.
-<DATE><TIME>|<HOST>|E|psErrorRegister (FILE:LINENO)
-    Specified psErrorDescription pointer can not be NULL.
-
----> TESTPOINT PASSED (psError{psErrorRegister()} | tst_psError.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psLogMsg.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg.stderr	(revision 4546)
+++ 	(revision )
@@ -1,168 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLogMsg.c                                             *
-*            TestPoint: psLogMsg{default log levels, printf-style strings}         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|testLogMsg00
-    Hello World!  My level is 0 0.000000 beep beep
-<DATE><TIME>|<HOST>|E|testLogMsg00
-    Hello World!  My level is 1 1.000000 beep beep
-<DATE><TIME>|<HOST>|W|testLogMsg00
-    Hello World!  My level is 2 2.000000 beep beep
-<DATE><TIME>|<HOST>|I|testLogMsg00
-    Hello World!  My level is 3 3.000000 beep beep
-
----> TESTPOINT PASSED (psLogMsg{default log levels, printf-style strings} | tst_psLogMsg.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLogMsg.c                                             *
-*            TestPoint: psLogMsg{default log levels, psVLogMsg()}                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|testLogMsg01
-    Hello World!  My level is 0 0.000000 beep beep
-<DATE><TIME>|<HOST>|E|testLogMsg01
-    Hello World!  My level is 1 1.000000 beep beep
-<DATE><TIME>|<HOST>|W|testLogMsg01
-    Hello World!  My level is 2 2.000000 beep beep
-<DATE><TIME>|<HOST>|I|testLogMsg01
-    Hello World!  My level is 3 3.000000 beep beep
-
----> TESTPOINT PASSED (psLogMsg{default log levels, psVLogMsg()} | tst_psLogMsg.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLogMsg.c                                             *
-*            TestPoint: psLogMsg{psLogSetLevel()}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|testLogMsg02
-    Hello World!  My level is 0
-<DATE><TIME>|<HOST>|E|testLogMsg02
-    Hello World!  My level is 1
-<DATE><TIME>|<HOST>|W|testLogMsg02
-    Hello World!  My level is 2
-<DATE><TIME>|<HOST>|I|testLogMsg02
-    Hello World!  My level is 3
-<DATE><TIME>|<HOST>|4|testLogMsg02
-    Hello World!  My level is 4
-<DATE><TIME>|<HOST>|5|testLogMsg02
-    Hello World!  My level is 5
-<DATE><TIME>|<HOST>|6|testLogMsg02
-    Hello World!  My level is 6
-<DATE><TIME>|<HOST>|7|testLogMsg02
-    Hello World!  My level is 7
-<DATE><TIME>|<HOST>|8|testLogMsg02
-    Hello World!  My level is 8
-<DATE><TIME>|<HOST>|9|testLogMsg02
-    Hello World!  My level is 9
-<DATE><TIME>|<HOST>|4|testLogMsg02
-    This should  be displayed (level 4)
-
----> TESTPOINT PASSED (psLogMsg{psLogSetLevel()} | tst_psLogMsg.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLogMsg.c                                             *
-*            TestPoint: psLogMsg{psLogSetFormat()}                                 *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-------------- psLogSetFormat() -------------
-<DATE><TIME>|<HOST>|A|testLogMsg03
-    Hello World!  My level is 0
-<DATE><TIME>|<HOST>|E|testLogMsg03
-    Hello World!  My level is 1
-<DATE><TIME>|<HOST>|W|testLogMsg03
-    Hello World!  My level is 2
-<DATE><TIME>|<HOST>|I|testLogMsg03
-    Hello World!  My level is 3
-------------- psLogSetFormat(NULL) -------------
-------------- psLogSetFormat(T) -------------
-<DATE><TIME>
-
-<DATE><TIME>
-
-<DATE><TIME>
-
-<DATE><TIME>
-
-------------- psLogSetFormat(H) -------------
-<HOST>
-<HOST>
-<HOST>
-<HOST>
-------------- psLogSetFormat(L) -------------
-A
-
-E
-
-W
-
-I
-
-------------- psLogSetFormat(N) -------------
-testLogMsg03
-
-testLogMsg03
-
-testLogMsg03
-
-testLogMsg03
-
-------------- psLogSetFormat(M) -------------
-    Hello World!  My level is 0
-    Hello World!  My level is 1
-    Hello World!  My level is 2
-    Hello World!  My level is 3
-------------- psLogSetFormat(THLNM) -------------
-<DATE><TIME>|<HOST>|A|testLogMsg03
-    Hello World!  My level is 0
-<DATE><TIME>|<HOST>|E|testLogMsg03
-    Hello World!  My level is 1
-<DATE><TIME>|<HOST>|W|testLogMsg03
-    Hello World!  My level is 2
-<DATE><TIME>|<HOST>|I|testLogMsg03
-    Hello World!  My level is 3
-
----> TESTPOINT PASSED (psLogMsg{psLogSetFormat()} | tst_psLogMsg.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLogMsg.c                                             *
-*            TestPoint: psLogMsg{Output Format}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|Under 15 chars
-    Hello World!
-<DATE><TIME>|<HOST>|A|This string is more than 15 chars
-    Hello World!
-<DATE><TIME>|<HOST>|A|testLogMsg04
-    Line #1
-<DATE><TIME>|<HOST>|A|testLogMsg04
-    Line #2
-<DATE><TIME>|<HOST>|A|testLogMsg04
-    Line #3
-<DATE><TIME>|<HOST>|A|testLogMsg04
-    Line #4
-
----> TESTPOINT PASSED (psLogMsg{Output Format} | tst_psLogMsg.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psLogMsg.c                                             *
-*            TestPoint: psLogMsg{psLogSetDestination()}                            *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|A|testLogMsg05
-    Hello World!  My level is 0
-<DATE><TIME>|<HOST>|E|testLogMsg05
-    Hello World!  My level is 1
-<DATE><TIME>|<HOST>|W|testLogMsg05
-    Hello World!  My level is 2
-<DATE><TIME>|<HOST>|I|testLogMsg05
-    Hello World!  My level is 3
-
----> TESTPOINT PASSED (psLogMsg{psLogSetDestination()} | tst_psLogMsg.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psLogMsg.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psLogMsg.stdout	(revision 4546)
+++ 	(revision )
@@ -1,22 +1,0 @@
---------------- psLogSetDestination(PS_LOG_NONE) ----------------
-------------- psLogSetDestination(PS_LOG_TO_STDERR) -------------
-------------- psLogSetDestination(PS_LOG_TO_STDOUT) -------------
-<DATE><TIME>|<HOST>|A|testLogMsg05
-    Hello World!  My level is 0
-<DATE><TIME>|<HOST>|E|testLogMsg05
-    Hello World!  My level is 1
-<DATE><TIME>|<HOST>|W|testLogMsg05
-    Hello World!  My level is 2
-<DATE><TIME>|<HOST>|I|testLogMsg05
-    Hello World!  My level is 3
---------------- psLogSetDestination(file:log.txt) ---------------
---------------------- The Contents of log.txt -------------------
-<DATE><TIME>|<HOST>|A|testLogMsg05
-    Hello World!  My level is 0
-<DATE><TIME>|<HOST>|E|testLogMsg05
-    Hello World!  My level is 1
-<DATE><TIME>|<HOST>|W|testLogMsg05
-    Hello World!  My level is 2
-<DATE><TIME>|<HOST>|I|testLogMsg05
-    Hello World!  My level is 3
---------------- psLogSetDestination(file:/eva/log.txt) ----------
Index: unk/psLib/test/sysUtils/verified/tst_psMemory.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psMemory.stderr	(revision 4546)
+++ 	(revision )
@@ -1,152 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{checkBufferPositive}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPCheckBufferPositive
-    psAlloc shall allocate memory blocks writeable by caller.
-
----> TESTPOINT PASSED (psMemory{checkBufferPositive} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{outOfMemory}                                      *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPOutOfMemory
-    Upon requesting more memory than is available, psalloc shall call the psMemExhaustedCallback.
-<DATE><TIME>|<HOST>|I|TPOutOfMemoryExhaustedCallback
-    Custom MemExhaustedCallback was invoked.
-<DATE><TIME>|<HOST>|A|p_psAlloc
-    Failed to allocate <N> bytes at FILE:LINENO
-
----> TESTPOINT PASSED (psMemory{outOfMemory} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{reallocOutOfMemory}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPReallocOutOfMemory
-    Upon requesting more memory than is available, psRealloc shall call the psMemExhaustedCallback.
-<DATE><TIME>|<HOST>|I|TPOutOfMemoryExhaustedCallback
-    Custom MemExhaustedCallback was invoked.
-<DATE><TIME>|<HOST>|A|p_psRealloc
-    Failed to reallocate <N> bytes at FILE:LINENO
-
----> TESTPOINT PASSED (psMemory{reallocOutOfMemory} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{psRealloc}                                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPrealloc
-    psRealloc shall increase/decrease memory buffer while preserving contents
-<DATE><TIME>|<HOST>|I|TPrealloc
-    Expanding memory buffer.
-<DATE><TIME>|<HOST>|I|TPrealloc
-    Shrinking memory buffer.
-
----> TESTPOINT PASSED (psMemory{psRealloc} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{allocCallback}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPallocCallback
-    call to psAlloc/psRealloc shall generate a callback if specified memory ID is allocated.
-<DATE><TIME>|<HOST>|I|memAllocCallback
-    block 2 was (re)allocated
-<DATE><TIME>|<HOST>|I|memAllocCallback
-    block 3 was (re)allocated
-<DATE><TIME>|<HOST>|I|memFreeCallback
-    block 2 was freed
-<DATE><TIME>|<HOST>|I|memFreeCallback
-    block 3 was freed
-<DATE><TIME>|<HOST>|I|memAllocCallback
-    block 4 was (re)allocated
-<DATE><TIME>|<HOST>|I|memAllocCallback
-    block 4 was (re)allocated
-<DATE><TIME>|<HOST>|I|memFreeCallback
-    block 4 was freed
-
----> TESTPOINT PASSED (psMemory{allocCallback} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{checkLeaks}                                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPcheckLeaks
-    psMemCheckLeaks shall return the number of blocks above an ID that are still allocated
-<DATE><TIME>|<HOST>|I|TPcheckLeaks
-    following psMemCheckLeaks call should produce one instance.
-                   file:line ID
- FILE:LINENO  1
-<DATE><TIME>|<HOST>|I|TPcheckLeaks
-    Testing psMemCheckLeaks again with a different leak location
-<DATE><TIME>|<HOST>|I|TPcheckLeaks
-    following psMemCheckLeaks call should produce one error.
-                   file:line ID
- FILE:LINENO  11
-<DATE><TIME>|<HOST>|I|TPcheckLeaks
-    Testing psMemCheckLeaks again with multiple leak locations.
-<DATE><TIME>|<HOST>|I|TPcheckLeaks
-    following psMemCheckLeaks call should produce two errors.
-                   file:line ID
- FILE:LINENO  16
- FILE:LINENO  14
-
----> TESTPOINT PASSED (psMemory{checkLeaks} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{psMemCorruption}                                  *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPmemCorruption
-    psMemCheckCorruption shall detect memory corruptions
-<DATE><TIME>|<HOST>|I|TPmemCorruption
-    psMemCheckCorruption should output an error message and memProblemCallback callback should be called.
-<DATE><TIME>|<HOST>|E|checkMemBlock (FILE:LINENO)
-    Memory block 1 is corrupted; buffer underflow detected.
-<DATE><TIME>|<HOST>|I|memProblemCallback
-    memory callback called for id 1 (FILE:LINENO).
-
----> TESTPOINT PASSED (psMemory{psMemCorruption} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{freeReferencedMemory}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPFreeReferencedMemory
-    memory reference count shall be incrementable/decrementable
-<DATE><TIME>|<HOST>|I|TPFreeReferencedMemory
-    psFree shall be just decrement a multiple refererenced pointer.
-
----> TESTPOINT PASSED (psMemory{freeReferencedMemory} | tst_psMemory.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psMemory.c                                             *
-*            TestPoint: psMemory{multipleFree}                                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-<DATE><TIME>|<HOST>|I|TPmultipleFree
-    Next should abort due to multiple freeing.
-<DATE><TIME>|<HOST>|A|p_psFree
-    Block 1, allocated at FILE:LINENO, freed multiple times at FILE:LINENO.
-
----> TESTPOINT PASSED (psMemory{multipleFree} | tst_psMemory.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psString.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psString.stderr	(revision 4546)
+++ 	(revision )
@@ -1,126 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify string copy}                               *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify string copy} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify empty string copy}                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify empty string copy} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify string copy with length}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify string copy with length} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify empty string copy with length}             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify empty string copy with length} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Copy string to larger string}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Copy string to larger string} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify creation of string literal}                *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify creation of string literal} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify generic string append}                     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify generic string append} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Test append NULL handling}                        *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Test append NULL handling} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify append string creation}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify append string creation} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Test append null-op}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Test append null-op} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify generic string prepend}                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify generic string prepend} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Test prepend NULL handling}                       *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Test prepend NULL handling} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Verify prepend string creation}                   *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Verify prepend string creation} | tst_psString.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psString.c                                             *
-*            TestPoint: psString{Test prepend null-op}                             *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psString{Test prepend null-op} | tst_psString.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psTrace.stderr
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace.stderr	(revision 4546)
+++ 	(revision )
@@ -1,118 +1,0 @@
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{psTraceSetLevel() and psTraceGetLevel()}           *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTrace{psTraceSetLevel() and psTraceGetLevel()} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{psTraceSetLevel(): set multiple components in one call} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-  You should see this.
-   You should see this too.
-.                    0
- A                   0
-  B                  0
-   C                 0
-    D                0
-     E               5
-
----> TESTPOINT PASSED (psTrace{psTraceSetLevel(): set multiple components in one call} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{psTraceSetLevel(): test static/dynamic inheritance} *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-.                    0
- A                   0
-  B                  2
-   C                 2
-    D                2
-     E               5
-.                    0
- A                   0
-  B                  10
-   C                 10
-    D                10
-     E               5
-
----> TESTPOINT PASSED (psTrace{psTraceSetLevel(): test static/dynamic inheritance} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{psTraceReset()}                                    *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTrace{psTraceReset()} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{psTrace()}                                         *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-     (0) This message should be displayed (beefface)
-     (1) This message should be displayed (beefface)
-     (2) This message should be displayed (beefface)
-     (0) This message should be displayed (beefface)
-     (1) This message should be displayed (beefface)
-     (2) This message should be displayed (beefface)
-
----> TESTPOINT PASSED (psTrace{psTrace()} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{psTracePrintLevels()}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-.                    9
- a                   8
-  a                  4
-  b                  3
- b                   7
-  a                  2
-  b                  1
- c                   5
-  a                  0
-  b                  3
-  c                  5
-
----> TESTPOINT PASSED (psTrace{psTracePrintLevels()} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{optional leading dot and psTracePrintLevels()}     *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTrace{optional leading dot and psTracePrintLevels()} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{Testing psTraceReset}                              *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTrace{Testing psTraceReset} | tst_psTrace.c)
-
-/***************************** TESTPOINT ******************************************\
-*             TestFile: tst_psTrace.c                                              *
-*            TestPoint: psTrace{Testing }                                          *
-*             TestType: Positive                                                   *
-\**********************************************************************************/
-
-
----> TESTPOINT PASSED (psTrace{Testing } | tst_psTrace.c)
-
Index: unk/psLib/test/sysUtils/verified/tst_psTrace.stdout
===================================================================
--- /trunk/psLib/test/sysUtils/verified/tst_psTrace.stdout	(revision 4546)
+++ 	(revision )
@@ -1,25 +1,0 @@
-     (0) This message should be displayed (beefface)
-     (1) This message should be displayed (beefface)
-     (2) This message should be displayed (beefface)
-.                    9
- a                   8
-  a                  4
-  b                  3
- b                   7
-  a                  2
-  b                  1
- c                   5
-  a                  0
-  b                  3
-  c                  5
-.                    9
- a                   8
-  a                  4
-  b                  3
- b                   7
-  a                  2
-  b                  1
- c                   5
-  a                  0
-  b                  3
-  c                  5
Index: /trunk/psLib/test/types/Makefile.am
===================================================================
--- /trunk/psLib/test/types/Makefile.am	(revision 4547)
+++ /trunk/psLib/test/types/Makefile.am	(revision 4547)
@@ -0,0 +1,34 @@
+#Makefile for types tests
+#
+AM_LDFLAGS = -L$(top_builddir)/src -lpslib $(PSLIB_LIBS)
+
+TESTS = \
+	tst_psImage \
+	tst_psScalar \
+	tst_psVector \
+	tst_psVectorSort_01 \
+	tst_psVectorSort_02 \
+	tst_psVectorSort_03 \
+	tst_psVectorSort_04
+
+tst_psImage_SOURCES =  tst_psImage.c
+tst_psScalar_SOURCES =  tst_psScalar.c
+tst_psVector_SOURCES =  tst_psVector.c
+tst_psVectorSort_01_SOURCES =  tst_psVectorSort_01.c
+tst_psVectorSort_02_SOURCES =  tst_psVectorSort_02.c
+tst_psVectorSort_03_SOURCES =  tst_psVectorSort_03.c
+tst_psVectorSort_04_SOURCES =  tst_psVectorSort_04.c
+
+check_DATA =
+
+check_PROGRAMS = $(TESTS)
+
+TESTS_ENVIRONMENT = perl $(top_srcdir)/test/runTest -verified=$(srcdir)/verified
+
+EXTRA_DIST = verified
+
+CLEANFILES = $(TESTS) $(check_DATA)
+
+tests: $(check_DATA) $(TESTS)
+
+test: check
Index: /trunk/psLib/test/types/data/header_1.fits
===================================================================
--- /trunk/psLib/test/types/data/header_1.fits	(revision 4547)
+++ /trunk/psLib/test/types/data/header_1.fits	(revision 4547)
@@ -0,0 +1,1 @@
+SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                    8 / number of bits per data pixel                  NAXIS   =                    0 / number of data axes                            HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18          END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
Index: /trunk/psLib/test/types/data/header_2.fits
===================================================================
--- /trunk/psLib/test/types/data/header_2.fits	(revision 4547)
+++ /trunk/psLib/test/types/data/header_2.fits	(revision 4547)
@@ -0,0 +1,1 @@
+SIMPLE  =                    T / file does conform to FITS standard             BITPIX  =                  -64 / number of bits per data pixel                  NAXIS   =                    1 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          EXTEND  =                    T / FITS dataset may contain extensions            COMMENT   FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -64 / number of bits per data pixel                  NAXIS   =                    1 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     BITPIX  =                  -64 / number of bits per data pixel                  EXTNAME = 'MY_DATA_1'                                                           HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46          END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             XTENSION= 'IMAGE   '           / IMAGE extension                                BITPIX  =                  -64 / number of bits per data pixel                  NAXIS   =                    1 / number of data axes                            NAXIS1  =                   64 / length of data axis 1                          PCOUNT  =                    0 / required keyword; must = 0                     GCOUNT  =                    1 / required keyword; must = 1                     EXTNAME = 'MY_DATA_2'                                                           HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12          HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52          END                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
Index: /trunk/psLib/test/types/data/test.config
===================================================================
--- /trunk/psLib/test/types/data/test.config	(revision 4547)
+++ /trunk/psLib/test/types/data/test.config	(revision 4547)
@@ -0,0 +1,128 @@
+##########################################################################################################
+#  test.config
+#
+#  This is a sample metadata configuration file used to test the metadata configuration file parser. 
+#  It tests both positive and negative cases as described in the comments below.
+#
+#  author  Ross Harman, MHPCC
+#
+#  version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+#  date  $Date: 2005-07-13 02:47:01 $
+#
+#  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
+##########################################################################################################
+#
+#
+#
+########## Test 1 ##########
+# Lines beginning with # are comments. The line below, as well as those above are comments. They should be ignored by the parser.
+# I am a comment.
+#
+#
+#
+########## Test 2 ##########
+# The line below is a comment that begins with some whitespace. It should be ignored by the parser.
+      #        		Another comment
+#
+#
+#
+########## Test 3 ##########
+# The line below is completely blank except for a carriage return. It should be ignored by the parser.
+
+#
+#
+#
+########## Test 4 ##########
+# The line below consists of spaces and tabs (whitespace). It should be ignored by the parser.
+     	   			                    
+#
+#
+#
+########## Test 5 ##########
+# The line below consists of a variable name, type, value, and trailing comment. It should be read by the parser
+pi          F64         3.1415926535897932384626433832795029        # Definition of pi
+#
+#
+#
+########## Test 6 ##########
+# The line below consists of a variable name, type, and value, but without a trailing comment. It should be read by the parser.
+altitude          S32         10000   
+#
+#
+#
+########## Test 7 ##########
+# The lines below contain variations in name, type, value, trailing comment, and whitespace. They should all be read by the parser.
+   time F32 1234.5678 
+ myBool     BOOL            F           # F, f, 0, T, t, 1 are also acceptable
+title1  STR   Hello world #This is a comment for the string value
+    title2  STRING   Good bye world   #    STRING or STR may be used as the string type 
+#
+#
+#
+########## Test 8 ##########
+# The line below creates a vector. It should be read by the parser.
+@primes     S32     2, 3, 5, 7, 11, 13, 17   # These are prime numbers
+#
+#
+#
+########## Test 9 ##########
+# The line below creates a vector with commas mixed with spaces in the values. It should be read by the parser.
+@negatives  S32     -1,  -2 -3    -4, -5, -6,      -7
+#
+#
+#
+########## Test 10  ##########
+# The lines below should create a folder node with children that are strings. They should be read by the parser.
+comment *STR This
+comment *STR     is
+comment *STR         an
+comment *STR             ugly
+comment *STR                 comment
+comment *STR                         but
+comment *STR                             still
+comment *STR                                 valid
+#
+#
+#
+########## Test 11  ##########
+# The line below contains an incorrect value. It should produce an error.
+xPosition    F64          9876.54qqq32
+#
+#
+#
+########## Test 12  ##########
+# The line below contains no value. It should produce an error.
+yPosition    F64          
+#
+#
+#
+########## Test 13  ##########
+# The line below contains no type. It should produce an error.
+zPosition       99.999          
+#
+#
+#
+########## Test 14  ##########
+# The line below contains two * characters. It should produce an error.
+aPosition   **          
+#
+#
+#
+########## Test 15 ##########
+# The line below contains two @ characters. It should produce an error.
+@@bPosition     F64     22.33             
+#
+#
+#
+########## Test 16 ##########
+# The line below contains a ~ character used for special processing. It should produce an error.
+range     F64     140.0 ~             
+#
+#
+#
+########## Test 17 ##########
+# The variable name below is repeated. It should produce an error if the overwrite function argument is set to false.
+# If overwrite is true, then the last name and value will be stored and there will be no error.
+speed     F32     55.55
+speed     F32     66.66
+             
Index: /trunk/psLib/test/types/data/test1.config
===================================================================
--- /trunk/psLib/test/types/data/test1.config	(revision 4547)
+++ /trunk/psLib/test/types/data/test1.config	(revision 4547)
@@ -0,0 +1,57 @@
+Double	F64     1.23456789      # This is a comment
+Float     F32 0.98765#This is a comment too
+String   STR This is the string that forms the value #comment
+
+ # This is a comment line and is to be ignored
+boolean     BOOL    T # The value of 'boolean' is 'true'
+
+@primes U8  2,3 5 7,11,13 17 #   These are prime numbers
+
+comment MULTI # The rest of this line is ignored, but 'comment' is set to be non-unique
+comment STR This
+comment STR     is
+comment STR       a
+comment STR        non-unique
+comment STR                  key
+Float F64 1.23456 # This generates a warning, and, if 'overwrite' is 'false', is ignored
+
+boolean1  BOOL   F # The value of 'boolean' is 'false'
+
+@negprimes S8 -2, -3, -5, -7,-11,-13,-17,-19
+
+@vector1 U16  0, 1, 2, 4, 8
+@vector2 U32  0, 8, 16, 32, 64, 128
+@vector3 U64  0, 64, 256,
+
+@vector4 S16  -2 -1 0 1 2
+@vector5 S32  -4, -2, 0, 2, 4, 6
+@vector6 S64  -16, -4, 0, 4 16 36 64
+
+@vector7 F32  -1.03, 1.04, -1.05, 1.06
+@vector8 F64  -2.22, 2.21 -2.20, 2.19, -2.18
+
+TYPE	CELL	EXTNAME		BIASSEC		CHIP       #
+CELL.00	CELL	CCD00		BSEC-00		CHIP.00
+CELL.01	CELL	CCD01		BSEC-01		CHIP.00
+
+MYCELL  MULTI
+MYCELL    METADATA
+  EXTNAME   STR   CCD00
+  BIASSEC   STR   BSEC-00
+  CHIP      STR   CHIP.00
+  NCELL     S32   24
+END
+MYCELL S32 123 # A number
+
+cell  METADATA
+   foo   METADATA
+       bar     STR   BAZ
+       ping    STR   PONG
+   END
+
+   EXTNAME   STR CCD00
+   BIASSEC   STR BSEC-00
+   CHIP      STR CHIP.00
+   NCELL     S32 12
+END
+
Index: /trunk/psLib/test/types/data/test2.config
===================================================================
--- /trunk/psLib/test/types/data/test2.config	(revision 4547)
+++ /trunk/psLib/test/types/data/test2.config	(revision 4547)
@@ -0,0 +1,44 @@
+ # This should generate error message
+boolean     BOOL    X # The value of 'boolean' is 'true'
+
+value1    S32  # No value
+
+# Invalid vector entries
+@vector  U8
+@vector1 U8  x,y,z
+@vector2
+@vector3 F8 ,,,
+
+# Multiple MULTI definitions
+comment MULTI
+comment MULTI
+
+# Type CELL not defined
+MYCELL CELL CCD00 BSEC-00 CHIP.00
+
+# Invalid value entries
+value1   F64   aabb
+value2   S32   ccdd
+
+# Repeated vector character
+@@vector4 U8 1 2 3 4 #
+
+# Invalid TYPE line
+TYPE
+
+# Duplicate TYPE
+TYPE CELL EXTNAME BIASSEC CHIP
+TYPE CELL EXTNAME BIASSEC CHIP
+
+# END with no matching METADATA
+END
+
+# Duplicate item names within metadata type specifier
+TYPE NEWCELL VALUE1 VALUE1 #
+
+# Not enough values in specified type
+OURCELL  CELL CCD00
+
+# Type with no item
+TYPE NEWCELL1
+
Index: /trunk/psLib/test/types/data/test3.config
===================================================================
--- /trunk/psLib/test/types/data/test3.config	(revision 4547)
+++ /trunk/psLib/test/types/data/test3.config	(revision 4547)
@@ -0,0 +1,16 @@
+Double	F64     1.23456789      # This is a comment
+Float     F32 0.98765#This is a comment too
+String   STR This is the string that forms the value #comment
+
+ # This is a comment line and is to be ignored
+boolean     BOOL    T # The value of 'boolean' is 'true'
+
+@primes U8  2,3 5 7,11,13 17 #   These are prime numbers
+
+comment MULTI # The rest of this line is ignored, but 'comment' is set to be non-unique
+comment STR This
+comment STR     is
+comment STR       a
+comment STR        non-unique
+comment STR                  key
+Float F64 1.23456 # This generates a warning, and, if 'overwrite' is 'false', is ignored
Index: /trunk/psLib/test/types/data/test4.config
===================================================================
--- /trunk/psLib/test/types/data/test4.config	(revision 4547)
+++ /trunk/psLib/test/types/data/test4.config	(revision 4547)
@@ -0,0 +1,161 @@
+#
+# This file contains examples from SDR-14 appendix A
+#
+CELL1 METADATA
+  EXTNAME  STR  CCD00
+  BIASSEC  STR  BSEC-00
+  CHIP     STR  CHIP.00
+  NCELL    S32  24
+END
+
+CELL2 METADATA
+   FOO METADATA
+       BAR   STR  BAZ
+       PING  STR  PONG
+   END
+
+   EXTNAME   STR  CCD00
+   BIASSEC   STR  BSEC-00
+   CHIP      STR  CHIP.00
+   NCELL     S32  24
+END
+
+FOO1 METADATA
+    FOO2 METADATA
+        FOO3 METADATA
+            FOO4 METADATA
+                FOO5 METADATA
+                    FOO6 METADATA
+                        BAR    STR   BAZ
+                        PING   STR   PONG
+                    END
+                    BAR   STR  BAZ
+                    PING  STR  PONG
+                END
+                BAR   STR  BAZ
+                PING  STR  PONG
+            END
+            BAR   STR   BAZ
+            PING  STR   PONG
+        END
+        BAR   STR  BAZ
+        PING  STR  PONG
+    END
+    BAR   STR  BAZ
+    PING  STR  PONG
+END
+
+FOO2 METADATA
+    BAR   STR  BAZ
+    PING  STR  PONG
+    FOO3 METADATA
+        BAR  STR  BAZ
+        PING STR  PONG
+        FOO4 METADATA
+            BAR  STR  BAZ
+            PING STR  PONG
+            FOO5 METADATA
+                BAR  STR BAZ
+                PING STR PONG
+                FOO6 METADATA
+                    BAR  STR  BAZ
+                    PING STR  PONG
+                    FOO7  METADATA
+                        BAR  STR BAZ
+                        PING STR PONG
+                    END
+                END
+            END
+        END
+    END
+END
+
+FOO3 METADATA
+    BAR  STR  BAZ
+    FOO4 METADATA
+        BAR  STR  BAZ
+        FOO5 METADATA
+            BAR  STR  BAZ
+            FOO6 METADATA
+                BAR   STR  BAZ
+                FOO7 METADATA
+                    BAR   STR   BAZ
+                    FOO8 METADATA
+                        BAR   STR  BAZ
+                        PING  STR  PONG
+                    END
+                    PING  STR  PONG
+                END
+                PING STR  PONG
+            END
+            PING STR  PONG
+        END
+        PING STR PONG
+    END
+    PING STR PONG
+END
+
+FOO4 METADATA
+    FOO5 METADATA
+        BAR  STR  BAZ
+        PING STR  PONG
+    END
+    FOO6 METADATA
+        BAR  STR  BAZ
+        PING STR  PONG
+    END
+END
+
+TYPE    CELL    EXTNAME   BIASSEC   CHIP
+CELL.00  CELL  CCD00  BSEC-00 CHIP.00
+CELL.01  CELL  CCD01  BSEC-01 CHIP.00
+FOO5 METADATA
+    TYPE CELL EXTNAME BIASSEC
+    CELL.00 CELL CCD00 BSEC-00
+    CELL.01 CELL CCD01 BSEC-01
+    FOO6 METADATA
+        TYPE CELL EXTNAME
+        CELL.00  CELL  CCD00
+        CELL.01  CELL  CCD01
+    END
+END
+
+foo MULTI
+foo S32   -1
+foo STR   bar baz
+foo BOOL  T
+
+foo1 MULTI        # foo
+foo1 S32  -1      # bar
+foo1 STR  bar baz # baz
+foo1 BOOL T       #
+
+foo2 MULTI
+foo2 S32 -1
+foo2 STR  bar baz
+foo2 BOOL  T
+bar1 METADATA
+    foo MULTI
+    foo S32  -1
+    foo STR  bar baz
+    foo BOOL T
+END
+
+foo3 MULTI
+foo3 METADATA
+    bar   BOOL T
+END
+foo3 METADATA
+    bar  BOOL T
+END
+
+foo4 MULTI
+TYPE bar a b c
+foo4 bar x y z
+foo4 bar x y z
+
+TYPE bar1 a b c
+foo5 MULTI
+foo5 bar1 x y z
+foo5 bar1 x y z
+
Index: /trunk/psLib/test/types/data/test5.config
===================================================================
--- /trunk/psLib/test/types/data/test5.config	(revision 4547)
+++ /trunk/psLib/test/types/data/test5.config	(revision 4547)
@@ -0,0 +1,32 @@
+#
+# Examples from SDR-14 Appendix A which cause failures
+#
+TYPE  CELL1  EXTNAME  BIASSEC  CHIP
+FOO1 METADATA
+    CELL.00 CELL  CCD00  BSEC-00  CHIP.00
+END
+
+FOO2  METADATA
+    TYPE CELL2 EXTNAME BIASSEC CHIP
+END
+CELL.00 CELL2 CCD00 BSEC-00 CHIP.00
+
+FOO3 METADATA
+    TYPE CELL3 EXTNAME BIASSEC CHIP
+END
+BAR METADATA
+    CELL.00 CELL3 CCD00 BSEC-00 CHIP.00
+END
+
+TYPE CELL4 EXTNAME BIASSEC CHIP
+CELL.00 CELL4 CCD00 BSEC-00
+CELL.01 CELL4 CCD01 BSEC-01 CHIP.00
+
+TYPE CELL5 EXTNAME BIASSEC CHIP
+TYPE CELL5 EXTNAME BIASSEC CHIP
+CELL.02 CELL5 CCD00 BSEC-00 CHIP.00
+CELL.03 CELL5 CCD01 BSEC-01 CHIP.00
+
+CELL.04 CELL6 CCD00 BSEC-00 CHIP.00
+CELL.05 CELL6 CCD01 BSEC-01 CHIP.00
+
Index: /trunk/psLib/test/types/tst_psArray.c
===================================================================
--- /trunk/psLib/test/types/tst_psArray.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psArray.c	(revision 4547)
@@ -0,0 +1,441 @@
+/** @file  tst_psArray.c
+ *
+ *  @brief Test driver for psArray integer functions
+ *
+ *  This test driver contains the following tests for psArray test point 1:
+ *     A)  Create void pointer array
+ *     B)  Add data to void pointer array
+ *     C)  Reallocate void pointer array bigger
+ *     D)  Reallocate void pointer array smaller
+ *     E)  Reallocate with null pointer
+ *     F)  Remove item from array
+ *     G)  Remove invalid item from array
+ *     H)  Remove item from null array
+ *     I)  Remove null item from array
+ *     J)  Free void pointer array
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <math.h>
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+typedef struct
+{
+    psS32 x;
+    float y;
+}
+testStruct;
+
+static int testStructCompare(const void **a, const void **b)
+{
+    testStruct* first = (testStruct*)*a;
+    testStruct* second = (testStruct*)*b;
+
+    if(first->x < second->x)
+        return -1;
+    else if (first->x > second->x)
+        return 1;
+    else
+        return 0;
+}
+
+static psS32 testArray( void );
+static psS32 testArray01( void );
+static psS32 testArrayAdd( void );
+
+testDescription tests[] = {
+                              {testArray, -1, "psArray", 0, false},
+                              {testArray01, -2, "psArray", 0, false},
+                              {testArrayAdd, 788, "psArrayAdd", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psArray", tests, argc, argv ) );
+}
+
+
+psS32 testArray(void)
+{
+    // Create array of pointers
+    testStruct *mySt[10];
+    psArray *psArr1 = NULL;
+
+    // Test A - Create void pointer array
+    printPositiveTestHeader(stderr,"psArray", "Create void pointer array");
+    psArray *psArr = psArrayAlloc(5);
+    if (psArr->nalloc != 5) {
+        psError(PS_ERR_UNKNOWN, true,"psArray didn't have proper number of elements.");
+        return 1;
+    }
+    printFooter(stderr, "psArray", "Create void pointer array", true);
+
+
+    // Test B - Add data to void pointer array
+    printPositiveTestHeader(stderr, "psArray", "Add data to void pointer array");
+    for(psS32 i = 0; i < 5; i++) {
+        testStruct *ts = psAlloc(sizeof(testStruct));
+        ts->x = 10*i;
+        ts->y = 10.1*i;
+        mySt[i] = ts;
+        psArr->data[i] = ts;
+        psMemIncrRefCounter(ts);
+    }
+
+    for(psS32 i = 0; i < 5; i++) {
+        testStruct *ts = (testStruct*)psArr->data[i];
+        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
+        if (fabsf(ts->x - 10*i) > 0.01f || fabsf(ts->y - 10.1*i) > 0.01f) {
+            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
+            return 2;
+        }
+    }
+    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
+    if (psArr->nalloc != 5) {
+        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
+        return 3;
+    }
+    fprintf(stderr,"array population = %ld\n", psArr->n);
+    if (psArr->n != 5) {
+        psError(PS_ERR_UNKNOWN, true,"Array population wrong");
+        return 4;
+    }
+    printFooter(stderr, "psArray", "Add data to void pointer array", true);
+
+
+    // Test C - Reallocate void pointer array bigger
+    printPositiveTestHeader(stderr,"psArray", "Reallocate void pointer array bigger");
+    psArr = psArrayRealloc(psArr,10);
+    fprintf(stderr,"Adding more elements to void pointer array...\n");
+    for(psS32 i = 5; i < 10; i++) {
+        testStruct *ts = psAlloc(sizeof(testStruct));
+        ts->x = 10*i;
+        ts->y = 10.1*i;
+        mySt[i] = ts;
+        psArr->data[i] = ts;
+        psArr->n++;
+        psMemIncrRefCounter(ts);
+    }
+    for(psS32 i = 0; i < 10; i++) {
+        testStruct *ts = (testStruct*)psArr->data[i];
+        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
+        if (fabsf(ts->x - 10*i) > 0.01f || fabsf(ts->y - 10.1*i) > 0.01f) {
+            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
+            return 5;
+        }
+    }
+    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
+    if (psArr->nalloc != 10) {
+        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
+        return 6;
+    }
+    fprintf(stderr,"array population = %ld\n", psArr->n);
+    if (psArr->n != 10) {
+        psError(PS_ERR_UNKNOWN, true,"Array Population wrong");
+        return 7;
+    }
+    printFooter(stderr, "psArray", "Reallocate void pointer array bigger", true);
+
+    // Test D - Reallocate void pointer array smaller
+    printPositiveTestHeader(stderr,"psArray","Reallocate void pointer array smaller");
+    psArr = psArrayRealloc(psArr,3);
+    for(psS32 i = 0; i < 3; i++) {
+        testStruct *ts = (testStruct*)psArr->data[i];
+        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
+        if (fabsf(ts->x - 10*i) > 0.01f || fabsf(ts->y - 10.1*i) > 0.01f) {
+            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
+            return 8;
+        }
+    }
+    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
+    if (psArr->nalloc != 3) {
+        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
+        return 9;
+    }
+    fprintf(stderr,"array population = %ld\n", psArr->n);
+    if (psArr->n != 3) {
+        psError(PS_ERR_UNKNOWN, true,"Array Population wrong");
+        return 10;
+    }
+    printFooter(stderr, "psArray", "Reallocate integer void pointer smaller", true);
+
+    // Test E - Reallocate with a null
+    printNegativeTestHeader(stderr,"psArray","Reallocate with a null array",
+                            "Error message generator", 0 );
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message.");
+    psArr1 = psArrayRealloc(NULL,5);
+    if ( psArr1 != NULL ) {
+        fprintf(stderr,"ERROR: Return is not NULL\n");
+    }
+    printFooter(stderr,"psArray","Reallocate with a null array",true);
+
+
+    // Test F - Remove item from array
+    printPositiveTestHeader(stderr, "psArray", "Remove valid item");
+    if( !psArrayRemove(psArr,mySt[0]) ) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to remove valid item");
+        return 100;
+    }
+    fprintf(stderr,"Array size after removal = %ld\n",psArr->n);
+    if ( psArr->n != 2 ) {
+        psError(PS_ERR_UNKNOWN, true, "Items in array not decremented after removal");
+        return 101;
+    }
+    for(psS32 i = 0; i < psArr->n; i++) {
+        testStruct *ts = (testStruct*)psArr->data[i];
+        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
+        if(fabsf(ts->x - 10*(i+1)) > 0.01f || fabsf(ts->y - 10.1*(i+1)) > 0.01f) {
+            psError(PS_ERR_UNKNOWN, true, "Elements not as expected after remove.");
+            return 102;
+        }
+    }
+    psMemDecrRefCounter(mySt[0]);
+    printFooter(stderr,"psArray","Remove valid item", true);
+
+    // Test G - Remove invalid item from array
+    printPositiveTestHeader(stderr, "psArray", "Remove invalid item from array");
+    if( psArrayRemove(psArr,mySt[9]) ) {
+        psError(PS_ERR_UNKNOWN,true,"Removed invalid item from array");
+        return 103;
+    }
+    printFooter(stderr,"psArray","Remove invalid item from array",true);
+
+    // Test H - Remove item from null array
+    printPositiveTestHeader(stderr, "psArray", "Remove item from null array");
+    if ( psArrayRemove(NULL,mySt[1]) ) {
+        psError(PS_ERR_UNKNOWN,true,"Removed valid item from null array");
+        return 104;
+    }
+    printFooter(stderr,"psArray","Remove item from null array",true);
+
+    // Test I - Remove null item from array
+    printPositiveTestHeader(stderr, "psArray", "Remove null item from array");
+    if( psArrayRemove(psArr,NULL) ) {
+        psError(PS_ERR_UNKNOWN,true,"Remove null item from array",true);
+        return 105;
+    }
+    printFooter(stderr,"psArray","Remove null item from array",true);
+
+    // Test J - Free void pointer array
+    printPositiveTestHeader(stderr, "psArray", "Free void pointer array");
+    psFree(psArr);
+    for(psS32 i = 0; i < 10; i++) {
+        psFree(mySt[i]);
+    }
+
+    printFooter(stderr, "psArray" ,"Free void pointer array", true);
+
+    return 0;
+}
+
+psS32 testArray01(void)
+{
+    // Create array of pointers
+    testStruct *mySt[10];
+
+    // Test A - Create void pointer array
+    printPositiveTestHeader(stderr,"psArray", "Create void pointer array");
+    psArray *psArr = psArrayAlloc(10);
+    if (psArr->nalloc != 10) {
+        psError(PS_ERR_UNKNOWN, true,"psArray didn't have proper number of elements.");
+        return 1;
+    }
+    printFooter(stderr, "psArray", "Create void pointer array", true);
+
+    // Test B - Add data to void pointer array
+    printPositiveTestHeader(stderr, "psArray", "Add data to void pointer array");
+    for(psS32 i = 0; i < 10; i++) {
+        testStruct *ts = psAlloc(sizeof(testStruct));
+        ts->x = 10*(10-i);
+        ts->y = 10.1*(10-i);
+        mySt[i] = ts;
+        psArr->data[i] = ts;
+        psMemIncrRefCounter(ts);
+    }
+
+    for(psS32 i = 0; i < 10; i++) {
+        testStruct *ts = (testStruct*)psArr->data[i];
+        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
+        if (fabsf(ts->x - 10*(10-i)) > 0.01f || fabsf(ts->y - 10.1*(10-i)) > 0.01f) {
+            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
+            return 2;
+        }
+    }
+    fprintf(stderr,"array size = %ld\n", psArr->nalloc);
+    if (psArr->nalloc != 10) {
+        psError(PS_ERR_UNKNOWN, true,"Array Size wrong");
+        return 3;
+    }
+    fprintf(stderr,"array population = %ld\n", psArr->n);
+    if (psArr->n != 10) {
+        psError(PS_ERR_UNKNOWN, true,"Array population wrong");
+        return 4;
+    }
+    printFooter(stderr, "psArray", "Add data to void pointer array", true);
+
+    // Test C - Sort data in array
+    printPositiveTestHeader(stderr,"psArray","Sort data in array");
+    psArr = psArraySort(psArr,testStructCompare);
+    for(psS32 i = 0; i < 10; i++) {
+        testStruct *ts = (testStruct*)psArr->data[i];
+        fprintf(stderr,"ts[%d].x = %d ts[%d].y = %.2f\n", i, ts->x, i, ts->y);
+        if (fabsf(ts->x - 10*(i+1)) > 0.01f || fabsf(ts->y - 10.1*(i+1)) > 0.01f) {
+            psError(PS_ERR_UNKNOWN, true,"Couldn't properly get elements from array.");
+            return 5;
+        }
+    }
+    printFooter(stderr,"psArray","Sort data in array",true);
+
+    // Test D - Attempt to sort null array
+    printPositiveTestHeader(stderr,"psArray","Attempt to sort array");
+    psArray* tempArr = psArraySort(NULL,testStructCompare);
+    if(tempArr != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Array sort did not return null when sorting null array");
+        return 6;
+    }
+    printFooter(stderr,"psArray","Attempt to sort array",true);
+
+    // Test E - Free void pointer array
+    printPositiveTestHeader(stderr, "psArray", "Free void pointer array");
+    psFree(psArr);
+    for(psS32 i = 0; i < 10; i++) {
+        psFree(mySt[i]);
+    }
+    if( psMemCheckLeaks(0, NULL, stderr, false) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
+        return 110;
+    }
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        fprintf(stderr,"ERROR: Found %d bad memory blocks\n", nBad);
+        return 111;
+    }
+    printFooter(stderr, "psArray" ,"Free void pointer array", true);
+
+    return 0;
+}
+
+psS32 testArrayAdd( void )
+{
+    int subtest = 0;
+    float* data;
+    int nalloc = 5;
+    int n = 0;
+    int delta = 5;
+
+    // allocate the array.
+    psArray* arr = psArrayAlloc(nalloc);
+    arr->n = n;
+
+    // test arrayAdd until n == nalloc
+    while (n < nalloc) {
+        data = psAlloc(sizeof(float));
+        arr = psArrayAdd(arr, delta*2, data); // make delta unique versus next delta used.
+
+        subtest++;
+        if (psMemGetRefCounter(data) != 2) {
+            // in response of Bug #302
+            psError(PS_ERR_UNKNOWN, true,
+                    "psArrayAdd did not increment the data reference count.");
+            return subtest;
+        }
+
+        subtest++;
+        if (arr->nalloc != nalloc) {
+            psError(PS_ERR_UNKNOWN,true,
+                    "psArrayAdd expanded the psArray unnecessarily.  n=%d",
+                    n);
+            return subtest;
+        }
+
+        subtest++;
+        if (arr->n != ++n) {
+            psError(PS_ERR_UNKNOWN,true,
+                    "psArrayAdd did not increment the size of the psArray. n=%d",
+                    n);
+            return subtest;
+        }
+
+        subtest++;
+        if (arr->data[n-1] != data) {
+            psError(PS_ERR_UNKNOWN,true,
+                    "psArrayAdd didn't set the element to data. n=%d",
+                    n);
+            return subtest;
+        }
+
+        psFree(data);
+    }
+
+    // now try to add an element when the array is full.
+    data = psAlloc(sizeof(float));
+    arr = psArrayAdd(arr, delta, data);
+
+    // make sure the array was expanded
+    subtest++;
+    if (arr->nalloc != nalloc+delta) {
+        psError(PS_ERR_UNKNOWN,true,
+                "psArrayAdd did not expand the psArray when it was already full."
+                " old nalloc=%d, nalloc=%d, delta=%d",
+                nalloc, arr->nalloc, delta);
+        return subtest;
+    }
+    nalloc = arr->nalloc;
+
+    subtest++;
+    if (arr->n != ++n) {
+        psError(PS_ERR_UNKNOWN,true,
+                "psArrayAdd did not increment psArray.n by 1 after expanding it.");
+        return subtest;
+    }
+
+    subtest++;
+    if (arr->data[n-1] != data) {
+        psError(PS_ERR_UNKNOWN,true,
+                "psArrayAdd didn't set the second element to data.");
+        return subtest;
+    }
+
+    psFree(data);
+
+    // make the array full again (operation tested already)
+    while (arr->n < arr->nalloc) {
+        data = psAlloc(sizeof(float));
+        arr = psArrayAdd(arr, 0, data);
+        psFree(data);
+    }
+    nalloc = arr->nalloc;
+    n = arr->n;
+
+    // now add to full array with delta = 0; verify that the array is
+    // expanded by 10
+    data = psAlloc(sizeof(float));
+    arr = psArrayAdd(arr, 0, data);
+    psFree(data);
+
+    subtest++;
+    if (arr->nalloc != nalloc+10) {
+        psError(PS_ERR_UNKNOWN,true,
+                "psArrayAdd did not expand the psArray by 10 when delta < 1."
+                " old nalloc=%d, nalloc=%d",
+                nalloc, arr->nalloc);
+        return subtest;
+    }
+
+    psFree(arr);
+
+    return 0;  // the value that indicates success is part of the testDescription
+}
+
Index: /trunk/psLib/test/types/tst_psBitSet.c
===================================================================
--- /trunk/psLib/test/types/tst_psBitSet.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psBitSet.c	(revision 4547)
@@ -0,0 +1,683 @@
+/** @file  tst_psBitSet_01.c
+ *
+ *  @brief Test driver for psBitSet functions
+ *
+ *  This test driver contains the following tests for psBitSet test point 1:
+ *     A)  Create psBitSet
+ *     B)  Set bits
+ *     C)  Test bits
+ *     D)  Attempt to test negative bit
+ *     E)  Attempt to test bit to large
+ *     F)  Attempt to test bit in null BitSet
+ *     G)  Attempt to set negative bit
+ *     H)  Attempt to set bit to large
+ *     I)  Attempt to set bit in null BitSet
+ *     J)  Free psBitSet
+ *
+ *  @author  Ross Harman, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testBitSet01a(void);
+static psS32 testBitSet01b(void);
+static psS32 testBitSet01c(void);
+static psS32 testBitSet02(void);
+static psS32 testBitSet03(void);
+static psS32 testBitSet04(void);
+static psS32 testBitSet05(void);
+static psS32 testBitSet06(void);
+
+testDescription tests[] = {
+                              {testBitSet01a, 1, "psBitSetAlloc", 0, false},
+                              {testBitSet01b, 2, "psBitSetSet/psBitSetClear", 0, false},
+                              {testBitSet01c, 3, "psBitSetTest", 0, false},
+                              {testBitSet06, 4, "psBitSetOp", 0, false},
+                              {testBitSet02, 5, "psBitSetOp AND Operator", 0, false},
+                              {testBitSet03, 6, "psBitSetOp OR Operator", 0, false},
+                              {testBitSet04, 7, "psBitSetOp XOR Operator", 0, false},
+                              {testBitSet05, 8, "psBitSetNot", 0, false},
+
+                              {NULL}
+                          };
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psBitSet", tests, argc, argv ) );
+}
+
+psS32 testBitSet01a(void)
+{
+    psErr* err;
+
+    // Test A - Create psBitSet
+    fprintf(stderr,"Creating psBitSet with 24 bits...\n");
+    psBitSet* bs = psBitSetAlloc(24);
+    if (bs == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Failed to create a psBitSet");
+        return 1;
+    }
+    if (bs->n != 3) {
+        psError(PS_ERR_UNKNOWN,true,"Number of bytes for psBitSet incorrect (%d vs 3)",
+                bs->n);
+        return 2;
+    }
+    if (bs->bits[0] != 0 || bs->bits[1] != 0 || bs->bits[2] != 0) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetAlloc didn't clean ou the bits by default (%x%x%x).",
+                bs->bits[2],bs->bits[1],bs->bits[0]);
+        return 3;
+    }
+    psFree(bs);
+
+    // Test A - Create psBitSet
+    fprintf(stderr,"Creating psBitSet with 25 bits...\n");
+    bs = psBitSetAlloc(25);
+    if (bs == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Failed to create a psBitSet with 25 bits");
+        return 4;
+    }
+    if (bs->n != 4) {
+        psError(PS_ERR_UNKNOWN,true,"Number of bytes for psBitSet incorrect (%d vs 4)",bs->n);
+        return 5;
+    }
+    psFree(bs);
+
+    psErrorClear();
+    psLogMsg(__func__,PS_LOG_INFO,"Following is an error.");
+    bs = psBitSetAlloc(-4);
+    if (bs != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetAlloc returned something in case of a negative size");
+        return 6;
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psError(PS_ERR_UNKNOWN,true,"psBitSetAlloc didn't generate expected error with size = -4");
+        return 7;
+    }
+    psFree(err);
+
+    return 0;
+}
+
+psS32 testBitSet01b(void)
+{
+    char *binOut = NULL;
+    psBitSet *tempBs = NULL;
+    psErr* err = NULL;
+
+    psBitSet* bs = psBitSetAlloc(24);
+
+    if (psBitSetTest(bs,0) ||
+            psBitSetTest(bs,2) ||
+            psBitSetTest(bs,23) ) {
+
+        psAbort("testBitSet01b","psBitSetAlloc failed to clear all bits at allocation.");
+    }
+
+    // Test B - Set bits
+    tempBs = bs;
+    fprintf(stderr,"Setting first bit...\n");
+    bs = psBitSetSet(bs, 0);
+    fprintf(stderr,"Setting third bit...\n");
+    bs = psBitSetSet(bs, 2);
+    fprintf(stderr,"Setting last bit...\n");
+    bs = psBitSetSet(bs, 23);
+    if(bs != tempBs) {
+        psAbort("testBitSet01b",
+                "Return pointer not equal to output argument pointer.");
+    }
+    if(bs->bits[0] != 0x05) {
+        psAbort(__func__,
+                "Unexpected value for first byte (%d vs 5).",
+                bs->bits[0]);
+    }
+
+
+    binOut = psBitSetToString(bs);
+    fprintf(stderr,"%s\n\n", binOut);
+    psFree(binOut);
+
+    // Test C - Test bits
+    if (! psBitSetTest(bs,0) ||
+            ! psBitSetTest(bs,2) ||
+            ! psBitSetTest(bs,23) ) {
+
+        psAbort("testBitSet01b","Failed to set a bit.");
+    }
+
+    fprintf(stderr,"Clearing first bit...\n");
+    bs = psBitSetClear(bs, 0);
+    fprintf(stderr,"Clearing third bit...\n");
+    bs = psBitSetClear(bs, 2);
+    fprintf(stderr,"Clearing last bit...\n");
+    bs = psBitSetClear(bs, 23);
+
+    binOut = psBitSetToString(bs);
+    fprintf(stderr,"%s\n\n", binOut);
+    psFree(binOut);
+
+
+    if (psBitSetTest(bs,0) ||
+            psBitSetTest(bs,2) ||
+            psBitSetTest(bs,23) ) {
+
+        psAbort("testBitSet01b","Failed to clear a bit.");
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
+    if(psBitSetClear(NULL,2) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetClear did not return NULL with NULL bitset");
+        return 20;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
+    if(psBitSetClear(bs,-3) != bs) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetClear did not return original bitset");
+        return 21;
+    }
+
+    psLogMsg("testBitSet01b",PS_LOG_INFO,"Following should be an error");
+    psErrorClear();
+    psBitSetSet(bs, -4);
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort("testBitSet01c","psBitSetSet(bs, -4) didn't generate expected error.\n");
+    }
+    psFree(err);
+
+    psLogMsg("testBitSet01b",PS_LOG_INFO,"Following should be an error");
+    psErrorClear();
+    psBitSetSet(bs, 200);
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort("testBitSet01c","psBitSetSet(bs, 200) didn't generate expected error.\n");
+    }
+    psFree(err);
+
+    psLogMsg("testBitSet01b",PS_LOG_INFO,"Following should be an error");
+    psErrorClear();
+    psBitSetSet(NULL, 0);
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort("testBitSet01c","psBitSetSet(NULL,0) didn't generate expected error.\n");
+    }
+    psFree(err);
+
+    psFree(bs);
+
+    return 0;
+}
+
+static psS32 testBitSet01c(void)
+{
+    psBitSet* bs = psBitSetAlloc(24);
+    psErr* err = NULL;
+
+    fprintf(stderr,"Setting first bit...\n");
+    bs = psBitSetSet(bs, 0);
+    fprintf(stderr,"Setting third bit...\n");
+    bs = psBitSetSet(bs, 2);
+    fprintf(stderr,"Setting last bit...\n");
+    bs = psBitSetSet(bs, 23);
+
+    if (! psBitSetTest(bs,0) ||
+            ! psBitSetTest(bs,2) ||
+            ! psBitSetTest(bs,23) ) {
+
+        psAbort("testBitSet01c","Set bits returned false.");
+    }
+
+    psLogMsg("testBitSet01c",PS_LOG_INFO,"Following should be an error");
+    psErrorClear();
+    if(psBitSetTest(bs, -4)) {
+        psAbort("testBitSet01c","psBitSetTest returned true with negative bit position.\n");
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort("testBitSet01c","psBitSetTest(bs, -4) didn't generate proper error.\n");
+    }
+    psFree(err);
+
+    psLogMsg("testBitSet01c",PS_LOG_INFO,"Following should be an error");
+    psErrorClear();
+    if(psBitSetTest(bs, 200)) {
+        psAbort("testBitSet01c","psBitSetTest returned true with too-large bit position.\n");
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort("testBitSet01c","psBitSetTest(bs, 200) didn't generate proper error.\n");
+    }
+    psFree(err);
+
+    psLogMsg("testBitSet01c",PS_LOG_INFO,"Following should be an error");
+    psErrorClear();
+    if (psBitSetTest(NULL, 0)) {
+        psAbort("testBitSet01c","psBitSetTest returned true with NULL psBitSet.\n");
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_NULL) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort("testBitSet01c","psBitSetTest(NULL, 0) didn't generate proper error.\n");
+    }
+    psFree(err);
+
+    psFree(bs);
+
+    return 0;
+}
+
+psS32 testBitSet02()
+{
+    char *binOut1 = NULL;
+    char *binOut2 = NULL;
+    char *binOut3 = NULL;
+
+    psBitSet* bs1 = psBitSetAlloc(24);
+    psBitSet* bs2 = psBitSetAlloc(24);
+    psBitSet* and = psBitSetAlloc(24);
+    for(psS32 i=0; i<24; i++) {
+        if ((i & 2) == 0) {
+            bs1 = psBitSetSet(bs1, i);
+        }
+        if ((i & 1) == 0) {
+            bs2 = psBitSetSet(bs2, i);
+        }
+        if (((i & 1) == 0) && ((i & 2) == 0) ) {
+            and = psBitSetSet(and, i);
+        }
+    }
+    binOut1 = psBitSetToString(bs1);
+    binOut2 = psBitSetToString(bs2);
+    binOut3 = psBitSetToString(and);
+    fprintf(stderr,"psBitSetOp input is %s, %s.  Truth is %s.\n",
+            binOut1,binOut2,binOut3);
+    psFree(binOut1);
+    psFree(binOut2);
+    psFree(binOut3);
+
+    // Test B - Perform binary AND with psBitSets
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary AND with psBitSets");
+    psBitSet* outbs = psBitSetAlloc(24);
+    outbs = psBitSetOp(outbs, bs1, "AND", bs2);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp returned a NULL result for AND operation");
+    }
+
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(and,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(bs2);
+            binOut3 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with AND operator failed.\nInput was %s, %s.  Output was %s",
+                    binOut1,binOut2,binOut3);
+        }
+    }
+    psFree(outbs);
+
+    // Test C - Perform binary AND and auto allocate output
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary AND and auto allocate output");
+    outbs = psBitSetOp(NULL, bs1, "AND", bs2);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
+    }
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(and,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(bs2);
+            binOut3 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with AND operator failed.\nInput was %s, %s.  Output was %s",
+                    binOut1,binOut2,binOut3);
+        }
+    }
+    psFree(outbs);
+
+    psFree(bs1);
+    psFree(bs2);
+    psFree(and);
+
+    return 0;
+}
+
+static psS32 testBitSet03(void)
+{
+    char *binOut1 = NULL;
+    char *binOut2 = NULL;
+    char *binOut3 = NULL;
+
+    psBitSet* bs1 = psBitSetAlloc(24);
+    psBitSet* bs2 = psBitSetAlloc(24);
+    psBitSet* or = psBitSetAlloc(24);
+    for(psS32 i=0; i<24; i++) {
+        if ((i/2) % 2) {
+            bs1 = psBitSetSet(bs1, i);
+        }
+        if ((i) % 2) {
+            bs2 = psBitSetSet(bs2, i);
+        }
+        if ( ((i/2) % 2) || ((i) % 2) ) {
+            or = psBitSetSet(or, i);
+        }
+    }
+
+    binOut1 = psBitSetToString(bs1);
+    binOut2 = psBitSetToString(bs2);
+    binOut3 = psBitSetToString(or);
+    fprintf(stderr,"psBitSetOp input is %s, %s.  Truth is %s.\n",
+            binOut1,binOut2,binOut3);
+    psFree(binOut1);
+    psFree(binOut2);
+    psFree(binOut3);
+
+    // Test B - Perform binary AND with psBitSets
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary OR with psBitSets");
+    psBitSet* outbs = psBitSetAlloc(24);
+    outbs = psBitSetOp(outbs, bs1, "OR", bs2);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp returned a NULL result for OR operation");
+    }
+
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(or,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(bs2);
+            binOut3 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with OR operator failed.\nInput was %s, %s.  Output was %s",
+                    binOut1,binOut2,binOut3);
+        }
+    }
+    psFree(outbs);
+
+    // Test C - Perform binary AND and auto allocate output
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary OR and auto allocate output");
+    outbs = psBitSetOp(NULL, bs1, "OR", bs2);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
+    }
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(or,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(bs2);
+            binOut3 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with OR operator failed.\nInput was %s, %s.  Output was %s",
+                    binOut1,binOut2,binOut3);
+        }
+    }
+    psFree(outbs);
+    outbs = NULL;
+
+    psFree(bs1);
+    psFree(bs2);
+    psFree(or);
+
+    return 0;
+}
+
+static psS32 testBitSet04(void)
+{
+    char *binOut1 = NULL;
+    char *binOut2 = NULL;
+    char *binOut3 = NULL;
+
+    psBitSet* bs1 = psBitSetAlloc(24);
+    psBitSet* bs2 = psBitSetAlloc(24);
+    psBitSet* xor = psBitSetAlloc(24);
+    for(psS32 i=0; i<24; i++) {
+        if ((i/2) % 2) {
+            bs1 = psBitSetSet(bs1, i);
+        }
+        if ((i) % 2) {
+            bs2 = psBitSetSet(bs2, i);
+        }
+        if ( ((i/2) % 2) != ((i) % 2) ) {
+            xor = psBitSetSet(xor, i);
+        }
+    }
+
+    binOut1 = psBitSetToString(bs1);
+    binOut2 = psBitSetToString(bs2);
+    binOut3 = psBitSetToString(xor);
+    fprintf(stderr,"psBitSetOp input is %s, %s.  Truth is %s.\n",
+            binOut1,binOut2,binOut3);
+    psFree(binOut1);
+    psFree(binOut2);
+    psFree(binOut3);
+
+    // Test B - Perform binary AND with psBitSets
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary XOR with psBitSets");
+    psBitSet* outbs = psBitSetAlloc(24);
+    outbs = psBitSetOp(outbs, bs1, "XOR", bs2);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp returned a NULL result for XOR operation");
+    }
+
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(xor,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(bs2);
+            binOut3 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with XOR operator failed.\nInput was %s, %s.  Output was %s",
+                    binOut1,binOut2,binOut3);
+        }
+    }
+    psFree(outbs);
+
+    // Test C - Perform binary AND and auto allocate output
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary XOR and auto allocate output");
+    outbs = psBitSetOp(NULL, bs1, "XOR", bs2);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
+    }
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(xor,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(bs2);
+            binOut3 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with XOR operator failed.\nInput was %s, %s.  Output was %s",
+                    binOut1,binOut2,binOut3);
+        }
+    }
+    psFree(outbs);
+    outbs = NULL;
+
+    psFree(bs1);
+    psFree(bs2);
+    psFree(xor);
+
+    return 0;
+}
+
+static psS32 testBitSet05(void)
+{
+    char *binOut1 = NULL;
+    char *binOut2 = NULL;
+
+    psBitSet* bs1 = psBitSetAlloc(24);
+    psBitSet* not = psBitSetAlloc(24);
+    for(psS32 i=0; i<24; i++) {
+        if (i % 2) {
+            bs1 = psBitSetSet(bs1, i);
+        }
+        if (i % 2 == 0) {
+            not = psBitSetSet(not, i);
+        }
+    }
+
+    binOut1 = psBitSetToString(bs1);
+    binOut2 = psBitSetToString(not);
+    fprintf(stderr,"psBitSetOp input is %s.  Truth is %s.\n",
+            binOut1,binOut2);
+    psFree(binOut1);
+    psFree(binOut2);
+
+    // Test B - Perform binary AND with psBitSets
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary NOT with psBitSets");
+    psBitSet* outbs = psBitSetAlloc(24);
+    outbs = psBitSetNot(outbs, bs1);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp returned a NULL result for NOT operation");
+    }
+
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(not,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with NOT operator failed.\nInput was %s.  Output was %s",
+                    binOut1,binOut2);
+        }
+    }
+    psFree(outbs);
+
+    // Test C - Perform binary AND and auto allocate output
+    psLogMsg(__func__,PS_LOG_INFO,"Perform binary NOT and auto allocate output");
+    outbs = psBitSetNot(NULL, bs1);
+    if (outbs == NULL) {
+        psAbort(__func__,"psBitSetOp failed to create a new psBitSet for the result");
+    }
+    for(psS32 i=0; i<24; i++) {
+        psBool truth = psBitSetTest(not,i);
+        psBool res = psBitSetTest(outbs,i);
+        if ( res != truth) {
+            binOut1 = psBitSetToString(bs1);
+            binOut2 = psBitSetToString(outbs);
+            psAbort(__func__,"psBitSetOp with NOT operator failed.\nInput was %s.  Output was %s",
+                    binOut1,binOut2);
+        }
+    }
+    psFree(outbs);
+    outbs = NULL;
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
+    if(psBitSetNot(NULL,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetNot did not return NULL with NULL input");
+        return 30;
+    }
+
+    psFree(bs1);
+    psFree(not);
+
+    return 0;
+}
+
+static psS32 testBitSet06(void)
+{
+    psErr* err;
+
+    psBitSet* bs1 = psBitSetAlloc(24);
+    psBitSet* bs2 = psBitSetAlloc(40);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
+    psBitSet* outbs = psBitSetOp(NULL, bs1, "XOR", bs2);
+    if (outbs != NULL) {
+        psAbort(__func__,"psBitSetOp did not return a NULL result when input sizes differ");
+    }
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_SIZE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort(__func__,"psBitSetOp didn't generate expected error with operands' sizes differed.");
+    }
+    psFree(err);
+    psFree(bs1);
+    psFree(bs2);
+
+    bs1 = psBitSetAlloc(24);
+    bs2 = psBitSetAlloc(24);
+
+    outbs = psBitSetAlloc(40);
+    psBitSet* outbs2 = psBitSetOp(outbs, bs1, "XOR", bs2);
+    if (outbs2 == NULL) {
+        psAbort(__func__,"psBitSetOp failed when input size and output size differed (a recoverable error).");
+    }
+    if (outbs2 != outbs) {
+        psAbort(__func__,"psBitSetOp didn't reuse the given output struct.");
+    }
+    if (outbs2->n != bs1->n) {
+        psAbort(__func__,"psBitSetOp did properly adjust the output psBitSet size.");
+    }
+
+    psErrorClear();
+    psLogMsg(__func__,PS_LOG_INFO,"Following is an error.");
+    outbs = psBitSetOp(outbs, bs1, "FOO", bs2);
+    if (outbs != NULL) {
+        psAbort(__func__,"psBitSetOp returned something in case of a bogus operation.");
+    }
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort(__func__,"psBitSetOp didn't generate expected error with bogus operator.");
+    }
+    psFree(err);
+
+
+    // try again, though give a valid output bitset -- should free the out upon error to avoid leak.
+    outbs = psBitSetAlloc(24);
+    psErrorClear();
+    psLogMsg(__func__,PS_LOG_INFO,"Following is an error.");
+    outbs = psBitSetOp(outbs, bs1, "FOO", bs2);
+
+    err = psErrorLast();
+    if (err->code != PS_ERR_BAD_PARAMETER_VALUE) {
+        psErrorStackPrint(stderr,"Error Stack:");
+        psAbort(__func__,"psBitSetOp didn't generate expected error with bogus operator.");
+    }
+    psFree(err);
+
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
+    if(psBitSetOp(outbs,NULL,"AND",bs2) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetOp did not return NULL with NULL input 1 bit set");
+        return 40;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
+    if(psBitSetOp(outbs,bs1,NULL,bs2) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetOp did not return NULL with NULL operator");
+        return 41;
+    }
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error");
+    if(psBitSetOp(outbs,bs1,"AND",NULL) != NULL)  {
+        psError(PS_ERR_UNKNOWN,true,"psBitSetOp did not return NULL with NULL input 2 bit set");
+        return 42;
+    }
+
+    psFree(bs1);
+    psFree(bs2);
+    psFree(outbs);
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psHash00.c
===================================================================
--- /trunk/psLib/test/types/tst_psHash00.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psHash00.c	(revision 4547)
@@ -0,0 +1,64 @@
+/*****************************************************************************
+    This code will test whether a hash table can be allocated successfully,
+    then deallocated successfully.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 10
+psS32 main()
+{
+    psHash *myHashTable = NULL;
+    psS32 testStatus      = true;
+    psS32 i               = 0;
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks        = 0;
+    printPositiveTestHeader(stdout,
+                            "psHash functions",
+                            "psHashAlloc()");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+
+    if (myHashTable == NULL) {
+        fprintf(stderr, "%s: could not allocate a hash table.", __func__);
+        testStatus = false;
+    }
+
+    if (myHashTable->n != NUM_HASH_TABLE_BUCKETS) {
+        fprintf(stderr, "%s: myHashTable->nbucket not set properly.\n",
+                __func__);
+        testStatus = false;
+
+    }
+
+    if (myHashTable->buckets == NULL) {
+        fprintf(stderr, "%s: myHashTable->buckets is NULL.\n",
+                __func__);
+        testStatus = false;
+
+    }
+
+    for (i=0;i<NUM_HASH_TABLE_BUCKETS;i++) {
+        if (myHashTable->buckets[i] != NULL) {
+            fprintf(stderr, "%s: hash table bucket[%d] not equal to NULL.\n",
+                    __func__, i);
+            testStatus = false;
+        }
+    }
+
+    printFooter(stdout,
+                "psHash functions",
+                "psHashAlloc()",
+                testStatus);
+
+    psFree(myHashTable);
+
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/types/tst_psHash01.c
===================================================================
--- /trunk/psLib/test/types/tst_psHash01.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psHash01.c	(revision 4547)
@@ -0,0 +1,155 @@
+/*****************************************************************************
+    This code will test whether a hash table can be de-allocated successfully.
+ *****************************************************************************/
+#include <stdio.h>
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+psS32 imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+
+static void IdFree(ID *id);
+
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    psMemSetDeallocator(id,(psFreeFunc)IdFree);
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+}
+
+psS32 main()
+{
+    psHash *myHashTable = NULL;
+    psS32 testStatus      = true;
+    psS32 currentId = psMemGetId();
+    ID* id = NULL;
+    ID* replaceId = NULL;
+    psS32 memLeaks        = 0;
+    psBool  retVal = false;
+
+    // Allocate memory for Hash Table
+    printPositiveTestHeader(stdout,"psHash functions","psHashAlloc");
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    if(myHashTable == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to allocate psHash table");
+        return 10;
+    }
+    printFooter(stdout,"psHash functions","psHashAlloc",true);
+
+    // Add items to Hash table
+    id = IdAlloc("IDA");
+    printPositiveTestHeader(stdout,"psHash functions","psHashAdd");
+    retVal = psHashAdd(myHashTable, "ENTRY00", id);
+    psFree(id);
+    if( !retVal) {
+        psError(PS_ERR_UNKNOWN, true, "psHashAdd unable to add ENTRY00");
+        return 1;
+    }
+
+    id = IdAlloc("IDB");
+    retVal = psHashAdd(myHashTable, "ENTRY01", id);
+    psFree(id);
+    if (!retVal) {
+        psError(PS_ERR_UNKNOWN, true, "psHashAdd unable to add ENTRY01");
+        return 2;
+    }
+
+    id = IdAlloc("IDC");
+    retVal = psHashAdd(myHashTable, "ENTRY02", id);
+    psFree(id);
+    if(!retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd unable to add ENTRY02");
+        return 3;
+    }
+
+    id = IdAlloc("IDD");
+    retVal =psHashAdd(myHashTable, "ENTRY03", id);
+    psFree(id);
+    if(!retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd unable to add ENTRY03");
+        return 4;
+    }
+    printFooter(stdout,"psHash functions","psHashAdd",true);
+
+    // Replace item with same key
+    printPositiveTestHeader(stdout,"psHash replace item","psHashAdd");
+    id = IdAlloc("IDE");
+    retVal = psHashAdd(myHashTable,"ENTRY02",id);
+    if(!retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd unable to replace ENTRY02");
+        return 5;
+    }
+    replaceId = psHashLookup(myHashTable,"ENTRY02");
+    if(strcmp(replaceId->name,"IDE") != 0) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd did not replace ENTRY02 with correct item");
+        return 6;
+    }
+    printFooter(stdout,"psHash replace item","psHashAdd",true);
+
+    // Add with NULL hash table specified
+    printNegativeTestHeader(stdout,"psHashAdd","NULL hash table","Hash table can not be NULL.",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashAdd with null table");
+    retVal = psHashAdd(NULL,"ENTRY04",id);
+    if(retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd added entry to NULL hash table.");
+        return 20;
+    }
+    printFooter(stdout,"psHashAdd","NULL hash table",true);
+
+    // Add with key to valid hash table NULL
+    printNegativeTestHeader(stdout,"psHashAdd","NULL key","Hash key can not be NULL.",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashAdd with null key");
+    retVal = psHashAdd(myHashTable,NULL,id);
+    if(retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd added entry to hash table with NULL key.");
+        return 21;
+    }
+    printFooter(stdout,"psHashAdd","NULL hash key",true);
+
+    // Add NULL hash data to valid table and key
+    printNegativeTestHeader(stdout,"psHashAdd","NULL hash data","Hash data can not be NULL.",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashAdd with null data");
+    retVal = psHashAdd(myHashTable,"ENTRY04",NULL);
+    if(retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashAdd added entry to hash table with NULL data.");
+        return 22;
+    }
+    printFooter(stdout,"psHashAdd","NULL hash data",true);
+
+    // Free hash table
+    printPositiveTestHeader(stdout,"psHash functions","psHashFree");
+    psFree(id);
+
+    psFree(myHashTable);
+
+    if (imGlobal != 5) {
+        fprintf(stderr, "%s: only (%d/4) entries were freed",
+                __func__, imGlobal);
+        testStatus = false;
+    }
+
+    printFooter(stdout,"psHash functions","psHashFree()",testStatus);
+
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (memLeaks != 0) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/types/tst_psHash02.c
===================================================================
--- /trunk/psLib/test/types/tst_psHash02.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psHash02.c	(revision 4547)
@@ -0,0 +1,113 @@
+/*****************************************************************************
+    This code will test whether hash tables entries can be inserted correctly,
+    and retrieved correctly.
+ 
+    NOTE: Add code to test whether duplicates are handled correctly (use a
+    small hash table and lots of keys).
+ *****************************************************************************/
+#include <stdio.h>
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+psS32 imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static void IdFree(ID *id);
+
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    psMemSetDeallocator(id,(psFreeFunc)IdFree);
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+}
+
+psS32 main()
+{
+    psHash *myHashTable = NULL;
+    psS32 testStatus      = true;
+    psS32 i               = 0;
+    ID *id = NULL;
+    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL
+                     };
+    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL
+                     };
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks        = 0;
+
+    printPositiveTestHeader(stdout,"psHash functions","psHashLookup");
+
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    i = 0;
+    while (myKeys[i] != NULL) {
+        id = IdAlloc(myData[i]);
+        psHashAdd(myHashTable, myKeys[i], id);
+        psFree(id);
+        i++;
+    }
+
+    i = 0;
+    while (myKeys[i] != NULL) {
+        id = psHashLookup(myHashTable, myKeys[i]);
+        if (0 != strcmp(myData[i], id->name)) {
+            fprintf(stderr, "%s: Hash table entry for key %s was %s (should be %s).\n",
+                    __func__, myKeys[i], id->name, myData[i]);
+            return 1;
+        }
+        i++;
+    }
+    printFooter(stdout,"psHash functions","psHashLookup",true);
+
+    // Use an invalid key in the hash table: verify no item is returned
+    printNegativeTestHeader(stdout,"psHashLookup","Invalid key","Key is not found in the table",0);
+    id = psHashLookup(myHashTable, "BogusKey");
+    if (id != NULL) {
+        fprintf(stderr, "%s: Hash table entry for key %s was not NULL.\n",
+                __func__, "BogusKey");
+        return 2;
+    }
+    printFooter(stdout,"psHashLookup","Invalid key",true);
+
+    // Lookup with null table
+    printNegativeTestHeader(stdout,"psHashLookup","NULL table","Can not lookup with NULL table",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashLookup with null table");
+    id = psHashLookup(NULL,"ENTRY01");
+    if (id != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psHashLookup retrieved an entry from NULL hash table.");
+        return 3;
+    }
+    printFooter(stdout,"psHashLookup","NULL table",true);
+
+    // Lookup with null key
+    printNegativeTestHeader(stdout,"psHashLookup","NULL key","Can not lookup with NULL key.",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashLookup with null key");
+    id = psHashLookup(myHashTable,NULL);
+    if (id != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psHashLookup retrieved an entry with NULL key.");
+        return 4;
+    }
+    printFooter(stdout,"psHashLookup","NULL key",true);
+
+    psFree(myHashTable);
+
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    return (!testStatus);
+}
Index: /trunk/psLib/test/types/tst_psHash03.c
===================================================================
--- /trunk/psLib/test/types/tst_psHash03.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psHash03.c	(revision 4547)
@@ -0,0 +1,142 @@
+/*****************************************************************************
+    This code will test whether hash tables entries can be removed correctly.
+ 
+    NOTE: Add code to test whether duplicates are handled correctly.
+ *****************************************************************************/
+#include <stdio.h>
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psHash.h"
+#include "psMemory.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+psS32 imGlobal = 0;
+psS32 currentId = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static void IdFree(ID *id);
+
+static ID *IdAlloc(const char *name)
+{
+    ID *id = NULL;
+
+    id = psAlloc(sizeof(ID));
+    psMemSetDeallocator(id,(psFreeFunc)IdFree);
+
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+}
+
+psS32 main()
+{
+    psHash *myHashTable = NULL;
+    psS32 testStatus      = true;
+    psS32 i               = 0;
+    psS32 TotalKeys       = 0;
+    psBool retVal         = false;
+    ID *id = NULL;
+    ID *ids[4];
+    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL
+                     };
+    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL
+                     };
+    psS32 memLeaks        = 0;
+
+    currentId = psMemGetId();
+
+    printPositiveTestHeader(stdout,"psHash functions","psHashRemove");
+
+    // Add items to hash table
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    i = 0;
+    while (myKeys[i] != NULL) {
+        ids[i] = IdAlloc(myData[i]);
+        psHashAdd(myHashTable, myKeys[i], ids[i]);
+        i++;
+    }
+    TotalKeys = i - 1;
+
+    // Verify items which were just add to hash table
+    i = TotalKeys;
+    while (i >= 0) {
+
+        id = psHashLookup(myHashTable, myKeys[i]);
+        if (0 != strcmp(myData[i], id->name)) {
+            fprintf(stderr, "%s: Hash table entry for key %s was %s (should be %s).\n",
+                    __func__, myKeys[i], id->name, myData[i]);
+            return 1;
+        }
+        i--;
+    }
+
+    // Remove each item from the table and verify item is no longer in the list
+    i = 0;
+    while (myKeys[i] != NULL) {
+        // The psHashRemove() procedure removes the entry from the hash
+        // table and deletes the data.
+        retVal = psHashRemove(myHashTable, myKeys[i]);
+        if (!retVal) {
+            fprintf(stderr,"%s: Hash table entry not removed.\n",__func__);
+            return 2;
+        }
+        id = psHashLookup(myHashTable, myKeys[i]);
+        if (id != NULL) {
+            fprintf(stderr, "%s: Hash table entry for key %s not removed.\n",
+                    __func__, "IDA");
+            return 3;
+        }
+        i++;
+    }
+    printFooter(stdout,"psHash functions","psHashRemove()",true);
+
+    // Use an invalid key in the hash table: verify false is returned
+    printNegativeTestHeader(stdout,"psHashRemove","Invalid key","Key is not found in table",0);
+    if (psHashRemove(myHashTable,"BogusKey") ) {
+        psError(PS_ERR_UNKNOWN,true,"psHashRemove removed an entry with a bogus key.");
+        return 4;
+    }
+    printFooter(stdout,"psHashRemove","Invalid key",true);
+
+    // Remove with null table
+    printNegativeTestHeader(stdout,"psHashRemove","NULL table","Can not remove with NULL table",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashRemove with null table");
+    retVal = psHashRemove(NULL,"ENTRY02");
+    if (retVal) {
+        psError(PS_ERR_UNKNOWN,true,"psHashRemove removed an entry from NULL hash table.");
+        return 5;
+    }
+    printFooter(stdout,"psHashRemove","NULL table",true);
+
+    // Remove with null key
+    printNegativeTestHeader(stdout,"psHashRemove","NULL key","Can not remove with NULL key",0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message: psHashRemove with null key");
+    if (psHashRemove(myHashTable,NULL) ) {
+        psError(PS_ERR_UNKNOWN,true,"psHashRemove removed an entry from NULL key");
+        return 6;
+    }
+    printFooter(stdout,"psHashRemove","NULL key",true);
+
+    psFree(myHashTable);
+    for(i=0; i<(TotalKeys+1); i++) {
+        psFree(ids[i]);
+    }
+    memLeaks = psMemCheckLeaks(currentId,NULL,stdout,false);
+    if (memLeaks != 0) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(true);
+
+    return (!testStatus);
+}
+
Index: /trunk/psLib/test/types/tst_psHash04.c
===================================================================
--- /trunk/psLib/test/types/tst_psHash04.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psHash04.c	(revision 4547)
@@ -0,0 +1,84 @@
+/*****************************************************************************
+    This code will test whether the call psHashKeyList() function works.
+ *****************************************************************************/
+#include <stdio.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+#include "psHash.h"
+#define NUM_HASH_TABLE_BUCKETS 100
+psS32 imGlobal = 0;
+
+typedef struct
+{
+    char *name;
+}
+ID;
+static void IdFree(ID *id);
+
+static ID *IdAlloc(const char *name)
+{
+    ID *id = psAlloc(sizeof(ID));
+    psMemSetDeallocator(id,(psFreeFunc)IdFree);
+
+    id->name = psStringCopy(name);
+
+    return id;
+}
+
+static void IdFree(ID *id)
+{
+    imGlobal++;
+    psFree(id->name);
+}
+
+psS32 main()
+{
+    psHash *myHashTable = NULL;
+    psS32 testStatus      = true;
+    psS32 i               = 0;
+    char *myKeys[] = {"ENTRY00", "ENTRY01", "ENTRY02", "ENTRY03", NULL
+                     };
+    char *myData[] = {"IDA", "IDB", "IDC", "IDD", NULL
+                     };
+    psS32 currentId = psMemGetId();
+    psS32 memLeaks        = 0;
+    psList *myLinkList = NULL;
+    psListElem *tmp = NULL;
+    ID* id = NULL;
+
+    printPositiveTestHeader(stdout,"psHash functions","psHashKeyList()");
+    myHashTable = psHashAlloc(NUM_HASH_TABLE_BUCKETS);
+    i = 0;
+    while (myKeys[i] != NULL) {
+        id = IdAlloc(myData[i]);
+        psHashAdd(myHashTable, myKeys[i], id);
+        psFree(id);
+        i++;
+    }
+    myLinkList = psHashKeyList(myHashTable);
+    tmp = myLinkList->head;
+    while (tmp != NULL) {
+        printf("Linked List Entries: %s\n", (char *) tmp->data);
+        tmp = tmp->next;
+    }
+    printFooter(stdout,"psHash functions","psHashKeyList()",testStatus);
+    psFree(myLinkList);
+
+    printNegativeTestHeader(stdout,"psHashKeyList","NULL table","Can not lookup with NULL table",0);
+    myLinkList = psHashKeyList(NULL);
+    if(myLinkList != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psHashKeyList retrieved a key list from a NULL table.");
+        return 1;
+    }
+    printFooter(stdout,"psHashKeyList","NULL table",true);
+
+    psFree(myHashTable);
+
+    memLeaks = psMemCheckLeaks(currentId,NULL,stderr,false);
+    if (memLeaks != 0) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    psMemCheckCorruption(1);
+
+    return(!testStatus);
+}
Index: /trunk/psLib/test/types/tst_psHash05.c
===================================================================
--- /trunk/psLib/test/types/tst_psHash05.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psHash05.c	(revision 4547)
@@ -0,0 +1,172 @@
+/** @file  tst_psHash05.c
+*
+*  @brief Contains the tests for psHash.[ch]
+*
+*
+*  @author Robert DeSonia, MHPCC
+*
+*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*/
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+static psS32 hashToArray( void );
+
+testDescription tests[] = {
+                              {hashToArray, 789, "psHashToArray", 0, false},
+                              {NULL}
+                          };
+
+static void printIntArray(char* name, psArray* arr)
+{
+    if (arr == NULL) {
+        printf("%s = NULL\n",name);
+        return;
+    }
+
+    printf("%s = {",name);
+    for (int i = 0; i < arr->n; i++) {
+        if (arr->data[i] == NULL) {
+            printf("NULL");
+        } else {
+            printf("%d",*(int*)arr->data[i]);
+        }
+        if (i != arr->n-1) {
+            printf(",");
+        }
+    }
+    printf("}");
+}
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( ! runTestSuite( stderr, "psHash", tests, argc, argv ) );
+}
+
+psS32 hashToArray( void )
+{
+    int testNum = 0;
+    psArray* array;
+    #define BUCKETS 10
+
+    psHash* hash = psHashAlloc(BUCKETS);
+    char key[2] = "A";
+    bool found[BUCKETS];
+
+    for (int i = 0; i < BUCKETS; i++) {
+
+        array = psHashToArray(hash);
+
+        // return non-null?
+        testNum++;
+        if (array == NULL) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Failed to create an array from a psHash of %d elements.",
+                    i);
+            return testNum;
+        }
+
+        // the size correct
+        testNum++;
+        if (array->n != i) {
+            printIntArray("array",array);
+            psError(PS_ERR_UNKNOWN, false,
+                    "psHashToArray created a psArray of %d elements from a psHash of %d elements.",
+                    array->n, i);
+            return testNum;
+        }
+
+        // the values correct?
+
+        // zero out the found boolean vector
+        for (int j = 0; j < i; j++) {
+            found[j] = false;
+        }
+
+        // check if all the items in array are valid
+        for (int k = 0; k < array->n; k++) {
+            int* item = array->data[k];
+
+            testNum++;
+            if (item == NULL) {
+                printIntArray("array",array);
+                psError(PS_ERR_UNKNOWN, true,
+                        "The array position %d was NULL.",
+                        k);
+                return testNum;
+            }
+
+            testNum++;
+            if (*item < 0 || *item >= BUCKETS) {
+                printIntArray("array",array);
+                psError(PS_ERR_UNKNOWN, true,
+                        "The array position %d was invalid (%d).",
+                        k,*item);
+                return testNum;
+            }
+
+            testNum++;
+            if (found[*item]) {
+                printIntArray("array",array);
+                psError(PS_ERR_UNKNOWN, true,
+                        "The array position %d was a duplicate (%d).",
+                        k,*item);
+                return testNum;
+            }
+
+            testNum++;
+            if (psMemGetRefCounter(item) != 2) {
+                printIntArray("array",array);
+                psError(PS_ERR_UNKNOWN, true,
+                        "The array position %d was not properly reference counted (%d).",
+                        k,psMemGetRefCounter(item));
+                return testNum;
+            }
+
+            found[*item] = true;
+        }
+
+        // check that all the items in psHash was found
+        for (int j = 0; j < i; j++) {
+            testNum++;
+            if (! found[j]) {
+                printIntArray("array",array);
+                psError(PS_ERR_UNKNOWN, true,
+                        "Item %d not found in array.",
+                        j);
+                return testNum;
+            }
+        }
+
+        psFree(array);
+
+        // add one element
+        int* value = psAlloc(sizeof(int));
+        *value = i;
+        psHashAdd(hash, key, value);
+        *key += 1; // increment the key value
+
+        psFree(value);
+    }
+
+    psFree(hash);
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");
+    array = psHashToArray(NULL);
+    testNum++;
+    if (array != NULL) {
+        printIntArray("array",array);
+        psError(PS_ERR_UNKNOWN, false,
+                "psHashToArray returned non-null psArray given a null psHash.");
+        return testNum;
+    }
+
+    return 0;
+}
+
Index: /trunk/psLib/test/types/tst_psList.c
===================================================================
--- /trunk/psLib/test/types/tst_psList.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psList.c	(revision 4547)
@@ -0,0 +1,1272 @@
+/** @file  tst_psList.c
+ *
+ *  @brief Contains the tests for psList.[ch]
+ *
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+void printListInt(psList* list);
+
+
+static psS32 testListAlloc(void);
+static psS32 testListAdd(void);
+static psS32 testListGet(void);
+static psS32 testListRemove(void);
+static psS32 testListConvert(void);
+static psS32 testListIterator(void);
+static psS32 testListFree(void);
+static psS32 testListSort(void);
+static psS32 testListAddAfter(void);
+static psS32 testListAddBefore(void);
+
+testDescription tests[] = {
+                              {testListAlloc,487,"psListAlloc",0,false},
+                              {testListAdd,488,"psListAdd",0,false},
+                              {testListGet,489,"psListGet",0,false},
+                              {testListRemove,490,"psListRemove",0,false},
+                              {testListConvert,491,"psListConvert",0,false},
+                              {testListIterator,494,"psListIterator",0,false},
+                              {testListFree,627,"psListFree",0,false},
+                              {testListSort,624,"psListSort",0,false},
+                              {testListAddAfter,811,"psListAddAfter",0,false},
+                              {testListAddBefore,811,"psListAddBefore",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if (! runTestSuite(stderr,"psList",tests,argc,argv) ) {
+        psError(PS_ERR_UNKNOWN,true,"One or more tests failed");
+        return 1;
+    }
+    return 0;
+}
+
+psS32 testListAlloc(void)
+{
+    psList* list;
+    psS32 ref;
+    float* data;
+
+    psLogMsg(__func__,PS_LOG_INFO,"psListAlloc shall create a psList with either 0 or 1 element.");
+
+    data = psAlloc(sizeof(float));
+
+    // if psListAlloc is invoked with a NULL parameter, it shall return an
+    // empty psList struct with head=tail=NULL and n=0. Otherwise, it shall
+    // return a psList of one element (head=tail=data, n=1).
+    // Test requirement SDR-167
+    list = psListAlloc(NULL);
+    if (list == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListAlloc failed to return a list.");
+        return 1;
+    }
+    if (list->head != NULL || list->tail != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"head and/or tail was not NULL for empty list.");
+        return 2;
+    }
+    if (list->n != 0) {
+        psError(PS_ERR_UNKNOWN, true,"size of list wasn't zero for empty list.");
+        return 3;
+    }
+
+    psFree(list);
+
+    // Test requirement SDR-165
+    list = psListAlloc(data);
+    if (list == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListAlloc failed to return a list.");
+        return 4;
+    }
+
+    if (list->head == NULL || list->tail == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"head and/or tail was NULL for one-element new list.");
+        return 5;
+    }
+
+    if (list->head->data != data || list->tail->data != data) {
+        psError(PS_ERR_UNKNOWN, true,"head and/or tail didn't point to data's node for one-element new list.");
+        return 6;
+    }
+
+    if (list->n != 1) {
+        psError(PS_ERR_UNKNOWN, true,"size of list wasn't correctly set for new, one-element list.");
+        return 7;
+    }
+
+    ref = psMemGetRefCounter(data);
+    if (ref != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psList didn't increment reference count of data (%d.",ref);
+        return 8;
+    }
+
+    psFree(list);
+
+    psFree(data);
+
+    return 0;
+}
+
+psS32 testListAddAfter(void)
+{
+    psList* list = NULL;
+    psS32*  data = NULL;
+    psS32*  data1 = NULL;
+    psS32*  data2 = NULL;
+    psListIterator *currentIterator = NULL;
+
+    data = psAlloc(sizeof(psS32));
+    *data = 1;
+    data1 = psAlloc(sizeof(psS32));
+    *data1 = 2;
+    data2 = psAlloc(sizeof(psS32));
+    *data2 = 3;
+
+    list = psListAlloc(data);
+    currentIterator = psListIteratorAlloc(list,PS_LIST_HEAD,true);
+
+    // Add data after HEAD and verify data
+    // Test requirement SDR-755
+    if(!psListAddAfter(currentIterator,data1)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter failed to add item");
+        return 1;
+    }
+    if(*(psS32*)list->head->next->data != 2) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter did not add the item properly");
+        return 2;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data1) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAddAfter didn't increment the data reference count.");
+        return 20;
+    }
+    psFree(currentIterator);
+
+    currentIterator = psListIteratorAlloc(list,PS_LIST_TAIL,true);
+
+    // Add data after TAIL and verify data
+    if(!psListAddAfter(currentIterator,data2)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter failed to add item");
+        return 3;
+    }
+    if(*(psS32*)list->tail->data != 3) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter did not add the item properly");
+        return 4;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data2) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAddAfter didn't increment the data reference count.");
+        return 40;
+    }
+
+    // Verify error message generated with data pointer is NULL
+    psLogMsg(__func__,PS_LOG_INFO,"NULL data pointer should generate error message");
+    if(psListAddAfter(currentIterator,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter should have generated error.");
+        return 5;
+    }
+
+    // Verify error message generated with iterator NULL
+    psLogMsg(__func__,PS_LOG_INFO,"NULL iterator should generate error message");
+    if(psListAddAfter(NULL,data2)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter should have generated error.");
+        return 6;
+    }
+
+    // Verify error message is generate with non-mutable iterator
+    psLogMsg(__func__,PS_LOG_INFO,"Non-mutable list should generate error message");
+    currentIterator->mutable = false;
+    if(psListAddAfter(currentIterator,data2)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddAfter should have generated error for non-mutable list add");
+        return 7;
+    }
+    currentIterator->mutable = true;
+
+    psFree(data);
+    psFree(data1);
+    psFree(data2);
+    psFree(list);
+
+    return 0;
+}
+
+psS32 testListAddBefore(void)
+{
+    psList* list = NULL;
+    psS32*  data1 = NULL;
+    psS32*  data2 = NULL;
+    psListIterator *currentIterator = NULL;
+
+    data1 = psAlloc(sizeof(psS32));
+    *data1 = 2;
+    data2 = psAlloc(sizeof(psS32));
+    *data2 = 3;
+
+    list = psListAlloc(NULL);
+    currentIterator = psListIteratorAlloc(list,PS_LIST_HEAD,true);
+
+    // Add data before HEAD and verify data
+    // Test requirement SDR-756
+    if(!psListAddBefore(currentIterator,data1)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore failed to add item");
+        return 1;
+    }
+    if(*(psS32*)list->head->data != 2) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore did not add the item properly");
+        return 2;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data1) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAddBefore didn't increment the data reference count.");
+        return 20;
+    }
+    psFree(currentIterator);
+
+    currentIterator = psListIteratorAlloc(list,PS_LIST_TAIL,true);
+
+    // Add data after TAIL and verify data
+    if(!psListAddBefore(currentIterator,data2)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore failed to add item");
+        return 3;
+    }
+    if(*(psS32*)list->tail->prev->data != 3) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore did not add the item properly");
+        return 4;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data2) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAddBefore didn't increment the data reference count.");
+        return 40;
+    }
+
+    // Verify error message generated with data pointer is NULL
+    psLogMsg(__func__,PS_LOG_INFO,"NULL data pointer should generate error message");
+    if(psListAddBefore(currentIterator,NULL)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore should have generated error.");
+        return 5;
+    }
+
+    // Verify error message generated with iterator NULL
+    psLogMsg(__func__,PS_LOG_INFO,"NULL iterator should generate error message");
+    if(psListAddBefore(NULL,data2)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore should have generated error.");
+        return 6;
+    }
+
+    // Verify error message is generate with non-mutable iterator
+    psLogMsg(__func__,PS_LOG_INFO,"Non-mutable list should generate error message");
+    currentIterator->mutable = false;
+    if(psListAddBefore(currentIterator,data2)) {
+        psError(PS_ERR_UNKNOWN,true,"psListAddBefore should have generated error for non-mutable list add");
+        return 7;
+    }
+    currentIterator->mutable = true;
+
+    psFree(data1);
+    psFree(data2);
+    psFree(list);
+
+    return 0;
+}
+
+psS32 testListAdd(void)
+{
+    psList* list = NULL;
+    psS32* data = NULL;
+
+    psLogMsg(__func__,PS_LOG_INFO,"psListAdd shall add an element to list");
+
+    /*
+        psListAdd(list,data,where) should be tested in the instance where:
+
+        1. list is NULL (error)
+        2. data is NULL (error, list should not grow)
+        3. where is PS_LIST_HEAD or PS_LIST_TAIL
+        4. where is not PS_LIST_* but <0
+        5. where is >0
+    */
+
+    data = psAlloc(sizeof(psS32));
+    *data = 1;
+
+    //  1. list is NULL (error)
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for using NULL list.");
+    if (psListAdd(NULL,PS_LIST_HEAD,data)) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd was given a NULL list, but returned a true/success.");
+        return 1;
+    }
+
+    list = psListAlloc(data);
+    psFree(data);
+    if (list->n != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListAlloc didn't create a list properly.");
+        return 2;
+    }
+
+    //  2. data is NULL (error, list should not grow)
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error msg to add NULL data");
+    if (psListAdd(list, PS_LIST_HEAD,NULL)) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd successfully added a NULL data item?");
+        return 40;
+    }
+    if ( list->n != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd with a NULL data element changed the list size or returned success.");
+        return 3;
+    }
+
+    //  3. where is PS_LIST_HEAD or PS_LIST_TAIL
+    data = psAlloc(sizeof(psS32));
+    *data = 2;
+    if ( ! psListAdd(list,PS_LIST_HEAD,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add a data item to head.");
+        return 21;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
+        return 20;
+    }
+    psFree(data);
+
+    // verify that the size incremented
+    if (list->n != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the size by one");
+        return 4;
+    }
+
+    // verify that the head is the inserted data item
+    if (*(psS32*)list->head->data != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd with PS_LIST_HEAD didn't insert at the head.");
+        return 5;
+    }
+
+    data = psAlloc(sizeof(psS32));
+    *data = 3;
+    if ( ! psListAdd(list,PS_LIST_TAIL,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add a data item to tail.");
+        return 21;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
+        return 22;
+    }
+    psFree(data);
+    // verify that the size incremented
+    if (list->n != 3) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the size by 1");
+        return 6;
+    }
+
+    // verify that the head is still the same
+    if (*(psS32*)list->head->data != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd with PS_LIST_TAIL modified the head.");
+        return 7;
+    }
+
+    // verify that the tail is the data item inserted
+    if (*(psS32*)list->tail->data != 3) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd with PS_LIST_TAIL didn't insert at the tail.");
+        return 8;
+    }
+
+    // 4. where is not PS_LIST_* but <0
+
+    data = psAlloc(sizeof(psS32));
+    *data = 4;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should error with invalid insert location");
+
+    if ( psListAdd(list,-10,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd successfully added data to a -10 position?");
+        return 30;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data) != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd incremented the data reference count.");
+        return 24;
+    }
+    psFree(data);
+    // verify that the size wasn't incremented
+    if (list->n != 3) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to head when where was invalid.");
+        return 9;
+    }
+
+    // 5. where is >0
+    data = psAlloc(sizeof(psS32));
+    *data = 5;
+
+    if ( ! psListAdd(list,1,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to 1 position.");
+        return 30;
+    }
+    // Test requirement SDR-175
+    if (psMemGetRefCounter(data) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
+        return 25;
+    }
+    psFree(data);
+    // verify that the size incremented
+    if (list->n != 4 || *(psS32*)list->head->next->data != 5) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to position #1.");
+        return 10;
+    }
+
+    data = psAlloc(sizeof(psS32));
+    *data = 6;
+    if ( ! psListAdd(list,3,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to 4 position.");
+        return 31;
+    }
+    // Test requirment SDR-175
+    if (psMemGetRefCounter(data) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
+        return 26;
+    }
+    psFree(data);
+    // verify that the size incremented
+    if (list->n != 5  || *(psS32 *)list->head->next->next->next->data != 6) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to position #4.");
+        return 50;
+    }
+
+    data = psAlloc(sizeof(psS32));
+    *data = 7;
+    // Test requirment SDR-169
+    if ( ! psListAdd(list,-2,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to 2 position.");
+        return 32;
+    }
+
+    // Test requirment SDR-175
+    if (psMemGetRefCounter(data) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
+        return 28;
+    }
+    psFree(data);
+    // verify that the size incremented
+    if (list->n != 6  || *(psS32 *)list->tail->prev->prev->data != 7) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't insert to position #2.");
+        return 11;
+    }
+
+    // Test requirement SDR-757
+    data = psAlloc(sizeof(psS32));
+    *data = 8;
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be a warning.");
+
+    if ( ! psListAdd(list,9,data) ) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd failed to add data to a 9 position?");
+        return 30;
+    }
+    // Test requirment SDR-175
+    if (psMemGetRefCounter(data) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListAdd didn't increment the data reference count.");
+        return 29;
+    }
+    if(list->n != 7 || *(psS32 *)list->tail->data != 8) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN,true,"psListAdd didn't place added item at tail.");
+        return 12;
+    }
+
+    psFree(data);
+
+    psFree(list);
+
+    return 0;
+}
+
+void printListInt(psList* list)
+{
+    psS32* data = NULL;
+    psBool first = true;
+
+    psListIterator* iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
+
+    while ( (data=(psS32*)psListGetAndIncrement(iter)) != NULL ) {
+        if (!first) {
+            printf(", %d",*(psS32*)data);
+        } else {
+            printf("%d",*(psS32*)data);
+            first = false;
+        }
+    }
+
+    printf(".\n");
+}
+
+
+psS32 testListGet(void)
+{
+    psList* list = NULL;
+    psS32* data;
+
+    /*
+     psListGet(list,which) shall be tested with the following instances
+
+        1. list is NULL.
+        2. which>0 and which<list.n.
+        3. which>list.n.
+        4. which=PS_LIST_HEAD
+        5. which=PS_LIST_NEXT
+        6. which=PS_LIST_TAIL
+        7. which=PS_LIST_PREV
+        8. which<0 and not any PS_LIST_* values
+    */
+
+    //  1. list is NULL.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
+    if (psListGet(list,PS_LIST_HEAD) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet didn't return NULL given a NULL list.");
+        return 1;
+    };
+
+    // create a list
+    data = psAlloc(sizeof(psS32));
+    *data = 0;
+    list = psListAlloc(data);
+    psFree(data);
+
+    data = psAlloc(sizeof(psS32));
+    *data = 1;
+    psListAdd(list,PS_LIST_TAIL,data);
+    psFree(data);
+
+    data = psAlloc(sizeof(psS32));
+    *data = 2;
+    psListAdd(list,PS_LIST_TAIL,data);
+    psFree(data);
+
+    data = psAlloc(sizeof(psS32));
+    *data = 3;
+    psListAdd(list,PS_LIST_TAIL,data);
+    psFree(data);
+
+    //  2. which>0 and which<list.n.
+    data = (psS32*)psListGet(list,3);
+    if (data == NULL || *data != 3) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=3");
+        return 2;
+    }
+    data = (psS32*)psListGet(list,1);
+    if (data == NULL || *data != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=1");
+        return 3;
+    }
+
+    //  3. which>=list.n.
+    data = (psS32*)psListGet(list,5);
+    if (data != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=5");
+        return 4;
+    }
+    data = (psS32*)psListGet(list,4);
+    if (data != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=4");
+        return 5;
+    }
+
+    //  4. which=PS_LIST_HEAD
+    data = (psS32*)psListGet(list,PS_LIST_HEAD);
+    if (data == NULL || *data != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=PS_LIST_HEAD");
+        return 6;
+    }
+
+    //  6. which=PS_LIST_TAIL
+    data = (psS32*)psListGet(list,PS_LIST_TAIL);
+    if (data == NULL || *data != 3) {
+        psError(PS_ERR_UNKNOWN, true,"psListGet failed with which=PS_LIST_TAIL");
+        return 8;
+    }
+
+    data = (psS32*)psListGet(list,-2);
+    if (data == NULL || *data !=2) {
+        psError(PS_ERR_UNKNOWN,true,"psListGet failed with location=-2");
+        return 9;
+    }
+
+    psFree(list);
+
+    return 0;
+}
+
+psS32 testListRemove(void)
+{
+    psList* list = NULL;
+    psS32* data;
+    int items = 15;
+
+    /*
+        psListRemove(list,data,which) should be tested under the following conditions:
+
+        1. list is NULL
+        2. which is PS_LIST_HEAD (remove first element of list)
+        3. which is PS_LIST_TAIL (remove last element of list)
+        4. which is PS_LIST_NEXT (element right of cursor [which should be head,tail, and neither])
+        5. which is PS_LIST_PREV (element left of cursor [which should be head,tail, and neither])
+        6. which is PS_LIST_UNKNOWN and data=NULL (error)
+        7. which is PS_LIST_UNKNOWN and data=[head,tail,other list items]
+        8. which is PS_LIST_UNKNOWN and data!=NULL and data!=any element in list
+
+        In all conditions that are not an error, list.n shall be decremented and only the specified element
+        shall be removed. After each step, list.n should be checked to verify that it is the true
+        number of elements in list.
+    */
+
+    //  1. list is NULL.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should be an error");
+    if (psListRemove(list,PS_LIST_HEAD)) {
+        psError(PS_ERR_UNKNOWN, true,"psListRemove didn't return false given a NULL list.");
+        return 1;
+    };
+
+    // create a list
+    list = psListAlloc(NULL);
+
+    for (psS32 lcv=0;lcv<items;lcv++) {
+        data = psAlloc(sizeof(psS32));
+        *data = lcv;
+        psListAdd(list,PS_LIST_TAIL,data);
+        psMemDecrRefCounter(data);
+    }
+
+
+    // 2. which is PS_LIST_HEAD (remove first element of list)
+    psS32* data1 = (psS32 *)psListGet(list,PS_LIST_HEAD);
+    psMemIncrRefCounter(data1);
+    // Test requirement SDR-172, SDR-173
+    if ( (! psListRemove(list,PS_LIST_HEAD)) ||
+            (psListGet(list,PS_LIST_HEAD) == data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_HEAD");
+        return 1;
+    }
+
+    if (list->n != --items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
+        return 1;
+    }
+    // Test requirement SDR-176
+    if (psMemGetRefCounter(data1) != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListRemove didn't decrement the data reference count.");
+        return 20;
+    }
+    psMemDecrRefCounter(data1);
+
+    // 3. which is PS_LIST_TAIL (remove last element of list)
+    data = psListGet(list,PS_LIST_TAIL);
+    // Test requirement SDR-173
+    if ( (! psListRemove(list,PS_LIST_TAIL)) ||
+            (psListGet(list,PS_LIST_TAIL) == data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_TAIL");
+        return 1;
+    }
+
+    if (list->n != --items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
+        return 1;
+    }
+
+    data = psListGet(list,-2);
+    // Test requirement SDR-173
+    if ( (! psListRemove(list,-2)) ||
+            (psListGet(list,-2) == data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove from location -2");
+        return 11;
+    }
+
+    if (list->n != --items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
+        return 1;
+    }
+
+    // 6. psListRemoveData where data=NULL (error)
+    psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
+    if (psListRemoveData(list,NULL)) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_UNKNOWN with data=NULL");
+        return 1;
+    }
+
+    // 7. which is PS_LIST_UNKNOWN and data=[head,tail,other list items]
+    data = psListGet(list,PS_LIST_HEAD);
+    // Test requirement SDR-762
+    if ( (! psListRemoveData(list,data)) ||
+            (psListGet(list,PS_LIST_HEAD) == data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_UNKNOWN @ PS_LIST_HEAD");
+        return 1;
+    }
+
+    if (list->n != --items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
+        return 1;
+    }
+
+    psS32* data2 = psListGet(list,PS_LIST_TAIL);
+    psMemIncrRefCounter(data2);
+    if ( (!psListRemoveData(list,data2)) ||
+            (psListGet(list,PS_LIST_TAIL) == data2) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove PS_LIST_UNKNOWN @ PS_LIST_TAIL");
+        return 1;
+    }
+
+    if (list->n != --items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
+        return 1;
+    }
+    // Test requirement SDR-176
+    if (psMemGetRefCounter(data2) != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListRemoveData didn't decrement the data reference count.");
+        return 20;
+    }
+    psMemDecrRefCounter(data2);
+
+    data = psListGet(list,1);
+    if ( (! psListRemoveData(list,data))||
+            (psListGet(list,1) == data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove data @ which=1");
+        return 1;
+    }
+
+    if (list->n != --items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't decrement size properly to %d.",items);
+        return 1;
+    }
+
+    // 8. data!=NULL and data!=any element in list
+    psLogMsg(__func__,PS_LOG_INFO,"Next message should be an error");
+    // Test requirement SDR-764
+    if ( psListRemoveData(list,data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"removed something for PS_LIST_UNKNOWN with previously removed item");
+        return 1;
+    }
+
+    if (list->n != items) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"size not %d, as expected.",items);
+        return 1;
+    }
+
+    // clear out the list
+    while (items > 1) {
+        psListRemove(list,PS_LIST_HEAD);
+        items--;
+    }
+
+    data = psListGet(list,PS_LIST_HEAD);
+    if ( (! psListRemove(list,PS_LIST_HEAD)) ||
+            (psListGet(list,PS_LIST_HEAD) == data) ) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Failed to remove last element");
+        return 1;
+    }
+
+    if (list->n != 0) {
+        printListInt(list);
+        psError(PS_ERR_UNKNOWN, true,"Didn't remove all the elements.");
+        return 1;
+    }
+
+    psLogMsg(__func__,PS_LOG_INFO,"NULL list in psListRemoveData should generate error message.");
+    if(psListRemoveData(NULL,data)) {
+        psError(PS_ERR_UNKNOWN,true,"psListRemoveData should have generated an error with NULL list");
+        return 2;
+    }
+
+    psFree(list);
+
+    return 0;
+
+}
+
+psS32 testListConvert(void)
+{
+
+    psList* list = NULL;
+    psArray* arr = NULL;
+    psS32* data;
+
+    /*
+        array=psListToArray(list) shall take each element of the list, increment
+        their reference, and insert them into the returned fresh psPtr array.
+        The list shall not be changed, except for the element reference increment.
+    */
+
+    // test dlist -> array
+
+    // create a list
+    list = psListAlloc(NULL);
+    for (psS32 lcv=0;lcv<15;lcv++) {
+        data = psAlloc(sizeof(psS32));
+        *data = lcv;
+        psListAdd(list,PS_LIST_TAIL,data);
+        psMemDecrRefCounter(data);
+    }
+
+    arr = psListToArray(list);
+
+    if (arr->n != 15 || list->n != 15) {
+        psError(PS_ERR_UNKNOWN, true,"The created array didn't have the proper size");
+        return 1;
+    }
+    for (psS32 i=0;i<arr->n;i++) {
+        if (i != *(psS32*)arr->data[i]) {
+            psError(PS_ERR_UNKNOWN, true,"Element %d of array is incorrect (%d).",
+                    i,*(psS32*)arr->data[i]);
+            return 1;
+        }
+        if (i != *(psS32*)psListGet(list,i)) {
+            psError(PS_ERR_UNKNOWN, true,"Element %d of list is incorrect (%d).",
+                    i,*(psS32*)arr->data[i]);
+            return 1;
+        }
+        if (psMemGetRefCounter(arr->data[i]) != 2) {
+            psError(PS_ERR_UNKNOWN, true,"Element %d had wrong reference count (%d).",
+                    i,psMemGetRefCounter(arr->data[i]));
+            return 1;
+        }
+    }
+
+    psFree(arr);
+    psFree(list);
+
+    // test array -> dlist
+
+    // create an array
+    arr = psArrayAlloc(15);
+    arr->n = arr->nalloc;
+    for (psS32 lcv=0;lcv<15;lcv++) {
+        data = psAlloc(sizeof(psS32));
+        *data = lcv;
+        arr->data[lcv] = data;
+    }
+
+    list = psArrayToList(arr);
+
+    if (arr->n != 15 || list->n != 15) {
+        psError(PS_ERR_UNKNOWN, true,"The created array didn't have the proper size");
+        return 1;
+    }
+    for (psS32 i=0;i<arr->n;i++) {
+        if (i != *(psS32*)arr->data[i]) {
+            psError(PS_ERR_UNKNOWN, true,"Element %d of array is incorrect (%d).",
+                    i,*(psS32*)arr->data[i]);
+            return 1;
+        }
+        if (i != *(psS32*)psListGet(list,i)) {
+            psError(PS_ERR_UNKNOWN, true,"Element %d of list is incorrect (%d).",
+                    i,*(psS32*)arr->data[i]);
+            return 1;
+        }
+        if (psMemGetRefCounter(arr->data[i]) != 2) {
+            psError(PS_ERR_UNKNOWN, true,"Element %d had wrong reference count (%d).",
+                    i,psMemGetRefCounter(arr->data[i]));
+            return 1;
+        }
+    }
+
+    psFree(arr);
+    psFree(list);
+
+    // now, make sure if input array/list is NULL, output is NULL
+
+    arr = psListToArray(NULL);
+    if (arr != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListToArray didn't return NULL when given NULL");
+        return 1;
+    }
+
+    list = psArrayToList(NULL);
+    if (list != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psArrayToList didn't return NULL when given NULL");
+        return 1;
+    }
+
+    // now, see what happens with a zero-size array/list
+    arr = psArrayAlloc(1);
+    arr->n = 0;
+    list = psArrayToList(arr);
+    if (list == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psArrayToList didn't create an empty list from an "
+                "empty array.");
+        return 1;
+    }
+    psFree(arr);
+    psFree(list);
+
+    list = psListAlloc(NULL);
+    arr = psListToArray(list);
+    if (arr == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psArrayToList didn't create an empty array from an "
+                "empty list.");
+        return 1;
+    }
+    psFree(arr);
+    psFree(list);
+
+    return 0;
+}
+
+psS32 testListIterator(void)
+{
+    psList* list = NULL;
+    psS32* data;
+
+    psLogMsg(__func__,PS_LOG_INFO," psListSetIterator/psListGetNext/psListGetPrev"
+             " shall move the list cursor to the specified location");
+
+    /*
+            psDlistSetIterator(list,where) shall:
+
+            1. output error message and do nothing if list=NULL
+            2. set list.cursor to list.head if where=PS_LIST_HEAD
+            3. set list.cursor to list.tail if where=PS_LIST_TAIL
+            4. set list.cursor to list.cursor->next if where=PS_LIST_NEXT
+            5. set list.cursor to list.cursor->prev if where=PS_LIST_PREV
+            6. leave list.cursor untouched if where=PS_LIST_UNKNOWN or PS_LIST_CURRENT
+
+            psDlistGetNext(list) shall be functionally equivalent to
+            psDlistSetIterator(list,PS_LIST_NEXT) but returns list.cursor.
+
+            psDlistGetPrev(list) shall be functionally equivalent to
+            psDlistSetIterator(list,PS_LIST_PREV) but returns list.cursor.
+    */
+
+    // create a list
+    list = psListAlloc(NULL);
+    for (psS32 lcv=0;lcv<15;lcv++) {
+        data = psAlloc(sizeof(psS32));
+        *data = lcv;
+        psListAdd(list,PS_LIST_TAIL,data);
+        psFree(data);
+    }
+
+    psListIterator* iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
+    if (iter == NULL) {
+        psError(PS_ERR_UNKNOWN, true,"Failed to make an iterator.");
+        return 22;
+    }
+
+    // 1. output error message and do nothing if iterator=NULL
+    psListIteratorSet(NULL,PS_LIST_HEAD);
+    if (psListIteratorSet(NULL,PS_LIST_HEAD)) {
+        psError(PS_ERR_UNKNOWN, true,"Success while setting position of a NULL iterator?");
+        return 23;
+    }
+
+    // Attempt to get next with NULL iterator
+    if ( psListGetAndIncrement(NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL when NULL iterator specified");
+        return 24;
+    }
+
+    // Attempt to get previous with NULL iterator
+    if( psListGetAndDecrement(NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL when NULL iterator specified");
+        return 25;
+    }
+
+    // 3. set list.cursor to list.tail if where=PS_LIST_TAIL
+
+    if (!psListIteratorSet(iter,PS_LIST_TAIL) ||
+            *(psS32*)iter->cursor->data != 14 ||
+            iter->index != 14) {
+        psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to tail.");
+        return 1;
+    }
+
+    // 2. set list.cursor to list.head if where=PS_LIST_HEAD
+    if (!psListIteratorSet(iter,PS_LIST_HEAD) ||
+            *(psS32*)iter->cursor->data != 0 ||
+            iter->index != 0) {
+        psError(PS_ERR_UNKNOWN, true,"Didn't successfully move cursor to head.");
+        return 2;
+    }
+
+    // test psListGetPrevious/Next
+    if (*(psS32*)psListGetAndIncrement(iter) != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
+        return 8;
+    }
+    if (*(psS32*)psListGetAndIncrement(iter) != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
+        return 9;
+    }
+    if (*(psS32*)psListGetAndIncrement(iter) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetNext didn't move cursor to next.");
+        return 10;
+    }
+
+    if (*(psS32*)psListGetAndDecrement(iter) != 3) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous.");
+        return 11;
+    }
+    if (*(psS32*)psListGetAndDecrement(iter) != 2) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous.");
+        return 12;
+    }
+    if (*(psS32*)psListGetAndDecrement(iter) != 1) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous..");
+        return 13;
+    }
+    if (*(psS32*)psListGetAndDecrement(iter) != 0) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious didn't move cursor to previous..");
+        return 14;
+    }
+    if (psListGetAndDecrement(iter) != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetPrevious moved cursor beyond head.");
+        return 15;
+    }
+    if (psListGetAndIncrement(iter) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psListGetNext should return NULL when above head");
+        return 22;
+    }
+    if (*(psS32*)psListGetAndIncrement(iter) != 0 ) {
+        psError(PS_ERR_UNKNOWN,true,"psListGetNext didn't move cursor to next.");
+        return 23;
+    }
+
+    psListIteratorSet(iter,PS_LIST_TAIL); // works according to an above test
+    if (*(psS32*)psListGetAndIncrement(iter) != 14) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetNext moved cursor beyond tail.");
+        return 16;
+    }
+    if ((psListGetAndIncrement(iter) != NULL) || (!iter->offEnd)) {
+        psError(PS_ERR_UNKNOWN, true,"psListGetNext moved cursor beyond tail.");
+        return 17;
+    }
+    if(psListGetAndDecrement(iter) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"psListGetPrevious did not return NULL when offEnd is true");
+        return 18;
+    }
+    if(iter->offEnd) {
+        psError(PS_ERR_UNKNOWN,true,"psListGetPrevious did not move back onto the list.");
+        return 19;
+    }
+    if(*(psS32*)psListGetAndDecrement(iter) != 14) {
+        psError(PS_ERR_UNKNOWN,true,"psListGetPrevious did not return correct value of tail.");
+        return 20;
+    }
+
+    psFree(list);
+
+    return 0;
+}
+
+psS32 testListFree(void)
+{
+    float* data[15];
+    psList* list;
+
+    /*
+    Call psDlistAlloc to create a doubly linked list.
+
+    Create several data items and add them to the list.
+
+    Verify the data item's reference counter are incremented after adding to the list.
+    (not really needed, as psListAdd is tested elsewhere)
+    */
+
+    list = psListAlloc(NULL);
+    for (psS32 lcv=0;lcv<15;lcv++) {
+        data[lcv] = psAlloc(sizeof(psS32));
+        *data[lcv] = lcv;
+        psListAdd(list,PS_LIST_TAIL,data[lcv]);
+        if (psMemGetRefCounter(data[lcv]) != 2) {
+            psError(PS_ERR_UNKNOWN, true,"Reference counter for data was not incremented");
+            return 1;
+        }
+    }
+
+    /*
+    Verify items are within the list.
+    (not needed, as psListAdd is tested elsewhere, but check anyway.)
+    */
+    if (list->n != 15) {
+        psError(PS_ERR_UNKNOWN, true,"List wasn't populated as expected?");
+        return 2;
+    }
+
+    /*
+    Call psDlistFree with NULL specified as the elemFree function.
+    */
+
+    psFree(list);
+
+    /*
+    Verify the list is deallocated but not the data items.
+    (accomplished by checking for memory leaks)
+
+    Verify the data item's reference counters are decremented by one compared to when added to the list.
+    (technically, this could be accomplished by checking memory leaks too, but I checked anyway)
+    */
+
+    for (psS32 i=0;i<15;i++) {
+        if (psMemGetRefCounter(data[i]) != 1) {
+            psError(PS_ERR_UNKNOWN, true,"pslistFree didn't decrement the data item's reference counter");
+            return 3;
+        }
+        psFree(data[i]);
+    }
+
+    return 0;
+}
+
+psS32 testListSort(void)
+{
+    psList* list;
+    psListIterator* iter;
+    float* fValue;
+    psU32* uValue;
+
+    list = psListAlloc(NULL);
+
+    for (psS32 lcv=0;lcv<15;lcv++) {
+        float* data = psAlloc(sizeof(psS32));
+        if (lcv < 7) {
+            *data = 13-lcv*2;
+        } else {
+            *data = lcv*2-12;
+        }
+        psListAdd(list,PS_LIST_TAIL,data);
+        psFree(data);
+
+    }
+
+    printf("original list = [");
+    iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
+    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
+        printf(" %.1f",*fValue);
+    }
+    printf(" ]\n");
+
+    list = psListSort(list,psCompareF32Ptr);
+
+    printf("sorted list = [");
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
+        printf(" %.1f",*fValue);
+    }
+    printf(" ]\n");
+
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    float* prevFValue = psListGetAndIncrement(iter);
+    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
+        if (*prevFValue > *fValue) {
+            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
+            return 1;
+        }
+    }
+
+    list = psListSort(list,psCompareDescendingF32Ptr);
+
+    printf("descending sort list = [");
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
+        printf(" %.1f",*fValue);
+    }
+    printf(" ]\n");
+
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    prevFValue = psListGetAndIncrement(iter);
+    while( (fValue=psListGetAndIncrement(iter)) != NULL ) {
+        if (*prevFValue < *fValue) {
+            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
+            return 2;
+        }
+    }
+
+    psFree(list);
+
+    /********** OK, now do the same thing with ints. *************/
+
+    list = psListAlloc(NULL);
+
+    for (psS32 lcv=0;lcv<15;lcv++) {
+        psU32* data = psAlloc(sizeof(psS32));
+        if (lcv < 7) {
+            *data = 13-lcv*2;
+        } else {
+            *data = lcv*2-12;
+        }
+        psListAdd(list,PS_LIST_TAIL,data);
+        psFree(data);
+
+    }
+
+    printf("original list = [");
+    iter = psListIteratorAlloc(list,PS_LIST_HEAD,true);
+    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
+        printf(" %d",*uValue);
+    }
+    printf(" ]\n");
+
+    list = psListSort(list,psCompareU32Ptr);
+
+    printf("sorted list = [");
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
+        printf(" %d",*uValue);
+    }
+    printf(" ]\n");
+
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    psU32* prevUValue = psListGetAndIncrement(iter);
+    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
+        if (*prevUValue > *uValue) {
+            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
+            return 3;
+        }
+    }
+
+    list = psListSort(list,psCompareDescendingU32Ptr);
+
+    printf("descending sort list = [");
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
+        printf(" %d",*uValue);
+    }
+    printf(" ]\n");
+
+    psListIteratorSet(iter,PS_LIST_HEAD);
+    prevUValue = psListGetAndIncrement(iter);
+    while( (uValue=psListGetAndIncrement(iter)) != NULL ) {
+        if (*prevUValue < *uValue) {
+            psError(PS_ERR_UNKNOWN, true,"Hey, the list wasn't sorted!?");
+            return 4;
+        }
+    }
+
+    psFree(list);
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psLookupTable_01.c
===================================================================
--- /trunk/psLib/test/types/tst_psLookupTable_01.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psLookupTable_01.c	(revision 4547)
@@ -0,0 +1,855 @@
+/** @file  tst_psLookupTable_01.c
+*
+*  @brief Test driver for psLookupTable functions
+*
+*  This test driver contains the following tests for psLookupTable functions:
+*     testLookupAlloc - test allocation and freeing of psLookupTable
+*     testLookupRead - test different files and types within files
+*                      being read correctly and some failure cases
+*     testLookupTableInterpolate - test the interpolation function
+*     testLookupTableInterpolateAll - test interpolation of all row values
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-5 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include "pslib_strict.h"
+#include "psTest.h"
+#include <string.h>
+
+static psS32 testLookupTableAlloc(void);
+static psS32 testVectorsReadFromFile(void);
+static psS32 testLookupTableImport(void);
+static psS32 testLookupTableRead(void);
+static psS32 testLookupTableInterpolate(void);
+static psS32 testLookupTableInterpolateAll(void);
+
+const psF64 errorTol_psF64 = 1.0e-4;
+const psF64 tableU8_validFrom = 0;
+const psF64 tableU8_validTo = 3;
+const psS32 tableU8_size = 4;
+const char tableU8_format[] = "\%d \%d \%d \%ld \%d \%d \%d \%ld \%f \%lf";
+const char tableU8_filename[] = "verified/tableU8.dat";
+const psS32 tableU8_indexCol = 0;
+const psS32 tableU8_index[] =
+    {
+        0,   1,    2,   3
+    };
+const psU16 tableU8_val1[]  =
+    {
+        2,   4,    6,   8
+    };
+const psU32 tableU8_val2[]  =
+    {
+        4,   8,   12,  16
+    };
+const psU64 tableU8_val3[]  =
+    {
+        8,  16,   24,  32
+    };
+const psS8  tableU8_val4[]  =
+    {
+        0,  -1,   -2,  -3
+    };
+const psS16 tableU8_val5[]  =
+    {
+        -2,  -4,   -6,  -8
+    };
+const psS32 tableU8_val6[]  =
+    {
+        -4,  -8,  -12, -16
+    };
+const psS64 tableU8_val7[]  =
+    {
+        -8, -16,  -24, -32
+    };
+const psF32 tableU8_val8[]  =
+    {
+        -0.5, 0.0,  0.5,0.75
+    };
+const psF64 tableU8_val9[]  =
+    {
+        -1.5,-1.0,-0.25,1.75
+    };
+
+const psF64 tableF32_validFrom = -10.05;
+const psF64 tableF32_validTo = 3500.67;
+const psS32 tableF32_size = 4;
+const psS32 tableF32_cols = 9;
+const char tableF32_filename[] = "verified/tableF32.dat";
+const char tableF32_format[] = "\%f \%d \%d \%ld \%d \%d \%d \%ld \%d \%lf";
+const char tableF32_indexCol = 0;
+const psElemType tableF32_colType[] =
+    {
+        PS_TYPE_F32, PS_TYPE_S32, PS_TYPE_S32, PS_TYPE_S64,
+        PS_TYPE_S32, PS_TYPE_S32, PS_TYPE_S32, PS_TYPE_S64,
+        PS_TYPE_F64
+    };
+const psF32 tableF32_index[] =
+    {
+        -10.05,1.009,23.45,3500.67
+    };
+const psS32 tableF32_col1[] =
+    {
+        2, 4, 6, 8
+    };
+const psS32 tableF32_col2[] =
+    {
+        4, 8, 12, 16
+    };
+const psS64 tableF32_col3[] =
+    {
+        8, 16, 24, 32
+    };
+const psS32 tableF32_col4[] =
+    {
+        0, -1, -2, -3
+    };
+const psS32 tableF32_col5[] =
+    {
+        -2, -4, -6, -8
+    };
+const psS32 tableF32_col6[] =
+    {
+        -4, -8, -12, -16
+    };
+const psS64 tableF32_col7[] =
+    {
+        -8, -16, -24, -32
+    };
+const psF64 tableF32_col8[] =
+    {
+        -1.5, -1.0, -0.25, 1.75
+    };
+
+
+const psF64 table10_validFrom = 1;
+const psF64 table10_validTo   = 10;
+const psS32 table10_size      = 10;
+const char table10_format[] = "\%d \%d \%d \%ld \%d \%d \%d \%ld \%f \%lf";
+const char table10_filename[] = "verified/table10.dat";
+const psS32 table10_indexCol = 0;
+const psS32  table10_index[]   =
+    {
+        1,   2,    3,   4,    5,    6,    7,    8,   9,    10
+    };
+const psS32 table10_val1[]    =
+    {
+        4,   6,    8,  10,   12,   14,   16,   18,   20,   22
+    };
+const psS32 table10_val2[]    =
+    {
+        8,  12,   16,  20,   24,   28,   32,   36,   40,   44
+    };
+const psS64 table10_val3[]    =
+    {
+        16,  24,   32,  64,  128,  256,  512, 1024, 2048, 4096
+    };
+const psS32  table10_val4[]    =
+    {
+        -1,  -2,   -3,  -4,   -5,   -6,   -7,   -8,   -9,  -10
+    };
+const psS32 table10_val5[]    =
+    {
+        -4,  -6,   -8, -10,  -12,  -14,  -16,  -18,  -20,  -22
+    };
+const psS32 table10_val6[]    =
+    {
+        -8, -12,  -16, -20,  -24,  -28,  -32,  -36,  -40,  -44
+    };
+const psS64 table10_val7[]    =
+    {
+        -16, -24,  -32, -64, -128, -256, -512,-1024,-2048,-4096
+    };
+const psF32 table10_val8[]    =
+    {
+        -2.25,-1.5,-0.75, 0.0, 0.75, 1.50, 2.25, 3.00, 3.75, 4.50
+    };
+const psF64 table10_val9[]    =
+    {
+        -2.67,0.66, 3.99,7.32,10.65,13.98,17.31,20.64,23.97,27.30
+    };
+const psF64 interpolVal1[]    =
+    {
+        5.25, 12.5, 25, 160, -5.25, -12.5, -25, -160, 0.9375, 11.4825
+    };
+const psF64 interpolVal2[]    =
+    {
+        5, 12, 24, 128, -5, -12, -24, -128, 0.75, 10.65
+    };
+const psF64 interpolVal3[]    =
+    {
+        4, 8, 16, -1, -4, -8, -16, -2.25, -2.67
+    };
+
+testDescription tests[] = {
+                              {testLookupTableAlloc,817,"psLookupTableAlloc",0,false},
+                              {testVectorsReadFromFile,999,"psVectorsReadFromFile",0,false},
+                              {testLookupTableImport,999,"psLookupTableImport",0,false},
+                              {testLookupTableRead,998,"psLookupTableRead",0,false},
+                              {testLookupTableInterpolate,997,"psLookupTableInterpolate",0,false},
+                              {testLookupTableInterpolateAll,996,"psLookupTableInterpolateAll",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if ( ! runTestSuite(stderr,"psLookupTable",tests,argc,argv)) {
+        return 1;
+    }
+    return 0;
+}
+
+psS32 testLookupTableAlloc(void)
+{
+    psLookupTable*  table1 = NULL;
+
+    // Allocate lookup table with valid parameters
+    table1 = psLookupTableAlloc("tableF32.dat","\%f \%lf \%d \%ld",10);
+    if(table1 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Null lookup table generated from valid parameters");
+        return 1;
+    }
+    if(strcmp(table1->filename,"tableF32.dat") != 0) {
+        psError(PS_ERR_UNKNOWN,true,"File name not properly stored in psLookupTable structure.");
+        return 2;
+    }
+    if(strcmp(table1->format,"\%f \%lf \%d \%ld") != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Format string not properly storeed in psLookupTable structure.");
+        return 3;
+    }
+    if(table1->indexCol != 10) {
+        psError(PS_ERR_UNKNOWN,true,"Member indexCol not set properly");
+        return 3;
+    }
+    psFree(table1);
+
+    // Allocate lookup table with invalid filename
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid file name");
+    table1 = psLookupTableAlloc(NULL,"\%d",3);
+    if(table1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Null file name accepted by psLookupTableAlloc");
+        return 4;
+    }
+
+    // Allocate lookup table with invalid format
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid format string");
+    table1 = psLookupTableAlloc("tableF32.dat",NULL,3);
+    if(table1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Null format string accepted by psLookupTableAlloc");
+        return 5;
+    }
+
+    return 0;
+}
+
+psS32 testVectorsReadFromFile(void)
+{
+    psArray*   out        = NULL;
+    psVector*  tempVector = NULL;
+
+    // Read file and place into an array of vectors
+    out = psVectorsReadFromFile("verified/tableF32.dat","\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf");
+    if(out == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Unable to read file into array of vectors");
+        return 1;
+    }
+    // Verify the number of vectors in array is as expected
+    if(out->n != tableF32_cols) {
+        psError(PS_ERR_UNKNOWN,true,"Expected number of columns = %d not equal to actual = %d",
+                tableF32_cols, out->n);
+        return 2;
+    }
+    // Verify the number of entries in vectors is as expected
+    for(int i = 0; i < out->n; i++ ) {
+        tempVector = out->data[i];
+        if(tempVector->n != tableF32_size) {
+            psError(PS_ERR_UNKNOWN,true,"Col #%d Expected number of entries = %d  not equal to actual = %d",
+                    i,tableF32_size,tempVector->n);
+            return 3;
+        }
+    }
+    // Verify the vector types are as expected
+    for(int i = 0; i < out->n; i++) {
+        tempVector = out->data[i];
+        if(tempVector->type.type != tableF32_colType[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #%d Expected type = %d not equal to actual = %d",
+                    i,tableF32_colType[i],tempVector->type.type);
+            return 4;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[0];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.F32[i] != tableF32_index[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #0 Vector element[%d] expected = %f not equal to actual = %f",
+                    i, tableF32_index[i],tempVector->data.F32[i]);
+            return 5 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[1];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col1[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #1 Vector element[%d] expected = %d not equal to actual = %d",
+                    i, tableF32_col1[i],tempVector->data.S32[i]);
+            return 10 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[2];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col2[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #2 Vector element[%d] expected = %d not equal to actual = %d",
+                    i, tableF32_col2[i],tempVector->data.S32[i]);
+            return 15 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[3];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S64[i] != tableF32_col3[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #3 Vector element[%d] expected = %ld not equal to actual = %ld",
+                    i, tableF32_col3[i],tempVector->data.S64[i]);
+            return 20 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[4];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col4[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #4 Vector element[%d] expected = %d not equal to actual = %d",
+                    i, tableF32_col4[i],tempVector->data.S32[i]);
+            return 25 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[5];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col5[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #5 Vector element[%d] expected = %d not equal to actual = %d",
+                    i, tableF32_col5[i],tempVector->data.S32[i]);
+            return 30 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[6];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col6[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #6 Vector element[%d] expected = %d not equal to actual = %d",
+                    i, tableF32_col6[i],tempVector->data.S32[i]);
+            return 35 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[7];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S64[i] != tableF32_col7[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #7 Vector element[%d] expected = %ld not equal to actual = %ld",
+                    i, tableF32_col7[i],tempVector->data.S64[i]);
+            return 40 + i;
+        }
+    }
+    // Verify the values in the vectors are as expected
+    tempVector = out->data[8];
+    for(int i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.F64[i] != tableF32_col8[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Col #8 Vector element[%d] expected = %lf not equal to actual = %lf",
+                    i, tableF32_col8[i],tempVector->data.F64[i]);
+            return 45 + i;
+        }
+    }
+    psFree(out);
+
+    // Attempt to read vectors from valid file with invalid format
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL format");
+    out = psVectorsReadFromFile("verified/tableF32.dat",NULL);
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL format string");
+        return 50;
+    }
+
+    // Attempt to read vectors from invalid file with valid format
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL filename");
+    out = psVectorsReadFromFile(NULL,"%f %f");
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL file name");
+        return 51;
+    }
+
+    // Attempt to read vectors from valid file with invalid format specifiers
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid format specifier");
+    out = psVectorsReadFromFile("verified/tableF32.data","\%f \%c \%d");
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid format specifier");
+        return 52;
+    }
+
+    // Attempt to read vectors from non-existant file
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for non-existant file");
+    out = psVectorsReadFromFile("verified/nonexistant.dat","\%f \%d \%d");
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with non-existant file");
+        return 53;
+    }
+
+    // Attempt to read vectors from file with errors in the numbers
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for error is file");
+    out = psVectorsReadFromFile("verified/tableF32_err.dat","\%f \%d \%d \%ld \%d \%d \%d \%ld \%d \%lf");
+    if(out != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with file with errors");
+        return 54;
+    }
+
+    return 0;
+}
+
+psS32 testLookupTableImport(void)
+{
+    psLookupTable*  outTable = NULL;
+    psLookupTable*  inTable  = NULL;
+    psArray*        vectors  = NULL;
+
+    // Attempt to import table with NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL table argument");
+    outTable = psLookupTableImport(NULL,vectors,1);
+    if(outTable != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input table");
+        return 1;
+    }
+
+    // Allocate valid table, format string and index column
+    inTable = psLookupTableAlloc(table10_filename,table10_format,table10_indexCol);
+
+    // Attempt to import table with NULL vector argument
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for NULL vectors");
+    outTable = psLookupTableImport(inTable,vectors,table10_indexCol);
+    if(outTable != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with NULL input vectors");
+        return 2;
+    }
+
+    // Allocate valid array
+    vectors = psArrayAlloc(10);
+
+    // Attempt to import table with invalid index column
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid index column");
+    outTable = psLookupTableImport(inTable,vectors,-1);
+    if(outTable != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid index column specified");
+        return 3;
+    }
+    psFree(vectors);
+
+    // Attempt to import file with file with unsorted index vector
+    // Read vectors from file
+    vectors = psVectorsReadFromFile(table10_filename,table10_format);
+    outTable = psLookupTableImport(inTable,vectors,table10_indexCol);
+    if(outTable != inTable) {
+        psError(PS_ERR_UNKNOWN,true,"Did not set proper return value");
+        return 4;
+    }
+    // Verify the index column vector
+    psVector* indexVector = outTable->index;
+    for(int i = 0; i < indexVector->n; i++) {
+        if(indexVector->data.S32[i] != table10_index[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Index value[%d] = %d is not as expected %d",
+                    i,indexVector->data.S32[i],table10_index[i]);
+            return i*4;
+        }
+    }
+    // Verify the value array vectors
+    psVector* valueVector = outTable->values->data[1];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S32[i] != table10_val1[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
+                    i,valueVector->data.S32[i],table10_val1[i]);
+            return i*5;
+        }
+    }
+    valueVector = outTable->values->data[2];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S32[i] != table10_val2[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
+                    i,valueVector->data.S32[i],table10_val2[i]);
+            return i*6;
+        }
+    }
+    valueVector = outTable->values->data[3];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S64[i] != table10_val3[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %ld is not as expected %ld",
+                    i,valueVector->data.S64[i],table10_val3[i]);
+            return i*7;
+        }
+    }
+    valueVector = outTable->values->data[4];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S32[i] != table10_val4[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
+                    i,valueVector->data.S32[i],table10_val4[i]);
+            return i*8;
+        }
+    }
+    valueVector = outTable->values->data[5];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S32[i] != table10_val5[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
+                    i,valueVector->data.S32[i],table10_val5[i]);
+            return i*9;
+        }
+    }
+    valueVector = outTable->values->data[6];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S32[i] != table10_val6[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %d is not as expected %d",
+                    i,valueVector->data.S32[i],table10_val6[i]);
+            return i*10;
+        }
+    }
+    valueVector = outTable->values->data[7];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.S64[i] != table10_val7[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %ld is not as expected %ld",
+                    i,valueVector->data.S64[i],table10_val7[i]);
+            return i*11;
+        }
+    }
+    valueVector = outTable->values->data[8];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.F32[i] != table10_val8[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %f is not as expected %f",
+                    i,valueVector->data.F32[i],table10_val8[i]);
+            return i*12;
+        }
+    }
+    valueVector = outTable->values->data[9];
+    for(int i = 0; i < valueVector->n; i++) {
+        if(valueVector->data.F64[i] != table10_val9[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value [%d] = %lf is not as expected %lf",
+                    i,valueVector->data.F64[i],table10_val9[i]);
+            return i*13;
+        }
+    }
+    // Verify the table members are set properly
+    if(outTable->indexCol != table10_indexCol) {
+        psError(PS_ERR_UNKNOWN,true,"Member indexCol = %d not as expected %d",
+                outTable->indexCol,table10_indexCol);
+        return 100;
+    }
+    if(outTable->validFrom != table10_validFrom) {
+        psError(PS_ERR_UNKNOWN,true,"Member validFrom = %d not as expected %d",
+                outTable->validFrom, table10_validFrom);
+        return 101;
+    }
+    if(outTable->validTo != table10_validTo) {
+        psError(PS_ERR_UNKNOWN,true,"Member validTo = %d not as expected %d",
+                outTable->validTo, table10_validTo);
+        return 102;
+    }
+    if(strcmp(outTable->filename,table10_filename) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Member filename = %d not as expected %s",
+                outTable->filename,table10_filename);
+        return 103;
+    }
+    if(strcmp(outTable->format,table10_format) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Member format = %d not as expected %s",
+                outTable->format,table10_format);
+        return 104;
+    }
+    psFree(vectors);
+    psFree(inTable);
+
+    // Attempt to import file with file with sorted index vector
+    // Read vectors from file
+    // Allocate valid table, format string and index column
+    inTable = psLookupTableAlloc(tableU8_filename,tableU8_format,tableU8_indexCol);
+    vectors = psVectorsReadFromFile(tableU8_filename,tableU8_format);
+    outTable = psLookupTableImport(inTable,vectors,tableU8_indexCol);
+    if(outTable != inTable) {
+        psError(PS_ERR_UNKNOWN,true,"Did not set proper return value");
+        return 4;
+    }
+    // Verify the index column vector
+    indexVector = outTable->index;
+    for(int i = 0; i < indexVector->n; i++) {
+        if(indexVector->data.S32[i] != tableU8_index[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Index value[%d] = %d is not as expected %d",
+                    i,indexVector->data.S32[i],tableU8_index[i]);
+        }
+    }
+    // Verify the table members are set properly
+    if(outTable->indexCol != tableU8_indexCol) {
+        psError(PS_ERR_UNKNOWN,true,"Member indexCol = %d not as expected %d",
+                outTable->indexCol,tableU8_indexCol);
+        return 100;
+    }
+    if(outTable->validFrom != tableU8_validFrom) {
+        psError(PS_ERR_UNKNOWN,true,"Member validFrom = %d not as expected %d",
+                outTable->validFrom, tableU8_validFrom);
+        return 101;
+    }
+    if(outTable->validTo != tableU8_validTo) {
+        psError(PS_ERR_UNKNOWN,true,"Member validTo = %d not as expected %d",
+                outTable->validTo, tableU8_validTo);
+        return 102;
+    }
+    if(strcmp(outTable->filename,tableU8_filename) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Member filename = %d not as expected %s",
+                outTable->filename,tableU8_filename);
+        return 103;
+    }
+    if(strcmp(outTable->format,tableU8_format) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Member format = %d not as expected %s",
+                outTable->format,tableU8_format);
+        return 104;
+    }
+    psFree(inTable);
+    psFree(vectors);
+
+    return 0;
+}
+
+psS32 testLookupTableRead(void)
+{
+    psLookupTable*  table1  = NULL;
+    long           numRows = 0;
+
+    // Attempt to read table with NULL input table specified
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
+    numRows = psLookupTableRead(table1);
+    if(numRows != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return zero for NULL input table");
+        return 1;
+    }
+
+    // Set up valid table to read
+    table1 = psLookupTableAlloc(tableF32_filename,tableF32_format,tableF32_indexCol);
+    // Read table
+    numRows = psLookupTableRead(table1);
+    // Verify return value equals number of lines read
+    if(numRows != tableF32_size) {
+        psError(PS_ERR_UNKNOWN,true,"Return value %d not as expected %d",
+                numRows,tableF32_size);
+        return 1;
+    }
+    // Verify the members and values in table
+    if(fabs(table1->validFrom - tableF32_validFrom) > errorTol_psF64) {
+        psError(PS_ERR_UNKNOWN,true,"Member validFrom = %f not as expected %f",
+                table1->validFrom,tableF32_validFrom);
+        return 2;
+    }
+    if(fabs(table1->validTo - tableF32_validTo) > errorTol_psF64) {
+        psError(PS_ERR_UNKNOWN,true,"Member validTo = %f not as expected %f",
+                table1->validTo,tableF32_validTo);
+        return 3;
+    }
+    if(strcmp(table1->filename,tableF32_filename) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Member filename %s not as expected %s",
+                table1->filename,tableF32_filename);
+        return 4;
+    }
+    if(strcmp(table1->format,tableF32_format) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Member format %s not as expected %s",
+                table1->format,tableF32_format);
+        return 5;
+    }
+    if(table1->indexCol != tableF32_indexCol) {
+        psError(PS_ERR_UNKNOWN,true,"Member indexCol %d not as expected %d",
+                table1->indexCol,tableF32_indexCol);
+        return 6;
+    }
+    for(psS32 i = 0; i < table1->index->n; i++) {
+        if(fabs(table1->index->data.F32[i]-tableF32_index[i]) > errorTol_psF64) {
+            psError(PS_ERR_UNKNOWN,true,"Index column[%d] = %f not as expected %f",
+                    i,table1->index->data.F32[i],tableF32_index[i]);
+            return i*7;
+        }
+    }
+    psVector* tempVector = table1->values->data[1];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col1[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
+                    i,tempVector->data.S32[i],tableF32_col1[i]);
+            return i*8;
+        }
+    }
+    tempVector = table1->values->data[2];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col2[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
+                    i,tempVector->data.S32[i],tableF32_col2[i]);
+            return i*9;
+        }
+    }
+    tempVector = table1->values->data[3];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S64[i] != tableF32_col3[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %ld not as expected %ld",
+                    i,tempVector->data.S64[i],tableF32_col3[i]);
+            return i*10;
+        }
+    }
+    tempVector = table1->values->data[4];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col4[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
+                    i,tempVector->data.S32[i],tableF32_col4[i]);
+            return i*11;
+        }
+    }
+    tempVector = table1->values->data[5];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col5[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
+                    i,tempVector->data.S32[i],tableF32_col5[i]);
+            return i*12;
+        }
+    }
+    tempVector = table1->values->data[6];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S32[i] != tableF32_col6[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %d not as expected %d",
+                    i,tempVector->data.S32[i],tableF32_col6[i]);
+            return i*13;
+        }
+    }
+    tempVector = table1->values->data[7];
+    for(psS32 i = 0; i < tempVector->n; i++) {
+        if(tempVector->data.S64[i] != tableF32_col7[i]) {
+            psError(PS_ERR_UNKNOWN,true,"Value column[%d] = %ld not as expected %ld",
+                    i,tempVector->data.S64[i],tableF32_col7[i]);
+            return i*14;
+        }
+    }
+    psFree(table1);
+
+    // Set up invalid table to read
+    table1 = psLookupTableAlloc(tableF32_filename,tableF32_format,tableF32_indexCol);
+    table1->indexCol = -1;
+    // Read invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message invalid table indexCol");
+    numRows = psLookupTableRead(table1);
+    // Verify the num of rows read is zero
+    if(numRows != 0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return 0 for line read for invalid table");
+        return 15;
+    }
+    psFree(table1);
+
+    return 0;
+}
+
+psS32 testLookupTableInterpolate(void)
+{
+    psLookupTable*  table1 = NULL;
+    psF64            out1 = 0.0;
+
+    // Attempt to perform interpolation with NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message for invalid table");
+    out1 = psLookupTableInterpolate(table1,0,0);
+    if( !isnan(out1) ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NaN as expected");
+        return 1;
+    }
+
+    // Interpolate values within the list and verify return values
+    table1 = psLookupTableAlloc(table10_filename,table10_format,table10_indexCol);
+    psS32 numLines = psLookupTableRead(table1);
+    if(numLines != table10_size) {
+        psError(PS_ERR_UNKNOWN,true,"Line read %d not as expected %d",numLines,table10_size);
+        return 2;
+    }
+    for(psS32 i = 0; i < table1->values->n; i++ ) {
+        out1 = psLookupTableInterpolate(table1, 5.25, i);
+        if( fabs(out1-interpolVal1[i]) > errorTol_psF64) {
+            psError(PS_ERR_UNKNOWN,true,"Did not return expected value. %lg expected %lg",out1,interpolVal1[i]);
+            return 3*i;
+        }
+    }
+    for(psS32 i = 0; i < table1->values->n; i++ ) {
+        out1 = psLookupTableInterpolate(table1, 5.0, i);
+        if( fabs(out1-interpolVal2[i]) > errorTol_psF64) {
+            psError(PS_ERR_UNKNOWN,true,"Did not return expected value. %lg expected %lg",out1,interpolVal2[i]);
+            return 4*i;
+        }
+    }
+
+    // Interpolate value just below the lowest index value
+    out1 = psLookupTableInterpolate(table1,0,0);
+    if ( fabs(out1- NAN) > FLT_EPSILON ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN returned %lf",out1);
+        return 5;
+    }
+
+    // Interpolate value just above the highest index value
+    out1 = psLookupTableInterpolate(table1,11,0);
+    if ( fabs(out1-NAN) > FLT_EPSILON ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN returned %lf",out1);
+        return 7;
+    }
+
+    // Interpolate value with a column number greater than the table has
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error out of range.");
+    out1 = psLookupTableInterpolate(table1, 5, 100);
+    if ( fabs(out1-NAN) > FLT_EPSILON ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NAN returned %lf",out1);
+        return 9;
+    }
+    psFree(table1);
+
+    return 0;
+}
+
+psS32 testLookupTableInterpolateAll(void)
+{
+    psLookupTable*  table1 = NULL;
+    psVector*        interpValues;
+
+    // Interpolate values with NULL table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL table");
+    interpValues = psLookupTableInterpolateAll(table1,5);
+    if(interpValues != NULL ) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return NULL for NULL table");
+        return 5;
+    }
+
+    // Interpolate values within the list and verify return values
+    table1 = psLookupTableAlloc(table10_filename,table10_format,table10_indexCol);
+    psS32 numLines = psLookupTableRead(table1);
+    if(numLines != table10_size) {
+        psError(PS_ERR_UNKNOWN,true,"Num lines read %d not as expected %d",numLines,table10_size);
+        return 6;
+    }
+    interpValues = psLookupTableInterpolateAll(table1,5.25);
+    if(interpValues == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Returned vector is NULL.");
+        return 1;
+    }
+    for(psS32 i = 0; i < table1->values->n; i++ ) {
+        if( fabs(interpValues->data.F64[i]-interpolVal1[i]) > errorTol_psF64) {
+            psError(PS_ERR_UNKNOWN,true,"Did not return expected value. %lg expected %lg",
+                    interpValues->data.F64[i],interpolVal1[i]);
+            return 2*i;
+        }
+    }
+    psFree(interpValues);
+
+    // Interpolate values with index outside table
+    interpValues = psLookupTableInterpolateAll(table1,0);
+    if(interpValues != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did return NULL");
+        return 4;
+    }
+    psFree(table1);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/types/tst_psMetadataIO.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadataIO.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadataIO.c	(revision 4547)
@@ -0,0 +1,1021 @@
+/** @file  tst_psMetadataIO.c
+ *
+ *  @brief Test driver for psMetadataIO functions
+ *
+ *  This test driver contains the following tests for psMetadata:
+ *    Read config file with overwrite set true
+ *    Read config file with overwrite set false
+ *    Attempt to use null fileName argument
+ *    Attempt to open nonexistant file
+ *
+ *  @author  Ross Harman, MHPCC
+ *  @author  Robert DeSonia, MHPCC
+ *  @author  Eric Van Alst, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static psS32 testMetadataParseConfig(void);
+static psS32 testMetadataParseConfig1(void);
+static psS32 testMetadataParseConfig2(void);
+static psS32 testMetadataParseConfig3(void);
+static psS32 testMetadataParseConfig4(void);
+
+testDescription tests[] = {
+                              {testMetadataParseConfig,000,"psMetadataConfigParse",0,false},
+                              {testMetadataParseConfig1,000,"psMetadataConfigParse",0,false},
+                              {testMetadataParseConfig2,000,"psMetadataConfigParse",0,false},
+                              {testMetadataParseConfig3,000,"psMetadataConfigParse",0,false},
+                              {testMetadataParseConfig4,000,"psMetadataConfigParse",0,false},
+                              {NULL}
+                          };
+
+static void writeMetadataItem(psMetadataItem* metadataIem, char* indentStr);
+static void writeMetadata(psMetadata* metadata, char* indentStr);
+static void writeMetadataList(psList *metadataItemList, char* indentStr);
+
+static psBool checkFailedLines(psS32 failedLines, psS32 expectedFailedLines, char* configFile);
+static psBool checkNumberOfItems(psMetadata* md, psS32 expectedItems, char* configFile);
+static psBool checkItemName(psMetadataItem* mdItem, char* expectedName, char* configFile);
+static psBool checkItemType(psMetadataItem* mdItem, psS32 expectedType, char* configFile);
+static psBool checkItemComment(psMetadataItem* mdItem, char* expectedComment, char* configFile);
+
+#define ERROR_TOL  0.0001
+
+const char testConfig5[] = "test5.config";
+const psS32 testConfig5Fails = 7;
+
+const char testConfig4[] = "test4.config";
+const psS32 testConfig4Fails = 0;
+
+const char testConfig3[] = "test3.config";
+const psS32 testConfig3Fails = 1;
+
+const char testConfig2[] = "test2.config";
+const psS32 testConfig2Fails = 17;
+
+// SDR-14 test config file #1
+const char  testConfig1[] = "test1.config";
+const psS32 testConfig1FailsOverwrite = 0;
+const psS32 testConfig1Fails = 1;
+const psS32 testConfig1Items = 25;
+const char* testConfig1KeyOverwrite[] =
+    {
+        "Double","String","boolean","primes","comment",
+        "comment","comment","comment","comment","Float",
+        "boolean1","negprimes","vector1","vector2","vector3",
+        "vector4","vector5","vector6","vector7","vector8",
+        "CELL.00", "CELL.01","MYCELL","MYCELL","cell"
+    };
+const char* testConfig1CommentOverwrite[] =
+    {
+        "This is a comment","comment","The value of 'boolean' is 'true'","These are prime numbers",
+        "","","","","",
+        "This generates a warning, and, if 'overwrite' is 'false', is ignored","The value of 'boolean' is 'false'",
+        "","","","","",
+        "","","","",
+        "","","","A number",""
+    };
+const psMetadataType testConfig1TypeOverwrite[] =
+    {
+        PS_META_F64, PS_META_STR, PS_META_BOOL, PS_META_VEC, PS_META_STR,
+        PS_META_STR, PS_META_STR, PS_META_STR, PS_META_STR,  PS_META_F64,
+        PS_META_BOOL, PS_META_VEC, PS_META_VEC, PS_META_VEC, PS_META_VEC,
+        PS_META_VEC, PS_META_VEC, PS_META_VEC, PS_META_VEC, PS_META_VEC,
+        PS_META_META, PS_META_META, PS_META_META, PS_META_S32, PS_META_META
+    };
+const psS32 testConfig1ValueS32Overwrite[] =
+    {
+        0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0,
+        0, 0, 0, 123, 0
+    };
+const psF32 testConfig1ValueF32Overwrite[] =
+    {
+        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, 0.0, 0.0, 0.0, 0.0,
+        0.0, 0.0, 0.0, 0.0, 0.0
+    };
+const psF64 testConfig1ValueF64Overwrite[] =
+    {
+        1.23456789, 0.0, 0.0, 0.0, 0.0,
+        0.0, 0.0, 0.0, 0.0, 1.23456,
+        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
+    };
+const psBool testConfig1ValueBoolOverwrite[] =
+    {
+        false, false, true, false, false,
+        false, false, false, false, false,
+        false, false, false, false, false,
+        false, false, false, false, false,
+        false, false, false, false, false
+    };
+const char* testConfig1ValueStrOverwrite[] =
+    {
+        "", "This is the string that forms the value","","","This",
+        "is","a","non-unique","key","",
+        "","","","","",
+        "","","","","",
+        "","","","",""
+    };
+const psS32 testConfig1ValueVecItemsU8 = 7;
+const psElemType testConfig1ValueVecTypeU8 = PS_TYPE_U8;
+const psU8 testConfig1ValueVecValueU8[] =
+    {
+        2, 3, 5, 7, 11, 13, 17
+    };
+const psS32 testConfig1ValueVecItemsS8 = 8;
+const psElemType testConfig1ValueVecTypeS8 = PS_TYPE_S8;
+const psS8 testConfig1ValueVecValueS8[] =
+    {
+        -2, -3, -5, -7, -11, -13, -17, -19
+    };
+const psS32 testConfig1ValueVecItemsU16 = 5;
+const psElemType testConfig1ValueVecTypeU16 = PS_TYPE_U16;
+const psU16 testConfig1ValueVecValueU16[] =
+    {
+        0, 1, 2, 4, 8
+    };
+const psS32 testConfig1ValueVecItemsU32 = 6;
+const psElemType testConfig1ValueVecTypeU32 = PS_TYPE_U32;
+const psU32 testConfig1ValueVecValueU32[] =
+    {
+        0, 8, 16, 32, 64, 128
+    };
+const psS32 testConfig1ValueVecItemsU64 = 3;
+const psElemType testConfig1ValueVecTypeU64 = PS_TYPE_U64;
+const psU64 testConfig1ValueVecValueU64[] =
+    {
+        0, 64, 256
+    };
+const psS32 testConfig1ValueVecItemsS16 = 5;
+const psElemType testConfig1ValueVecTypeS16 = PS_TYPE_S16;
+const psS16 testConfig1ValueVecValueS16[] =
+    {
+        -2, -1, 0, 1, 2
+    };
+const psS32 testConfig1ValueVecItemsS32 = 6;
+const psElemType testConfig1ValueVecTypeS32 = PS_TYPE_S32;
+const psS32 testConfig1ValueVecValueS32[] =
+    {
+        -4, -2, 0, 2, 4, 6
+    };
+const psS32 testConfig1ValueVecItemsS64 = 7;
+const psElemType testConfig1ValueVecTypeS64 = PS_TYPE_S64;
+const psS64 testConfig1ValueVecValueS64[] =
+    {
+        -16, -4, 0, 4, 16, 36, 64
+    };
+const psS32 testConfig1ValueVecItemsF32 = 4;
+const psElemType testConfig1ValueVecTypeF32 = PS_TYPE_F32;
+const psF32 testConfig1ValueVecValueF32[] =
+    {
+        -1.03, 1.04, -1.05, 1.06
+    };
+const psS32 testConfig1ValueVecItemsF64 = 5;
+const psElemType testConfig1ValueVecTypeF64 = PS_TYPE_F64;
+const psF64 testConfig1ValueVecValueF64[] =
+    {
+        -2.22, 2.21, -2.20, 2.19, -2.18
+    };
+const psS32 testConfig1ValueMetaItems1 = 3;
+const char* testConfig1ValueMetaNames1[] =
+    {
+        "EXTNAME","BIASSEC","CHIP"
+    };
+const psMetadataType testConfig1ValueMetaTypes1[] =
+    {
+        PS_META_STR, PS_META_STR, PS_META_STR
+    };
+const char* testConfig1ValueMetaValue1[] =
+    {
+        "CCD00","BSEC-00","CHIP.00"
+    };
+const psS32 testConfig1ValueMetaItems2 = 3;
+const char* testConfig1ValueMetaNames2[] =
+    {
+        "EXTNAME","BIASSEC","CHIP"
+    };
+const psMetadataType testConfig1ValueMetaTypes2[] =
+    {
+        PS_META_STR, PS_META_STR, PS_META_STR
+    };
+const char* testConfig1ValueMetaValue2[] =
+    {
+        "CCD01","BSEC-01","CHIP.00"
+    };
+const psS32 testConfig1ValueMetaItems3 = 4;
+const char* testConfig1ValueMetaNames3[] =
+    {
+        "EXTNAME","BIASSEC","CHIP","NCELL"
+    };
+const psMetadataType testConfig1ValueMetaTypes3[] =
+    {
+        PS_META_STR, PS_META_STR, PS_META_STR, PS_META_S32
+    };
+const char* testConfig1ValueMetaValueStr3[] =
+    {
+        "CCD00","BSEC-00","CHIP.00",""
+    };
+const psS32 testConfig1ValueMetaValueS323[] =
+    {
+        0, 0, 0, 24
+    };
+
+static void writeMetadata(psMetadata* metadata, char* indentStr)
+{
+    writeMetadataList(metadata->list, indentStr);
+}
+
+static void writeMetadataList(psList* metadataItemList, char* indentStr)
+{
+    psMetadataItem* entryChild        = NULL;
+    psMetadataItem* searchChild       = NULL;
+    psArray*        nonUniqueKeyArray = NULL;
+    psBool          keyFound          = false;
+    char*           tempKey           = NULL;
+
+    // Allocate iterator for moving through metadata list
+    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
+    psListIterator* searchIter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
+
+    // Allocate array for nonUnique key names
+    nonUniqueKeyArray = psArrayAlloc(10);
+    nonUniqueKeyArray->n = 0;
+
+
+    // Loop through all items in the list
+    while ( (entryChild = psListGetAndIncrement(iter)) != NULL) {
+        // Search list for another entry with same key name
+        // Check if last entry
+        if(iter->index != metadataItemList->n) {
+            // Set search iterator to index
+            if(!psListIteratorSet(searchIter,iter->index) ) {
+                psError(PS_ERR_UNKNOWN,true,"Error searching list for multiple keys");
+                break;
+            }
+            keyFound = false;
+            while ( (searchChild = psListGetAndIncrement(searchIter)) != NULL) {
+                if(strcmp(entryChild->name,searchChild->name) == 0) {
+                    // Search nonUnique key array
+                    for(psS32 i = 0; i < nonUniqueKeyArray->n; i++) {
+                        if(strcmp(entryChild->name,nonUniqueKeyArray->data[i]) == 0) {
+                            keyFound = true;
+                        }
+                    }
+                    if(!keyFound) {
+                        // Add key to non-unique array
+                        tempKey = psStringCopy(entryChild->name);
+                        nonUniqueKeyArray = psArrayAdd(nonUniqueKeyArray,1,tempKey);
+                        psFree(tempKey);
+
+                        // Print MULTI line
+                        printf("%-25s MULTI\n",entryChild->name);
+
+                        // Break out of loop
+                        break;
+                    }
+                }
+            }
+        }
+        writeMetadataItem(entryChild,indentStr);
+    }
+
+    psFree(iter);
+    psFree(searchIter);
+    psFree(nonUniqueKeyArray);
+}
+
+char* vectorToConfigString(psVector* vector)
+{
+    psS32  maxLength = 256;
+
+    char* str = psAlloc(sizeof(char)*maxLength+1);
+
+    if (vector == NULL) {
+        snprintf(str,maxLength, "NULL");
+        return str;
+    }
+
+    int size = vector->n;
+
+    if (size == 0) {
+        snprintf(str,maxLength, " ");
+        return str;
+    }
+
+    char* tempStr = psAlloc(sizeof(char)*maxLength+1);
+    *str = '\0';
+    bool full = false;
+
+    #define APPEND_ELEMENTS_CASE(TYPE, NATIVE_TYPE, FORMAT) \
+case PS_TYPE_##TYPE: \
+    strcat(str,#TYPE); \
+    for(psS32 i = 0; i < (strlen(str)-6); i++) {  \
+        strcat(str," "); \
+    } \
+    for (lcv=0; lcv < size && ! full; lcv++) { \
+        snprintf(tempStr, maxLength, "%s" FORMAT, prefix, (NATIVE_TYPE) (vector->data.TYPE[lcv])); \
+        strncat(str,tempStr,maxLength); \
+        full = (strlen(str) > maxLength-2); \
+        prefix = ","; \
+    } \
+    break;
+
+    int lcv;
+    char* prefix = " ";
+    switch(vector->type.type) {
+        APPEND_ELEMENTS_CASE(S8,char,"%hd")
+        APPEND_ELEMENTS_CASE(S16,short int,"%hd")
+        APPEND_ELEMENTS_CASE(S32,int,"%d")
+        APPEND_ELEMENTS_CASE(S64,long,"%ld")
+        APPEND_ELEMENTS_CASE(U8,unsigned char,"%hu")
+        APPEND_ELEMENTS_CASE(U16,unsigned short,"%hu")
+        APPEND_ELEMENTS_CASE(U32,unsigned int, "%u")
+        APPEND_ELEMENTS_CASE(U64,unsigned long,"%lu")
+        APPEND_ELEMENTS_CASE(F32,double,"%g")
+        APPEND_ELEMENTS_CASE(F64,double,"%g")
+    default:
+        snprintf(str,maxLength,"INVALID TYPE");
+        break;
+    }
+
+    psFree(tempStr);
+
+    return str;
+}
+
+
+static void writeMetadataItem(psMetadataItem *metadataItem, char* indentStr)
+{
+    char*  vecStr;
+
+    switch(metadataItem->type) {
+    case PS_META_BOOL:
+        printf("%s%-25s BOOL  %40d",indentStr,metadataItem->name,metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("%s%-25s S32   %40d",indentStr,metadataItem->name,metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("%s%-25s F32   %40f",indentStr,metadataItem->name,metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("%s%-25s F64   %40lf",indentStr,metadataItem->name,metadataItem->data.F64);
+        break;
+    case PS_META_VEC:
+        vecStr = (char*)vectorToConfigString((psVector*)metadataItem->data.V);
+        printf("%s@%-24s %s",indentStr,metadataItem->name,vecStr);
+        psFree(vecStr);
+        break;
+    case PS_META_STR:
+        printf("%s%-25s STR   %40s",indentStr,metadataItem->name,(char*)metadataItem->data.V);
+        break;
+    case PS_META_META:
+        printf("%s%-25s METADATA\n",indentStr,metadataItem->name);
+        char nestedStr[256] = "    ";
+        strcat(nestedStr,indentStr);
+        writeMetadata((psMetadata*)metadataItem->data.md,nestedStr);
+        printf("%sEND",indentStr);
+        break;
+    default:
+        printf("#%s%-24s BAD TYPE=%d",indentStr,metadataItem->name,metadataItem->type);
+        break;
+    }
+    if(strlen(metadataItem->comment) > 0) {
+        printf("  # %-20s\n",metadataItem->comment);
+    } else {
+        printf("\n");
+    }
+}
+
+static psBool checkFailedLines(psS32 failedLines, psS32 expectedFailedLines, char* configFile)
+{
+    psBool     returnValue = true;
+
+    // Verify the expected number of failed lines
+    if(failedLines != expectedFailedLines) {
+        psError(PS_ERR_UNKNOWN,true,"File: %s : Number of failed lines = %d not as expected %d",
+                configFile,failedLines,expectedFailedLines);
+        returnValue = false;
+    }
+    return returnValue;
+}
+
+static psBool checkNumberOfItems(psMetadata* md, psS32 expectedItems, char* configFile)
+{
+    psBool     returnValue = true;
+
+    // Verify the number of items in metadata
+    if(md->list->n != expectedItems) {
+        psError(PS_ERR_UNKNOWN,true,"File: %s : Number of items = %d not as expected %d",
+                configFile,md->list->n, expectedItems);
+        returnValue = false;
+    }
+    return returnValue;
+}
+
+static psBool checkItemName(psMetadataItem* mdItem, char* expectedName, char* configFile)
+{
+    psBool    returnValue = true;
+
+    // Compare key names
+    if(strcmp(mdItem->name,expectedName) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"File: %s : Key name %s not as expected %s",
+                configFile,mdItem->name,expectedName);
+        returnValue = false;
+    }
+
+    return returnValue;
+}
+
+static psBool checkItemType(psMetadataItem* mdItem, psS32 expectedType, char* configFile)
+{
+    psBool     returnValue = true;
+
+    // Compare types
+    if(mdItem->type != expectedType) {
+        psError(PS_ERR_UNKNOWN,true,"File: %s : Type %d not as expected %d",
+                configFile,mdItem->type,expectedType);
+        returnValue = false;
+    }
+    return returnValue;
+}
+
+static psBool checkItemComment(psMetadataItem* mdItem, char* expectedComment, char* configFile)
+{
+    psBool    returnValue = true;
+
+    // Compare comments
+    if(strcmp(mdItem->comment,expectedComment) != 0) {
+        psError(PS_ERR_UNKNOWN,true,"File: %s : Comment %s not as expected %s",
+                configFile,mdItem->comment,expectedComment);
+        returnValue = false;
+    }
+    return returnValue;
+}
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if( !runTestSuite(stderr,"psMetadataConfigParse",tests,argc,argv)) {
+        return 1;
+    }
+
+    return 0;
+}
+
+psS32 testMetadataParseConfig(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psMetadataItem*   entryChild     = NULL;
+    psU32             failedLines    = 0;
+    psListIterator*   iter           = NULL;
+    psListIterator*   mdIter         = NULL;
+    psMetadataItem*   mdChild        = NULL;
+    psS32             metaCounter    = 0;
+    psS32             mdCounter      = 0;
+
+    // Read config file test1.config with overwrite set true
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig1,true);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig1FailsOverwrite,(char*)testConfig1)) {
+        return 1;
+    }
+    // Verify the number of items in metadata
+    if(!checkNumberOfItems(metadata1,testConfig1Items,(char*)testConfig1)) {
+        return 2;
+    }
+    // Verify metadata item quads
+    iter = psListIteratorAlloc(metadata1->list, PS_LIST_HEAD, true);
+    for(psS32 i = 0; i < testConfig1Items; i++) {
+        // Get list item
+        entryChild = psListGetAndIncrement(iter);
+
+        // Verify end of list not reached prematurely
+        if(entryChild == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"End of list encountered at %d not as expected %d",
+                    i,testConfig1Items);
+            return i*10+1;
+        }
+        // Verify name
+        if(!checkItemName(entryChild,(char*)testConfig1KeyOverwrite[i],(char*)testConfig1)) {
+            return i*10+2;
+        }
+        // Verify type
+        if(!checkItemType(entryChild,testConfig1TypeOverwrite[i],(char*)testConfig1)) {
+            return i*10+3;
+        }
+        // Verify comment
+        if(!checkItemComment(entryChild,(char*)testConfig1CommentOverwrite[i],(char*)testConfig1)) {
+            return i*10+4;
+        }
+        // Compare values
+        switch(entryChild->type) {
+        case PS_META_S32:
+            if(entryChild->data.S32 != testConfig1ValueS32Overwrite[i]) {
+                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %d not as expected %d",
+                        testConfig1,entryChild->data.S32, testConfig1ValueS32Overwrite[i]);
+                return i*10+5;
+            }
+            break;
+        case PS_META_F32:
+            if(fabs(entryChild->data.F32 - testConfig1ValueF32Overwrite[i]) > ERROR_TOL) {
+                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %f not as expected %f",
+                        testConfig1,entryChild->data.F32, testConfig1ValueF32Overwrite[i]);
+                return i*10+5;
+            }
+            break;
+        case PS_META_F64:
+            if(fabs(entryChild->data.F64 - testConfig1ValueF64Overwrite[i]) > ERROR_TOL) {
+                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %lf not as expected %lf",
+                        testConfig1,entryChild->data.F64, testConfig1ValueF64Overwrite[i]);
+                return i*10+5;
+            }
+            break;
+        case PS_META_BOOL:
+            if(entryChild->data.B != testConfig1ValueBoolOverwrite[i]) {
+                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %d not as expected %d",
+                        testConfig1,entryChild->data.B,testConfig1ValueBoolOverwrite[i]);
+                return i*10+5;
+            }
+            break;
+        case PS_META_STR:
+            if(strcmp(entryChild->data.V,testConfig1ValueStrOverwrite[i]) != 0) {
+                psError(PS_ERR_UNKNOWN,true,"File: %s : Value %s not as expected %s",
+                        testConfig1,entryChild->data.V,testConfig1ValueStrOverwrite[i]);
+                return i*10+5;
+            }
+            break;
+        case PS_META_VEC:
+            // Verify the correct number of entries
+            switch(((psVector*)(entryChild->data.V))->type.type) {
+            case PS_TYPE_U8:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU8) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU8);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU8) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU8);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsU8; j++) {
+                    if(((psVector*)entryChild->data.V)->data.U8[j] != testConfig1ValueVecValueU8[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.U8[j],
+                                testConfig1ValueVecValueU8[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_U16:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU16) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU16);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU16) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU16);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsU16; j++) {
+                    if(((psVector*)entryChild->data.V)->data.U16[j] != testConfig1ValueVecValueU16[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.U16[j],
+                                testConfig1ValueVecValueU16[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_U32:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU32) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU32);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU32) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU32);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsU32; j++) {
+                    if(((psVector*)entryChild->data.V)->data.U32[j] != testConfig1ValueVecValueU32[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.U32[j],
+                                testConfig1ValueVecValueU32[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_U64:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsU64) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsU64);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeU64) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeU64);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsU64; j++) {
+                    if(((psVector*)entryChild->data.V)->data.U64[j] != testConfig1ValueVecValueU64[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %ld not as expected %ld",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.U64[j],
+                                testConfig1ValueVecValueU64[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_S8:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS8) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS8);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS8) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS8);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsS8; j++) {
+                    if(((psVector*)entryChild->data.V)->data.S8[j] != testConfig1ValueVecValueS8[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.S8[j],
+                                testConfig1ValueVecValueS8[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_S16:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS16) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS16);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS16) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS16);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsS16; j++) {
+                    if(((psVector*)entryChild->data.V)->data.S16[j] != testConfig1ValueVecValueS16[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.S16[j],
+                                testConfig1ValueVecValueS16[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_S32:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS32) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS32);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS32) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS32);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsS32; j++) {
+                    if(((psVector*)entryChild->data.V)->data.S32[j] != testConfig1ValueVecValueS32[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %d not as expected %d",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.S32[j],
+                                testConfig1ValueVecValueS32[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_S64:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsS64) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsS64);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeS64) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeS64);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsS64; j++) {
+                    if(((psVector*)entryChild->data.V)->data.S64[j] != testConfig1ValueVecValueS64[j]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %ld not as expected %ld",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.S64[j],
+                                testConfig1ValueVecValueS64[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_F32:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsF32) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsF32);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeF32) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeF32);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsF32; j++) {
+                    if(fabs(((psVector*)entryChild->data.V)->data.F32[j]-testConfig1ValueVecValueF32[j])
+                            > ERROR_TOL) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %f not as expected %f",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.F32[j],
+                                testConfig1ValueVecValueF32[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            case PS_TYPE_F64:
+                if(((psVector*)(entryChild->data.V))->n != testConfig1ValueVecItemsF64) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector entries %d not as expected %d",
+                            testConfig1,((psVector*)(entryChild->data.V))->n,testConfig1ValueVecItemsF64);
+                    return i*10+5;
+                }
+                // Verify the correct type
+                if(((psVector*)(entryChild->data.V))->type.type != testConfig1ValueVecTypeF64) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Vector type %d not as expected %s",
+                            testConfig1,((psVector*)entryChild->data.V)->type.type,testConfig1ValueVecTypeF64);
+                    return i*10+5;
+                }
+                // Verify the values in vector
+                for(psS32 j = 0; j < testConfig1ValueVecItemsF64; j++) {
+                    if(fabs(((psVector*)entryChild->data.V)->data.F64[j]-testConfig1ValueVecValueF64[j])
+                            > ERROR_TOL) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Vector data[%d] = %lf not as expected %lf",
+                                testConfig1,j,((psVector*)entryChild->data.V)->data.F64[j],
+                                testConfig1ValueVecValueF64[j]);
+                        return i*10+5*j;
+                    }
+                }
+                break;
+            default:
+                break;
+            }
+            break;
+        case PS_META_META:
+            if(metaCounter == 0) {
+                // Check if number of items is as expected
+                if(entryChild->data.md->list->n != testConfig1ValueMetaItems1) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 items %d not as expected %d",
+                            testConfig1,entryChild->data.md->list->n,testConfig1ValueMetaItems1);
+                    return i*10+6;
+                }
+                // Loop through metadata items
+                mdIter = psListIteratorAlloc(entryChild->data.md->list, PS_LIST_HEAD, true);
+                mdCounter = 0;
+                while ( (mdChild = psListGetAndIncrement(mdIter)) != NULL) {
+                    if(strcmp(mdChild->name,testConfig1ValueMetaNames1[mdCounter]) != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 name[%d] %s not as expected %s",
+                                testConfig1,mdCounter,mdChild->name,testConfig1ValueMetaNames1[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    if(mdChild->type != testConfig1ValueMetaTypes1[mdCounter]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 type[%d] %d not as expected %d",
+                                testConfig1,mdCounter,mdChild->type,testConfig1ValueMetaTypes1[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    if(strcmp((char*)mdChild->data.V,testConfig1ValueMetaValue1[mdCounter]) != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 1 value[%d] %s not as expected %s",
+                                testConfig1,mdCounter,(char*)mdChild->data.V,testConfig1ValueMetaValue1[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    mdCounter++;
+                }
+                psFree(mdIter);
+            } else if(metaCounter == 1) {
+                // Check if number of items is as expected
+                if(entryChild->data.md->list->n != testConfig1ValueMetaItems2) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 items %d not as expected %d",
+                            testConfig1,entryChild->data.md->list->n,testConfig1ValueMetaItems2);
+                    return i*10+6;
+                }
+                // Loop through metadata items
+                mdIter = psListIteratorAlloc(entryChild->data.md->list, PS_LIST_HEAD, true);
+                mdCounter = 0;
+                while ( (mdChild = psListGetAndIncrement(mdIter)) != NULL) {
+                    if(strcmp(mdChild->name,testConfig1ValueMetaNames2[mdCounter]) != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 name[%d] %s not as expected %s",
+                                testConfig1,mdCounter,mdChild->name,testConfig1ValueMetaNames2[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    if(mdChild->type != testConfig1ValueMetaTypes2[mdCounter]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 type[%d] %d not as expected %d",
+                                testConfig1,mdCounter,mdChild->type,testConfig1ValueMetaTypes2[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    if(strcmp((char*)mdChild->data.V,testConfig1ValueMetaValue2[mdCounter]) != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 2 value[%d] %s not as expected %s",
+                                testConfig1,mdCounter,(char*)mdChild->data.V,testConfig1ValueMetaValue2[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    mdCounter++;
+                }
+                psFree(mdIter);
+            } else if(metaCounter == 2) {
+                // Check if number of items is as expected
+                if(entryChild->data.md->list->n != testConfig1ValueMetaItems3) {
+                    psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 items %d not as expected %d",
+                            testConfig1,entryChild->data.md->list->n,testConfig1ValueMetaItems3);
+                    return i*10+6;
+                }
+                // Loop through metadata items
+                mdIter = psListIteratorAlloc(entryChild->data.md->list, PS_LIST_HEAD, true);
+                mdCounter = 0;
+                while ( (mdChild = psListGetAndIncrement(mdIter)) != NULL) {
+                    if(strcmp(mdChild->name,testConfig1ValueMetaNames3[mdCounter]) != 0) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 name[%d] %s not as expected %s",
+                                testConfig1,mdCounter,mdChild->name,testConfig1ValueMetaNames3[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    if(mdChild->type != testConfig1ValueMetaTypes3[mdCounter]) {
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 type[%d] %d not as expected %d",
+                                testConfig1,mdCounter,mdChild->type,testConfig1ValueMetaTypes3[mdCounter]);
+                        return i*10+6*mdCounter;
+                    }
+                    switch(mdChild->type) {
+                    case PS_META_STR:
+                        if(strcmp((char*)mdChild->data.V,testConfig1ValueMetaValueStr3[mdCounter]) != 0) {
+                            psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 value[%d] %s not as expected %s",
+                                    testConfig1,mdCounter,(char*)mdChild->data.V,
+                                    testConfig1ValueMetaValueStr3[mdCounter]);
+                            return i*10+6*mdCounter;
+                        }
+                        break;
+                    case PS_META_S32:
+                        if(mdChild->data.S32 != testConfig1ValueMetaValueS323[mdCounter]) {
+                            psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 value[%d] %d not as expected %d",
+                                    testConfig1,mdCounter,mdChild->data.S32,
+                                    testConfig1ValueMetaValueS323[mdCounter]);
+                            return i*10+6*mdCounter;
+                        }
+                        break;
+                    default:
+                        psError(PS_ERR_UNKNOWN,true,"File: %s : Metadata 3 value[%d] unknown type",
+                                testConfig1,mdCounter);
+                        return i*10+6*mdCounter;
+                        break;
+                    }
+                    mdCounter++;
+                }
+                psFree(mdIter);
+            }
+            metaCounter++;
+            break;
+        default:
+            psError(PS_ERR_UNKNOWN,true,"Unexpected type %d encountered",entryChild->type);
+            return i*10+5;
+            break;
+        }
+    }
+
+    writeMetadata(metadata1,"");
+
+    psFree(metadata1);
+
+    return 0;
+}
+
+psS32 testMetadataParseConfig1(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psU32             failedLines    = 0;
+
+    // Read config file test2.config with overwrite set true
+    // This file contains parse errors
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate parse error message");
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig2,true);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig2Fails,(char*)testConfig2)) {
+        return 1;
+    }
+    // Verify return value is null
+    if(metadata1 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expected a NULL return for failed parse");
+        return 2;
+    }
+    psFree(metadata1);
+
+    // Attempt parse a non-existant file
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,"ab.config",true);
+    if(metadata1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected a NULL return for non-existant file");
+        return 3;
+    }
+
+    // Attempt parse with NULL failed lines ptr
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL failed lines arg");
+    metadata1 = psMetadataConfigParse(metadata1,NULL,testConfig2,true);
+    if(metadata1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected a NULL return for NULL failed lines argument");
+        return 4;
+    }
+
+    // Attempt parse with NULL file name
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL file name arg");
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,NULL,true);
+    if(metadata1 != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Expected a NULL return for NULL filename argument");
+        return 5;
+    }
+
+    psFree(metadata1);
+
+    return 0;
+}
+
+psS32 testMetadataParseConfig2(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psU32             failedLines    = 0;
+
+    // Read config file test3.config with overwrite set false
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error of duplicate key names");
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig3,false);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig3Fails,(char*)testConfig3)) {
+        return 1;
+    }
+    if(metadata1 == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expected a NULL return for failed due to overwrite false");
+        return 2;
+    }
+    psFree(metadata1);
+
+    return 0;
+}
+
+psS32 testMetadataParseConfig3(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psU32             failedLines    = 0;
+
+    // Read config file test4.config with overwrite set false
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig4,false);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig4Fails,(char*)testConfig4)) {
+        return 1;
+    }
+    // Print out metadata items for comparison against STDERR verified file
+    writeMetadata(metadata1,"");
+
+    psFree(metadata1);
+
+    return 0;
+}
+
+psS32 testMetadataParseConfig4(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psU32             failedLines    = 0;
+
+    // Read config file test4.config with overwrite set false
+    metadata1 = psMetadataConfigParse(metadata1,&failedLines,testConfig5,true);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig5Fails,(char*)testConfig5)) {
+        return 1;
+    }
+    psFree(metadata1);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/types/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_01.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_01.c	(revision 4547)
@@ -0,0 +1,259 @@
+/** @file  tst_psMetadata_01.c
+*
+*  @brief Test driver for psMetadata functions
+*
+*  This test driver contains the following tests for psMetadata:
+*     Test A - Read 1st hdr from simple FITS file
+*     Test B - Read 2nd hdr from complex FITS file
+*     Test C - Read named hdr from complex FITS file
+*     Test D - Remove items with same name from all metadata
+*     Test E - Attempt to use null file descriptor
+*     Test F - Attempt to open nonexistant file
+*     Test G - Attempt to use two null inputs
+*     Test H - Attempt to use bad extNum
+*     Test I - Attempt to use bad extNameTest
+*     Test J - Read named hdr w/ invalid extnum
+*     Test K - Free psMetadata
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
+static void printMetadata(psMetadata *metadata);
+static void printMetadataList(psList *metadataItemList, char* spaces);
+static void printMetadataTable(psHash *mdTable);
+
+static void printMetadata(psMetadata *metadata)
+{
+    printf("Contents of metadata list:\n");
+    printMetadataList(metadata->list, " ");
+    printf("\nContents of metadata table:\n");
+    printMetadataTable(metadata->table);
+}
+
+static void printMetadataList(psList *metadataItemList, char* spaces)
+{
+    psMetadataItem *entryChild = NULL;
+
+    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
+
+    while ( (entryChild=psListGetAndIncrement(iter)) != NULL) {
+        printMetadataItem(entryChild, spaces);
+    }
+
+    psFree(iter);
+
+}
+
+static void printMetadataTable(psHash *mdTable)
+{
+    psS32 i;
+    psHashBucket* ptr = NULL;
+    for(i=0; i<mdTable->n; i++) {
+        ptr = mdTable->buckets[i];
+        while (ptr != NULL) {
+            printMetadataItem(ptr->data, " ");
+            ptr = ptr->next;
+        }
+    }
+}
+
+static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
+{
+    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
+    printf("Key mdType: 0x%08x  ", metadataItem->type);
+
+    switch (metadataItem->type) {
+    case PS_META_MULTI:
+        printf("Key Value: %17c", ' ');
+        break;
+    case PS_META_BOOL:
+        printf("Key Value: %15d  ", metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("Key Value: %15d  ", metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("Key Value: %15.3f  ", metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("Key Value: %15.3f  ", metadataItem->data.F64);
+        break;
+    case PS_META_STR:
+        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
+        break;
+    default:
+        printf("Bad type: %d ", metadataItem->type);
+    }
+    printf("Key Comment: %s\n", metadataItem->comment);
+
+    if(metadataItem->data.V && metadataItem->type==PS_META_MULTI) {
+        printMetadataList(metadataItem->data.V, "    ");
+    }
+}
+
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psMetadata *metadata1 = NULL;
+    psMetadata *metadata2 = NULL;
+    psMetadata *metadata3 = NULL;
+
+
+    // Test A - Read 1st hdr from simple FITS file
+
+    /* Header contents for header_1.fits:
+
+        SIMPLE  =                    T / file does conform to FITS standard
+        BITPIX  =                    8 / number of bits per data pixel
+        NAXIS   =                    0 / number of data axes
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18
+        END
+    */
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file");
+    metadata1 = psMetadataReadHeader(metadata1, NULL, 1, "header_1.fits");
+    printMetadata(metadata1);
+    printFooter(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file", true);
+
+    // Test B - Read 2nd hdr from complex FITS file
+
+    /* Header contents for header_2.fits:
+
+        SIMPLE  =                    T / file does conform to FITS standard
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        EXTEND  =                    T / FITS dataset may contain extensions
+        COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
+        COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
+        END
+        <DATA>
+
+        XTENSION= 'IMAGE   '           / IMAGE extension
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        PCOUNT  =                    0 / required keyword; must = 0
+        GCOUNT  =                    1 / required keyword; must = 1
+        BITPIX  =                  -64 / number of bits per data pixel
+        EXTNAME = 'MY_DATA_1'
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46
+        END
+        <DATA>
+
+        XTENSION= 'IMAGE   '           / IMAGE extension
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        PCOUNT  =                    0 / required keyword; must = 0
+        GCOUNT  =                    1 / required keyword; must = 1
+        EXTNAME = 'MY_DATA_2'
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52
+        END
+        <DATA>
+    */
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file");
+    metadata2 = psMetadataReadHeader(metadata2, NULL, 2, "header_2.fits");
+    printMetadata(metadata2);
+    printFooter(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file", true);
+
+    // Test C - Read named hdr from complex FITS file
+    printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
+    metadata3 = psMetadataReadHeader(metadata3, "MY_DATA_2", -1, "header_2.fits");
+    printMetadata(metadata3);
+    printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
+
+
+    // Test D - Remove items with same name from all metadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test D - Remove items with same name from all metadata");
+    printf("Removed HISTORY from all metadata from prior test. Resulting metadata:\n\n");
+    psMetadataRemove(metadata3, 0, "HISTORY");
+    printMetadata(metadata3);
+    printFooter(stdout, "psMetadata", "Test D - Remove items with same name from all metadata", true);
+
+
+    // Test E - Attempt to use null file filename
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to use null filename",
+                            "Null fileName not allowed", 0);
+    psMetadataReadHeader(NULL, NULL, 1, NULL);
+    printFooter(stdout, "psMetadata", "Test E - Attempt to use null filename", true);
+
+
+    // Test F - Attempt to open nonexistant file
+    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to open nonexistant file",
+                            "FITS error while opening file: missing.dat...Couldn't close FITS file...", 0);
+    psMetadataReadHeader(NULL, NULL, 1, "missing.dat");
+    printFooter(stdout, "psMetadata", "Test F - Attempt to open nonexistant file", true);
+
+
+    // Test G - Attempt to use two null inputs
+    printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use two null inputs",
+                            "Null extName and extNum = 0 not allowed", 0);
+    psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
+    printFooter(stdout, "psMetadata", "Test G - Attempt to use two null inputs", true);
+
+
+    // Test H - Attempt to use bad extNum
+    printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use bad extNum",
+                            "FITS error while locating header 22: tried to move past end of file", 0);
+    metadata1 = psMetadataReadHeader(metadata1, NULL, 22, "header_2.fits");
+    if (metadata1 != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null when invalid ext given.");
+        return 10;
+    }
+    printFooter(stdout, "psMetadata", "Test H - Attempt to use bad extNum", true);
+
+
+    // Test I - Attempt to use bad extName
+    printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use bad extName",
+                            "FITS error while locating header AARGH: illegal HDU number", 0);
+    metadata1 = psMetadataReadHeader(NULL, "AARGH", -1, "header_2.fits");
+    if (metadata1 != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null invalid extname give.");
+        return 11;
+    }
+    printFooter(stdout, "psMetadata", "Test I - Attempt to use bad extName", true);
+
+
+    // Test J - Read named hdr w/ invalid extnum
+    printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum",
+                            "If extName specified, extNum should be -1.", 0);
+    metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
+    if (metadata1 != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum");
+        return 12;
+    }
+    printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true);
+
+
+    // Test K - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
+    psFree(metadata1);
+    psFree(metadata2);
+    psFree(metadata3);
+    if(psMemCheckLeaks(0, NULL, stdout,false)) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
+    }
+    psMemCheckCorruption(0);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psMetadata_02.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_02.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_02.c	(revision 4547)
@@ -0,0 +1,145 @@
+/** @file  tst_psMetadata_02.c
+ *
+ *  @brief Test driver for psMetadata functions
+ *
+ *  This test driver contains the following tests for psMetadata:
+ *     Test A - Allocate metadata items
+ *     Test B - Attempt to create metadata item with null name
+ *     Test C - Attempt to create metadata item with invalid type
+ *     Test D - Allocate metadata
+ *     Test E - Attempt to add metadata item to null metadata
+ *     Test F - Attempt to add null metadata item to metadata
+ *     Test G - Free psMetadata
+ *
+ *  @author  Ross Harman, MHPCC
+ *  @author  Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static void printMetadataItem(psMetadataItem *metadataItem)
+{
+    printf("Key Name: %8s  ", metadataItem->name);
+    printf("Key mdType: 0x%08x  ", metadataItem->type);
+
+    switch (metadataItem->type) {
+    case PS_META_MULTI:
+        printf("Key Value: %17c", ' ');
+        break;
+    case PS_META_BOOL:
+        printf("Key Value: %15d  ", metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("Key Value: %15d  ", metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("Key Value: %15.3f  ", metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("Key Value: %15.3f  ", metadataItem->data.F64);
+        break;
+    case PS_META_STR:
+        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
+        break;
+    default:
+        printf("Bad type: %d ", metadataItem->type);
+    }
+    printf("Key Comment: %s\n", metadataItem->comment);
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psMetadataItem *item1 = NULL;
+    psMetadata *metadata = NULL;
+    psMetadataItem *item2 = NULL;
+    psMetadataItem *item3 = NULL;
+    psMetadataItem *item4 = NULL;
+    psMetadataItem *item5 = NULL;
+    psMetadataItem *badItem = NULL;
+
+
+    // Test A - Allocate metadata items
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
+    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
+    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 111);
+    item3 = psMetadataItemAlloc("myItem3", PS_META_F32, "I am a single precision floating point", 222.222);
+    item4 = psMetadataItemAlloc("myItem4", PS_META_F64, "I am a double precision floating point", 333.333);
+    item5 = psMetadataItemAlloc("myItem5", PS_META_STR, "I am a string", "HELLO WORLD");
+    printMetadataItem(item1);
+    printMetadataItem(item2);
+    printMetadataItem(item3);
+    printMetadataItem(item4);
+    printMetadataItem(item5);
+    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
+
+
+    // Test B - Attempt to create metadata item with null name
+    printNegativeTestHeader(stdout,"psMetadata", "Test B - Attempt to create metadata item with null name",
+                            "Null value for name not allowed", 0);
+    psLogMsg(__func__,PS_LOG_INFO,"Following should produce error for null name.");
+    badItem = psMetadataItemAlloc(NULL, PS_META_STR, "I am a string", "HELLO WORLD");
+    if (badItem != NULL) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataItemAlloc did not return null with null name item.");
+        return 10;
+    }
+    printFooter(stdout, "psMetadata", "Test B - Attempt to create metadata item with null name", true);
+
+
+    // Test C - Attempt to create metadata item with invalid type
+    printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to create metadata item with invalid type",
+                            "Invalid psMetadataType: 6", 0);
+    badItem = psMetadataItemAlloc("badItem", -1, "I am bad", "Bad comment");
+    printFooter(stdout, "psMetadata", "Test C - Attempt to create metadata item with invalid type", true);
+
+
+    // Test D - Allocate metadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test D - Allocate metadata");
+    metadata = psMetadataAlloc();
+    printFooter(stdout, "psMetadata", "Test D - Allocate metadata", true);
+
+
+    // Test E - Attempt add metadata item to null metadata
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to add metadata item to null metadata",
+                            "Null metadata collection not allowed", 0);
+    psMetadataAddItem(NULL, item1, PS_LIST_HEAD, PS_META_DEFAULT);
+    printFooter(stdout, "psMetadata", "Test E - Attempt to add metadata item to null metadata", true);
+
+
+    // Test F - Attempt add null metadata item to metadata
+    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to add null metadata item to metadata",
+                            "Null metadata item not allowed", 0);
+    psMetadataAddItem(metadata, NULL, PS_LIST_HEAD, PS_META_DEFAULT);
+    printFooter(stdout, "psMetadata", "Test F - Attempt to add null metadata item to metadata", true);
+
+
+    // Test G - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test G - Free psMetadata");
+    psFree(item1);
+    psFree(item2);
+    psFree(item3);
+    psFree(item4);
+    psFree(item5);
+    psFree(badItem);
+    psFree(metadata);
+    if(psMemCheckLeaks(0, NULL, stdout,false) ) {
+        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
+        return 10;
+    }
+    psMemCheckCorruption(0);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test G - Free psMetadata", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psMetadata_03.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_03.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_03.c	(revision 4547)
@@ -0,0 +1,241 @@
+/** @file  tst_psMetadata_03.c
+*
+*  @brief Test driver for psMetadata functions
+*
+*  This test driver contains the following tests for psMetadata:
+*     Test A - Allocate metadata and items
+*     Test B - Remove items from metadata by name
+*     Test C - Remove items from metadata by index
+*     Test D - Attempt to use null metadata
+*     Test E - Attempt to remove non-existant metadata item by name
+*     Test F - Attempt to remove non-existant metadata item by index
+*     Test G - Attempt to add item to an invalid metadata structure
+*     Test H - Attempt to add item to an invalid metadata structure
+*     Test I - Attempt to add item with a null name
+*     Test J - Attempt to add item to an invalid metadata structure
+*     Test K - Free psMetadata
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static void printMetadataItem(psMetadataItem *metadataItem)
+{
+    printf("Key Name: %8s  ", metadataItem->name);
+    printf("Key mdType: 0x%08x  ", metadataItem->type);
+
+    switch (metadataItem->type) {
+    case PS_META_MULTI:
+        printf("Key Value: %17c", ' ');
+        break;
+    case PS_META_BOOL:
+        printf("Key Value: %15d  ", metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("Key Value: %15d  ", metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("Key Value: %15.3f  ", metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("Key Value: %15.3f  ", metadataItem->data.F64);
+        break;
+    case PS_META_STR:
+        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
+        break;
+    default:
+        printf("Bad type: %d ", metadataItem->type);
+    }
+    printf("Key Comment: %s\n", metadataItem->comment);
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psMetadataItem *item1 = NULL;
+    psMetadataItem *item2 = NULL;
+    psMetadataItem *item3 = NULL;
+    psMetadataItem *item4 = NULL;
+    psMetadataItem *errItem = NULL;
+    psMetadata *metadata = NULL;
+    psMetadata *errMetadata = NULL;
+    psHash *mdTable = NULL;
+    psList *mdList = NULL;
+    char *errName = NULL;
+
+    // Test A - Allocate metadata and items
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
+    metadata = psMetadataAlloc();
+    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
+    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
+    item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
+    item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
+    errItem = psMetadataItemAlloc("errItem", PS_META_S32, "I am a integer", 99);
+    printMetadataItem(item1);
+    printMetadataItem(item2);
+    printMetadataItem(item3);
+    printMetadataItem(item4);
+    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
+
+
+    // Test B - Remove items from metadata by name
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - Remove items from metadata by name");
+    if(!psMetadataAddItem(metadata, item1, PS_LIST_HEAD, PS_META_DEFAULT)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
+        return 10;
+    }
+    if(!psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2", PS_META_S32, "I am S32 integer",77)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
+        return 11;
+    }
+    if (!psMetadataRemove(metadata, 0, "myItem1")) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
+        return 12;
+    }
+    if (!psMetadataRemove(metadata, 0, "myItem2")) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
+        return 13;
+    }
+    printFooter(stdout, "psMetadata", "Test B - Remove items from metadata by name", true);
+
+
+    // Test C - Remove items from metadata by index
+    printPositiveTestHeader(stdout, "psMetadata", "Test C - Remove items from metadata by index");
+    if ( ! psMetadataAddItem(metadata, item3, PS_LIST_HEAD, PS_META_DEFAULT) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index.");
+        return 14;
+    }
+    if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_META_S32, "I am S32 integer",88) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index.");
+        return 15;
+    }
+    if( ! psMetadataRemove(metadata, 0, NULL) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by index.");
+        return 16;
+    }
+    if ( ! psMetadataRemove(metadata, 0, NULL ) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by index.");
+        return 17;
+    }
+    printFooter(stdout, "psMetadata", "Test C - Remove items from metadata by index", true);
+
+
+    // Test D - Attempt to use null metadata
+    printNegativeTestHeader(stdout,"psMetadata", "Test D - Attempt to use null metadata",
+                            "Null metadata collection not allowed", 0);
+    if ( psMetadataRemove(NULL, 0, NULL) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false when removing from null metadata.");
+        return 18;
+    }
+    printFooter(stdout, "psMetadata", "Test D - Attempt to use null metadata", true);
+
+
+    // Test E - Attempt to remove non-existant metadata item by name
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to remove non-existant metadata item by name",
+                            "Couldn't find metadata item. Name: AARGH", 0);
+    if( psMetadataRemove(metadata, 0, "AARGH") ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false when removing non-existant item.");
+        return 19;
+    }
+    printFooter(stdout, "psMetadata", "Test E - Attempt to remove non-existant metadata item by name", true);
+
+
+    // Test F - Attempt to remove non-existant metadata item by index
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to remove non-existant metadata item by index",
+                            "Couldn't find metadata item in list. Index: 22", 0);
+    if( psMetadataRemove(metadata, 22, NULL) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false when removing non-existant item.");
+        return 20;
+    }
+    printFooter(stdout, "psMetadata", "Test E - Attempt to remove non-existant metadata item by index", true);
+
+
+    // Test G - Attempt to add item to an invalid metadata structure
+    printNegativeTestHeader(stdout,"psMetadata","Test G - Attempt to add item to metadata w/o hash table",
+                            "Couldn't add item to invalid metadata structure.",0);
+    errMetadata = psMetadataAlloc();
+    mdTable = errMetadata->table;
+    errMetadata->table = NULL;
+    if ( psMetadataAddItem(errMetadata, item3, PS_LIST_HEAD, PS_META_DEFAULT) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table.");
+        return 21;
+    }
+    if ( psMetadataRemove(errMetadata, PS_LIST_HEAD, "errItem") ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false w/ invalid metadata struct w/o hash table.");
+        return 31;
+    }
+    errMetadata->table = mdTable;
+    printFooter(stdout,"psMetadata","Test G - Attempt to add item to invalid metadata w/o hash table", true);
+
+    // Test H - Attempt to add item to an invalid metadata structure
+    printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o link list",
+                            "Couldn't add item to invalid metadata structure.",0);
+    mdList = errMetadata->list;
+    errMetadata->list = NULL;
+    if ( psMetadataAddItem(errMetadata, item3, PS_LIST_HEAD, PS_META_DEFAULT) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o link list.");
+        return 22;
+    }
+    if ( psMetadataRemove(errMetadata, PS_LIST_HEAD, "errItem") ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return false w/ invalid metadata struct w/o link list.");
+        return 32;
+    }
+    errMetadata->list = mdList;
+    printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o link list", true);
+
+    // Test I - Attempt to add item with a null name
+    printNegativeTestHeader(stdout,"psMetadata","Test I - Attempt to add item with null name",
+                            "Couldn't add item with null name.",0);
+    errName = errItem->name;
+    errItem->name = NULL;
+    if ( psMetadataAddItem(errMetadata, errItem, PS_LIST_HEAD, PS_META_DEFAULT) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false with item with null name.");
+        return 23;
+    }
+    errItem->name = errName;
+    printFooter(stdout,"psMetadata","Test I - Attempt to add item with null name", true);
+
+    // Test J - Attempt to add item to an invalid metadata structure
+    printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o hash table",
+                            "Couldn't add item to invalid metadata structure.",0);
+    mdTable = errMetadata->table;
+    errMetadata->table = NULL;
+    if (psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_META_S32, "Integer",22) ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table.");
+        return 24;
+    }
+    errMetadata->table = mdTable;
+    printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o hash table", true);
+
+    // Test K - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
+    psFree(metadata);
+    psFree(item1);
+    psFree(item2);
+    psFree(item3);
+    psFree(item4);
+    psFree(errItem);
+    psFree(errMetadata);
+    if( psMemCheckLeaks(0, NULL, stdout,false) != 0 ) {
+        psError(PS_ERR_UNKNOWN, true,"Memory leaks detected.");
+        return 25;
+    }
+    psMemCheckCorruption(0);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
+
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psMetadata_04.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_04.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_04.c	(revision 4547)
@@ -0,0 +1,292 @@
+
+/** @file  tst_psMetadata_04.c
+*
+*  @brief Test driver for psMetadata functions
+*
+*  This test driver contains the following tests for psMetadata:
+*     Test A - Allocate metadata and items
+*     Test B - Lookup metadata item by name
+*     Test C - Attempt to use null metadata
+*     Test D - Attempt to use null key
+*     Test E - Attempt to lookup non-existant metadata item
+*     Test F - Lookup metadata item by index
+*     Test G - Lookup metadata item and return psS32 value
+*     Test H - Lookup metadata item and return psF64 value
+*     Test I - Lookup metadata item and return psVector pointer
+*     Test J - Attempt to use null metadata
+*     Test K - Attempt to get non-existant metadata item
+*     Test L - Attempt to look up with an invalid metadata object
+*     Test M - Attempt get item  with an invalid metadata object
+*     Test N - Attempt get value of non-existant metadata item
+*     Test O - Free psMetadata
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static void printMetadataItem(psMetadataItem *metadataItem)
+{
+    printf("Key Name: %8s  ", metadataItem->name);
+    printf("Key mdType: 0x%08x  ", metadataItem->type);
+
+    switch (metadataItem->type) {
+    case PS_META_MULTI:
+        printf("Key Value: %17c", ' ');
+        break;
+    case PS_META_BOOL:
+        printf("Key Value: %15d  ", metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("Key Value: %15d  ", metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("Key Value: %15.3f  ", metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("Key Value: %15.3f  ", metadataItem->data.F64);
+        break;
+    case PS_META_STR:
+        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
+        break;
+    default:
+        printf("Bad type: %d ", metadataItem->type);
+    }
+    printf("Key Comment: %s\n", metadataItem->comment);
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psBool status = 0;
+    psMetadataItem *item1 = NULL;
+    psMetadataItem *item2 = NULL;
+    psMetadataItem *item3 = NULL;
+    psMetadataItem *item4 = NULL;
+    psMetadataItem *item5 = NULL;
+    psMetadataItem *item6 = NULL;
+    psMetadataItem *item = NULL;
+    psMetadata *metadata = NULL;
+    psHash* tmpTable = NULL;
+    psList* tmpList = NULL;
+
+
+    // Test A - Allocate metadata and items
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
+    psVector *vec = psVectorAlloc(5, PS_TYPE_S32);
+    metadata = psMetadataAlloc();
+    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
+    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
+    item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
+    item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
+    item5 = psMetadataItemAlloc("myItem5", PS_META_F64, "I am a double", 3.14);
+    item6 = psMetadataItemAlloc("myItem6", PS_META_VEC, "I am a vector", vec);
+    printMetadataItem(item1);
+    printMetadataItem(item2);
+    printMetadataItem(item3);
+    printMetadataItem(item4);
+    printMetadataItem(item5);
+    psMetadataAddItem(metadata, item1, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item2, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item3, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item4, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item5, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item6, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMemDecrRefCounter(vec); // vs. psFree, which now would set vec to NULL (want to keep it to comparison later)
+    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
+
+
+    // Test B - Lookup metadata item by name
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - Lookup metadata item by name");
+    item = psMetadataLookup(metadata, "myItem2");
+    printf("Found item named %s\n", item->name);
+    if(item == NULL) {
+        printf("ERROR: Item should not be null\n");
+        return 10;
+    }
+    printFooter(stdout, "psMetadata", "Test B - Lookup metadata item by name", true);
+
+
+    // Test C - Attempt to use null metadata
+    printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to use null metadata",
+                            "Null metadata collection not allowed", 0);
+    if ( psMetadataLookup(NULL, "myItem2") != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataLookup did not return NULL with null metadata.");
+        return 11;
+    }
+    printFooter(stdout, "psMetadata", "Test C - Attempt to use null metadata", true);
+
+
+    // Test D - Attempt to use null key
+    printNegativeTestHeader(stdout,"psMetadata", "Test D - Attempt to use null key",
+                            "Null key name not allowed", 0);
+    if ( psMetadataLookup(metadata, NULL) != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadata did not return NULL with null key.");
+        return 12;
+    }
+    printFooter(stdout, "psMetadata", "Test D - Attempt to use null key", true);
+
+
+    // Test E - Attempt to lookup non-existant metadata item
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to lookup non-existant metadata item",
+                            "Couldn't find metadata item. Name: AARGH", 0);
+    if ( psMetadataLookup(metadata, "AARGH") != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadata did not return NULL with a non-existant item.");
+        return 13;
+    }
+    printFooter(stdout, "psMetadata", "Test E - Attempt to lookup non-existant metadata item", true);
+
+
+    // Test F - Lookup metadata item by index
+    printPositiveTestHeader(stdout, "psMetadata", "Test F - Lookup metadata item by index");
+    item = psMetadataGet(metadata, 0);
+    printf("Found item named %s\n", item->name);
+    if(item == NULL) {
+        printf("ERROR: Item should not be null\n");
+        return 14;
+    }
+    printFooter(stdout, "psMetadata", "Test F - Lookup metadata item by index", true);
+
+    // Test G - Lookup metadata item and return psS32 value
+    printPositiveTestHeader(stdout, "psMetadata", "Test G - Lookup metadata item and return psS32 value");
+    psS32 valueS32 = 0;
+    valueS32 = psMetadataLookupS32(&status, metadata, "myItem2");
+    if(valueS32 != 55) {
+        printf("ERROR: Bad value, %d, Expected 55\n", valueS32);
+        return 15;
+    } else if(! status) {
+        printf("ERROR: Bad status, %d\n", status);
+        return 15;
+    }
+    printFooter(stdout, "psMetadata", "Test G - Lookup metadata item and return psS32 value", true);
+
+    // Test H - Lookup metadata item and return psF64 value
+    printPositiveTestHeader(stdout, "psMetadata", "Test H - Lookup metadata item and return psF64 value");
+    psF64 valueF64 = 0.0;
+    valueF64 = psMetadataLookupF64(&status, metadata, "myItem5");
+    if(fabs(valueF64-3.14) > FLT_EPSILON) {
+        printf("ERROR: Bad value, %g, Expected 3.14\n", valueF64);
+        return 16;
+    } else if(! status) {
+        printf("ERROR: Bad status, %d\n", status);
+        return 16;
+    }
+    printFooter(stdout, "psMetadata", "Test H - Lookup metadata item and return psF64 value", true);
+
+    // Test I - Lookup metadata item and return psVector pointer
+    printPositiveTestHeader(stdout, "psMetadata", "Test I - Lookup metadata item and return psVector pointer");
+    psVector *valueVec = NULL;
+    valueVec = psMetadataLookupPtr(&status, metadata, "myItem6");
+    if(valueVec != vec) {
+        printf("ERROR: Bad vector pointer\n");
+        return 17;
+    } else if(! status) {
+        printf("ERROR: Bad status, %d\n", status);
+        return 17;
+    }
+    printFooter(stdout, "psMetadata", "Test I - Lookup metadata item and return psVector pointer", true);
+
+
+    // Test J - Attempt to use null metadata
+    printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null metadata",
+                            "Null metadata collection not allowed", 0);
+    item = psMetadataGet(NULL, 0);
+    if ( item != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataGet did not return NULL with null metadata structure");
+        return 18;
+    }
+    printFooter(stdout, "psMetadata", "Test J - Attempt to use null metadata", true);
+
+
+    // Test K - Attempt to get non-existant metadata item
+    printNegativeTestHeader(stdout,"psMetadata", "Test K - Attempt to get non-existant metadata item",
+                            "Couldn't find metadata item with given index. Index: 22", 0);
+    if ( psMetadataGet(metadata, 22) != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataGet did not return NULL with non-existant metadata item");
+        return 19;
+    }
+    printFooter(stdout, "psMetadata", "Test K - Attempt to get non-existant metadata item", true);
+
+    // Test L - Attempt to look up with an invalid metadata object
+    printNegativeTestHeader(stdout,"psMetadata","Test L - Attemp to look up with an invalid metadata",
+                            "Lookup item with invalid metadata object.", 0 );
+    tmpTable = metadata->table;
+    metadata->table = NULL;
+    if ( psMetadataLookup(metadata,"myItem2") != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataLookup did not return null for invalid metadata object");
+        return 20;
+    }
+    metadata->table = tmpTable;
+    printFooter(stdout, "psMetadata","Test L - Attempt to lookup an invalid metadata object.",true);
+
+    // Test M - Attempt get item with an invalid metadata object
+    printNegativeTestHeader(stdout,"psMetadata","Test M - Attempt to get item with an invalid metadata",
+                            "Get item with invalid metadata object.", 0 );
+    tmpList = metadata->list;
+    metadata->list = NULL;
+    if ( psMetadataGet(metadata,0) != NULL ) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataLookup did not return null for invalid metadata object");
+        return 21;
+    }
+    metadata->list = tmpList;
+    printFooter(stdout, "psMetadata","Test M - Attempt to get item with  invalid metadata object",true);
+
+    // Test N - Attempt get psS32 value of non-existant metadata item
+    printPositiveTestHeader(stdout, "psMetadata", "Test N - Attempt get psS32 value of non-existant metadata item");
+    valueS32 = psMetadataLookupS32(&status, metadata, "myItem22");
+    if(status) {
+        printf("ERROR: Bad status, %d, \n", status);
+        return 22;
+    }
+    printFooter(stdout, "psMetadata","Test N - Attempt get psS32 value of non-existant metadata item",true);
+
+    // Test O - Attempt get psF64 value of non-existant metadata item
+    printPositiveTestHeader(stdout, "psMetadata", "Test O - Attempt get psF64 value of non-existant metadata item");
+    valueF64 = psMetadataLookupF64(&status, metadata, "myItem22");
+    if(status) {
+        printf("ERROR: Bad status, %d, \n", status);
+        return 23;
+    }
+    printFooter(stdout, "psMetadata","Test O - Attempt get psF64 value of non-existant metadata item",true);
+
+    // Test P - Attempt get psVector value of non-existant metadata item
+    printPositiveTestHeader(stdout, "psMetadata", "Test P - Attempt get psVector value of non-existant metadata item");
+    valueVec = psMetadataLookupPtr(&status, metadata, "myItem22");
+    if(status) {
+        printf("ERROR: Bad status, %d, \n", status);
+        return 24;
+    }
+    printFooter(stdout, "psMetadata","Test P - Attempt get psVector value of non-existant metadata item",true);
+
+    // Test Q - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test Q - Free psMetadata");
+    psFree(metadata);
+    psFree(item1);
+    psFree(item2);
+    psFree(item3);
+    psFree(item4);
+    psFree(item5);
+    psFree(item6);
+    if ( psMemCheckLeaks(0, NULL, stdout,false) != 0 ) {
+        psError(PS_ERR_UNKNOWN, true,"memory leaks detected.");
+        return 23;
+    }
+    psMemCheckCorruption(0);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+        return 24;
+    }
+    printFooter(stdout, "psMetadata", "Test Q - Free psMetadata", true);
+
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psMetadata_05.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_05.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_05.c	(revision 4547)
@@ -0,0 +1,342 @@
+
+
+/** @file  tst_psMetadata_05.c
+*
+*  @brief Test driver for psMetadata functions
+*
+*  This test driver contains the following tests for psMetadata:
+*     Test A - Allocate metadata and items
+*     Test B - Set iterator at second index
+*     Test C - Get next item at index
+*     Test D - Get next item at index and string
+*     Test E - Get previous item at index
+*     Test F - Write metadata item to file
+*     Test G - Attempt to use null metadata with setIterator
+*     Test H - Attempt to use null metadata with getNext
+*     Test I - Attempt to use null metadata with getPrevious
+*     Test J - Attempt to use null file with itemPrint
+*     Test K - Attempt to use null format with itemPrint
+*     Test L - Attempt to use null item with itemPrint
+*     Test M - Free psMetadata
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static void printMetadataItem(psMetadataItem *metadataItem)
+{
+    printf("Key Name: %8s  ", metadataItem->name);
+    printf("Key mdType: 0x%08x  ", metadataItem->type);
+
+    switch (metadataItem->type) {
+    case PS_META_MULTI:
+        printf("Key Value: %17c", ' ');
+        break;
+    case PS_META_BOOL:
+        printf("Key Value: %15d  ", metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("Key Value: %15d  ", metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("Key Value: %15.3f  ", metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("Key Value: %15.3f  ", metadataItem->data.F64);
+        break;
+    case PS_META_STR:
+        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
+        break;
+    default:
+        printf("Bad type: %d ", metadataItem->type);
+    }
+    printf("Key Comment: %s\n", metadataItem->comment);
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psMetadataItem *item1 = NULL;
+    psMetadataItem *item2 = NULL;
+    psMetadataItem *item3 = NULL;
+    psMetadataItem *item4 = NULL;
+    psMetadataItem *item5 = NULL;
+    psMetadataItem *item6 = NULL;
+    psMetadataItem *item7 = NULL;
+    //    psMetadataItem *item8 = NULL;
+    psMetadata *metadata = NULL;
+    FILE *fd = NULL;
+
+    // Test A - Allocate metadata and items
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
+    metadata = psMetadataAlloc();
+    item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
+    item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
+    item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
+    item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
+    item5 = psMetadataItemAlloc("myItem5", PS_META_F32, "I am a float", 3.14);
+    item6 = psMetadataItemAlloc("myItem6", PS_META_F64,"I am a double", 6.28);
+    item7 = psMetadataItemAlloc("myItem7", PS_META_STR, "I am a string", "GNIRTS");
+    //    item8 = psMetadataItemAlloc("myItem8", PS_TYPE_PTR, PS_META_UNKNOWN, "I am unknown");
+    printMetadataItem(item1);
+    printMetadataItem(item2);
+    printMetadataItem(item3);
+    printMetadataItem(item4);
+    psMetadataAddItem(metadata, item1, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item2, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item3, PS_LIST_HEAD, PS_META_DEFAULT);
+    psMetadataAddItem(metadata, item4, PS_LIST_HEAD, PS_META_DEFAULT);
+    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
+
+    /*
+        // Test B - Set iterator at second index
+        printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");
+        if (!psMetadataSetIterator(metadata, 2)) {
+            psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");
+            return 100;
+        }
+        printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);
+
+
+        // Test C - Get next item at index
+        printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");
+        item = psMetadataGetNext(metadata, NULL, 2);
+        if(item == NULL) {
+            printf("ERROR: Item should not be null\n");
+        } else {
+            printf("Found item named %s\n", item->name);
+        }
+        printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);
+
+
+        // Test D - Get next item at index and string
+        printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");
+        item = psMetadataGetNext(metadata, "myItem1", 1);
+        if(item == NULL) {
+            printf("ERROR: Item should not be null\n");
+        } else {
+            printf("Found item named %s\n", item->name);
+        }
+        printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);
+
+
+        // Test E - Get previous item at index
+        printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");
+        item = psMetadataGetPrevious(metadata, NULL, 1);
+        if(item == NULL) {
+            printf("ERROR: Item should not be null\n");
+        } else {
+            printf("Found item named %s\n", item->name);
+        }
+        if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {
+            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");
+            return 45;
+        }
+        tmpList = metadata->list;
+        metadata->list = NULL;
+        if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {
+            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");
+            return 50;
+        }
+        metadata->list = tmpList;
+        printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);
+
+    */
+    // Test F - Write metadata item to file
+    printPositiveTestHeader(stdout, "psMetadata", "Test F - Write metadata item to file");
+    fd = fopen("temp/tst_psMetadata05_OUT", "w");
+    if(fd == NULL) {
+        printf("ERROR: Couldn't open file for writing\n");
+    }
+
+    if (psMetadataItemPrint(fd, "S32 = %ld\n", item2) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 10;
+    }
+
+    if (psMetadataItemPrint(fd, "S32 = %+06.1f\n", item2) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 10;
+    }
+
+    if (psMetadataItemPrint(fd, "BOL = %ld\n", item3) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 11;
+    }
+
+    if (psMetadataItemPrint(fd, "F32 = %g\n", item5) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 12;
+    }
+
+    if (psMetadataItemPrint(fd, "F32 = % #i\n", item5) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 12;
+    }
+
+    if (psMetadataItemPrint(fd, "F64 = %g\n", item6) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 13;
+    }
+
+    if (psMetadataItemPrint(fd, "STR = %s\n", item7) == false) {
+        printf("ERROR: Return type should be true\n");
+        return 14;
+    }
+    //    psLogMsg(__func__,PS_LOG_INFO,"Attempt to print item of invalid type, should generate error message");
+    //    if (psMetadataItemPrint(fd, "UNK = \n", item8) == true) {
+    //        printf("ERROR: Return type should be false\n");
+    //        fclose(fd);
+    //        return 15;
+    //    }
+    fclose(fd);
+
+    fd = fopen("temp/tst_psMetadata05_OUT", "r");
+    if(fd == NULL) {
+        printf("ERROR: Couldn't open file for reading\n");
+    }
+
+    char line[256];
+    char truth1[] = "S32 = 55";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth1, 8)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1);
+    }
+
+    char truth1b[] = "S32 = +055.0";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth1b, 12)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1b);
+    }
+
+    char truth2[] = "BOL = 0";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth2, 7)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth2);
+    }
+
+    char truth3[] = "F32 = 3.14";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth3, 10)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3);
+    }
+
+    char truth3b[] = "F32 =  3";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth3b, 8)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3b);
+    }
+
+    char truth4[] = "F64 = 6.28";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth4, 10)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth4);
+    }
+
+    char truth5[] = "STR = GNIRTS";
+    fgets(line, 256, fd);
+    if(strncmp(line, truth5, 12)) {
+        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth5);
+    }
+
+    fclose(fd);
+    printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true);
+    /*
+        // Test G - Attempt to use null metadata with setIterator
+        printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator",
+                                "Null metadata collection not allowed", 0);
+        if( psMetadataSetIterator(NULL, 0)) {
+            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter.");
+            return 101;
+        }
+        tmpList = metadata->list;
+        metadata->list = NULL;
+        if( psMetadataSetIterator(metadata,0)) {
+            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list.");
+            return 102;
+        }
+        metadata->list = tmpList;
+        printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true);
+
+
+        // Test H - Attempt to use null metadata with getNext
+        printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext",
+                                "Null metadata collection not allowed", 0);
+        if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) {
+            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata.");
+            return 40;
+        }
+        tmpList = metadata->list;
+        metadata->list = NULL;
+        if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) {
+            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata.");
+            return 41;
+        }
+        metadata->list = tmpList;
+
+        printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true);
+
+
+        // Test I - Attempt to use null metadata with getPrevious
+        printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious",
+                                "Null metadata collection not allowed", 0);
+        psMetadataGetPrevious(NULL, "myItem2", 0);
+        printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true);
+
+    */
+    // Test J - Attempt to use null file with itemPrint
+    printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null file with itemPrint",
+                            "Null file descriptor not allowed", 0);
+    psMetadataItemPrint(NULL, "Item value: %ld", item2);
+    printFooter(stdout, "psMetadata", "Test J - Attempt to use null file with itemPrint", true);
+
+
+    // Test K - Attempt to use null format with itemPrint
+    printNegativeTestHeader(stdout,"psMetadata", "Test K - Attempt to use null format with itemPrint",
+                            "Null format not allowed", 0);
+    psMetadataItemPrint(fd, NULL, item2);
+    printFooter(stdout, "psMetadata", "Test K - Attempt to use null format with itemPrint", true);
+
+
+    // Test L - Attempt to use null item with itemPrint
+    printNegativeTestHeader(stdout,"psMetadata", "Test L - Attempt to use null item with itemPrint",
+                            "Null metadata not allowed", 0);
+    psMetadataItemPrint(fd, "Item value: %ld", NULL);
+    printFooter(stdout, "psMetadata", "Test L - Attempt to use null item with itemPrint", true);
+
+
+    // Test M - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test M - Free psMetadata");
+    psFree(metadata);
+    psFree(item1);
+    psFree(item2);
+    psFree(item3);
+    psFree(item4);
+    psFree(item5);
+    psFree(item6);
+    psFree(item7);
+    //    psFree(item8);
+    if ( psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {
+        psError(PS_ERR_UNKNOWN, true,"Memory leaks detected.");
+        return 50;
+    }
+    psMemCheckCorruption(0);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+        return 51;
+    }
+    printFooter(stdout, "psMetadata", "Test M - Free psMetadata", true);
+
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psMetadata_06.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_06.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_06.c	(revision 4547)
@@ -0,0 +1,166 @@
+
+/** @file  tst_psMetadata_06.c
+*
+*  @brief Test driver for psMetadata functions
+*
+*  This test driver contains the following tests for psMetadata:
+*     Test A - Allocate metadata and items
+*     Test B - Add leaf node on top of existing leaf node
+*     Test C - Add leaf node to existing folder node
+*     Test D - Add folder node on top of existing leaf node
+*     Test E - Free psMetadata
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+
+#include <string.h>
+#include "pslib_strict.h"
+#include "psTest.h"
+
+static void printMetadataItem(psMetadataItem *metadataItem)
+{
+    printf("Key Name: %8s  ", metadataItem->name);
+    printf("Key mdType: 0x%08x  ", metadataItem->type);
+
+    switch (metadataItem->type) {
+    case PS_META_MULTI:
+        printf("Key Value: %17c", ' ');
+        break;
+    case PS_META_LIST:
+        printf("Key Value: %15s  ", "psList");
+        break;
+    case PS_META_BOOL:
+        printf("Key Value: %15d  ", metadataItem->data.B);
+        break;
+    case PS_META_S32:
+        printf("Key Value: %15d  ", metadataItem->data.S32);
+        break;
+    case PS_META_F32:
+        printf("Key Value: %15.3f  ", metadataItem->data.F32);
+        break;
+    case PS_META_F64:
+        printf("Key Value: %15.3f  ", metadataItem->data.F64);
+        break;
+    case PS_META_STR:
+        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
+        break;
+    default:
+        printf("Bad type: %d ", metadataItem->type);
+    }
+    printf("Key Comment: %s\n", metadataItem->comment);
+}
+
+
+psS32 main( psS32 argc, char* argv[] )
+{
+    psMetadataItem *item1a = NULL;
+    psMetadataItem *item1b = NULL;
+    psMetadataItem *item1c = NULL;
+    psMetadataItem *item2a = NULL;
+    psMetadataItem *item2b = NULL;
+    psMetadata *metadata = NULL;
+
+
+    // Test A - Allocate metadata and items
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata and items");
+    item1a = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
+    item1b = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 111);
+    item1c = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 222);
+    item2a = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 333);
+    item2b = psMetadataItemAlloc("myItem2", PS_META_LIST, "I am a list", NULL);
+    metadata = psMetadataAlloc();
+    printMetadataItem(item1a);
+    printMetadataItem(item1b);
+    printMetadataItem(item1c);
+    printMetadataItem(item2a);
+    printMetadataItem(item2b);
+    printFooter(stdout, "psMetadata", "Test A - Allocate metadata and items", true);
+
+
+    // Test B - Add leaf node on top of existing leaf node
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - replace an item in the metadata");
+    if(!psMetadataAddItem(metadata, item1a, PS_LIST_HEAD, PS_META_DEFAULT)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
+        return 20;
+    }
+    psMetadataItem* tempItem = psMetadataLookup(metadata, item1a->name);
+    if (tempItem != item1a) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't add the metadata entry.");
+        return 20;
+    }
+
+    if (!psMetadataAddItem(metadata, item1b, PS_LIST_HEAD, PS_META_REPLACE)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
+        return 21;
+    }
+
+    tempItem = psMetadataLookup(metadata, item1a->name);
+    if (tempItem != item1b) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't replace the metadata entry.");
+        return 21;
+    }
+
+    printFooter(stdout, "psMetadata", "Test B - replace an item in the metadata", true);
+
+
+    // Test C - Add leaf node to existing folder node
+    printPositiveTestHeader(stdout, "psMetadata", "Test C - add duplicate-key metadata item");
+    if (!psMetadataAddItem(metadata, item1c, PS_LIST_HEAD, PS_META_DUPLICATE_OK)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem return false for adding a not to existing node.");
+        return 22;
+    }
+
+    tempItem = psMetadataLookup(metadata, item1a->name);
+    if (tempItem == NULL || tempItem->type != PS_META_MULTI) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't add additional metadata entry of same key.");
+        return 22;
+    }
+    printFooter(stdout, "psMetadata", "Test C - add duplicate-key metadata item", true);
+
+
+    // Test D - Add folder node on top of existing leaf node
+    printPositiveTestHeader(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node");
+    if (!psMetadataAddItem(metadata, item2a, PS_LIST_HEAD, PS_META_DEFAULT)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node to existing leaf node.");
+        return 23;
+    }
+    if (!psMetadataAddItem(metadata, item2b, PS_LIST_HEAD, PS_META_DUPLICATE_OK)) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a nod to existing leaf node.");
+        return 24;
+    }
+    printFooter(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node", true);
+    tempItem = psMetadataLookup(metadata, item1a->name);
+    if (tempItem == NULL || tempItem->type != PS_META_MULTI) {
+        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem didn't add additional metadata entry of same key.");
+        return 24;
+    }
+
+
+    // Test E - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test E - Free psMetadata");
+    psFree(item1a);
+    psFree(item1b);
+    psFree(item1c);
+    psFree(item2a);
+    psFree(item2b);
+    psFree(metadata);
+    if ( psMemCheckLeaks(0, NULL, stdout, false) != 0 ) {
+        psError(PS_ERR_UNKNOWN, true,"Memory leaks detected.");
+        return 25;
+    }
+    psMemCheckCorruption(0);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test E - Free psMetadata", true);
+
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psMetadata_07.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_07.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psMetadata_07.c	(revision 4547)
@@ -0,0 +1,46 @@
+/** @file  tst_psMetadata_07.c
+*
+*  @brief Test driver for psMetadataIO functions
+*
+*  This test driver contains the following tests for psMetadata:
+*     Test A - Read an XML config file
+*     Test B - Free data
+*
+*  @author  Ross Harman, MHPCC
+*
+*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-07-13 02:47:01 $
+*
+*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+*
+*/
+#include "config.h"
+#include "pslib_strict.h"
+#include "psTest.h"
+
+int main(int argc, char* argv[])
+{
+    // Test A - Read an XML config file
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read an XML config file");
+    int res = 0;
+    psU32 nFail = 0;
+    psMetadata *md = NULL;
+    md = psMetadataConfigParseXml(md, &nFail, XML_CONFIG_FILE, true);
+    if (nFail != 0) {
+        printf("psMetadataConfigParseXml returned error %d\n", res);
+    }
+
+    psFree(md);
+    printFooter(stdout, "psMetadata", "Test A - Read an XML config file", true);
+
+    // Test B - Free data
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - Free data");
+    psMemCheckLeaks(0, NULL, stdout, false);
+    psS32 nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test B - Free data", true);
+
+    return 0;
+}
Index: /trunk/psLib/test/types/tst_psPixels.c
===================================================================
--- /trunk/psLib/test/types/tst_psPixels.c	(revision 4547)
+++ /trunk/psLib/test/types/tst_psPixels.c	(revision 4547)
@@ -0,0 +1,503 @@
+/** @file  tst_psPixels.c
+ *
+ *  @brief Contains the tests for psPixels.[ch]
+ *
+ *  @author Robert DeSonia, MHPCC
+ *
+ *  @version $Revision: 1.1 $
+ *           $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-07-13 02:47:01 $
+ *
+ *  Copyright 2005 Maui High Performance Computing Center, University of Hawaii
+ */
+
+#include "psTest.h"
+#include "pslib_strict.h"
+
+static psS32 testPixelsAlloc(void);
+static psS32 testPixelsRealloc(void);
+static psS32 testPixelsCopy(void);
+static int testPixelsToMask(void);
+static int testPixelsFromMask(void);
+static int testPixelsConcatenate(void);
+
+testDescription tests[] = {
+                              {testPixelsAlloc,860,"psPixelsAlloc",0,false},
+                              {testPixelsRealloc,862,"psPixelsRealloc",0,false},
+                              {testPixelsCopy,863,"psPixelsCopy",0,false},
+                              {testPixelsToMask,864,"psPixelsToMask",0,false},
+                              {testPixelsFromMask,865,"psPixelsFromMask",0,false},
+                              {testPixelsConcatenate,866,"psPixelsConcatenate",0,false},
+                              {NULL}
+                          };
+
+psS32 main(psS32 argc, char* argv[])
+{
+    psLogSetLevel(PS_LOG_INFO);
+
+    if ( ! runTestSuite(stderr,"psPixels",tests,argc,argv) ) {
+        psError(PS_ERR_UNKNOWN,true,"One or more tests failed");
+        return 1;
+    }
+    return 0;
+}
+
+psS32 testPixelsAlloc(void)
+{
+
+    psPixels* p0 = psPixelsAlloc(0);
+
+    if (p0 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to allocate a zero-sized psPixels");
+        return 1;
+    }
+    if (p0->data != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set data to NULL for a zero-sized psPixels");
+        return 2;
+    }
+    if (p0->n != p0->nalloc) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set n = 0");
+        return 3;
+    }
+    if (p0->nalloc != 0) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set nalloc = 0");
+        return 4;
+    }
+
+    psPixels* p1 = psPixelsAlloc(1);
+
+    if (p1 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to allocate a one-sized psPixels");
+        return 11;
+    }
+    if (p1->data == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to allocate data for a one-sized psPixels");
+        return 12;
+    }
+    p1->data[0].x = 1;
+    p1->data[0].y = 2;
+
+    if (p1->n != p1->nalloc) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set n = %d", p1->nalloc);
+        return 13;
+    }
+    if (p1->nalloc != 1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set nalloc = 1 (%d)",
+                p1->nalloc);
+        return 14;
+    }
+
+    psPixels* p2 = psPixelsAlloc(10);
+
+    if (p2 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to allocate a one-sized psPixels");
+        return 11;
+    }
+    if (p2->data == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to allocate data for a one-sized psPixels");
+        return 12;
+    }
+    for (int i = 0; i < 10; i++) {
+        p2->data[i].x = i;
+        p2->data[i].y = 100+i;
+    }
+
+    if (p2->n != p2->nalloc) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set n = %d", p2->nalloc);
+        return 13;
+    }
+    if (p2->nalloc != 10) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsAlloc failed to set nalloc = 1 (%d)",
+                p2->nalloc);
+        return 14;
+    }
+
+
+    psFree(p2);
+    psFree(p1);
+    psFree(p0);
+
+    return 0;
+}
+
+psS32 testPixelsRealloc(void)
+{
+
+    // first, tests that reallocing a NULL just allocates
+    psPixels* p0 = psPixelsRealloc(NULL,10);
+
+    if (p0 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to allocate a zero-sized psPixels");
+        return 1;
+    }
+    if (p0->data == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set data to NULL for a zero-sized psPixels");
+        return 2;
+    }
+    if (p0->n != p0->nalloc) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set n = 0");
+        return 3;
+    }
+    if (p0->nalloc != 10) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set nalloc = 10");
+        return 4;
+    }
+    for (int i = 0; i < 10; i++) {
+        p0->data[i].x = i;
+        p0->data[i].y = 100+i;
+    }
+    p0->n = 10;
+
+    psPixels* p1 = psPixelsRealloc(p0, 20);
+
+    if (p1 != p0) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to return a resized input psPixels");
+        return 11;
+    }
+    if (p1->data == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set data to non-NULL");
+        return 12;
+    }
+    if (p1->n != 10) {
+        psError(PS_ERR_UNKNOWN, true,
+                "resizing up didn't preserve the size");
+        return 13;
+    }
+    if (p1->nalloc != 20) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set nalloc = 0");
+        return 14;
+    }
+    for (int i = 0; i < 10; i++) {
+        if (p0->data[i].x != i || p0->data[i].y != 100+i) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "The value of pixel %d was not preserved (%d,%d) vs (%d,%d).",
+                    i, p0->data[i].x, p0->data[i].y, i, 100+i);
+            return 15;
+        }
+    }
+    for (int i = 10; i < 20; i++) {
+        p1->data[i].x = i;
+        p1->data[i].y = 100+i;
+    }
+    p1->n = 20;
+
+
+    psPixels* p2 = psPixelsRealloc(p1,5);
+
+    if (p2 != p1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc didn't return input psPixels.");
+        return 21;
+    }
+    if (p2->data == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to allocate data");
+        return 22;
+    }
+
+    if (p2->n != 5) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set n=nalloc after shrinking");
+        return 23;
+    }
+    if (p2->nalloc != 5) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set nalloc properly");
+        return 24;
+    }
+
+    psPixels* p3 = psPixelsRealloc(p2,0);
+
+    if (p3 != p2) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc didn't return input psPixels.");
+        return 31;
+    }
+    if (p3->data != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to deallocate data when size=0");
+        return 32;
+    }
+
+    if (p3->n != 0) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set n=nalloc after shrinking");
+        return 33;
+    }
+    if (p3->nalloc != 0) {
+        psError(PS_ERR_UNKNOWN, true,
+                "psPixelsRealloc failed to set nalloc properly");
+        return 34;
+    }
+
+    psFree(p3);
+
+    return 0;
+}
+
+psS32 testPixelsCopy(void)
+{
+    psPixels* in1 = psPixelsAlloc(10);
+
+    for (int i = 0; i < 10; i++) {
+        in1->data[i].x = i;
+        in1->data[i].y = 100+i;
+    }
+    in1->n = 10;
+
+    psPixels* out1 = psPixelsCopy(NULL, in1);
+    if (out1 == in1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "output == input?");
+        return 1;
+    }
+    if (out1 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "output == NULL?");
+        return 2;
+    }
+
+    if (out1->n != in1->n) {
+        psError(PS_ERR_UNKNOWN, true,
+                "out->n != in->n");
+        return 3;
+    }
+    for (int i = 0; i < out1->n; i++) {
+        if (out1->data[i].x != in1->data[i].x || out1->data[i].y != in1->data[i].y) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "failed to copy the values correctly at index %d", i);
+            return 4;
+        }
+    }
+
+    // now test what happens when copying a 0-length list.
+    psPixels* in2 = psPixelsAlloc(0);
+    psPixels* out2 = psPixelsCopy(out1, in2);
+    if (out2 != out1) {
+        psError(PS_ERR_UNKNOWN, true,
+                "failed to recycle.");
+        return 10;
+    }
+    if (out2->n != in2->n) {
+        psError(PS_ERR_UNKNOWN, true,
+                "failed to set size when copying 0-length pixel list.");
+        return 11;
+    }
+
+    // Attempt to copy from NULL input
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL input");
+    out2 = psPixelsCopy(out2,NULL);
+    if (out2 != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "Copying a NULL should create a NULL.");
+        return 20;
+    }
+
+    psFree(in1);
+    psFree(in2);
+
+    return 0;
+}
+
+int testPixelsToMask(void)
+{
+    // create a pixel list for
+    psPixels* pixels = psPixelsAlloc(10);
+    for (int i = 0; i < 10; i++) {
+        pixels->data[i].x = i;
+        pixels->data[i].y = i;
+    }
+    pixels->n = 10;
+
+    psImage* mask = psPixelsToMask(NULL,pixels, psRegionSet(0,10,0,10), 1);
+
+    if (mask == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "Resulting mask was null.");
+        return 1;
+    }
+    if (mask->type.type != PS_TYPE_MASK) {
+        psError(PS_ERR_UNKNOWN, true,
+                "mask type was not PS_TYPE_MASK.");
+        return 2;
+    }
+
+    for (int row=0;row<10;row++) {
+        psMaskType* rowData = mask->data.PS_TYPE_MASK_DATA[row];
+        for (int col=0;col<10;col++) {
+            if ( (col==row && rowData[col] != 1) ||
+                    (col!=row && rowData[col] != 0) ) {
+                psError(PS_ERR_UNKNOWN,true,
+                        "Mask has unexpected value, %d, at (%d,%d)",
+                        rowData[col], col, row);
+                return 10;
+            }
+        }
+    }
+
+    // test when input psPixels is NULL.
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for NULL pixels");
+    mask = psPixelsToMask(mask, NULL, psRegionSet(0,10,0,10), 1);
+    if (mask != NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "Resulting mask was not null though input psPixels was NULL.");
+        return 20;
+    }
+
+
+    // Test for invalid region
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error for invalid range");
+    mask = psPixelsToMask(mask,pixels,psRegionSet(10,0,10,0),1);
+    if(mask != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL for invalid range");
+        return 21;
+    }
+
+    psFree(mask);
+    psFree(pixels);
+
+    return 0;
+}
+
+int testPixelsFromMask(void)
+{
+    const int numRows = 10;
+    const int numCols = 20;
+    psImage* mask = psImageAlloc(numCols,numRows,PS_TYPE_MASK);
+    for (int row=0;row<numRows;row++) {
+        for (int col=0;col<numCols;col++) {
+            mask->data.PS_TYPE_MASK_DATA[row][col] = (row*2 == col) ? 1 : 0;
+        }
+    }
+
+    psPixels* pixels = psPixelsFromMask(NULL, mask, 1);
+
+    if (pixels == NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "resulting psPixels was NULL?");
+        return 1;
+    }
+
+    if (pixels->n != numRows) {
+        psError(PS_ERR_UNKNOWN, false,
+                "wrong number of pixels in list.  Got %d, should be %d.",
+                pixels->n, numRows);
+        return 2;
+    }
+
+    for (int i = 0; i < pixels->n; i++) {
+        if (mask->data.PS_TYPE_MASK_DATA[pixels->data[i].y][pixels->data[i].x] != 1) {
+            psError(PS_ERR_UNKNOWN, false,
+                    "Item in psPixels list (%d,%d) didn't coorespond to a masked value in image",
+                    pixels->data[i].x, pixels->data[i].y);
+            return 3;
+        }
+    }
+
+    // Attempt to create pixels from NULL mask
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error for NULL mask");
+    pixels = psPixelsFromMask(pixels, NULL, 1);
+
+    if (pixels != NULL) {
+        psError(PS_ERR_UNKNOWN, false,
+                "given a NULL image, got a non-NULL mask?");
+        return 4;
+    }
+
+    psFree(mask);
+
+    return 0;
+}
+
+int testPixelsConcatenate(void)
+{
+    // create a pixel list for
+    psPixels* pixels = psPixelsAlloc(10);
+    psPixels* pixels1 = psPixelsAlloc(10);
+    for (int i = 0; i < 10; i++) {
+        pixels->data[i].x = i;
+        pixels->data[i].y = i;
+        if (i%2) {
+            pixels1->data[i].x = -i;
+        } else {
+            pixels1->data[i].x = i;
+        }
+        pixels1->data[i].y = i;
+    }
+    pixels->n = 10;
+    pixels1->n = 10;
+    p_psPixelsPrint(stdout, pixels, "pixels");
+    p_psPixelsPrint(stdout, pixels1, "pixels1");
+
+    psPixels* pixels2 = psPixelsConcatenate(NULL, pixels);
+    p_psPixelsPrint(stdout, pixels2, "pixels2");
+    if (pixels2 == NULL) {
+        psError(PS_ERR_UNKNOWN, true,
+                "pixels2 == NULL?");
+        return 1;
+    }
+    if (pixels == pixels2) {
+        psError(PS_ERR_UNKNOWN, true,
+                "pixels == pixels2?  Should have made a copy.");
+        return 2;
+    }
+    if (pixels2->n != pixels->n) {
+        psError(PS_ERR_UNKNOWN, true,
+                "pixels2->n != pixels->n");
+        return 3;
+    }
+    for (int i = 0; i < pixels2->n; i++) {
+        if (pixels2->data[i].x != pixels->data[i].x || pixels2->data[i].y != pixels->data[i].y) {
+            psError(PS_ERR_UNKNOWN, true,
+                    "failed to copy the values correctly at index %d", i);
+            return 4;
+        }
+    }
+
+    // add pixels that are half unique.
+    psPixels* pixels3 = psPixelsConcatenate(pixels2, pixels1);
+    p_psPixelsPrint(stdout, pixels3, "pixels3");
+    if (pixels3 != pixels2) {
+        psError(PS_ERR_UNKNOWN, true,
+                "return expected to be the out parameter.");
+        return 10;
+    }
+    if (pixels3->n != 15) {
+        psError(PS_ERR_UNKNOWN, true,
+                "pixels3->n != 15, == %d", pixels3->n);
+        return 11;
+    }
+
+    // Attempt to concatenate with NULL pixels
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL pixels");
+    if(psPixelsConcatenate(pixels2,NULL) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return to be non-NULL for NULL input pixels");
+        return 12;
+    }
+
+    psFree(pixels3);
+    psFree(pixels1);
+    psFree(pixels);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/types/verified/tst_psArray.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psArray.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psArray.stderr	(revision 4547)
@@ -0,0 +1,220 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{psArray}                                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Create void pointer array}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Create void pointer array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Add data to void pointer array}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+ts[0].x = 0 ts[0].y = 0.00
+ts[1].x = 10 ts[1].y = 10.10
+ts[2].x = 20 ts[2].y = 20.20
+ts[3].x = 30 ts[3].y = 30.30
+ts[4].x = 40 ts[4].y = 40.40
+array size = 5
+array population = 5
+
+---> TESTPOINT PASSED (psArray{Add data to void pointer array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Reallocate void pointer array bigger}              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Adding more elements to void pointer array...
+ts[0].x = 0 ts[0].y = 0.00
+ts[1].x = 10 ts[1].y = 10.10
+ts[2].x = 20 ts[2].y = 20.20
+ts[3].x = 30 ts[3].y = 30.30
+ts[4].x = 40 ts[4].y = 40.40
+ts[5].x = 50 ts[5].y = 50.50
+ts[6].x = 60 ts[6].y = 60.60
+ts[7].x = 70 ts[7].y = 70.70
+ts[8].x = 80 ts[8].y = 80.80
+ts[9].x = 90 ts[9].y = 90.90
+array size = 10
+array population = 10
+
+---> TESTPOINT PASSED (psArray{Reallocate void pointer array bigger} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Reallocate void pointer array smaller}             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+ts[0].x = 0 ts[0].y = 0.00
+ts[1].x = 10 ts[1].y = 10.10
+ts[2].x = 20 ts[2].y = 20.20
+array size = 3
+array population = 3
+
+---> TESTPOINT PASSED (psArray{Reallocate integer void pointer smaller} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Reallocate with a null array}                      *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Error message generator                                    *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testArray
+    Following should generate an error message.
+<DATE><TIME>|<HOST>|E|psArrayRealloc (FILE:LINENO)
+    psArrayRealloc must be given a non-NULL psArray to resize.
+
+---> TESTPOINT PASSED (psArray{Reallocate with a null array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Remove valid item}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Array size after removal = 2
+ts[0].x = 10 ts[0].y = 10.10
+ts[1].x = 20 ts[1].y = 20.20
+
+---> TESTPOINT PASSED (psArray{Remove valid item} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Remove invalid item from array}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Remove invalid item from array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Remove item from null array}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psArrayRemove (FILE:LINENO)
+    Specified psArray can not be NULL.
+
+---> TESTPOINT PASSED (psArray{Remove item from null array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Remove null item from array}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Remove null item from array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Free void pointer array}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Free void pointer array} | tst_psArray.c)
+
+
+---> TESTPOINT PASSED (psArray{psArray} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{psArray}                                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Create void pointer array}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Create void pointer array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Add data to void pointer array}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+ts[0].x = 100 ts[0].y = 101.00
+ts[1].x = 90 ts[1].y = 90.90
+ts[2].x = 80 ts[2].y = 80.80
+ts[3].x = 70 ts[3].y = 70.70
+ts[4].x = 60 ts[4].y = 60.60
+ts[5].x = 50 ts[5].y = 50.50
+ts[6].x = 40 ts[6].y = 40.40
+ts[7].x = 30 ts[7].y = 30.30
+ts[8].x = 20 ts[8].y = 20.20
+ts[9].x = 10 ts[9].y = 10.10
+array size = 10
+array population = 10
+
+---> TESTPOINT PASSED (psArray{Add data to void pointer array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Sort data in array}                                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+ts[0].x = 10 ts[0].y = 10.10
+ts[1].x = 20 ts[1].y = 20.20
+ts[2].x = 30 ts[2].y = 30.30
+ts[3].x = 40 ts[3].y = 40.40
+ts[4].x = 50 ts[4].y = 50.50
+ts[5].x = 60 ts[5].y = 60.60
+ts[6].x = 70 ts[6].y = 70.70
+ts[7].x = 80 ts[7].y = 80.80
+ts[8].x = 90 ts[8].y = 90.90
+ts[9].x = 100 ts[9].y = 101.00
+
+---> TESTPOINT PASSED (psArray{Sort data in array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Attempt to sort array}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Attempt to sort array} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{Free void pointer array}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Free void pointer array} | tst_psArray.c)
+
+
+---> TESTPOINT PASSED (psArray{psArray} | tst_psArray.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray.c                                              *
+*            TestPoint: psArray{psArrayAdd}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{psArrayAdd} | tst_psArray.c)
+
Index: /trunk/psLib/test/types/verified/tst_psArray01.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psArray01.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psArray01.stdout	(revision 4547)
@@ -0,0 +1,67 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray01.c                                            *
+*            TestPoint: psArray{Create void pointer array}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Create void pointer array} | tst_psArray01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray01.c                                            *
+*            TestPoint: psArray{Add data to void pointer array}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+ts[0].x = 100 ts[0].y = 101.00
+ts[1].x = 90 ts[1].y = 90.90
+ts[2].x = 80 ts[2].y = 80.80
+ts[3].x = 70 ts[3].y = 70.70
+ts[4].x = 60 ts[4].y = 60.60
+ts[5].x = 50 ts[5].y = 50.50
+ts[6].x = 40 ts[6].y = 40.40
+ts[7].x = 30 ts[7].y = 30.30
+ts[8].x = 20 ts[8].y = 20.20
+ts[9].x = 10 ts[9].y = 10.10
+array size = 10
+array population = 10
+
+---> TESTPOINT PASSED (psArray{Add data to void pointer array} | tst_psArray01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray01.c                                            *
+*            TestPoint: psArray{Sort data in array}                                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+ts[0].x = 10 ts[0].y = 10.10
+ts[1].x = 20 ts[1].y = 20.20
+ts[2].x = 30 ts[2].y = 30.30
+ts[3].x = 40 ts[3].y = 40.40
+ts[4].x = 50 ts[4].y = 50.50
+ts[5].x = 60 ts[5].y = 60.60
+ts[6].x = 70 ts[6].y = 70.70
+ts[7].x = 80 ts[7].y = 80.80
+ts[8].x = 90 ts[8].y = 90.90
+ts[9].x = 100 ts[9].y = 101.00
+
+---> TESTPOINT PASSED (psArray{Sort data in array} | tst_psArray01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray01.c                                            *
+*            TestPoint: psArray{Attempt to sort array}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Attempt to sort array} | tst_psArray01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psArray01.c                                            *
+*            TestPoint: psArray{Free void pointer array}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psArray{Free void pointer array} | tst_psArray01.c)
+
Index: /trunk/psLib/test/types/verified/tst_psBitSet.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psBitSet.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psBitSet.stderr	(revision 4547)
@@ -0,0 +1,171 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetAlloc}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Creating psBitSet with 24 bits...
+Creating psBitSet with 25 bits...
+<DATE><TIME>|<HOST>|I|testBitSet01a
+    Following is an error.
+<DATE><TIME>|<HOST>|E|psBitSetAlloc (FILE:LINENO)
+    The number of bit in a psBitSet (-4) must be greater than zero.
+
+---> TESTPOINT PASSED (psBitSet{psBitSetAlloc} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetSet/psBitSetClear}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Setting first bit...
+Setting third bit...
+Setting last bit...
+100000000000000000000101
+
+Clearing first bit...
+Clearing third bit...
+Clearing last bit...
+000000000000000000000000
+
+<DATE><TIME>|<HOST>|I|testBitSet01b
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetClear (FILE:LINENO)
+    Can not operate on a NULL psBitSet.
+<DATE><TIME>|<HOST>|I|testBitSet01b
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetClear (FILE:LINENO)
+    The specified bit position (-3) is invalid.  Position must be between 0 and 23.
+<DATE><TIME>|<HOST>|I|testBitSet01b
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetSet (FILE:LINENO)
+    The specified bit position (-4) is invalid.  Position must be between 0 and 23.
+<DATE><TIME>|<HOST>|I|testBitSet01b
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetSet (FILE:LINENO)
+    The specified bit position (200) is invalid.  Position must be between 0 and 23.
+<DATE><TIME>|<HOST>|I|testBitSet01b
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetSet (FILE:LINENO)
+    Can not operate on a NULL psBitSet.
+
+---> TESTPOINT PASSED (psBitSet{psBitSetSet/psBitSetClear} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetTest}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Setting first bit...
+Setting third bit...
+Setting last bit...
+<DATE><TIME>|<HOST>|I|testBitSet01c
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetTest (FILE:LINENO)
+    The specified bit position (-4) is invalid.  Position must be between 0 and 23.
+<DATE><TIME>|<HOST>|I|testBitSet01c
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetTest (FILE:LINENO)
+    The specified bit position (200) is invalid.  Position must be between 0 and 23.
+<DATE><TIME>|<HOST>|I|testBitSet01c
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetTest (FILE:LINENO)
+    Can not operate on a NULL psBitSet.
+
+---> TESTPOINT PASSED (psBitSet{psBitSetTest} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetOp}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testBitSet06
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
+    The psBitSet operand must be the same size.
+<DATE><TIME>|<HOST>|I|testBitSet06
+    Following is an error.
+<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
+    Specified operator, FOO, is invalid.  Valid operators are AND, OR, and XOR.
+<DATE><TIME>|<HOST>|I|testBitSet06
+    Following is an error.
+<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
+    Specified operator, FOO, is invalid.  Valid operators are AND, OR, and XOR.
+<DATE><TIME>|<HOST>|I|testBitSet06
+    Following should generate an error
+<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
+    First psBitSet operand can not be NULL.
+<DATE><TIME>|<HOST>|I|testBitSet06
+    Following should generate an error
+<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
+    Specified operator is NULL.  Must specify desired operator.
+<DATE><TIME>|<HOST>|I|testBitSet06
+    Following should generate an error
+<DATE><TIME>|<HOST>|E|psBitSetOp (FILE:LINENO)
+    Second psBitSet operand can not be NULL.
+
+---> TESTPOINT PASSED (psBitSet{psBitSetOp} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetOp AND Operator}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psBitSetOp input is 001100110011001100110011, 010101010101010101010101.  Truth is 000100010001000100010001.
+<DATE><TIME>|<HOST>|I|testBitSet02
+    Perform binary AND with psBitSets
+<DATE><TIME>|<HOST>|I|testBitSet02
+    Perform binary AND and auto allocate output
+
+---> TESTPOINT PASSED (psBitSet{psBitSetOp AND Operator} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetOp OR Operator}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psBitSetOp input is 110011001100110011001100, 101010101010101010101010.  Truth is 111011101110111011101110.
+<DATE><TIME>|<HOST>|I|testBitSet03
+    Perform binary OR with psBitSets
+<DATE><TIME>|<HOST>|I|testBitSet03
+    Perform binary OR and auto allocate output
+
+---> TESTPOINT PASSED (psBitSet{psBitSetOp OR Operator} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetOp XOR Operator}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psBitSetOp input is 110011001100110011001100, 101010101010101010101010.  Truth is 011001100110011001100110.
+<DATE><TIME>|<HOST>|I|testBitSet04
+    Perform binary XOR with psBitSets
+<DATE><TIME>|<HOST>|I|testBitSet04
+    Perform binary XOR and auto allocate output
+
+---> TESTPOINT PASSED (psBitSet{psBitSetOp XOR Operator} | tst_psBitSet.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psBitSet.c                                             *
+*            TestPoint: psBitSet{psBitSetNot}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+psBitSetOp input is 101010101010101010101010.  Truth is 010101010101010101010101.
+<DATE><TIME>|<HOST>|I|testBitSet05
+    Perform binary NOT with psBitSets
+<DATE><TIME>|<HOST>|I|testBitSet05
+    Perform binary NOT and auto allocate output
+<DATE><TIME>|<HOST>|I|testBitSet05
+    Following should generate an error
+<DATE><TIME>|<HOST>|E|psBitSetNot (FILE:LINENO)
+    Operand can not be NULL.
+
+---> TESTPOINT PASSED (psBitSet{psBitSetNot} | tst_psBitSet.c)
+
Index: /trunk/psLib/test/types/verified/tst_psHash00.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash00.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash00.stdout	(revision 4547)
@@ -0,0 +1,9 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash00.c                                             *
+*            TestPoint: psHash functions{psHashAlloc()}                            *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashAlloc()} | tst_psHash00.c)
+
Index: /trunk/psLib/test/types/verified/tst_psHash01.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash01.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash01.stderr	(revision 4547)
@@ -0,0 +1,12 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashAdd with null table
+<DATE><TIME>|<HOST>|E|psHashAdd (FILE:LINENO)
+    Unallowable operation: hash is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashAdd with null key
+<DATE><TIME>|<HOST>|E|psHashAdd (FILE:LINENO)
+    Unallowable operation: key is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashAdd with null data
+<DATE><TIME>|<HOST>|E|psHashAdd (FILE:LINENO)
+    Unallowable operation: data is NULL.
Index: /trunk/psLib/test/types/verified/tst_psHash01.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash01.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash01.stdout	(revision 4547)
@@ -0,0 +1,69 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHash functions{psHashAlloc}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashAlloc} | tst_psHash01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHash functions{psHashAdd}                                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashAdd} | tst_psHash01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHash replace item{psHashAdd}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash replace item{psHashAdd} | tst_psHash01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHashAdd{NULL hash table}                                 *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Hash table can not be NULL.                                *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashAdd{NULL hash table} | tst_psHash01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHashAdd{NULL key}                                        *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Hash key can not be NULL.                                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashAdd{NULL hash key} | tst_psHash01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHashAdd{NULL hash data}                                  *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Hash data can not be NULL.                                 *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashAdd{NULL hash data} | tst_psHash01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash01.c                                             *
+*            TestPoint: psHash functions{psHashFree}                               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashFree()} | tst_psHash01.c)
+
Index: /trunk/psLib/test/types/verified/tst_psHash02.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash02.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash02.stderr	(revision 4547)
@@ -0,0 +1,8 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashLookup with null table
+<DATE><TIME>|<HOST>|E|psHashLookup (FILE:LINENO)
+    Unallowable operation: hash is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashLookup with null key
+<DATE><TIME>|<HOST>|E|psHashLookup (FILE:LINENO)
+    Unallowable operation: key is NULL.
Index: /trunk/psLib/test/types/verified/tst_psHash02.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash02.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash02.stdout	(revision 4547)
@@ -0,0 +1,42 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash02.c                                             *
+*            TestPoint: psHash functions{psHashLookup}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashLookup} | tst_psHash02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash02.c                                             *
+*            TestPoint: psHashLookup{Invalid key}                                  *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Key is not found in the table                              *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashLookup{Invalid key} | tst_psHash02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash02.c                                             *
+*            TestPoint: psHashLookup{NULL table}                                   *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Can not lookup with NULL table                             *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashLookup{NULL table} | tst_psHash02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash02.c                                             *
+*            TestPoint: psHashLookup{NULL key}                                     *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Can not lookup with NULL key.                              *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashLookup{NULL key} | tst_psHash02.c)
+
Index: /trunk/psLib/test/types/verified/tst_psHash03.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash03.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash03.stderr	(revision 4547)
@@ -0,0 +1,8 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashRemove with null table
+<DATE><TIME>|<HOST>|E|psHashRemove (FILE:LINENO)
+    Unallowable operation: hash is NULL.
+<DATE><TIME>|<HOST>|I|main
+    Following should generate an error message: psHashRemove with null key
+<DATE><TIME>|<HOST>|E|psHashRemove (FILE:LINENO)
+    Unallowable operation: key is NULL.
Index: /trunk/psLib/test/types/verified/tst_psHash03.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash03.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash03.stdout	(revision 4547)
@@ -0,0 +1,42 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash03.c                                             *
+*            TestPoint: psHash functions{psHashRemove}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHash functions{psHashRemove()} | tst_psHash03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash03.c                                             *
+*            TestPoint: psHashRemove{Invalid key}                                  *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Key is not found in table                                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashRemove{Invalid key} | tst_psHash03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash03.c                                             *
+*            TestPoint: psHashRemove{NULL table}                                   *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Can not remove with NULL table                             *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashRemove{NULL table} | tst_psHash03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash03.c                                             *
+*            TestPoint: psHashRemove{NULL key}                                     *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Can not remove with NULL key                               *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashRemove{NULL key} | tst_psHash03.c)
+
Index: /trunk/psLib/test/types/verified/tst_psHash04.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash04.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash04.stdout	(revision 4547)
@@ -0,0 +1,24 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash04.c                                             *
+*            TestPoint: psHash functions{psHashKeyList()}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Linked List Entries: ENTRY03
+Linked List Entries: ENTRY02
+Linked List Entries: ENTRY01
+Linked List Entries: ENTRY00
+
+---> TESTPOINT PASSED (psHash functions{psHashKeyList()} | tst_psHash04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash04.c                                             *
+*            TestPoint: psHashKeyList{NULL table}                                  *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Can not lookup with NULL table                             *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psHashKeyList{NULL table} | tst_psHash04.c)
+
Index: /trunk/psLib/test/types/verified/tst_psHash05.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psHash05.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psHash05.stderr	(revision 4547)
@@ -0,0 +1,13 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psHash05.c                                             *
+*            TestPoint: psHash{psHashToArray}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|hashToArray
+    Following should be an error.
+<DATE><TIME>|<HOST>|E|psHashToArray (FILE:LINENO)
+    Unallowable operation: hash is NULL.
+
+---> TESTPOINT PASSED (psHash{psHashToArray} | tst_psHash05.c)
+
Index: /trunk/psLib/test/types/verified/tst_psList.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psList.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psList.stderr	(revision 4547)
@@ -0,0 +1,166 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListAlloc}                                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListAlloc
+    psListAlloc shall create a psList with either 0 or 1 element.
+
+---> TESTPOINT PASSED (psList{psListAlloc} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListAdd}                                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListAdd
+    psListAdd shall add an element to list
+<DATE><TIME>|<HOST>|I|testListAdd
+    Following should generate an error for using NULL list.
+<DATE><TIME>|<HOST>|E|psListAdd (FILE:LINENO)
+    Specified psList reference is NULL.
+<DATE><TIME>|<HOST>|I|testListAdd
+    Following should generate an error msg to add NULL data
+<DATE><TIME>|<HOST>|E|psListAdd (FILE:LINENO)
+    Specified data item is NULL.
+<DATE><TIME>|<HOST>|I|testListAdd
+    Following should error with invalid insert location
+<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
+    Specified location, -7, is invalid.
+<DATE><TIME>|<HOST>|I|testListAdd
+    Following should be a warning.
+<DATE><TIME>|<HOST>|W|psListAdd
+    Specified location, 9, is beyond the end of the list.  Adding data item to tail.
+
+---> TESTPOINT PASSED (psList{psListAdd} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListGet}                                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListGet
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
+    Specified psList reference is NULL.
+<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
+    Specified location, 5, is invalid.
+<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
+    Specified location, 5, is invalid.
+<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
+    Specified location, 4, is invalid.
+<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
+    Specified location, 4, is invalid.
+
+---> TESTPOINT PASSED (psList{psListGet} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListRemove}                                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListRemove
+    Following should be an error
+<DATE><TIME>|<HOST>|E|psListRemove (FILE:LINENO)
+    Specified psList reference is NULL.
+<DATE><TIME>|<HOST>|I|testListRemove
+    Next message should be an error
+<DATE><TIME>|<HOST>|E|psListRemoveData (FILE:LINENO)
+    Specified data item is NULL.
+<DATE><TIME>|<HOST>|I|testListRemove
+    Next message should be an error
+<DATE><TIME>|<HOST>|E|psListRemoveData (FILE:LINENO)
+    Specified data item is not found in the psList.
+<DATE><TIME>|<HOST>|I|testListRemove
+    NULL list in psListRemoveData should generate error message.
+<DATE><TIME>|<HOST>|E|psListRemoveData (FILE:LINENO)
+    Specified psList reference is NULL.
+
+---> TESTPOINT PASSED (psList{psListRemove} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListConvert}                                      *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psList{psListConvert} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListIterator}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListIterator
+     psListSetIterator/psListGetNext/psListGetPrev shall move the list cursor to the specified location
+<DATE><TIME>|<HOST>|W|psListGetAndDecrement
+    Attempt to get previous with itertator cursor NULL and offEnd false
+
+---> TESTPOINT PASSED (psList{psListIterator} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListFree}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psList{psListFree} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListSort}                                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psList{psListSort} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListAddAfter}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListAddAfter
+    NULL data pointer should generate error message
+<DATE><TIME>|<HOST>|E|psListAddAfter (FILE:LINENO)
+    Specified data item is NULL.
+<DATE><TIME>|<HOST>|I|testListAddAfter
+    NULL iterator should generate error message
+<DATE><TIME>|<HOST>|E|psListAddAfter (FILE:LINENO)
+    Specified iterator is NULL.
+<DATE><TIME>|<HOST>|I|testListAddAfter
+    Non-mutable list should generate error message
+<DATE><TIME>|<HOST>|E|psListAddAfter (FILE:LINENO)
+    Specified iterator indicates list is non-mutable.
+
+---> TESTPOINT PASSED (psList{psListAddAfter} | tst_psList.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psList.c                                               *
+*            TestPoint: psList{psListAddBefore}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testListAddBefore
+    NULL data pointer should generate error message
+<DATE><TIME>|<HOST>|E|psListAddBefore (FILE:LINENO)
+    Specified data item is NULL.
+<DATE><TIME>|<HOST>|I|testListAddBefore
+    NULL iterator should generate error message
+<DATE><TIME>|<HOST>|E|psListAddBefore (FILE:LINENO)
+    Specified iterator is NULL.
+<DATE><TIME>|<HOST>|I|testListAddBefore
+    Non-mutable list should generate error message
+<DATE><TIME>|<HOST>|E|psListAddBefore (FILE:LINENO)
+    Specified iterator indicates list is non-mutable.
+
+---> TESTPOINT PASSED (psList{psListAddBefore} | tst_psList.c)
+
Index: /trunk/psLib/test/types/verified/tst_psLookupTable_01.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psLookupTable_01.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psLookupTable_01.stderr	(revision 4547)
@@ -0,0 +1,116 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLookupTable_01.c                                     *
+*            TestPoint: psLookupTable{psLookupTableAlloc}                          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testLookupTableAlloc
+    Following should generate error message for invalid file name
+<DATE><TIME>|<HOST>|E|psLookupTableAlloc (FILE:LINENO)
+    Unallowable operation: fileName is NULL.
+<DATE><TIME>|<HOST>|I|testLookupTableAlloc
+    Following should generate error message for invalid format string
+<DATE><TIME>|<HOST>|E|psLookupTableAlloc (FILE:LINENO)
+    Unallowable operation: format is NULL.
+
+---> TESTPOINT PASSED (psLookupTable{psLookupTableAlloc} | tst_psLookupTable_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLookupTable_01.c                                     *
+*            TestPoint: psLookupTable{psVectorsReadFromFile}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
+    Following should generate error message for NULL format
+<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
+    Unallowable operation: format is NULL.
+<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
+    Following should generate error message for NULL filename
+<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
+    Unallowable operation: filename is NULL.
+<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
+    Following should generate error message for invalid format specifier
+<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
+    Invalid format specifier
+<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
+    Format string was not parsed sucessfully
+<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
+    Following should generate error message for non-existant file
+<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
+    Failed to open file verified/nonexistant.dat.
+<DATE><TIME>|<HOST>|I|testVectorsReadFromFile
+    Following should generate error message for error is file
+<DATE><TIME>|<HOST>|E|psVectorsReadFromFile (FILE:LINENO)
+    Parsing text file failed.
+
+---> TESTPOINT PASSED (psLookupTable{psVectorsReadFromFile} | tst_psLookupTable_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLookupTable_01.c                                     *
+*            TestPoint: psLookupTable{psLookupTableImport}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testLookupTableImport
+    Following should generate error message for NULL table argument
+<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
+    Unallowable operation: table is NULL.
+<DATE><TIME>|<HOST>|I|testLookupTableImport
+    Following should generate error message for NULL vectors
+<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
+    Unallowable operation: vectors is NULL.
+<DATE><TIME>|<HOST>|I|testLookupTableImport
+    Following should generate error message for invalid index column
+<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
+    Index column cannot be less than zero
+
+---> TESTPOINT PASSED (psLookupTable{psLookupTableImport} | tst_psLookupTable_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLookupTable_01.c                                     *
+*            TestPoint: psLookupTable{psLookupTableRead}                           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testLookupTableRead
+    Following should generate an error message for NULL table
+<DATE><TIME>|<HOST>|E|psLookupTableRead (FILE:LINENO)
+    Unallowable operation: table is NULL.
+<DATE><TIME>|<HOST>|I|testLookupTableRead
+    Following should generate error message invalid table indexCol
+<DATE><TIME>|<HOST>|E|psLookupTableImport (FILE:LINENO)
+    Index column cannot be less than zero
+
+---> TESTPOINT PASSED (psLookupTable{psLookupTableRead} | tst_psLookupTable_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLookupTable_01.c                                     *
+*            TestPoint: psLookupTable{psLookupTableInterpolate}                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testLookupTableInterpolate
+    Following should generate error message for invalid table
+<DATE><TIME>|<HOST>|E|psLookupTableInterpolate (FILE:LINENO)
+    Unallowable operation: table is NULL.
+<DATE><TIME>|<HOST>|I|testLookupTableInterpolate
+    Following should generate error out of range.
+<DATE><TIME>|<HOST>|E|psLookupTableInterpolate (FILE:LINENO)
+    Error: column, 100, is out of range.  Must be between 0 and 9.
+
+---> TESTPOINT PASSED (psLookupTable{psLookupTableInterpolate} | tst_psLookupTable_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psLookupTable_01.c                                     *
+*            TestPoint: psLookupTable{psLookupTableInterpolateAll}                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testLookupTableInterpolateAll
+    Following should generate an error message for NULL table
+<DATE><TIME>|<HOST>|E|psLookupTableInterpolateAll (FILE:LINENO)
+    Unallowable operation: table is NULL.
+
+---> TESTPOINT PASSED (psLookupTable{psLookupTableInterpolateAll} | tst_psLookupTable_01.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadataIO.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadataIO.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadataIO.stderr	(revision 4547)
@@ -0,0 +1,117 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|W|psMetadataAddItem
+    Metadata item Float has been replaced
+
+---> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
+    Following should generate parse error message
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to parse the value 'X' of metadata item boolean, type BOOL, on line 2 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata value on line 4 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata value on line 7 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to parse the value 'x,y,z' of metadata item @vector1, type U8, on line 8 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata type on line 9 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata value on line 9 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to parse the value '' of metadata item @vector3, type F8, on line 10 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Duplicate MULTI specifier on line 14 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL', found on line 17 of test2.config, is invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to parse the value 'aabb' of metadata item value1, type F64, on line 20 of test2.config.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to parse the value 'ccdd' of metadata item value2, type S32, on line 21 of test2.config.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    More than one '@' character not allowed.  Found on line 24 of test2.config.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    Failed to read a metadata type on line 27 of test2.config.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    Specified type, CELL, on line 31 of test2.config is already defined.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Duplicate metadata item name is not allowed.  Use a psMetadataFlags option to allow such action.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    Metadata type 'NEWCELL', found on line 37 of test2.config, is invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata OURCELL on line 40 of test2.config.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    Metadata type 'NEWCELL1', found on line 43 of test2.config, is invalid.
+<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
+    Failed to open file 'ab.config'. Check if it exists and it has the proper permissions.
+<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
+    Following should generate an error message for NULL failed lines arg
+<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
+    Unallowable operation: nFail is NULL.
+<DATE><TIME>|<HOST>|I|testMetadataParseConfig1
+    Following should generate an error message for NULL file name arg
+<DATE><TIME>|<HOST>|E|psMetadataConfigParse (FILE:LINENO)
+    Unallowable operation: fileName is NULL.
+
+---> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testMetadataParseConfig2
+    Following should generate an error of duplicate key names
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Duplicate metadata item name is not allowed.  Use a psMetadataFlags option to allow such action.
+<DATE><TIME>|<HOST>|E|psMetadataAddV (FILE:LINENO)
+    Failed to add metadata item to metadata collection list.
+
+---> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataConfigParse{psMetadataConfigParse}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL', found on line 6 of test5.config, is invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL2', found on line 12 of test5.config, is invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL3', found on line 18 of test5.config, is invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata CELL.00 on line 22 of test5.config.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    Specified type, CELL5, on line 26 of test5.config is already defined.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL6', found on line 30 of test5.config, is invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL6', found on line 31 of test5.config, is invalid.
+
+---> TESTPOINT PASSED (psMetadataConfigParse{psMetadataConfigParse} | tst_psMetadataIO.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadataIO.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadataIO.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadataIO.stdout	(revision 4547)
@@ -0,0 +1,222 @@
+Double                    F64                                   1.234568  # This is a comment   
+String                    STR    This is the string that forms the value  # comment             
+boolean                   BOOL                                         1  # The value of 'boolean' is 'true'
+@primes                   U8     2,3,5,7,11,13,17  # These are prime numbers
+comment                   MULTI
+comment                   STR                                       This
+comment                   STR                                         is
+comment                   STR                                          a
+comment                   STR                                 non-unique
+comment                   STR                                        key
+Float                     F64                                   1.234560  # This generates a warning, and, if 'overwrite' is 'false', is ignored
+boolean1                  BOOL                                         0  # The value of 'boolean' is 'false'
+@negprimes                S8     -2,-3,-5,-7,-11,-13,-17,-19
+@vector1                  U16    0,1,2,4,8
+@vector2                  U32    0,8,16,32,64,128
+@vector3                  U64    0,64,256
+@vector4                  S16    -2,-1,0,1,2
+@vector5                  S32    -4,-2,0,2,4,6
+@vector6                  S64    -16,-4,0,4,16,36,64
+@vector7                  F32    -1.03,1.04,-1.05,1.06
+@vector8                  F64    -2.22,2.21,-2.2,2.19,-2.18
+CELL.00                   METADATA
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+END
+CELL.01                   METADATA
+    EXTNAME                   STR                                      CCD01
+    BIASSEC                   STR                                    BSEC-01
+    CHIP                      STR                                    CHIP.00
+END
+MYCELL                    MULTI
+MYCELL                    METADATA
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+    NCELL                     S32                                         24
+END
+MYCELL                    S32                                        123  # A number            
+cell                      METADATA
+    foo                       METADATA
+        bar                       STR                                        BAZ
+        ping                      STR                                       PONG
+    END
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+    NCELL                     S32                                         12
+END
+CELL1                     METADATA
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+    NCELL                     S32                                         24
+END
+CELL2                     METADATA
+    FOO                       METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+    NCELL                     S32                                         24
+END
+FOO1                      METADATA
+    FOO2                      METADATA
+        FOO3                      METADATA
+            FOO4                      METADATA
+                FOO5                      METADATA
+                    FOO6                      METADATA
+                        BAR                       STR                                        BAZ
+                        PING                      STR                                       PONG
+                    END
+                    BAR                       STR                                        BAZ
+                    PING                      STR                                       PONG
+                END
+                BAR                       STR                                        BAZ
+                PING                      STR                                       PONG
+            END
+            BAR                       STR                                        BAZ
+            PING                      STR                                       PONG
+        END
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+    BAR                       STR                                        BAZ
+    PING                      STR                                       PONG
+END
+FOO2                      METADATA
+    BAR                       STR                                        BAZ
+    PING                      STR                                       PONG
+    FOO3                      METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+        FOO4                      METADATA
+            BAR                       STR                                        BAZ
+            PING                      STR                                       PONG
+            FOO5                      METADATA
+                BAR                       STR                                        BAZ
+                PING                      STR                                       PONG
+                FOO6                      METADATA
+                    BAR                       STR                                        BAZ
+                    PING                      STR                                       PONG
+                    FOO7                      METADATA
+                        BAR                       STR                                        BAZ
+                        PING                      STR                                       PONG
+                    END
+                END
+            END
+        END
+    END
+END
+FOO3                      METADATA
+    BAR                       STR                                        BAZ
+    FOO4                      METADATA
+        BAR                       STR                                        BAZ
+        FOO5                      METADATA
+            BAR                       STR                                        BAZ
+            FOO6                      METADATA
+                BAR                       STR                                        BAZ
+                FOO7                      METADATA
+                    BAR                       STR                                        BAZ
+                    FOO8                      METADATA
+                        BAR                       STR                                        BAZ
+                        PING                      STR                                       PONG
+                    END
+                    PING                      STR                                       PONG
+                END
+                PING                      STR                                       PONG
+            END
+            PING                      STR                                       PONG
+        END
+        PING                      STR                                       PONG
+    END
+    PING                      STR                                       PONG
+END
+FOO4                      METADATA
+    FOO5                      METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+    FOO6                      METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+END
+CELL.00                   METADATA
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+END
+CELL.01                   METADATA
+    EXTNAME                   STR                                      CCD01
+    BIASSEC                   STR                                    BSEC-01
+    CHIP                      STR                                    CHIP.00
+END
+FOO5                      METADATA
+    CELL.00                   METADATA
+        EXTNAME                   STR                                      CCD00
+        BIASSEC                   STR                                    BSEC-00
+    END
+    CELL.01                   METADATA
+        EXTNAME                   STR                                      CCD01
+        BIASSEC                   STR                                    BSEC-01
+    END
+    FOO6                      METADATA
+        CELL.00                   METADATA
+            EXTNAME                   STR                                      CCD00
+        END
+        CELL.01                   METADATA
+            EXTNAME                   STR                                      CCD01
+        END
+    END
+END
+foo                       MULTI
+foo                       S32                                         -1
+foo                       STR                                    bar baz
+foo                       BOOL                                         1
+foo1                      MULTI
+foo1                      S32                                         -1  # bar                 
+foo1                      STR                                    bar baz  # baz                 
+foo1                      BOOL                                         1
+foo2                      MULTI
+foo2                      S32                                         -1
+foo2                      STR                                    bar baz
+foo2                      BOOL                                         1
+bar1                      METADATA
+foo                       MULTI
+    foo                       S32                                         -1
+    foo                       STR                                    bar baz
+    foo                       BOOL                                         1
+END
+foo3                      MULTI
+foo3                      METADATA
+    bar                       BOOL                                         1
+END
+foo3                      METADATA
+    bar                       BOOL                                         1
+END
+foo4                      MULTI
+foo4                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
+foo4                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
+foo5                      MULTI
+foo5                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
+foo5                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
Index: /trunk/psLib/test/types/verified/tst_psMetadata_01.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_01.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_01.stderr	(revision 4547)
@@ -0,0 +1,14 @@
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    Unallowable operation: fileName is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    FITS error while opening file: missing.dat could not open the named file
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    Couldn't close FITS file. FITS error: NULL input pointer
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    Specified extension number, 0, is invalid.  Value must be positive if no extension name is given.
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    FITS error while locating header 22: tried to move past end of file
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    FITS error while locating header AARGH: illegal HDU number
+<DATE><TIME>|<HOST>|E|psMetadataReadHeader (FILE:LINENO)
+    Specified extension number, 0, is invalid.  Value must be positive if no extension name is given.
Index: /trunk/psLib/test/types/verified/tst_psMetadata_01.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_01.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_01.stdout	(revision 4547)
@@ -0,0 +1,192 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test A - Read 1st hdr from simple FITS file}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Contents of metadata list:
+ Key Name:   SIMPLE  Key mdType: 0x00001301  Key Value:               1  Key Comment: file does conform to FITS standard
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:               8  Key Comment: number of bits per data pixel
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               0  Key Comment: number of data axes
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+
+Contents of metadata table:
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               0  Key Comment: number of data axes
+ Key Name:   SIMPLE  Key mdType: 0x00001301  Key Value:               1  Key Comment: file does conform to FITS standard
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:               8  Key Comment: number of bits per data pixel
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+
+---> TESTPOINT PASSED (psMetadata{Test A - Read 1st hdr from simple FITS file} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test B - Read 2nd hdr from complex FITS file}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Contents of metadata list:
+ Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
+ Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
+ Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
+ Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_1'  Key Comment: 
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+
+Contents of metadata table:
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
+ Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
+ Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
+ Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+ Key Name:   BITPIX  Key mdType: 0x0001000a  Key Value:                  Key Comment: 
+    Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+    Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
+ Key Name:  HISTORY  Key mdType: 0x0001000a  Key Value:                  Key Comment: 
+    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+ Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_1'  Key Comment: 
+
+---> TESTPOINT PASSED (psMetadata{Test B - Read 2nd hdr from complex FITS file} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test C - Read named hdr from complex FITS file} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Contents of metadata list:
+ Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
+ Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
+ Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
+ Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
+ Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+ Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+
+Contents of metadata table:
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
+ Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
+ Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
+ Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+ Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:  HISTORY  Key mdType: 0x0001000a  Key Value:                  Key Comment: 
+    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+    Key Name:  HISTORY  Key mdType: 0x00010001  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T<DATE>
+ Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
+
+---> TESTPOINT PASSED (psMetadata{Test C - Read named hdr from complex FITS file} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test D - Remove items with same name from all metadata} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Removed HISTORY from all metadata from prior test. Resulting metadata:
+
+Contents of metadata list:
+ Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
+ Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
+ Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
+ Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
+ Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
+
+Contents of metadata table:
+ Key Name:    NAXIS  Key mdType: 0x00000104  Key Value:               1  Key Comment: number of data axes
+ Key Name:   NAXIS1  Key mdType: 0x00000104  Key Value:              64  Key Comment: length of data axis 1
+ Key Name:   PCOUNT  Key mdType: 0x00000104  Key Value:               0  Key Comment: required keyword; must = 0
+ Key Name: XTENSION  Key mdType: 0x00010001  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+ Key Name:   GCOUNT  Key mdType: 0x00000104  Key Value:               1  Key Comment: required keyword; must = 1
+ Key Name:   BITPIX  Key mdType: 0x00000104  Key Value:             -64  Key Comment: number of bits per data pixel
+ Key Name:  EXTNAME  Key mdType: 0x00010001  Key Value:     'MY_DATA_2'  Key Comment: 
+
+---> TESTPOINT PASSED (psMetadata{Test D - Remove items with same name from all metadata} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test E - Attempt to use null filename}          *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null fileName not allowed                                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test E - Attempt to use null filename} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test F - Attempt to open nonexistant file}      *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: FITS error while opening file: missing.dat...Couldn't close FITS file... *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test F - Attempt to open nonexistant file} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test G - Attempt to use two null inputs}        *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null extName and extNum = 0 not allowed                    *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test G - Attempt to use two null inputs} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test H - Attempt to use bad extNum}             *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: FITS error while locating header 22: tried to move past end of file *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test H - Attempt to use bad extNum} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test I - Attempt to use bad extName}            *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: FITS error while locating header AARGH: illegal HDU number *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test I - Attempt to use bad extName} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test J - Read named hdr w/ invalid extnum}      *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: If extName specified, extNum should be -1.                 *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test J - Read named hdr w/ invalid extnum} | tst_psMetadata_01.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test K - Free psMetadata}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test K - Free psMetadata} | tst_psMetadata_01.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_02.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_02.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_02.stderr	(revision 4547)
@@ -0,0 +1,10 @@
+<DATE><TIME>|<HOST>|I|main
+    Following should produce error for null name.
+<DATE><TIME>|<HOST>|E|psMetadataItemAllocV (FILE:LINENO)
+    Unallowable operation: name is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataItemAllocV (FILE:LINENO)
+    Specified psMetadataType, -1, is not supported.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Unallowable operation: md is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Unallowable operation: item is NULL.
Index: /trunk/psLib/test/types/verified/tst_psMetadata_02.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_02.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_02.stdout	(revision 4547)
@@ -0,0 +1,76 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
+Key Name:  myItem2  Key mdType: 0x00000104  Key Value:             111  Key Comment: I am a signed integer
+Key Name:  myItem3  Key mdType: 0x00000404  Key Value:         222.222  Key Comment: I am a single precision floating point
+Key Name:  myItem4  Key mdType: 0x00000408  Key Value:         333.333  Key Comment: I am a double precision floating point
+Key Name:  myItem5  Key mdType: 0x00010001  Key Value:     HELLO WORLD  Key Comment: I am a string
+
+---> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test B - Attempt to create metadata item with null name} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null value for name not allowed                            *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test B - Attempt to create metadata item with null name} | tst_psMetadata_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test C - Attempt to create metadata item with invalid type} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Invalid psMetadataType: 6                                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test C - Attempt to create metadata item with invalid type} | tst_psMetadata_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test D - Allocate metadata}                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test D - Allocate metadata} | tst_psMetadata_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test E - Attempt to add metadata item to null metadata} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null metadata collection not allowed                       *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test E - Attempt to add metadata item to null metadata} | tst_psMetadata_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test F - Attempt to add null metadata item to metadata} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null metadata item not allowed                             *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test F - Attempt to add null metadata item to metadata} | tst_psMetadata_02.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_02.c                                        *
+*            TestPoint: psMetadata{Test G - Free psMetadata}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test G - Free psMetadata} | tst_psMetadata_02.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_03.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_03.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_03.stderr	(revision 4547)
@@ -0,0 +1,20 @@
+<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
+    Unallowable operation: md is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
+    Failed to remove metadata item, AARGH, from metadata table.
+<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
+    Could not find metadata item at index 22.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Unallowable operation: md->table is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
+    Unallowable operation: md->table is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Unallowable operation: md->list is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataRemove (FILE:LINENO)
+    Unallowable operation: md->list is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Unallowable operation: item->name is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataAddItem (FILE:LINENO)
+    Unallowable operation: md->table is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataAddV (FILE:LINENO)
+    Failed to add metadata item to metadata collection list.
Index: /trunk/psLib/test/types/verified/tst_psMetadata_03.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_03.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_03.stdout	(revision 4547)
@@ -0,0 +1,117 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
+Key Name:  myItem2  Key mdType: 0x00000104  Key Value:              55  Key Comment: I am a integer
+Key Name:  myItem3  Key mdType: 0x00001301  Key Value:               0  Key Comment: I am a boolean
+Key Name:  myItem4  Key mdType: 0x00000104  Key Value:              66  Key Comment: I am a integer
+
+---> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test B - Remove items from metadata by name}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test B - Remove items from metadata by name} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test C - Remove items from metadata by index}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test C - Remove items from metadata by index} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test D - Attempt to use null metadata}          *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null metadata collection not allowed                       *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test D - Attempt to use null metadata} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test E - Attempt to remove non-existant metadata item by name} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't find metadata item. Name: AARGH                   *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test E - Attempt to remove non-existant metadata item by name} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test E - Attempt to remove non-existant metadata item by index} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't find metadata item in list. Index: 22             *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test E - Attempt to remove non-existant metadata item by index} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test G - Attempt to add item to metadata w/o hash table} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't add item to invalid metadata structure.           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test G - Attempt to add item to invalid metadata w/o hash table} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test H - Attempt to add item to metadata w/o link list} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't add item to invalid metadata structure.           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test H - Attempt to add item to invalid metadata w/o link list} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test I - Attempt to add item with null name}    *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't add item with null name.                          *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test I - Attempt to add item with null name} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test J - Attempt to add item to metadata w/o hash table} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't add item to invalid metadata structure.           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test J - Attempt to add item to invalid metadata w/o hash table} | tst_psMetadata_03.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_03.c                                        *
+*            TestPoint: psMetadata{Test K - Free psMetadata}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test K - Free psMetadata} | tst_psMetadata_03.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_04.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_04.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_04.stderr	(revision 4547)
@@ -0,0 +1,16 @@
+<DATE><TIME>|<HOST>|E|psMetadataLookup (FILE:LINENO)
+    Unallowable operation: md is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataLookup (FILE:LINENO)
+    Unallowable operation: key is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataGet (FILE:LINENO)
+    Unallowable operation: md is NULL.
+<DATE><TIME>|<HOST>|E|psListIteratorSet (FILE:LINENO)
+    Specified location, 22, is invalid.
+<DATE><TIME>|<HOST>|E|psListGet (FILE:LINENO)
+    Specified location, 22, is invalid.
+<DATE><TIME>|<HOST>|E|psMetadataGet (FILE:LINENO)
+    Could not find metadata item at index 22.
+<DATE><TIME>|<HOST>|E|psMetadataLookup (FILE:LINENO)
+    Unallowable operation: md->table is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataGet (FILE:LINENO)
+    Unallowable operation: md->list is NULL.
Index: /trunk/psLib/test/types/verified/tst_psMetadata_04.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_04.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_04.stdout	(revision 4547)
@@ -0,0 +1,174 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
+Key Name:  myItem2  Key mdType: 0x00000104  Key Value:              55  Key Comment: I am a integer
+Key Name:  myItem3  Key mdType: 0x00001301  Key Value:               0  Key Comment: I am a boolean
+Key Name:  myItem4  Key mdType: 0x00000104  Key Value:              66  Key Comment: I am a integer
+Key Name:  myItem5  Key mdType: 0x00000408  Key Value:           3.140  Key Comment: I am a double
+
+---> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test B - Lookup metadata item by name}          *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Found item named myItem2
+
+---> TESTPOINT PASSED (psMetadata{Test B - Lookup metadata item by name} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test C - Attempt to use null metadata}          *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null metadata collection not allowed                       *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test C - Attempt to use null metadata} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test D - Attempt to use null key}               *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null key name not allowed                                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test D - Attempt to use null key} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test E - Attempt to lookup non-existant metadata item} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't find metadata item. Name: AARGH                   *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test E - Attempt to lookup non-existant metadata item} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test F - Lookup metadata item by index}         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Found item named myItem6
+
+---> TESTPOINT PASSED (psMetadata{Test F - Lookup metadata item by index} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test G - Lookup metadata item and return psS32 value} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test G - Lookup metadata item and return psS32 value} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test H - Lookup metadata item and return psF64 value} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test H - Lookup metadata item and return psF64 value} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test I - Lookup metadata item and return psVector pointer} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test I - Lookup metadata item and return psVector pointer} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test J - Attempt to use null metadata}          *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null metadata collection not allowed                       *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test J - Attempt to use null metadata} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test K - Attempt to get non-existant metadata item} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Couldn't find metadata item with given index. Index: 22    *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test K - Attempt to get non-existant metadata item} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test L - Attemp to look up with an invalid metadata} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Lookup item with invalid metadata object.                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test L - Attempt to lookup an invalid metadata object.} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test M - Attempt to get item with an invalid metadata} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Get item with invalid metadata object.                     *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test M - Attempt to get item with  invalid metadata object} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test N - Attempt get psS32 value of non-existant metadata item} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test N - Attempt get psS32 value of non-existant metadata item} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test O - Attempt get psF64 value of non-existant metadata item} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test O - Attempt get psF64 value of non-existant metadata item} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test P - Attempt get psVector value of non-existant metadata item} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test P - Attempt get psVector value of non-existant metadata item} | tst_psMetadata_04.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_04.c                                        *
+*            TestPoint: psMetadata{Test Q - Free psMetadata}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test Q - Free psMetadata} | tst_psMetadata_04.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_05.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_05.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_05.stderr	(revision 4547)
@@ -0,0 +1,6 @@
+<DATE><TIME>|<HOST>|E|psMetadataItemPrint (FILE:LINENO)
+    Unallowable operation: fd is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataItemPrint (FILE:LINENO)
+    Unallowable operation: format is NULL.
+<DATE><TIME>|<HOST>|E|psMetadataItemPrint (FILE:LINENO)
+    Unallowable operation: item is NULL.
Index: /trunk/psLib/test/types/verified/tst_psMetadata_05.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_05.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_05.stdout	(revision 4547)
@@ -0,0 +1,64 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_05.c                                        *
+*            TestPoint: psMetadata{Test A - Allocate metadata items}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
+Key Name:  myItem2  Key mdType: 0x00000104  Key Value:              55  Key Comment: I am a integer
+Key Name:  myItem3  Key mdType: 0x00001301  Key Value:               0  Key Comment: I am a boolean
+Key Name:  myItem4  Key mdType: 0x00000104  Key Value:              66  Key Comment: I am a integer
+
+---> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata items} | tst_psMetadata_05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_05.c                                        *
+*            TestPoint: psMetadata{Test F - Write metadata item to file}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test F - Write metadata item to file} | tst_psMetadata_05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_05.c                                        *
+*            TestPoint: psMetadata{Test J - Attempt to use null file with itemPrint} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null file descriptor not allowed                           *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test J - Attempt to use null file with itemPrint} | tst_psMetadata_05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_05.c                                        *
+*            TestPoint: psMetadata{Test K - Attempt to use null format with itemPrint} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null format not allowed                                    *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test K - Attempt to use null format with itemPrint} | tst_psMetadata_05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_05.c                                        *
+*            TestPoint: psMetadata{Test L - Attempt to use null item with itemPrint} *
+*             TestType: Negative                                                   *
+*    ExpectedErrorText: Null metadata not allowed                                  *
+*  ExpectedStatusValue: 0                                                          *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test L - Attempt to use null item with itemPrint} | tst_psMetadata_05.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_05.c                                        *
+*            TestPoint: psMetadata{Test M - Free psMetadata}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test M - Free psMetadata} | tst_psMetadata_05.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_06.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_06.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_06.stdout	(revision 4547)
@@ -0,0 +1,50 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_06.c                                        *
+*            TestPoint: psMetadata{Test A - Allocate metadata and items}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+Key Name:  myItem1  Key mdType: 0x00001301  Key Value:               1  Key Comment: I am a boolean
+Key Name:  myItem1  Key mdType: 0x00000104  Key Value:             111  Key Comment: I am a signed integer
+Key Name:  myItem1  Key mdType: 0x00000104  Key Value:             222  Key Comment: I am a signed integer
+Key Name:  myItem2  Key mdType: 0x00000104  Key Value:             333  Key Comment: I am a signed integer
+Key Name:  myItem2  Key mdType: 0x00010000  Key Value:          psList  Key Comment: I am a list
+
+---> TESTPOINT PASSED (psMetadata{Test A - Allocate metadata and items} | tst_psMetadata_06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_06.c                                        *
+*            TestPoint: psMetadata{Test B - replace an item in the metadata}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test B - replace an item in the metadata} | tst_psMetadata_06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_06.c                                        *
+*            TestPoint: psMetadata{Test C - add duplicate-key metadata item}       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test C - add duplicate-key metadata item} | tst_psMetadata_06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_06.c                                        *
+*            TestPoint: psMetadata{Test D - Add folder node on top of existing leaf node} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test D - Add folder node on top of existing leaf node} | tst_psMetadata_06.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_06.c                                        *
+*            TestPoint: psMetadata{Test E - Free psMetadata}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test E - Free psMetadata} | tst_psMetadata_06.c)
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_07.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_07.stdout	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_07.stdout	(revision 4547)
@@ -0,0 +1,18 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata{Test A - Read an XML config file}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test A - Read an XML config file} | tst_psMetadata_07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata{Test B - Free data}                             *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata{Test B - Free data} | tst_psMetadata_07.c)
+
Index: /trunk/psLib/test/types/verified/tst_psPixels.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psPixels.stderr	(revision 4547)
+++ /trunk/psLib/test/types/verified/tst_psPixels.stderr	(revision 4547)
@@ -0,0 +1,74 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psPixels.c                                             *
+*            TestPoint: psPixels{psPixelsAlloc}                                    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPixels{psPixelsAlloc} | tst_psPixels.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psPixels.c                                             *
+*            TestPoint: psPixels{psPixelsRealloc}                                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psPixels{psPixelsRealloc} | tst_psPixels.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psPixels.c                                             *
+*            TestPoint: psPixels{psPixelsCopy}                                     *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPixelsCopy
+    Following should generate an error message for NULL input
+<DATE><TIME>|<HOST>|E|psPixelsCopy (FILE:LINENO)
+    Input psPixels can not be NULL.
+
+---> TESTPOINT PASSED (psPixels{psPixelsCopy} | tst_psPixels.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psPixels.c                                             *
+*            TestPoint: psPixels{psPixelsToMask}                                   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPixelsToMask
+    Following should generate an error for NULL pixels
+<DATE><TIME>|<HOST>|E|psPixelsToMask (FILE:LINENO)
+    Input psPixels can not be NULL.
+<DATE><TIME>|<HOST>|I|testPixelsToMask
+    Following should generate an error for invalid range
+<DATE><TIME>|<HOST>|E|psPixelsToMask (FILE:LINENO)
+    Specified psRegion, [10:0,10:0], does not specify a valid region.
+
+---> TESTPOINT PASSED (psPixels{psPixelsToMask} | tst_psPixels.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psPixels.c                                             *
+*            TestPoint: psPixels{psPixelsFromMask}                                 *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPixelsFromMask
+    Following should generate error for NULL mask
+<DATE><TIME>|<HOST>|E|psPixelsFromMask (FILE:LINENO)
+    Specified mask can not be NULL.
+
+---> TESTPOINT PASSED (psPixels{psPixelsFromMask} | tst_psPixels.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psPixels.c                                             *
+*            TestPoint: psPixels{psPixelsConcatenate}                              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testPixelsConcatenate
+    Following should generate an error message for NULL pixels
+<DATE><TIME>|<HOST>|E|psPixelsConcatenate (FILE:LINENO)
+    Input psPixels can not be NULL.
+
+---> TESTPOINT PASSED (psPixels{psPixelsConcatenate} | tst_psPixels.c)
+
