summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2011-09-29 12:04:21 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2011-09-29 12:04:21 +0000
commit211a8519bb41a68b522fcadffad7df3041ab242b (patch)
tree1251b335808c5bcf4101303b9e13880583c9e1c8
parent89322e2db40185c65a21c59bebbf577fcee55357 (diff)
psutils: add simple test cases
git-svn-id: svn://tug.org/texlive/trunk@24127 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/utils/psutils/ChangeLog7
-rw-r--r--Build/source/utils/psutils/Makefile.am13
-rw-r--r--Build/source/utils/psutils/Makefile.in139
-rw-r--r--Build/source/utils/psutils/psutils-1.17-PATCHES/ChangeLog5
-rw-r--r--Build/source/utils/psutils/psutils-1.17-PATCHES/patch-10-binary-mode60
-rw-r--r--Build/source/utils/psutils/psutils-1.17/psbook.c2
-rw-r--r--Build/source/utils/psutils/psutils-1.17/psnup.c2
-rw-r--r--Build/source/utils/psutils/psutils-1.17/psresize.c2
-rw-r--r--Build/source/utils/psutils/psutils-1.17/psselect.c2
-rw-r--r--Build/source/utils/psutils/psutils-1.17/pstops.c2
-rwxr-xr-xBuild/source/utils/psutils/psutils.test56
-rw-r--r--Build/source/utils/psutils/tests/play.ps305
-rw-r--r--Build/source/utils/psutils/tests/playbook.21
-rw-r--r--Build/source/utils/psutils/tests/playnup.21
-rw-r--r--Build/source/utils/psutils/tests/playps.21
-rw-r--r--Build/source/utils/psutils/tests/playres.21
-rw-r--r--Build/source/utils/psutils/tests/playsel.21
-rw-r--r--Build/source/utils/psutils/tests/plot.eps311
-rw-r--r--Build/source/utils/psutils/tests/ploth.eps318
-rw-r--r--Build/source/utils/psutils/tests/plotm.eps319
-rw-r--r--Build/source/utils/psutils/tests/plotv.eps318
21 files changed, 1839 insertions, 27 deletions
diff --git a/Build/source/utils/psutils/ChangeLog b/Build/source/utils/psutils/ChangeLog
index 6bbbbfd5595..6ec46eab7b1 100644
--- a/Build/source/utils/psutils/ChangeLog
+++ b/Build/source/utils/psutils/ChangeLog
@@ -1,3 +1,10 @@
+2011-09-25 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * psutils.test: New shell script for tests.
+ * tests/play.ps tests/play{book,nup,ps,res,sel}.2
+ tests/plot{,h,m,v}.eps: Test input and expected output.
+ * Makefile.am: Add the test and its data.
+
2011-04-20 Peter Breitenlohner <peb@mppmu.mpg.de>
* Makefile.am: Handle sh scripts (without .sh) as bin_SCRIPTS.
diff --git a/Build/source/utils/psutils/Makefile.am b/Build/source/utils/psutils/Makefile.am
index aa6e5223f99..d8a15f56cb6 100644
--- a/Build/source/utils/psutils/Makefile.am
+++ b/Build/source/utils/psutils/Makefile.am
@@ -1,6 +1,6 @@
## Makefile.am for the TeX Live subdirectory utils/psutils/
##
-## Copyright (C) 2009 - 2011 Peter Breitenlohner <tex-live@tug.org>
+## Copyright (C) 2009-2011 Peter Breitenlohner <tex-live@tug.org>
## You may freely use, modify and/or distribute this file.
##
ACLOCAL_AMFLAGS = -I ../../m4
@@ -125,3 +125,14 @@ MAKETEXT = $(PERL) $(srcdir)/$(PSUTILS_TREE)/maketext
%.1: $(PSUTILS_TREE)/%.man patchlev.h
$(MAKETEXT) PAPER=$(PAPER) "MAN=$(nodist_man1_MANS)" $< >$@
+## Tests
+##
+TESTS = psutils.test
+EXTRA_DIST += $(TESTS)
+
+## psutils.test
+EXTRA_DIST += tests/play.ps tests/playbook.2 tests/playnup.2 tests/playps.2 \
+ tests/playres.2 tests/playsel.2 \
+ tests/plot.eps tests/ploth.eps tests/plotm.eps tests/plotv.eps
+DISTCLEANFILES = play*.2 play*.ps plot*.eps
+
diff --git a/Build/source/utils/psutils/Makefile.in b/Build/source/utils/psutils/Makefile.in
index bb8ca767e34..62fa86c01d6 100644
--- a/Build/source/utils/psutils/Makefile.in
+++ b/Build/source/utils/psutils/Makefile.in
@@ -124,6 +124,8 @@ NROFF = nroff
MANS = $(nodist_man1_MANS)
ETAGS = etags
CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -223,7 +225,11 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I ../../m4
-EXTRA_DIST = $(PSUTILS_TREE) $(PSUTILS_TREE)-PATCHES
+EXTRA_DIST = $(PSUTILS_TREE) $(PSUTILS_TREE)-PATCHES \
+ ../../build-aux/relpath $(TESTS) tests/play.ps \
+ tests/playbook.2 tests/playnup.2 tests/playps.2 \
+ tests/playres.2 tests/playsel.2 tests/plot.eps tests/ploth.eps \
+ tests/plotm.eps tests/plotv.eps
OS = UNIX
PAPER = a4
AM_CPPFLAGS = -DUNIX -DPAPER=\"$(PAPER)\"
@@ -313,6 +319,8 @@ nodist_man1_MANS = \
CLEANFILES = $(nodist_bin_SCRIPTS) $(nodist_texmf_SCRIPTS) $(nodist_man1_MANS)
PERL = /usr/bin/env perl
MAKETEXT = $(PERL) $(srcdir)/$(PSUTILS_TREE)/maketext
+TESTS = psutils.test
+DISTCLEANFILES = play*.2 play*.ps plot*.eps
all: all-am
.SUFFIXES:
@@ -753,6 +761,98 @@ GTAGS:
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ echo "$$grn$$dashes"; \
+ else \
+ echo "$$red$$dashes"; \
+ fi; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes$$std"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
@@ -917,6 +1017,7 @@ distcleancheck: distclean
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS)
installdirs:
@@ -945,6 +1046,7 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@@ -1027,12 +1129,12 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man \
$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
uninstall-man: uninstall-man1
-.MAKE: install-am install-data-am install-strip uninstall-am
+.MAKE: check-am install-am install-data-am install-strip uninstall-am
-.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
- clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \
- dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
- dist-zip distcheck distclean distclean-compile \
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
+ clean clean-binPROGRAMS clean-generic ctags dist dist-all \
+ dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar dist-tarZ \
+ dist-xz dist-zip distcheck distclean distclean-compile \
distclean-generic distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-binSCRIPTS \
@@ -1053,10 +1155,8 @@ uninstall-man: uninstall-man1
# in case of an SVN repository
dist-hook:
rm -rf `find $(distdir) -name .svn`
-
-#
.PHONY: install-lua-links install-perl-links install-shell-links \
- install-links make-links uninstall-links
+ install-links uninstall-links
@WIN32_TRUE@@WIN32_WRAP_TRUE@$(wrappers): $(runscript)
@WIN32_TRUE@@WIN32_WRAP_TRUE@ $(LN_S) $(runscript) $@
@@ -1069,21 +1169,18 @@ install-perl-links:
install-shell-links:
@WIN32_FALSE@ $(MAKE) $(AM_MAKEFLAGS) TYPE=shell EXT=sh install-links
-# We support both multiplatform and non-multiplatform builds.
+# We support native builds, multiplatform or not, as well as distro builds.
install-links:
- case "$(bindir)" in \
- */bin) $(MAKE) $(AM_MAKEFLAGS) REL=.. TYPE=$(TYPE) EXT=$(EXT) make-links;; \
- */bin/*) $(MAKE) $(AM_MAKEFLAGS) REL=../.. TYPE=$(TYPE) EXT=$(EXT) make-links;; \
- *) echo "strange directory '$(bindir)' for linked $(TYPE) scripts" >&2; \
- exit 1;; \
- esac
-
-make-links:
- @cd $(DESTDIR)$(bindir) && \
+ @REL=`$(SHELL) $(srcdir)/../../build-aux/relpath '$(DESTDIR)' '$(bindir)' '$(prefix)'`; \
+ if test -z "$$REL"; then \
+ echo 'unable to compute relative path for linked $(TYPE) scripts' >&2; \
+ exit 1; \
+ fi; \
+ cd $(DESTDIR)$(bindir) && \
for f in $($(TYPE)_scripts); do \
rm -f $$f; \
- echo "creating link '$$f' -> '$(REL)/$(scriptsdir)/$$f.$(EXT)'"; \
- $(LN_S) $(REL)/$(scriptsdir)/$$f.$(EXT) $$f || exit 1; \
+ echo "creating link '$$f' -> '$$REL/$(scriptsdir)/$$f.$(EXT)'"; \
+ $(LN_S) $$REL/$(scriptsdir)/$$f.$(EXT) $$f || exit 1; \
done
uninstall-links:
diff --git a/Build/source/utils/psutils/psutils-1.17-PATCHES/ChangeLog b/Build/source/utils/psutils/psutils-1.17-PATCHES/ChangeLog
index c699b08a7ef..f4bd0e67e6b 100644
--- a/Build/source/utils/psutils/psutils-1.17-PATCHES/ChangeLog
+++ b/Build/source/utils/psutils/psutils-1.17-PATCHES/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * patch-10-binary-mode (new): Fix error messages when setting
+ binary mode fails.
+
2011-01-09 Peter Breitenlohner <peb@mppmu.mpg.de>
* patch-07-TEMPDIR: Fix broken perl syntax.
diff --git a/Build/source/utils/psutils/psutils-1.17-PATCHES/patch-10-binary-mode b/Build/source/utils/psutils/psutils-1.17-PATCHES/patch-10-binary-mode
new file mode 100644
index 00000000000..e96839b911d
--- /dev/null
+++ b/Build/source/utils/psutils/psutils-1.17-PATCHES/patch-10-binary-mode
@@ -0,0 +1,60 @@
+diff -ur psutils-1.17.orig/psbook.c psutils-1.17/psbook.c
+--- psutils-1.17.orig/psbook.c 2008-02-01 12:23:16.000000000 +0100
++++ psutils-1.17/psbook.c 2011-09-22 19:16:13.000000000 +0200
+@@ -66,7 +66,7 @@
+ if ( infile == stdin ) {
+ int fd = fileno(stdin) ;
+ if ( setmode(fd, O_BINARY) < 0 )
+- message(FATAL, "can't open input file %s\n", argv[4]);
++ message(FATAL, "can't reset stdin to binary mode\n");
+ }
+ if ( outfile == stdout ) {
+ int fd = fileno(stdout) ;
+diff -ur psutils-1.17.orig/psnup.c psutils-1.17/psnup.c
+--- psutils-1.17.orig/psnup.c 2009-06-24 00:18:08.000000000 +0200
++++ psutils-1.17/psnup.c 2011-09-22 19:16:16.000000000 +0200
+@@ -195,7 +195,7 @@
+ if ( infile == stdin ) {
+ int fd = fileno(stdin) ;
+ if ( setmode(fd, O_BINARY) < 0 )
+- message(FATAL, "can't open input file %s\n", argv[4]);
++ message(FATAL, "can't reset stdin to binary mode\n");
+ }
+ if ( outfile == stdout ) {
+ int fd = fileno(stdout) ;
+diff -ur psutils-1.17.orig/psresize.c psutils-1.17/psresize.c
+--- psutils-1.17.orig/psresize.c 2008-02-01 12:23:16.000000000 +0100
++++ psutils-1.17/psresize.c 2011-09-22 19:16:18.000000000 +0200
+@@ -118,7 +118,7 @@
+ if ( infile == stdin ) {
+ int fd = fileno(stdin) ;
+ if ( setmode(fd, O_BINARY) < 0 )
+- message(FATAL, "can't open input file %s\n", argv[4]);
++ message(FATAL, "can't reset stdin to binary mode\n");
+ }
+ if ( outfile == stdout ) {
+ int fd = fileno(stdout) ;
+diff -ur psutils-1.17.orig/psselect.c psutils-1.17/psselect.c
+--- psutils-1.17.orig/psselect.c 2008-02-01 12:23:16.000000000 +0100
++++ psutils-1.17/psselect.c 2011-09-22 19:16:21.000000000 +0200
+@@ -137,7 +137,7 @@
+ if ( infile == stdin ) {
+ int fd = fileno(stdin) ;
+ if ( setmode(fd, O_BINARY) < 0 )
+- message(FATAL, "can't open input file %s\n", argv[4]);
++ message(FATAL, "can't reset stdin to binary mode\n");
+ }
+ if ( outfile == stdout ) {
+ int fd = fileno(stdout) ;
+diff -ur psutils-1.17.orig/pstops.c psutils-1.17/pstops.c
+--- psutils-1.17.orig/pstops.c 2009-06-24 00:18:08.000000000 +0200
++++ psutils-1.17/pstops.c 2011-09-22 19:16:24.000000000 +0200
+@@ -181,7 +181,7 @@
+ if ( infile == stdin ) {
+ int fd = fileno(stdin) ;
+ if ( setmode(fd, O_BINARY) < 0 )
+- message(FATAL, "can't open input file %s\n", argv[4]);
++ message(FATAL, "can't reset stdin to binary mode\n");
+ }
+ if ( outfile == stdout ) {
+ int fd = fileno(stdout) ;
diff --git a/Build/source/utils/psutils/psutils-1.17/psbook.c b/Build/source/utils/psutils/psutils-1.17/psbook.c
index 5e9b35b80cf..60627e0672f 100644
--- a/Build/source/utils/psutils/psutils-1.17/psbook.c
+++ b/Build/source/utils/psutils/psutils-1.17/psbook.c
@@ -66,7 +66,7 @@ int main(int argc, char *argv[])
if ( infile == stdin ) {
int fd = fileno(stdin) ;
if ( setmode(fd, O_BINARY) < 0 )
- message(FATAL, "can't open input file %s\n", argv[4]);
+ message(FATAL, "can't reset stdin to binary mode\n");
}
if ( outfile == stdout ) {
int fd = fileno(stdout) ;
diff --git a/Build/source/utils/psutils/psutils-1.17/psnup.c b/Build/source/utils/psutils/psutils-1.17/psnup.c
index 1a39e95c418..23fda2c6141 100644
--- a/Build/source/utils/psutils/psutils-1.17/psnup.c
+++ b/Build/source/utils/psutils/psutils-1.17/psnup.c
@@ -195,7 +195,7 @@ int main(int argc, char *argv[])
if ( infile == stdin ) {
int fd = fileno(stdin) ;
if ( setmode(fd, O_BINARY) < 0 )
- message(FATAL, "can't open input file %s\n", argv[4]);
+ message(FATAL, "can't reset stdin to binary mode\n");
}
if ( outfile == stdout ) {
int fd = fileno(stdout) ;
diff --git a/Build/source/utils/psutils/psutils-1.17/psresize.c b/Build/source/utils/psutils/psutils-1.17/psresize.c
index 7bc3a75c788..a0c86980b9b 100644
--- a/Build/source/utils/psutils/psutils-1.17/psresize.c
+++ b/Build/source/utils/psutils/psutils-1.17/psresize.c
@@ -118,7 +118,7 @@ int main(int argc, char *argv[])
if ( infile == stdin ) {
int fd = fileno(stdin) ;
if ( setmode(fd, O_BINARY) < 0 )
- message(FATAL, "can't open input file %s\n", argv[4]);
+ message(FATAL, "can't reset stdin to binary mode\n");
}
if ( outfile == stdout ) {
int fd = fileno(stdout) ;
diff --git a/Build/source/utils/psutils/psutils-1.17/psselect.c b/Build/source/utils/psutils/psutils-1.17/psselect.c
index e48c6cc7fa4..baa8e15efdb 100644
--- a/Build/source/utils/psutils/psutils-1.17/psselect.c
+++ b/Build/source/utils/psutils/psutils-1.17/psselect.c
@@ -137,7 +137,7 @@ int main(int argc, char *argv[])
if ( infile == stdin ) {
int fd = fileno(stdin) ;
if ( setmode(fd, O_BINARY) < 0 )
- message(FATAL, "can't open input file %s\n", argv[4]);
+ message(FATAL, "can't reset stdin to binary mode\n");
}
if ( outfile == stdout ) {
int fd = fileno(stdout) ;
diff --git a/Build/source/utils/psutils/psutils-1.17/pstops.c b/Build/source/utils/psutils/psutils-1.17/pstops.c
index 02632c1e74d..2b768da63d2 100644
--- a/Build/source/utils/psutils/psutils-1.17/pstops.c
+++ b/Build/source/utils/psutils/psutils-1.17/pstops.c
@@ -181,7 +181,7 @@ int main(int argc, char *argv[])
if ( infile == stdin ) {
int fd = fileno(stdin) ;
if ( setmode(fd, O_BINARY) < 0 )
- message(FATAL, "can't open input file %s\n", argv[4]);
+ message(FATAL, "can't reset stdin to binary mode\n");
}
if ( outfile == stdout ) {
int fd = fileno(stdout) ;
diff --git a/Build/source/utils/psutils/psutils.test b/Build/source/utils/psutils/psutils.test
new file mode 100755
index 00000000000..a54d9f9434b
--- /dev/null
+++ b/Build/source/utils/psutils/psutils.test
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+# Copyright (C) 2011 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+rm -rf play*
+./psselect 5:15 $srcdir/tests/play.ps playsel.ps \
+ 2>playsel.2 \
+ && diff playsel.2 $srcdir/tests/playsel.2 \
+ || exit 1
+
+echo psselect tests OK
+
+./psbook -s4 playsel.ps playbook.ps \
+ 2>playbook.2 \
+ && diff playbook.2 $srcdir/tests/playbook.2 \
+ || exit 1
+
+echo psbook tests OK
+
+./psresize -Pa4 -pa5 playsel.ps playres.ps \
+ 2>playres.2 \
+ && diff playres.2 $srcdir/tests/playres.2 \
+ || exit 1
+
+echo psresize tests OK
+
+./psnup -2 playsel.ps playnup.ps \
+ 2>playnup.2 \
+ && diff playnup.2 $srcdir/tests/playnup.2 \
+ || exit 1
+
+echo psnup tests OK
+
+./pstops '2:0L@.7(21cm,0)+1L@.7(21cm,14.85cm)' playsel.ps playps.ps \
+ 2>playps.2 \
+ && diff playps.2 $srcdir/tests/playps.2 \
+ || exit 1
+
+echo pstops tests OK
+
+rm -rf plot*
+./epsffit -c 0 0 600 368 $srcdir/tests/plot.eps ploth.eps \
+ && diff ploth.eps $srcdir/tests/ploth.eps \
+ || exit 1
+
+./epsffit -c 0 0 500 400 $srcdir/tests/plot.eps plotv.eps \
+ && diff plotv.eps $srcdir/tests/plotv.eps \
+ || exit 1
+
+./epsffit -m 0 0 368 500 $srcdir/tests/plot.eps plotm.eps \
+ && diff plotm.eps $srcdir/tests/plotm.eps \
+ || exit 1
+
+echo epsffit tests OK
+
diff --git a/Build/source/utils/psutils/tests/play.ps b/Build/source/utils/psutils/tests/play.ps
new file mode 100644
index 00000000000..c51a844b092
--- /dev/null
+++ b/Build/source/utils/psutils/tests/play.ps
@@ -0,0 +1,305 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.98 Copyright 2009 Radical Eye Software
+%%Title: play.dvi
+%%CreationDate: Fri Sep 23 19:01:22 2011
+%%Pages: 20
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: Times-Roman
+%%DocumentPaperSizes: a4
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips play.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2011.09.23:1901
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: 8r.enc 0 0
+% File 8r.enc TeX Base 1 Encoding Revision 2.0 2002-10-30
+%
+% @@psencodingfile@{
+% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry,
+% W. Schmidt, P. Lehman",
+% version = "2.0",
+% date = "27nov06",
+% filename = "8r.enc",
+% email = "tex-fonts@@tug.org",
+% docstring = "This is the encoding vector for Type1 and TrueType
+% fonts to be used with TeX. This file is part of the
+% PSNFSS bundle, version 9"
+% @}
+%
+% The idea is to have all the characters normally included in Type 1 fonts
+% available for typesetting. This is effectively the characters in Adobe
+% Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol,
+% MacRoman, and some extra characters from Lucida.
+%
+% Character code assignments were made as follows:
+%
+% (1) the Windows ANSI characters are almost all in their Windows ANSI
+% positions, because some Windows users cannot easily reencode the
+% fonts, and it makes no difference on other systems. The only Windows
+% ANSI characters not available are those that make no sense for
+% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+% (173). quotesingle and grave are moved just because it's such an
+% irritation not having them in TeX positions.
+%
+% (2) Remaining characters are assigned arbitrarily to the lower part
+% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+%
+% (3) Y&Y Lucida Bright includes some extra text characters; in the
+% hopes that other PostScript fonts, perhaps created for public
+% consumption, will include them, they are included starting at 0x12.
+% These are /dotlessj /ff /ffi /ffl.
+%
+% (4) hyphen appears twice for compatibility with both ASCII and Windows.
+%
+% (5) /Euro was assigned to 128, as in Windows ANSI
+%
+% (6) Missing characters from MacRoman encoding incorporated as follows:
+%
+% PostScript MacRoman TeXBase1
+% -------------- -------------- --------------
+% /notequal 173 0x16
+% /infinity 176 0x17
+% /lessequal 178 0x18
+% /greaterequal 179 0x19
+% /partialdiff 182 0x1A
+% /summation 183 0x1B
+% /product 184 0x1C
+% /pi 185 0x1D
+% /integral 186 0x81
+% /Omega 189 0x8D
+% /radical 195 0x8E
+% /approxequal 197 0x8F
+% /Delta 198 0x9D
+% /lozenge 215 0x9E
+%
+/TeXBase1Encoding [
+% 0x00
+ /.notdef /dotaccent /fi /fl
+ /fraction /hungarumlaut /Lslash /lslash
+ /ogonek /ring /.notdef /breve
+ /minus /.notdef /Zcaron /zcaron
+% 0x10
+ /caron /dotlessi /dotlessj /ff
+ /ffi /ffl /notequal /infinity
+ /lessequal /greaterequal /partialdiff /summation
+ /product /pi /grave /quotesingle
+% 0x20
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus
+ /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% 0x40
+ /at /A /B /C
+ /D /E /F /G
+ /H /I /J /K
+ /L /M /N /O
+% 0x50
+ /P /Q /R /S
+ /T /U /V /W
+ /X /Y /Z /bracketleft
+ /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c
+ /d /e /f /g
+ /h /i /j /k
+ /l /m /n /o
+% 0x70
+ /p /q /r /s
+ /t /u /v /w
+ /x /y /z /braceleft
+ /bar /braceright /asciitilde /.notdef
+% 0x80
+ /Euro /integral /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /Omega /radical /approxequal
+% 0x90
+ /.notdef /.notdef /.notdef /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /Delta /lozenge /Ydieresis
+% 0xA0
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /hyphen /registered /macron
+% 0xB0
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+] def
+
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 600 600 (play.dvi)
+@start /Fa 198[415 415 415 415 415 415 415 415 415 415
+48[{TeXBase1Encoding ReEncodeFont}10 830.22 /Times-Roman
+rf /Fb 198[83 83 83 83 83 83 83 83 83 83 48[{
+TeXBase1Encoding ReEncodeFont}10 166.044 /Times-Roman
+rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%BeginPaperSize: a4
+/setpagedevice where
+{ pop << /PageSize [595 842] >> setpagedevice }
+{ /a4 where { pop a4 } if }
+ifelse
+%%EndPaperSize
+ end
+%%EndSetup
+%%Page: 11 1
+TeXDict begin 11 0 bop 330 419 a Fb(1)2834 b(1)1622 3268
+y Fa(1)330 5670 y Fb(1)g(1)p eop end
+%%Page: 12 2
+TeXDict begin 12 1 bop 330 419 a Fb(2)2834 b(2)1622 3268
+y Fa(2)330 5670 y Fb(2)g(2)p eop end
+%%Page: 13 3
+TeXDict begin 13 2 bop 330 419 a Fb(3)2834 b(3)1622 3264
+y Fa(3)330 5670 y Fb(3)g(3)p eop end
+%%Page: 14 4
+TeXDict begin 14 3 bop 330 419 a Fb(4)2834 b(4)1622 3268
+y Fa(4)330 5670 y Fb(4)g(4)p eop end
+%%Page: 15 5
+TeXDict begin 15 4 bop 330 423 a Fb(5)2834 b(5)1622 3275
+y Fa(5)330 5670 y Fb(5)g(5)p eop end
+%%Page: 16 6
+TeXDict begin 16 5 bop 330 419 a Fb(6)2834 b(6)1622 3264
+y Fa(6)330 5670 y Fb(6)g(6)p eop end
+%%Page: 17 7
+TeXDict begin 17 6 bop 330 419 a Fb(7)2834 b(7)1622 3266
+y Fa(7)330 5670 y Fb(7)g(7)p eop end
+%%Page: 18 8
+TeXDict begin 18 7 bop 330 419 a Fb(8)2834 b(8)1622 3264
+y Fa(8)330 5670 y Fb(8)g(8)p eop end
+%%Page: 19 9
+TeXDict begin 19 8 bop 330 419 a Fb(9)2834 b(9)1622 3261
+y Fa(9)330 5670 y Fb(9)g(9)p eop end
+%%Page: 20 10
+TeXDict begin 20 9 bop 330 419 a Fb(10)2668 b(10)1415
+3264 y Fa(10)330 5670 y Fb(10)g(10)p eop end
+%%Page: 21 11
+TeXDict begin 21 10 bop 330 419 a Fb(11)2668 b(11)1415
+3268 y Fa(11)330 5670 y Fb(11)g(11)p eop end
+%%Page: 22 12
+TeXDict begin 22 11 bop 330 419 a Fb(12)2668 b(12)1415
+3268 y Fa(12)330 5670 y Fb(12)g(12)p eop end
+%%Page: 23 13
+TeXDict begin 23 12 bop 330 419 a Fb(13)2668 b(13)1415
+3264 y Fa(13)330 5670 y Fb(13)g(13)p eop end
+%%Page: 24 14
+TeXDict begin 24 13 bop 330 419 a Fb(14)2668 b(14)1415
+3268 y Fa(14)330 5670 y Fb(14)g(14)p eop end
+%%Page: 25 15
+TeXDict begin 25 14 bop 330 423 a Fb(15)2668 b(15)1415
+3275 y Fa(15)330 5670 y Fb(15)g(15)p eop end
+%%Page: 26 16
+TeXDict begin 26 15 bop 330 419 a Fb(16)2668 b(16)1415
+3264 y Fa(16)330 5670 y Fb(16)g(16)p eop end
+%%Page: 27 17
+TeXDict begin 27 16 bop 330 419 a Fb(17)2668 b(17)1415
+3266 y Fa(17)330 5670 y Fb(17)g(17)p eop end
+%%Page: 28 18
+TeXDict begin 28 17 bop 330 419 a Fb(18)2668 b(18)1415
+3264 y Fa(18)330 5670 y Fb(18)g(18)p eop end
+%%Page: 29 19
+TeXDict begin 29 18 bop 330 419 a Fb(19)2668 b(19)1415
+3261 y Fa(19)330 5670 y Fb(19)g(19)p eop end
+%%Page: 30 20
+TeXDict begin 30 19 bop 330 419 a Fb(20)2668 b(20)1415
+3264 y Fa(20)330 5670 y Fb(20)g(20)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Build/source/utils/psutils/tests/playbook.2 b/Build/source/utils/psutils/tests/playbook.2
new file mode 100644
index 00000000000..353bc098e86
--- /dev/null
+++ b/Build/source/utils/psutils/tests/playbook.2
@@ -0,0 +1 @@
+[4] [1] [2] [3] [8] [5] [6] [7] [*] [9] [10] [11] Wrote 12 pages, 10984 bytes
diff --git a/Build/source/utils/psutils/tests/playnup.2 b/Build/source/utils/psutils/tests/playnup.2
new file mode 100644
index 00000000000..d1ff375b517
--- /dev/null
+++ b/Build/source/utils/psutils/tests/playnup.2
@@ -0,0 +1 @@
+[1] [2] [3] [4] [5] [6] Wrote 6 pages, 16645 bytes
diff --git a/Build/source/utils/psutils/tests/playps.2 b/Build/source/utils/psutils/tests/playps.2
new file mode 100644
index 00000000000..d1ff375b517
--- /dev/null
+++ b/Build/source/utils/psutils/tests/playps.2
@@ -0,0 +1 @@
+[1] [2] [3] [4] [5] [6] Wrote 6 pages, 16645 bytes
diff --git a/Build/source/utils/psutils/tests/playres.2 b/Build/source/utils/psutils/tests/playres.2
new file mode 100644
index 00000000000..7775d7fc7e1
--- /dev/null
+++ b/Build/source/utils/psutils/tests/playres.2
@@ -0,0 +1 @@
+[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Wrote 11 pages, 15970 bytes
diff --git a/Build/source/utils/psutils/tests/playsel.2 b/Build/source/utils/psutils/tests/playsel.2
new file mode 100644
index 00000000000..0d1dd700805
--- /dev/null
+++ b/Build/source/utils/psutils/tests/playsel.2
@@ -0,0 +1 @@
+[5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] Wrote 11 pages, 10962 bytes
diff --git a/Build/source/utils/psutils/tests/plot.eps b/Build/source/utils/psutils/tests/plot.eps
new file mode 100644
index 00000000000..11bc5843d63
--- /dev/null
+++ b/Build/source/utils/psutils/tests/plot.eps
@@ -0,0 +1,311 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: SM
+%%BoundingBox: 34 176 564 568
+%%DocumentNeededResources: font Helvetica
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+%%Page: 1 1
+ 20 dict begin
+72 300 div dup scale
+1 setlinejoin 0 setlinecap
+/Helvetica findfont 55 scalefont setfont
+/B {CS newpath moveto} def
+/F {moveto 0 setlinecap} def
+/C {CS M 1 1 3 {pop 3 1 roll 255 div} for SET_COLOUR} def
+/CS {currentpoint stroke} def
+/CF {currentpoint eofill} def
+/L {lineto} def /l {rlineto} def /M {moveto} def /m {rmoveto} def
+/P {gsave 0 1 rlineto stroke grestore} def
+/T {currentlinecap exch 1 setlinecap show setlinecap} def
+errordict /nocurrentpoint {pop 0 0 M currentpoint} put
+/SET_COLOUR statusdict begin /processcolors where
+ {pop processcolors 1 gt} {false} ifelse
+ {(setrgbcolor)} {(pop pop pop)} ifelse cvx end def
+ 80 600 translate
+gsave
+CS [] 0 setdash M
+CS M 1 100 mul 72 div dup setlinewidth
+/P [ /gsave cvx 0 5 -1 roll .05 add dup -2 div 0 exch /rmoveto cvx /rlineto cvx /stroke cvx /grestore cvx ] cvx def
+ 0 0 0 C
+ 0 0 0 C
+CS [] 0 setdash M
+321 295 M CS [] 0 setdash M
+321 295 M 321 295 F (p=2 d=8) T
+CS [] 0 setdash M
+CS [] 0 setdash M
+ 0 0 0 C
+1957 148 M 10 27 m 0 -27 l
+1 27 m 0 -27 l
+0 15 m 2 6 l
+4 4 l
+4 2 l
+6 0 l
+2 -2 l
+0 -2 l
+-2 -2 l
+-2 2 l
+2 2 l
+-23 2 m 7 0 l
+-7 -27 m 13 0 l
+41 34 m 0 -34 l
+-18 17 m 35 0 l
+19 15 m 4 2 l
+6 6 l
+0 -40 l
+-2 38 m 0 -38 l
+-8 0 m 17 0 l
+ 0 0 0 C
+CS [] 0 setdash M
+CS [] 0 setdash M
+219 219 M 2042 0 l
+0 1531 l
+219 1750 L
+219 219 L
+2042 0 l
+219 219 M 2042 0 l
+219 219 M 0 36 l
+-16 -120 m 203 135 F (1) T
+635 219 M 0 18 l
+243 -18 m 0 18 l
+173 -18 m 0 18 l
+134 -18 m 0 18 l
+110 -18 m 0 18 l
+92 -18 m 0 18 l
+80 -18 m 0 18 l
+71 -18 m 0 18 l
+63 -18 m 0 36 l
+-31 -120 m 1570 135 F (10) T
+2018 219 M 0 18 l
+243 -18 m 0 18 l
+219 1750 M 2042 0 l
+219 1750 M 0 -36 l
+416 36 m 0 -18 l
+243 18 m 0 -18 l
+173 18 m 0 -18 l
+134 18 m 0 -18 l
+110 18 m 0 -18 l
+92 18 m 0 -18 l
+80 18 m 0 -18 l
+71 18 m 0 -18 l
+63 18 m 0 -36 l
+417 36 m 0 -18 l
+243 18 m 0 -18 l
+219 219 M 0 1531 l
+219 219 M 34 0 l
+-125 -28 m 128 191 F (-1) T
+219 295 M 17 0 l
+-17 77 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 34 0 l
+66 574 M 66 574 F (-0.5) T
+219 678 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+-94 -28 m 159 957 F (0) T
+219 1061 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+97 1340 M 97 1340 F (0.5) T
+219 1444 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 34 0 l
+-94 -27 m 159 1723 F (1) T
+2261 219 M 0 1531 l
+2261 219 M -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -34 0 l
+CS [] 0 setdash M
+219 1750 M 30 -2 l
+29 -6 l
+28 -12 l
+28 -17 l
+25 -21 l
+24 -25 l
+22 -30 l
+20 -32 l
+18 -34 l
+16 -36 l
+15 -36 l
+13 -37 l
+12 -37 l
+11 -36 l
+10 -36 l
+11 -35 l
+10 -34 l
+12 -33 l
+14 -33 l
+15 -32 l
+18 -33 l
+20 -33 l
+23 -33 l
+24 -33 l
+25 -34 l
+27 -35 l
+28 -34 l
+28 -35 l
+29 -35 l
+29 -34 l
+29 -34 l
+30 -33 l
+29 -33 l
+30 -31 l
+30 -30 l
+30 -29 l
+29 -28 l
+30 -26 l
+30 -25 l
+30 -24 l
+30 -23 l
+30 -21 l
+30 -20 l
+30 -19 l
+30 -18 l
+30 -16 l
+30 -16 l
+30 -14 l
+30 -14 l
+29 -12 l
+30 -12 l
+30 -11 l
+30 -10 l
+30 -9 l
+30 -9 l
+30 -8 l
+30 -8 l
+30 -7 l
+30 -6 l
+30 -6 l
+30 -6 l
+30 -5 l
+30 -5 l
+30 -4 l
+30 -4 l
+30 -4 l
+30 -4 l
+29 -3 l
+30 -3 l
+30 -3 l
+30 -3 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -1 l
+23 -2 l
+219 1750 M 30 -5 l
+29 -16 l
+28 -28 l
+28 -37 l
+25 -44 l
+24 -49 l
+22 -51 l
+20 -51 l
+18 -48 l
+16 -45 l
+15 -41 l
+13 -34 l
+12 -27 l
+11 -18 l
+10 -7 l
+11 6 l
+10 19 l
+12 33 l
+14 47 l
+15 55 l
+18 59 l
+20 58 l
+23 51 l
+24 43 l
+25 34 l
+27 26 l
+28 20 l
+28 14 l
+29 10 l
+29 8 l
+29 5 l
+30 4 l
+29 3 l
+30 2 l
+30 1 l
+30 1 l
+29 1 l
+30 0 l
+30 0 l
+30 1 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+23 0 l
+442 1368 M CS [] 0 setdash M
+411 1313 M 411 1313 F (N) T
+CS [] 0 setdash M
+1122 602 M CS [] 0 setdash M
+1122 602 M 1122 602 F (W) T
+CS [] 0 setdash M
+stroke
+grestore
+showpage
+end
+%%Trailer
+%%EOF
diff --git a/Build/source/utils/psutils/tests/ploth.eps b/Build/source/utils/psutils/tests/ploth.eps
new file mode 100644
index 00000000000..0e5ed6cdaf1
--- /dev/null
+++ b/Build/source/utils/psutils/tests/ploth.eps
@@ -0,0 +1,318 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: SM
+%%DocumentNeededResources: font Helvetica
+%%LanguageLevel: 1
+%%Pages: 1
+%%BoundingBox: 51 0 548 368
+%%EndComments
+%%BeginProcSet: epsffit 1 0
+gsave
+19.306 -165.224 translate
+0.939 0.939 scale
+%%EndProcSet
+
+%%Page: 1 1
+ 20 dict begin
+72 300 div dup scale
+1 setlinejoin 0 setlinecap
+/Helvetica findfont 55 scalefont setfont
+/B {CS newpath moveto} def
+/F {moveto 0 setlinecap} def
+/C {CS M 1 1 3 {pop 3 1 roll 255 div} for SET_COLOUR} def
+/CS {currentpoint stroke} def
+/CF {currentpoint eofill} def
+/L {lineto} def /l {rlineto} def /M {moveto} def /m {rmoveto} def
+/P {gsave 0 1 rlineto stroke grestore} def
+/T {currentlinecap exch 1 setlinecap show setlinecap} def
+errordict /nocurrentpoint {pop 0 0 M currentpoint} put
+/SET_COLOUR statusdict begin /processcolors where
+ {pop processcolors 1 gt} {false} ifelse
+ {(setrgbcolor)} {(pop pop pop)} ifelse cvx end def
+ 80 600 translate
+gsave
+CS [] 0 setdash M
+CS M 1 100 mul 72 div dup setlinewidth
+/P [ /gsave cvx 0 5 -1 roll .05 add dup -2 div 0 exch /rmoveto cvx /rlineto cvx /stroke cvx /grestore cvx ] cvx def
+ 0 0 0 C
+ 0 0 0 C
+CS [] 0 setdash M
+321 295 M CS [] 0 setdash M
+321 295 M 321 295 F (p=2 d=8) T
+CS [] 0 setdash M
+CS [] 0 setdash M
+ 0 0 0 C
+1957 148 M 10 27 m 0 -27 l
+1 27 m 0 -27 l
+0 15 m 2 6 l
+4 4 l
+4 2 l
+6 0 l
+2 -2 l
+0 -2 l
+-2 -2 l
+-2 2 l
+2 2 l
+-23 2 m 7 0 l
+-7 -27 m 13 0 l
+41 34 m 0 -34 l
+-18 17 m 35 0 l
+19 15 m 4 2 l
+6 6 l
+0 -40 l
+-2 38 m 0 -38 l
+-8 0 m 17 0 l
+ 0 0 0 C
+CS [] 0 setdash M
+CS [] 0 setdash M
+219 219 M 2042 0 l
+0 1531 l
+219 1750 L
+219 219 L
+2042 0 l
+219 219 M 2042 0 l
+219 219 M 0 36 l
+-16 -120 m 203 135 F (1) T
+635 219 M 0 18 l
+243 -18 m 0 18 l
+173 -18 m 0 18 l
+134 -18 m 0 18 l
+110 -18 m 0 18 l
+92 -18 m 0 18 l
+80 -18 m 0 18 l
+71 -18 m 0 18 l
+63 -18 m 0 36 l
+-31 -120 m 1570 135 F (10) T
+2018 219 M 0 18 l
+243 -18 m 0 18 l
+219 1750 M 2042 0 l
+219 1750 M 0 -36 l
+416 36 m 0 -18 l
+243 18 m 0 -18 l
+173 18 m 0 -18 l
+134 18 m 0 -18 l
+110 18 m 0 -18 l
+92 18 m 0 -18 l
+80 18 m 0 -18 l
+71 18 m 0 -18 l
+63 18 m 0 -36 l
+417 36 m 0 -18 l
+243 18 m 0 -18 l
+219 219 M 0 1531 l
+219 219 M 34 0 l
+-125 -28 m 128 191 F (-1) T
+219 295 M 17 0 l
+-17 77 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 34 0 l
+66 574 M 66 574 F (-0.5) T
+219 678 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+-94 -28 m 159 957 F (0) T
+219 1061 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+97 1340 M 97 1340 F (0.5) T
+219 1444 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 34 0 l
+-94 -27 m 159 1723 F (1) T
+2261 219 M 0 1531 l
+2261 219 M -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -34 0 l
+CS [] 0 setdash M
+219 1750 M 30 -2 l
+29 -6 l
+28 -12 l
+28 -17 l
+25 -21 l
+24 -25 l
+22 -30 l
+20 -32 l
+18 -34 l
+16 -36 l
+15 -36 l
+13 -37 l
+12 -37 l
+11 -36 l
+10 -36 l
+11 -35 l
+10 -34 l
+12 -33 l
+14 -33 l
+15 -32 l
+18 -33 l
+20 -33 l
+23 -33 l
+24 -33 l
+25 -34 l
+27 -35 l
+28 -34 l
+28 -35 l
+29 -35 l
+29 -34 l
+29 -34 l
+30 -33 l
+29 -33 l
+30 -31 l
+30 -30 l
+30 -29 l
+29 -28 l
+30 -26 l
+30 -25 l
+30 -24 l
+30 -23 l
+30 -21 l
+30 -20 l
+30 -19 l
+30 -18 l
+30 -16 l
+30 -16 l
+30 -14 l
+30 -14 l
+29 -12 l
+30 -12 l
+30 -11 l
+30 -10 l
+30 -9 l
+30 -9 l
+30 -8 l
+30 -8 l
+30 -7 l
+30 -6 l
+30 -6 l
+30 -6 l
+30 -5 l
+30 -5 l
+30 -4 l
+30 -4 l
+30 -4 l
+30 -4 l
+29 -3 l
+30 -3 l
+30 -3 l
+30 -3 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -1 l
+23 -2 l
+219 1750 M 30 -5 l
+29 -16 l
+28 -28 l
+28 -37 l
+25 -44 l
+24 -49 l
+22 -51 l
+20 -51 l
+18 -48 l
+16 -45 l
+15 -41 l
+13 -34 l
+12 -27 l
+11 -18 l
+10 -7 l
+11 6 l
+10 19 l
+12 33 l
+14 47 l
+15 55 l
+18 59 l
+20 58 l
+23 51 l
+24 43 l
+25 34 l
+27 26 l
+28 20 l
+28 14 l
+29 10 l
+29 8 l
+29 5 l
+30 4 l
+29 3 l
+30 2 l
+30 1 l
+30 1 l
+29 1 l
+30 0 l
+30 0 l
+30 1 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+23 0 l
+442 1368 M CS [] 0 setdash M
+411 1313 M 411 1313 F (N) T
+CS [] 0 setdash M
+1122 602 M CS [] 0 setdash M
+1122 602 M 1122 602 F (W) T
+CS [] 0 setdash M
+stroke
+grestore
+showpage
+end
+%%Trailer
+%%EOF
+grestore
diff --git a/Build/source/utils/psutils/tests/plotm.eps b/Build/source/utils/psutils/tests/plotm.eps
new file mode 100644
index 00000000000..adbceb05c67
--- /dev/null
+++ b/Build/source/utils/psutils/tests/plotm.eps
@@ -0,0 +1,319 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: SM
+%%DocumentNeededResources: font Helvetica
+%%LanguageLevel: 1
+%%Pages: 1
+%%BoundingBox: 0 0 368 497
+%%EndComments
+%%BeginProcSet: epsffit 1 0
+gsave
+533.224 -31.918 translate
+90 rotate
+0.939 0.939 scale
+%%EndProcSet
+
+%%Page: 1 1
+ 20 dict begin
+72 300 div dup scale
+1 setlinejoin 0 setlinecap
+/Helvetica findfont 55 scalefont setfont
+/B {CS newpath moveto} def
+/F {moveto 0 setlinecap} def
+/C {CS M 1 1 3 {pop 3 1 roll 255 div} for SET_COLOUR} def
+/CS {currentpoint stroke} def
+/CF {currentpoint eofill} def
+/L {lineto} def /l {rlineto} def /M {moveto} def /m {rmoveto} def
+/P {gsave 0 1 rlineto stroke grestore} def
+/T {currentlinecap exch 1 setlinecap show setlinecap} def
+errordict /nocurrentpoint {pop 0 0 M currentpoint} put
+/SET_COLOUR statusdict begin /processcolors where
+ {pop processcolors 1 gt} {false} ifelse
+ {(setrgbcolor)} {(pop pop pop)} ifelse cvx end def
+ 80 600 translate
+gsave
+CS [] 0 setdash M
+CS M 1 100 mul 72 div dup setlinewidth
+/P [ /gsave cvx 0 5 -1 roll .05 add dup -2 div 0 exch /rmoveto cvx /rlineto cvx /stroke cvx /grestore cvx ] cvx def
+ 0 0 0 C
+ 0 0 0 C
+CS [] 0 setdash M
+321 295 M CS [] 0 setdash M
+321 295 M 321 295 F (p=2 d=8) T
+CS [] 0 setdash M
+CS [] 0 setdash M
+ 0 0 0 C
+1957 148 M 10 27 m 0 -27 l
+1 27 m 0 -27 l
+0 15 m 2 6 l
+4 4 l
+4 2 l
+6 0 l
+2 -2 l
+0 -2 l
+-2 -2 l
+-2 2 l
+2 2 l
+-23 2 m 7 0 l
+-7 -27 m 13 0 l
+41 34 m 0 -34 l
+-18 17 m 35 0 l
+19 15 m 4 2 l
+6 6 l
+0 -40 l
+-2 38 m 0 -38 l
+-8 0 m 17 0 l
+ 0 0 0 C
+CS [] 0 setdash M
+CS [] 0 setdash M
+219 219 M 2042 0 l
+0 1531 l
+219 1750 L
+219 219 L
+2042 0 l
+219 219 M 2042 0 l
+219 219 M 0 36 l
+-16 -120 m 203 135 F (1) T
+635 219 M 0 18 l
+243 -18 m 0 18 l
+173 -18 m 0 18 l
+134 -18 m 0 18 l
+110 -18 m 0 18 l
+92 -18 m 0 18 l
+80 -18 m 0 18 l
+71 -18 m 0 18 l
+63 -18 m 0 36 l
+-31 -120 m 1570 135 F (10) T
+2018 219 M 0 18 l
+243 -18 m 0 18 l
+219 1750 M 2042 0 l
+219 1750 M 0 -36 l
+416 36 m 0 -18 l
+243 18 m 0 -18 l
+173 18 m 0 -18 l
+134 18 m 0 -18 l
+110 18 m 0 -18 l
+92 18 m 0 -18 l
+80 18 m 0 -18 l
+71 18 m 0 -18 l
+63 18 m 0 -36 l
+417 36 m 0 -18 l
+243 18 m 0 -18 l
+219 219 M 0 1531 l
+219 219 M 34 0 l
+-125 -28 m 128 191 F (-1) T
+219 295 M 17 0 l
+-17 77 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 34 0 l
+66 574 M 66 574 F (-0.5) T
+219 678 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+-94 -28 m 159 957 F (0) T
+219 1061 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+97 1340 M 97 1340 F (0.5) T
+219 1444 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 34 0 l
+-94 -27 m 159 1723 F (1) T
+2261 219 M 0 1531 l
+2261 219 M -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -34 0 l
+CS [] 0 setdash M
+219 1750 M 30 -2 l
+29 -6 l
+28 -12 l
+28 -17 l
+25 -21 l
+24 -25 l
+22 -30 l
+20 -32 l
+18 -34 l
+16 -36 l
+15 -36 l
+13 -37 l
+12 -37 l
+11 -36 l
+10 -36 l
+11 -35 l
+10 -34 l
+12 -33 l
+14 -33 l
+15 -32 l
+18 -33 l
+20 -33 l
+23 -33 l
+24 -33 l
+25 -34 l
+27 -35 l
+28 -34 l
+28 -35 l
+29 -35 l
+29 -34 l
+29 -34 l
+30 -33 l
+29 -33 l
+30 -31 l
+30 -30 l
+30 -29 l
+29 -28 l
+30 -26 l
+30 -25 l
+30 -24 l
+30 -23 l
+30 -21 l
+30 -20 l
+30 -19 l
+30 -18 l
+30 -16 l
+30 -16 l
+30 -14 l
+30 -14 l
+29 -12 l
+30 -12 l
+30 -11 l
+30 -10 l
+30 -9 l
+30 -9 l
+30 -8 l
+30 -8 l
+30 -7 l
+30 -6 l
+30 -6 l
+30 -6 l
+30 -5 l
+30 -5 l
+30 -4 l
+30 -4 l
+30 -4 l
+30 -4 l
+29 -3 l
+30 -3 l
+30 -3 l
+30 -3 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -1 l
+23 -2 l
+219 1750 M 30 -5 l
+29 -16 l
+28 -28 l
+28 -37 l
+25 -44 l
+24 -49 l
+22 -51 l
+20 -51 l
+18 -48 l
+16 -45 l
+15 -41 l
+13 -34 l
+12 -27 l
+11 -18 l
+10 -7 l
+11 6 l
+10 19 l
+12 33 l
+14 47 l
+15 55 l
+18 59 l
+20 58 l
+23 51 l
+24 43 l
+25 34 l
+27 26 l
+28 20 l
+28 14 l
+29 10 l
+29 8 l
+29 5 l
+30 4 l
+29 3 l
+30 2 l
+30 1 l
+30 1 l
+29 1 l
+30 0 l
+30 0 l
+30 1 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+23 0 l
+442 1368 M CS [] 0 setdash M
+411 1313 M 411 1313 F (N) T
+CS [] 0 setdash M
+1122 602 M CS [] 0 setdash M
+1122 602 M 1122 602 F (W) T
+CS [] 0 setdash M
+stroke
+grestore
+showpage
+end
+%%Trailer
+%%EOF
+grestore
diff --git a/Build/source/utils/psutils/tests/plotv.eps b/Build/source/utils/psutils/tests/plotv.eps
new file mode 100644
index 00000000000..ddaa33f824b
--- /dev/null
+++ b/Build/source/utils/psutils/tests/plotv.eps
@@ -0,0 +1,318 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: SM
+%%DocumentNeededResources: font Helvetica
+%%LanguageLevel: 1
+%%Pages: 1
+%%BoundingBox: 0 15 500 384
+%%EndComments
+%%BeginProcSet: epsffit 1 0
+gsave
+-32.075 -150.943 translate
+0.943 0.943 scale
+%%EndProcSet
+
+%%Page: 1 1
+ 20 dict begin
+72 300 div dup scale
+1 setlinejoin 0 setlinecap
+/Helvetica findfont 55 scalefont setfont
+/B {CS newpath moveto} def
+/F {moveto 0 setlinecap} def
+/C {CS M 1 1 3 {pop 3 1 roll 255 div} for SET_COLOUR} def
+/CS {currentpoint stroke} def
+/CF {currentpoint eofill} def
+/L {lineto} def /l {rlineto} def /M {moveto} def /m {rmoveto} def
+/P {gsave 0 1 rlineto stroke grestore} def
+/T {currentlinecap exch 1 setlinecap show setlinecap} def
+errordict /nocurrentpoint {pop 0 0 M currentpoint} put
+/SET_COLOUR statusdict begin /processcolors where
+ {pop processcolors 1 gt} {false} ifelse
+ {(setrgbcolor)} {(pop pop pop)} ifelse cvx end def
+ 80 600 translate
+gsave
+CS [] 0 setdash M
+CS M 1 100 mul 72 div dup setlinewidth
+/P [ /gsave cvx 0 5 -1 roll .05 add dup -2 div 0 exch /rmoveto cvx /rlineto cvx /stroke cvx /grestore cvx ] cvx def
+ 0 0 0 C
+ 0 0 0 C
+CS [] 0 setdash M
+321 295 M CS [] 0 setdash M
+321 295 M 321 295 F (p=2 d=8) T
+CS [] 0 setdash M
+CS [] 0 setdash M
+ 0 0 0 C
+1957 148 M 10 27 m 0 -27 l
+1 27 m 0 -27 l
+0 15 m 2 6 l
+4 4 l
+4 2 l
+6 0 l
+2 -2 l
+0 -2 l
+-2 -2 l
+-2 2 l
+2 2 l
+-23 2 m 7 0 l
+-7 -27 m 13 0 l
+41 34 m 0 -34 l
+-18 17 m 35 0 l
+19 15 m 4 2 l
+6 6 l
+0 -40 l
+-2 38 m 0 -38 l
+-8 0 m 17 0 l
+ 0 0 0 C
+CS [] 0 setdash M
+CS [] 0 setdash M
+219 219 M 2042 0 l
+0 1531 l
+219 1750 L
+219 219 L
+2042 0 l
+219 219 M 2042 0 l
+219 219 M 0 36 l
+-16 -120 m 203 135 F (1) T
+635 219 M 0 18 l
+243 -18 m 0 18 l
+173 -18 m 0 18 l
+134 -18 m 0 18 l
+110 -18 m 0 18 l
+92 -18 m 0 18 l
+80 -18 m 0 18 l
+71 -18 m 0 18 l
+63 -18 m 0 36 l
+-31 -120 m 1570 135 F (10) T
+2018 219 M 0 18 l
+243 -18 m 0 18 l
+219 1750 M 2042 0 l
+219 1750 M 0 -36 l
+416 36 m 0 -18 l
+243 18 m 0 -18 l
+173 18 m 0 -18 l
+134 18 m 0 -18 l
+110 18 m 0 -18 l
+92 18 m 0 -18 l
+80 18 m 0 -18 l
+71 18 m 0 -18 l
+63 18 m 0 -36 l
+417 36 m 0 -18 l
+243 18 m 0 -18 l
+219 219 M 0 1531 l
+219 219 M 34 0 l
+-125 -28 m 128 191 F (-1) T
+219 295 M 17 0 l
+-17 77 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 34 0 l
+66 574 M 66 574 F (-0.5) T
+219 678 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+-94 -28 m 159 957 F (0) T
+219 1061 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 77 m 34 0 l
+97 1340 M 97 1340 F (0.5) T
+219 1444 M 17 0 l
+-17 77 m 17 0 l
+-17 76 m 17 0 l
+-17 77 m 17 0 l
+-17 76 m 34 0 l
+-94 -27 m 159 1723 F (1) T
+2261 219 M 0 1531 l
+2261 219 M -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 77 m -34 0 l
+34 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -17 0 l
+17 77 m -17 0 l
+17 76 m -34 0 l
+CS [] 0 setdash M
+219 1750 M 30 -2 l
+29 -6 l
+28 -12 l
+28 -17 l
+25 -21 l
+24 -25 l
+22 -30 l
+20 -32 l
+18 -34 l
+16 -36 l
+15 -36 l
+13 -37 l
+12 -37 l
+11 -36 l
+10 -36 l
+11 -35 l
+10 -34 l
+12 -33 l
+14 -33 l
+15 -32 l
+18 -33 l
+20 -33 l
+23 -33 l
+24 -33 l
+25 -34 l
+27 -35 l
+28 -34 l
+28 -35 l
+29 -35 l
+29 -34 l
+29 -34 l
+30 -33 l
+29 -33 l
+30 -31 l
+30 -30 l
+30 -29 l
+29 -28 l
+30 -26 l
+30 -25 l
+30 -24 l
+30 -23 l
+30 -21 l
+30 -20 l
+30 -19 l
+30 -18 l
+30 -16 l
+30 -16 l
+30 -14 l
+30 -14 l
+29 -12 l
+30 -12 l
+30 -11 l
+30 -10 l
+30 -9 l
+30 -9 l
+30 -8 l
+30 -8 l
+30 -7 l
+30 -6 l
+30 -6 l
+30 -6 l
+30 -5 l
+30 -5 l
+30 -4 l
+30 -4 l
+30 -4 l
+30 -4 l
+29 -3 l
+30 -3 l
+30 -3 l
+30 -3 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -2 l
+30 -1 l
+23 -2 l
+219 1750 M 30 -5 l
+29 -16 l
+28 -28 l
+28 -37 l
+25 -44 l
+24 -49 l
+22 -51 l
+20 -51 l
+18 -48 l
+16 -45 l
+15 -41 l
+13 -34 l
+12 -27 l
+11 -18 l
+10 -7 l
+11 6 l
+10 19 l
+12 33 l
+14 47 l
+15 55 l
+18 59 l
+20 58 l
+23 51 l
+24 43 l
+25 34 l
+27 26 l
+28 20 l
+28 14 l
+29 10 l
+29 8 l
+29 5 l
+30 4 l
+29 3 l
+30 2 l
+30 1 l
+30 1 l
+29 1 l
+30 0 l
+30 0 l
+30 1 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+29 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+30 0 l
+23 0 l
+442 1368 M CS [] 0 setdash M
+411 1313 M 411 1313 F (N) T
+CS [] 0 setdash M
+1122 602 M CS [] 0 setdash M
+1122 602 M 1122 602 F (W) T
+CS [] 0 setdash M
+stroke
+grestore
+showpage
+end
+%%Trailer
+%%EOF
+grestore